marclayui 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/theming/ThemeProvider.tsx","../src/utils/color.ts","../src/theming/presets.ts","../src/theming/ThemeToggle.tsx","../src/theming/ThemeMenu.tsx","../src/components/button/button.tsx","../src/components/kbd/kbd.tsx","../src/components/card/card.tsx","../src/components/input/input.tsx","../src/components/select/select.tsx","../src/components/checks/checks.tsx","../src/components/dropdown/dropdown.tsx","../src/components/range/range.tsx","../src/components/badge/badge.tsx","../src/components/alert/alert.tsx","../src/components/avatar/avatar.tsx","../src/components/progress/progress.tsx","../src/components/spinner/spinner.tsx","../src/components/skeleton/skeleton.tsx","../src/components/modal/modal.tsx","../src/components/tooltip/tooltip.tsx","../src/components/tabs/tabs.tsx","../src/components/accordion/accordion.tsx","../src/components/toast/toast.tsx","../src/components/navbar/navbar.tsx","../src/components/stat/stat.tsx","../src/components/divider/divider.tsx","../src/components/stack/stack.tsx"],"sourcesContent":["/**\n * MarclayUI — claymorphism + neumorphism React components\n * with light/dark theming and runtime color control.\n *\n * Docs: import \"marclayui/styles.css\" once in your root layout,\n * wrap your app in <MarclayProvider>, and use the components below.\n */\n\n// Theming\n// (themeInitScript is served separately: import { themeInitScript } from \"marclayui/theme-init\")\nexport {\n MarclayProvider,\n ThemeProvider,\n useTheme,\n} from \"./theming/ThemeProvider\";\nexport type {\n ThemeMode,\n ModePreference,\n ColorOverrides,\n MarclayProviderProps,\n} from \"./theming/ThemeProvider\";\nexport { PRESETS } from \"./theming/presets\";\nexport type { PresetName, PresetInfo } from \"./theming/presets\";\nexport { ThemeToggle } from \"./theming/ThemeToggle\";\nexport type { ThemeToggleProps } from \"./theming/ThemeToggle\";\nexport { ThemeMenu } from \"./theming/ThemeMenu\";\nexport type { ThemeMenuProps } from \"./theming/ThemeMenu\";\nexport { COLOR_SWATCHES } from \"./theming/presets\";\n\n// Components\nexport { Button, ButtonGroup } from \"./components/button/button\";\nexport type { ButtonProps, ButtonGroupProps, ButtonVariant, ButtonSize } from \"./components/button/button\";\n\nexport { Kbd } from \"./components/kbd/kbd\";\nexport type { KbdProps } from \"./components/kbd/kbd\";\n\nexport {\n Card,\n CardHeader,\n CardTitle,\n CardBody,\n CardFooter,\n} from \"./components/card/card\";\nexport type { CardProps } from \"./components/card/card\";\n\nexport { Input, Textarea } from \"./components/input/input\";\nexport type { InputProps, TextareaProps, FieldSize } from \"./components/input/input\";\n\nexport { Select } from \"./components/select/select\";\nexport type { SelectProps, SelectOption } from \"./components/select/select\";\n\nexport { Checkbox, CheckboxGroup, Radio, Switch } from \"./components/checks/checks\";\nexport type {\n CheckboxProps,\n CheckboxGroupProps,\n CheckboxGroupOption,\n RadioProps,\n SwitchProps,\n} from \"./components/checks/checks\";\n\nexport { Dropdown } from \"./components/dropdown/dropdown\";\nexport type { DropdownProps, DropdownItem } from \"./components/dropdown/dropdown\";\n\nexport { Range } from \"./components/range/range\";\nexport type { RangeProps } from \"./components/range/range\";\n\nexport { Badge } from \"./components/badge/badge\";\nexport type { BadgeProps, BadgeVariant } from \"./components/badge/badge\";\n\nexport { Alert } from \"./components/alert/alert\";\nexport type { AlertProps, AlertVariant } from \"./components/alert/alert\";\n\nexport { Avatar, AvatarGroup } from \"./components/avatar/avatar\";\nexport type { AvatarProps, AvatarGroupProps, AvatarSize, AvatarStatus } from \"./components/avatar/avatar\";\n\nexport { Progress } from \"./components/progress/progress\";\nexport type { ProgressProps, ProgressTone } from \"./components/progress/progress\";\n\nexport { Spinner } from \"./components/spinner/spinner\";\nexport type { SpinnerProps } from \"./components/spinner/spinner\";\n\nexport { Skeleton } from \"./components/skeleton/skeleton\";\nexport type { SkeletonProps } from \"./components/skeleton/skeleton\";\n\nexport { Modal } from \"./components/modal/modal\";\nexport type { ModalProps } from \"./components/modal/modal\";\n\nexport { Tooltip } from \"./components/tooltip/tooltip\";\nexport type { TooltipProps, TooltipPlacement } from \"./components/tooltip/tooltip\";\n\nexport { Tabs } from \"./components/tabs/tabs\";\nexport type { TabsProps, TabItem } from \"./components/tabs/tabs\";\n\nexport { Accordion } from \"./components/accordion/accordion\";\nexport type { AccordionProps, AccordionEntry } from \"./components/accordion/accordion\";\n\nexport { ToastProvider, useToast } from \"./components/toast/toast\";\nexport type {\n ToastOptions,\n ToastVariant,\n ToastProviderProps,\n ToastPlacement,\n} from \"./components/toast/toast\";\n\nexport { Navbar } from \"./components/navbar/navbar\";\nexport type { NavbarProps, NavLinkItem } from \"./components/navbar/navbar\";\n\nexport { Stat } from \"./components/stat/stat\";\nexport type { StatProps, StatTone } from \"./components/stat/stat\";\n\nexport { Divider } from \"./components/divider/divider\";\nexport type { DividerProps } from \"./components/divider/divider\";\n\nexport { Stack } from \"./components/stack/stack\";\nexport type { StackProps, StackGap } from \"./components/stack/stack\";\n","\"use client\";\n\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { alpha, darken, lighten, readableInk } from \"../utils/color\";\nimport { PRESET_STORAGE_KEY, type PresetName } from \"./presets\";\nexport type ThemeMode = \"light\" | \"dark\";\nexport type ModePreference = ThemeMode | \"system\";\n\n/** Colors you can override at runtime, like Bootstrap's SCSS variables but live. */\nexport interface ColorOverrides {\n primary?: string;\n secondary?: string;\n accent?: string;\n success?: string;\n danger?: string;\n warning?: string;\n info?: string;\n bg?: string;\n ink?: string;\n muted?: string;\n}\n\ninterface ThemeContextValue {\n /** Resolved mode after applying \"system\". */\n mode: ThemeMode;\n /** What the user asked for: \"light\" | \"dark\" | \"system\". */\n preference: ModePreference;\n setPreference: (p: ModePreference) => void;\n toggle: () => void;\n /** Active style preset — swaps the whole light+dark palette pair. */\n preset: PresetName;\n setPreset: (p: PresetName) => void;\n colors: ColorOverrides;\n setColors: (c: ColorOverrides) => void;\n resetColors: () => void;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\nconst STORAGE_KEY = \"mcl-theme\";\n\nconst TONES: Array<[keyof ColorOverrides, string, string]> = [\n [\"primary\", \"primary\", \"p\"],\n [\"secondary\", \"secondary\", \"s\"],\n [\"accent\", \"accent\", \"a\"],\n [\"success\", \"success\", \"c\"],\n [\"danger\", \"danger\", \"d\"],\n [\"warning\", \"warning\", \"w\"],\n [\"info\", \"info\", \"i\"],\n];\n\nfunction systemMode(): ThemeMode {\n if (typeof window === \"undefined\" || !window.matchMedia) return \"light\";\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n}\n\n/** Derives every CSS variable needed from a single base color. */\nfunction toneVars(base: string, dark: boolean): Record<string, string> {\n return {\n base: base,\n light: lighten(base, dark ? 0.24 : 0.16),\n deep: darken(base, 0.32),\n ink: readableInk(base),\n clay: `inset -5px -6px 10px ${alpha(darken(base, 0.68), dark ? 0.5 : 0.3)}, inset 5px 6px 10px ${alpha(\n lighten(base, 0.45),\n dark ? 0.38 : 0.5\n )}`,\n };\n}\n\nfunction colorVars(c: ColorOverrides, mode: ThemeMode): Record<string, string> {\n const vars: Record<string, string> = {};\n const dark = mode === \"dark\";\n\n for (const [key, name, short] of TONES) {\n const base = c[key];\n if (!base) continue;\n const t = toneVars(base, dark);\n vars[`--mcl-${name}`] = t.base;\n vars[`--mcl-${name}-2`] = t.light;\n vars[`--mcl-${name}-deep`] = t.deep;\n vars[`--mcl-${name}-ink`] = t.ink;\n vars[`--mcl-clay-${short}`] = t.clay;\n if (key === \"primary\") vars[\"--mcl-ring\"] = alpha(base, dark ? 0.45 : 0.4);\n }\n\n if (c.bg) {\n vars[\"--mcl-bg\"] = c.bg;\n vars[\"--mcl-sd\"] = alpha(darken(c.bg, dark ? 0.78 : 0.4), dark ? 0.72 : 0.6);\n vars[\"--mcl-sl\"] = alpha(lighten(c.bg, dark ? 0.3 : 0.9), dark ? 0.07 : 0.95);\n vars[\"--mcl-sheen\"] = alpha(lighten(c.bg, 0.9), dark ? 0.08 : 0.5);\n }\n if (c.ink) vars[\"--mcl-ink\"] = c.ink;\n if (c.muted) vars[\"--mcl-muted\"] = c.muted;\n return vars;\n}\n\n/** Tip: import { themeInitScript } from \"marclayui/theme-init\" — it lives in its own\n * Server-Component-safe module and the main bundle is marked \"use client\". */\n\nexport interface MarclayProviderProps {\n children: React.ReactNode;\n /** \"system\" follows the OS preference; persisted to localStorage. */\n defaultMode?: ModePreference;\n /** Style preset: \"clay\" (claymorphism) or \"neo\" (neumorphism). Persisted. */\n preset?: PresetName;\n /** Optional initial color overrides (react-bootstrap-style runtime theming). */\n colors?: ColorOverrides;\n}\n\nexport function MarclayProvider({\n children,\n defaultMode = \"system\",\n preset: initialPreset = \"clay\",\n colors: initialColors,\n}: MarclayProviderProps) {\n const [preference, setPreferenceState] = useState<ModePreference>(defaultMode);\n const [mode, setMode] = useState<ThemeMode>(\"light\");\n const [preset, setPresetState] = useState<PresetName>(initialPreset);\n const [colors, setColorsState] = useState<ColorOverrides>(initialColors ?? {});\n const appliedKeys = useRef<Set<string>>(new Set());\n\n // Sync with the no-flash init script / stored preferences.\n useEffect(() => {\n let stored: ModePreference | null = null;\n let storedPreset: string | null = null;\n try {\n stored = localStorage.getItem(STORAGE_KEY) as ModePreference | null;\n storedPreset = localStorage.getItem(PRESET_STORAGE_KEY);\n } catch {\n stored = null;\n }\n setPreferenceState(stored ?? defaultMode);\n if (storedPreset === \"clay\" || storedPreset === \"neo\") setPresetState(storedPreset);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Resolve preference -> concrete mode, and keep \"system\" live.\n useEffect(() => {\n const apply = () => {\n const m = preference === \"system\" ? systemMode() : preference;\n setMode(m);\n document.documentElement.setAttribute(\"data-theme\", m);\n };\n apply();\n if (preference !== \"system\" || !window.matchMedia) return;\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const onChange = () => apply();\n mq.addEventListener?.(\"change\", onChange);\n return () => mq.removeEventListener?.(\"change\", onChange);\n }, [preference]);\n\n // Apply the style preset (both palettes live in CSS under [data-preset]).\n useEffect(() => {\n if (preset === \"clay\") document.documentElement.removeAttribute(\"data-preset\");\n else document.documentElement.setAttribute(\"data-preset\", preset);\n }, [preset]);\n\n // Apply (and re-apply on mode change) the runtime color overrides.\n useEffect(() => {\n const root = document.documentElement;\n appliedKeys.current.forEach((k) => root.style.removeProperty(k));\n appliedKeys.current.clear();\n if (Object.keys(colors).length === 0) return;\n const vars = colorVars(colors, mode);\n for (const [k, v] of Object.entries(vars)) {\n root.style.setProperty(k, v);\n appliedKeys.current.add(k);\n }\n }, [colors, mode]);\n\n const setPreference = useCallback((p: ModePreference) => {\n setPreferenceState(p);\n try {\n localStorage.setItem(STORAGE_KEY, p);\n } catch {\n /* private mode — theme still applies for this session */\n }\n }, []);\n\n const toggle = useCallback(() => {\n setPreference(mode === \"dark\" ? \"light\" : \"dark\");\n }, [mode, setPreference]);\n\n const setPreset = useCallback((p: PresetName) => {\n setPresetState(p);\n try {\n localStorage.setItem(PRESET_STORAGE_KEY, p);\n } catch {\n /* private mode — preset still applies for this session */\n }\n // custom colors are tuned to the old preset; clear them so the new one shows cleanly\n setColorsState({});\n }, []);\n\n const setColors = useCallback((c: ColorOverrides) => {\n setColorsState((prev) => ({ ...prev, ...c }));\n }, []);\n\n const resetColors = useCallback(() => setColorsState({}), []);\n\n const value = useMemo(\n () => ({\n mode,\n preference,\n setPreference,\n toggle,\n preset,\n setPreset,\n colors,\n setColors,\n resetColors,\n }),\n [mode, preference, setPreference, toggle, preset, setPreset, colors, setColors, resetColors]\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\nexport function useTheme(): ThemeContextValue {\n const ctx = useContext(ThemeContext);\n if (!ctx) throw new Error(\"useTheme must be used inside <MarclayProvider>.\");\n return ctx;\n}\n\n/** Backwards-friendly alias. */\nexport const ThemeProvider = MarclayProvider;\n","/** Minimal color helpers used by MarclayProvider to derive shades and clay glows. */\n\nexport interface RGB {\n r: number;\n g: number;\n b: number;\n}\n\nconst WHITE: RGB = { r: 255, g: 255, b: 255 };\nconst BLACK: RGB = { r: 0, g: 0, b: 0 };\n\nfunction clamp(n: number, min = 0, max = 255): number {\n return Math.min(max, Math.max(min, n));\n}\n\nexport function parseHex(hex: string): RGB {\n let h = hex.trim().replace(\"#\", \"\");\n if (h.length === 3) h = h.split(\"\").map((c) => c + c).join(\"\");\n if (h.length !== 6 || /[^0-9a-f]/i.test(h)) return { ...BLACK };\n const n = parseInt(h, 16);\n return { r: (n >> 16) & 255, g: (n >> 8) & 255, b: n & 255 };\n}\n\nexport function toHex(c: RGB): string {\n const part = (v: number) => clamp(Math.round(v)).toString(16).padStart(2, \"0\");\n return `#${part(c.r)}${part(c.g)}${part(c.b)}`;\n}\n\nexport function rgba(c: RGB, a: number): string {\n return `rgba(${clamp(Math.round(c.r))}, ${clamp(Math.round(c.g))}, ${clamp(Math.round(c.b))}, ${a})`;\n}\n\nexport function mix(a: RGB, b: RGB, t: number): RGB {\n return {\n r: a.r + (b.r - a.r) * t,\n g: a.g + (b.g - a.g) * t,\n b: a.b + (b.b - a.b) * t,\n };\n}\n\nexport function lighten(hex: string, t: number): string {\n return toHex(mix(parseHex(hex), WHITE, t));\n}\n\nexport function darken(hex: string, t: number): string {\n return toHex(mix(parseHex(hex), BLACK, t));\n}\n\nexport function alpha(hex: string, a: number): string {\n return rgba(parseHex(hex), a);\n}\n\n/** Picks near-black or near-white text depending on the tone's luminance. */\nexport function readableInk(base: string): string {\n const { r, g, b } = mix(parseHex(base), WHITE, 0.12);\n const lum = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n return lum > 0.62 ? \"#3a2d20\" : \"#fff8f2\";\n}\n","/** Built-in style presets. Each preset defines its own light AND dark palette\n * (see styles/theme.css); switching a preset swaps both at once. */\nexport type PresetName = \"clay\" | \"neo\";\n\nexport interface PresetInfo {\n id: PresetName;\n label: string;\n description: string;\n}\n\nexport const PRESETS: PresetInfo[] = [\n {\n id: \"clay\",\n label: \"Claymorphism\",\n description: \"Warm terracotta clay, squircles, Quicksand — the signature MarclayUI look.\",\n },\n {\n id: \"neo\",\n label: \"Neumorphism\",\n description: \"Soft grey-blue extrusions, violet (light) / gold (dark) accent, circles, Poppins & Manrope.\",\n },\n];\n\nexport const PRESET_STORAGE_KEY = \"mcl-preset\";\n\n/** Quick primary-color swatches used by ThemeMenu and the docs playground. */\nexport const COLOR_SWATCHES: Array<{ name: string; color: string }> = [\n { name: \"Terra\", color: \"#e0785a\" },\n { name: \"Violet\", color: \"#7c5cff\" },\n { name: \"Ocean\", color: \"#4a90d9\" },\n { name: \"Forest\", color: \"#5a8a46\" },\n { name: \"Magenta\", color: \"#c74f9d\" },\n];\n","\"use client\";\n\nimport React from \"react\";\nimport { useTheme } from \"./ThemeProvider\";\n\nexport interface ThemeToggleProps {\n className?: string;\n}\n\n/** Raised clay pill that flips light/dark. Uses useTheme, so it must sit inside <MarclayProvider>. */\nexport function ThemeToggle({ className = \"\" }: ThemeToggleProps) {\n const { mode, toggle } = useTheme();\n const next = mode === \"dark\" ? \"light\" : \"dark\";\n return (\n <button\n type=\"button\"\n className={`mcl-theme-toggle ${className}`.trim()}\n onClick={toggle}\n aria-label={`Switch to ${next} mode`}\n title={`Switch to ${next} mode`}\n >\n <span className=\"mcl-theme-toggle-icon\" aria-hidden=\"true\">\n {mode === \"dark\" ? \"☀️\" : \"🌙\"}\n </span>\n </button>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { useTheme } from \"./ThemeProvider\";\nimport { COLOR_SWATCHES, PRESETS } from \"./presets\";\n\nconst MODE_OPTIONS = [\n { key: \"light\", label: \"Light\", icon: \"☀️\" },\n { key: \"system\", label: \"System\", icon: \"🖥️\" },\n { key: \"dark\", label: \"Dark\", icon: \"🌙\" },\n] as const;\n\nexport interface ThemeMenuProps {\n className?: string;\n}\n\n/** Navbar theme button that opens a customization panel: mode, style preset\n * and primary color swatches. Closes on Escape or outside click. */\nexport function ThemeMenu({ className = \"\" }: ThemeMenuProps) {\n const {\n mode,\n preference,\n setPreference,\n preset,\n setPreset,\n colors,\n setColors,\n resetColors,\n } = useTheme();\n const [open, setOpen] = useState(false);\n const [flipUp, setFlipUp] = useState(false);\n const shellRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n if (shellRef.current && !shellRef.current.contains(e.target as Node)) {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n document.addEventListener(\"mousedown\", onDown);\n document.addEventListener(\"keydown\", onKey);\n return () => {\n document.removeEventListener(\"mousedown\", onDown);\n document.removeEventListener(\"keydown\", onKey);\n };\n }, [open]);\n\n useEffect(() => {\n if (open) {\n panelRef.current?.focus();\n // flip above the trigger when there isn't room below (mobile)\n const t = window.setTimeout(() => {\n const trig = triggerRef.current;\n const panel = panelRef.current;\n if (!trig || !panel) return;\n const r = trig.getBoundingClientRect();\n setFlipUp(window.innerHeight - r.bottom < panel.offsetHeight + 12);\n }, 0);\n return () => window.clearTimeout(t);\n }\n setFlipUp(false);\n }, [open]);\n\n const activeSwatch = colors.primary?.toLowerCase();\n\n return (\n <div ref={shellRef} className={`mcl-theme-menu-shell ${className}`.trim()}>\n <button\n ref={triggerRef}\n type=\"button\"\n className=\"mcl-theme-toggle\"\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-label=\"Customize theme\"\n title=\"Customize theme\"\n onClick={() => setOpen((o) => !o)}\n >\n <span className=\"mcl-theme-toggle-icon\" aria-hidden=\"true\">\n {preference === \"system\" ? \"🖥️\" : mode === \"dark\" ? \"🌙\" : \"☀️\"}\n </span>\n </button>\n {open && (\n <div\n ref={panelRef}\n tabIndex={-1}\n role=\"dialog\"\n aria-label=\"Customize theme\"\n className={`mcl-theme-menu${flipUp ? \" mcl-theme-menu-up\" : \"\"}`}\n >\n <div className=\"mcl-theme-menu-section\">\n <span className=\"mcl-theme-menu-label\">Mode · {mode}</span>\n <div className=\"mcl-theme-menu-chips\">\n {MODE_OPTIONS.map((m) => (\n <button\n key={m.key}\n type=\"button\"\n className={`mcl-theme-menu-chip${preference === m.key ? \" mcl-theme-menu-chip-on\" : \"\"}`}\n aria-pressed={preference === m.key}\n onClick={() => setPreference(m.key)}\n >\n <span aria-hidden=\"true\">{m.icon}</span> {m.label}\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"mcl-theme-menu-section\">\n <span className=\"mcl-theme-menu-label\">Style preset</span>\n <div className=\"mcl-theme-menu-chips\">\n {PRESETS.map((p) => (\n <button\n key={p.id}\n type=\"button\"\n className={`mcl-theme-menu-chip${preset === p.id ? \" mcl-theme-menu-chip-on\" : \"\"}`}\n aria-pressed={preset === p.id}\n onClick={() => setPreset(p.id)}\n >\n {p.label}\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"mcl-theme-menu-section\">\n <span className=\"mcl-theme-menu-label\">Primary color</span>\n <div className=\"mcl-theme-menu-swatches\">\n {COLOR_SWATCHES.map((s) => (\n <button\n key={s.color}\n type=\"button\"\n className={`mcl-theme-menu-swatch${activeSwatch === s.color.toLowerCase() ? \" mcl-theme-menu-swatch-on\" : \"\"}`}\n style={{ background: s.color }}\n title={s.name}\n aria-label={`Primary ${s.name}`}\n aria-pressed={activeSwatch === s.color.toLowerCase()}\n onClick={() => setColors({ primary: s.color })}\n />\n ))}\n </div>\n <button type=\"button\" className=\"mcl-theme-menu-reset\" onClick={resetColors}>\n Reset colors\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n","import React from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"accent\" | \"soft\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** Shows a spinner and blocks interaction. */\n loading?: boolean;\n /** Stretch to fill the container width. */\n block?: boolean;\n /** Renders an anchor with button styling — use with Next `<Link>` styling or plain routes. */\n href?: string;\n}\n\nexport const Button = React.forwardRef<HTMLAnchorElement & HTMLButtonElement, ButtonProps>(\n function Button(\n {\n variant = \"soft\",\n size = \"md\",\n loading = false,\n block = false,\n className = \"\",\n disabled,\n children,\n type = \"button\",\n href,\n ...rest\n },\n ref\n ) {\n const cls = [\n \"mcl-btn\",\n `mcl-btn-${variant}`,\n `mcl-btn-${size}`,\n block ? \"mcl-btn-block\" : \"\",\n loading ? \"mcl-btn-loading\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n if (href) {\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n className={cls}\n aria-disabled={disabled || undefined}\n {...(rest as unknown as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {loading && <span className=\"mcl-btn-spinner\" aria-hidden=\"true\" />}\n <span className=\"mcl-btn-label\">{children}</span>\n </a>\n );\n }\n\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type={type}\n className={cls}\n disabled={disabled || loading}\n {...rest}\n >\n {loading && <span className=\"mcl-btn-spinner\" aria-hidden=\"true\" />}\n <span className=\"mcl-btn-label\">{children}</span>\n </button>\n );\n }\n);\n\nexport interface ButtonGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\n/** Segmented control: renders children Buttons as flat segments inside an\n * inset clay well — the active variant keeps its gradient. */\nexport function ButtonGroup({ children, className = \"\", ...rest }: ButtonGroupProps) {\n return (\n <div className={`mcl-btn-group ${className}`.trim()} role=\"group\" {...rest}>\n {children}\n </div>\n );\n}\n","import React from \"react\";\n\nexport interface KbdProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\n/** Small keyboard key cap — inset clay well with a pressed bottom edge. */\nexport function Kbd({ children, className = \"\", ...rest }: KbdProps) {\n return (\n <kbd className={`mcl-kbd ${className}`.trim()} {...rest}>\n {children}\n </kbd>\n );\n}\n","import React from \"react\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Lifts on hover — nice for clickable cards. */\n hover?: boolean;\n}\n\nexport function Card({ hover = false, className = \"\", ...rest }: CardProps) {\n return <div className={`mcl-card${hover ? \" mcl-card-hover\" : \"\"} ${className}`.trim()} {...rest} />;\n}\n\nexport function CardHeader({ className = \"\", ...rest }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={`mcl-card-header ${className}`.trim()} {...rest} />;\n}\n\nexport function CardTitle({ className = \"\", ...rest }: React.HTMLAttributes<HTMLHeadingElement>) {\n return <h3 className={`mcl-card-title ${className}`.trim()} {...rest} />;\n}\n\nexport function CardBody({ className = \"\", ...rest }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={`mcl-card-body ${className}`.trim()} {...rest} />;\n}\n\nexport function CardFooter({ className = \"\", ...rest }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={`mcl-card-footer ${className}`.trim()} {...rest} />;\n}\n","import React from \"react\";\n\nexport type FieldSize = \"sm\" | \"md\" | \"lg\";\n\ninterface FieldChrome {\n label?: React.ReactNode;\n hint?: React.ReactNode;\n error?: string;\n size?: FieldSize;\n block?: boolean;\n}\n\nfunction fieldClasses(base: string, size: FieldSize, invalid: boolean): string {\n return [base, `${base}-${size}`, invalid ? `${base}-invalid` : \"\"].filter(Boolean).join(\" \");\n}\n\nfunction Chrome({\n id,\n label,\n hint,\n error,\n block,\n children,\n}: { id: string; block?: boolean } & FieldChrome & { children: React.ReactNode }) {\n return (\n <div className={`mcl-field${block ? \" mcl-field-block\" : \"\"}`}>\n {label && (\n <label className=\"mcl-label\" htmlFor={id}>\n {label}\n </label>\n )}\n {children}\n {error ? (\n <div className=\"mcl-hint mcl-hint-error\" role=\"alert\">\n {error}\n </div>\n ) : hint ? (\n <div className=\"mcl-hint\">{hint}</div>\n ) : null}\n </div>\n );\n}\n\nexport interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">, FieldChrome {}\n\nexport function Input({ label, hint, error, size = \"md\", block = false, className = \"\", id, ...rest }: InputProps) {\n const autoId = React.useId();\n const inputId = id ?? autoId;\n const input = (\n <input\n id={inputId}\n className={`${fieldClasses(\"mcl-input\", size, !!error)}${block ? \" mcl-input-block\" : \"\"} ${className}`.trim()}\n aria-invalid={error ? true : undefined}\n {...rest}\n />\n );\n if (!label && !hint && !error) return input;\n return (\n <Chrome id={inputId} label={label} hint={hint} error={error} block={block}>\n {input}\n </Chrome>\n );\n}\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement>, FieldChrome {}\n\nexport function Textarea({ label, hint, error, size = \"md\", block = true, className = \"\", id, rows = 4, ...rest }: TextareaProps) {\n const autoId = React.useId();\n const inputId = id ?? autoId;\n const el = (\n <textarea\n id={inputId}\n rows={rows}\n className={`${fieldClasses(\"mcl-textarea\", size, !!error)} ${className}`.trim()}\n aria-invalid={error ? true : undefined}\n {...rest}\n />\n );\n if (!label && !hint && !error) return el;\n return (\n <Chrome id={inputId} label={label} hint={hint} error={error} block>\n {el}\n </Chrome>\n );\n}\n","import React from \"react\";\n\nexport interface SelectOption {\n value: string;\n label: string;\n}\n\nexport interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, \"size\"> {\n label?: React.ReactNode;\n hint?: React.ReactNode;\n error?: string;\n size?: \"sm\" | \"md\" | \"lg\";\n /** Convenience over children: [{ value, label }] */\n options?: SelectOption[];\n placeholder?: string;\n}\n\nexport function Select({\n label,\n hint,\n error,\n size = \"md\",\n options,\n placeholder,\n className = \"\",\n id,\n children,\n ...rest\n}: SelectProps) {\n const autoId = React.useId();\n const selectId = id ?? autoId;\n const select = (\n <span className={`mcl-select-shell ${className}`.trim()}>\n <select\n id={selectId}\n className={`mcl-select mcl-select-${size}${error ? \" mcl-select-invalid\" : \"\"}`}\n aria-invalid={error ? true : undefined}\n {...rest}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options?.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n {children}\n </select>\n </span>\n );\n if (!label && !hint && !error) return select;\n return (\n <div className=\"mcl-field\">\n {label && (\n <label className=\"mcl-label\" htmlFor={selectId}>\n {label}\n </label>\n )}\n {select}\n {error ? (\n <div className=\"mcl-hint mcl-hint-error\" role=\"alert\">\n {error}\n </div>\n ) : hint ? (\n <div className=\"mcl-hint\">{hint}</div>\n ) : null}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\n\nfunction withLabel(input: React.ReactNode, label: React.ReactNode | undefined) {\n if (label === undefined || label === null) return input;\n return (\n <label className=\"mcl-check\">\n {input}\n <span className=\"mcl-check-label\">{label}</span>\n </label>\n );\n}\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n label?: React.ReactNode;\n /** Shows a dash instead of a tick — the classic \"some children selected\" state. */\n indeterminate?: boolean;\n}\n\nexport function Checkbox({ label, indeterminate = false, className = \"\", ...rest }: CheckboxProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (inputRef.current) inputRef.current.indeterminate = indeterminate;\n }, [indeterminate]);\n\n return withLabel(\n <>\n <input ref={inputRef} type=\"checkbox\" className={`mcl-check-input ${className}`.trim()} {...rest} />\n <span className=\"mcl-check-box\" aria-hidden=\"true\" />\n </>,\n label\n );\n}\n\nexport interface CheckboxGroupOption {\n value: string;\n label: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface CheckboxGroupProps {\n options: CheckboxGroupOption[];\n /** Controlled selected values. */\n value?: string[];\n /** Uncontrolled initial selection. */\n defaultValue?: string[];\n onChange?: (values: string[]) => void;\n /** Renders a parent \"select all\" checkbox with an indeterminate state. */\n selectAll?: boolean;\n selectAllLabel?: React.ReactNode;\n label?: React.ReactNode;\n disabled?: boolean;\n className?: string;\n}\n\nexport function CheckboxGroup({\n options,\n value,\n defaultValue = [],\n onChange,\n selectAll = false,\n selectAllLabel = \"Select all\",\n label,\n disabled = false,\n className = \"\",\n}: CheckboxGroupProps) {\n const [inner, setInner] = useState<string[]>(defaultValue);\n const allRef = useRef<HTMLInputElement>(null);\n const selected = value ?? inner;\n\n const enabled = options.filter((o) => !o.disabled).map((o) => o.value);\n const allOn = enabled.length > 0 && enabled.every((v) => selected.includes(v));\n const someOn = enabled.some((v) => selected.includes(v));\n\n useEffect(() => {\n if (allRef.current) allRef.current.indeterminate = someOn && !allOn;\n }, [someOn, allOn]);\n\n const commit = (next: string[]) => {\n setInner(next);\n onChange?.(next);\n };\n\n const toggle = (v: string) => {\n commit(selected.includes(v) ? selected.filter((x) => x !== v) : [...selected, v]);\n };\n\n const toggleAll = () => {\n commit(allOn ? selected.filter((v) => !enabled.includes(v)) : Array.from(new Set([...selected, ...enabled])));\n };\n\n return (\n <div\n className={`mcl-check-group ${className}`.trim()}\n role=\"group\"\n aria-label={typeof label === \"string\" ? label : undefined}\n >\n {label && <span className=\"mcl-label\">{label}</span>}\n {selectAll && (\n <label className={`mcl-check mcl-check-group-all${disabled ? \" mcl-check-disabled\" : \"\"}`}>\n <input\n ref={allRef}\n type=\"checkbox\"\n className=\"mcl-check-input\"\n checked={allOn}\n disabled={disabled}\n onChange={toggleAll}\n />\n <span className=\"mcl-check-box\" aria-hidden=\"true\" />\n <span className=\"mcl-check-label\">{selectAllLabel}</span>\n </label>\n )}\n <div className=\"mcl-check-group-items\">\n {options.map((o) => (\n <label key={o.value} className={`mcl-check${o.disabled || disabled ? \" mcl-check-disabled\" : \"\"}`}>\n <input\n type=\"checkbox\"\n className=\"mcl-check-input\"\n checked={selected.includes(o.value)}\n disabled={o.disabled || disabled}\n onChange={() => toggle(o.value)}\n />\n <span className=\"mcl-check-box\" aria-hidden=\"true\" />\n <span className=\"mcl-check-label\">{o.label}</span>\n </label>\n ))}\n </div>\n </div>\n );\n}\n\nexport interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: React.ReactNode;\n}\n\nexport function Radio({ label, className = \"\", ...rest }: RadioProps) {\n return withLabel(\n <>\n <input type=\"radio\" className={`mcl-check-input ${className}`.trim()} {...rest} />\n <span className=\"mcl-check-box mcl-radio-box\" aria-hidden=\"true\" />\n </>,\n label\n );\n}\n\nexport interface SwitchProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: React.ReactNode;\n}\n\nexport function Switch({ label, className = \"\", ...rest }: SwitchProps) {\n return withLabel(\n <>\n <input\n type=\"checkbox\"\n role=\"switch\"\n className={`mcl-switch-input ${className}`.trim()}\n {...rest}\n />\n <span className=\"mcl-switch-track\" aria-hidden=\"true\">\n <span className=\"mcl-switch-knob\" />\n </span>\n </>,\n label\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\n\nexport interface DropdownItem {\n value: string;\n label: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface DropdownProps {\n items: DropdownItem[];\n /** Controlled selected value (single) or values (multiple). */\n value?: string | string[];\n /** Uncontrolled initial selection. */\n defaultValue?: string | string[];\n onChange?: (value: string | string[]) => void;\n /** Allow several selections — the menu shows checkboxes. */\n multiple?: boolean;\n placeholder?: string;\n label?: React.ReactNode;\n hint?: React.ReactNode;\n size?: \"sm\" | \"md\" | \"lg\";\n /** Stretch trigger and menu to full width. */\n block?: boolean;\n disabled?: boolean;\n className?: string;\n}\n\n/** Custom dropdown menu — renders its own popup listbox (no native browser\n * option menu), with full keyboard support: open with Enter/Space/ArrowDown,\n * navigate with the arrows, select with Enter/Space, close with Escape. */\nexport function Dropdown({\n items,\n value,\n defaultValue,\n onChange,\n multiple = false,\n placeholder = \"Select…\",\n label,\n hint,\n size = \"md\",\n block = false,\n disabled = false,\n className = \"\",\n}: DropdownProps) {\n const [open, setOpen] = useState(false);\n const [inner, setInner] = useState<string | string[] | undefined>(defaultValue);\n const [active, setActive] = useState(0);\n const [flip, setFlip] = useState<{ up: boolean; left: boolean }>({ up: false, left: false });\n const shellRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const current = value ?? inner;\n const selectedValues: string[] = multiple\n ? Array.isArray(current)\n ? current\n : []\n : [];\n const singleValue = !multiple && !Array.isArray(current) ? current : undefined;\n\n const labelFor = (v: string) => items.find((i) => i.value === v)?.label;\n\n let triggerText: React.ReactNode = placeholder;\n if (multiple) {\n if (selectedValues.length > 0) {\n const labels = items.filter((i) => selectedValues.includes(i.value)).map((i) => i.label);\n triggerText = labels.length <= 2 ? labels.join(\", \") : `${labels.length} selected`;\n }\n } else if (singleValue !== undefined) {\n triggerText = labelFor(singleValue) ?? singleValue;\n }\n const hasSelection = multiple\n ? selectedValues.length > 0\n : singleValue !== undefined && singleValue !== \"\";\n\n // close on outside click (returns focus to the trigger)\n useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n if (shellRef.current && !shellRef.current.contains(e.target as Node)) {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n document.addEventListener(\"mousedown\", onDown);\n return () => document.removeEventListener(\"mousedown\", onDown);\n }, [open]);\n\n // focus the menu when it opens, park the highlight on the selection\n useEffect(() => {\n if (!open) return;\n const firstSelected = multiple\n ? items.findIndex((i) => selectedValues.includes(i.value))\n : items.findIndex((i) => i.value === singleValue);\n const firstEnabled = items.findIndex((i) => !i.disabled);\n const idx = firstSelected >= 0 ? firstSelected : Math.max(firstEnabled, 0);\n setActive(idx);\n menuRef.current?.focus();\n // scroll the highlighted option into view once the menu has laid out\n const t = window.setTimeout(() => {\n const el = menuRef.current?.children[idx] as HTMLElement | undefined;\n if (el && typeof el.scrollIntoView === \"function\") el.scrollIntoView({ block: \"nearest\" });\n }, 0);\n return () => window.clearTimeout(t);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n // flip up / clamp horizontally when the menu would leave the viewport\n useEffect(() => {\n if (!open) return;\n const t = window.setTimeout(() => {\n const trig = triggerRef.current;\n const menu = menuRef.current;\n if (!trig || !menu) return;\n const r = trig.getBoundingClientRect();\n const m = menu.getBoundingClientRect();\n const below = window.innerHeight - r.bottom;\n const above = r.top;\n setFlip({\n up: below < m.height + 12 && above > below,\n left: r.left + Math.max(m.width, r.width) > window.innerWidth - 12,\n });\n }, 0);\n return () => window.clearTimeout(t);\n }, [open]);\n\n const close = (refocus = true) => {\n setOpen(false);\n if (refocus) triggerRef.current?.focus();\n };\n\n const commit = (v: string) => {\n if (multiple) {\n const next = selectedValues.includes(v)\n ? selectedValues.filter((x) => x !== v)\n : [...selectedValues, v];\n setInner(next);\n onChange?.(next);\n } else {\n setInner(v);\n onChange?.(v);\n close();\n }\n };\n\n const move = (dir: 1 | -1) => {\n const enabled = items.map((it, i) => (it.disabled ? -1 : i)).filter((i) => i >= 0);\n if (enabled.length === 0) return;\n const pos = enabled.indexOf(active);\n const next = enabled[(pos + dir + enabled.length) % enabled.length];\n setActive(next);\n const el = menuRef.current?.children[next] as HTMLElement | undefined;\n if (el && typeof el.scrollIntoView === \"function\") el.scrollIntoView({ block: \"nearest\" });\n };\n\n const onMenuKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n close();\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n move(1);\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n move(-1);\n } else if (e.key === \"Home\") {\n e.preventDefault();\n const first = items.findIndex((i) => !i.disabled);\n if (first >= 0) setActive(first);\n } else if (e.key === \"End\") {\n e.preventDefault();\n const last = items.map((i, idx) => (i.disabled ? -1 : idx)).filter((i) => i >= 0).pop();\n if (last !== undefined) setActive(last);\n } else if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n const it = items[active];\n if (it && !it.disabled) commit(it.value);\n } else if (e.key === \"Tab\") {\n setOpen(false);\n }\n };\n\n const onTriggerKeyDown = (e: React.KeyboardEvent) => {\n if (!open && e.key === \"ArrowDown\") {\n e.preventDefault();\n setOpen(true);\n }\n };\n\n return (\n <div className={`mcl-field${block ? \" mcl-field-block\" : \"\"} ${className}`.trim()}>\n {label && <span className=\"mcl-label\">{label}</span>}\n <div\n ref={shellRef}\n className={`mcl-dropdown-shell${block ? \" mcl-dropdown-block\" : \"\"}`}\n >\n <button\n ref={triggerRef}\n type=\"button\"\n className={`mcl-dropdown-trigger mcl-dropdown-${size}`}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n disabled={disabled}\n onClick={() => setOpen((o) => !o)}\n onKeyDown={onTriggerKeyDown}\n >\n <span className={`mcl-dropdown-value${hasSelection ? \"\" : \" mcl-dropdown-placeholder\"}`}>\n {triggerText}\n </span>\n <span className=\"mcl-dropdown-chevron\" aria-hidden=\"true\" />\n </button>\n {open && (\n <div\n ref={menuRef}\n tabIndex={-1}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n className={[\n \"mcl-dropdown-menu\",\n \"mcl-scroll\",\n `mcl-dropdown-${size}`,\n flip.up ? \"mcl-dropdown-menu-up\" : \"\",\n flip.left ? \"mcl-dropdown-menu-left\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n onKeyDown={onMenuKeyDown}\n >\n {items.map((it, i) => {\n const selected = multiple ? selectedValues.includes(it.value) : singleValue === it.value;\n return (\n <div\n key={it.value}\n role=\"option\"\n aria-selected={selected}\n aria-disabled={it.disabled || undefined}\n className={[\n \"mcl-dropdown-item\",\n i === active ? \"mcl-dropdown-item-active\" : \"\",\n selected ? \"mcl-dropdown-item-selected\" : \"\",\n it.disabled ? \"mcl-dropdown-item-disabled\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n onMouseEnter={() => setActive(i)}\n onClick={() => {\n if (!it.disabled) commit(it.value);\n }}\n >\n {multiple && <span className=\"mcl-dropdown-check\" aria-hidden=\"true\" />}\n <span className=\"mcl-dropdown-item-label\">{it.label}</span>\n {!multiple && selected && (\n <span className=\"mcl-dropdown-tick\" aria-hidden=\"true\">\n ✓\n </span>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n {hint && <div className=\"mcl-hint\">{hint}</div>}\n </div>\n );\n}\n","import React, { useState } from \"react\";\n\nexport interface RangeProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n label?: React.ReactNode;\n /** Helper text under the slider. */\n hint?: React.ReactNode;\n /** Shows the current value on the right of the label. Works with both\n * controlled `value` and uncontrolled `defaultValue`. */\n showValue?: boolean;\n}\n\nexport function Range({\n label,\n hint,\n showValue = false,\n value,\n defaultValue,\n onChange,\n className = \"\",\n id,\n ...rest\n}: RangeProps) {\n const autoId = React.useId();\n const inputId = id ?? autoId;\n const isControlled = value !== undefined;\n const [inner, setInner] = useState<string>(() =>\n value !== undefined ? String(value) : defaultValue !== undefined ? String(defaultValue) : \"0\"\n );\n const current = isControlled ? String(value) : inner;\n\n const input = (\n <input\n id={inputId}\n type=\"range\"\n className={`mcl-range ${className}`.trim()}\n value={isControlled ? value : inner}\n onChange={(e) => {\n if (!isControlled) setInner(e.target.value);\n onChange?.(e);\n }}\n {...rest}\n />\n );\n\n const field = (\n <div className=\"mcl-field\">\n {label && (\n <label className=\"mcl-range-head\" htmlFor={inputId}>\n <span className=\"mcl-label\">{label}</span>\n {showValue && <span className=\"mcl-range-value\">{current}</span>}\n </label>\n )}\n {input}\n {hint && <div className=\"mcl-hint\">{hint}</div>}\n </div>\n );\n\n if (!label && !hint) return input;\n return field;\n}\n","import React from \"react\";\n\nexport type BadgeVariant =\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"success\"\n | \"danger\"\n | \"warning\"\n | \"info\"\n | \"neutral\";\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: BadgeVariant;\n /** Solid = filled clay gradient; soft (default) = inset well with colored text. */\n solid?: boolean;\n}\n\nexport function Badge({ variant = \"neutral\", solid = false, className = \"\", ...rest }: BadgeProps) {\n return (\n <span\n className={`mcl-badge mcl-badge-${variant}${solid ? \" mcl-badge-solid\" : \"\"} ${className}`.trim()}\n {...rest}\n />\n );\n}\n","import React from \"react\";\n\nexport type AlertVariant = \"success\" | \"danger\" | \"warning\" | \"info\";\n\nconst DEFAULT_ICONS: Record<AlertVariant, string> = {\n success: \"✓\",\n danger: \"✕\",\n warning: \"!\",\n info: \"i\",\n};\n\nexport interface AlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n variant?: AlertVariant;\n title?: React.ReactNode;\n /** Overrides the variant's default glyph. */\n icon?: React.ReactNode;\n onClose?: () => void;\n}\n\nexport function Alert({\n variant = \"info\",\n title,\n icon,\n onClose,\n className = \"\",\n children,\n ...rest\n}: AlertProps) {\n return (\n <div className={`mcl-alert mcl-alert-${variant} ${className}`.trim()} role=\"alert\" {...rest}>\n <span className=\"mcl-alert-icon\" aria-hidden=\"true\">\n {icon ?? DEFAULT_ICONS[variant]}\n </span>\n <div className=\"mcl-alert-content\">\n {title && <p className=\"mcl-alert-title\">{title}</p>}\n {children}\n </div>\n {onClose && (\n <button type=\"button\" className=\"mcl-alert-close\" onClick={onClose} aria-label=\"Dismiss\">\n ✕\n </button>\n )}\n </div>\n );\n}\n","import React from \"react\";\n\nexport type AvatarSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type AvatarStatus = \"online\" | \"offline\" | \"busy\";\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLSpanElement> {\n src?: string;\n alt?: string;\n /** Used to derive initials when no src is given. */\n name?: string;\n size?: AvatarSize;\n status?: AvatarStatus;\n /** Filled clay gradient look. */\n gradient?: boolean;\n}\n\nfunction initialsOf(name: string): string {\n const parts = name.trim().split(/\\s+/).slice(0, 2);\n return parts.map((p) => p[0]?.toUpperCase() ?? \"\").join(\"\");\n}\n\nexport function Avatar({\n src,\n alt,\n name,\n size = \"md\",\n status,\n gradient = false,\n className = \"\",\n children,\n ...rest\n}: AvatarProps) {\n const label = alt ?? (name ? `${name}'s avatar` : \"avatar\");\n return (\n <span\n className={`mcl-avatar mcl-avatar-${size}${gradient ? \" mcl-avatar-gradient\" : \"\"} ${className}`.trim()}\n role=\"img\"\n aria-label={label}\n {...rest}\n >\n {src ? (\n <img src={src} alt=\"\" className=\"mcl-avatar-img\" loading=\"lazy\" decoding=\"async\" />\n ) : (\n (children ?? initialsOf(name ?? \"??\") ?? \"\")\n )}\n {status && <span className={`mcl-avatar-status mcl-avatar-status-${status}`} aria-hidden=\"true\" />}\n </span>\n );\n}\n\nexport type AvatarGroupProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport function AvatarGroup({ className = \"\", children, ...rest }: AvatarGroupProps) {\n return (\n <span className={`mcl-avatar-group ${className}`.trim()} {...rest}>\n {children}\n </span>\n );\n}\n","import React from \"react\";\n\nexport type ProgressTone = \"primary\" | \"secondary\" | \"accent\" | \"danger\";\n\nexport interface ProgressProps {\n value?: number;\n max?: number;\n /** \"indeterminate\" animates a sliding chunk. */\n tone?: ProgressTone;\n size?: \"sm\" | \"md\" | \"lg\";\n label?: React.ReactNode;\n showValue?: boolean;\n indeterminate?: boolean;\n className?: string;\n}\n\nexport function Progress({\n value = 0,\n max = 100,\n tone = \"primary\",\n size = \"md\",\n label,\n showValue = false,\n indeterminate = false,\n className = \"\",\n}: ProgressProps) {\n const pct = Math.max(0, Math.min(100, (value / max) * 100));\n return (\n <div\n className={`mcl-progress mcl-progress-${size} ${className}`.trim()}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={indeterminate ? undefined : Math.round(pct)}\n >\n {(label || showValue) && (\n <div className=\"mcl-progress-head\">\n {label && <span>{label}</span>}\n {showValue && <span className=\"mcl-progress-value\">{indeterminate ? \"…\" : `${Math.round(pct)}%`}</span>}\n </div>\n )}\n <div className=\"mcl-progress-track\">\n <span\n className={`mcl-progress-fill mcl-progress-fill-${tone}${indeterminate ? \" mcl-progress-fill-indeterminate\" : \"\"}`}\n style={indeterminate ? undefined : { width: `${pct}%` }}\n />\n </div>\n </div>\n );\n}\n","import React from \"react\";\n\nexport interface SpinnerProps {\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nexport function Spinner({ size = \"md\", className = \"\" }: SpinnerProps) {\n return <span className={`mcl-spinner mcl-spinner-${size} ${className}`.trim()} role=\"status\" aria-label=\"Loading\" />;\n}\n","import React from \"react\";\n\nexport interface SkeletonProps {\n variant?: \"text\" | \"circle\" | \"rect\";\n width?: number | string;\n height?: number | string;\n /** Render several text lines; the last one is shorter, like real copy. */\n count?: number;\n className?: string;\n}\n\nexport function Skeleton({ variant = \"text\", width, height, count = 1, className = \"\" }: SkeletonProps) {\n const lines = variant === \"text\" ? Math.max(1, count) : 1;\n const style = (last: boolean): React.CSSProperties => ({\n width: width ?? (variant === \"circle\" ? 48 : \"100%\"),\n height: height ?? (variant === \"text\" ? 14 : variant === \"circle\" ? 48 : 96),\n ...(variant === \"text\" && count > 1 && last ? { width: \"62%\" } : null),\n });\n if (lines === 1) {\n return (\n <span\n className={`mcl-skeleton mcl-skeleton-${variant} ${className}`.trim()}\n style={style(true)}\n aria-hidden=\"true\"\n />\n );\n }\n return (\n <span className={`mcl-skeleton-lines ${className}`.trim()} aria-hidden=\"true\">\n {Array.from({ length: lines }, (_, i) => (\n <span key={i} className=\"mcl-skeleton mcl-skeleton-text\" style={style(i === lines - 1)} />\n ))}\n </span>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useId, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n title?: React.ReactNode;\n footer?: React.ReactNode;\n size?: \"sm\" | \"md\" | \"lg\";\n closeOnBackdrop?: boolean;\n closeOnEsc?: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nconst FOCUSABLE =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport function Modal({\n open,\n onClose,\n title,\n footer,\n size = \"md\",\n closeOnBackdrop = true,\n closeOnEsc = true,\n children,\n className = \"\",\n}: ModalProps) {\n const [mounted, setMounted] = useState(false);\n const panelRef = useRef<HTMLDivElement>(null);\n const lastFocusedRef = useRef<HTMLElement | null>(null);\n const titleId = useId();\n\n useEffect(() => setMounted(true), []);\n\n useEffect(() => {\n if (!open) return;\n lastFocusedRef.current = document.activeElement as HTMLElement | null;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\" && closeOnEsc) onClose();\n };\n document.addEventListener(\"keydown\", onKey);\n const prevOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n panelRef.current?.focus();\n return () => {\n document.removeEventListener(\"keydown\", onKey);\n document.body.style.overflow = prevOverflow;\n lastFocusedRef.current?.focus?.();\n };\n }, [open, onClose, closeOnEsc]);\n\n // keep Tab cycling inside the dialog\n const trapFocus = (e: React.KeyboardEvent) => {\n if (e.key !== \"Tab\" || !panelRef.current) return;\n const focusable = Array.from(panelRef.current.querySelectorAll<HTMLElement>(FOCUSABLE)).filter(\n (el) => el.offsetParent !== null\n );\n if (focusable.length === 0) {\n e.preventDefault();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = document.activeElement as HTMLElement | null;\n if (e.shiftKey && (active === first || !panelRef.current.contains(active))) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && active === last) {\n e.preventDefault();\n first.focus();\n }\n };\n\n if (!open || !mounted) return null;\n\n return createPortal(\n <div\n className=\"mcl-modal-overlay\"\n onMouseDown={(e) => {\n if (e.target === e.currentTarget && closeOnBackdrop) onClose();\n }}\n >\n <div\n ref={panelRef}\n className={`mcl-modal mcl-modal-${size} ${className}`.trim()}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n tabIndex={-1}\n onKeyDown={trapFocus}\n >\n <div className=\"mcl-modal-header\">\n {title ? (\n <h3 id={titleId} className=\"mcl-modal-title\">\n {title}\n </h3>\n ) : (\n <span />\n )}\n <button type=\"button\" className=\"mcl-modal-close\" onClick={onClose} aria-label=\"Close dialog\">\n ✕\n </button>\n </div>\n <div className=\"mcl-modal-body mcl-scroll\">{children}</div>\n {footer && <div className=\"mcl-modal-footer\">{footer}</div>}\n </div>\n </div>,\n document.body\n );\n}\n","import React from \"react\";\n\nexport type TooltipPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface TooltipProps {\n label: string;\n placement?: TooltipPlacement;\n className?: string;\n children: React.ReactNode;\n}\n\n/** CSS-only tooltip: shows on hover and when the wrapped control has keyboard focus. */\nexport function Tooltip({ label, placement = \"top\", className = \"\", children }: TooltipProps) {\n return (\n <span className={`mcl-tooltip mcl-tooltip-${placement} ${className}`.trim()} data-mcl-tooltip={label}>\n {children}\n </span>\n );\n}\n","\"use client\";\n\nimport React, { useId, useRef, useState } from \"react\";\n\nexport interface TabItem {\n key: string;\n label: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface TabsProps {\n items: TabItem[];\n /** Controlled active index. */\n value?: number;\n onChange?: (index: number) => void;\n className?: string;\n}\n\nexport function Tabs({ items, value, onChange, className = \"\" }: TabsProps) {\n const uid = useId();\n const [inner, setInner] = useState(0);\n const active = value ?? inner;\n const tabRefs = useRef<Array<HTMLButtonElement | null>>([]);\n\n const select = (i: number) => {\n if (items[i]?.disabled) return;\n setInner(i);\n onChange?.(i);\n };\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n const focusable = items.map((it, i) => (it.disabled ? -1 : i)).filter((i) => i >= 0);\n let next = -1;\n if (e.key === \"ArrowRight\") next = focusable[(focusable.indexOf(active) + 1) % focusable.length];\n if (e.key === \"ArrowLeft\") next = focusable[(focusable.indexOf(active) - 1 + focusable.length) % focusable.length];\n if (e.key === \"Home\") next = focusable[0];\n if (e.key === \"End\") next = focusable[focusable.length - 1];\n if (next >= 0 && next !== active) {\n e.preventDefault();\n select(next);\n tabRefs.current[next]?.focus();\n }\n };\n\n const current = items[active];\n\n return (\n <div className={`mcl-tabs ${className}`.trim()}>\n <div className=\"mcl-tablist\" role=\"tablist\" aria-label=\"Tabs\" onKeyDown={onKeyDown}>\n {items.map((it, i) => (\n <button\n key={it.key}\n ref={(el) => {\n tabRefs.current[i] = el;\n }}\n type=\"button\"\n role=\"tab\"\n id={`mcl-tab-${uid}-${it.key}`}\n aria-selected={i === active}\n aria-controls={`mcl-panel-${uid}-${it.key}`}\n tabIndex={i === active ? 0 : -1}\n className={`mcl-tab${i === active ? \" mcl-tab-active\" : \"\"}`}\n disabled={it.disabled}\n onClick={() => select(i)}\n >\n {it.label}\n </button>\n ))}\n </div>\n {current && (\n <div\n key={current.key}\n role=\"tabpanel\"\n id={`mcl-panel-${uid}-${current.key}`}\n aria-labelledby={`mcl-tab-${uid}-${current.key}`}\n className=\"mcl-tabpanel\"\n >\n {current.content}\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useId, useRef, useState } from \"react\";\n\nexport interface AccordionEntry {\n title: React.ReactNode;\n content: React.ReactNode;\n}\n\nexport interface AccordionProps {\n items: AccordionEntry[];\n /** Index opened initially. */\n defaultOpen?: number;\n /** When false, several panels can stay open at once. */\n exclusive?: boolean;\n className?: string;\n}\n\nexport function Accordion({ items, defaultOpen = -1, exclusive = true, className = \"\" }: AccordionProps) {\n const uid = useId();\n const [openSet, setOpenSet] = useState<Set<number>>(\n () => new Set(defaultOpen >= 0 ? [defaultOpen] : [])\n );\n const panelRefs = useRef<Array<HTMLDivElement | null>>([]);\n const [heights, setHeights] = useState<number[]>([]);\n\n const measure = () => {\n setHeights(items.map((_, i) => panelRefs.current[i]?.scrollHeight ?? 0));\n };\n\n useEffect(() => {\n measure();\n window.addEventListener(\"resize\", measure);\n return () => window.removeEventListener(\"resize\", measure);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [items, openSet]);\n\n const toggle = (i: number) => {\n // measure before opening so the panel animates to its true height\n if (!openSet.has(i)) {\n const h = panelRefs.current[i]?.scrollHeight ?? 0;\n setHeights((prev) => (prev[i] === h ? prev : prev.map((x, j) => (j === i ? h : x))));\n }\n setOpenSet((prev) => {\n const next = new Set(exclusive ? [] : prev);\n if (prev.has(i)) next.delete(i);\n else next.add(i);\n return next;\n });\n };\n\n return (\n <div className={`mcl-accordion ${className}`.trim()}>\n {items.map((item, i) => {\n const open = openSet.has(i);\n return (\n <div key={i} className={`mcl-accordion-item${open ? \" mcl-accordion-item-open\" : \"\"}`}>\n <button\n type=\"button\"\n className=\"mcl-accordion-header\"\n aria-expanded={open}\n aria-controls={`mcl-acc-${uid}-${i}`}\n onClick={() => toggle(i)}\n >\n <span>{item.title}</span>\n <span className=\"mcl-accordion-chevron\" aria-hidden=\"true\">\n ▾\n </span>\n </button>\n <div\n id={`mcl-acc-${uid}-${i}`}\n ref={(el) => {\n panelRefs.current[i] = el;\n }}\n className=\"mcl-accordion-panel\"\n style={{ maxHeight: open ? heights[i] || 999 : 0 }}\n role=\"region\"\n >\n <div className=\"mcl-accordion-panel-inner\">{item.content}</div>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { createContext, useCallback, useContext, useEffect, useRef, useState } from \"react\";\n\nexport type ToastVariant = \"info\" | \"success\" | \"danger\" | \"warning\";\n\nexport interface ToastOptions {\n title?: React.ReactNode;\n message?: React.ReactNode;\n variant?: ToastVariant;\n /** ms before auto-dismiss; 0 keeps it until closed manually. */\n duration?: number;\n}\n\ninterface ToastItem extends ToastOptions {\n id: number;\n}\n\ninterface ToastContextValue {\n toast: (t: ToastOptions) => void;\n dismiss: (id: number) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nexport type ToastPlacement = \"top-right\" | \"top-center\" | \"bottom-right\" | \"bottom-left\";\n\nexport interface ToastProviderProps {\n children: React.ReactNode;\n placement?: ToastPlacement;\n}\n\nexport function ToastProvider({ children, placement = \"bottom-right\" }: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n const idRef = useRef(0);\n const timersRef = useRef<Map<number, number>>(new Map());\n\n const dismiss = useCallback((id: number) => {\n const timer = timersRef.current.get(id);\n if (timer !== undefined) {\n window.clearTimeout(timer);\n timersRef.current.delete(id);\n }\n setToasts((list) => list.filter((t) => t.id !== id));\n }, []);\n\n const toast = useCallback(\n (o: ToastOptions) => {\n const id = ++idRef.current;\n setToasts((list) => [...list, { ...o, id }].slice(-4));\n const d = o.duration ?? 4200;\n if (d > 0) {\n const timer = window.setTimeout(() => dismiss(id), d);\n timersRef.current.set(id, timer);\n }\n },\n [dismiss]\n );\n\n // clear pending auto-dismiss timers when the provider unmounts\n useEffect(\n () => () => {\n timersRef.current.forEach((timer) => window.clearTimeout(timer));\n timersRef.current.clear();\n },\n []\n );\n\n return (\n <ToastContext.Provider value={{ toast, dismiss }}>\n {children}\n <div className={`mcl-toasts mcl-toasts-${placement}`} aria-live=\"polite\">\n {toasts.map((t) => (\n <ToastCard key={t.id} item={t} onClose={() => dismiss(t.id)} />\n ))}\n </div>\n </ToastContext.Provider>\n );\n}\n\nfunction ToastCard({ item, onClose }: { item: ToastItem; onClose: () => void }) {\n return (\n <div className={`mcl-toast mcl-toast-${item.variant ?? \"info\"}`} role=\"status\">\n <span className=\"mcl-toast-dot\" aria-hidden=\"true\" />\n <div className=\"mcl-toast-content\">\n {item.title && <div className=\"mcl-toast-title\">{item.title}</div>}\n {item.message && <div className=\"mcl-toast-message\">{item.message}</div>}\n </div>\n <button type=\"button\" className=\"mcl-toast-close\" onClick={onClose} aria-label=\"Dismiss notification\">\n ✕\n </button>\n </div>\n );\n}\n\nexport function useToast(): ToastContextValue {\n const ctx = useContext(ToastContext);\n if (!ctx) throw new Error(\"useToast must be used inside <ToastProvider>.\");\n return ctx;\n}\n","\"use client\";\n\nimport React, { useState } from \"react\";\n\nexport interface NavLinkItem {\n href: string;\n label: React.ReactNode;\n}\n\nexport interface NavbarProps {\n brand?: React.ReactNode;\n links?: NavLinkItem[];\n /** Href to highlight as active (matches a link's href). */\n activeHref?: string;\n /** Right-side slot: theme toggle, actions, etc. */\n right?: React.ReactNode;\n sticky?: boolean;\n className?: string;\n}\n\n/** Clay pill navbar — framework-agnostic (plain <a> links, works everywhere). */\nexport function Navbar({ brand, links = [], activeHref, right, sticky = true, className = \"\" }: NavbarProps) {\n const [open, setOpen] = useState(false);\n\n return (\n <nav className={`mcl-navbar${sticky ? \" mcl-navbar-sticky\" : \"\"} ${className}`.trim()}>\n <div className=\"mcl-navbar-inner\">\n {brand && (\n <a className=\"mcl-navbar-brand\" href=\"/\">\n {brand}\n </a>\n )}\n {links.length > 0 && (\n <button\n type=\"button\"\n className=\"mcl-navbar-toggle\"\n aria-expanded={open}\n aria-label=\"Toggle menu\"\n onClick={() => setOpen((o) => !o)}\n >\n <span className=\"mcl-navbar-burger\" aria-hidden=\"true\" />\n </button>\n )}\n {links.length > 0 && (\n <ul className={`mcl-navbar-links${open ? \" mcl-navbar-open\" : \"\"}`}>\n {links.map((l) => (\n <li key={l.href}>\n <a\n href={l.href}\n className={`mcl-navbar-link${activeHref === l.href ? \" mcl-navbar-link-active\" : \"\"}`}\n onClick={() => setOpen(false)}\n aria-current={activeHref === l.href ? \"page\" : undefined}\n >\n {l.label}\n </a>\n </li>\n ))}\n </ul>\n )}\n {right && <div className=\"mcl-navbar-right\">{right}</div>}\n </div>\n </nav>\n );\n}\n","import React from \"react\";\n\nexport type StatTone = \"primary\" | \"secondary\" | \"accent\" | \"danger\" | \"info\";\n\nexport interface StatProps {\n value: React.ReactNode;\n label?: React.ReactNode;\n tone?: StatTone;\n className?: string;\n}\n\nexport function Stat({ value, label, tone = \"primary\", className = \"\" }: StatProps) {\n return (\n <div className={`mcl-stat mcl-stat-${tone} ${className}`.trim()}>\n <b className=\"mcl-stat-value\">{value}</b>\n {label && <span className=\"mcl-stat-label\">{label}</span>}\n </div>\n );\n}\n","import React from \"react\";\n\nexport interface DividerProps extends React.HTMLAttributes<HTMLElement> {\n orientation?: \"horizontal\" | \"vertical\";\n /** Renders an inset line — text — inset line. */\n label?: React.ReactNode;\n}\n\nexport function Divider({ orientation = \"horizontal\", label, className = \"\", ...rest }: DividerProps) {\n if (label !== undefined && label !== null) {\n return (\n <div className={`mcl-divider-label ${className}`.trim()} role=\"separator\" {...rest}>\n <span className=\"mcl-divider-label-text\">{label}</span>\n </div>\n );\n }\n return (\n <div\n className={`mcl-divider mcl-divider-${orientation} ${className}`.trim()}\n role=\"separator\"\n {...rest}\n />\n );\n}\n","import React from \"react\";\n\nexport type StackGap = \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: \"row\" | \"column\";\n gap?: StackGap;\n wrap?: boolean;\n align?: \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\n justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\";\n}\n\nexport function Stack({\n direction = \"column\",\n gap = \"md\",\n wrap = false,\n align,\n justify,\n className = \"\",\n ...rest\n}: StackProps) {\n const cls = [\n \"mcl-stack\",\n direction === \"row\" ? \"mcl-stack-row\" : \"\",\n `mcl-stack-gap-${gap}`,\n wrap ? \"mcl-stack-wrap\" : \"\",\n align ? `mcl-stack-align-${align}` : \"\",\n justify ? `mcl-stack-justify-${justify}` : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return <div className={cls} {...rest} />;\n}\n"],"mappings":"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","names":["import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","React","Button","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","React","import_react","import_jsx_runtime","React","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/theming/ThemeProvider.tsx","../src/utils/color.ts","../src/theming/presets.ts","../src/theming/ThemeToggle.tsx","../src/theming/ThemeMenu.tsx","../src/components/button/button.tsx","../src/components/kbd/kbd.tsx","../src/components/card/card.tsx","../src/components/input/input.tsx","../src/components/checks/checks.tsx","../src/components/dropdown/dropdown.tsx","../src/components/range/range.tsx","../src/components/badge/badge.tsx","../src/components/alert/alert.tsx","../src/components/avatar/avatar.tsx","../src/components/progress/progress.tsx","../src/components/spinner/spinner.tsx","../src/components/skeleton/skeleton.tsx","../src/components/modal/modal.tsx","../src/components/tooltip/tooltip.tsx","../src/components/tabs/tabs.tsx","../src/components/accordion/accordion.tsx","../src/components/toast/toast.tsx","../src/components/navbar/navbar.tsx","../src/components/stat/stat.tsx","../src/components/divider/divider.tsx","../src/components/stack/stack.tsx"],"sourcesContent":["/**\n * MarclayUI — claymorphism + neumorphism React components\n * with light/dark theming and runtime color control.\n *\n * Docs: import \"marclayui/styles.css\" once in your root layout,\n * wrap your app in <MarclayProvider>, and use the components below.\n */\n\n// Theming\n// (themeInitScript is served separately: import { themeInitScript } from \"marclayui/theme-init\")\nexport {\n MarclayProvider,\n ThemeProvider,\n useTheme,\n} from \"./theming/ThemeProvider\";\nexport type {\n ThemeMode,\n ModePreference,\n ColorOverrides,\n MarclayProviderProps,\n} from \"./theming/ThemeProvider\";\nexport { PRESETS } from \"./theming/presets\";\nexport type { PresetName, PresetInfo } from \"./theming/presets\";\nexport { ThemeToggle } from \"./theming/ThemeToggle\";\nexport type { ThemeToggleProps } from \"./theming/ThemeToggle\";\nexport { ThemeMenu } from \"./theming/ThemeMenu\";\nexport type { ThemeMenuProps } from \"./theming/ThemeMenu\";\nexport { COLOR_SWATCHES } from \"./theming/presets\";\n\n// Components\nexport { Button, ButtonGroup } from \"./components/button/button\";\nexport type { ButtonProps, ButtonGroupProps, ButtonVariant, ButtonSize } from \"./components/button/button\";\n\nexport { Kbd } from \"./components/kbd/kbd\";\nexport type { KbdProps } from \"./components/kbd/kbd\";\n\nexport {\n Card,\n CardHeader,\n CardTitle,\n CardBody,\n CardFooter,\n} from \"./components/card/card\";\nexport type { CardProps } from \"./components/card/card\";\n\nexport { Input, Textarea } from \"./components/input/input\";\nexport type { InputProps, TextareaProps, FieldSize } from \"./components/input/input\";\n\nexport { Checkbox, CheckboxGroup, Radio, Switch } from \"./components/checks/checks\";\nexport type {\n CheckboxProps,\n CheckboxGroupProps,\n CheckboxGroupOption,\n RadioProps,\n SwitchProps,\n} from \"./components/checks/checks\";\n\nexport { Dropdown } from \"./components/dropdown/dropdown\";\nexport type { DropdownProps, DropdownItem } from \"./components/dropdown/dropdown\";\n\nexport { Range } from \"./components/range/range\";\nexport type { RangeProps } from \"./components/range/range\";\n\nexport { Badge } from \"./components/badge/badge\";\nexport type { BadgeProps, BadgeVariant } from \"./components/badge/badge\";\n\nexport { Alert } from \"./components/alert/alert\";\nexport type { AlertProps, AlertVariant } from \"./components/alert/alert\";\n\nexport { Avatar, AvatarGroup } from \"./components/avatar/avatar\";\nexport type { AvatarProps, AvatarGroupProps, AvatarSize, AvatarStatus } from \"./components/avatar/avatar\";\n\nexport { Progress } from \"./components/progress/progress\";\nexport type { ProgressProps, ProgressTone } from \"./components/progress/progress\";\n\nexport { Spinner } from \"./components/spinner/spinner\";\nexport type { SpinnerProps } from \"./components/spinner/spinner\";\n\nexport { Skeleton } from \"./components/skeleton/skeleton\";\nexport type { SkeletonProps } from \"./components/skeleton/skeleton\";\n\nexport { Modal } from \"./components/modal/modal\";\nexport type { ModalProps } from \"./components/modal/modal\";\n\nexport { Tooltip } from \"./components/tooltip/tooltip\";\nexport type { TooltipProps, TooltipPlacement } from \"./components/tooltip/tooltip\";\n\nexport { Tabs } from \"./components/tabs/tabs\";\nexport type { TabsProps, TabItem } from \"./components/tabs/tabs\";\n\nexport { Accordion } from \"./components/accordion/accordion\";\nexport type { AccordionProps, AccordionEntry } from \"./components/accordion/accordion\";\n\nexport { ToastProvider, useToast } from \"./components/toast/toast\";\nexport type {\n ToastOptions,\n ToastVariant,\n ToastProviderProps,\n ToastPlacement,\n} from \"./components/toast/toast\";\n\nexport { Navbar } from \"./components/navbar/navbar\";\nexport type { NavbarProps, NavLinkItem } from \"./components/navbar/navbar\";\n\nexport { Stat } from \"./components/stat/stat\";\nexport type { StatProps, StatTone } from \"./components/stat/stat\";\n\nexport { Divider } from \"./components/divider/divider\";\nexport type { DividerProps } from \"./components/divider/divider\";\n\nexport { Stack } from \"./components/stack/stack\";\nexport type { StackProps, StackGap } from \"./components/stack/stack\";\n","\"use client\";\n\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { alpha, darken, lighten, readableInk } from \"../utils/color\";\nimport { PRESET_STORAGE_KEY, type PresetName } from \"./presets\";\nexport type ThemeMode = \"light\" | \"dark\";\nexport type ModePreference = ThemeMode | \"system\";\n\n/** Colors you can override at runtime, like Bootstrap's SCSS variables but live. */\nexport interface ColorOverrides {\n primary?: string;\n secondary?: string;\n accent?: string;\n success?: string;\n danger?: string;\n warning?: string;\n info?: string;\n bg?: string;\n ink?: string;\n muted?: string;\n}\n\ninterface ThemeContextValue {\n /** Resolved mode after applying \"system\". */\n mode: ThemeMode;\n /** What the user asked for: \"light\" | \"dark\" | \"system\". */\n preference: ModePreference;\n setPreference: (p: ModePreference) => void;\n toggle: () => void;\n /** Active style preset — swaps the whole light+dark palette pair. */\n preset: PresetName;\n setPreset: (p: PresetName) => void;\n colors: ColorOverrides;\n setColors: (c: ColorOverrides) => void;\n resetColors: () => void;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | null>(null);\nconst STORAGE_KEY = \"mcl-theme\";\n\nconst TONES: Array<[keyof ColorOverrides, string, string]> = [\n [\"primary\", \"primary\", \"p\"],\n [\"secondary\", \"secondary\", \"s\"],\n [\"accent\", \"accent\", \"a\"],\n [\"success\", \"success\", \"c\"],\n [\"danger\", \"danger\", \"d\"],\n [\"warning\", \"warning\", \"w\"],\n [\"info\", \"info\", \"i\"],\n];\n\nfunction systemMode(): ThemeMode {\n if (typeof window === \"undefined\" || !window.matchMedia) return \"light\";\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n}\n\n/** Derives every CSS variable needed from a single base color. */\nfunction toneVars(base: string, dark: boolean): Record<string, string> {\n return {\n base: base,\n light: lighten(base, dark ? 0.24 : 0.16),\n deep: darken(base, 0.32),\n ink: readableInk(base),\n clay: `inset -5px -6px 10px ${alpha(darken(base, 0.68), dark ? 0.5 : 0.3)}, inset 5px 6px 10px ${alpha(\n lighten(base, 0.45),\n dark ? 0.38 : 0.5\n )}`,\n };\n}\n\nfunction colorVars(c: ColorOverrides, mode: ThemeMode): Record<string, string> {\n const vars: Record<string, string> = {};\n const dark = mode === \"dark\";\n\n for (const [key, name, short] of TONES) {\n const base = c[key];\n if (!base) continue;\n const t = toneVars(base, dark);\n vars[`--mcl-${name}`] = t.base;\n vars[`--mcl-${name}-2`] = t.light;\n vars[`--mcl-${name}-deep`] = t.deep;\n vars[`--mcl-${name}-ink`] = t.ink;\n vars[`--mcl-clay-${short}`] = t.clay;\n if (key === \"primary\") vars[\"--mcl-ring\"] = alpha(base, dark ? 0.45 : 0.4);\n }\n\n if (c.bg) {\n vars[\"--mcl-bg\"] = c.bg;\n vars[\"--mcl-sd\"] = alpha(darken(c.bg, dark ? 0.78 : 0.4), dark ? 0.72 : 0.6);\n vars[\"--mcl-sl\"] = alpha(lighten(c.bg, dark ? 0.3 : 0.9), dark ? 0.07 : 0.95);\n vars[\"--mcl-sheen\"] = alpha(lighten(c.bg, 0.9), dark ? 0.08 : 0.5);\n }\n if (c.ink) vars[\"--mcl-ink\"] = c.ink;\n if (c.muted) vars[\"--mcl-muted\"] = c.muted;\n return vars;\n}\n\n/** Tip: import { themeInitScript } from \"marclayui/theme-init\" — it lives in its own\n * Server-Component-safe module and the main bundle is marked \"use client\". */\n\nexport interface MarclayProviderProps {\n children: React.ReactNode;\n /** \"system\" follows the OS preference; persisted to localStorage. */\n defaultMode?: ModePreference;\n /** Style preset: \"clay\" (claymorphism) or \"neo\" (neumorphism). Persisted. */\n preset?: PresetName;\n /** Optional initial color overrides (react-bootstrap-style runtime theming). */\n colors?: ColorOverrides;\n}\n\nexport function MarclayProvider({\n children,\n defaultMode = \"system\",\n preset: initialPreset = \"clay\",\n colors: initialColors,\n}: MarclayProviderProps) {\n const [preference, setPreferenceState] = useState<ModePreference>(defaultMode);\n const [mode, setMode] = useState<ThemeMode>(\"light\");\n const [preset, setPresetState] = useState<PresetName>(initialPreset);\n const [colors, setColorsState] = useState<ColorOverrides>(initialColors ?? {});\n const appliedKeys = useRef<Set<string>>(new Set());\n\n // Sync with the no-flash init script / stored preferences.\n useEffect(() => {\n let stored: ModePreference | null = null;\n let storedPreset: string | null = null;\n try {\n stored = localStorage.getItem(STORAGE_KEY) as ModePreference | null;\n storedPreset = localStorage.getItem(PRESET_STORAGE_KEY);\n } catch {\n stored = null;\n }\n setPreferenceState(stored ?? defaultMode);\n if (storedPreset === \"clay\" || storedPreset === \"neo\") setPresetState(storedPreset);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Resolve preference -> concrete mode, and keep \"system\" live.\n useEffect(() => {\n const apply = () => {\n const m = preference === \"system\" ? systemMode() : preference;\n setMode(m);\n document.documentElement.setAttribute(\"data-theme\", m);\n };\n apply();\n if (preference !== \"system\" || !window.matchMedia) return;\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const onChange = () => apply();\n mq.addEventListener?.(\"change\", onChange);\n return () => mq.removeEventListener?.(\"change\", onChange);\n }, [preference]);\n\n // Apply the style preset (both palettes live in CSS under [data-preset]).\n useEffect(() => {\n if (preset === \"clay\") document.documentElement.removeAttribute(\"data-preset\");\n else document.documentElement.setAttribute(\"data-preset\", preset);\n }, [preset]);\n\n // Apply (and re-apply on mode change) the runtime color overrides.\n useEffect(() => {\n const root = document.documentElement;\n appliedKeys.current.forEach((k) => root.style.removeProperty(k));\n appliedKeys.current.clear();\n if (Object.keys(colors).length === 0) return;\n const vars = colorVars(colors, mode);\n for (const [k, v] of Object.entries(vars)) {\n root.style.setProperty(k, v);\n appliedKeys.current.add(k);\n }\n }, [colors, mode]);\n\n const setPreference = useCallback((p: ModePreference) => {\n setPreferenceState(p);\n try {\n localStorage.setItem(STORAGE_KEY, p);\n } catch {\n /* private mode — theme still applies for this session */\n }\n }, []);\n\n const toggle = useCallback(() => {\n setPreference(mode === \"dark\" ? \"light\" : \"dark\");\n }, [mode, setPreference]);\n\n const setPreset = useCallback((p: PresetName) => {\n setPresetState(p);\n try {\n localStorage.setItem(PRESET_STORAGE_KEY, p);\n } catch {\n /* private mode — preset still applies for this session */\n }\n // custom colors are tuned to the old preset; clear them so the new one shows cleanly\n setColorsState({});\n }, []);\n\n const setColors = useCallback((c: ColorOverrides) => {\n setColorsState((prev) => ({ ...prev, ...c }));\n }, []);\n\n const resetColors = useCallback(() => setColorsState({}), []);\n\n const value = useMemo(\n () => ({\n mode,\n preference,\n setPreference,\n toggle,\n preset,\n setPreset,\n colors,\n setColors,\n resetColors,\n }),\n [mode, preference, setPreference, toggle, preset, setPreset, colors, setColors, resetColors]\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n}\n\nexport function useTheme(): ThemeContextValue {\n const ctx = useContext(ThemeContext);\n if (!ctx) throw new Error(\"useTheme must be used inside <MarclayProvider>.\");\n return ctx;\n}\n\n/** Backwards-friendly alias. */\nexport const ThemeProvider = MarclayProvider;\n","/** Minimal color helpers used by MarclayProvider to derive shades and clay glows. */\n\nexport interface RGB {\n r: number;\n g: number;\n b: number;\n}\n\nconst WHITE: RGB = { r: 255, g: 255, b: 255 };\nconst BLACK: RGB = { r: 0, g: 0, b: 0 };\n\nfunction clamp(n: number, min = 0, max = 255): number {\n return Math.min(max, Math.max(min, n));\n}\n\nexport function parseHex(hex: string): RGB {\n let h = hex.trim().replace(\"#\", \"\");\n if (h.length === 3) h = h.split(\"\").map((c) => c + c).join(\"\");\n if (h.length !== 6 || /[^0-9a-f]/i.test(h)) return { ...BLACK };\n const n = parseInt(h, 16);\n return { r: (n >> 16) & 255, g: (n >> 8) & 255, b: n & 255 };\n}\n\nexport function toHex(c: RGB): string {\n const part = (v: number) => clamp(Math.round(v)).toString(16).padStart(2, \"0\");\n return `#${part(c.r)}${part(c.g)}${part(c.b)}`;\n}\n\nexport function rgba(c: RGB, a: number): string {\n return `rgba(${clamp(Math.round(c.r))}, ${clamp(Math.round(c.g))}, ${clamp(Math.round(c.b))}, ${a})`;\n}\n\nexport function mix(a: RGB, b: RGB, t: number): RGB {\n return {\n r: a.r + (b.r - a.r) * t,\n g: a.g + (b.g - a.g) * t,\n b: a.b + (b.b - a.b) * t,\n };\n}\n\nexport function lighten(hex: string, t: number): string {\n return toHex(mix(parseHex(hex), WHITE, t));\n}\n\nexport function darken(hex: string, t: number): string {\n return toHex(mix(parseHex(hex), BLACK, t));\n}\n\nexport function alpha(hex: string, a: number): string {\n return rgba(parseHex(hex), a);\n}\n\n/** Picks near-black or near-white text depending on the tone's luminance. */\nexport function readableInk(base: string): string {\n const { r, g, b } = mix(parseHex(base), WHITE, 0.12);\n const lum = (0.299 * r + 0.587 * g + 0.114 * b) / 255;\n return lum > 0.62 ? \"#3a2d20\" : \"#fff8f2\";\n}\n","/** Built-in style presets. Each preset defines its own light AND dark palette\n * (see styles/theme.css); switching a preset swaps both at once. */\nexport type PresetName = \"clay\" | \"neo\";\n\nexport interface PresetInfo {\n id: PresetName;\n label: string;\n description: string;\n}\n\nexport const PRESETS: PresetInfo[] = [\n {\n id: \"clay\",\n label: \"Claymorphism\",\n description: \"Warm terracotta clay, squircles, Quicksand — the signature MarclayUI look.\",\n },\n {\n id: \"neo\",\n label: \"Neumorphism\",\n description: \"Soft grey-blue extrusions, violet (light) / gold (dark) accent, circles, Poppins & Manrope.\",\n },\n];\n\nexport const PRESET_STORAGE_KEY = \"mcl-preset\";\n\n/** Quick primary-color swatches used by ThemeMenu and the docs playground. */\nexport const COLOR_SWATCHES: Array<{ name: string; color: string }> = [\n { name: \"Terra\", color: \"#e0785a\" },\n { name: \"Violet\", color: \"#7c5cff\" },\n { name: \"Ocean\", color: \"#4a90d9\" },\n { name: \"Forest\", color: \"#5a8a46\" },\n { name: \"Magenta\", color: \"#c74f9d\" },\n];\n","\"use client\";\n\nimport React from \"react\";\nimport { useTheme } from \"./ThemeProvider\";\n\nexport interface ThemeToggleProps {\n className?: string;\n}\n\n/** Raised clay pill that flips light/dark. Uses useTheme, so it must sit inside <MarclayProvider>. */\nexport function ThemeToggle({ className = \"\" }: ThemeToggleProps) {\n const { mode, toggle } = useTheme();\n const next = mode === \"dark\" ? \"light\" : \"dark\";\n return (\n <button\n type=\"button\"\n className={`mcl-theme-toggle ${className}`.trim()}\n onClick={toggle}\n aria-label={`Switch to ${next} mode`}\n title={`Switch to ${next} mode`}\n >\n <span className=\"mcl-theme-toggle-icon\" aria-hidden=\"true\">\n {mode === \"dark\" ? \"☀️\" : \"🌙\"}\n </span>\n </button>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport { useTheme } from \"./ThemeProvider\";\nimport { COLOR_SWATCHES, PRESETS } from \"./presets\";\n\nconst MODE_OPTIONS = [\n { key: \"light\", label: \"Light\", icon: \"☀️\" },\n { key: \"system\", label: \"System\", icon: \"🖥️\" },\n { key: \"dark\", label: \"Dark\", icon: \"🌙\" },\n] as const;\n\nexport interface ThemeMenuProps {\n className?: string;\n}\n\n/** Navbar theme button that opens a customization panel: mode, style preset\n * and primary color swatches. Closes on Escape or outside click. */\nexport function ThemeMenu({ className = \"\" }: ThemeMenuProps) {\n const {\n mode,\n preference,\n setPreference,\n preset,\n setPreset,\n colors,\n setColors,\n resetColors,\n } = useTheme();\n const [open, setOpen] = useState(false);\n const [flipUp, setFlipUp] = useState(false);\n const shellRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n if (shellRef.current && !shellRef.current.contains(e.target as Node)) {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n document.addEventListener(\"mousedown\", onDown);\n document.addEventListener(\"keydown\", onKey);\n return () => {\n document.removeEventListener(\"mousedown\", onDown);\n document.removeEventListener(\"keydown\", onKey);\n };\n }, [open]);\n\n useEffect(() => {\n if (open) {\n panelRef.current?.focus();\n // flip above the trigger when there isn't room below (mobile)\n const t = window.setTimeout(() => {\n const trig = triggerRef.current;\n const panel = panelRef.current;\n if (!trig || !panel) return;\n const r = trig.getBoundingClientRect();\n setFlipUp(window.innerHeight - r.bottom < panel.offsetHeight + 12);\n }, 0);\n return () => window.clearTimeout(t);\n }\n setFlipUp(false);\n }, [open]);\n\n const activeSwatch = colors.primary?.toLowerCase();\n\n return (\n <div ref={shellRef} className={`mcl-theme-menu-shell ${className}`.trim()}>\n <button\n ref={triggerRef}\n type=\"button\"\n className=\"mcl-theme-toggle\"\n aria-haspopup=\"dialog\"\n aria-expanded={open}\n aria-label=\"Customize theme\"\n title=\"Customize theme\"\n onClick={() => setOpen((o) => !o)}\n >\n <span className=\"mcl-theme-toggle-icon\" aria-hidden=\"true\">\n {preference === \"system\" ? \"🖥️\" : mode === \"dark\" ? \"🌙\" : \"☀️\"}\n </span>\n </button>\n {open && (\n <div\n ref={panelRef}\n tabIndex={-1}\n role=\"dialog\"\n aria-label=\"Customize theme\"\n className={`mcl-theme-menu${flipUp ? \" mcl-theme-menu-up\" : \"\"}`}\n >\n <div className=\"mcl-theme-menu-section\">\n <span className=\"mcl-theme-menu-label\">Mode · {mode}</span>\n <div className=\"mcl-theme-menu-chips\">\n {MODE_OPTIONS.map((m) => (\n <button\n key={m.key}\n type=\"button\"\n className={`mcl-theme-menu-chip${preference === m.key ? \" mcl-theme-menu-chip-on\" : \"\"}`}\n aria-pressed={preference === m.key}\n onClick={() => setPreference(m.key)}\n >\n <span aria-hidden=\"true\">{m.icon}</span> {m.label}\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"mcl-theme-menu-section\">\n <span className=\"mcl-theme-menu-label\">Style preset</span>\n <div className=\"mcl-theme-menu-chips\">\n {PRESETS.map((p) => (\n <button\n key={p.id}\n type=\"button\"\n className={`mcl-theme-menu-chip${preset === p.id ? \" mcl-theme-menu-chip-on\" : \"\"}`}\n aria-pressed={preset === p.id}\n onClick={() => setPreset(p.id)}\n >\n {p.label}\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"mcl-theme-menu-section\">\n <span className=\"mcl-theme-menu-label\">Primary color</span>\n <div className=\"mcl-theme-menu-swatches\">\n {COLOR_SWATCHES.map((s) => (\n <button\n key={s.color}\n type=\"button\"\n className={`mcl-theme-menu-swatch${activeSwatch === s.color.toLowerCase() ? \" mcl-theme-menu-swatch-on\" : \"\"}`}\n style={{ background: s.color }}\n title={s.name}\n aria-label={`Primary ${s.name}`}\n aria-pressed={activeSwatch === s.color.toLowerCase()}\n onClick={() => setColors({ primary: s.color })}\n />\n ))}\n </div>\n <button type=\"button\" className=\"mcl-theme-menu-reset\" onClick={resetColors}>\n Reset colors\n </button>\n </div>\n </div>\n )}\n </div>\n );\n}\n","import React from \"react\";\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"accent\" | \"soft\" | \"ghost\" | \"danger\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** Shows a spinner and blocks interaction. */\n loading?: boolean;\n /** Stretch to fill the container width. */\n block?: boolean;\n /** Renders an anchor with button styling — use with Next `<Link>` styling or plain routes. */\n href?: string;\n}\n\nexport const Button = React.forwardRef<HTMLAnchorElement & HTMLButtonElement, ButtonProps>(\n function Button(\n {\n variant = \"soft\",\n size = \"md\",\n loading = false,\n block = false,\n className = \"\",\n disabled,\n children,\n type = \"button\",\n href,\n ...rest\n },\n ref\n ) {\n const cls = [\n \"mcl-btn\",\n `mcl-btn-${variant}`,\n `mcl-btn-${size}`,\n block ? \"mcl-btn-block\" : \"\",\n loading ? \"mcl-btn-loading\" : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n if (href) {\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n className={cls}\n aria-disabled={disabled || undefined}\n {...(rest as unknown as React.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {loading && <span className=\"mcl-btn-spinner\" aria-hidden=\"true\" />}\n <span className=\"mcl-btn-label\">{children}</span>\n </a>\n );\n }\n\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type={type}\n className={cls}\n disabled={disabled || loading}\n {...rest}\n >\n {loading && <span className=\"mcl-btn-spinner\" aria-hidden=\"true\" />}\n <span className=\"mcl-btn-label\">{children}</span>\n </button>\n );\n }\n);\n\nexport interface ButtonGroupProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n}\n\n/** Segmented control: renders children Buttons as flat segments inside an\n * inset clay well — the active variant keeps its gradient. */\nexport function ButtonGroup({ children, className = \"\", ...rest }: ButtonGroupProps) {\n return (\n <div className={`mcl-btn-group ${className}`.trim()} role=\"group\" {...rest}>\n {children}\n </div>\n );\n}\n","import React from \"react\";\n\nexport interface KbdProps extends React.HTMLAttributes<HTMLElement> {\n children: React.ReactNode;\n}\n\n/** Small keyboard key cap — inset clay well with a pressed bottom edge. */\nexport function Kbd({ children, className = \"\", ...rest }: KbdProps) {\n return (\n <kbd className={`mcl-kbd ${className}`.trim()} {...rest}>\n {children}\n </kbd>\n );\n}\n","import React from \"react\";\n\nexport interface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Lifts on hover — nice for clickable cards. */\n hover?: boolean;\n}\n\nexport function Card({ hover = false, className = \"\", ...rest }: CardProps) {\n return <div className={`mcl-card${hover ? \" mcl-card-hover\" : \"\"} ${className}`.trim()} {...rest} />;\n}\n\nexport function CardHeader({ className = \"\", ...rest }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={`mcl-card-header ${className}`.trim()} {...rest} />;\n}\n\nexport function CardTitle({ className = \"\", ...rest }: React.HTMLAttributes<HTMLHeadingElement>) {\n return <h3 className={`mcl-card-title ${className}`.trim()} {...rest} />;\n}\n\nexport function CardBody({ className = \"\", ...rest }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={`mcl-card-body ${className}`.trim()} {...rest} />;\n}\n\nexport function CardFooter({ className = \"\", ...rest }: React.HTMLAttributes<HTMLDivElement>) {\n return <div className={`mcl-card-footer ${className}`.trim()} {...rest} />;\n}\n","import React from \"react\";\n\nexport type FieldSize = \"sm\" | \"md\" | \"lg\";\n\ninterface FieldChrome {\n label?: React.ReactNode;\n hint?: React.ReactNode;\n error?: string;\n size?: FieldSize;\n block?: boolean;\n}\n\nfunction fieldClasses(base: string, size: FieldSize, invalid: boolean): string {\n return [base, `${base}-${size}`, invalid ? `${base}-invalid` : \"\"].filter(Boolean).join(\" \");\n}\n\nfunction Chrome({\n id,\n label,\n hint,\n error,\n block,\n children,\n}: { id: string; block?: boolean } & FieldChrome & { children: React.ReactNode }) {\n return (\n <div className={`mcl-field${block ? \" mcl-field-block\" : \"\"}`}>\n {label && (\n <label className=\"mcl-label\" htmlFor={id}>\n {label}\n </label>\n )}\n {children}\n {error ? (\n <div className=\"mcl-hint mcl-hint-error\" role=\"alert\">\n {error}\n </div>\n ) : hint ? (\n <div className=\"mcl-hint\">{hint}</div>\n ) : null}\n </div>\n );\n}\n\nexport interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"size\">, FieldChrome {}\n\nexport function Input({ label, hint, error, size = \"md\", block = false, className = \"\", id, ...rest }: InputProps) {\n const autoId = React.useId();\n const inputId = id ?? autoId;\n const input = (\n <input\n id={inputId}\n className={`${fieldClasses(\"mcl-input\", size, !!error)}${block ? \" mcl-input-block\" : \"\"} ${className}`.trim()}\n aria-invalid={error ? true : undefined}\n {...rest}\n />\n );\n if (!label && !hint && !error) return input;\n return (\n <Chrome id={inputId} label={label} hint={hint} error={error} block={block}>\n {input}\n </Chrome>\n );\n}\n\nexport interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement>, FieldChrome {}\n\nexport function Textarea({ label, hint, error, size = \"md\", block = true, className = \"\", id, rows = 4, ...rest }: TextareaProps) {\n const autoId = React.useId();\n const inputId = id ?? autoId;\n const el = (\n <textarea\n id={inputId}\n rows={rows}\n className={`${fieldClasses(\"mcl-textarea\", size, !!error)} ${className}`.trim()}\n aria-invalid={error ? true : undefined}\n {...rest}\n />\n );\n if (!label && !hint && !error) return el;\n return (\n <Chrome id={inputId} label={label} hint={hint} error={error} block>\n {el}\n </Chrome>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\n\nfunction withLabel(input: React.ReactNode, label: React.ReactNode | undefined) {\n if (label === undefined || label === null) return input;\n return (\n <label className=\"mcl-check\">\n {input}\n <span className=\"mcl-check-label\">{label}</span>\n </label>\n );\n}\n\nexport interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n label?: React.ReactNode;\n /** Shows a dash instead of a tick — the classic \"some children selected\" state. */\n indeterminate?: boolean;\n}\n\nexport function Checkbox({ label, indeterminate = false, className = \"\", ...rest }: CheckboxProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (inputRef.current) inputRef.current.indeterminate = indeterminate;\n }, [indeterminate]);\n\n return withLabel(\n <>\n <input ref={inputRef} type=\"checkbox\" className={`mcl-check-input ${className}`.trim()} {...rest} />\n <span className=\"mcl-check-box\" aria-hidden=\"true\" />\n </>,\n label\n );\n}\n\nexport interface CheckboxGroupOption {\n value: string;\n label: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface CheckboxGroupProps {\n options: CheckboxGroupOption[];\n /** Controlled selected values. */\n value?: string[];\n /** Uncontrolled initial selection. */\n defaultValue?: string[];\n onChange?: (values: string[]) => void;\n /** Renders a parent \"select all\" checkbox with an indeterminate state. */\n selectAll?: boolean;\n selectAllLabel?: React.ReactNode;\n label?: React.ReactNode;\n disabled?: boolean;\n className?: string;\n}\n\nexport function CheckboxGroup({\n options,\n value,\n defaultValue = [],\n onChange,\n selectAll = false,\n selectAllLabel = \"Select all\",\n label,\n disabled = false,\n className = \"\",\n}: CheckboxGroupProps) {\n const [inner, setInner] = useState<string[]>(defaultValue);\n const allRef = useRef<HTMLInputElement>(null);\n const selected = value ?? inner;\n\n const enabled = options.filter((o) => !o.disabled).map((o) => o.value);\n const allOn = enabled.length > 0 && enabled.every((v) => selected.includes(v));\n const someOn = enabled.some((v) => selected.includes(v));\n\n useEffect(() => {\n if (allRef.current) allRef.current.indeterminate = someOn && !allOn;\n }, [someOn, allOn]);\n\n const commit = (next: string[]) => {\n setInner(next);\n onChange?.(next);\n };\n\n const toggle = (v: string) => {\n commit(selected.includes(v) ? selected.filter((x) => x !== v) : [...selected, v]);\n };\n\n const toggleAll = () => {\n commit(allOn ? selected.filter((v) => !enabled.includes(v)) : Array.from(new Set([...selected, ...enabled])));\n };\n\n return (\n <div\n className={`mcl-check-group ${className}`.trim()}\n role=\"group\"\n aria-label={typeof label === \"string\" ? label : undefined}\n >\n {label && <span className=\"mcl-label\">{label}</span>}\n {selectAll && (\n <label className={`mcl-check mcl-check-group-all${disabled ? \" mcl-check-disabled\" : \"\"}`}>\n <input\n ref={allRef}\n type=\"checkbox\"\n className=\"mcl-check-input\"\n checked={allOn}\n disabled={disabled}\n onChange={toggleAll}\n />\n <span className=\"mcl-check-box\" aria-hidden=\"true\" />\n <span className=\"mcl-check-label\">{selectAllLabel}</span>\n </label>\n )}\n <div className=\"mcl-check-group-items\">\n {options.map((o) => (\n <label key={o.value} className={`mcl-check${o.disabled || disabled ? \" mcl-check-disabled\" : \"\"}`}>\n <input\n type=\"checkbox\"\n className=\"mcl-check-input\"\n checked={selected.includes(o.value)}\n disabled={o.disabled || disabled}\n onChange={() => toggle(o.value)}\n />\n <span className=\"mcl-check-box\" aria-hidden=\"true\" />\n <span className=\"mcl-check-label\">{o.label}</span>\n </label>\n ))}\n </div>\n </div>\n );\n}\n\nexport interface RadioProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: React.ReactNode;\n}\n\nexport function Radio({ label, className = \"\", ...rest }: RadioProps) {\n return withLabel(\n <>\n <input type=\"radio\" className={`mcl-check-input ${className}`.trim()} {...rest} />\n <span className=\"mcl-check-box mcl-radio-box\" aria-hidden=\"true\" />\n </>,\n label\n );\n}\n\nexport interface SwitchProps extends React.InputHTMLAttributes<HTMLInputElement> {\n label?: React.ReactNode;\n}\n\nexport function Switch({ label, className = \"\", ...rest }: SwitchProps) {\n return withLabel(\n <>\n <input\n type=\"checkbox\"\n role=\"switch\"\n className={`mcl-switch-input ${className}`.trim()}\n {...rest}\n />\n <span className=\"mcl-switch-track\" aria-hidden=\"true\">\n <span className=\"mcl-switch-knob\" />\n </span>\n </>,\n label\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useRef, useState } from \"react\";\n\nexport interface DropdownItem {\n value: string;\n label: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface DropdownProps {\n items: DropdownItem[];\n /** Controlled selected value (single) or values (multiple). */\n value?: string | string[];\n /** Uncontrolled initial selection. */\n defaultValue?: string | string[];\n onChange?: (value: string | string[]) => void;\n /** Allow several selections — the menu shows checkboxes. */\n multiple?: boolean;\n placeholder?: string;\n label?: React.ReactNode;\n hint?: React.ReactNode;\n size?: \"sm\" | \"md\" | \"lg\";\n /** Stretch trigger and menu to full width. */\n block?: boolean;\n disabled?: boolean;\n className?: string;\n}\n\n/** Custom dropdown menu — renders its own popup listbox (no native browser\n * option menu), with full keyboard support: open with Enter/Space/ArrowDown,\n * navigate with the arrows, select with Enter/Space, close with Escape. */\nexport function Dropdown({\n items,\n value,\n defaultValue,\n onChange,\n multiple = false,\n placeholder = \"Select…\",\n label,\n hint,\n size = \"md\",\n block = false,\n disabled = false,\n className = \"\",\n}: DropdownProps) {\n const [open, setOpen] = useState(false);\n const [inner, setInner] = useState<string | string[] | undefined>(defaultValue);\n const [active, setActive] = useState(0);\n const [flip, setFlip] = useState<{ up: boolean; left: boolean }>({ up: false, left: false });\n const shellRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const current = value ?? inner;\n const selectedValues: string[] = multiple\n ? Array.isArray(current)\n ? current\n : []\n : [];\n const singleValue = !multiple && !Array.isArray(current) ? current : undefined;\n\n const labelFor = (v: string) => items.find((i) => i.value === v)?.label;\n\n let triggerText: React.ReactNode = placeholder;\n if (multiple) {\n if (selectedValues.length > 0) {\n const labels = items.filter((i) => selectedValues.includes(i.value)).map((i) => i.label);\n triggerText = labels.length <= 2 ? labels.join(\", \") : `${labels.length} selected`;\n }\n } else if (singleValue !== undefined) {\n triggerText = labelFor(singleValue) ?? singleValue;\n }\n const hasSelection = multiple\n ? selectedValues.length > 0\n : singleValue !== undefined && singleValue !== \"\";\n\n // close on outside click (returns focus to the trigger)\n useEffect(() => {\n if (!open) return;\n const onDown = (e: MouseEvent) => {\n if (shellRef.current && !shellRef.current.contains(e.target as Node)) {\n setOpen(false);\n triggerRef.current?.focus();\n }\n };\n document.addEventListener(\"mousedown\", onDown);\n return () => document.removeEventListener(\"mousedown\", onDown);\n }, [open]);\n\n // focus the menu when it opens, park the highlight on the selection\n useEffect(() => {\n if (!open) return;\n const firstSelected = multiple\n ? items.findIndex((i) => selectedValues.includes(i.value))\n : items.findIndex((i) => i.value === singleValue);\n const firstEnabled = items.findIndex((i) => !i.disabled);\n const idx = firstSelected >= 0 ? firstSelected : Math.max(firstEnabled, 0);\n setActive(idx);\n menuRef.current?.focus();\n // scroll the highlighted option into view once the menu has laid out\n const t = window.setTimeout(() => {\n const el = menuRef.current?.children[idx] as HTMLElement | undefined;\n if (el && typeof el.scrollIntoView === \"function\") el.scrollIntoView({ block: \"nearest\" });\n }, 0);\n return () => window.clearTimeout(t);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n // flip up / clamp horizontally when the menu would leave the viewport\n useEffect(() => {\n if (!open) return;\n const t = window.setTimeout(() => {\n const trig = triggerRef.current;\n const menu = menuRef.current;\n if (!trig || !menu) return;\n const r = trig.getBoundingClientRect();\n const m = menu.getBoundingClientRect();\n const below = window.innerHeight - r.bottom;\n const above = r.top;\n setFlip({\n up: below < m.height + 12 && above > below,\n left: r.left + Math.max(m.width, r.width) > window.innerWidth - 12,\n });\n }, 0);\n return () => window.clearTimeout(t);\n }, [open]);\n\n const close = (refocus = true) => {\n setOpen(false);\n if (refocus) triggerRef.current?.focus();\n };\n\n const commit = (v: string) => {\n if (multiple) {\n const next = selectedValues.includes(v)\n ? selectedValues.filter((x) => x !== v)\n : [...selectedValues, v];\n setInner(next);\n onChange?.(next);\n } else {\n setInner(v);\n onChange?.(v);\n close();\n }\n };\n\n const move = (dir: 1 | -1) => {\n const enabled = items.map((it, i) => (it.disabled ? -1 : i)).filter((i) => i >= 0);\n if (enabled.length === 0) return;\n const pos = enabled.indexOf(active);\n const next = enabled[(pos + dir + enabled.length) % enabled.length];\n setActive(next);\n const el = menuRef.current?.children[next] as HTMLElement | undefined;\n if (el && typeof el.scrollIntoView === \"function\") el.scrollIntoView({ block: \"nearest\" });\n };\n\n const onMenuKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Escape\") {\n e.preventDefault();\n close();\n } else if (e.key === \"ArrowDown\") {\n e.preventDefault();\n move(1);\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n move(-1);\n } else if (e.key === \"Home\") {\n e.preventDefault();\n const first = items.findIndex((i) => !i.disabled);\n if (first >= 0) setActive(first);\n } else if (e.key === \"End\") {\n e.preventDefault();\n const last = items.map((i, idx) => (i.disabled ? -1 : idx)).filter((i) => i >= 0).pop();\n if (last !== undefined) setActive(last);\n } else if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n const it = items[active];\n if (it && !it.disabled) commit(it.value);\n } else if (e.key === \"Tab\") {\n setOpen(false);\n }\n };\n\n const onTriggerKeyDown = (e: React.KeyboardEvent) => {\n if (!open && e.key === \"ArrowDown\") {\n e.preventDefault();\n setOpen(true);\n }\n };\n\n return (\n <div className={`mcl-field${block ? \" mcl-field-block\" : \"\"} ${className}`.trim()}>\n {label && <span className=\"mcl-label\">{label}</span>}\n <div\n ref={shellRef}\n className={`mcl-dropdown-shell${block ? \" mcl-dropdown-block\" : \"\"}`}\n >\n <button\n ref={triggerRef}\n type=\"button\"\n className={`mcl-dropdown-trigger mcl-dropdown-${size}`}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n disabled={disabled}\n onClick={() => setOpen((o) => !o)}\n onKeyDown={onTriggerKeyDown}\n >\n <span className={`mcl-dropdown-value${hasSelection ? \"\" : \" mcl-dropdown-placeholder\"}`}>\n {triggerText}\n </span>\n <span className=\"mcl-dropdown-chevron\" aria-hidden=\"true\" />\n </button>\n {open && (\n <div\n ref={menuRef}\n tabIndex={-1}\n role=\"listbox\"\n aria-multiselectable={multiple || undefined}\n className={[\n \"mcl-dropdown-menu\",\n \"mcl-scroll\",\n `mcl-dropdown-${size}`,\n flip.up ? \"mcl-dropdown-menu-up\" : \"\",\n flip.left ? \"mcl-dropdown-menu-left\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n onKeyDown={onMenuKeyDown}\n >\n {items.map((it, i) => {\n const selected = multiple ? selectedValues.includes(it.value) : singleValue === it.value;\n return (\n <div\n key={it.value}\n role=\"option\"\n aria-selected={selected}\n aria-disabled={it.disabled || undefined}\n className={[\n \"mcl-dropdown-item\",\n i === active ? \"mcl-dropdown-item-active\" : \"\",\n selected ? \"mcl-dropdown-item-selected\" : \"\",\n it.disabled ? \"mcl-dropdown-item-disabled\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \")}\n onMouseEnter={() => setActive(i)}\n onClick={() => {\n if (!it.disabled) commit(it.value);\n }}\n >\n {multiple && <span className=\"mcl-dropdown-check\" aria-hidden=\"true\" />}\n <span className=\"mcl-dropdown-item-label\">{it.label}</span>\n {!multiple && selected && (\n <span className=\"mcl-dropdown-tick\" aria-hidden=\"true\">\n ✓\n </span>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n {hint && <div className=\"mcl-hint\">{hint}</div>}\n </div>\n );\n}\n","import React, { useState } from \"react\";\n\nexport interface RangeProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n label?: React.ReactNode;\n /** Helper text under the slider. */\n hint?: React.ReactNode;\n /** Shows the current value on the right of the label. Works with both\n * controlled `value` and uncontrolled `defaultValue`. */\n showValue?: boolean;\n}\n\nexport function Range({\n label,\n hint,\n showValue = false,\n value,\n defaultValue,\n onChange,\n className = \"\",\n id,\n ...rest\n}: RangeProps) {\n const autoId = React.useId();\n const inputId = id ?? autoId;\n const isControlled = value !== undefined;\n const [inner, setInner] = useState<string>(() =>\n value !== undefined ? String(value) : defaultValue !== undefined ? String(defaultValue) : \"0\"\n );\n const current = isControlled ? String(value) : inner;\n\n const input = (\n <input\n id={inputId}\n type=\"range\"\n className={`mcl-range ${className}`.trim()}\n value={isControlled ? value : inner}\n onChange={(e) => {\n if (!isControlled) setInner(e.target.value);\n onChange?.(e);\n }}\n {...rest}\n />\n );\n\n const field = (\n <div className=\"mcl-field\">\n {label && (\n <label className=\"mcl-range-head\" htmlFor={inputId}>\n <span className=\"mcl-label\">{label}</span>\n {showValue && <span className=\"mcl-range-value\">{current}</span>}\n </label>\n )}\n {input}\n {hint && <div className=\"mcl-hint\">{hint}</div>}\n </div>\n );\n\n if (!label && !hint) return input;\n return field;\n}\n","import React from \"react\";\n\nexport type BadgeVariant =\n | \"primary\"\n | \"secondary\"\n | \"accent\"\n | \"success\"\n | \"danger\"\n | \"warning\"\n | \"info\"\n | \"neutral\";\n\nexport interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {\n variant?: BadgeVariant;\n /** Solid = filled clay gradient; soft (default) = inset well with colored text. */\n solid?: boolean;\n}\n\nexport function Badge({ variant = \"neutral\", solid = false, className = \"\", ...rest }: BadgeProps) {\n return (\n <span\n className={`mcl-badge mcl-badge-${variant}${solid ? \" mcl-badge-solid\" : \"\"} ${className}`.trim()}\n {...rest}\n />\n );\n}\n","import React from \"react\";\n\nexport type AlertVariant = \"success\" | \"danger\" | \"warning\" | \"info\";\n\nconst DEFAULT_ICONS: Record<AlertVariant, string> = {\n success: \"✓\",\n danger: \"✕\",\n warning: \"!\",\n info: \"i\",\n};\n\nexport interface AlertProps extends Omit<React.HTMLAttributes<HTMLDivElement>, \"title\"> {\n variant?: AlertVariant;\n title?: React.ReactNode;\n /** Overrides the variant's default glyph. */\n icon?: React.ReactNode;\n onClose?: () => void;\n}\n\nexport function Alert({\n variant = \"info\",\n title,\n icon,\n onClose,\n className = \"\",\n children,\n ...rest\n}: AlertProps) {\n return (\n <div className={`mcl-alert mcl-alert-${variant} ${className}`.trim()} role=\"alert\" {...rest}>\n <span className=\"mcl-alert-icon\" aria-hidden=\"true\">\n {icon ?? DEFAULT_ICONS[variant]}\n </span>\n <div className=\"mcl-alert-content\">\n {title && <p className=\"mcl-alert-title\">{title}</p>}\n {children}\n </div>\n {onClose && (\n <button type=\"button\" className=\"mcl-alert-close\" onClick={onClose} aria-label=\"Dismiss\">\n ✕\n </button>\n )}\n </div>\n );\n}\n","import React from \"react\";\n\nexport type AvatarSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\nexport type AvatarStatus = \"online\" | \"offline\" | \"busy\";\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLSpanElement> {\n src?: string;\n alt?: string;\n /** Used to derive initials when no src is given. */\n name?: string;\n size?: AvatarSize;\n status?: AvatarStatus;\n /** Filled clay gradient look. */\n gradient?: boolean;\n}\n\nfunction initialsOf(name: string): string {\n const parts = name.trim().split(/\\s+/).slice(0, 2);\n return parts.map((p) => p[0]?.toUpperCase() ?? \"\").join(\"\");\n}\n\nexport function Avatar({\n src,\n alt,\n name,\n size = \"md\",\n status,\n gradient = false,\n className = \"\",\n children,\n ...rest\n}: AvatarProps) {\n const label = alt ?? (name ? `${name}'s avatar` : \"avatar\");\n return (\n <span\n className={`mcl-avatar mcl-avatar-${size}${gradient ? \" mcl-avatar-gradient\" : \"\"} ${className}`.trim()}\n role=\"img\"\n aria-label={label}\n {...rest}\n >\n {src ? (\n <img src={src} alt=\"\" className=\"mcl-avatar-img\" loading=\"lazy\" decoding=\"async\" />\n ) : (\n (children ?? initialsOf(name ?? \"??\") ?? \"\")\n )}\n {status && <span className={`mcl-avatar-status mcl-avatar-status-${status}`} aria-hidden=\"true\" />}\n </span>\n );\n}\n\nexport type AvatarGroupProps = React.HTMLAttributes<HTMLSpanElement>;\n\nexport function AvatarGroup({ className = \"\", children, ...rest }: AvatarGroupProps) {\n return (\n <span className={`mcl-avatar-group ${className}`.trim()} {...rest}>\n {children}\n </span>\n );\n}\n","import React from \"react\";\n\nexport type ProgressTone = \"primary\" | \"secondary\" | \"accent\" | \"danger\";\n\nexport interface ProgressProps {\n value?: number;\n max?: number;\n /** \"indeterminate\" animates a sliding chunk. */\n tone?: ProgressTone;\n size?: \"sm\" | \"md\" | \"lg\";\n label?: React.ReactNode;\n showValue?: boolean;\n indeterminate?: boolean;\n className?: string;\n}\n\nexport function Progress({\n value = 0,\n max = 100,\n tone = \"primary\",\n size = \"md\",\n label,\n showValue = false,\n indeterminate = false,\n className = \"\",\n}: ProgressProps) {\n const pct = Math.max(0, Math.min(100, (value / max) * 100));\n return (\n <div\n className={`mcl-progress mcl-progress-${size} ${className}`.trim()}\n role=\"progressbar\"\n aria-valuemin={0}\n aria-valuemax={max}\n aria-valuenow={indeterminate ? undefined : Math.round(pct)}\n >\n {(label || showValue) && (\n <div className=\"mcl-progress-head\">\n {label && <span>{label}</span>}\n {showValue && <span className=\"mcl-progress-value\">{indeterminate ? \"…\" : `${Math.round(pct)}%`}</span>}\n </div>\n )}\n <div className=\"mcl-progress-track\">\n <span\n className={`mcl-progress-fill mcl-progress-fill-${tone}${indeterminate ? \" mcl-progress-fill-indeterminate\" : \"\"}`}\n style={indeterminate ? undefined : { width: `${pct}%` }}\n />\n </div>\n </div>\n );\n}\n","import React from \"react\";\n\nexport interface SpinnerProps {\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n}\n\nexport function Spinner({ size = \"md\", className = \"\" }: SpinnerProps) {\n return <span className={`mcl-spinner mcl-spinner-${size} ${className}`.trim()} role=\"status\" aria-label=\"Loading\" />;\n}\n","import React from \"react\";\n\nexport interface SkeletonProps {\n variant?: \"text\" | \"circle\" | \"rect\";\n width?: number | string;\n height?: number | string;\n /** Render several text lines; the last one is shorter, like real copy. */\n count?: number;\n className?: string;\n}\n\nexport function Skeleton({ variant = \"text\", width, height, count = 1, className = \"\" }: SkeletonProps) {\n const lines = variant === \"text\" ? Math.max(1, count) : 1;\n const style = (last: boolean): React.CSSProperties => ({\n width: width ?? (variant === \"circle\" ? 48 : \"100%\"),\n height: height ?? (variant === \"text\" ? 14 : variant === \"circle\" ? 48 : 96),\n ...(variant === \"text\" && count > 1 && last ? { width: \"62%\" } : null),\n });\n if (lines === 1) {\n return (\n <span\n className={`mcl-skeleton mcl-skeleton-${variant} ${className}`.trim()}\n style={style(true)}\n aria-hidden=\"true\"\n />\n );\n }\n return (\n <span className={`mcl-skeleton-lines ${className}`.trim()} aria-hidden=\"true\">\n {Array.from({ length: lines }, (_, i) => (\n <span key={i} className=\"mcl-skeleton mcl-skeleton-text\" style={style(i === lines - 1)} />\n ))}\n </span>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useId, useRef, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport interface ModalProps {\n open: boolean;\n onClose: () => void;\n title?: React.ReactNode;\n footer?: React.ReactNode;\n size?: \"sm\" | \"md\" | \"lg\";\n closeOnBackdrop?: boolean;\n closeOnEsc?: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nconst FOCUSABLE =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\nexport function Modal({\n open,\n onClose,\n title,\n footer,\n size = \"md\",\n closeOnBackdrop = true,\n closeOnEsc = true,\n children,\n className = \"\",\n}: ModalProps) {\n const [mounted, setMounted] = useState(false);\n const panelRef = useRef<HTMLDivElement>(null);\n const lastFocusedRef = useRef<HTMLElement | null>(null);\n const titleId = useId();\n\n useEffect(() => setMounted(true), []);\n\n useEffect(() => {\n if (!open) return;\n lastFocusedRef.current = document.activeElement as HTMLElement | null;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\" && closeOnEsc) onClose();\n };\n document.addEventListener(\"keydown\", onKey);\n const prevOverflow = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n panelRef.current?.focus();\n return () => {\n document.removeEventListener(\"keydown\", onKey);\n document.body.style.overflow = prevOverflow;\n lastFocusedRef.current?.focus?.();\n };\n }, [open, onClose, closeOnEsc]);\n\n // keep Tab cycling inside the dialog\n const trapFocus = (e: React.KeyboardEvent) => {\n if (e.key !== \"Tab\" || !panelRef.current) return;\n const focusable = Array.from(panelRef.current.querySelectorAll<HTMLElement>(FOCUSABLE)).filter(\n (el) => el.offsetParent !== null\n );\n if (focusable.length === 0) {\n e.preventDefault();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = document.activeElement as HTMLElement | null;\n if (e.shiftKey && (active === first || !panelRef.current.contains(active))) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && active === last) {\n e.preventDefault();\n first.focus();\n }\n };\n\n if (!open || !mounted) return null;\n\n return createPortal(\n <div\n className=\"mcl-modal-overlay\"\n onMouseDown={(e) => {\n if (e.target === e.currentTarget && closeOnBackdrop) onClose();\n }}\n >\n <div\n ref={panelRef}\n className={`mcl-modal mcl-modal-${size} ${className}`.trim()}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n tabIndex={-1}\n onKeyDown={trapFocus}\n >\n <div className=\"mcl-modal-header\">\n {title ? (\n <h3 id={titleId} className=\"mcl-modal-title\">\n {title}\n </h3>\n ) : (\n <span />\n )}\n <button type=\"button\" className=\"mcl-modal-close\" onClick={onClose} aria-label=\"Close dialog\">\n ✕\n </button>\n </div>\n <div className=\"mcl-modal-body mcl-scroll\">{children}</div>\n {footer && <div className=\"mcl-modal-footer\">{footer}</div>}\n </div>\n </div>,\n document.body\n );\n}\n","import React from \"react\";\n\nexport type TooltipPlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nexport interface TooltipProps {\n label: string;\n placement?: TooltipPlacement;\n className?: string;\n children: React.ReactNode;\n}\n\n/** CSS-only tooltip: shows on hover and when the wrapped control has keyboard focus. */\nexport function Tooltip({ label, placement = \"top\", className = \"\", children }: TooltipProps) {\n return (\n <span className={`mcl-tooltip mcl-tooltip-${placement} ${className}`.trim()} data-mcl-tooltip={label}>\n {children}\n </span>\n );\n}\n","\"use client\";\n\nimport React, { useId, useRef, useState } from \"react\";\n\nexport interface TabItem {\n key: string;\n label: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface TabsProps {\n items: TabItem[];\n /** Controlled active index. */\n value?: number;\n onChange?: (index: number) => void;\n className?: string;\n}\n\nexport function Tabs({ items, value, onChange, className = \"\" }: TabsProps) {\n const uid = useId();\n const [inner, setInner] = useState(0);\n const active = value ?? inner;\n const tabRefs = useRef<Array<HTMLButtonElement | null>>([]);\n\n const select = (i: number) => {\n if (items[i]?.disabled) return;\n setInner(i);\n onChange?.(i);\n };\n\n const onKeyDown = (e: React.KeyboardEvent) => {\n const focusable = items.map((it, i) => (it.disabled ? -1 : i)).filter((i) => i >= 0);\n let next = -1;\n if (e.key === \"ArrowRight\") next = focusable[(focusable.indexOf(active) + 1) % focusable.length];\n if (e.key === \"ArrowLeft\") next = focusable[(focusable.indexOf(active) - 1 + focusable.length) % focusable.length];\n if (e.key === \"Home\") next = focusable[0];\n if (e.key === \"End\") next = focusable[focusable.length - 1];\n if (next >= 0 && next !== active) {\n e.preventDefault();\n select(next);\n tabRefs.current[next]?.focus();\n }\n };\n\n const current = items[active];\n\n return (\n <div className={`mcl-tabs ${className}`.trim()}>\n <div className=\"mcl-tablist\" role=\"tablist\" aria-label=\"Tabs\" onKeyDown={onKeyDown}>\n {items.map((it, i) => (\n <button\n key={it.key}\n ref={(el) => {\n tabRefs.current[i] = el;\n }}\n type=\"button\"\n role=\"tab\"\n id={`mcl-tab-${uid}-${it.key}`}\n aria-selected={i === active}\n aria-controls={`mcl-panel-${uid}-${it.key}`}\n tabIndex={i === active ? 0 : -1}\n className={`mcl-tab${i === active ? \" mcl-tab-active\" : \"\"}`}\n disabled={it.disabled}\n onClick={() => select(i)}\n >\n {it.label}\n </button>\n ))}\n </div>\n {current && (\n <div\n key={current.key}\n role=\"tabpanel\"\n id={`mcl-panel-${uid}-${current.key}`}\n aria-labelledby={`mcl-tab-${uid}-${current.key}`}\n className=\"mcl-tabpanel\"\n >\n {current.content}\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useId, useRef, useState } from \"react\";\n\nexport interface AccordionEntry {\n title: React.ReactNode;\n content: React.ReactNode;\n}\n\nexport interface AccordionProps {\n items: AccordionEntry[];\n /** Index opened initially. */\n defaultOpen?: number;\n /** When false, several panels can stay open at once. */\n exclusive?: boolean;\n className?: string;\n}\n\nexport function Accordion({ items, defaultOpen = -1, exclusive = true, className = \"\" }: AccordionProps) {\n const uid = useId();\n const [openSet, setOpenSet] = useState<Set<number>>(\n () => new Set(defaultOpen >= 0 ? [defaultOpen] : [])\n );\n const panelRefs = useRef<Array<HTMLDivElement | null>>([]);\n const [heights, setHeights] = useState<number[]>([]);\n\n const measure = () => {\n setHeights(items.map((_, i) => panelRefs.current[i]?.scrollHeight ?? 0));\n };\n\n useEffect(() => {\n measure();\n window.addEventListener(\"resize\", measure);\n return () => window.removeEventListener(\"resize\", measure);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [items, openSet]);\n\n const toggle = (i: number) => {\n // measure before opening so the panel animates to its true height\n if (!openSet.has(i)) {\n const h = panelRefs.current[i]?.scrollHeight ?? 0;\n setHeights((prev) => (prev[i] === h ? prev : prev.map((x, j) => (j === i ? h : x))));\n }\n setOpenSet((prev) => {\n const next = new Set(exclusive ? [] : prev);\n if (prev.has(i)) next.delete(i);\n else next.add(i);\n return next;\n });\n };\n\n return (\n <div className={`mcl-accordion ${className}`.trim()}>\n {items.map((item, i) => {\n const open = openSet.has(i);\n return (\n <div key={i} className={`mcl-accordion-item${open ? \" mcl-accordion-item-open\" : \"\"}`}>\n <button\n type=\"button\"\n className=\"mcl-accordion-header\"\n aria-expanded={open}\n aria-controls={`mcl-acc-${uid}-${i}`}\n onClick={() => toggle(i)}\n >\n <span>{item.title}</span>\n <span className=\"mcl-accordion-chevron\" aria-hidden=\"true\">\n ▾\n </span>\n </button>\n <div\n id={`mcl-acc-${uid}-${i}`}\n ref={(el) => {\n panelRefs.current[i] = el;\n }}\n className=\"mcl-accordion-panel\"\n style={{ maxHeight: open ? heights[i] || 999 : 0 }}\n role=\"region\"\n >\n <div className=\"mcl-accordion-panel-inner\">{item.content}</div>\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { createContext, useCallback, useContext, useEffect, useRef, useState } from \"react\";\n\nexport type ToastVariant = \"info\" | \"success\" | \"danger\" | \"warning\";\n\nexport interface ToastOptions {\n title?: React.ReactNode;\n message?: React.ReactNode;\n variant?: ToastVariant;\n /** ms before auto-dismiss; 0 keeps it until closed manually. */\n duration?: number;\n}\n\ninterface ToastItem extends ToastOptions {\n id: number;\n}\n\ninterface ToastContextValue {\n toast: (t: ToastOptions) => void;\n dismiss: (id: number) => void;\n}\n\nconst ToastContext = createContext<ToastContextValue | null>(null);\n\nexport type ToastPlacement = \"top-right\" | \"top-center\" | \"bottom-right\" | \"bottom-left\";\n\nexport interface ToastProviderProps {\n children: React.ReactNode;\n placement?: ToastPlacement;\n}\n\nexport function ToastProvider({ children, placement = \"bottom-right\" }: ToastProviderProps) {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n const idRef = useRef(0);\n const timersRef = useRef<Map<number, number>>(new Map());\n\n const dismiss = useCallback((id: number) => {\n const timer = timersRef.current.get(id);\n if (timer !== undefined) {\n window.clearTimeout(timer);\n timersRef.current.delete(id);\n }\n setToasts((list) => list.filter((t) => t.id !== id));\n }, []);\n\n const toast = useCallback(\n (o: ToastOptions) => {\n const id = ++idRef.current;\n setToasts((list) => [...list, { ...o, id }].slice(-4));\n const d = o.duration ?? 4200;\n if (d > 0) {\n const timer = window.setTimeout(() => dismiss(id), d);\n timersRef.current.set(id, timer);\n }\n },\n [dismiss]\n );\n\n // clear pending auto-dismiss timers when the provider unmounts\n useEffect(\n () => () => {\n timersRef.current.forEach((timer) => window.clearTimeout(timer));\n timersRef.current.clear();\n },\n []\n );\n\n return (\n <ToastContext.Provider value={{ toast, dismiss }}>\n {children}\n <div className={`mcl-toasts mcl-toasts-${placement}`} aria-live=\"polite\">\n {toasts.map((t) => (\n <ToastCard key={t.id} item={t} onClose={() => dismiss(t.id)} />\n ))}\n </div>\n </ToastContext.Provider>\n );\n}\n\nfunction ToastCard({ item, onClose }: { item: ToastItem; onClose: () => void }) {\n return (\n <div className={`mcl-toast mcl-toast-${item.variant ?? \"info\"}`} role=\"status\">\n <span className=\"mcl-toast-dot\" aria-hidden=\"true\" />\n <div className=\"mcl-toast-content\">\n {item.title && <div className=\"mcl-toast-title\">{item.title}</div>}\n {item.message && <div className=\"mcl-toast-message\">{item.message}</div>}\n </div>\n <button type=\"button\" className=\"mcl-toast-close\" onClick={onClose} aria-label=\"Dismiss notification\">\n ✕\n </button>\n </div>\n );\n}\n\nexport function useToast(): ToastContextValue {\n const ctx = useContext(ToastContext);\n if (!ctx) throw new Error(\"useToast must be used inside <ToastProvider>.\");\n return ctx;\n}\n","\"use client\";\n\nimport React, { useState } from \"react\";\n\nexport interface NavLinkItem {\n href: string;\n label: React.ReactNode;\n}\n\nexport interface NavbarProps {\n brand?: React.ReactNode;\n links?: NavLinkItem[];\n /** Href to highlight as active (matches a link's href). */\n activeHref?: string;\n /** Right-side slot: theme toggle, actions, etc. */\n right?: React.ReactNode;\n sticky?: boolean;\n className?: string;\n}\n\n/** Clay pill navbar — framework-agnostic (plain <a> links, works everywhere). */\nexport function Navbar({ brand, links = [], activeHref, right, sticky = true, className = \"\" }: NavbarProps) {\n const [open, setOpen] = useState(false);\n\n return (\n <nav className={`mcl-navbar${sticky ? \" mcl-navbar-sticky\" : \"\"} ${className}`.trim()}>\n <div className=\"mcl-navbar-inner\">\n {brand && (\n <a className=\"mcl-navbar-brand\" href=\"/\">\n {brand}\n </a>\n )}\n {links.length > 0 && (\n <button\n type=\"button\"\n className=\"mcl-navbar-toggle\"\n aria-expanded={open}\n aria-label=\"Toggle menu\"\n onClick={() => setOpen((o) => !o)}\n >\n <span className=\"mcl-navbar-burger\" aria-hidden=\"true\" />\n </button>\n )}\n {links.length > 0 && (\n <ul className={`mcl-navbar-links${open ? \" mcl-navbar-open\" : \"\"}`}>\n {links.map((l) => (\n <li key={l.href}>\n <a\n href={l.href}\n className={`mcl-navbar-link${activeHref === l.href ? \" mcl-navbar-link-active\" : \"\"}`}\n onClick={() => setOpen(false)}\n aria-current={activeHref === l.href ? \"page\" : undefined}\n >\n {l.label}\n </a>\n </li>\n ))}\n </ul>\n )}\n {right && <div className=\"mcl-navbar-right\">{right}</div>}\n </div>\n </nav>\n );\n}\n","import React from \"react\";\n\nexport type StatTone = \"primary\" | \"secondary\" | \"accent\" | \"danger\" | \"info\";\n\nexport interface StatProps {\n value: React.ReactNode;\n label?: React.ReactNode;\n tone?: StatTone;\n className?: string;\n}\n\nexport function Stat({ value, label, tone = \"primary\", className = \"\" }: StatProps) {\n return (\n <div className={`mcl-stat mcl-stat-${tone} ${className}`.trim()}>\n <b className=\"mcl-stat-value\">{value}</b>\n {label && <span className=\"mcl-stat-label\">{label}</span>}\n </div>\n );\n}\n","import React from \"react\";\n\nexport interface DividerProps extends React.HTMLAttributes<HTMLElement> {\n orientation?: \"horizontal\" | \"vertical\";\n /** Renders an inset line — text — inset line. */\n label?: React.ReactNode;\n}\n\nexport function Divider({ orientation = \"horizontal\", label, className = \"\", ...rest }: DividerProps) {\n if (label !== undefined && label !== null) {\n return (\n <div className={`mcl-divider-label ${className}`.trim()} role=\"separator\" {...rest}>\n <span className=\"mcl-divider-label-text\">{label}</span>\n </div>\n );\n }\n return (\n <div\n className={`mcl-divider mcl-divider-${orientation} ${className}`.trim()}\n role=\"separator\"\n {...rest}\n />\n );\n}\n","import React from \"react\";\n\nexport type StackGap = \"none\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport interface StackProps extends React.HTMLAttributes<HTMLDivElement> {\n direction?: \"row\" | \"column\";\n gap?: StackGap;\n wrap?: boolean;\n align?: \"start\" | \"center\" | \"end\" | \"stretch\" | \"baseline\";\n justify?: \"start\" | \"center\" | \"end\" | \"between\" | \"around\";\n}\n\nexport function Stack({\n direction = \"column\",\n gap = \"md\",\n wrap = false,\n align,\n justify,\n className = \"\",\n ...rest\n}: StackProps) {\n const cls = [\n \"mcl-stack\",\n direction === \"row\" ? \"mcl-stack-row\" : \"\",\n `mcl-stack-gap-${gap}`,\n wrap ? \"mcl-stack-wrap\" : \"\",\n align ? `mcl-stack-align-${align}` : \"\",\n justify ? `mcl-stack-justify-${justify}` : \"\",\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n return <div className={cls} {...rest} />;\n}\n"],"mappings":"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","names":["import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","React","Button","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","React","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime"]}
package/dist/index.d.mts CHANGED
@@ -124,21 +124,6 @@ interface TextareaProps extends React.TextareaHTMLAttributes<HTMLTextAreaElement
124
124
  }
