@astralui/core 0.1.7 → 0.1.8

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/dist/index.d.ts CHANGED
@@ -288,4 +288,19 @@ interface SearchInputProps {
288
288
  }
289
289
  declare function SearchInput({ value, onChange, placeholder, onClear, autoFocus, disabled, className, style, 'aria-label': ariaLabel, }: SearchInputProps): react.JSX.Element;
290
290
 
291
- export { AstralDrawer, AstralMenu, type AstralMenuItem, AstralModal, AstralPinInput, AstralSelect, type AstralSelectOption, type AstralThemeColors, AstralThemeProvider, AstralToaster, AuthCard, AuthShell, Avatar, type AvatarProps, type ColorScheme, ColorSchemeProvider, ConfirmModal, type ConfirmModalProps, DateInput, Delta, Donut, type DonutDatum, FunnelBars, type FunnelDatum, GridBackground, SearchInput, type SearchInputProps, SpaceBackground, Sparkline, Spinner, StackedBars, type StackedRow, type StackedSeries, StatusBadge, type StatusBadgeProps, type ToastOptions, buildOrgCss, chartColor, dateTimeToInputStr, dateToInputStr, generateColors, notifications, useColorScheme, useThemePreview };
291
+ interface CollapsibleProps {
292
+ /** Header content - clicking it toggles the region. */
293
+ title: ReactNode;
294
+ children: ReactNode;
295
+ /** Uncontrolled initial state (ignored when `open` is provided). */
296
+ defaultOpen?: boolean;
297
+ /** Controlled open state. Pair with `onOpenChange`. */
298
+ open?: boolean;
299
+ onOpenChange?: (open: boolean) => void;
300
+ disabled?: boolean;
301
+ className?: string;
302
+ style?: CSSProperties;
303
+ }
304
+ declare function Collapsible({ title, children, defaultOpen, open: controlledOpen, onOpenChange, disabled, className, style, }: CollapsibleProps): react.JSX.Element;
305
+
306
+ export { AstralDrawer, AstralMenu, type AstralMenuItem, AstralModal, AstralPinInput, AstralSelect, type AstralSelectOption, type AstralThemeColors, AstralThemeProvider, AstralToaster, AuthCard, AuthShell, Avatar, type AvatarProps, Collapsible, type CollapsibleProps, type ColorScheme, ColorSchemeProvider, ConfirmModal, type ConfirmModalProps, DateInput, Delta, Donut, type DonutDatum, FunnelBars, type FunnelDatum, GridBackground, SearchInput, type SearchInputProps, SpaceBackground, Sparkline, Spinner, StackedBars, type StackedRow, type StackedSeries, StatusBadge, type StatusBadgeProps, type ToastOptions, buildOrgCss, chartColor, dateTimeToInputStr, dateToInputStr, generateColors, notifications, useColorScheme, useThemePreview };
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { createContext, useState, useEffect, useCallback, useContext, useMemo, useRef, useSyncExternalStore } from 'react';
1
+ import { createContext, useState, useEffect, useCallback, useContext, useMemo, useRef, useSyncExternalStore, useLayoutEffect } from 'react';
2
2
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
3
  import chroma from 'chroma-js';
4
4
  import { createPortal } from 'react-dom';
@@ -949,7 +949,46 @@ function SearchInput({
949
949
  )
950
950
  ] });
951
951
  }
952
+ function Collapsible({
953
+ title,
954
+ children,
955
+ defaultOpen = false,
956
+ open: controlledOpen,
957
+ onOpenChange,
958
+ disabled,
959
+ className,
960
+ style
961
+ }) {
962
+ const isControlled = controlledOpen !== void 0;
963
+ const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);
964
+ const open = isControlled ? controlledOpen : uncontrolledOpen;
965
+ const innerRef = useRef(null);
966
+ const [maxH, setMaxH] = useState(0);
967
+ useLayoutEffect(() => {
968
+ const el = innerRef.current;
969
+ if (!el) return;
970
+ const sync = () => setMaxH(open ? el.scrollHeight : 0);
971
+ sync();
972
+ if (!open) return;
973
+ const ro = new ResizeObserver(sync);
974
+ ro.observe(el);
975
+ return () => ro.disconnect();
976
+ }, [open, children]);
977
+ const toggle = useCallback(() => {
978
+ if (disabled) return;
979
+ const next = !open;
980
+ if (!isControlled) setUncontrolledOpen(next);
981
+ onOpenChange?.(next);
982
+ }, [disabled, open, isControlled, onOpenChange]);
983
+ return /* @__PURE__ */ jsxs("div", { className: `au-collapse${open ? " au-collapse--open" : ""}${className ? " " + className : ""}`, style, children: [
984
+ /* @__PURE__ */ jsxs("button", { type: "button", className: "au-collapse-head", "aria-expanded": open, disabled, onClick: toggle, children: [
985
+ /* @__PURE__ */ jsx("span", { className: "au-collapse-title", children: title }),
986
+ /* @__PURE__ */ jsx(IconChevronDown, { size: 16, className: "au-collapse-chev", "aria-hidden": true })
987
+ ] }),
988
+ /* @__PURE__ */ jsx("div", { className: "au-collapse-region", style: { maxHeight: open ? maxH : 0 }, children: /* @__PURE__ */ jsx("div", { className: "au-collapse-inner", ref: innerRef, children }) })
989
+ ] });
990
+ }
952
991
 
953
- export { AstralDrawer, AstralMenu, AstralModal, AstralPinInput, AstralSelect, AstralThemeProvider, AstralToaster, AuthCard, AuthShell, Avatar, ColorSchemeProvider, ConfirmModal, DateInput, Delta, Donut, FunnelBars, GridBackground, SearchInput, SpaceBackground, Sparkline, Spinner2 as Spinner, StackedBars, StatusBadge, buildOrgCss, chartColor, dateTimeToInputStr, dateToInputStr, generateColors, notifications, useColorScheme, useThemePreview };
992
+ export { AstralDrawer, AstralMenu, AstralModal, AstralPinInput, AstralSelect, AstralThemeProvider, AstralToaster, AuthCard, AuthShell, Avatar, Collapsible, ColorSchemeProvider, ConfirmModal, DateInput, Delta, Donut, FunnelBars, GridBackground, SearchInput, SpaceBackground, Sparkline, Spinner2 as Spinner, StackedBars, StatusBadge, buildOrgCss, chartColor, dateTimeToInputStr, dateToInputStr, generateColors, notifications, useColorScheme, useThemePreview };
954
993
  //# sourceMappingURL=index.js.map
