@astralui/core 0.1.14 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.cjs +9 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -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","../src/components/Backgrounds.tsx","../src/components/Charts.tsx","../src/components/Auth.tsx","../src/components/ConfirmModal.tsx","../src/components/Avatar.tsx","../src/components/StatusBadge.tsx","../src/components/SearchInput.tsx","../src/components/Collapsible.tsx"],"names":["createContext","useContext","useState","useCallback","jsx","useEffect","jsxs","clean","IconX","createPortal","Spinner","cls","useRef","IconChevronDown"],"mappings":"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","file":"index.js","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, useId } from 'react';\nimport { createPortal } from 'react-dom';\nimport { IconX, IconChevronDown } from '@tabler/icons-react';\n\nlet dialogSeq = 0;\n\n/** Every dialog currently on screen, innermost last. */\nconst dialogStack: HTMLElement[] = [];\n\nconst FOCUSABLE = [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'iframe',\n 'object',\n 'embed',\n '[contenteditable]',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',');\n\n/**\n * Turns a portalled overlay into a real dialog.\n *\n * Without this the panel is an anonymous div: assistive tech never announces\n * it, focus stays on whatever opened it, and Tab walks straight out into the\n * page behind the overlay - which is still fully operable underneath.\n *\n * Escape and the focus trap are scoped to the TOPMOST dialog. The previous\n * implementation bound Escape per-instance, so with two dialogs open a single\n * key press closed both at once.\n */\nfunction useDialog(opened: boolean, onClose: () => void) {\n const panelRef = useRef<HTMLDivElement | null>(null);\n const idRef = useRef('');\n if (!idRef.current) idRef.current = 'au-dialog-title-' + String(++dialogSeq);\n\n // Kept in a ref so a caller passing a fresh arrow function every render does\n // not tear the trap down and rebuild it (which would drop focus each time).\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n\n useEffect(() => {\n if (!opened) return;\n const panel = panelRef.current;\n if (!panel) return;\n\n const restoreTo = document.activeElement as HTMLElement | null;\n dialogStack.push(panel);\n const isTop = () => dialogStack[dialogStack.length - 1] === panel;\n\n const focusables = () =>\n Array.from(panel.querySelectorAll<HTMLElement>(FOCUSABLE)).filter(\n (el) => el.offsetWidth > 0 || el.offsetHeight > 0 || el === document.activeElement,\n );\n\n // Give a child's own autoFocus one frame to win before taking over, so a\n // dialog that means to land on a particular field still does.\n const raf = requestAnimationFrame(() => {\n if (panel.contains(document.activeElement)) return;\n const list = focusables();\n // Prefer anything over the close button - landing on \"Close\" invites\n // dismissing the dialog you just opened.\n const target = list.find((el) => !el.classList.contains('au-modal-x')) ?? list[0] ?? panel;\n target.focus();\n });\n\n const onKey = (e: KeyboardEvent) => {\n if (!isTop()) return;\n if (e.key === 'Escape') { onCloseRef.current(); return; }\n if (e.key !== 'Tab') return;\n const list = focusables();\n if (!list.length) { e.preventDefault(); panel.focus(); return; }\n const first = list[0];\n const last = list[list.length - 1];\n const active = document.activeElement as HTMLElement | null;\n if (!panel.contains(active)) { e.preventDefault(); (e.shiftKey ? last : first).focus(); return; }\n if (e.shiftKey && active === first) { e.preventDefault(); last.focus(); }\n else if (!e.shiftKey && active === last) { e.preventDefault(); first.focus(); }\n };\n document.addEventListener('keydown', onKey, true);\n\n const prevOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n return () => {\n cancelAnimationFrame(raf);\n document.removeEventListener('keydown', onKey, true);\n const at = dialogStack.indexOf(panel);\n if (at !== -1) dialogStack.splice(at, 1);\n document.body.style.overflow = prevOverflow;\n // Hand focus back to whatever opened this, so the keyboard does not jump\n // to the top of the page.\n if (restoreTo && document.contains(restoreTo)) restoreTo.focus();\n };\n }, [opened]);\n\n return { panelRef, titleId: idRef.current };\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 const { panelRef, titleId } = useDialog(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\n ref={panelRef}\n className=\"au-modal-panel\"\n style={style}\n onMouseDown={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n tabIndex={-1}\n >\n <div className=\"au-modal-head\">\n <span className=\"au-modal-title\" id={titleId}>{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 const { panelRef, titleId } = useDialog(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\n ref={panelRef}\n className=\"au-drawer-panel\"\n style={style}\n onMouseDown={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n tabIndex={-1}\n >\n <div className=\"au-drawer-head\">\n <span className=\"au-drawer-title\" id={titleId}>{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, id, ariaLabel, ariaLabelledBy, clearLabel = 'Clear selection' }: {\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 /** Put this on the trigger so a visible <label htmlFor> can name it. */\n id?: string;\n /** Name the control when there is no visible label to point at. */\n ariaLabel?: string;\n /** Id of the visible label element naming this control. */\n ariaLabelledBy?: string;\n /** Accessible name for the clear button on a `clearable` select. */\n clearLabel?: string;\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 // Which option the keyboard is on. -1 = none. This is aria-activedescendant\n // navigation: DOM focus stays on the trigger (or the search box), so the\n // portal never steals the tab sequence.\n const [activeIndex, setActiveIndex] = useState(-1);\n const reactId = useId();\n const baseId = id ?? `au-select-${reactId}`;\n const listboxId = `${baseId}-listbox`;\n const optionId = (i: number) => `${baseId}-opt-${i}`;\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) { setActiveIndex(-1); 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 // The rows the keyboard walks, in the order they are rendered, so the index\n // means the same thing to both the key handler and the markup below.\n const rows: string[] = [...filtered.map(o => o.value), ...(showCreate ? [q.trim()] : [])];\n\n // Arrowing past the visible rows must scroll them into view - the menu has a\n // maxHeight and the rows never take DOM focus, so the browser will not do it.\n useEffect(() => {\n if (!open || activeIndex < 0) return;\n const el = menuRef.current?.querySelector(`#${CSS.escape(optionId(activeIndex))}`);\n (el as HTMLElement | null)?.scrollIntoView({ block: 'nearest' });\n }, [open, activeIndex, baseId]);\n\n const commit = (index: number) => {\n const picked = rows[index];\n if (picked == null) return;\n onChange(picked);\n setOpen(false);\n setQ('');\n triggerRef.current?.focus();\n };\n\n const onKeyDown = (e: ReactKeyboardEvent) => {\n if (disabled) return;\n const key = e.key;\n if (!open) {\n // A closed combobox opens on ArrowDown/ArrowUp/Enter/Space, per the\n // WAI-ARIA combobox pattern. Previously only a mouse click worked.\n if (key === 'ArrowDown' || key === 'ArrowUp' || key === 'Enter' || key === ' ') {\n e.preventDefault();\n setOpen(true);\n setActiveIndex(0);\n }\n return;\n }\n if (key === 'Escape') {\n // Stop here: an AstralSelect inside an AstralModal must close the SELECT,\n // not the modal behind it.\n e.preventDefault();\n e.stopPropagation();\n setOpen(false);\n setQ('');\n triggerRef.current?.focus();\n } else if (key === 'ArrowDown') {\n e.preventDefault();\n setActiveIndex(i => (rows.length ? (i + 1) % rows.length : -1));\n } else if (key === 'ArrowUp') {\n e.preventDefault();\n setActiveIndex(i => (rows.length ? (i <= 0 ? rows.length - 1 : i - 1) : -1));\n } else if (key === 'Home') {\n e.preventDefault();\n setActiveIndex(rows.length ? 0 : -1);\n } else if (key === 'End') {\n e.preventDefault();\n setActiveIndex(rows.length - 1);\n } else if (key === 'Enter') {\n e.preventDefault();\n commit(activeIndex >= 0 ? activeIndex : 0);\n } else if (key === 'Tab') {\n // Tabbing away commits nothing and leaves no orphan menu behind.\n setOpen(false);\n setQ('');\n }\n };\n\n return (\n <div className=\"au-select\">\n <button\n ref={triggerRef}\n id={baseId}\n type=\"button\"\n className=\"au-input au-select-trigger\"\n disabled={disabled}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={open ? listboxId : undefined}\n // Only while the TRIGGER holds focus. When searchable, autoFocus moves\n // focus into the search box, which carries its own copy - and\n // aria-activedescendant on an unfocused element means nothing.\n aria-activedescendant={open && !searchable && activeIndex >= 0 ? optionId(activeIndex) : undefined}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n onClick={() => setOpen(o => !o)}\n onKeyDown={onKeyDown}\n >\n <span className={hasValue ? '' : 'ph'}>{hasValue ? display : placeholder}</span>\n {clearable && hasValue ? (\n // Was a <span role=\"button\" tabIndex={-1}>: announced as a button and\n // reachable by nobody, so a keyboard user could not clear the field.\n // It is a real button now, and it stops the click bubbling to the\n // trigger so clearing does not also open the menu.\n <span\n className=\"au-select-caret au-select-clear\"\n role=\"button\"\n tabIndex={0}\n aria-label={clearLabel}\n onClick={(e) => { e.stopPropagation(); onChange(''); }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n onChange('');\n }\n }}\n ><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 id={listboxId}\n role=\"listbox\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabel ? undefined : ariaLabelledBy}\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 aria-label={searchPlaceholder}\n aria-controls={listboxId}\n // A screen reader follows aria-activedescendant on the element\n // that HAS focus. autoFocus moves focus here, so the copy on the\n // trigger stops being read the moment the box appears.\n role=\"combobox\"\n aria-expanded\n aria-autocomplete=\"list\"\n aria-activedescendant={activeIndex >= 0 ? optionId(activeIndex) : undefined}\n value={q}\n onChange={(e) => { setQ(e.currentTarget.value); setActiveIndex(0); }}\n onKeyDown={onKeyDown}\n />\n )}\n {filtered.length === 0 && !showCreate && <div className=\"au-select-empty\">{noResults}</div>}\n {filtered.map((o, i) => (\n <div\n key={o.value}\n id={optionId(i)}\n role=\"option\"\n aria-selected={o.value === value}\n // The rows are driven by aria-activedescendant, so they must NOT\n // be in the tab sequence: the menu portals to document.body, and\n // focusable rows there sent Tab to the end of the document.\n className={`au-select-opt${o.value === value ? ' on' : ''}${i === activeIndex ? ' active' : ''}`}\n onMouseEnter={() => setActiveIndex(i)}\n onClick={() => commit(i)}\n >\n {o.label}\n </div>\n ))}\n {showCreate && (\n <div\n id={optionId(filtered.length)}\n role=\"option\"\n aria-selected={false}\n className={`au-select-opt au-select-create${filtered.length === activeIndex ? ' active' : ''}`}\n onMouseEnter={() => setActiveIndex(filtered.length)}\n onClick={() => commit(filtered.length)}\n >\n + {q.trim()}\n </div>\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; exiting?: boolean; }\n\n/* How many toasts are visible at once. Older ones beyond this stay queued in the\n store (and keep auto-closing) but aren't rendered, so the stack can't grow without\n bound. Overridable via <AstralToaster limit={n} />. */\nconst DEFAULT_LIMIT = 4;\n/* Exit-animation duration; must match `au-toast-out` in toast.css. */\nconst EXIT_MS = 220;\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 // exiting:false so re-showing an id that's mid-fade revives it cleanly.\n const toast: Toast = { withCloseButton: true, ...existing, ...opts, id, exiting: false };\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, exiting: false };\n toasts = toasts.map(t => (t.id === opts.id ? toast : t));\n emit();\n scheduleAutoClose(toast);\n return opts.id;\n}\n\n/* Two-phase removal: mark the toast `exiting` so it plays the fade-out animation,\n then drop it from the store once the animation has finished. */\nfunction hide(id: string) {\n const t = toasts.find(x => x.id === id);\n if (!t || t.exiting) return; // gone already, or already fading out\n clearTimer(id); // cancel the pending auto-close\n toasts = toasts.map(x => (x.id === id ? { ...x, exiting: true } : x));\n emit();\n timers.set(id, setTimeout(() => {\n toasts = toasts.filter(x => x.id !== id);\n timers.delete(id);\n emit();\n t.onClose?.();\n }, EXIT_MS));\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\n className={t.exiting ? 'au-toast au-toast-out' : 'au-toast'}\n style={{ ['--au-toast-accent' as string]: accent } as CSSProperties}\n role=\"status\"\n >\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({ limit = DEFAULT_LIMIT }: { limit?: number } = {}) {\n const items = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n if (typeof document === 'undefined') return null;\n // Render only the newest `limit` toasts so the stack can't grow without bound.\n // Toasts beyond the cap stay in the store (still auto-closing) and surface as the\n // visible ones clear. Anything mid-fade is kept on so its exit animation finishes.\n const visible = limit > 0\n ? items.filter((t, i) => t.exiting || i >= items.length - limit)\n : items;\n return createPortal(\n <div className=\"au-toast-host\" role=\"region\" aria-live=\"polite\" aria-label=\"Notifications\">\n {visible.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 /** So a visible <label htmlFor> can name it. aria-label names the control\n * too, but only htmlFor also makes clicking the label focus it. */\n id?: string;\n}\n\nexport default function DateInput({ type = 'date', value, onChange, min, max, className, style, disabled, id, '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 id={id}\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","import { useEffect, useState } from 'react';\n\n/* A self-contained avatar: shows an image when `url` loads, otherwise a clean\n initials tile in the brand gradient. In `overlay` mode the image absolutely\n fills its positioned parent and renders nothing on failure (so the parent's\n own content shows through). */\n\nexport interface AvatarProps {\n url?: string | null;\n /** used for the alt text and to derive initials */\n name?: string | null;\n size?: number;\n radius?: number | string;\n className?: string;\n /** fill the positioned parent instead of rendering a standalone tile */\n overlay?: boolean;\n /** override the initials-tile background (defaults to the brand gradient) */\n color?: string;\n}\n\nexport function Avatar({ url, name, size = 36, radius = '50%', className = '', overlay = false, color }: AvatarProps) {\n const [broken, setBroken] = useState(false);\n\n // A new URL should get another chance to load.\n useEffect(() => { setBroken(false); }, [url]);\n\n if (overlay) {\n if (!url || broken) return null;\n return (\n <img\n src={url}\n alt={name || ''}\n className={className}\n referrerPolicy=\"no-referrer\"\n onError={() => setBroken(true)}\n style={{ position: 'absolute', inset: 0, width: '100%', height: '100%', borderRadius: radius, objectFit: 'cover' }}\n />\n );\n }\n\n if (url && !broken) {\n return (\n <img\n src={url}\n alt={name || ''}\n className={className}\n width={size}\n height={size}\n referrerPolicy=\"no-referrer\"\n loading=\"lazy\"\n onError={() => setBroken(true)}\n style={{ width: size, height: size, borderRadius: radius, objectFit: 'cover', display: 'block', flex: '0 0 auto' }}\n />\n );\n }\n\n const initials = (name || '').trim().slice(0, 2).toUpperCase() || '-';\n return (\n <span\n className={className}\n aria-hidden\n style={{\n width: size, height: size, borderRadius: radius, flex: '0 0 auto',\n display: 'inline-grid', placeItems: 'center', color: '#fff', fontWeight: 700,\n fontSize: Math.max(9, Math.round(size * 0.4)), lineHeight: 1,\n background: color ?? 'linear-gradient(135deg, var(--astral-color-violet-6), var(--astral-color-violet-8))',\n }}\n >\n {initials}\n </span>\n );\n}\n","import type { ReactNode, CSSProperties } from 'react';\n\n/* A presentational status pill: a colored dot + label. Fully prop-driven (no i18n).\n A built-in color map covers common status keys; override with `color`, pass your\n own display text via `label`, and use `filled` for a solid (vs tinted) badge. */\n\nconst COLOR_MAP: Record<string, string> = {\n offline: '#3b82f6', online: '#16a34a', active: '#16a34a', suspended: '#eab308',\n banned: '#ef4444', creating: '#06b6d4', verification_needed: '#EF8E2E',\n signup_failed: '#ef4444', untested: '#9ca3af', failed: '#ef4444', idle: '#9ca3af',\n starting: '#06b6d4', running: '#16a34a', stopping: '#eab308', stopped: '#EF8E2E',\n error: '#ef4444', draft: '#9ca3af', scheduled: '#3b82f6', paused: '#eab308',\n completed: '#16a34a', skipped: '#EF8E2E', in_campaign: '#8b5cf6',\n in_progress: '#3b82f6', pending: '#9ca3af', replied: '#8b5cf6', success: '#16a34a',\n};\n\n// The pill paints its own hue on a 15% tint of that same hue, at 11px - which\n// is normal text, so the bar is 4.5:1. Measured on white, every one of these\n// failed in light mode: 1.74 for the yellow, 2.78 for the green, 3.53 for the\n// violet. Account status is the most-scanned word on Accounts, Campaigns and\n// Unibox, and \"banned\" was one of the unreadable ones.\n//\n// So the DOT and the tint keep the hue, and the TEXT gets its own value.\n// Verified ratios against the composited tint: light 5.51-7.70, dark 8.13-10.21.\nconst FG: Record<string, [light: string, dark: string]> = {\n '#eab308': ['#854d0e', '#fde047'],\n '#06b6d4': ['#155e75', '#67e8f9'],\n '#EF8E2E': ['#9a4a06', '#fdba74'],\n '#9ca3af': ['#4b5563', '#d1d5db'],\n '#16a34a': ['#14532d', '#4ade80'],\n '#3b82f6': ['#1e40af', '#93c5fd'],\n '#ef4444': ['#991b1b', '#fca5a5'],\n '#8b5cf6': ['#5b21b6', '#c4b5fd'],\n};\n\n// White on #16a34a is 3.30. The filled variant needs a darker ground.\nconst SOLID: Record<string, string> = { '#16a34a': '#166534' };\n\nconst FILLED = new Set(['running', 'active', 'online']);\n\nexport interface StatusBadgeProps {\n /** raw status key - drives the default color, default fill, and fallback label */\n status: string;\n /** display text (defaults to the status key) */\n label?: ReactNode;\n /** override the dot/badge color (hex or any CSS color) */\n color?: string;\n /** solid fill instead of a tinted background (auto for running/active/online) */\n filled?: boolean;\n}\n\nexport function StatusBadge({ status, label, color, filled }: StatusBadgeProps) {\n const c = color ?? COLOR_MAP[status] ?? '#9ca3af';\n const isFilled = filled ?? FILLED.has(status);\n const text = label ?? status;\n return (\n <span\n className={`au-sbadge${isFilled ? ' filled' : ''}`}\n style={{\n '--au-sb': c,\n ...(FG[c] ? { '--au-sb-fg': `light-dark(${FG[c][0]}, ${FG[c][1]})` } : {}),\n ...(SOLID[c] ? { '--au-sb-solid': SOLID[c] } : {}),\n } as CSSProperties}\n title={typeof text === 'string' ? text : undefined}\n >\n <span className=\"au-sbadge-dot\" />\n {text}\n </span>\n );\n}\n","import type { CSSProperties } from 'react';\nimport { IconSearch, IconX } from '@tabler/icons-react';\n\n/* A clearable search field: leading search icon + input + a clear (X) button that\n appears once there's text. Controlled via `value` / `onChange`. Debounce the\n value in the parent if you're querying on change (see the docs example). */\n\nexport interface SearchInputProps {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n /** runs when the clear button is pressed (defaults to onChange('')) */\n onClear?: () => void;\n autoFocus?: boolean;\n disabled?: boolean;\n className?: string;\n style?: CSSProperties;\n 'aria-label'?: string;\n}\n\nexport function SearchInput({\n value, onChange, placeholder, onClear, autoFocus, disabled, className, style, 'aria-label': ariaLabel,\n}: SearchInputProps) {\n return (\n <div className={`au-search${className ? ' ' + className : ''}`} style={style}>\n <IconSearch size={15} />\n <input\n value={value}\n onChange={(e) => onChange(e.currentTarget.value)}\n placeholder={placeholder}\n aria-label={ariaLabel ?? placeholder ?? 'Search'}\n autoFocus={autoFocus}\n disabled={disabled}\n />\n {value && !disabled && (\n <button\n type=\"button\"\n className=\"clr\"\n onClick={() => (onClear ? onClear() : onChange(''))}\n aria-label=\"Clear search\"\n >\n <IconX size={13} />\n </button>\n )}\n </div>\n );\n}\n","import {\n useRef, useState, useLayoutEffect, useCallback,\n type CSSProperties, type ReactNode,\n} from 'react';\nimport { IconChevronDown } from '@tabler/icons-react';\n\n/* A header + animated region that folds its content away. Both the open AND the\n close ease smoothly: we measure the content's exact height and transition\n `max-height` to it (grid 0fr/1fr snaps shut on collapse in some browsers).\n A ResizeObserver keeps the height correct if the content changes while open.\n\n Works uncontrolled (`defaultOpen`) or controlled (`open` + `onOpenChange`). */\n\nexport interface CollapsibleProps {\n /** Header content - clicking it toggles the region. */\n title: ReactNode;\n children: ReactNode;\n /** Uncontrolled initial state (ignored when `open` is provided). */\n defaultOpen?: boolean;\n /** Controlled open state. Pair with `onOpenChange`. */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function Collapsible({\n title, children, defaultOpen = false, open: controlledOpen, onOpenChange, disabled, className, style,\n}: CollapsibleProps) {\n const isControlled = controlledOpen !== undefined;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const innerRef = useRef<HTMLDivElement>(null);\n const [maxH, setMaxH] = useState(0);\n\n // Sync the region height to the content's real height whenever it opens/closes,\n // and keep it in sync while open if the content grows or shrinks.\n useLayoutEffect(() => {\n const el = innerRef.current;\n if (!el) return;\n const sync = () => setMaxH(open ? el.scrollHeight : 0);\n sync();\n if (!open) return;\n const ro = new ResizeObserver(sync);\n ro.observe(el);\n return () => ro.disconnect();\n }, [open, children]);\n\n const toggle = useCallback(() => {\n if (disabled) return;\n const next = !open;\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n }, [disabled, open, isControlled, onOpenChange]);\n\n return (\n <div className={`au-collapse${open ? ' au-collapse--open' : ''}${className ? ' ' + className : ''}`} style={style}>\n <button type=\"button\" className=\"au-collapse-head\" aria-expanded={open} disabled={disabled} onClick={toggle}>\n <span className=\"au-collapse-title\">{title}</span>\n <IconChevronDown size={16} className=\"au-collapse-chev\" aria-hidden />\n </button>\n <div className=\"au-collapse-region\" style={{ maxHeight: open ? maxH : 0 }}>\n <div className=\"au-collapse-inner\" ref={innerRef}>\n {children}\n </div>\n </div>\n </div>\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","../src/components/Avatar.tsx","../src/components/StatusBadge.tsx","../src/components/SearchInput.tsx","../src/components/Collapsible.tsx"],"names":["createContext","useContext","useState","useCallback","jsx","useEffect","jsxs","clean","IconX","createPortal","Spinner","cls","useRef","IconChevronDown"],"mappings":"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","file":"index.js","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, useId } from 'react';\nimport { createPortal } from 'react-dom';\nimport { IconX, IconChevronDown } from '@tabler/icons-react';\n\nlet dialogSeq = 0;\n\n/** Every dialog currently on screen, innermost last. */\nconst dialogStack: HTMLElement[] = [];\n\nconst FOCUSABLE = [\n 'a[href]',\n 'area[href]',\n 'button:not([disabled])',\n 'input:not([disabled]):not([type=\"hidden\"])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'iframe',\n 'object',\n 'embed',\n '[contenteditable]',\n '[tabindex]:not([tabindex=\"-1\"])',\n].join(',');\n\n/**\n * Turns a portalled overlay into a real dialog.\n *\n * Without this the panel is an anonymous div: assistive tech never announces\n * it, focus stays on whatever opened it, and Tab walks straight out into the\n * page behind the overlay - which is still fully operable underneath.\n *\n * Escape and the focus trap are scoped to the TOPMOST dialog. The previous\n * implementation bound Escape per-instance, so with two dialogs open a single\n * key press closed both at once.\n */\nfunction useDialog(opened: boolean, onClose: () => void) {\n const panelRef = useRef<HTMLDivElement | null>(null);\n const idRef = useRef('');\n if (!idRef.current) idRef.current = 'au-dialog-title-' + String(++dialogSeq);\n\n // Kept in a ref so a caller passing a fresh arrow function every render does\n // not tear the trap down and rebuild it (which would drop focus each time).\n const onCloseRef = useRef(onClose);\n onCloseRef.current = onClose;\n\n useEffect(() => {\n if (!opened) return;\n const panel = panelRef.current;\n if (!panel) return;\n\n const restoreTo = document.activeElement as HTMLElement | null;\n dialogStack.push(panel);\n const isTop = () => dialogStack[dialogStack.length - 1] === panel;\n\n const focusables = () =>\n Array.from(panel.querySelectorAll<HTMLElement>(FOCUSABLE)).filter(\n (el) => el.offsetWidth > 0 || el.offsetHeight > 0 || el === document.activeElement,\n );\n\n // Give a child's own autoFocus one frame to win before taking over, so a\n // dialog that means to land on a particular field still does.\n const raf = requestAnimationFrame(() => {\n if (panel.contains(document.activeElement)) return;\n const list = focusables();\n // Prefer anything over the close button - landing on \"Close\" invites\n // dismissing the dialog you just opened.\n const target = list.find((el) => !el.classList.contains('au-modal-x')) ?? list[0] ?? panel;\n target.focus();\n });\n\n const onKey = (e: KeyboardEvent) => {\n if (!isTop()) return;\n if (e.key === 'Escape') { onCloseRef.current(); return; }\n if (e.key !== 'Tab') return;\n const list = focusables();\n if (!list.length) { e.preventDefault(); panel.focus(); return; }\n const first = list[0];\n const last = list[list.length - 1];\n const active = document.activeElement as HTMLElement | null;\n if (!panel.contains(active)) { e.preventDefault(); (e.shiftKey ? last : first).focus(); return; }\n if (e.shiftKey && active === first) { e.preventDefault(); last.focus(); }\n else if (!e.shiftKey && active === last) { e.preventDefault(); first.focus(); }\n };\n document.addEventListener('keydown', onKey, true);\n\n const prevOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n return () => {\n cancelAnimationFrame(raf);\n document.removeEventListener('keydown', onKey, true);\n const at = dialogStack.indexOf(panel);\n if (at !== -1) dialogStack.splice(at, 1);\n document.body.style.overflow = prevOverflow;\n // Hand focus back to whatever opened this, so the keyboard does not jump\n // to the top of the page.\n if (restoreTo && document.contains(restoreTo)) restoreTo.focus();\n };\n }, [opened]);\n\n return { panelRef, titleId: idRef.current };\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 const { panelRef, titleId } = useDialog(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\n ref={panelRef}\n className=\"au-modal-panel\"\n style={style}\n onMouseDown={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n tabIndex={-1}\n >\n <div className=\"au-modal-head\">\n <span className=\"au-modal-title\" id={titleId}>{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 const { panelRef, titleId } = useDialog(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\n ref={panelRef}\n className=\"au-drawer-panel\"\n style={style}\n onMouseDown={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n tabIndex={-1}\n >\n <div className=\"au-drawer-head\">\n <span className=\"au-drawer-title\" id={titleId}>{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, id, ariaLabel, ariaLabelledBy, clearLabel = 'Clear selection' }: {\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 /** Put this on the trigger so a visible <label htmlFor> can name it. */\n id?: string;\n /** Name the control when there is no visible label to point at. */\n ariaLabel?: string;\n /** Id of the visible label element naming this control. */\n ariaLabelledBy?: string;\n /** Accessible name for the clear button on a `clearable` select. */\n clearLabel?: string;\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 // Which option the keyboard is on. -1 = none. This is aria-activedescendant\n // navigation: DOM focus stays on the trigger (or the search box), so the\n // portal never steals the tab sequence.\n const [activeIndex, setActiveIndex] = useState(-1);\n const reactId = useId();\n const baseId = id ?? `au-select-${reactId}`;\n const listboxId = `${baseId}-listbox`;\n const optionId = (i: number) => `${baseId}-opt-${i}`;\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) { setActiveIndex(-1); 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 // The rows the keyboard walks, in the order they are rendered, so the index\n // means the same thing to both the key handler and the markup below.\n const rows: string[] = [...filtered.map(o => o.value), ...(showCreate ? [q.trim()] : [])];\n\n // Arrowing past the visible rows must scroll them into view - the menu has a\n // maxHeight and the rows never take DOM focus, so the browser will not do it.\n useEffect(() => {\n if (!open || activeIndex < 0) return;\n const el = menuRef.current?.querySelector(`#${CSS.escape(optionId(activeIndex))}`);\n (el as HTMLElement | null)?.scrollIntoView({ block: 'nearest' });\n }, [open, activeIndex, baseId]);\n\n const commit = (index: number) => {\n const picked = rows[index];\n if (picked == null) return;\n onChange(picked);\n setOpen(false);\n setQ('');\n triggerRef.current?.focus();\n };\n\n const onKeyDown = (e: ReactKeyboardEvent) => {\n if (disabled) return;\n const key = e.key;\n if (!open) {\n // A closed combobox opens on ArrowDown/ArrowUp/Enter/Space, per the\n // WAI-ARIA combobox pattern. Previously only a mouse click worked.\n if (key === 'ArrowDown' || key === 'ArrowUp' || key === 'Enter' || key === ' ') {\n e.preventDefault();\n setOpen(true);\n setActiveIndex(0);\n }\n return;\n }\n if (key === 'Escape') {\n // Stop here: an AstralSelect inside an AstralModal must close the SELECT,\n // not the modal behind it.\n e.preventDefault();\n e.stopPropagation();\n setOpen(false);\n setQ('');\n triggerRef.current?.focus();\n } else if (key === 'ArrowDown') {\n e.preventDefault();\n setActiveIndex(i => (rows.length ? (i + 1) % rows.length : -1));\n } else if (key === 'ArrowUp') {\n e.preventDefault();\n setActiveIndex(i => (rows.length ? (i <= 0 ? rows.length - 1 : i - 1) : -1));\n } else if (key === 'Home') {\n e.preventDefault();\n setActiveIndex(rows.length ? 0 : -1);\n } else if (key === 'End') {\n e.preventDefault();\n setActiveIndex(rows.length - 1);\n } else if (key === 'Enter') {\n e.preventDefault();\n commit(activeIndex >= 0 ? activeIndex : 0);\n } else if (key === 'Tab') {\n // Tabbing away commits nothing and leaves no orphan menu behind.\n setOpen(false);\n setQ('');\n }\n };\n\n return (\n <div className=\"au-select\">\n <button\n ref={triggerRef}\n id={baseId}\n type=\"button\"\n className=\"au-input au-select-trigger\"\n disabled={disabled}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={open ? listboxId : undefined}\n // Only while the TRIGGER holds focus. When searchable, autoFocus moves\n // focus into the search box, which carries its own copy - and\n // aria-activedescendant on an unfocused element means nothing.\n aria-activedescendant={open && !searchable && activeIndex >= 0 ? optionId(activeIndex) : undefined}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n onClick={() => setOpen(o => !o)}\n onKeyDown={onKeyDown}\n >\n <span className={hasValue ? '' : 'ph'}>{hasValue ? display : placeholder}</span>\n {clearable && hasValue ? (\n // Was a <span role=\"button\" tabIndex={-1}>: announced as a button and\n // reachable by nobody, so a keyboard user could not clear the field.\n // It is a real button now, and it stops the click bubbling to the\n // trigger so clearing does not also open the menu.\n <span\n className=\"au-select-caret au-select-clear\"\n role=\"button\"\n tabIndex={0}\n aria-label={clearLabel}\n onClick={(e) => { e.stopPropagation(); onChange(''); }}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n onChange('');\n }\n }}\n ><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 id={listboxId}\n role=\"listbox\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabel ? undefined : ariaLabelledBy}\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 aria-label={searchPlaceholder}\n aria-controls={listboxId}\n // A screen reader follows aria-activedescendant on the element\n // that HAS focus. autoFocus moves focus here, so the copy on the\n // trigger stops being read the moment the box appears.\n role=\"combobox\"\n aria-expanded\n aria-autocomplete=\"list\"\n aria-activedescendant={activeIndex >= 0 ? optionId(activeIndex) : undefined}\n value={q}\n onChange={(e) => { setQ(e.currentTarget.value); setActiveIndex(0); }}\n onKeyDown={onKeyDown}\n />\n )}\n {filtered.length === 0 && !showCreate && <div className=\"au-select-empty\">{noResults}</div>}\n {filtered.map((o, i) => (\n <div\n key={o.value}\n id={optionId(i)}\n role=\"option\"\n aria-selected={o.value === value}\n // The rows are driven by aria-activedescendant, so they must NOT\n // be in the tab sequence: the menu portals to document.body, and\n // focusable rows there sent Tab to the end of the document.\n className={`au-select-opt${o.value === value ? ' on' : ''}${i === activeIndex ? ' active' : ''}`}\n onMouseEnter={() => setActiveIndex(i)}\n onClick={() => commit(i)}\n >\n {o.label}\n </div>\n ))}\n {showCreate && (\n <div\n id={optionId(filtered.length)}\n role=\"option\"\n aria-selected={false}\n className={`au-select-opt au-select-create${filtered.length === activeIndex ? ' active' : ''}`}\n onMouseEnter={() => setActiveIndex(filtered.length)}\n onClick={() => commit(filtered.length)}\n >\n + {q.trim()}\n </div>\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 // Escape closes this menu, and only this menu: a menu opened inside an\n // AstralModal must not take the dialog down with it. useDialog binds its\n // own Escape on DOCUMENT in capture, and bound it first (the dialog opened\n // before this menu), so a document listener here could never run ahead of\n // it. Capture starts at window, one step earlier, which is the only place\n // that can stop the key before the dialog sees it. Focus returns to the\n // trigger, where a keyboard user pressing Escape is still standing.\n const onKey = (e: KeyboardEvent) => {\n if (e.key !== 'Escape') return;\n e.preventDefault();\n e.stopPropagation();\n setOpen(false);\n anchorRef.current?.querySelector<HTMLElement>(FOCUSABLE)?.focus();\n };\n window.addEventListener('scroll', onScroll, true);\n window.addEventListener('resize', onResize);\n window.addEventListener('keydown', onKey, true);\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 window.removeEventListener('keydown', onKey, true);\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; exiting?: boolean; }\n\n/* How many toasts are visible at once. Older ones beyond this stay queued in the\n store (and keep auto-closing) but aren't rendered, so the stack can't grow without\n bound. Overridable via <AstralToaster limit={n} />. */\nconst DEFAULT_LIMIT = 4;\n/* Exit-animation duration; must match `au-toast-out` in toast.css. */\nconst EXIT_MS = 220;\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 // exiting:false so re-showing an id that's mid-fade revives it cleanly.\n const toast: Toast = { withCloseButton: true, ...existing, ...opts, id, exiting: false };\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, exiting: false };\n toasts = toasts.map(t => (t.id === opts.id ? toast : t));\n emit();\n scheduleAutoClose(toast);\n return opts.id;\n}\n\n/* Two-phase removal: mark the toast `exiting` so it plays the fade-out animation,\n then drop it from the store once the animation has finished. */\nfunction hide(id: string) {\n const t = toasts.find(x => x.id === id);\n if (!t || t.exiting) return; // gone already, or already fading out\n clearTimer(id); // cancel the pending auto-close\n toasts = toasts.map(x => (x.id === id ? { ...x, exiting: true } : x));\n emit();\n timers.set(id, setTimeout(() => {\n toasts = toasts.filter(x => x.id !== id);\n timers.delete(id);\n emit();\n t.onClose?.();\n }, EXIT_MS));\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\n className={t.exiting ? 'au-toast au-toast-out' : 'au-toast'}\n style={{ ['--au-toast-accent' as string]: accent } as CSSProperties}\n role=\"status\"\n >\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({ limit = DEFAULT_LIMIT }: { limit?: number } = {}) {\n const items = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n if (typeof document === 'undefined') return null;\n // Render only the newest `limit` toasts so the stack can't grow without bound.\n // Toasts beyond the cap stay in the store (still auto-closing) and surface as the\n // visible ones clear. Anything mid-fade is kept on so its exit animation finishes.\n const visible = limit > 0\n ? items.filter((t, i) => t.exiting || i >= items.length - limit)\n : items;\n return createPortal(\n <div className=\"au-toast-host\" role=\"region\" aria-live=\"polite\" aria-label=\"Notifications\">\n {visible.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 /** So a visible <label htmlFor> can name it. aria-label names the control\n * too, but only htmlFor also makes clicking the label focus it. */\n id?: string;\n}\n\nexport default function DateInput({ type = 'date', value, onChange, min, max, className, style, disabled, id, '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 id={id}\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","import { useEffect, useState } from 'react';\n\n/* A self-contained avatar: shows an image when `url` loads, otherwise a clean\n initials tile in the brand gradient. In `overlay` mode the image absolutely\n fills its positioned parent and renders nothing on failure (so the parent's\n own content shows through). */\n\nexport interface AvatarProps {\n url?: string | null;\n /** used for the alt text and to derive initials */\n name?: string | null;\n size?: number;\n radius?: number | string;\n className?: string;\n /** fill the positioned parent instead of rendering a standalone tile */\n overlay?: boolean;\n /** override the initials-tile background (defaults to the brand gradient) */\n color?: string;\n}\n\nexport function Avatar({ url, name, size = 36, radius = '50%', className = '', overlay = false, color }: AvatarProps) {\n const [broken, setBroken] = useState(false);\n\n // A new URL should get another chance to load.\n useEffect(() => { setBroken(false); }, [url]);\n\n if (overlay) {\n if (!url || broken) return null;\n return (\n <img\n src={url}\n alt={name || ''}\n className={className}\n referrerPolicy=\"no-referrer\"\n onError={() => setBroken(true)}\n style={{ position: 'absolute', inset: 0, width: '100%', height: '100%', borderRadius: radius, objectFit: 'cover' }}\n />\n );\n }\n\n if (url && !broken) {\n return (\n <img\n src={url}\n alt={name || ''}\n className={className}\n width={size}\n height={size}\n referrerPolicy=\"no-referrer\"\n loading=\"lazy\"\n onError={() => setBroken(true)}\n style={{ width: size, height: size, borderRadius: radius, objectFit: 'cover', display: 'block', flex: '0 0 auto' }}\n />\n );\n }\n\n const initials = (name || '').trim().slice(0, 2).toUpperCase() || '-';\n return (\n <span\n className={className}\n aria-hidden\n style={{\n width: size, height: size, borderRadius: radius, flex: '0 0 auto',\n display: 'inline-grid', placeItems: 'center', color: '#fff', fontWeight: 700,\n fontSize: Math.max(9, Math.round(size * 0.4)), lineHeight: 1,\n background: color ?? 'linear-gradient(135deg, var(--astral-color-violet-6), var(--astral-color-violet-8))',\n }}\n >\n {initials}\n </span>\n );\n}\n","import type { ReactNode, CSSProperties } from 'react';\n\n/* A presentational status pill: a colored dot + label. Fully prop-driven (no i18n).\n A built-in color map covers common status keys; override with `color`, pass your\n own display text via `label`, and use `filled` for a solid (vs tinted) badge. */\n\nconst COLOR_MAP: Record<string, string> = {\n offline: '#3b82f6', online: '#16a34a', active: '#16a34a', suspended: '#eab308',\n banned: '#ef4444', creating: '#06b6d4', verification_needed: '#EF8E2E',\n signup_failed: '#ef4444', untested: '#9ca3af', failed: '#ef4444', idle: '#9ca3af',\n starting: '#06b6d4', running: '#16a34a', stopping: '#eab308', stopped: '#EF8E2E',\n error: '#ef4444', draft: '#9ca3af', scheduled: '#3b82f6', paused: '#eab308',\n completed: '#16a34a', skipped: '#EF8E2E', in_campaign: '#8b5cf6',\n in_progress: '#3b82f6', pending: '#9ca3af', replied: '#8b5cf6', success: '#16a34a',\n};\n\n// The pill paints its own hue on a 15% tint of that same hue, at 11px - which\n// is normal text, so the bar is 4.5:1. Measured on white, every one of these\n// failed in light mode: 1.74 for the yellow, 2.78 for the green, 3.53 for the\n// violet. Account status is the most-scanned word on Accounts, Campaigns and\n// Unibox, and \"banned\" was one of the unreadable ones.\n//\n// So the DOT and the tint keep the hue, and the TEXT gets its own value.\n// Verified ratios against the composited tint: light 5.51-7.70, dark 8.13-10.21.\nconst FG: Record<string, [light: string, dark: string]> = {\n '#eab308': ['#854d0e', '#fde047'],\n '#06b6d4': ['#155e75', '#67e8f9'],\n '#EF8E2E': ['#9a4a06', '#fdba74'],\n '#9ca3af': ['#4b5563', '#d1d5db'],\n '#16a34a': ['#14532d', '#4ade80'],\n '#3b82f6': ['#1e40af', '#93c5fd'],\n '#ef4444': ['#991b1b', '#fca5a5'],\n '#8b5cf6': ['#5b21b6', '#c4b5fd'],\n};\n\n// White on #16a34a is 3.30. The filled variant needs a darker ground.\nconst SOLID: Record<string, string> = { '#16a34a': '#166534' };\n\nconst FILLED = new Set(['running', 'active', 'online']);\n\nexport interface StatusBadgeProps {\n /** raw status key - drives the default color, default fill, and fallback label */\n status: string;\n /** display text (defaults to the status key) */\n label?: ReactNode;\n /** override the dot/badge color (hex or any CSS color) */\n color?: string;\n /** solid fill instead of a tinted background (auto for running/active/online) */\n filled?: boolean;\n}\n\nexport function StatusBadge({ status, label, color, filled }: StatusBadgeProps) {\n const c = color ?? COLOR_MAP[status] ?? '#9ca3af';\n const isFilled = filled ?? FILLED.has(status);\n const text = label ?? status;\n return (\n <span\n className={`au-sbadge${isFilled ? ' filled' : ''}`}\n style={{\n '--au-sb': c,\n ...(FG[c] ? { '--au-sb-fg': `light-dark(${FG[c][0]}, ${FG[c][1]})` } : {}),\n ...(SOLID[c] ? { '--au-sb-solid': SOLID[c] } : {}),\n } as CSSProperties}\n title={typeof text === 'string' ? text : undefined}\n >\n <span className=\"au-sbadge-dot\" />\n {text}\n </span>\n );\n}\n","import type { CSSProperties } from 'react';\nimport { IconSearch, IconX } from '@tabler/icons-react';\n\n/* A clearable search field: leading search icon + input + a clear (X) button that\n appears once there's text. Controlled via `value` / `onChange`. Debounce the\n value in the parent if you're querying on change (see the docs example). */\n\nexport interface SearchInputProps {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n /** runs when the clear button is pressed (defaults to onChange('')) */\n onClear?: () => void;\n autoFocus?: boolean;\n disabled?: boolean;\n className?: string;\n style?: CSSProperties;\n 'aria-label'?: string;\n}\n\nexport function SearchInput({\n value, onChange, placeholder, onClear, autoFocus, disabled, className, style, 'aria-label': ariaLabel,\n}: SearchInputProps) {\n return (\n <div className={`au-search${className ? ' ' + className : ''}`} style={style}>\n <IconSearch size={15} />\n <input\n value={value}\n onChange={(e) => onChange(e.currentTarget.value)}\n placeholder={placeholder}\n aria-label={ariaLabel ?? placeholder ?? 'Search'}\n autoFocus={autoFocus}\n disabled={disabled}\n />\n {value && !disabled && (\n <button\n type=\"button\"\n className=\"clr\"\n onClick={() => (onClear ? onClear() : onChange(''))}\n aria-label=\"Clear search\"\n >\n <IconX size={13} />\n </button>\n )}\n </div>\n );\n}\n","import {\n useRef, useState, useLayoutEffect, useCallback,\n type CSSProperties, type ReactNode,\n} from 'react';\nimport { IconChevronDown } from '@tabler/icons-react';\n\n/* A header + animated region that folds its content away. Both the open AND the\n close ease smoothly: we measure the content's exact height and transition\n `max-height` to it (grid 0fr/1fr snaps shut on collapse in some browsers).\n A ResizeObserver keeps the height correct if the content changes while open.\n\n Works uncontrolled (`defaultOpen`) or controlled (`open` + `onOpenChange`). */\n\nexport interface CollapsibleProps {\n /** Header content - clicking it toggles the region. */\n title: ReactNode;\n children: ReactNode;\n /** Uncontrolled initial state (ignored when `open` is provided). */\n defaultOpen?: boolean;\n /** Controlled open state. Pair with `onOpenChange`. */\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function Collapsible({\n title, children, defaultOpen = false, open: controlledOpen, onOpenChange, disabled, className, style,\n}: CollapsibleProps) {\n const isControlled = controlledOpen !== undefined;\n const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);\n const open = isControlled ? controlledOpen : uncontrolledOpen;\n\n const innerRef = useRef<HTMLDivElement>(null);\n const [maxH, setMaxH] = useState(0);\n\n // Sync the region height to the content's real height whenever it opens/closes,\n // and keep it in sync while open if the content grows or shrinks.\n useLayoutEffect(() => {\n const el = innerRef.current;\n if (!el) return;\n const sync = () => setMaxH(open ? el.scrollHeight : 0);\n sync();\n if (!open) return;\n const ro = new ResizeObserver(sync);\n ro.observe(el);\n return () => ro.disconnect();\n }, [open, children]);\n\n const toggle = useCallback(() => {\n if (disabled) return;\n const next = !open;\n if (!isControlled) setUncontrolledOpen(next);\n onOpenChange?.(next);\n }, [disabled, open, isControlled, onOpenChange]);\n\n return (\n <div className={`au-collapse${open ? ' au-collapse--open' : ''}${className ? ' ' + className : ''}`} style={style}>\n <button type=\"button\" className=\"au-collapse-head\" aria-expanded={open} disabled={disabled} onClick={toggle}>\n <span className=\"au-collapse-title\">{title}</span>\n <IconChevronDown size={16} className=\"au-collapse-chev\" aria-hidden />\n </button>\n <div className=\"au-collapse-region\" style={{ maxHeight: open ? maxH : 0 }}>\n <div className=\"au-collapse-inner\" ref={innerRef}>\n {children}\n </div>\n </div>\n </div>\n );\n}\n"]}
|