125
125
  declare function Textarea({ label, hint, error, size, block, className, id, rows, ...rest }: TextareaProps): React.JSX.Element;
126
126
 
127
- interface SelectOption {
128
- value: string;
129
- label: string;
130
- }
131
- interface SelectProps extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, "size"> {
132
- label?: React.ReactNode;
133
- hint?: React.ReactNode;
134
- error?: string;
135
- size?: "sm" | "md" | "lg";
136
- /** Convenience over children: [{ value, label }] */
137
- options?: SelectOption[];
138
- placeholder?: string;
139
- }
140
- declare function Select({ label, hint, error, size, options, placeholder, className, id, children, ...rest }: SelectProps): React.JSX.Element;
141
-
142
127
  interface CheckboxProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "type"> {
143
128
  label?: React.ReactNode;
144
129
  /** Shows a dash instead of a tick — the classic "some children selected" state. */
@@ -391,4 +376,4 @@ interface StackProps extends React.HTMLAttributes<HTMLDivElement> {
391
376
  }
392
377
  declare function Stack({ direction, gap, wrap, align, justify, className, ...rest }: StackProps): React.JSX.Element;
393
378
 
394
- export { Accordion, type AccordionEntry, type AccordionProps, Alert, type AlertProps, type AlertVariant, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, type AvatarSize, type AvatarStatus, Badge, type BadgeProps, type BadgeVariant, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, type ButtonSize, type ButtonVariant, COLOR_SWATCHES, Card, CardBody, CardFooter, CardHeader, type CardProps, CardTitle, Checkbox, CheckboxGroup, type CheckboxGroupOption, type CheckboxGroupProps, type CheckboxProps, type ColorOverrides, Divider, type DividerProps, Dropdown, type DropdownItem, type DropdownProps, type FieldSize, Input, type InputProps, Kbd, type KbdProps, MarclayProvider, type MarclayProviderProps, Modal, type ModalProps, type ModePreference, type NavLinkItem, Navbar, type NavbarProps, PRESETS, type PresetInfo, type PresetName, Progress, type ProgressProps, type ProgressTone, Radio, type RadioProps, Range, type RangeProps, Select, type SelectOption, type SelectProps, Skeleton, type SkeletonProps, Spinner, type SpinnerProps, Stack, type StackGap, type StackProps, Stat, type StatProps, type StatTone, Switch, type SwitchProps, type TabItem, Tabs, type TabsProps, Textarea, type TextareaProps, ThemeMenu, type ThemeMenuProps, type ThemeMode, ThemeProvider, ThemeToggle, type ThemeToggleProps, type ToastOptions, type ToastPlacement, ToastProvider, type ToastProviderProps, type ToastVariant, Tooltip, type TooltipPlacement, type TooltipProps, useTheme, useToast };
379
+ export { Accordion, type AccordionEntry, type AccordionProps, Alert, type AlertProps, type AlertVariant, Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, type AvatarSize, type AvatarStatus, Badge, type BadgeProps, type BadgeVariant, Button, ButtonGroup, type ButtonGroupProps, type ButtonProps, type ButtonSize, type ButtonVariant, COLOR_SWATCHES, Card, CardBody, CardFooter, CardHeader, type CardProps, CardTitle, Checkbox, CheckboxGroup, type CheckboxGroupOption, type CheckboxGroupProps, type CheckboxProps, type ColorOverrides, Divider, type DividerProps, Dropdown, type DropdownItem, type DropdownProps, type FieldSize, Input, type InputProps, Kbd, type KbdProps, MarclayProvider, type MarclayProviderProps, Modal, type ModalProps, type ModePreference, type NavLinkItem, Navbar, type NavbarProps, PRESETS, type PresetInfo, type PresetName, Progress, type ProgressProps, type ProgressTone, Radio, type RadioProps, Range, type RangeProps, Skeleton, type SkeletonProps, Spinner, type SpinnerProps, Stack, type StackGap, type StackProps, Stat, type StatProps, type StatTone, Switch, type SwitchProps, type TabItem, Tabs, type TabsProps, Textarea, type TextareaProps, ThemeMenu, type ThemeMenuProps, type ThemeMode, ThemeProvider, ThemeToggle, type ThemeToggleProps, type ToastOptions, type ToastPlacement, ToastProvider, type ToastProviderProps, type ToastVariant, Tooltip, type TooltipPlacement, type TooltipProps, useTheme, useToast };