955
994
  //# sourceMappingURL=index.js.map
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"],"names":["createContext","useContext","useState","useCallback","jsx","useEffect","jsxs","clean","IconX","createPortal","Spinner","cls"],"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 } from 'react';\nimport { createPortal } from 'react-dom';\nimport { IconX, IconChevronDown } from '@tabler/icons-react';\n\nfunction useDismiss(opened: boolean, onClose: () => void) {\n useEffect(() => {\n if (!opened) return;\n const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose(); };\n document.addEventListener('keydown', onKey);\n const prev = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return () => { document.removeEventListener('keydown', onKey); document.body.style.overflow = prev; };\n }, [opened, onClose]);\n}\n\ninterface ShellProps {\n opened: boolean;\n onClose: () => void;\n title: ReactNode;\n brand?: string;\n width?: number;\n /** Override the overlay z-index (default 300). Use to stack over flow-editor modals. */\n zIndex?: number;\n children: ReactNode;\n}\n\n/** Centered Astral modal (portal + overlay + escape + click-outside). */\nexport function AstralModal({ opened, onClose, title, brand, width = 460, zIndex, children }: ShellProps) {\n useDismiss(opened, onClose);\n if (!opened) return null;\n const style = { maxWidth: width, ...(brand ? { '--au-ic': brand } : {}) } as CSSProperties;\n return createPortal(\n <div className=\"au-modal-overlay\" onMouseDown={onClose} style={zIndex != null ? { zIndex } : undefined}>\n <div className=\"au-modal-panel\" style={style} onMouseDown={(e) => e.stopPropagation()}>\n <div className=\"au-modal-head\">\n <span className=\"au-modal-title\">{title}</span>\n <button type=\"button\" className=\"au-modal-x\" onClick={onClose} aria-label=\"Close\"><IconX /></button>\n </div>\n <div className=\"au-modal-body\">{children}</div>\n </div>\n </div>,\n document.body,\n );\n}\n\n/** Right-side Astral drawer. */\nexport function AstralDrawer({ opened, onClose, title, brand, width = 440, zIndex, children }: ShellProps) {\n useDismiss(opened, onClose);\n if (!opened) return null;\n const style = { width, ...(brand ? { '--au-ic': brand } : {}) } as CSSProperties;\n return createPortal(\n <div className=\"au-drawer-overlay\" onMouseDown={onClose} style={zIndex != null ? { zIndex } : undefined}>\n <div className=\"au-drawer-panel\" style={style} onMouseDown={(e) => e.stopPropagation()}>\n <div className=\"au-drawer-head\">\n <span className=\"au-drawer-title\">{title}</span>\n <button type=\"button\" className=\"au-modal-x\" onClick={onClose} aria-label=\"Close\"><IconX /></button>\n </div>\n <div className=\"au-drawer-body\">{children}</div>\n </div>\n </div>,\n document.body,\n );\n}\n\n/** Astral 6-box code input, with auto-advance, backspace, paste and arrows. */\nexport function AstralPinInput({ length = 6, value, onChange, autoFocus }: {\n length?: number;\n value: string;\n onChange: (value: string) => void;\n autoFocus?: boolean;\n}) {\n const refs = useRef<Array<HTMLInputElement | null>>([]);\n const digits = Array.from({ length }, (_, i) => value[i] ?? '');\n\n const focusBox = (i: number) => { refs.current[Math.max(0, Math.min(length - 1, i))]?.focus(); };\n\n const handleChange = (i: number, raw: string) => {\n const clean = raw.replace(/\\D/g, '');\n if (!clean) return;\n const arr = value.split('');\n let pos = i;\n for (const ch of clean) {\n if (pos >= length) break;\n arr[pos] = ch;\n pos++;\n }\n onChange(arr.join('').slice(0, length));\n focusBox(pos);\n };\n\n const handleKeyDown = (i: number, e: ReactKeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace') {\n e.preventDefault();\n const arr = value.split('');\n if (arr[i]) {\n arr[i] = '';\n onChange(arr.join(''));\n } else if (i > 0) {\n arr[i - 1] = '';\n onChange(arr.join(''));\n focusBox(i - 1);\n }\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n focusBox(i - 1);\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n focusBox(i + 1);\n }\n };\n\n return (\n <div className=\"au-pin\">\n {digits.map((d, i) => (\n <input\n key={i}\n ref={(el) => { refs.current[i] = el; }}\n className=\"au-pin-box\"\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n aria-label={`Digit ${i + 1}`}\n value={d}\n autoFocus={autoFocus && i === 0}\n onChange={(e) => handleChange(i, e.currentTarget.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onFocus={(e) => e.currentTarget.select()}\n />\n ))}\n </div>\n );\n}\n\nexport interface AstralSelectOption { value: string; label: string; }\n\n/** Astral select with optional search/create/clear - combobox. */\nexport function AstralSelect({ value, onChange, options, placeholder, disabled, searchable, searchPlaceholder, noResults, clearable, creatable }: {\n value: string | null;\n onChange: (value: string) => void;\n options: AstralSelectOption[];\n placeholder?: string;\n disabled?: boolean;\n searchable?: boolean;\n searchPlaceholder?: string;\n noResults?: string;\n clearable?: boolean;\n creatable?: boolean;\n}) {\n const [open, setOpen] = useState(false);\n const [q, setQ] = useState('');\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const [pos, setPos] = useState<{ left: number; top?: number; bottom?: number; width: number; maxHeight: number } | null>(null);\n\n const reposition = useCallback(() => {\n const el = triggerRef.current;\n if (!el) return;\n const r = el.getBoundingClientRect();\n const spaceBelow = window.innerHeight - r.bottom - 12;\n const spaceAbove = r.top - 12;\n const flipUp = spaceBelow < 200 && spaceAbove > spaceBelow;\n setPos({\n left: r.left,\n width: r.width,\n ...(flipUp\n ? { bottom: window.innerHeight - r.top + 5, maxHeight: Math.max(140, Math.min(300, spaceAbove)) }\n : { top: r.bottom + 5, maxHeight: Math.max(140, Math.min(300, spaceBelow)) }),\n });\n }, []);\n\n useEffect(() => {\n if (!open) return;\n reposition();\n const onScroll = () => reposition();\n const onResize = () => setOpen(false);\n const onDoc = (e: MouseEvent) => {\n if (triggerRef.current?.contains(e.target as Node)) return;\n if (menuRef.current?.contains(e.target as Node)) return;\n setOpen(false);\n };\n window.addEventListener('scroll', onScroll, true);\n window.addEventListener('resize', onResize);\n // Capture phase: AstralModal/AstralDrawer panels stopPropagation on mousedown,\n // which would otherwise block this outside-click close when the overlay lives inside one.\n document.addEventListener('mousedown', onDoc, true);\n return () => {\n window.removeEventListener('scroll', onScroll, true);\n window.removeEventListener('resize', onResize);\n document.removeEventListener('mousedown', onDoc, true);\n };\n }, [open, reposition]);\n\n const selected = options.find(o => o.value === value);\n const hasValue = value != null && value !== '';\n const display = selected ? selected.label : (value ?? '');\n const filtered = searchable && q.trim()\n ? options.filter(o => o.label.toLowerCase().includes(q.trim().toLowerCase()))\n : options;\n const showCreate = !!creatable && !!q.trim() && !options.some(o => o.label.toLowerCase() === q.trim().toLowerCase());\n\n return (\n <div className=\"au-select\">\n <button ref={triggerRef} type=\"button\" className=\"au-input au-select-trigger\" disabled={disabled} onClick={() => setOpen(o => !o)}>\n <span className={hasValue ? '' : 'ph'}>{hasValue ? display : placeholder}</span>\n {clearable && hasValue ? (\n <span className=\"au-select-caret au-select-clear\" role=\"button\" tabIndex={-1}\n onClick={(e) => { e.stopPropagation(); onChange(''); }}><IconX size={14} /></span>\n ) : (\n <IconChevronDown size={15} className=\"au-select-caret\" />\n )}\n </button>\n {open && !disabled && pos && createPortal(\n <div\n ref={menuRef}\n className=\"au-select-menu\"\n style={{ left: pos.left, top: pos.top, bottom: pos.bottom, width: pos.width, maxHeight: pos.maxHeight }}\n >\n {searchable && (\n <input\n autoFocus\n className=\"au-select-search\"\n placeholder={searchPlaceholder}\n value={q}\n onChange={(e) => setQ(e.currentTarget.value)}\n />\n )}\n {filtered.length === 0 && !showCreate && <div className=\"au-select-empty\">{noResults}</div>}\n {filtered.map(o => (\n <button\n type=\"button\"\n key={o.value}\n className={`au-select-opt${o.value === value ? ' on' : ''}`}\n onClick={() => { onChange(o.value); setOpen(false); setQ(''); }}\n >\n {o.label}\n </button>\n ))}\n {showCreate && (\n <button type=\"button\" className=\"au-select-opt au-select-create\"\n onClick={() => { onChange(q.trim()); setOpen(false); setQ(''); }}>\n + {q.trim()}\n </button>\n )}\n </div>,\n document.body,\n )}\n </div>\n );\n}\n\nexport interface AstralMenuItem { key?: string; label: ReactNode; icon?: ReactNode; onClick?: () => void; danger?: boolean; divider?: boolean; disabled?: boolean; }\n\n/** Astral action-menu dropdown - portalled like AstralSelect. */\nexport function AstralMenu({ trigger, items, align = 'end', width = 220 }: {\n trigger: ReactNode;\n items: AstralMenuItem[];\n align?: 'start' | 'end';\n width?: number;\n}) {\n const [open, setOpen] = useState(false);\n const anchorRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const [pos, setPos] = useState<{ left: number; top?: number; bottom?: number; minWidth: number; maxHeight: number } | null>(null);\n\n const reposition = useCallback(() => {\n const el = anchorRef.current;\n if (!el) return;\n const r = el.getBoundingClientRect();\n const spaceBelow = window.innerHeight - r.bottom - 12;\n const spaceAbove = r.top - 12;\n const flipUp = spaceBelow < 220 && spaceAbove > spaceBelow;\n const left = align === 'end' ? Math.max(8, Math.min(r.right - width, window.innerWidth - width - 8)) : Math.min(r.left, window.innerWidth - width - 8);\n setPos({\n left,\n minWidth: width,\n ...(flipUp\n ? { bottom: window.innerHeight - r.top + 5, maxHeight: Math.max(160, Math.min(380, spaceAbove)) }\n : { top: r.bottom + 5, maxHeight: Math.max(160, Math.min(380, spaceBelow)) }),\n });\n }, [align, width]);\n\n useEffect(() => {\n if (!open) return;\n reposition();\n const onScroll = () => reposition();\n const onResize = () => setOpen(false);\n const onDoc = (e: MouseEvent) => {\n if (anchorRef.current?.contains(e.target as Node)) return;\n if (menuRef.current?.contains(e.target as Node)) return;\n setOpen(false);\n };\n window.addEventListener('scroll', onScroll, true);\n window.addEventListener('resize', onResize);\n // Capture phase: AstralModal/AstralDrawer panels stopPropagation on mousedown,\n // which would otherwise block this outside-click close when the overlay lives inside one.\n document.addEventListener('mousedown', onDoc, true);\n return () => {\n window.removeEventListener('scroll', onScroll, true);\n window.removeEventListener('resize', onResize);\n document.removeEventListener('mousedown', onDoc, true);\n };\n }, [open, reposition]);\n\n return (\n <>\n <div className=\"au-menu-anchor\" ref={anchorRef} onClick={() => setOpen(o => !o)}>\n {trigger}\n </div>\n {open && pos && createPortal(\n <div ref={menuRef} className=\"au-menu\" style={{ left: pos.left, top: pos.top, bottom: pos.bottom, minWidth: pos.minWidth, maxHeight: pos.maxHeight }}>\n {items.map((it, i) => it.divider\n ? <div key={it.key ?? `d${i}`} className=\"au-menu-divider\" />\n : (\n <button type=\"button\" key={it.key ?? i} className={`au-menu-item${it.danger ? ' danger' : ''}`} disabled={it.disabled}\n onClick={() => { setOpen(false); it.onClick?.(); }}>\n {it.icon && <span className=\"au-menu-ic\">{it.icon}</span>}\n <span className=\"au-menu-label\">{it.label}</span>\n </button>\n ))}\n </div>,\n document.body,\n )}\n </>\n );\n}\n","import { useSyncExternalStore } from 'react';\nimport type { ReactNode, CSSProperties } from 'react';\nimport { createPortal } from 'react-dom';\nimport { IconX, IconCheck, IconAlertTriangle, IconInfoCircle, IconExclamationCircle } from '@tabler/icons-react';\n\n/* AstralUI toast system. The `notifications` object (show/update/hide/clean, returns\n an id) is a small imperative store; <AstralToaster/> renders the live toasts and is\n mounted once at the app root. Theme-aware via the --astral-* tokens. */\n\nexport interface ToastOptions {\n id?: string;\n title?: ReactNode;\n message?: ReactNode;\n color?: string;\n icon?: ReactNode;\n loading?: boolean;\n autoClose?: number | false;\n withCloseButton?: boolean;\n onClose?: () => void;\n /** accepted for API compatibility; the toaster uses one global position */\n position?: string;\n /** tolerate any other notification prop a call site may pass (radius, withBorder, style, ...) */\n [key: string]: unknown;\n}\n\ninterface Toast extends ToastOptions { id: string; }\n\nlet toasts: Toast[] = [];\nconst listeners = new Set<() => void>();\nconst timers = new Map<string, ReturnType<typeof setTimeout>>();\nlet counter = 0;\n\nconst emit = () => listeners.forEach(l => l());\n\nfunction clearTimer(id: string) {\n const x = timers.get(id);\n if (x) { clearTimeout(x); timers.delete(id); }\n}\n\nfunction scheduleAutoClose(t: Toast) {\n clearTimer(t.id);\n if (t.autoClose === false || t.loading) return; // loading toasts stay until updated\n const ms = typeof t.autoClose === 'number' ? t.autoClose : 4000;\n timers.set(t.id, setTimeout(() => hide(t.id), ms));\n}\n\nfunction show(opts: ToastOptions): string {\n const id = opts.id ?? `toast-${++counter}`;\n const existing = toasts.find(t => t.id === id);\n const toast: Toast = { withCloseButton: true, ...existing, ...opts, id };\n toasts = existing ? toasts.map(t => (t.id === id ? toast : t)) : [...toasts, toast];\n emit();\n scheduleAutoClose(toast);\n return id;\n}\n\nfunction update(opts: ToastOptions): string {\n if (!opts.id) return show(opts);\n const existing = toasts.find(t => t.id === opts.id);\n if (!existing) return show(opts);\n const toast: Toast = { ...existing, ...opts, id: opts.id };\n toasts = toasts.map(t => (t.id === opts.id ? toast : t));\n emit();\n scheduleAutoClose(toast);\n return opts.id;\n}\n\nfunction hide(id: string) {\n const t = toasts.find(x => x.id === id);\n clearTimer(id);\n toasts = toasts.filter(x => x.id !== id);\n emit();\n t?.onClose?.();\n}\n\nfunction clean() {\n toasts.forEach(t => clearTimer(t.id));\n toasts = [];\n emit();\n}\n\nexport const notifications = { show, update, hide, clean };\n\n/* ── Rendering ── */\n\nconst subscribe = (cb: () => void) => { listeners.add(cb); return () => { listeners.delete(cb); }; };\nconst getSnapshot = () => toasts;\n\nconst DEFAULT_ICON: Record<string, ReactNode> = {\n green: <IconCheck size={16} />,\n teal: <IconCheck size={16} />,\n red: <IconExclamationCircle size={16} />,\n orange: <IconAlertTriangle size={16} />,\n yellow: <IconAlertTriangle size={16} />,\n};\n\nfunction Spinner() {\n return <span className=\"au-toast-spin\" />;\n}\n\nfunction ToastCard({ t }: { t: Toast }) {\n const accent = t.color ? `var(--astral-color-${t.color}-6)` : 'var(--astral-color-default-border)';\n const lead = t.loading\n ? <Spinner />\n : t.icon\n ? t.icon\n : (t.color && DEFAULT_ICON[t.color]) || <IconInfoCircle size={16} />;\n return (\n <div className=\"au-toast\" style={{ ['--au-toast-accent' as string]: accent } as CSSProperties} role=\"status\">\n <span className=\"au-toast-lead\">{lead}</span>\n <div className=\"au-toast-body\">\n {t.title && <div className=\"au-toast-title\">{t.title}</div>}\n {t.message != null && <div className=\"au-toast-msg\">{t.message}</div>}\n </div>\n {t.withCloseButton !== false && (\n <button type=\"button\" className=\"au-toast-x\" onClick={() => hide(t.id)} aria-label=\"Close\"><IconX size={14} /></button>\n )}\n </div>\n );\n}\n\nexport function AstralToaster() {\n const items = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n if (typeof document === 'undefined') return null;\n return createPortal(\n <div className=\"au-toast-host\" role=\"region\" aria-live=\"polite\" aria-label=\"Notifications\">\n {items.map(t => <ToastCard key={t.id} t={t} />)}\n </div>,\n document.body,\n );\n}\n","import { useState, useEffect } from 'react';\nimport type { CSSProperties } from 'react';\n\n/* Native <input type=\"date\" | \"datetime-local\"> that mirrors exactly what the user\n types and only commits a parsed Date upward once the string is a COMPLETE, plausible\n value. A fully-controlled date input that round-trips every keystroke through\n `new Date(y, m-1, d)` hits JS's 0-99 -> 1900s year remap mid-typing (so \"2\" -> 1902),\n and the reformatted value fights the user's typing into a re-render storm that freezes\n the page. Keeping the string local and gating the commit avoids that entirely.\n `color-scheme` is left to inherit so the native calendar glyph follows the app theme. */\n\nconst pad2 = (n: number) => String(n).padStart(2, '0');\nconst pad4 = (n: number) => String(n).padStart(4, '0');\n\n/** Date -> \"YYYY-MM-DD\" (local) */\nexport function dateToInputStr(d: Date | null): string {\n if (!d || isNaN(d.getTime())) return '';\n return `${pad4(d.getFullYear())}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`;\n}\n\n/** Date -> \"YYYY-MM-DDTHH:mm\" (local) */\nexport function dateTimeToInputStr(d: Date | null): string {\n if (!d || isNaN(d.getTime())) return '';\n return `${dateToInputStr(d)}T${pad2(d.getHours())}:${pad2(d.getMinutes())}`;\n}\n\ninterface Props {\n type?: 'date' | 'datetime-local';\n value: Date | null;\n onChange: (d: Date | null) => void;\n min?: Date;\n max?: Date;\n className?: string;\n style?: CSSProperties;\n disabled?: boolean;\n 'aria-label'?: string;\n}\n\nexport default function DateInput({ type = 'date', value, onChange, min, max, className, style, disabled, 'aria-label': ariaLabel }: Props) {\n const isTime = type === 'datetime-local';\n const fmt = isTime ? dateTimeToInputStr : dateToInputStr;\n const [s, setS] = useState(() => fmt(value));\n // Re-sync from the parent (preset buttons, programmatic clears) without fighting typing.\n const t = value?.getTime();\n useEffect(() => { setS(fmt(value)); }, [t]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handle = (str: string) => {\n setS(str);\n if (str === '') { onChange(null); return; }\n const m = (isTime ? /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})$/ : /^(\\d{4})-(\\d{2})-(\\d{2})$/).exec(str);\n if (!m) return; // incomplete - hold locally, don't commit\n const y = Number(m[1]);\n if (y < 1970 || y > 2100) return; // implausible (mid-typed) year - wait for a full one\n const d = isTime\n ? new Date(y, Number(m[2]) - 1, Number(m[3]), Number(m[4]), Number(m[5]))\n : new Date(y, Number(m[2]) - 1, Number(m[3]));\n if (isNaN(d.getTime())) return;\n onChange(d);\n };\n\n return (\n <input\n type={type}\n className={className}\n style={style}\n disabled={disabled}\n aria-label={ariaLabel}\n value={s}\n min={min ? fmt(min) : undefined}\n max={max ? fmt(max) : undefined}\n onChange={e => handle(e.currentTarget.value)}\n />\n );\n}\n","import type { CSSProperties } from 'react';\n\n/* Minimal theme-aware spinner. Styled by the .au-spinner class (in tokens.css);\n size via the `size` prop (px). */\nexport function Spinner({ size = 24, className, style }: { size?: number; className?: string; style?: CSSProperties }) {\n return (\n <span\n className={className ? `au-spinner ${className}` : 'au-spinner'}\n style={{ width: size, height: size, ...style }}\n role=\"status\"\n aria-label=\"Loading\"\n />\n );\n}\n","import type { ReactNode, CSSProperties } from 'react';\n\ninterface BackgroundProps {\n /** Content rendered above the backdrop (it becomes the positioning context). */\n children?: ReactNode;\n className?: string;\n style?: CSSProperties;\n /** Pin to the viewport (position:fixed, inset:0) instead of filling the parent. */\n fixed?: boolean;\n}\n\nfunction cls(base: string, extra?: string) {\n return extra ? `${base} ${extra}` : base;\n}\n\n/** Animated cosmic backdrop with a twinkling starfield. Great for auth screens,\n * heroes, or splash pages. Wrap your content as children. */\nexport function SpaceBackground({ children, className, style, fixed }: BackgroundProps) {\n const s: CSSProperties = fixed ? { position: 'fixed', inset: 0, ...style } : style ?? {};\n return (\n <div className={cls('astral-space-bg', className)} style={s}>\n <div className=\"astral-stars\" aria-hidden=\"true\" />\n {children}\n </div>\n );\n}\n\n/** Subtle technical grid backdrop with a brand-tinted radial glow, faded toward\n * the edges with a radial mask. */\nexport function GridBackground({ children, className, style, fixed }: BackgroundProps) {\n const s: CSSProperties = fixed ? { position: 'fixed', inset: 0, ...style } : style ?? {};\n return (\n <div className={cls('astral-grid-bg', className)} style={s}>\n {children}\n </div>\n );\n}\n","import { useState } from 'react';\n\n/* Lightweight, dependency-free charts (pure SVG + CSS). Each is fully prop-driven\n and theme-aware. Colors accept a hex, a CSS var()/rgb(), or an AstralUI palette\n token like \"violet.6\" (mapped to var(--astral-color-violet-6)). */\n\n/** \"violet.6\" -> var(--astral-color-violet-6); hex / var() / rgb() pass through. */\nexport function chartColor(c: string): string {\n if (c.startsWith('var(') || c.startsWith('#') || c.startsWith('rgb') || c.startsWith('hsl')) return c;\n return `var(--astral-color-${c.replace('.', '-')})`;\n}\n\n/** Tiny inline SVG sparkline for KPI cards. */\nexport function Sparkline({ points, color }: { points: number[]; color: string }) {\n if (!points || points.length < 2 || points.every(p => p === 0)) return null;\n const w = 100, h = 28;\n const max = Math.max(...points), min = Math.min(...points);\n const range = max - min || 1;\n const step = w / (points.length - 1);\n const d = points\n .map((p, i) => `${i === 0 ? 'M' : 'L'}${(i * step).toFixed(1)},${(h - ((p - min) / range) * h).toFixed(1)}`)\n .join(' ');\n return (\n <svg className=\"au-spark\" viewBox={`0 0 ${w} ${h}`} preserveAspectRatio=\"none\" aria-hidden>\n <path d={d} fill=\"none\" stroke={chartColor(color)} strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\n/** Period-over-period delta badge; renders nothing when there's no comparison. */\nexport function Delta({ current, previous }: { current: number; previous: number | null | undefined }) {\n if (previous == null || previous === 0) return null;\n const pct = Math.round(((current - previous) / previous) * 100);\n if (pct === 0) return null;\n const up = pct > 0;\n return <span className={`au-delta ${up ? 'up' : 'down'}`}>{up ? '▲' : '▼'} {Math.abs(pct)}%</span>;\n}\n\nexport interface DonutDatum { name: string; value: number; color: string; }\n\n/** Interactive donut with a linked side-legend (ring slice <-> legend row hover). */\nexport function Donut({ data, centerValue, centerLabel }: {\n data: DonutDatum[];\n centerValue: string;\n centerLabel: string;\n}) {\n const [hovered, setHovered] = useState<number | null>(null);\n const total = data.reduce((s, d) => s + d.value, 0) || 1;\n const c = 75, r = 58, sw = 18, circ = 2 * Math.PI * r;\n let offset = 0;\n return (\n <div className=\"au-donut\">\n <div className=\"au-donut-ring\">\n <svg width={150} height={150} viewBox=\"0 0 150 150\">\n <circle cx={c} cy={c} r={r} fill=\"none\" stroke=\"var(--au-surface-2)\" strokeWidth={sw} />\n {data.map((d, i) => {\n const dash = (d.value / total) * circ;\n const el = (\n <circle\n key={i}\n cx={c} cy={c} r={r} fill=\"none\"\n stroke={chartColor(d.color)}\n strokeWidth={hovered === i ? sw + 4 : sw}\n strokeDasharray={`${dash} ${circ - dash}`}\n strokeDashoffset={-offset}\n transform={`rotate(-90 ${c} ${c})`}\n style={{\n opacity: hovered == null || hovered === i ? 1 : 0.28,\n transition: 'opacity .15s, stroke-width .15s',\n cursor: 'pointer',\n }}\n onMouseEnter={() => setHovered(i)}\n onMouseLeave={() => setHovered(null)}\n />\n );\n offset += dash;\n return el;\n })}\n </svg>\n <div className=\"au-donut-ctr\"><b>{centerValue}</b><span>{centerLabel}</span></div>\n </div>\n <div className=\"au-donut-legend\">\n {data.map((d, i) => (\n <div\n key={i}\n className={`au-dl ${hovered === i ? 'on' : hovered != null ? 'off' : ''}`}\n onMouseEnter={() => setHovered(i)}\n onMouseLeave={() => setHovered(null)}\n >\n <span className=\"dot\" style={{ background: chartColor(d.color) }} />\n <b>{d.value.toLocaleString()}</b>\n <span className=\"dll\">{d.name}</span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nexport interface FunnelDatum { stage: string; value: number; color: string; }\n\n/** Horizontal funnel/pipeline bars; hovering a bar highlights it and dims the rest. */\nexport function FunnelBars({ data }: { data: FunnelDatum[] }) {\n const [hov, setHov] = useState<number | null>(null);\n const max = Math.max(...data.map(d => d.value), 1);\n return (\n <div className=\"au-funnel\">\n {data.map((d, i) => (\n <div\n key={d.stage}\n className={`au-fbar ${hov === i ? 'on' : hov != null ? 'off' : ''}`}\n onMouseEnter={() => setHov(i)}\n onMouseLeave={() => setHov(null)}\n >\n <span className=\"au-fbar-label\">{d.stage}</span>\n <div className=\"au-fbar-track\">\n <div className=\"au-fbar-fill\" style={{ width: `${(d.value / max) * 100}%`, background: chartColor(d.color) }} />\n </div>\n <span className=\"au-fbar-val\">{d.value.toLocaleString()}</span>\n </div>\n ))}\n </div>\n );\n}\n\nexport interface StackedRow { label: string; values: number[]; }\nexport interface StackedSeries { label: string; color: string; }\n\n/** Stacked horizontal bars with linked hover: hover a legend series OR a segment\n * to highlight it across every row (others dim). Values are always shown. */\nexport function StackedBars({ rows, series }: { rows: StackedRow[]; series: StackedSeries[] }) {\n const [hovSeries, setHovSeries] = useState<number | null>(null);\n const [hovSeg, setHovSeg] = useState<{ row: number; s: number } | null>(null);\n const max = Math.max(...rows.map(r => r.values.reduce((a, b) => a + b, 0)), 1);\n const anyHover = hovSeries != null || hovSeg != null;\n const active = (row: number, s: number) =>\n hovSeries != null ? s === hovSeries\n : hovSeg != null ? hovSeg.row === row && hovSeg.s === s\n : true;\n return (\n <div className=\"au-usage\">\n <div className=\"au-usage-legend\">\n {series.map((s, si) => (\n <div\n key={si}\n className={`au-ulg ${hovSeries === si ? 'on' : hovSeries != null ? 'off' : ''}`}\n onMouseEnter={() => setHovSeries(si)}\n onMouseLeave={() => setHovSeries(null)}\n >\n <span className=\"dot\" style={{ background: chartColor(s.color) }} />{s.label}\n </div>\n ))}\n </div>\n <div className=\"au-usage-rows\">\n {rows.map((r, i) => (\n <div key={i} className={`au-urow ${hovSeg?.row === i ? 'on' : ''}`}>\n <span className=\"au-urow-label\" title={r.label}>{r.label}</span>\n <div className=\"au-utrack\">\n {r.values.map((v, si) => (\n <div\n key={si}\n className=\"au-useg\"\n onMouseEnter={() => setHovSeg({ row: i, s: si })}\n onMouseLeave={() => setHovSeg(null)}\n style={{\n width: `${(v / max) * 100}%`,\n background: chartColor(series[si].color),\n opacity: anyHover && !active(i, si) ? 0.2 : 1,\n filter: anyHover && active(i, si) ? 'brightness(1.2)' : undefined,\n }}\n />\n ))}\n </div>\n <span className=\"au-unums\">\n {r.values.map((v, si) => (\n <b\n key={si}\n style={{\n color: chartColor(series[si].color),\n opacity: anyHover && !active(i, si) ? 0.28 : 1,\n textShadow: anyHover && active(i, si) ? `0 0 10px ${chartColor(series[si].color)}` : undefined,\n }}\n >{v.toLocaleString()}</b>\n ))}\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import type { ReactNode, CSSProperties } from 'react';\n\n/* Auth surface scaffolding for sign-in / sign-up / verify / onboarding screens.\n Compose <AuthShell> (full-screen backdrop + centering) with <AuthCard> and the\n au-auth-* classes (fields, notices, stepper, buttons) documented in the CSS. */\n\ninterface AuthShellProps {\n children: ReactNode;\n /** 'space' = cosmic starfield (default), 'wash' = brand radial + faint grid. */\n backdrop?: 'space' | 'wash';\n /** top-left slot (e.g. a back button) */\n topLeft?: ReactNode;\n /** top-right slot (e.g. a language switcher) */\n topRight?: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function AuthShell({ children, backdrop = 'space', topLeft, topRight, className, style }: AuthShellProps) {\n const cls = `au-auth${backdrop === 'space' ? ' astral-space-bg' : ''}${className ? ' ' + className : ''}`;\n return (\n <div className={cls} style={style}>\n {backdrop === 'space'\n ? <div className=\"astral-stars\" aria-hidden=\"true\" />\n : <div className=\"au-auth-bg\" aria-hidden=\"true\" />}\n {topLeft}\n {topRight ? <div className=\"au-auth-lang\">{topRight}</div> : null}\n {children}\n </div>\n );\n}\n\ninterface AuthCardProps {\n children: ReactNode;\n /** rendered in the branded banner strip at the top of the card (e.g. a logo) */\n banner?: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function AuthCard({ children, banner, className, style }: AuthCardProps) {\n return (\n <div className={`au-auth-card${className ? ' ' + className : ''}`} style={style}>\n {banner ? <div className=\"au-auth-banner\">{banner}</div> : null}\n {children}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { AstralModal } from './overlay';\n\n/* A confirmation / alert dialog built on AstralModal. Use for destructive or\n important actions (\"Delete campaign?\"). Set `danger` for a red confirm button. */\n\nexport interface ConfirmModalProps {\n opened: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title: ReactNode;\n message?: ReactNode;\n confirmLabel?: string;\n cancelLabel?: string;\n /** red confirm button for destructive actions */\n danger?: boolean;\n /** show a spinner and disable the buttons while an async action runs */\n loading?: boolean;\n width?: number;\n /** extra content rendered above the actions (e.g. a checkbox) */\n children?: ReactNode;\n}\n\nexport function ConfirmModal({\n opened, onClose, onConfirm, title, message,\n confirmLabel = 'Confirm', cancelLabel = 'Cancel',\n danger, loading, width = 420, children,\n}: ConfirmModalProps) {\n return (\n <AstralModal opened={opened} onClose={onClose} title={title} width={width}>\n <div className=\"clay-form\">\n {message != null && (\n <div style={{ fontSize: 13, lineHeight: 1.55, color: 'var(--au-dim)' }}>{message}</div>\n )}\n {children}\n <div className=\"clay-actions\">\n <button type=\"button\" className=\"au-btn\" onClick={onClose} disabled={loading}>{cancelLabel}</button>\n <button\n type=\"button\"\n className={`au-btn ${danger ? 'solidred' : 'primary'}`}\n onClick={onConfirm}\n disabled={loading}\n >\n {loading ? <span className=\"au-spinner\" style={{ width: 14, height: 14 }} /> : null}\n {confirmLabel}\n </button>\n </div>\n </div>\n </AstralModal>\n );\n}\n","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\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={{ '--au-sb': c } 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"]}
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 } from 'react';\nimport { createPortal } from 'react-dom';\nimport { IconX, IconChevronDown } from '@tabler/icons-react';\n\nfunction useDismiss(opened: boolean, onClose: () => void) {\n useEffect(() => {\n if (!opened) return;\n const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose(); };\n document.addEventListener('keydown', onKey);\n const prev = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return () => { document.removeEventListener('keydown', onKey); document.body.style.overflow = prev; };\n }, [opened, onClose]);\n}\n\ninterface ShellProps {\n opened: boolean;\n onClose: () => void;\n title: ReactNode;\n brand?: string;\n width?: number;\n /** Override the overlay z-index (default 300). Use to stack over flow-editor modals. */\n zIndex?: number;\n children: ReactNode;\n}\n\n/** Centered Astral modal (portal + overlay + escape + click-outside). */\nexport function AstralModal({ opened, onClose, title, brand, width = 460, zIndex, children }: ShellProps) {\n useDismiss(opened, onClose);\n if (!opened) return null;\n const style = { maxWidth: width, ...(brand ? { '--au-ic': brand } : {}) } as CSSProperties;\n return createPortal(\n <div className=\"au-modal-overlay\" onMouseDown={onClose} style={zIndex != null ? { zIndex } : undefined}>\n <div className=\"au-modal-panel\" style={style} onMouseDown={(e) => e.stopPropagation()}>\n <div className=\"au-modal-head\">\n <span className=\"au-modal-title\">{title}</span>\n <button type=\"button\" className=\"au-modal-x\" onClick={onClose} aria-label=\"Close\"><IconX /></button>\n </div>\n <div className=\"au-modal-body\">{children}</div>\n </div>\n </div>,\n document.body,\n );\n}\n\n/** Right-side Astral drawer. */\nexport function AstralDrawer({ opened, onClose, title, brand, width = 440, zIndex, children }: ShellProps) {\n useDismiss(opened, onClose);\n if (!opened) return null;\n const style = { width, ...(brand ? { '--au-ic': brand } : {}) } as CSSProperties;\n return createPortal(\n <div className=\"au-drawer-overlay\" onMouseDown={onClose} style={zIndex != null ? { zIndex } : undefined}>\n <div className=\"au-drawer-panel\" style={style} onMouseDown={(e) => e.stopPropagation()}>\n <div className=\"au-drawer-head\">\n <span className=\"au-drawer-title\">{title}</span>\n <button type=\"button\" className=\"au-modal-x\" onClick={onClose} aria-label=\"Close\"><IconX /></button>\n </div>\n <div className=\"au-drawer-body\">{children}</div>\n </div>\n </div>,\n document.body,\n );\n}\n\n/** Astral 6-box code input, with auto-advance, backspace, paste and arrows. */\nexport function AstralPinInput({ length = 6, value, onChange, autoFocus }: {\n length?: number;\n value: string;\n onChange: (value: string) => void;\n autoFocus?: boolean;\n}) {\n const refs = useRef<Array<HTMLInputElement | null>>([]);\n const digits = Array.from({ length }, (_, i) => value[i] ?? '');\n\n const focusBox = (i: number) => { refs.current[Math.max(0, Math.min(length - 1, i))]?.focus(); };\n\n const handleChange = (i: number, raw: string) => {\n const clean = raw.replace(/\\D/g, '');\n if (!clean) return;\n const arr = value.split('');\n let pos = i;\n for (const ch of clean) {\n if (pos >= length) break;\n arr[pos] = ch;\n pos++;\n }\n onChange(arr.join('').slice(0, length));\n focusBox(pos);\n };\n\n const handleKeyDown = (i: number, e: ReactKeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Backspace') {\n e.preventDefault();\n const arr = value.split('');\n if (arr[i]) {\n arr[i] = '';\n onChange(arr.join(''));\n } else if (i > 0) {\n arr[i - 1] = '';\n onChange(arr.join(''));\n focusBox(i - 1);\n }\n } else if (e.key === 'ArrowLeft') {\n e.preventDefault();\n focusBox(i - 1);\n } else if (e.key === 'ArrowRight') {\n e.preventDefault();\n focusBox(i + 1);\n }\n };\n\n return (\n <div className=\"au-pin\">\n {digits.map((d, i) => (\n <input\n key={i}\n ref={(el) => { refs.current[i] = el; }}\n className=\"au-pin-box\"\n inputMode=\"numeric\"\n autoComplete=\"one-time-code\"\n aria-label={`Digit ${i + 1}`}\n value={d}\n autoFocus={autoFocus && i === 0}\n onChange={(e) => handleChange(i, e.currentTarget.value)}\n onKeyDown={(e) => handleKeyDown(i, e)}\n onFocus={(e) => e.currentTarget.select()}\n />\n ))}\n </div>\n );\n}\n\nexport interface AstralSelectOption { value: string; label: string; }\n\n/** Astral select with optional search/create/clear - combobox. */\nexport function AstralSelect({ value, onChange, options, placeholder, disabled, searchable, searchPlaceholder, noResults, clearable, creatable }: {\n value: string | null;\n onChange: (value: string) => void;\n options: AstralSelectOption[];\n placeholder?: string;\n disabled?: boolean;\n searchable?: boolean;\n searchPlaceholder?: string;\n noResults?: string;\n clearable?: boolean;\n creatable?: boolean;\n}) {\n const [open, setOpen] = useState(false);\n const [q, setQ] = useState('');\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const [pos, setPos] = useState<{ left: number; top?: number; bottom?: number; width: number; maxHeight: number } | null>(null);\n\n const reposition = useCallback(() => {\n const el = triggerRef.current;\n if (!el) return;\n const r = el.getBoundingClientRect();\n const spaceBelow = window.innerHeight - r.bottom - 12;\n const spaceAbove = r.top - 12;\n const flipUp = spaceBelow < 200 && spaceAbove > spaceBelow;\n setPos({\n left: r.left,\n width: r.width,\n ...(flipUp\n ? { bottom: window.innerHeight - r.top + 5, maxHeight: Math.max(140, Math.min(300, spaceAbove)) }\n : { top: r.bottom + 5, maxHeight: Math.max(140, Math.min(300, spaceBelow)) }),\n });\n }, []);\n\n useEffect(() => {\n if (!open) return;\n reposition();\n const onScroll = () => reposition();\n const onResize = () => setOpen(false);\n const onDoc = (e: MouseEvent) => {\n if (triggerRef.current?.contains(e.target as Node)) return;\n if (menuRef.current?.contains(e.target as Node)) return;\n setOpen(false);\n };\n window.addEventListener('scroll', onScroll, true);\n window.addEventListener('resize', onResize);\n // Capture phase: AstralModal/AstralDrawer panels stopPropagation on mousedown,\n // which would otherwise block this outside-click close when the overlay lives inside one.\n document.addEventListener('mousedown', onDoc, true);\n return () => {\n window.removeEventListener('scroll', onScroll, true);\n window.removeEventListener('resize', onResize);\n document.removeEventListener('mousedown', onDoc, true);\n };\n }, [open, reposition]);\n\n const selected = options.find(o => o.value === value);\n const hasValue = value != null && value !== '';\n const display = selected ? selected.label : (value ?? '');\n const filtered = searchable && q.trim()\n ? options.filter(o => o.label.toLowerCase().includes(q.trim().toLowerCase()))\n : options;\n const showCreate = !!creatable && !!q.trim() && !options.some(o => o.label.toLowerCase() === q.trim().toLowerCase());\n\n return (\n <div className=\"au-select\">\n <button ref={triggerRef} type=\"button\" className=\"au-input au-select-trigger\" disabled={disabled} onClick={() => setOpen(o => !o)}>\n <span className={hasValue ? '' : 'ph'}>{hasValue ? display : placeholder}</span>\n {clearable && hasValue ? (\n <span className=\"au-select-caret au-select-clear\" role=\"button\" tabIndex={-1}\n onClick={(e) => { e.stopPropagation(); onChange(''); }}><IconX size={14} /></span>\n ) : (\n <IconChevronDown size={15} className=\"au-select-caret\" />\n )}\n </button>\n {open && !disabled && pos && createPortal(\n <div\n ref={menuRef}\n className=\"au-select-menu\"\n style={{ left: pos.left, top: pos.top, bottom: pos.bottom, width: pos.width, maxHeight: pos.maxHeight }}\n >\n {searchable && (\n <input\n autoFocus\n className=\"au-select-search\"\n placeholder={searchPlaceholder}\n value={q}\n onChange={(e) => setQ(e.currentTarget.value)}\n />\n )}\n {filtered.length === 0 && !showCreate && <div className=\"au-select-empty\">{noResults}</div>}\n {filtered.map(o => (\n <button\n type=\"button\"\n key={o.value}\n className={`au-select-opt${o.value === value ? ' on' : ''}`}\n onClick={() => { onChange(o.value); setOpen(false); setQ(''); }}\n >\n {o.label}\n </button>\n ))}\n {showCreate && (\n <button type=\"button\" className=\"au-select-opt au-select-create\"\n onClick={() => { onChange(q.trim()); setOpen(false); setQ(''); }}>\n + {q.trim()}\n </button>\n )}\n </div>,\n document.body,\n )}\n </div>\n );\n}\n\nexport interface AstralMenuItem { key?: string; label: ReactNode; icon?: ReactNode; onClick?: () => void; danger?: boolean; divider?: boolean; disabled?: boolean; }\n\n/** Astral action-menu dropdown - portalled like AstralSelect. */\nexport function AstralMenu({ trigger, items, align = 'end', width = 220 }: {\n trigger: ReactNode;\n items: AstralMenuItem[];\n align?: 'start' | 'end';\n width?: number;\n}) {\n const [open, setOpen] = useState(false);\n const anchorRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const [pos, setPos] = useState<{ left: number; top?: number; bottom?: number; minWidth: number; maxHeight: number } | null>(null);\n\n const reposition = useCallback(() => {\n const el = anchorRef.current;\n if (!el) return;\n const r = el.getBoundingClientRect();\n const spaceBelow = window.innerHeight - r.bottom - 12;\n const spaceAbove = r.top - 12;\n const flipUp = spaceBelow < 220 && spaceAbove > spaceBelow;\n const left = align === 'end' ? Math.max(8, Math.min(r.right - width, window.innerWidth - width - 8)) : Math.min(r.left, window.innerWidth - width - 8);\n setPos({\n left,\n minWidth: width,\n ...(flipUp\n ? { bottom: window.innerHeight - r.top + 5, maxHeight: Math.max(160, Math.min(380, spaceAbove)) }\n : { top: r.bottom + 5, maxHeight: Math.max(160, Math.min(380, spaceBelow)) }),\n });\n }, [align, width]);\n\n useEffect(() => {\n if (!open) return;\n reposition();\n const onScroll = () => reposition();\n const onResize = () => setOpen(false);\n const onDoc = (e: MouseEvent) => {\n if (anchorRef.current?.contains(e.target as Node)) return;\n if (menuRef.current?.contains(e.target as Node)) return;\n setOpen(false);\n };\n window.addEventListener('scroll', onScroll, true);\n window.addEventListener('resize', onResize);\n // Capture phase: AstralModal/AstralDrawer panels stopPropagation on mousedown,\n // which would otherwise block this outside-click close when the overlay lives inside one.\n document.addEventListener('mousedown', onDoc, true);\n return () => {\n window.removeEventListener('scroll', onScroll, true);\n window.removeEventListener('resize', onResize);\n document.removeEventListener('mousedown', onDoc, true);\n };\n }, [open, reposition]);\n\n return (\n <>\n <div className=\"au-menu-anchor\" ref={anchorRef} onClick={() => setOpen(o => !o)}>\n {trigger}\n </div>\n {open && pos && createPortal(\n <div ref={menuRef} className=\"au-menu\" style={{ left: pos.left, top: pos.top, bottom: pos.bottom, minWidth: pos.minWidth, maxHeight: pos.maxHeight }}>\n {items.map((it, i) => it.divider\n ? <div key={it.key ?? `d${i}`} className=\"au-menu-divider\" />\n : (\n <button type=\"button\" key={it.key ?? i} className={`au-menu-item${it.danger ? ' danger' : ''}`} disabled={it.disabled}\n onClick={() => { setOpen(false); it.onClick?.(); }}>\n {it.icon && <span className=\"au-menu-ic\">{it.icon}</span>}\n <span className=\"au-menu-label\">{it.label}</span>\n </button>\n ))}\n </div>,\n document.body,\n )}\n </>\n );\n}\n","import { useSyncExternalStore } from 'react';\nimport type { ReactNode, CSSProperties } from 'react';\nimport { createPortal } from 'react-dom';\nimport { IconX, IconCheck, IconAlertTriangle, IconInfoCircle, IconExclamationCircle } from '@tabler/icons-react';\n\n/* AstralUI toast system. The `notifications` object (show/update/hide/clean, returns\n an id) is a small imperative store; <AstralToaster/> renders the live toasts and is\n mounted once at the app root. Theme-aware via the --astral-* tokens. */\n\nexport interface ToastOptions {\n id?: string;\n title?: ReactNode;\n message?: ReactNode;\n color?: string;\n icon?: ReactNode;\n loading?: boolean;\n autoClose?: number | false;\n withCloseButton?: boolean;\n onClose?: () => void;\n /** accepted for API compatibility; the toaster uses one global position */\n position?: string;\n /** tolerate any other notification prop a call site may pass (radius, withBorder, style, ...) */\n [key: string]: unknown;\n}\n\ninterface Toast extends ToastOptions { id: string; }\n\nlet toasts: Toast[] = [];\nconst listeners = new Set<() => void>();\nconst timers = new Map<string, ReturnType<typeof setTimeout>>();\nlet counter = 0;\n\nconst emit = () => listeners.forEach(l => l());\n\nfunction clearTimer(id: string) {\n const x = timers.get(id);\n if (x) { clearTimeout(x); timers.delete(id); }\n}\n\nfunction scheduleAutoClose(t: Toast) {\n clearTimer(t.id);\n if (t.autoClose === false || t.loading) return; // loading toasts stay until updated\n const ms = typeof t.autoClose === 'number' ? t.autoClose : 4000;\n timers.set(t.id, setTimeout(() => hide(t.id), ms));\n}\n\nfunction show(opts: ToastOptions): string {\n const id = opts.id ?? `toast-${++counter}`;\n const existing = toasts.find(t => t.id === id);\n const toast: Toast = { withCloseButton: true, ...existing, ...opts, id };\n toasts = existing ? toasts.map(t => (t.id === id ? toast : t)) : [...toasts, toast];\n emit();\n scheduleAutoClose(toast);\n return id;\n}\n\nfunction update(opts: ToastOptions): string {\n if (!opts.id) return show(opts);\n const existing = toasts.find(t => t.id === opts.id);\n if (!existing) return show(opts);\n const toast: Toast = { ...existing, ...opts, id: opts.id };\n toasts = toasts.map(t => (t.id === opts.id ? toast : t));\n emit();\n scheduleAutoClose(toast);\n return opts.id;\n}\n\nfunction hide(id: string) {\n const t = toasts.find(x => x.id === id);\n clearTimer(id);\n toasts = toasts.filter(x => x.id !== id);\n emit();\n t?.onClose?.();\n}\n\nfunction clean() {\n toasts.forEach(t => clearTimer(t.id));\n toasts = [];\n emit();\n}\n\nexport const notifications = { show, update, hide, clean };\n\n/* ── Rendering ── */\n\nconst subscribe = (cb: () => void) => { listeners.add(cb); return () => { listeners.delete(cb); }; };\nconst getSnapshot = () => toasts;\n\nconst DEFAULT_ICON: Record<string, ReactNode> = {\n green: <IconCheck size={16} />,\n teal: <IconCheck size={16} />,\n red: <IconExclamationCircle size={16} />,\n orange: <IconAlertTriangle size={16} />,\n yellow: <IconAlertTriangle size={16} />,\n};\n\nfunction Spinner() {\n return <span className=\"au-toast-spin\" />;\n}\n\nfunction ToastCard({ t }: { t: Toast }) {\n const accent = t.color ? `var(--astral-color-${t.color}-6)` : 'var(--astral-color-default-border)';\n const lead = t.loading\n ? <Spinner />\n : t.icon\n ? t.icon\n : (t.color && DEFAULT_ICON[t.color]) || <IconInfoCircle size={16} />;\n return (\n <div className=\"au-toast\" style={{ ['--au-toast-accent' as string]: accent } as CSSProperties} role=\"status\">\n <span className=\"au-toast-lead\">{lead}</span>\n <div className=\"au-toast-body\">\n {t.title && <div className=\"au-toast-title\">{t.title}</div>}\n {t.message != null && <div className=\"au-toast-msg\">{t.message}</div>}\n </div>\n {t.withCloseButton !== false && (\n <button type=\"button\" className=\"au-toast-x\" onClick={() => hide(t.id)} aria-label=\"Close\"><IconX size={14} /></button>\n )}\n </div>\n );\n}\n\nexport function AstralToaster() {\n const items = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n if (typeof document === 'undefined') return null;\n return createPortal(\n <div className=\"au-toast-host\" role=\"region\" aria-live=\"polite\" aria-label=\"Notifications\">\n {items.map(t => <ToastCard key={t.id} t={t} />)}\n </div>,\n document.body,\n );\n}\n","import { useState, useEffect } from 'react';\nimport type { CSSProperties } from 'react';\n\n/* Native <input type=\"date\" | \"datetime-local\"> that mirrors exactly what the user\n types and only commits a parsed Date upward once the string is a COMPLETE, plausible\n value. A fully-controlled date input that round-trips every keystroke through\n `new Date(y, m-1, d)` hits JS's 0-99 -> 1900s year remap mid-typing (so \"2\" -> 1902),\n and the reformatted value fights the user's typing into a re-render storm that freezes\n the page. Keeping the string local and gating the commit avoids that entirely.\n `color-scheme` is left to inherit so the native calendar glyph follows the app theme. */\n\nconst pad2 = (n: number) => String(n).padStart(2, '0');\nconst pad4 = (n: number) => String(n).padStart(4, '0');\n\n/** Date -> \"YYYY-MM-DD\" (local) */\nexport function dateToInputStr(d: Date | null): string {\n if (!d || isNaN(d.getTime())) return '';\n return `${pad4(d.getFullYear())}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`;\n}\n\n/** Date -> \"YYYY-MM-DDTHH:mm\" (local) */\nexport function dateTimeToInputStr(d: Date | null): string {\n if (!d || isNaN(d.getTime())) return '';\n return `${dateToInputStr(d)}T${pad2(d.getHours())}:${pad2(d.getMinutes())}`;\n}\n\ninterface Props {\n type?: 'date' | 'datetime-local';\n value: Date | null;\n onChange: (d: Date | null) => void;\n min?: Date;\n max?: Date;\n className?: string;\n style?: CSSProperties;\n disabled?: boolean;\n 'aria-label'?: string;\n}\n\nexport default function DateInput({ type = 'date', value, onChange, min, max, className, style, disabled, 'aria-label': ariaLabel }: Props) {\n const isTime = type === 'datetime-local';\n const fmt = isTime ? dateTimeToInputStr : dateToInputStr;\n const [s, setS] = useState(() => fmt(value));\n // Re-sync from the parent (preset buttons, programmatic clears) without fighting typing.\n const t = value?.getTime();\n useEffect(() => { setS(fmt(value)); }, [t]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handle = (str: string) => {\n setS(str);\n if (str === '') { onChange(null); return; }\n const m = (isTime ? /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2})$/ : /^(\\d{4})-(\\d{2})-(\\d{2})$/).exec(str);\n if (!m) return; // incomplete - hold locally, don't commit\n const y = Number(m[1]);\n if (y < 1970 || y > 2100) return; // implausible (mid-typed) year - wait for a full one\n const d = isTime\n ? new Date(y, Number(m[2]) - 1, Number(m[3]), Number(m[4]), Number(m[5]))\n : new Date(y, Number(m[2]) - 1, Number(m[3]));\n if (isNaN(d.getTime())) return;\n onChange(d);\n };\n\n return (\n <input\n type={type}\n className={className}\n style={style}\n disabled={disabled}\n aria-label={ariaLabel}\n value={s}\n min={min ? fmt(min) : undefined}\n max={max ? fmt(max) : undefined}\n onChange={e => handle(e.currentTarget.value)}\n />\n );\n}\n","import type { CSSProperties } from 'react';\n\n/* Minimal theme-aware spinner. Styled by the .au-spinner class (in tokens.css);\n size via the `size` prop (px). */\nexport function Spinner({ size = 24, className, style }: { size?: number; className?: string; style?: CSSProperties }) {\n return (\n <span\n className={className ? `au-spinner ${className}` : 'au-spinner'}\n style={{ width: size, height: size, ...style }}\n role=\"status\"\n aria-label=\"Loading\"\n />\n );\n}\n","import type { ReactNode, CSSProperties } from 'react';\n\ninterface BackgroundProps {\n /** Content rendered above the backdrop (it becomes the positioning context). */\n children?: ReactNode;\n className?: string;\n style?: CSSProperties;\n /** Pin to the viewport (position:fixed, inset:0) instead of filling the parent. */\n fixed?: boolean;\n}\n\nfunction cls(base: string, extra?: string) {\n return extra ? `${base} ${extra}` : base;\n}\n\n/** Animated cosmic backdrop with a twinkling starfield. Great for auth screens,\n * heroes, or splash pages. Wrap your content as children. */\nexport function SpaceBackground({ children, className, style, fixed }: BackgroundProps) {\n const s: CSSProperties = fixed ? { position: 'fixed', inset: 0, ...style } : style ?? {};\n return (\n <div className={cls('astral-space-bg', className)} style={s}>\n <div className=\"astral-stars\" aria-hidden=\"true\" />\n {children}\n </div>\n );\n}\n\n/** Subtle technical grid backdrop with a brand-tinted radial glow, faded toward\n * the edges with a radial mask. */\nexport function GridBackground({ children, className, style, fixed }: BackgroundProps) {\n const s: CSSProperties = fixed ? { position: 'fixed', inset: 0, ...style } : style ?? {};\n return (\n <div className={cls('astral-grid-bg', className)} style={s}>\n {children}\n </div>\n );\n}\n","import { useState } from 'react';\n\n/* Lightweight, dependency-free charts (pure SVG + CSS). Each is fully prop-driven\n and theme-aware. Colors accept a hex, a CSS var()/rgb(), or an AstralUI palette\n token like \"violet.6\" (mapped to var(--astral-color-violet-6)). */\n\n/** \"violet.6\" -> var(--astral-color-violet-6); hex / var() / rgb() pass through. */\nexport function chartColor(c: string): string {\n if (c.startsWith('var(') || c.startsWith('#') || c.startsWith('rgb') || c.startsWith('hsl')) return c;\n return `var(--astral-color-${c.replace('.', '-')})`;\n}\n\n/** Tiny inline SVG sparkline for KPI cards. */\nexport function Sparkline({ points, color }: { points: number[]; color: string }) {\n if (!points || points.length < 2 || points.every(p => p === 0)) return null;\n const w = 100, h = 28;\n const max = Math.max(...points), min = Math.min(...points);\n const range = max - min || 1;\n const step = w / (points.length - 1);\n const d = points\n .map((p, i) => `${i === 0 ? 'M' : 'L'}${(i * step).toFixed(1)},${(h - ((p - min) / range) * h).toFixed(1)}`)\n .join(' ');\n return (\n <svg className=\"au-spark\" viewBox={`0 0 ${w} ${h}`} preserveAspectRatio=\"none\" aria-hidden>\n <path d={d} fill=\"none\" stroke={chartColor(color)} strokeWidth={2} strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\n/** Period-over-period delta badge; renders nothing when there's no comparison. */\nexport function Delta({ current, previous }: { current: number; previous: number | null | undefined }) {\n if (previous == null || previous === 0) return null;\n const pct = Math.round(((current - previous) / previous) * 100);\n if (pct === 0) return null;\n const up = pct > 0;\n return <span className={`au-delta ${up ? 'up' : 'down'}`}>{up ? '▲' : '▼'} {Math.abs(pct)}%</span>;\n}\n\nexport interface DonutDatum { name: string; value: number; color: string; }\n\n/** Interactive donut with a linked side-legend (ring slice <-> legend row hover). */\nexport function Donut({ data, centerValue, centerLabel }: {\n data: DonutDatum[];\n centerValue: string;\n centerLabel: string;\n}) {\n const [hovered, setHovered] = useState<number | null>(null);\n const total = data.reduce((s, d) => s + d.value, 0) || 1;\n const c = 75, r = 58, sw = 18, circ = 2 * Math.PI * r;\n let offset = 0;\n return (\n <div className=\"au-donut\">\n <div className=\"au-donut-ring\">\n <svg width={150} height={150} viewBox=\"0 0 150 150\">\n <circle cx={c} cy={c} r={r} fill=\"none\" stroke=\"var(--au-surface-2)\" strokeWidth={sw} />\n {data.map((d, i) => {\n const dash = (d.value / total) * circ;\n const el = (\n <circle\n key={i}\n cx={c} cy={c} r={r} fill=\"none\"\n stroke={chartColor(d.color)}\n strokeWidth={hovered === i ? sw + 4 : sw}\n strokeDasharray={`${dash} ${circ - dash}`}\n strokeDashoffset={-offset}\n transform={`rotate(-90 ${c} ${c})`}\n style={{\n opacity: hovered == null || hovered === i ? 1 : 0.28,\n transition: 'opacity .15s, stroke-width .15s',\n cursor: 'pointer',\n }}\n onMouseEnter={() => setHovered(i)}\n onMouseLeave={() => setHovered(null)}\n />\n );\n offset += dash;\n return el;\n })}\n </svg>\n <div className=\"au-donut-ctr\"><b>{centerValue}</b><span>{centerLabel}</span></div>\n </div>\n <div className=\"au-donut-legend\">\n {data.map((d, i) => (\n <div\n key={i}\n className={`au-dl ${hovered === i ? 'on' : hovered != null ? 'off' : ''}`}\n onMouseEnter={() => setHovered(i)}\n onMouseLeave={() => setHovered(null)}\n >\n <span className=\"dot\" style={{ background: chartColor(d.color) }} />\n <b>{d.value.toLocaleString()}</b>\n <span className=\"dll\">{d.name}</span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nexport interface FunnelDatum { stage: string; value: number; color: string; }\n\n/** Horizontal funnel/pipeline bars; hovering a bar highlights it and dims the rest. */\nexport function FunnelBars({ data }: { data: FunnelDatum[] }) {\n const [hov, setHov] = useState<number | null>(null);\n const max = Math.max(...data.map(d => d.value), 1);\n return (\n <div className=\"au-funnel\">\n {data.map((d, i) => (\n <div\n key={d.stage}\n className={`au-fbar ${hov === i ? 'on' : hov != null ? 'off' : ''}`}\n onMouseEnter={() => setHov(i)}\n onMouseLeave={() => setHov(null)}\n >\n <span className=\"au-fbar-label\">{d.stage}</span>\n <div className=\"au-fbar-track\">\n <div className=\"au-fbar-fill\" style={{ width: `${(d.value / max) * 100}%`, background: chartColor(d.color) }} />\n </div>\n <span className=\"au-fbar-val\">{d.value.toLocaleString()}</span>\n </div>\n ))}\n </div>\n );\n}\n\nexport interface StackedRow { label: string; values: number[]; }\nexport interface StackedSeries { label: string; color: string; }\n\n/** Stacked horizontal bars with linked hover: hover a legend series OR a segment\n * to highlight it across every row (others dim). Values are always shown. */\nexport function StackedBars({ rows, series }: { rows: StackedRow[]; series: StackedSeries[] }) {\n const [hovSeries, setHovSeries] = useState<number | null>(null);\n const [hovSeg, setHovSeg] = useState<{ row: number; s: number } | null>(null);\n const max = Math.max(...rows.map(r => r.values.reduce((a, b) => a + b, 0)), 1);\n const anyHover = hovSeries != null || hovSeg != null;\n const active = (row: number, s: number) =>\n hovSeries != null ? s === hovSeries\n : hovSeg != null ? hovSeg.row === row && hovSeg.s === s\n : true;\n return (\n <div className=\"au-usage\">\n <div className=\"au-usage-legend\">\n {series.map((s, si) => (\n <div\n key={si}\n className={`au-ulg ${hovSeries === si ? 'on' : hovSeries != null ? 'off' : ''}`}\n onMouseEnter={() => setHovSeries(si)}\n onMouseLeave={() => setHovSeries(null)}\n >\n <span className=\"dot\" style={{ background: chartColor(s.color) }} />{s.label}\n </div>\n ))}\n </div>\n <div className=\"au-usage-rows\">\n {rows.map((r, i) => (\n <div key={i} className={`au-urow ${hovSeg?.row === i ? 'on' : ''}`}>\n <span className=\"au-urow-label\" title={r.label}>{r.label}</span>\n <div className=\"au-utrack\">\n {r.values.map((v, si) => (\n <div\n key={si}\n className=\"au-useg\"\n onMouseEnter={() => setHovSeg({ row: i, s: si })}\n onMouseLeave={() => setHovSeg(null)}\n style={{\n width: `${(v / max) * 100}%`,\n background: chartColor(series[si].color),\n opacity: anyHover && !active(i, si) ? 0.2 : 1,\n filter: anyHover && active(i, si) ? 'brightness(1.2)' : undefined,\n }}\n />\n ))}\n </div>\n <span className=\"au-unums\">\n {r.values.map((v, si) => (\n <b\n key={si}\n style={{\n color: chartColor(series[si].color),\n opacity: anyHover && !active(i, si) ? 0.28 : 1,\n textShadow: anyHover && active(i, si) ? `0 0 10px ${chartColor(series[si].color)}` : undefined,\n }}\n >{v.toLocaleString()}</b>\n ))}\n </span>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import type { ReactNode, CSSProperties } from 'react';\n\n/* Auth surface scaffolding for sign-in / sign-up / verify / onboarding screens.\n Compose <AuthShell> (full-screen backdrop + centering) with <AuthCard> and the\n au-auth-* classes (fields, notices, stepper, buttons) documented in the CSS. */\n\ninterface AuthShellProps {\n children: ReactNode;\n /** 'space' = cosmic starfield (default), 'wash' = brand radial + faint grid. */\n backdrop?: 'space' | 'wash';\n /** top-left slot (e.g. a back button) */\n topLeft?: ReactNode;\n /** top-right slot (e.g. a language switcher) */\n topRight?: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function AuthShell({ children, backdrop = 'space', topLeft, topRight, className, style }: AuthShellProps) {\n const cls = `au-auth${backdrop === 'space' ? ' astral-space-bg' : ''}${className ? ' ' + className : ''}`;\n return (\n <div className={cls} style={style}>\n {backdrop === 'space'\n ? <div className=\"astral-stars\" aria-hidden=\"true\" />\n : <div className=\"au-auth-bg\" aria-hidden=\"true\" />}\n {topLeft}\n {topRight ? <div className=\"au-auth-lang\">{topRight}</div> : null}\n {children}\n </div>\n );\n}\n\ninterface AuthCardProps {\n children: ReactNode;\n /** rendered in the branded banner strip at the top of the card (e.g. a logo) */\n banner?: ReactNode;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function AuthCard({ children, banner, className, style }: AuthCardProps) {\n return (\n <div className={`au-auth-card${className ? ' ' + className : ''}`} style={style}>\n {banner ? <div className=\"au-auth-banner\">{banner}</div> : null}\n {children}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { AstralModal } from './overlay';\n\n/* A confirmation / alert dialog built on AstralModal. Use for destructive or\n important actions (\"Delete campaign?\"). Set `danger` for a red confirm button. */\n\nexport interface ConfirmModalProps {\n opened: boolean;\n onClose: () => void;\n onConfirm: () => void;\n title: ReactNode;\n message?: ReactNode;\n confirmLabel?: string;\n cancelLabel?: string;\n /** red confirm button for destructive actions */\n danger?: boolean;\n /** show a spinner and disable the buttons while an async action runs */\n loading?: boolean;\n width?: number;\n /** extra content rendered above the actions (e.g. a checkbox) */\n children?: ReactNode;\n}\n\nexport function ConfirmModal({\n opened, onClose, onConfirm, title, message,\n confirmLabel = 'Confirm', cancelLabel = 'Cancel',\n danger, loading, width = 420, children,\n}: ConfirmModalProps) {\n return (\n <AstralModal opened={opened} onClose={onClose} title={title} width={width}>\n <div className=\"clay-form\">\n {message != null && (\n <div style={{ fontSize: 13, lineHeight: 1.55, color: 'var(--au-dim)' }}>{message}</div>\n )}\n {children}\n <div className=\"clay-actions\">\n <button type=\"button\" className=\"au-btn\" onClick={onClose} disabled={loading}>{cancelLabel}</button>\n <button\n type=\"button\"\n className={`au-btn ${danger ? 'solidred' : 'primary'}`}\n onClick={onConfirm}\n disabled={loading}\n >\n {loading ? <span className=\"au-spinner\" style={{ width: 14, height: 14 }} /> : null}\n {confirmLabel}\n </button>\n </div>\n </div>\n </AstralModal>\n );\n}\n","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\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={{ '--au-sb': c } 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"]}
package/dist/styles.css CHANGED
@@ -900,3 +900,23 @@ button, input, optgroup, select, textarea { font-family: inherit; font-size: 100
900
900
  .au-search .clr { position: absolute; right: 8px; width: 20px; height: 20px; border: 0; background: none; color: var(--au-faint); cursor: pointer; border-radius: 6px; display: grid; place-items: center; }
901
901
  .au-search .clr:hover { color: var(--au-text); background: var(--au-line); }
902
902
  .au-search .clr svg { width: 13px; height: 13px; }
903
+
904
+
905
+ /* ===== src/styles/collapse.css ===== */
906
+ /* AstralUI collapsible - a folding panel that animates open AND closed via an
907
+ exact measured max-height. Render via <Collapsible title="...">...</Collapsible>. */
908
+ .au-collapse { border: 1px solid var(--au-line); border-radius: 14px; background: var(--au-panel); box-shadow: var(--au-shadow); overflow: hidden; }
909
+ .au-collapse-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%; padding: 12px 15px; font: inherit; font-size: 13px; font-weight: 700; color: var(--au-text); background: none; border: 0; text-align: left; cursor: pointer; }
910
+ .au-collapse-head:hover:not(:disabled) { background: var(--au-surface-2); }
911
+ .au-collapse-head:disabled { opacity: .6; cursor: not-allowed; }
912
+ .au-collapse-title { min-width: 0; }
913
+ .au-collapse--open .au-collapse-head { border-bottom: 1px solid var(--au-line); }
914
+ .au-collapse-chev { flex: 0 0 auto; color: var(--au-dim); transition: transform .2s ease; }
915
+ .au-collapse--open .au-collapse-chev { transform: rotate(180deg); }
916
+ /* The region animates height; the inner fades so content doesn't flash in fully formed. */
917
+ .au-collapse-region { max-height: 0; overflow: hidden; transition: max-height .3s cubic-bezier(.4, 0, .2, 1); }
918
+ .au-collapse-inner { padding: 14px; opacity: 0; transition: opacity .22s ease; }
919
+ .au-collapse--open .au-collapse-inner { opacity: 1; }
920
+ @media (prefers-reduced-motion: reduce) {
921
+ .au-collapse-region, .au-collapse-inner, .au-collapse-chev { transition: none; }
922
+ }