@astralui/core 0.1.1 → 0.1.3

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/theme/ColorSchemeProvider.tsx","../src/theme/generateColors.ts","../src/theme/AstralProvider.tsx","../src/components/overlay.tsx","../src/components/Toast.tsx","../src/components/DateInput.tsx","../src/components/Spinner.tsx"],"names":["createContext","useState","useEffect","useCallback","jsx","useContext","chroma","useMemo","jsxs","createPortal","IconX","useRef","clean","IconChevronDown","Fragment","IconCheck","IconExclamationCircle","IconAlertTriangle","IconInfoCircle","useSyncExternalStore","Spinner"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createContext, useContext, useState, useEffect, useCallback } from 'react';\nimport type { ReactNode } from 'react';\n\n/* Light/dark control. Owns the color scheme, persists it to localStorage, and sets\n `data-astral-scheme` + `color-scheme` on <html> - which the AstralUI tokens (and\n every `light-dark()`) key off. The sole source of truth for the active scheme. */\n\nexport type ColorScheme = 'light' | 'dark';\n\ninterface ColorSchemeContextType {\n colorScheme: ColorScheme;\n setColorScheme: (scheme: ColorScheme) => void;\n toggle: () => void;\n}\n\nconst ColorSchemeContext = createContext<ColorSchemeContextType>({\n colorScheme: 'dark',\n setColorScheme: () => {},\n toggle: () => {},\n});\n\ninterface ColorSchemeProviderProps {\n children: ReactNode;\n /** Initial scheme when nothing is persisted yet. Default 'dark'. */\n defaultScheme?: ColorScheme;\n /** localStorage key for persistence. Default 'astral-color-scheme'. */\n storageKey?: string;\n}\n\nexport function ColorSchemeProvider({ children, defaultScheme = 'dark', storageKey = 'astral-color-scheme' }: ColorSchemeProviderProps) {\n const [colorScheme, setScheme] = useState<ColorScheme>(() => {\n try {\n const v = localStorage.getItem(storageKey);\n if (v === 'light' || v === 'dark') return v;\n } catch { /* ignore */ }\n return defaultScheme;\n });\n\n useEffect(() => {\n const root = document.documentElement;\n root.setAttribute('data-astral-scheme', colorScheme);\n root.style.colorScheme = colorScheme;\n }, [colorScheme]);\n\n const setColorScheme = useCallback((scheme: ColorScheme) => {\n try { localStorage.setItem(storageKey, scheme); } catch { /* ignore */ }\n setScheme(scheme);\n }, [storageKey]);\n\n const toggle = useCallback(() => {\n setScheme(prev => {\n const next = prev === 'dark' ? 'light' : 'dark';\n try { localStorage.setItem(storageKey, next); } catch { /* ignore */ }\n return next;\n });\n }, [storageKey]);\n\n return (\n <ColorSchemeContext.Provider value={{ colorScheme, setColorScheme, toggle }}>\n {children}\n </ColorSchemeContext.Provider>\n );\n}\n\nexport function useColorScheme() {\n return useContext(ColorSchemeContext);\n}\n","import chroma from 'chroma-js';\n\n/* Produces a 10-shade palette from a single hex, using fixed lightness/saturation\n maps and chroma-js LCH math. Used by AstralThemeProvider to turn an org's chosen\n brand color into a full palette. */\n\nconst LIGHTNESS_MAP = [0.96, 0.907, 0.805, 0.697, 0.605, 0.547, 0.518, 0.445, 0.395, 0.34];\nconst SATURATION_MAP = [0.32, 0.16, 0.08, 0.04, 0, 0, 0.04, 0.08, 0.16, 0.32];\n\nfunction getClosestLightness(colorObject: chroma.Color): number {\n const lightnessGoal = colorObject.get('hsl.l');\n return LIGHTNESS_MAP.reduce((prev, curr) =>\n Math.abs(curr - lightnessGoal) < Math.abs(prev - lightnessGoal) ? curr : prev,\n );\n}\n\nexport function generateColors(color: string): string[] {\n const colorObject = chroma(color);\n const closestLightness = getClosestLightness(colorObject);\n const baseColorIndex = LIGHTNESS_MAP.findIndex((l) => l === closestLightness);\n\n const colors = LIGHTNESS_MAP\n .map((l) => colorObject.set('hsl.l', l))\n .map((c) => chroma(c))\n .map((c, i) => {\n const saturationDelta = SATURATION_MAP[i] - SATURATION_MAP[baseColorIndex];\n return saturationDelta >= 0 ? c.saturate(saturationDelta) : c.desaturate(saturationDelta * -1);\n });\n\n colors[baseColorIndex] = chroma(color);\n return colors.map((c) => c.hex());\n}\n","import { useMemo, useState, useCallback, createContext, useContext } from 'react';\nimport type { ReactNode } from 'react';\nimport { generateColors } from './generateColors';\n\n/* Per-org / per-brand theming. Computes the brand palette + surface overrides and\n injects them as a runtime <style> that overrides the base --astral-* tokens\n (from tokens.css) per scheme. Selectors use html:root[data-astral-scheme=\"...\"]\n (specificity 0,2,1, so they win over the :root base tokens). No colors -> empty\n style -> base tokens. Prop-driven (no app coupling): pass the brand colors in. */\n\n/* ── Color preview context (live editing) ── */\n\nexport interface AstralThemeColors {\n primary_color?: string | null;\n background_color?: string | null;\n card_color?: string | null;\n navbar_color?: string | null;\n font_color?: string | null;\n light_primary_color?: string | null;\n light_background_color?: string | null;\n light_card_color?: string | null;\n light_navbar_color?: string | null;\n light_font_color?: string | null;\n}\n\ninterface ThemePreviewContextType {\n preview: AstralThemeColors | null;\n setPreview: (colors: AstralThemeColors | null) => void;\n}\n\nconst ThemePreviewContext = createContext<ThemePreviewContextType>({\n preview: null,\n setPreview: () => {},\n});\n\nexport function useThemePreview() {\n return useContext(ThemePreviewContext);\n}\n\n/* ── Helpers ── */\n\nconst HEX_RE = /^#[0-9a-f]{6}$/i;\nconst isValidHex = (v: string | null | undefined): v is string => !!v && HEX_RE.test(v);\n\nfunction adjustHex(hex: string, amount: number): string {\n const c = hex.replace('#', '');\n const r = Math.max(0, Math.min(255, parseInt(c.substring(0, 2), 16) + amount));\n const g = Math.max(0, Math.min(255, parseInt(c.substring(2, 4), 16) + amount));\n const b = Math.max(0, Math.min(255, parseInt(c.substring(4, 6), 16) + amount));\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\n}\n\nfunction hexToRgba(hex: string, alpha: number): string {\n const c = hex.replace('#', '');\n const r = parseInt(c.substring(0, 2), 16);\n const g = parseInt(c.substring(2, 4), 16);\n const b = parseInt(c.substring(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\n/* primaryShade is { light: 6, dark: 8 }; -light is the shade-6 color at .1/.15 alpha\n (.12/.2 hovered); -light-color is shade 6 (light) / 3 (dark). Theme-level constants,\n identical for any palette. */\nfunction primaryVars(palette: string[], scheme: 'light' | 'dark'): string[] {\n if (scheme === 'light') {\n return [\n `--astral-primary-color-filled:${palette[6]}`,\n `--astral-primary-color-filled-hover:${palette[7]}`,\n `--astral-primary-color-light:${hexToRgba(palette[6], 0.1)}`,\n `--astral-primary-color-light-hover:${hexToRgba(palette[6], 0.12)}`,\n `--astral-primary-color-light-color:${palette[6]}`,\n ];\n }\n return [\n `--astral-primary-color-filled:${palette[8]}`,\n `--astral-primary-color-filled-hover:${palette[9]}`,\n `--astral-primary-color-light:${hexToRgba(palette[6], 0.15)}`,\n `--astral-primary-color-light-hover:${hexToRgba(palette[6], 0.2)}`,\n `--astral-primary-color-light-color:${palette[3]}`,\n ];\n}\n\nfunction safeGenerate(hex: string): string[] | null {\n try { return generateColors(hex) as unknown as string[]; } catch { return null; }\n}\n\nexport function buildOrgCss(src: AstralThemeColors): string {\n const brand = isValidHex(src.primary_color) ? safeGenerate(src.primary_color!) : null;\n const lightBrand = isValidHex(src.light_primary_color) ? safeGenerate(src.light_primary_color!) : null;\n const lightPalette = lightBrand ?? brand; // light mode uses lightBrand, else falls back to brand\n const noDarkBrand = !brand; // the base accent palette is only overridden in light when no dark brand\n\n const vBg = isValidHex(src.background_color) ? src.background_color! : '';\n const vCard = isValidHex(src.card_color) ? src.card_color! : '';\n const vNav = isValidHex(src.navbar_color) ? src.navbar_color! : '';\n const vFont = isValidHex(src.font_color) ? src.font_color! : '';\n const vLBg = isValidHex(src.light_background_color) ? src.light_background_color! : '';\n const vLCard = isValidHex(src.light_card_color) ? src.light_card_color! : '';\n const vLNav = isValidHex(src.light_navbar_color) ? src.light_navbar_color! : '';\n const vLFont = isValidHex(src.light_font_color) ? src.light_font_color! : '';\n\n const dark: string[] = [];\n const light: string[] = [];\n\n /* ── dark scheme ── */\n if (brand) dark.push(...primaryVars(brand, 'dark'));\n if (vFont) {\n // dark palette: dark-0 = primary text; the dark text token mirrors dark-0.\n dark.push(`--astral-color-dark-0:${vFont}`, `--astral-color-dark-1:${adjustHex(vFont, -30)}`, `--astral-color-dark-2:${adjustHex(vFont, -60)}`, `--astral-color-text:${vFont}`);\n }\n if (vCard) dark.push(`--astral-color-dark-6:${vCard}`);\n if (vBg) dark.push(`--astral-color-dark-7:${vBg}`, `--astral-color-dark-9:${adjustHex(vBg, -10)}`, `--astral-color-body:${vBg}`, `--astral-app-bg:${vBg}`);\n if (vNav) dark.push(`--astral-color-dark-8:${vNav}`, `--astral-app-nav:${vNav}`);\n if (vCard) dark.push(`--astral-app-card:${vCard}`);\n\n /* ── light scheme ── */\n if (lightBrand && noDarkBrand) {\n // only-light-primary: override the base accent (violet) palette so accent-derived\n // tokens (e.g. brand-text) follow the light primary in light mode.\n for (let i = 0; i < 10; i++) light.push(`--astral-color-violet-${i}:${lightBrand[i]}`);\n }\n if (lightPalette) light.push(...primaryVars(lightPalette, 'light'));\n if (vLFont) light.push(`--astral-color-text:${vLFont}`);\n if (vLBg) light.push(`--astral-app-bg:${vLBg}`);\n if (vLNav) light.push(`--astral-app-nav:${vLNav}`);\n if (vLCard) light.push(`--astral-app-card:${vLCard}`);\n\n let css = '';\n if (dark.length) css += `html:root[data-astral-scheme=\"dark\"]{${dark.join(';')}}`;\n if (light.length) css += `html:root[data-astral-scheme=\"light\"]{${light.join(';')}}`;\n return css;\n}\n\n/* ── Provider ──\n Pass the brand colors via `colors`. While editing, call setPreview() (from\n useThemePreview) with partial colors for an instant live preview. */\n\nexport function AstralThemeProvider({ colors, children }: { colors?: AstralThemeColors | null; children: ReactNode }) {\n const [preview, setPreview] = useState<AstralThemeColors | null>(null);\n\n const stableSetPreview = useCallback((c: AstralThemeColors | null) => {\n setPreview(c);\n }, []);\n\n const effective: AstralThemeColors | null = preview\n ? { ...(colors ?? {}), ...preview }\n : (colors ?? null);\n\n const orgCss = useMemo(\n () => (effective ? buildOrgCss(effective) : ''),\n [effective ? JSON.stringify(effective) : ''],\n );\n\n return (\n <ThemePreviewContext.Provider value={{ preview, setPreview: stableSetPreview }}>\n <style data-astral-theme>{orgCss}</style>\n {children}\n </ThemePreviewContext.Provider>\n );\n}\n","import { useCallback, useEffect, useRef, useState, type ReactNode, type CSSProperties, type KeyboardEvent as ReactKeyboardEvent } from 'react';\nimport { createPortal } from 'react-dom';\nimport { IconX, IconChevronDown } from '@tabler/icons-react';\n\nfunction useDismiss(opened: boolean, onClose: () => void) {\n useEffect(() => {\n if (!opened) return;\n const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose(); };\n document.addEventListener('keydown', onKey);\n const prev = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return () => { document.removeEventListener('keydown', onKey); document.body.style.overflow = prev; };\n }, [opened, onClose]);\n}\n\ninterface ShellProps {\n opened: boolean;\n onClose: () => void;\n title: ReactNode;\n brand?: string;\n width?: number;\n /** Override the overlay z-index (default 300). Use to stack over flow-editor modals. */\n zIndex?: number;\n children: ReactNode;\n}\n\n/** Centered Astral modal (portal + overlay + escape + click-outside). */\nexport function AstralModal({ opened, onClose, title, brand, width = 460, zIndex, children }: ShellProps) {\n useDismiss(opened, onClose);\n if (!opened) return null;\n const style = { maxWidth: width, ...(brand ? { '--au-ic': brand } : {}) } as CSSProperties;\n return createPortal(\n <div className=\"au-modal-overlay\" onMouseDown={onClose} style={zIndex != null ? { zIndex } : undefined}>\n <div className=\"au-modal-panel\" style={style} onMouseDown={(e) => e.stopPropagation()}>\n <div className=\"au-modal-head\">\n <span className=\"au-modal-title\">{title}</span>\n <button type=\"button\" className=\"au-modal-x\" onClick={onClose} aria-label=\"Close\"><IconX /></button>\n </div>\n <div className=\"au-modal-body\">{children}</div>\n </div>\n </div>,\n document.body,\n );\n}\n\n/** Right-side Astral drawer. */\nexport function AstralDrawer({ opened, onClose, title, brand, width = 440, zIndex, children }: ShellProps) {\n useDismiss(opened, onClose);\n if (!opened) return null;\n const style = { width, ...(brand ? { '--au-ic': brand } : {}) } as CSSProperties;\n return createPortal(\n <div className=\"au-drawer-overlay\" onMouseDown={onClose} style={zIndex != null ? { zIndex } : undefined}>\n <div className=\"au-drawer-panel\" style={style} onMouseDown={(e) => e.stopPropagation()}>\n <div className=\"au-drawer-head\">\n <span className=\"au-drawer-title\">{title}</span>\n <button type=\"button\" className=\"au-modal-x\" onClick={onClose} aria-label=\"Close\"><IconX /></button>\n </div>\n <div className=\"au-drawer-body\">{children}</div>\n </div>\n </div>,\n document.body,\n );\n}\n\n/** Astral 6-box code input, with auto-advance, backspace, paste and arrows. */\nexport function AstralPinInput({ length = 6, value, onChange, autoFocus }: {\n length?: number;\n value: string;\n onChange: (value: string) => void;\n autoFocus?: boolean;\n}) {\n const refs = useRef<Array<HTMLInputElement | null>>([]);\n const digits = Array.from({ length }, (_, i) => value[i] ?? '');\n\n const focusBox = (i: number) => { refs.current[Math.max(0, Math.min(length - 1, i))]?.focus(); };\n\n const handleChange = (i: number, raw: string) => {\n const clean = raw.replace(/\\D/g, '');\n if (!clean) return;\n const arr = value.split('');\n let pos = i;\n for (const ch of clean) {\n if (pos >= length) break;\n arr[pos] = ch;\n pos++;\n }\n onChange(arr.join('').slice(0, length));\n focusBox(pos);\n };\n\n const handleKeyDown = (i: number, e: ReactKeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace') {\n e.preventDefault();\n const arr = value.split('');\n if (arr[i]) {\n arr[i] = '';\n onChange(arr.join(''));\n } else if (i > 0) {\n arr[i - 1] = '';\n onChange(arr.join(''));\n focusBox(i - 1);\n }\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n focusBox(i - 1);\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n focusBox(i + 1);\n }\n };\n\n return (\n <div className=\"au-pin\">\n {digits.map((d, i) => (\n <input\n key={i}\n ref={(el) => { refs.current[i] = el; }}\n className=\"au-pin-box\"\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n aria-label={`Digit ${i + 1}`}\n value={d}\n autoFocus={autoFocus && i === 0}\n onChange={(e) => handleChange(i, e.currentTarget.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onFocus={(e) => e.currentTarget.select()}\n />\n ))}\n </div>\n );\n}\n\nexport interface AstralSelectOption { value: string; label: string; }\n\n/** Astral select with optional search/create/clear - combobox. */\nexport function AstralSelect({ value, onChange, options, placeholder, disabled, searchable, searchPlaceholder, noResults, clearable, creatable }: {\n value: string | null;\n onChange: (value: string) => void;\n options: AstralSelectOption[];\n placeholder?: string;\n disabled?: boolean;\n searchable?: boolean;\n searchPlaceholder?: string;\n noResults?: string;\n clearable?: boolean;\n creatable?: boolean;\n}) {\n const [open, setOpen] = useState(false);\n const [q, setQ] = useState('');\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const [pos, setPos] = useState<{ left: number; top?: number; bottom?: number; width: number; maxHeight: number } | null>(null);\n\n const reposition = useCallback(() => {\n const el = triggerRef.current;\n if (!el) return;\n const r = el.getBoundingClientRect();\n const spaceBelow = window.innerHeight - r.bottom - 12;\n const spaceAbove = r.top - 12;\n const flipUp = spaceBelow < 200 && spaceAbove > spaceBelow;\n setPos({\n left: r.left,\n width: r.width,\n ...(flipUp\n ? { bottom: window.innerHeight - r.top + 5, maxHeight: Math.max(140, Math.min(300, spaceAbove)) }\n : { top: r.bottom + 5, maxHeight: Math.max(140, Math.min(300, spaceBelow)) }),\n });\n }, []);\n\n useEffect(() => {\n if (!open) return;\n reposition();\n const onScroll = () => reposition();\n const onResize = () => setOpen(false);\n const onDoc = (e: MouseEvent) => {\n if (triggerRef.current?.contains(e.target as Node)) return;\n if (menuRef.current?.contains(e.target as Node)) return;\n setOpen(false);\n };\n window.addEventListener('scroll', onScroll, true);\n window.addEventListener('resize', onResize);\n // Capture phase: AstralModal/AstralDrawer panels stopPropagation on mousedown,\n // which would otherwise block this outside-click close when the overlay lives inside one.\n document.addEventListener('mousedown', onDoc, true);\n return () => {\n window.removeEventListener('scroll', onScroll, true);\n window.removeEventListener('resize', onResize);\n document.removeEventListener('mousedown', onDoc, true);\n };\n }, [open, reposition]);\n\n const selected = options.find(o => o.value === value);\n const hasValue = value != null && value !== '';\n const display = selected ? selected.label : (value ?? '');\n const filtered = searchable && q.trim()\n ? options.filter(o => o.label.toLowerCase().includes(q.trim().toLowerCase()))\n : options;\n const showCreate = !!creatable && !!q.trim() && !options.some(o => o.label.toLowerCase() === q.trim().toLowerCase());\n\n return (\n <div className=\"au-select\">\n <button ref={triggerRef} type=\"button\" className=\"au-input au-select-trigger\" disabled={disabled} onClick={() => setOpen(o => !o)}>\n <span className={hasValue ? '' : 'ph'}>{hasValue ? display : placeholder}</span>\n {clearable && hasValue ? (\n <span className=\"au-select-caret au-select-clear\" role=\"button\" tabIndex={-1}\n onClick={(e) => { e.stopPropagation(); onChange(''); }}><IconX size={14} /></span>\n ) : (\n <IconChevronDown size={15} className=\"au-select-caret\" />\n )}\n </button>\n {open && !disabled && pos && createPortal(\n <div\n ref={menuRef}\n className=\"au-select-menu\"\n style={{ left: pos.left, top: pos.top, bottom: pos.bottom, width: pos.width, maxHeight: pos.maxHeight }}\n >\n {searchable && (\n <input\n autoFocus\n className=\"au-select-search\"\n placeholder={searchPlaceholder}\n value={q}\n onChange={(e) => setQ(e.currentTarget.value)}\n />\n )}\n {filtered.length === 0 && !showCreate && <div className=\"au-select-empty\">{noResults}</div>}\n {filtered.map(o => (\n <button\n type=\"button\"\n key={o.value}\n className={`au-select-opt${o.value === value ? ' on' : ''}`}\n onClick={() => { onChange(o.value); setOpen(false); setQ(''); }}\n >\n {o.label}\n </button>\n ))}\n {showCreate && (\n <button type=\"button\" className=\"au-select-opt au-select-create\"\n onClick={() => { onChange(q.trim()); setOpen(false); setQ(''); }}>\n + {q.trim()}\n </button>\n )}\n </div>,\n document.body,\n )}\n </div>\n );\n}\n\nexport interface AstralMenuItem { key?: string; label: ReactNode; icon?: ReactNode; onClick?: () => void; danger?: boolean; divider?: boolean; disabled?: boolean; }\n\n/** Astral action-menu dropdown - portalled like AstralSelect. */\nexport function AstralMenu({ trigger, items, align = 'end', width = 220 }: {\n trigger: ReactNode;\n items: AstralMenuItem[];\n align?: 'start' | 'end';\n width?: number;\n}) {\n const [open, setOpen] = useState(false);\n const anchorRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const [pos, setPos] = useState<{ left: number; top?: number; bottom?: number; minWidth: number; maxHeight: number } | null>(null);\n\n const reposition = useCallback(() => {\n const el = anchorRef.current;\n if (!el) return;\n const r = el.getBoundingClientRect();\n const spaceBelow = window.innerHeight - r.bottom - 12;\n const spaceAbove = r.top - 12;\n const flipUp = spaceBelow < 220 && spaceAbove > spaceBelow;\n const left = align === 'end' ? Math.max(8, Math.min(r.right - width, window.innerWidth - width - 8)) : Math.min(r.left, window.innerWidth - width - 8);\n setPos({\n left,\n minWidth: width,\n ...(flipUp\n ? { bottom: window.innerHeight - r.top + 5, maxHeight: Math.max(160, Math.min(380, spaceAbove)) }\n : { top: r.bottom + 5, maxHeight: Math.max(160, Math.min(380, spaceBelow)) }),\n });\n }, [align, width]);\n\n useEffect(() => {\n if (!open) return;\n reposition();\n const onScroll = () => reposition();\n const onResize = () => setOpen(false);\n const onDoc = (e: MouseEvent) => {\n if (anchorRef.current?.contains(e.target as Node)) return;\n if (menuRef.current?.contains(e.target as Node)) return;\n setOpen(false);\n };\n window.addEventListener('scroll', onScroll, true);\n window.addEventListener('resize', onResize);\n // Capture phase: AstralModal/AstralDrawer panels stopPropagation on mousedown,\n // which would otherwise block this outside-click close when the overlay lives inside one.\n document.addEventListener('mousedown', onDoc, true);\n return () => {\n window.removeEventListener('scroll', onScroll, true);\n window.removeEventListener('resize', onResize);\n document.removeEventListener('mousedown', onDoc, true);\n };\n }, [open, reposition]);\n\n return (\n <>\n <div className=\"au-menu-anchor\" ref={anchorRef} onClick={() => setOpen(o => !o)}>\n {trigger}\n </div>\n {open && pos && createPortal(\n <div ref={menuRef} className=\"au-menu\" style={{ left: pos.left, top: pos.top, bottom: pos.bottom, minWidth: pos.minWidth, maxHeight: pos.maxHeight }}>\n {items.map((it, i) => it.divider\n ? <div key={it.key ?? `d${i}`} className=\"au-menu-divider\" />\n : (\n <button type=\"button\" key={it.key ?? i} className={`au-menu-item${it.danger ? ' danger' : ''}`} disabled={it.disabled}\n onClick={() => { setOpen(false); it.onClick?.(); }}>\n {it.icon && <span className=\"au-menu-ic\">{it.icon}</span>}\n <span className=\"au-menu-label\">{it.label}</span>\n </button>\n ))}\n </div>,\n document.body,\n )}\n </>\n );\n}\n","import { useSyncExternalStore } from 'react';\nimport type { ReactNode, CSSProperties } from 'react';\nimport { createPortal } from 'react-dom';\nimport { IconX, IconCheck, IconAlertTriangle, IconInfoCircle, IconExclamationCircle } from '@tabler/icons-react';\n\n/* AstralUI toast system. The `notifications` object (show/update/hide/clean, returns\n an id) is a small imperative store; <AstralToaster/> renders the live toasts and is\n mounted once at the app root. Theme-aware via the --astral-* tokens. */\n\nexport interface ToastOptions {\n id?: string;\n title?: ReactNode;\n message?: ReactNode;\n color?: string;\n icon?: ReactNode;\n loading?: boolean;\n autoClose?: number | false;\n withCloseButton?: boolean;\n onClose?: () => void;\n /** accepted for API compatibility; the toaster uses one global position */\n position?: string;\n /** tolerate any other notification prop a call site may pass (radius, withBorder, style, ...) */\n [key: string]: unknown;\n}\n\ninterface Toast extends ToastOptions { id: string; }\n\nlet toasts: Toast[] = [];\nconst listeners = new Set<() => void>();\nconst timers = new Map<string, ReturnType<typeof setTimeout>>();\nlet counter = 0;\n\nconst emit = () => listeners.forEach(l => l());\n\nfunction clearTimer(id: string) {\n const x = timers.get(id);\n if (x) { clearTimeout(x); timers.delete(id); }\n}\n\nfunction scheduleAutoClose(t: Toast) {\n clearTimer(t.id);\n if (t.autoClose === false || t.loading) return; // loading toasts stay until updated\n const ms = typeof t.autoClose === 'number' ? t.autoClose : 4000;\n timers.set(t.id, setTimeout(() => hide(t.id), ms));\n}\n\nfunction show(opts: ToastOptions): string {\n const id = opts.id ?? `toast-${++counter}`;\n const existing = toasts.find(t => t.id === id);\n const toast: Toast = { withCloseButton: true, ...existing, ...opts, id };\n toasts = existing ? toasts.map(t => (t.id === id ? toast : t)) : [...toasts, toast];\n emit();\n scheduleAutoClose(toast);\n return id;\n}\n\nfunction update(opts: ToastOptions): string {\n if (!opts.id) return show(opts);\n const existing = toasts.find(t => t.id === opts.id);\n if (!existing) return show(opts);\n const toast: Toast = { ...existing, ...opts, id: opts.id };\n toasts = toasts.map(t => (t.id === opts.id ? toast : t));\n emit();\n scheduleAutoClose(toast);\n return opts.id;\n}\n\nfunction hide(id: string) {\n const t = toasts.find(x => x.id === id);\n clearTimer(id);\n toasts = toasts.filter(x => x.id !== id);\n emit();\n t?.onClose?.();\n}\n\nfunction clean() {\n toasts.forEach(t => clearTimer(t.id));\n toasts = [];\n emit();\n}\n\nexport const notifications = { show, update, hide, clean };\n\n/* ── Rendering ── */\n\nconst subscribe = (cb: () => void) => { listeners.add(cb); return () => { listeners.delete(cb); }; };\nconst getSnapshot = () => toasts;\n\nconst DEFAULT_ICON: Record<string, ReactNode> = {\n green: <IconCheck size={16} />,\n teal: <IconCheck size={16} />,\n red: <IconExclamationCircle size={16} />,\n orange: <IconAlertTriangle size={16} />,\n yellow: <IconAlertTriangle size={16} />,\n};\n\nfunction Spinner() {\n return <span className=\"au-toast-spin\" />;\n}\n\nfunction ToastCard({ t }: { t: Toast }) {\n const accent = t.color ? `var(--astral-color-${t.color}-6)` : 'var(--astral-color-default-border)';\n const lead = t.loading\n ? <Spinner />\n : t.icon\n ? t.icon\n : (t.color && DEFAULT_ICON[t.color]) || <IconInfoCircle size={16} />;\n return (\n <div className=\"au-toast\" style={{ ['--au-toast-accent' as string]: accent } as CSSProperties} role=\"status\">\n <span className=\"au-toast-lead\">{lead}</span>\n <div className=\"au-toast-body\">\n {t.title && <div className=\"au-toast-title\">{t.title}</div>}\n {t.message != null && <div className=\"au-toast-msg\">{t.message}</div>}\n </div>\n {t.withCloseButton !== false && (\n <button type=\"button\" className=\"au-toast-x\" onClick={() => hide(t.id)} aria-label=\"Close\"><IconX size={14} /></button>\n )}\n </div>\n );\n}\n\nexport function AstralToaster() {\n const items = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n if (typeof document === 'undefined') return null;\n return createPortal(\n <div className=\"au-toast-host\" role=\"region\" aria-live=\"polite\" aria-label=\"Notifications\">\n {items.map(t => <ToastCard key={t.id} t={t} />)}\n </div>,\n document.body,\n );\n}\n","import { useState, useEffect } from 'react';\nimport type { CSSProperties } from 'react';\n\n/* Native <input type=\"date\" | \"datetime-local\"> that mirrors exactly what the user\n types and only commits a parsed Date upward once the string is a COMPLETE, plausible\n value. A fully-controlled date input that round-trips every keystroke through\n `new Date(y, m-1, d)` hits JS's 0-99 -> 1900s year remap mid-typing (so \"2\" -> 1902),\n and the reformatted value fights the user's typing into a re-render storm that freezes\n the page. Keeping the string local and gating the commit avoids that entirely.\n `color-scheme` is left to inherit so the native calendar glyph follows the app theme. */\n\nconst pad2 = (n: number) => String(n).padStart(2, '0');\nconst pad4 = (n: number) => String(n).padStart(4, '0');\n\n/** Date -> \"YYYY-MM-DD\" (local) */\nexport function dateToInputStr(d: Date | null): string {\n if (!d || isNaN(d.getTime())) return '';\n return `${pad4(d.getFullYear())}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`;\n}\n\n/** Date -> \"YYYY-MM-DDTHH:mm\" (local) */\nexport function dateTimeToInputStr(d: Date | null): string {\n if (!d || isNaN(d.getTime())) return '';\n return `${dateToInputStr(d)}T${pad2(d.getHours())}:${pad2(d.getMinutes())}`;\n}\n\ninterface Props {\n type?: 'date' | 'datetime-local';\n value: Date | null;\n onChange: (d: Date | null) => void;\n min?: Date;\n max?: Date;\n className?: string;\n style?: CSSProperties;\n disabled?: boolean;\n 'aria-label'?: string;\n}\n\nexport default function DateInput({ type = 'date', value, onChange, min, max, className, style, disabled, 'aria-label': ariaLabel }: Props) {\n const isTime = type === 'datetime-local';\n const fmt = isTime ? dateTimeToInputStr : dateToInputStr;\n const [s, setS] = useState(() => fmt(value));\n // Re-sync from the parent (preset buttons, programmatic clears) without fighting typing.\n const t = value?.getTime();\n useEffect(() => { setS(fmt(value)); }, [t]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handle = (str: string) => {\n setS(str);\n if (str === '') { onChange(null); return; }\n const m = (isTime ? /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})$/ : /^(\\d{4})-(\\d{2})-(\\d{2})$/).exec(str);\n if (!m) return; // incomplete - hold locally, don't commit\n const y = Number(m[1]);\n if (y < 1970 || y > 2100) return; // implausible (mid-typed) year - wait for a full one\n const d = isTime\n ? new Date(y, Number(m[2]) - 1, Number(m[3]), Number(m[4]), Number(m[5]))\n : new Date(y, Number(m[2]) - 1, Number(m[3]));\n if (isNaN(d.getTime())) return;\n onChange(d);\n };\n\n return (\n <input\n type={type}\n className={className}\n style={style}\n disabled={disabled}\n aria-label={ariaLabel}\n value={s}\n min={min ? fmt(min) : undefined}\n max={max ? fmt(max) : undefined}\n onChange={e => handle(e.currentTarget.value)}\n />\n );\n}\n","import type { CSSProperties } from 'react';\n\n/* Minimal theme-aware spinner. Styled by the .au-spinner class (in tokens.css);\n size via the `size` prop (px). */\nexport function Spinner({ size = 24, className, style }: { size?: number; className?: string; style?: CSSProperties }) {\n return (\n <span\n className={className ? `au-spinner ${className}` : 'au-spinner'}\n style={{ width: size, height: size, ...style }}\n role=\"status\"\n aria-label=\"Loading\"\n />\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/theme/ColorSchemeProvider.tsx","../src/theme/generateColors.ts","../src/theme/AstralProvider.tsx","../src/components/overlay.tsx","../src/components/Toast.tsx","../src/components/DateInput.tsx","../src/components/Spinner.tsx","../src/components/Backgrounds.tsx","../src/components/Charts.tsx","../src/components/Auth.tsx","../src/components/ConfirmModal.tsx"],"names":["createContext","useState","useEffect","useCallback","jsx","useContext","chroma","useMemo","jsxs","createPortal","IconX","useRef","clean","IconChevronDown","Fragment","IconCheck","IconExclamationCircle","IconAlertTriangle","IconInfoCircle","useSyncExternalStore","Spinner","cls"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createContext, useContext, useState, useEffect, useCallback } from 'react';\nimport type { ReactNode } from 'react';\n\n/* Light/dark control. Owns the color scheme, persists it to localStorage, and sets\n `data-astral-scheme` + `color-scheme` on <html> - which the AstralUI tokens (and\n every `light-dark()`) key off. The sole source of truth for the active scheme. */\n\nexport type ColorScheme = 'light' | 'dark';\n\ninterface ColorSchemeContextType {\n colorScheme: ColorScheme;\n setColorScheme: (scheme: ColorScheme) => void;\n toggle: () => void;\n}\n\nconst ColorSchemeContext = createContext<ColorSchemeContextType>({\n colorScheme: 'dark',\n setColorScheme: () => {},\n toggle: () => {},\n});\n\ninterface ColorSchemeProviderProps {\n children: ReactNode;\n /** Initial scheme when nothing is persisted yet. Default 'dark'. */\n defaultScheme?: ColorScheme;\n /** localStorage key for persistence. Default 'astral-color-scheme'. */\n storageKey?: string;\n}\n\nexport function ColorSchemeProvider({ children, defaultScheme = 'dark', storageKey = 'astral-color-scheme' }: ColorSchemeProviderProps) {\n const [colorScheme, setScheme] = useState<ColorScheme>(() => {\n try {\n const v = localStorage.getItem(storageKey);\n if (v === 'light' || v === 'dark') return v;\n } catch { /* ignore */ }\n return defaultScheme;\n });\n\n useEffect(() => {\n const root = document.documentElement;\n root.setAttribute('data-astral-scheme', colorScheme);\n root.style.colorScheme = colorScheme;\n }, [colorScheme]);\n\n const setColorScheme = useCallback((scheme: ColorScheme) => {\n try { localStorage.setItem(storageKey, scheme); } catch { /* ignore */ }\n setScheme(scheme);\n }, [storageKey]);\n\n const toggle = useCallback(() => {\n setScheme(prev => {\n const next = prev === 'dark' ? 'light' : 'dark';\n try { localStorage.setItem(storageKey, next); } catch { /* ignore */ }\n return next;\n });\n }, [storageKey]);\n\n return (\n <ColorSchemeContext.Provider value={{ colorScheme, setColorScheme, toggle }}>\n {children}\n </ColorSchemeContext.Provider>\n );\n}\n\nexport function useColorScheme() {\n return useContext(ColorSchemeContext);\n}\n","import chroma from 'chroma-js';\n\n/* Produces a 10-shade palette from a single hex, using fixed lightness/saturation\n maps and chroma-js LCH math. Used by AstralThemeProvider to turn an org's chosen\n brand color into a full palette. */\n\nconst LIGHTNESS_MAP = [0.96, 0.907, 0.805, 0.697, 0.605, 0.547, 0.518, 0.445, 0.395, 0.34];\nconst SATURATION_MAP = [0.32, 0.16, 0.08, 0.04, 0, 0, 0.04, 0.08, 0.16, 0.32];\n\nfunction getClosestLightness(colorObject: chroma.Color): number {\n const lightnessGoal = colorObject.get('hsl.l');\n return LIGHTNESS_MAP.reduce((prev, curr) =>\n Math.abs(curr - lightnessGoal) < Math.abs(prev - lightnessGoal) ? curr : prev,\n );\n}\n\nexport function generateColors(color: string): string[] {\n const colorObject = chroma(color);\n const closestLightness = getClosestLightness(colorObject);\n const baseColorIndex = LIGHTNESS_MAP.findIndex((l) => l === closestLightness);\n\n const colors = LIGHTNESS_MAP\n .map((l) => colorObject.set('hsl.l', l))\n .map((c) => chroma(c))\n .map((c, i) => {\n const saturationDelta = SATURATION_MAP[i] - SATURATION_MAP[baseColorIndex];\n return saturationDelta >= 0 ? c.saturate(saturationDelta) : c.desaturate(saturationDelta * -1);\n });\n\n colors[baseColorIndex] = chroma(color);\n return colors.map((c) => c.hex());\n}\n","import { useMemo, useState, useCallback, createContext, useContext } from 'react';\nimport type { ReactNode } from 'react';\nimport { generateColors } from './generateColors';\n\n/* Per-org / per-brand theming. Computes the brand palette + surface overrides and\n injects them as a runtime <style> that overrides the base --astral-* tokens\n (from tokens.css) per scheme. Selectors use html:root[data-astral-scheme=\"...\"]\n (specificity 0,2,1, so they win over the :root base tokens). No colors -> empty\n style -> base tokens. Prop-driven (no app coupling): pass the brand colors in. */\n\n/* ── Color preview context (live editing) ── */\n\nexport interface AstralThemeColors {\n primary_color?: string | null;\n background_color?: string | null;\n card_color?: string | null;\n navbar_color?: string | null;\n font_color?: string | null;\n light_primary_color?: string | null;\n light_background_color?: string | null;\n light_card_color?: string | null;\n light_navbar_color?: string | null;\n light_font_color?: string | null;\n}\n\ninterface ThemePreviewContextType {\n preview: AstralThemeColors | null;\n setPreview: (colors: AstralThemeColors | null) => void;\n}\n\nconst ThemePreviewContext = createContext<ThemePreviewContextType>({\n preview: null,\n setPreview: () => {},\n});\n\nexport function useThemePreview() {\n return useContext(ThemePreviewContext);\n}\n\n/* ── Helpers ── */\n\nconst HEX_RE = /^#[0-9a-f]{6}$/i;\nconst isValidHex = (v: string | null | undefined): v is string => !!v && HEX_RE.test(v);\n\nfunction adjustHex(hex: string, amount: number): string {\n const c = hex.replace('#', '');\n const r = Math.max(0, Math.min(255, parseInt(c.substring(0, 2), 16) + amount));\n const g = Math.max(0, Math.min(255, parseInt(c.substring(2, 4), 16) + amount));\n const b = Math.max(0, Math.min(255, parseInt(c.substring(4, 6), 16) + amount));\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\n}\n\nfunction hexToRgba(hex: string, alpha: number): string {\n const c = hex.replace('#', '');\n const r = parseInt(c.substring(0, 2), 16);\n const g = parseInt(c.substring(2, 4), 16);\n const b = parseInt(c.substring(4, 6), 16);\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\n/* primaryShade is { light: 6, dark: 8 }; -light is the shade-6 color at .1/.15 alpha\n (.12/.2 hovered); -light-color is shade 6 (light) / 3 (dark). Theme-level constants,\n identical for any palette. */\nfunction primaryVars(palette: string[], scheme: 'light' | 'dark'): string[] {\n if (scheme === 'light') {\n return [\n `--astral-primary-color-filled:${palette[6]}`,\n `--astral-primary-color-filled-hover:${palette[7]}`,\n `--astral-primary-color-light:${hexToRgba(palette[6], 0.1)}`,\n `--astral-primary-color-light-hover:${hexToRgba(palette[6], 0.12)}`,\n `--astral-primary-color-light-color:${palette[6]}`,\n ];\n }\n return [\n `--astral-primary-color-filled:${palette[8]}`,\n `--astral-primary-color-filled-hover:${palette[9]}`,\n `--astral-primary-color-light:${hexToRgba(palette[6], 0.15)}`,\n `--astral-primary-color-light-hover:${hexToRgba(palette[6], 0.2)}`,\n `--astral-primary-color-light-color:${palette[3]}`,\n ];\n}\n\nfunction safeGenerate(hex: string): string[] | null {\n try { return generateColors(hex) as unknown as string[]; } catch { return null; }\n}\n\nexport function buildOrgCss(src: AstralThemeColors): string {\n const brand = isValidHex(src.primary_color) ? safeGenerate(src.primary_color!) : null;\n const lightBrand = isValidHex(src.light_primary_color) ? safeGenerate(src.light_primary_color!) : null;\n const lightPalette = lightBrand ?? brand; // light mode uses lightBrand, else falls back to brand\n const noDarkBrand = !brand; // the base accent palette is only overridden in light when no dark brand\n\n const vBg = isValidHex(src.background_color) ? src.background_color! : '';\n const vCard = isValidHex(src.card_color) ? src.card_color! : '';\n const vNav = isValidHex(src.navbar_color) ? src.navbar_color! : '';\n const vFont = isValidHex(src.font_color) ? src.font_color! : '';\n const vLBg = isValidHex(src.light_background_color) ? src.light_background_color! : '';\n const vLCard = isValidHex(src.light_card_color) ? src.light_card_color! : '';\n const vLNav = isValidHex(src.light_navbar_color) ? src.light_navbar_color! : '';\n const vLFont = isValidHex(src.light_font_color) ? src.light_font_color! : '';\n\n const dark: string[] = [];\n const light: string[] = [];\n\n /* ── dark scheme ── */\n if (brand) dark.push(...primaryVars(brand, 'dark'));\n if (vFont) {\n // dark palette: dark-0 = primary text; the dark text token mirrors dark-0.\n dark.push(`--astral-color-dark-0:${vFont}`, `--astral-color-dark-1:${adjustHex(vFont, -30)}`, `--astral-color-dark-2:${adjustHex(vFont, -60)}`, `--astral-color-text:${vFont}`);\n }\n if (vCard) dark.push(`--astral-color-dark-6:${vCard}`);\n if (vBg) dark.push(`--astral-color-dark-7:${vBg}`, `--astral-color-dark-9:${adjustHex(vBg, -10)}`, `--astral-color-body:${vBg}`, `--astral-app-bg:${vBg}`);\n if (vNav) dark.push(`--astral-color-dark-8:${vNav}`, `--astral-app-nav:${vNav}`);\n if (vCard) dark.push(`--astral-app-card:${vCard}`);\n\n /* ── light scheme ── */\n if (lightBrand && noDarkBrand) {\n // only-light-primary: override the base accent (violet) palette so accent-derived\n // tokens (e.g. brand-text) follow the light primary in light mode.\n for (let i = 0; i < 10; i++) light.push(`--astral-color-violet-${i}:${lightBrand[i]}`);\n }\n if (lightPalette) light.push(...primaryVars(lightPalette, 'light'));\n if (vLFont) light.push(`--astral-color-text:${vLFont}`);\n if (vLBg) light.push(`--astral-app-bg:${vLBg}`);\n if (vLNav) light.push(`--astral-app-nav:${vLNav}`);\n if (vLCard) light.push(`--astral-app-card:${vLCard}`);\n\n let css = '';\n if (dark.length) css += `html:root[data-astral-scheme=\"dark\"]{${dark.join(';')}}`;\n if (light.length) css += `html:root[data-astral-scheme=\"light\"]{${light.join(';')}}`;\n return css;\n}\n\n/* ── Provider ──\n Pass the brand colors via `colors`. While editing, call setPreview() (from\n useThemePreview) with partial colors for an instant live preview. */\n\nexport function AstralThemeProvider({ colors, children }: { colors?: AstralThemeColors | null; children: ReactNode }) {\n const [preview, setPreview] = useState<AstralThemeColors | null>(null);\n\n const stableSetPreview = useCallback((c: AstralThemeColors | null) => {\n setPreview(c);\n }, []);\n\n const effective: AstralThemeColors | null = preview\n ? { ...(colors ?? {}), ...preview }\n : (colors ?? null);\n\n const orgCss = useMemo(\n () => (effective ? buildOrgCss(effective) : ''),\n [effective ? JSON.stringify(effective) : ''],\n );\n\n return (\n <ThemePreviewContext.Provider value={{ preview, setPreview: stableSetPreview }}>\n <style data-astral-theme>{orgCss}</style>\n {children}\n </ThemePreviewContext.Provider>\n );\n}\n","import { useCallback, useEffect, useRef, useState, type ReactNode, type CSSProperties, type KeyboardEvent as ReactKeyboardEvent } from 'react';\nimport { createPortal } from 'react-dom';\nimport { IconX, IconChevronDown } from '@tabler/icons-react';\n\nfunction useDismiss(opened: boolean, onClose: () => void) {\n useEffect(() => {\n if (!opened) return;\n const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose(); };\n document.addEventListener('keydown', onKey);\n const prev = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return () => { document.removeEventListener('keydown', onKey); document.body.style.overflow = prev; };\n }, [opened, onClose]);\n}\n\ninterface ShellProps {\n opened: boolean;\n onClose: () => void;\n title: ReactNode;\n brand?: string;\n width?: number;\n /** Override the overlay z-index (default 300). Use to stack over flow-editor modals. */\n zIndex?: number;\n children: ReactNode;\n}\n\n/** Centered Astral modal (portal + overlay + escape + click-outside). */\nexport function AstralModal({ opened, onClose, title, brand, width = 460, zIndex, children }: ShellProps) {\n useDismiss(opened, onClose);\n if (!opened) return null;\n const style = { maxWidth: width, ...(brand ? { '--au-ic': brand } : {}) } as CSSProperties;\n return createPortal(\n <div className=\"au-modal-overlay\" onMouseDown={onClose} style={zIndex != null ? { zIndex } : undefined}>\n <div className=\"au-modal-panel\" style={style} onMouseDown={(e) => e.stopPropagation()}>\n <div className=\"au-modal-head\">\n <span className=\"au-modal-title\">{title}</span>\n <button type=\"button\" className=\"au-modal-x\" onClick={onClose} aria-label=\"Close\"><IconX /></button>\n </div>\n <div className=\"au-modal-body\">{children}</div>\n </div>\n </div>,\n document.body,\n );\n}\n\n/** Right-side Astral drawer. */\nexport function AstralDrawer({ opened, onClose, title, brand, width = 440, zIndex, children }: ShellProps) {\n useDismiss(opened, onClose);\n if (!opened) return null;\n const style = { width, ...(brand ? { '--au-ic': brand } : {}) } as CSSProperties;\n return createPortal(\n <div className=\"au-drawer-overlay\" onMouseDown={onClose} style={zIndex != null ? { zIndex } : undefined}>\n <div className=\"au-drawer-panel\" style={style} onMouseDown={(e) => e.stopPropagation()}>\n <div className=\"au-drawer-head\">\n <span className=\"au-drawer-title\">{title}</span>\n <button type=\"button\" className=\"au-modal-x\" onClick={onClose} aria-label=\"Close\"><IconX /></button>\n </div>\n <div className=\"au-drawer-body\">{children}</div>\n </div>\n </div>,\n document.body,\n );\n}\n\n/** Astral 6-box code input, with auto-advance, backspace, paste and arrows. */\nexport function AstralPinInput({ length = 6, value, onChange, autoFocus }: {\n length?: number;\n value: string;\n onChange: (value: string) => void;\n autoFocus?: boolean;\n}) {\n const refs = useRef<Array<HTMLInputElement | null>>([]);\n const digits = Array.from({ length }, (_, i) => value[i] ?? '');\n\n const focusBox = (i: number) => { refs.current[Math.max(0, Math.min(length - 1, i))]?.focus(); };\n\n const handleChange = (i: number, raw: string) => {\n const clean = raw.replace(/\\D/g, '');\n if (!clean) return;\n const arr = value.split('');\n let pos = i;\n for (const ch of clean) {\n if (pos >= length) break;\n arr[pos] = ch;\n pos++;\n }\n onChange(arr.join('').slice(0, length));\n focusBox(pos);\n };\n\n const handleKeyDown = (i: number, e: ReactKeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace') {\n e.preventDefault();\n const arr = value.split('');\n if (arr[i]) {\n arr[i] = '';\n onChange(arr.join(''));\n } else if (i > 0) {\n arr[i - 1] = '';\n onChange(arr.join(''));\n focusBox(i - 1);\n }\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n focusBox(i - 1);\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n focusBox(i + 1);\n }\n };\n\n return (\n <div className=\"au-pin\">\n {digits.map((d, i) => (\n <input\n key={i}\n ref={(el) => { refs.current[i] = el; }}\n className=\"au-pin-box\"\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n aria-label={`Digit ${i + 1}`}\n value={d}\n autoFocus={autoFocus && i === 0}\n onChange={(e) => handleChange(i, e.currentTarget.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onFocus={(e) => e.currentTarget.select()}\n />\n ))}\n </div>\n );\n}\n\nexport interface AstralSelectOption { value: string; label: string; }\n\n/** Astral select with optional search/create/clear - combobox. */\nexport function AstralSelect({ value, onChange, options, placeholder, disabled, searchable, searchPlaceholder, noResults, clearable, creatable }: {\n value: string | null;\n onChange: (value: string) => void;\n options: AstralSelectOption[];\n placeholder?: string;\n disabled?: boolean;\n searchable?: boolean;\n searchPlaceholder?: string;\n noResults?: string;\n clearable?: boolean;\n creatable?: boolean;\n}) {\n const [open, setOpen] = useState(false);\n const [q, setQ] = useState('');\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const [pos, setPos] = useState<{ left: number; top?: number; bottom?: number; width: number; maxHeight: number } | null>(null);\n\n const reposition = useCallback(() => {\n const el = triggerRef.current;\n if (!el) return;\n const r = el.getBoundingClientRect();\n const spaceBelow = window.innerHeight - r.bottom - 12;\n const spaceAbove = r.top - 12;\n const flipUp = spaceBelow < 200 && spaceAbove > spaceBelow;\n setPos({\n left: r.left,\n width: r.width,\n ...(flipUp\n ? { bottom: window.innerHeight - r.top + 5, maxHeight: Math.max(140, Math.min(300, spaceAbove)) }\n : { top: r.bottom + 5, maxHeight: Math.max(140, Math.min(300, spaceBelow)) }),\n });\n }, []);\n\n useEffect(() => {\n if (!open) return;\n reposition();\n const onScroll = () => reposition();\n const onResize = () => setOpen(false);\n const onDoc = (e: MouseEvent) => {\n if (triggerRef.current?.contains(e.target as Node)) return;\n if (menuRef.current?.contains(e.target as Node)) return;\n setOpen(false);\n };\n window.addEventListener('scroll', onScroll, true);\n window.addEventListener('resize', onResize);\n // Capture phase: AstralModal/AstralDrawer panels stopPropagation on mousedown,\n // which would otherwise block this outside-click close when the overlay lives inside one.\n document.addEventListener('mousedown', onDoc, true);\n return () => {\n window.removeEventListener('scroll', onScroll, true);\n window.removeEventListener('resize', onResize);\n document.removeEventListener('mousedown', onDoc, true);\n };\n }, [open, reposition]);\n\n const selected = options.find(o => o.value === value);\n const hasValue = value != null && value !== '';\n const display = selected ? selected.label : (value ?? '');\n const filtered = searchable && q.trim()\n ? options.filter(o => o.label.toLowerCase().includes(q.trim().toLowerCase()))\n : options;\n const showCreate = !!creatable && !!q.trim() && !options.some(o => o.label.toLowerCase() === q.trim().toLowerCase());\n\n return (\n <div className=\"au-select\">\n <button ref={triggerRef} type=\"button\" className=\"au-input au-select-trigger\" disabled={disabled} onClick={() => setOpen(o => !o)}>\n <span className={hasValue ? '' : 'ph'}>{hasValue ? display : placeholder}</span>\n {clearable && hasValue ? (\n <span className=\"au-select-caret au-select-clear\" role=\"button\" tabIndex={-1}\n onClick={(e) => { e.stopPropagation(); onChange(''); }}><IconX size={14} /></span>\n ) : (\n <IconChevronDown size={15} className=\"au-select-caret\" />\n )}\n </button>\n {open && !disabled && pos && createPortal(\n <div\n ref={menuRef}\n className=\"au-select-menu\"\n style={{ left: pos.left, top: pos.top, bottom: pos.bottom, width: pos.width, maxHeight: pos.maxHeight }}\n >\n {searchable && (\n <input\n autoFocus\n className=\"au-select-search\"\n placeholder={searchPlaceholder}\n value={q}\n onChange={(e) => setQ(e.currentTarget.value)}\n />\n )}\n {filtered.length === 0 && !showCreate && <div className=\"au-select-empty\">{noResults}</div>}\n {filtered.map(o => (\n <button\n type=\"button\"\n key={o.value}\n className={`au-select-opt${o.value === value ? ' on' : ''}`}\n onClick={() => { onChange(o.value); setOpen(false); setQ(''); }}\n >\n {o.label}\n </button>\n ))}\n {showCreate && (\n <button type=\"button\" className=\"au-select-opt au-select-create\"\n onClick={() => { onChange(q.trim()); setOpen(false); setQ(''); }}>\n + {q.trim()}\n </button>\n )}\n </div>,\n document.body,\n )}\n </div>\n );\n}\n\nexport interface AstralMenuItem { key?: string; label: ReactNode; icon?: ReactNode; onClick?: () => void; danger?: boolean; divider?: boolean; disabled?: boolean; }\n\n/** Astral action-menu dropdown - portalled like AstralSelect. */\nexport function AstralMenu({ trigger, items, align = 'end', width = 220 }: {\n trigger: ReactNode;\n items: AstralMenuItem[];\n align?: 'start' | 'end';\n width?: number;\n}) {\n const [open, setOpen] = useState(false);\n const anchorRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const [pos, setPos] = useState<{ left: number; top?: number; bottom?: number; minWidth: number; maxHeight: number } | null>(null);\n\n const reposition = useCallback(() => {\n const el = anchorRef.current;\n if (!el) return;\n const r = el.getBoundingClientRect();\n const spaceBelow = window.innerHeight - r.bottom - 12;\n const spaceAbove = r.top - 12;\n const flipUp = spaceBelow < 220 && spaceAbove > spaceBelow;\n const left = align === 'end' ? Math.max(8, Math.min(r.right - width, window.innerWidth - width - 8)) : Math.min(r.left, window.innerWidth - width - 8);\n setPos({\n left,\n minWidth: width,\n ...(flipUp\n ? { bottom: window.innerHeight - r.top + 5, maxHeight: Math.max(160, Math.min(380, spaceAbove)) }\n : { top: r.bottom + 5, maxHeight: Math.max(160, Math.min(380, spaceBelow)) }),\n });\n }, [align, width]);\n\n useEffect(() => {\n if (!open) return;\n reposition();\n const onScroll = () => reposition();\n const onResize = () => setOpen(false);\n const onDoc = (e: MouseEvent) => {\n if (anchorRef.current?.contains(e.target as Node)) return;\n if (menuRef.current?.contains(e.target as Node)) return;\n setOpen(false);\n };\n window.addEventListener('scroll', onScroll, true);\n window.addEventListener('resize', onResize);\n // Capture phase: AstralModal/AstralDrawer panels stopPropagation on mousedown,\n // which would otherwise block this outside-click close when the overlay lives inside one.\n document.addEventListener('mousedown', onDoc, true);\n return () => {\n window.removeEventListener('scroll', onScroll, true);\n window.removeEventListener('resize', onResize);\n document.removeEventListener('mousedown', onDoc, true);\n };\n }, [open, reposition]);\n\n return (\n <>\n <div className=\"au-menu-anchor\" ref={anchorRef} onClick={() => setOpen(o => !o)}>\n {trigger}\n </div>\n {open && pos && createPortal(\n <div ref={menuRef} className=\"au-menu\" style={{ left: pos.left, top: pos.top, bottom: pos.bottom, minWidth: pos.minWidth, maxHeight: pos.maxHeight }}>\n {items.map((it, i) => it.divider\n ? <div key={it.key ?? `d${i}`} className=\"au-menu-divider\" />\n : (\n <button type=\"button\" key={it.key ?? i} className={`au-menu-item${it.danger ? ' danger' : ''}`} disabled={it.disabled}\n onClick={() => { setOpen(false); it.onClick?.(); }}>\n {it.icon && <span className=\"au-menu-ic\">{it.icon}</span>}\n <span className=\"au-menu-label\">{it.label}</span>\n </button>\n ))}\n </div>,\n document.body,\n )}\n </>\n );\n}\n","import { useSyncExternalStore } from 'react';\nimport type { ReactNode, CSSProperties } from 'react';\nimport { createPortal } from 'react-dom';\nimport { IconX, IconCheck, IconAlertTriangle, IconInfoCircle, IconExclamationCircle } from '@tabler/icons-react';\n\n/* AstralUI toast system. The `notifications` object (show/update/hide/clean, returns\n an id) is a small imperative store; <AstralToaster/> renders the live toasts and is\n mounted once at the app root. Theme-aware via the --astral-* tokens. */\n\nexport interface ToastOptions {\n id?: string;\n title?: ReactNode;\n message?: ReactNode;\n color?: string;\n icon?: ReactNode;\n loading?: boolean;\n autoClose?: number | false;\n withCloseButton?: boolean;\n onClose?: () => void;\n /** accepted for API compatibility; the toaster uses one global position */\n position?: string;\n /** tolerate any other notification prop a call site may pass (radius, withBorder, style, ...) */\n [key: string]: unknown;\n}\n\ninterface Toast extends ToastOptions { id: string; }\n\nlet toasts: Toast[] = [];\nconst listeners = new Set<() => void>();\nconst timers = new Map<string, ReturnType<typeof setTimeout>>();\nlet counter = 0;\n\nconst emit = () => listeners.forEach(l => l());\n\nfunction clearTimer(id: string) {\n const x = timers.get(id);\n if (x) { clearTimeout(x); timers.delete(id); }\n}\n\nfunction scheduleAutoClose(t: Toast) {\n clearTimer(t.id);\n if (t.autoClose === false || t.loading) return; // loading toasts stay until updated\n const ms = typeof t.autoClose === 'number' ? t.autoClose : 4000;\n timers.set(t.id, setTimeout(() => hide(t.id), ms));\n}\n\nfunction show(opts: ToastOptions): string {\n const id = opts.id ?? `toast-${++counter}`;\n const existing = toasts.find(t => t.id === id);\n const toast: Toast = { withCloseButton: true, ...existing, ...opts, id };\n toasts = existing ? toasts.map(t => (t.id === id ? toast : t)) : [...toasts, toast];\n emit();\n scheduleAutoClose(toast);\n return id;\n}\n\nfunction update(opts: ToastOptions): string {\n if (!opts.id) return show(opts);\n const existing = toasts.find(t => t.id === opts.id);\n if (!existing) return show(opts);\n const toast: Toast = { ...existing, ...opts, id: opts.id };\n toasts = toasts.map(t => (t.id === opts.id ? toast : t));\n emit();\n scheduleAutoClose(toast);\n return opts.id;\n}\n\nfunction hide(id: string) {\n const t = toasts.find(x => x.id === id);\n clearTimer(id);\n toasts = toasts.filter(x => x.id !== id);\n emit();\n t?.onClose?.();\n}\n\nfunction clean() {\n toasts.forEach(t => clearTimer(t.id));\n toasts = [];\n emit();\n}\n\nexport const notifications = { show, update, hide, clean };\n\n/* ── Rendering ── */\n\nconst subscribe = (cb: () => void) => { listeners.add(cb); return () => { listeners.delete(cb); }; };\nconst getSnapshot = () => toasts;\n\nconst DEFAULT_ICON: Record<string, ReactNode> = {\n green: <IconCheck size={16} />,\n teal: <IconCheck size={16} />,\n red: <IconExclamationCircle size={16} />,\n orange: <IconAlertTriangle size={16} />,\n yellow: <IconAlertTriangle size={16} />,\n};\n\nfunction Spinner() {\n return <span className=\"au-toast-spin\" />;\n}\n\nfunction ToastCard({ t }: { t: Toast }) {\n const accent = t.color ? `var(--astral-color-${t.color}-6)` : 'var(--astral-color-default-border)';\n const lead = t.loading\n ? <Spinner />\n : t.icon\n ? t.icon\n : (t.color && DEFAULT_ICON[t.color]) || <IconInfoCircle size={16} />;\n return (\n <div className=\"au-toast\" style={{ ['--au-toast-accent' as string]: accent } as CSSProperties} role=\"status\">\n <span className=\"au-toast-lead\">{lead}</span>\n <div className=\"au-toast-body\">\n {t.title && <div className=\"au-toast-title\">{t.title}</div>}\n {t.message != null && <div className=\"au-toast-msg\">{t.message}</div>}\n </div>\n {t.withCloseButton !== false && (\n <button type=\"button\" className=\"au-toast-x\" onClick={() => hide(t.id)} aria-label=\"Close\"><IconX size={14} /></button>\n )}\n </div>\n );\n}\n\nexport function AstralToaster() {\n const items = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n if (typeof document === 'undefined') return null;\n return createPortal(\n <div className=\"au-toast-host\" role=\"region\" aria-live=\"polite\" aria-label=\"Notifications\">\n {items.map(t => <ToastCard key={t.id} t={t} />)}\n </div>,\n document.body,\n );\n}\n","import { useState, useEffect } from 'react';\nimport type { CSSProperties } from 'react';\n\n/* Native <input type=\"date\" | \"datetime-local\"> that mirrors exactly what the user\n types and only commits a parsed Date upward once the string is a COMPLETE, plausible\n value. A fully-controlled date input that round-trips every keystroke through\n `new Date(y, m-1, d)` hits JS's 0-99 -> 1900s year remap mid-typing (so \"2\" -> 1902),\n and the reformatted value fights the user's typing into a re-render storm that freezes\n the page. Keeping the string local and gating the commit avoids that entirely.\n `color-scheme` is left to inherit so the native calendar glyph follows the app theme. */\n\nconst pad2 = (n: number) => String(n).padStart(2, '0');\nconst pad4 = (n: number) => String(n).padStart(4, '0');\n\n/** Date -> \"YYYY-MM-DD\" (local) */\nexport function dateToInputStr(d: Date | null): string {\n if (!d || isNaN(d.getTime())) return '';\n return `${pad4(d.getFullYear())}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`;\n}\n\n/** Date -> \"YYYY-MM-DDTHH:mm\" (local) */\nexport function dateTimeToInputStr(d: Date | null): string {\n if (!d || isNaN(d.getTime())) return '';\n return `${dateToInputStr(d)}T${pad2(d.getHours())}:${pad2(d.getMinutes())}`;\n}\n\ninterface Props {\n type?: 'date' | 'datetime-local';\n value: Date | null;\n onChange: (d: Date | null) => void;\n min?: Date;\n max?: Date;\n className?: string;\n style?: CSSProperties;\n disabled?: boolean;\n 'aria-label'?: string;\n}\n\nexport default function DateInput({ type = 'date', value, onChange, min, max, className, style, disabled, 'aria-label': ariaLabel }: Props) {\n const isTime = type === 'datetime-local';\n const fmt = isTime ? dateTimeToInputStr : dateToInputStr;\n const [s, setS] = useState(() => fmt(value));\n // Re-sync from the parent (preset buttons, programmatic clears) without fighting typing.\n const t = value?.getTime();\n useEffect(() => { setS(fmt(value)); }, [t]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handle = (str: string) => {\n setS(str);\n if (str === '') { onChange(null); return; }\n const m = (isTime ? /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})$/ : /^(\\d{4})-(\\d{2})-(\\d{2})$/).exec(str);\n if (!m) return; // incomplete - hold locally, don't commit\n const y = Number(m[1]);\n if (y < 1970 || y > 2100) return; // implausible (mid-typed) year - wait for a full one\n const d = isTime\n ? new Date(y, Number(m[2]) - 1, Number(m[3]), Number(m[4]), Number(m[5]))\n : new Date(y, Number(m[2]) - 1, Number(m[3]));\n if (isNaN(d.getTime())) return;\n onChange(d);\n };\n\n return (\n <input\n type={type}\n className={className}\n style={style}\n disabled={disabled}\n aria-label={ariaLabel}\n value={s}\n min={min ? fmt(min) : undefined}\n max={max ? fmt(max) : undefined}\n onChange={e => handle(e.currentTarget.value)}\n />\n );\n}\n","import type { CSSProperties } from 'react';\n\n/* Minimal theme-aware spinner. Styled by the .au-spinner class (in tokens.css);\n size via the `size` prop (px). */\nexport function Spinner({ size = 24, className, style }: { size?: number; className?: string; style?: CSSProperties }) {\n return (\n <span\n className={className ? `au-spinner ${className}` : 'au-spinner'}\n style={{ width: size, height: size, ...style }}\n role=\"status\"\n aria-label=\"Loading\"\n />\n );\n}\n","import type { ReactNode, CSSProperties } from 'react';\n\ninterface BackgroundProps {\n /** Content rendered above the backdrop (it becomes the positioning context). */\n children?: ReactNode;\n className?: string;\n style?: CSSProperties;\n /** Pin to the viewport (position:fixed, inset:0) instead of filling the parent. */\n fixed?: boolean;\n}\n\nfunction cls(base: string, extra?: string) {\n return extra ? `${base} ${extra}` : base;\n}\n\n/** Animated cosmic backdrop with a twinkling starfield. Great for auth screens,\n * heroes, or splash pages. Wrap your content as children. */\nexport function SpaceBackground({ children, className, style, fixed }: BackgroundProps) {\n const s: CSSProperties = fixed ? { position: 'fixed', inset: 0, ...style } : style ?? {};\n return (\n <div className={cls('astral-space-bg', className)} style={s}>\n <div className=\"astral-stars\" aria-hidden=\"true\" />\n {children}\n </div>\n );\n}\n\n/** Subtle technical grid backdrop with a brand-tinted radial glow, faded toward\n * the edges with a radial mask. */\nexport function GridBackground({ children, className, style, fixed }: BackgroundProps) {\n const s: CSSProperties = fixed ? { position: 'fixed', inset: 0, ...style } : style ?? {};\n return (\n <div className={cls('astral-grid-bg', className)} style={s}>\n {children}\n </div>\n );\n}\n","import { useState } from 'react';\n\n/* Lightweight, dependency-free charts (pure SVG + CSS). Each is fully prop-driven\n and theme-aware. Colors accept a hex, a CSS var()/rgb(), or an AstralUI palette\n token like \"violet.6\" (mapped to var(--astral-color-violet-6)). */\n\n/** \"violet.6\" -> var(--astral-color-violet-6); hex / var() / rgb() pass through. */\nexport function chartColor(c: string): string {\n if (c.startsWith('var(') || c.startsWith('#') || c.startsWith('rgb') || c.startsWith('hsl')) return c;\n return `var(--astral-color-${c.replace('.', '-')})`;\n}\n\n/** Tiny inline SVG sparkline for KPI cards. */\nexport function Sparkline({ points, color }: { points: number[]; color: string }) {\n if (!points || points.length < 2 || points.every(p => p === 0)) return null;\n const w = 100, h = 28;\n const max = Math.max(...points), min = Math.min(...points);\n const range = max - min || 1;\n const step = w / (points.length - 1);\n const d = points\n .map((p, i) => `${i === 0 ? 'M' : 'L'}${(i * step).toFixed(1)},${(h - ((p - min) / range) * h).toFixed(1)}`)\n .join(' ');\n return (\n <svg className=\"au-spark\" viewBox={`0 0 ${w} ${h}`} preserveAspectRatio=\"none\" aria-hidden>\n <path d={d} fill=\"none\" stroke={chartColor(color)} strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\n/** Period-over-period delta badge; renders nothing when there's no comparison. */\nexport function Delta({ current, previous }: { current: number; previous: number | null | undefined }) {\n if (previous == null || previous === 0) return null;\n const pct = Math.round(((current - previous) / previous) * 100);\n if (pct === 0) return null;\n const up = pct > 0;\n return <span className={`au-delta ${up ? 'up' : 'down'}`}>{up ? '▲' : '▼'} {Math.abs(pct)}%</span>;\n}\n\nexport interface DonutDatum { name: string; value: number; color: string; }\n\n/** Interactive donut with a linked side-legend (ring slice <-> legend row hover). */\nexport function Donut({ data, centerValue, centerLabel }: {\n data: DonutDatum[];\n centerValue: string;\n centerLabel: string;\n}) {\n const [hovered, setHovered] = useState<number | null>(null);\n const total = data.reduce((s, d) => s + d.value, 0) || 1;\n const c = 75, r = 58, sw = 18, circ = 2 * Math.PI * r;\n let offset = 0;\n return (\n <div className=\"au-donut\">\n <div className=\"au-donut-ring\">\n <svg width={150} height={150} viewBox=\"0 0 150 150\">\n <circle cx={c} cy={c} r={r} fill=\"none\" stroke=\"var(--au-surface-2)\" strokeWidth={sw} />\n {data.map((d, i) => {\n const dash = (d.value / total) * circ;\n const el = (\n <circle\n key={i}\n cx={c} cy={c} r={r} fill=\"none\"\n stroke={chartColor(d.color)}\n strokeWidth={hovered === i ? sw + 4 : sw}\n strokeDasharray={`${dash} ${circ - dash}`}\n strokeDashoffset={-offset}\n transform={`rotate(-90 ${c} ${c})`}\n style={{\n opacity: hovered == null || hovered === i ? 1 : 0.28,\n transition: 'opacity .15s, stroke-width .15s',\n cursor: 'pointer',\n }}\n onMouseEnter={() => setHovered(i)}\n onMouseLeave={() => setHovered(null)}\n />\n );\n offset += dash;\n return el;\n })}\n </svg>\n <div className=\"au-donut-ctr\"><b>{centerValue}</b><span>{centerLabel}</span></div>\n </div>\n <div className=\"au-donut-legend\">\n {data.map((d, i) => (\n <div\n key={i}\n className={`au-dl ${hovered === i ? 'on' : hovered != null ? 'off' : ''}`}\n onMouseEnter={() => setHovered(i)}\n onMouseLeave={() => setHovered(null)}\n >\n <span className=\"dot\" style={{ background: chartColor(d.color) }} />\n <b>{d.value.toLocaleString()}</b>\n <span className=\"dll\">{d.name}</span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nexport interface FunnelDatum { stage: string; value: number; color: string; }\n\n/** Horizontal funnel/pipeline bars; hovering a bar highlights it and dims the rest. */\nexport function FunnelBars({ data }: { data: FunnelDatum[] }) {\n const [hov, setHov] = useState<number | null>(null);\n const max = Math.max(...data.map(d => d.value), 1);\n return (\n <div className=\"au-funnel\">\n {data.map((d, i) => (\n <div\n key={d.stage}\n className={`au-fbar ${hov === i ? 'on' : hov != null ? 'off' : ''}`}\n onMouseEnter={() => setHov(i)}\n onMouseLeave={() => setHov(null)}\n >\n <span className=\"au-fbar-label\">{d.stage}</span>\n <div className=\"au-fbar-track\">\n <div className=\"au-fbar-fill\" style={{ width: `${(d.value / max) * 100}%`, background: chartColor(d.color) }} />\n </div>\n <span className=\"au-fbar-val\">{d.value.toLocaleString()}</span>\n </div>\n ))}\n </div>\n );\n}\n\nexport interface StackedRow { label: string; values: number[]; }\nexport interface StackedSeries { label: string; color: string; }\n\n/** Stacked horizontal bars with linked hover: hover a legend series OR a segment\n * to highlight it across every row (others dim). Values are always shown. */\nexport function StackedBars({ rows, series }: { rows: StackedRow[]; series: StackedSeries[] }) {\n const [hovSeries, setHovSeries] = useState<number | null>(null);\n const [hovSeg, setHovSeg] = useState<{ row: number; s: number } | null>(null);\n const max = Math.max(...rows.map(r => r.values.reduce((a, b) => a + b, 0)), 1);\n const anyHover = hovSeries != null || hovSeg != null;\n const active = (row: number, s: number) =>\n hovSeries != null ? s === hovSeries\n : hovSeg != null ? hovSeg.row === row && hovSeg.s === s\n : true;\n return (\n <div className=\"au-usage\">\n <div className=\"au-usage-legend\">\n {series.map((s, si) => (\n <div\n key={si}\n className={`au-ulg ${hovSeries === si ? 'on' : hovSeries != null ? 'off' : ''}`}\n onMouseEnter={() => setHovSeries(si)}\n onMouseLeave={() => setHovSeries(null)}\n >\n <span className=\"dot\" style={{ background: chartColor(s.color) }} />{s.label}\n </div>\n ))}\n </div>\n <div className=\"au-usage-rows\">\n {rows.map((r, i) => (\n <div key={i} className={`au-urow ${hovSeg?.row === i ? 'on' : ''}`}>\n <span className=\"au-urow-label\" title={r.label}>{r.label}</span>\n <div className=\"au-utrack\">\n {r.values.map((v, si) => (\n <div\n key={si}\n className=\"au-useg\"\n onMouseEnter={() => setHovSeg({ row: i, s: si })}\n onMouseLeave={() => setHovSeg(null)}\n style={{\n width: `${(v / max) * 100}%`,\n background: chartColor(series[si].color),\n opacity: anyHover && !active(i, si) ? 0.2 : 1,\n filter: anyHover && active(i, si) ? 'brightness(1.2)' : undefined,\n }}\n />\n ))}\n </div>\n <span className=\"au-unums\">\n {r.values.map((v, si) => (\n <b\n key={si}\n style={{\n color: chartColor(series[si].color),\n opacity: anyHover && !active(i, si) ? 0.28 : 1,\n textShadow: anyHover && active(i, si) ? `0 0 10px ${chartColor(series[si].color)}` : undefined,\n }}\n >{v.toLocaleString()}</b>\n ))}\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import type { ReactNode, CSSProperties } from 'react';\n\n/* Auth surface scaffolding for sign-in / sign-up / verify / onboarding screens.\n Compose <AuthShell> (full-screen backdrop + centering) with <AuthCard> and the\n au-auth-* classes (fields, notices, stepper, buttons) documented in the CSS. */\n\ninterface AuthShellProps {\n children: ReactNode;\n /** 'space' = cosmic starfield (default), 'wash' = brand radial + faint grid. */\n backdrop?: 'space' | 'wash';\n /** top-left slot (e.g. a back button) */\n topLeft?: ReactNode;\n /** top-right slot (e.g. a language switcher) */\n topRight?: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function AuthShell({ children, backdrop = 'space', topLeft, topRight, className, style }: AuthShellProps) {\n const cls = `au-auth${backdrop === 'space' ? ' astral-space-bg' : ''}${className ? ' ' + className : ''}`;\n return (\n <div className={cls} style={style}>\n {backdrop === 'space'\n ? <div className=\"astral-stars\" aria-hidden=\"true\" />\n : <div className=\"au-auth-bg\" aria-hidden=\"true\" />}\n {topLeft}\n {topRight ? <div className=\"au-auth-lang\">{topRight}</div> : null}\n {children}\n </div>\n );\n}\n\ninterface AuthCardProps {\n children: ReactNode;\n /** rendered in the branded banner strip at the top of the card (e.g. a logo) */\n banner?: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function AuthCard({ children, banner, className, style }: AuthCardProps) {\n return (\n <div className={`au-auth-card${className ? ' ' + className : ''}`} style={style}>\n {banner ? <div className=\"au-auth-banner\">{banner}</div> : null}\n {children}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { AstralModal } from './overlay';\n\n/* A confirmation / alert dialog built on AstralModal. Use for destructive or\n important actions (\"Delete campaign?\"). Set `danger` for a red confirm button. */\n\nexport interface ConfirmModalProps {\n opened: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title: ReactNode;\n message?: ReactNode;\n confirmLabel?: string;\n cancelLabel?: string;\n /** red confirm button for destructive actions */\n danger?: boolean;\n /** show a spinner and disable the buttons while an async action runs */\n loading?: boolean;\n width?: number;\n /** extra content rendered above the actions (e.g. a checkbox) */\n children?: ReactNode;\n}\n\nexport function ConfirmModal({\n opened, onClose, onConfirm, title, message,\n confirmLabel = 'Confirm', cancelLabel = 'Cancel',\n danger, loading, width = 420, children,\n}: ConfirmModalProps) {\n return (\n <AstralModal opened={opened} onClose={onClose} title={title} width={width}>\n <div className=\"clay-form\">\n {message != null && (\n <div style={{ fontSize: 13, lineHeight: 1.55, color: 'var(--au-dim)' }}>{message}</div>\n )}\n {children}\n <div className=\"clay-actions\">\n <button type=\"button\" className=\"au-btn\" onClick={onClose} disabled={loading}>{cancelLabel}</button>\n <button\n type=\"button\"\n className={`au-btn ${danger ? 'solidred' : 'primary'}`}\n onClick={onConfirm}\n disabled={loading}\n >\n {loading ? <span className=\"au-spinner\" style={{ width: 14, height: 14 }} /> : null}\n {confirmLabel}\n </button>\n </div>\n </div>\n </AstralModal>\n );\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -147,4 +147,105 @@ declare function Spinner({ size, className, style }: {
147
147
  style?: CSSProperties;
148
148
  }): react.JSX.Element;
149
149
 
150
- export { AstralDrawer, AstralMenu, type AstralMenuItem, AstralModal, AstralPinInput, AstralSelect, type AstralSelectOption, type AstralThemeColors, AstralThemeProvider, AstralToaster, type ColorScheme, ColorSchemeProvider, DateInput, Spinner, type ToastOptions, buildOrgCss, dateTimeToInputStr, dateToInputStr, generateColors, notifications, useColorScheme, useThemePreview };
150
+ interface BackgroundProps {
151
+ /** Content rendered above the backdrop (it becomes the positioning context). */
152
+ children?: ReactNode;
153
+ className?: string;
154
+ style?: CSSProperties;
155
+ /** Pin to the viewport (position:fixed, inset:0) instead of filling the parent. */
156
+ fixed?: boolean;
157
+ }
158
+ /** Animated cosmic backdrop with a twinkling starfield. Great for auth screens,
159
+ * heroes, or splash pages. Wrap your content as children. */
160
+ declare function SpaceBackground({ children, className, style, fixed }: BackgroundProps): react.JSX.Element;
161
+ /** Subtle technical grid backdrop with a brand-tinted radial glow, faded toward
162
+ * the edges with a radial mask. */
163
+ declare function GridBackground({ children, className, style, fixed }: BackgroundProps): react.JSX.Element;
164
+
165
+ /** "violet.6" -> var(--astral-color-violet-6); hex / var() / rgb() pass through. */
166
+ declare function chartColor(c: string): string;
167
+ /** Tiny inline SVG sparkline for KPI cards. */
168
+ declare function Sparkline({ points, color }: {
169
+ points: number[];
170
+ color: string;
171
+ }): react.JSX.Element | null;
172
+ /** Period-over-period delta badge; renders nothing when there's no comparison. */
173
+ declare function Delta({ current, previous }: {
174
+ current: number;
175
+ previous: number | null | undefined;
176
+ }): react.JSX.Element | null;
177
+ interface DonutDatum {
178
+ name: string;
179
+ value: number;
180
+ color: string;
181
+ }
182
+ /** Interactive donut with a linked side-legend (ring slice <-> legend row hover). */
183
+ declare function Donut({ data, centerValue, centerLabel }: {
184
+ data: DonutDatum[];
185
+ centerValue: string;
186
+ centerLabel: string;
187
+ }): react.JSX.Element;
188
+ interface FunnelDatum {
189
+ stage: string;
190
+ value: number;
191
+ color: string;
192
+ }
193
+ /** Horizontal funnel/pipeline bars; hovering a bar highlights it and dims the rest. */
194
+ declare function FunnelBars({ data }: {
195
+ data: FunnelDatum[];
196
+ }): react.JSX.Element;
197
+ interface StackedRow {
198
+ label: string;
199
+ values: number[];
200
+ }
201
+ interface StackedSeries {
202
+ label: string;
203
+ color: string;
204
+ }
205
+ /** Stacked horizontal bars with linked hover: hover a legend series OR a segment
206
+ * to highlight it across every row (others dim). Values are always shown. */
207
+ declare function StackedBars({ rows, series }: {
208
+ rows: StackedRow[];
209
+ series: StackedSeries[];
210
+ }): react.JSX.Element;
211
+
212
+ interface AuthShellProps {
213
+ children: ReactNode;
214
+ /** 'space' = cosmic starfield (default), 'wash' = brand radial + faint grid. */
215
+ backdrop?: 'space' | 'wash';
216
+ /** top-left slot (e.g. a back button) */
217
+ topLeft?: ReactNode;
218
+ /** top-right slot (e.g. a language switcher) */
219
+ topRight?: ReactNode;
220
+ className?: string;
221
+ style?: CSSProperties;
222
+ }
223
+ declare function AuthShell({ children, backdrop, topLeft, topRight, className, style }: AuthShellProps): react.JSX.Element;
224
+ interface AuthCardProps {
225
+ children: ReactNode;
226
+ /** rendered in the branded banner strip at the top of the card (e.g. a logo) */
227
+ banner?: ReactNode;
228
+ className?: string;
229
+ style?: CSSProperties;
230
+ }
231
+ declare function AuthCard({ children, banner, className, style }: AuthCardProps): react.JSX.Element;
232
+
233
+ interface ConfirmModalProps {
234
+ opened: boolean;
235
+ onClose: () => void;
236
+ onConfirm: () => void;
237
+ title: ReactNode;
238
+ message?: ReactNode;
239
+ confirmLabel?: string;
240
+ cancelLabel?: string;
241
+ /** red confirm button for destructive actions */
242
+ danger?: boolean;
243
+ /** show a spinner and disable the buttons while an async action runs */
244
+ loading?: boolean;
245
+ width?: number;
246
+ /** extra content rendered above the actions (e.g. a checkbox) */
247
+ children?: ReactNode;
248
+ }
249
+ declare function ConfirmModal({ opened, onClose, onConfirm, title, message, confirmLabel, cancelLabel, danger, loading, width, children, }: ConfirmModalProps): react.JSX.Element;
250
+
251
+ export { AstralDrawer, AstralMenu, type AstralMenuItem, AstralModal, AstralPinInput, AstralSelect, type AstralSelectOption, type AstralThemeColors, AstralThemeProvider, AstralToaster, AuthCard, AuthShell, type ColorScheme, ColorSchemeProvider, ConfirmModal, type ConfirmModalProps, DateInput, Delta, Donut, type DonutDatum, FunnelBars, type FunnelDatum, GridBackground, SpaceBackground, Sparkline, Spinner, StackedBars, type StackedRow, type StackedSeries, type ToastOptions, buildOrgCss, chartColor, dateTimeToInputStr, dateToInputStr, generateColors, notifications, useColorScheme, useThemePreview };
package/dist/index.d.ts CHANGED
@@ -147,4 +147,105 @@ declare function Spinner({ size, className, style }: {
147
147
  style?: CSSProperties;
148
148
  }): react.JSX.Element;
149
149
 
150
- export { AstralDrawer, AstralMenu, type AstralMenuItem, AstralModal, AstralPinInput, AstralSelect, type AstralSelectOption, type AstralThemeColors, AstralThemeProvider, AstralToaster, type ColorScheme, ColorSchemeProvider, DateInput, Spinner, type ToastOptions, buildOrgCss, dateTimeToInputStr, dateToInputStr, generateColors, notifications, useColorScheme, useThemePreview };
150
+ interface BackgroundProps {
151
+ /** Content rendered above the backdrop (it becomes the positioning context). */
152
+ children?: ReactNode;
153
+ className?: string;
154
+ style?: CSSProperties;
155
+ /** Pin to the viewport (position:fixed, inset:0) instead of filling the parent. */
156
+ fixed?: boolean;
157
+ }
158
+ /** Animated cosmic backdrop with a twinkling starfield. Great for auth screens,
159
+ * heroes, or splash pages. Wrap your content as children. */
160
+ declare function SpaceBackground({ children, className, style, fixed }: BackgroundProps): react.JSX.Element;
161
+ /** Subtle technical grid backdrop with a brand-tinted radial glow, faded toward
162
+ * the edges with a radial mask. */
163
+ declare function GridBackground({ children, className, style, fixed }: BackgroundProps): react.JSX.Element;
164
+
165
+ /** "violet.6" -> var(--astral-color-violet-6); hex / var() / rgb() pass through. */
166
+ declare function chartColor(c: string): string;
167
+ /** Tiny inline SVG sparkline for KPI cards. */
168
+ declare function Sparkline({ points, color }: {
169
+ points: number[];
170
+ color: string;
171
+ }): react.JSX.Element | null;
172
+ /** Period-over-period delta badge; renders nothing when there's no comparison. */
173
+ declare function Delta({ current, previous }: {
174
+ current: number;
175
+ previous: number | null | undefined;
176
+ }): react.JSX.Element | null;
177
+ interface DonutDatum {
178
+ name: string;
179
+ value: number;
180
+ color: string;
181
+ }
182
+ /** Interactive donut with a linked side-legend (ring slice <-> legend row hover). */
183
+ declare function Donut({ data, centerValue, centerLabel }: {
184
+ data: DonutDatum[];
185
+ centerValue: string;
186
+ centerLabel: string;
187
+ }): react.JSX.Element;
188
+ interface FunnelDatum {
189
+ stage: string;
190
+ value: number;
191
+ color: string;
192
+ }
193
+ /** Horizontal funnel/pipeline bars; hovering a bar highlights it and dims the rest. */
194
+ declare function FunnelBars({ data }: {
195
+ data: FunnelDatum[];
196
+ }): react.JSX.Element;
197
+ interface StackedRow {
198
+ label: string;
199
+ values: number[];
200
+ }
201
+ interface StackedSeries {
202
+ label: string;
203
+ color: string;
204
+ }
205
+ /** Stacked horizontal bars with linked hover: hover a legend series OR a segment
206
+ * to highlight it across every row (others dim). Values are always shown. */
207
+ declare function StackedBars({ rows, series }: {
208
+ rows: StackedRow[];
209
+ series: StackedSeries[];
210
+ }): react.JSX.Element;
211
+
212
+ interface AuthShellProps {
213
+ children: ReactNode;
214
+ /** 'space' = cosmic starfield (default), 'wash' = brand radial + faint grid. */
215
+ backdrop?: 'space' | 'wash';
216
+ /** top-left slot (e.g. a back button) */
217
+ topLeft?: ReactNode;
218
+ /** top-right slot (e.g. a language switcher) */
219
+ topRight?: ReactNode;
220
+ className?: string;
221
+ style?: CSSProperties;
222
+ }
223
+ declare function AuthShell({ children, backdrop, topLeft, topRight, className, style }: AuthShellProps): react.JSX.Element;
224
+ interface AuthCardProps {
225
+ children: ReactNode;
226
+ /** rendered in the branded banner strip at the top of the card (e.g. a logo) */
227
+ banner?: ReactNode;
228
+ className?: string;
229
+ style?: CSSProperties;
230
+ }
231
+ declare function AuthCard({ children, banner, className, style }: AuthCardProps): react.JSX.Element;
232
+
233
+ interface ConfirmModalProps {
234
+ opened: boolean;
235
+ onClose: () => void;
236
+ onConfirm: () => void;
237
+ title: ReactNode;
238
+ message?: ReactNode;
239
+ confirmLabel?: string;
240
+ cancelLabel?: string;
241
+ /** red confirm button for destructive actions */
242
+ danger?: boolean;
243
+ /** show a spinner and disable the buttons while an async action runs */
244
+ loading?: boolean;
245
+ width?: number;
246
+ /** extra content rendered above the actions (e.g. a checkbox) */
247
+ children?: ReactNode;
248
+ }
249
+ declare function ConfirmModal({ opened, onClose, onConfirm, title, message, confirmLabel, cancelLabel, danger, loading, width, children, }: ConfirmModalProps): react.JSX.Element;
250
+
251
+ export { AstralDrawer, AstralMenu, type AstralMenuItem, AstralModal, AstralPinInput, AstralSelect, type AstralSelectOption, type AstralThemeColors, AstralThemeProvider, AstralToaster, AuthCard, AuthShell, type ColorScheme, ColorSchemeProvider, ConfirmModal, type ConfirmModalProps, DateInput, Delta, Donut, type DonutDatum, FunnelBars, type FunnelDatum, GridBackground, SpaceBackground, Sparkline, Spinner, StackedBars, type StackedRow, type StackedSeries, type ToastOptions, buildOrgCss, chartColor, dateTimeToInputStr, dateToInputStr, generateColors, notifications, useColorScheme, useThemePreview };