@astralui/core 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/dist/index.cjs +211 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +87 -1
- package/dist/index.d.ts +87 -1
- package/dist/index.js +203 -1
- package/dist/index.js.map +1 -1
- package/dist/styles.css +229 -0
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/theme/ColorSchemeProvider.tsx","../src/theme/generateColors.ts","../src/theme/AstralProvider.tsx","../src/components/overlay.tsx","../src/components/Toast.tsx","../src/components/DateInput.tsx","../src/components/Spinner.tsx","../src/components/Backgrounds.tsx"],"names":["createContext","useContext","useState","useCallback","jsx","useEffect","jsxs","clean","IconX","createPortal","Spinner"],"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"]}
|
|
1
|
+
{"version":3,"sources":["../src/theme/ColorSchemeProvider.tsx","../src/theme/generateColors.ts","../src/theme/AstralProvider.tsx","../src/components/overlay.tsx","../src/components/Toast.tsx","../src/components/DateInput.tsx","../src/components/Spinner.tsx","../src/components/Backgrounds.tsx","../src/components/Charts.tsx","../src/components/Auth.tsx","../src/components/ConfirmModal.tsx"],"names":["createContext","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"]}
|
package/dist/styles.css
CHANGED
|
@@ -647,3 +647,232 @@ button, input, optgroup, select, textarea { font-family: inherit; font-size: 100
|
|
|
647
647
|
@media (prefers-reduced-motion: reduce) {
|
|
648
648
|
.astral-space-bg::before, .astral-stars, .astral-stars::after { animation: none; }
|
|
649
649
|
}
|
|
650
|
+
|
|
651
|
+
|
|
652
|
+
/* ===== src/styles/charts.css ===== */
|
|
653
|
+
/* AstralUI charts - lightweight, dependency-free data viz (pure SVG + CSS).
|
|
654
|
+
Theme-aware via the --astral-*/--au-* tokens. Render through the React
|
|
655
|
+
components <Sparkline/>, <Delta/>, <Donut/>, <FunnelBars/>, <StackedBars/>. */
|
|
656
|
+
|
|
657
|
+
/* ---------- sparkline ---------- */
|
|
658
|
+
.au-spark { margin-top: 10px; height: 28px; width: 100%; display: block; }
|
|
659
|
+
|
|
660
|
+
/* ---------- delta badge ---------- */
|
|
661
|
+
.au-delta { font-size: 12px; font-weight: 700; display: inline-flex; align-items: center; gap: 3px; padding: 2px 7px; border-radius: 999px; white-space: nowrap; flex-shrink: 0; }
|
|
662
|
+
.au-delta.up { color: var(--au-green); background: color-mix(in srgb, var(--au-green) 14%, transparent); }
|
|
663
|
+
.au-delta.down { color: var(--au-red); background: color-mix(in srgb, var(--au-red) 14%, transparent); }
|
|
664
|
+
|
|
665
|
+
/* ---------- donut ---------- */
|
|
666
|
+
.au-donut { display: flex; align-items: center; gap: 20px; flex-wrap: wrap; }
|
|
667
|
+
.au-donut-ring { position: relative; width: 150px; height: 150px; flex: 0 0 auto; }
|
|
668
|
+
.au-donut-ctr { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; pointer-events: none; }
|
|
669
|
+
.au-donut-ctr b { font-size: 26px; font-weight: 760; letter-spacing: -.02em; color: var(--au-text); line-height: 1; }
|
|
670
|
+
.au-donut-ctr span { font-size: 11px; color: var(--au-dim); margin-top: 3px; }
|
|
671
|
+
.au-donut-legend { display: flex; flex-direction: column; gap: 7px; min-width: 170px; flex: 1; }
|
|
672
|
+
.au-dl { display: flex; align-items: center; gap: 9px; padding: 5px 8px; border-radius: 8px; cursor: default; transition: background .12s, opacity .15s; }
|
|
673
|
+
.au-dl.on { background: var(--au-surface-2); }
|
|
674
|
+
.au-dl.off { opacity: .4; }
|
|
675
|
+
.au-dl .dot { width: 9px; height: 9px; border-radius: 3px; flex: 0 0 auto; }
|
|
676
|
+
.au-dl .dll { font-size: 12.5px; color: var(--au-dim); flex: 1; min-width: 0; }
|
|
677
|
+
.au-dl.on .dll { color: var(--au-text); }
|
|
678
|
+
.au-dl b { font-size: 14px; font-weight: 730; color: var(--au-text); min-width: 30px; font-variant-numeric: tabular-nums; }
|
|
679
|
+
|
|
680
|
+
/* ---------- funnel bars ---------- */
|
|
681
|
+
.au-funnel { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; justify-content: space-around; gap: 8px; padding: 6px 0 2px; }
|
|
682
|
+
.au-fbar { display: grid; grid-template-columns: 86px 1fr 46px; align-items: center; gap: 14px; transition: opacity .15s; }
|
|
683
|
+
.au-fbar.off { opacity: .36; }
|
|
684
|
+
.au-fbar-label { font-size: 12px; color: var(--au-dim); text-align: right; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
685
|
+
.au-fbar.on .au-fbar-label { color: var(--au-text); font-weight: 600; }
|
|
686
|
+
.au-fbar-track { height: 20px; border-radius: 7px; background: var(--au-surface-2); overflow: hidden; }
|
|
687
|
+
.au-fbar-fill { height: 100%; border-radius: 7px; min-width: 3px; transition: width .45s cubic-bezier(.4,0,.2,1), filter .15s; }
|
|
688
|
+
.au-fbar.on .au-fbar-fill { filter: brightness(1.18) saturate(1.08); }
|
|
689
|
+
.au-fbar-val { font-size: 14px; font-weight: 730; color: var(--au-text); font-variant-numeric: tabular-nums; text-align: right; }
|
|
690
|
+
|
|
691
|
+
/* ---------- stacked bars ---------- */
|
|
692
|
+
.au-usage { display: flex; flex-direction: column; gap: 14px; }
|
|
693
|
+
.au-usage-legend { display: flex; gap: 16px; justify-content: flex-end; flex-wrap: wrap; }
|
|
694
|
+
.au-ulg { display: inline-flex; align-items: center; gap: 7px; font-size: 12px; color: var(--au-dim); cursor: default; transition: opacity .15s, color .15s; }
|
|
695
|
+
.au-ulg.on { color: var(--au-text); }
|
|
696
|
+
.au-ulg.off { opacity: .4; }
|
|
697
|
+
.au-ulg .dot { width: 9px; height: 9px; border-radius: 3px; flex: 0 0 auto; }
|
|
698
|
+
.au-usage-rows { display: flex; flex-direction: column; gap: 10px; }
|
|
699
|
+
.au-urow { display: grid; grid-template-columns: 104px 1fr auto; align-items: center; gap: 14px; }
|
|
700
|
+
.au-urow-label { font-size: 12px; color: var(--au-dim); text-align: right; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; transition: color .15s; }
|
|
701
|
+
.au-urow.on .au-urow-label { color: var(--au-text); font-weight: 600; }
|
|
702
|
+
.au-utrack { display: flex; align-items: stretch; height: 22px; border-radius: 7px; background: var(--au-surface-2); overflow: hidden; }
|
|
703
|
+
.au-useg { height: 100%; flex: 0 0 auto; cursor: pointer; transition: opacity .15s, filter .15s; }
|
|
704
|
+
.au-unums { display: inline-flex; gap: 12px; font-variant-numeric: tabular-nums; min-width: 64px; justify-content: flex-end; }
|
|
705
|
+
.au-unums b { font-size: 13.5px; font-weight: 740; transition: opacity .15s, text-shadow .15s; }
|
|
706
|
+
|
|
707
|
+
|
|
708
|
+
/* ===== src/styles/auth.css ===== */
|
|
709
|
+
/* AstralUI auth surface - sign-in / sign-up / verify / onboarding layouts.
|
|
710
|
+
A centered card on a branded backdrop, with stepper, fields, notices, and a
|
|
711
|
+
logo dropzone. Theme-aware via the --astral-* tokens. Pair with <AuthShell/>
|
|
712
|
+
(or the .astral-space-bg / .astral-grid-bg backgrounds). */
|
|
713
|
+
|
|
714
|
+
.au-auth {
|
|
715
|
+
--aa-panel: var(--astral-app-card, light-dark(#ffffff, #16161b));
|
|
716
|
+
--aa-surface-2: light-dark(var(--astral-color-gray-1), #1d1d24);
|
|
717
|
+
--aa-line: var(--astral-color-default-border);
|
|
718
|
+
--aa-text: var(--astral-color-text);
|
|
719
|
+
--aa-dim: light-dark(var(--astral-color-gray-7), #a6a6b3);
|
|
720
|
+
--aa-faint: light-dark(var(--astral-color-gray-6), #6f6f7d);
|
|
721
|
+
--aa-brand: var(--astral-primary-color-filled);
|
|
722
|
+
--aa-brand-text: light-dark(var(--astral-color-violet-7), var(--astral-color-violet-3));
|
|
723
|
+
--aa-brand-2: var(--astral-color-violet-5);
|
|
724
|
+
--aa-accent: #EF8E2E;
|
|
725
|
+
--aa-green: light-dark(#059669, #34d399);
|
|
726
|
+
--aa-red: light-dark(#dc2626, #f87171);
|
|
727
|
+
--aa-shadow: light-dark(0 1px 2px rgba(16,16,24,.06), 0 1px 2px rgba(0,0,0,.4)),
|
|
728
|
+
light-dark(0 8px 22px rgba(16,16,24,.06), 0 8px 24px rgba(0,0,0,.22));
|
|
729
|
+
font-family: var(--astral-font-family);
|
|
730
|
+
|
|
731
|
+
position: relative;
|
|
732
|
+
min-height: 100dvh;
|
|
733
|
+
display: grid;
|
|
734
|
+
place-items: center;
|
|
735
|
+
padding: 40px 22px;
|
|
736
|
+
overflow: hidden;
|
|
737
|
+
background: var(--astral-color-body);
|
|
738
|
+
color: var(--aa-text);
|
|
739
|
+
}
|
|
740
|
+
.au-auth .num { font-variant-numeric: tabular-nums; }
|
|
741
|
+
|
|
742
|
+
/* branded backdrop: soft radial wash + faint masked grid */
|
|
743
|
+
.au-auth-bg { position: absolute; inset: 0; pointer-events: none;
|
|
744
|
+
background:
|
|
745
|
+
radial-gradient(58% 46% at 50% -4%, color-mix(in srgb, var(--aa-brand) 16%, transparent), transparent 70%),
|
|
746
|
+
radial-gradient(40% 38% at 86% 108%, color-mix(in srgb, var(--aa-accent) 10%, transparent), transparent 72%); }
|
|
747
|
+
.au-auth-bg::after { content: ""; position: absolute; inset: 0; opacity: .5;
|
|
748
|
+
background-image: linear-gradient(var(--aa-line) 1px, transparent 1px), linear-gradient(90deg, var(--aa-line) 1px, transparent 1px);
|
|
749
|
+
background-size: 44px 44px;
|
|
750
|
+
-webkit-mask-image: radial-gradient(70% 60% at 50% 30%, #000, transparent 75%);
|
|
751
|
+
mask-image: radial-gradient(70% 60% at 50% 30%, #000, transparent 75%); }
|
|
752
|
+
|
|
753
|
+
.au-auth-lang { position: absolute; top: 16px; right: 16px; z-index: 5; }
|
|
754
|
+
.au-auth-back { position: absolute; top: 16px; left: 16px; z-index: 5; display: inline-flex; align-items: center; gap: 6px;
|
|
755
|
+
font: inherit; font-size: 12.5px; font-weight: 600; color: var(--aa-dim); background: var(--aa-panel);
|
|
756
|
+
border: 1px solid var(--aa-line); border-radius: 10px; padding: 8px 13px; cursor: pointer; transition: .15s; }
|
|
757
|
+
.au-auth-back:hover { color: var(--aa-text); border-color: color-mix(in srgb, var(--aa-brand) 45%, transparent); }
|
|
758
|
+
|
|
759
|
+
/* card */
|
|
760
|
+
.au-auth-card { position: relative; z-index: 2; width: 100%; max-width: 452px;
|
|
761
|
+
background: var(--aa-panel); border: 1px solid var(--aa-line); border-radius: 20px;
|
|
762
|
+
box-shadow: var(--aa-shadow); padding: 30px 30px 26px; overflow: hidden; }
|
|
763
|
+
|
|
764
|
+
/* brand banner header */
|
|
765
|
+
.au-auth-banner { position: relative; display: flex; align-items: center; justify-content: center;
|
|
766
|
+
padding: 19px 0 17px; margin: -30px -30px 24px; border-bottom: 1px solid var(--aa-line);
|
|
767
|
+
background: linear-gradient(180deg, #f5f3fc, #ece8f8); }
|
|
768
|
+
.au-auth-banner::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 4px;
|
|
769
|
+
background: linear-gradient(90deg, var(--aa-accent), var(--aa-brand) 55%, var(--aa-brand-2)); }
|
|
770
|
+
.au-auth-banner img { height: 25px; width: auto; display: block; }
|
|
771
|
+
|
|
772
|
+
.au-auth-title { margin: 0; font-size: 23px; font-weight: 700; letter-spacing: -.02em; color: var(--aa-text); }
|
|
773
|
+
.au-auth-sub { margin-top: 6px; font-size: 12.8px; color: var(--aa-dim); line-height: 1.5; }
|
|
774
|
+
|
|
775
|
+
/* error */
|
|
776
|
+
.au-auth-err { display: flex; align-items: flex-start; gap: 9px; margin: 16px 0 0; padding: 10px 13px; border-radius: 11px; font-size: 12.5px; line-height: 1.45;
|
|
777
|
+
color: var(--aa-red); background: color-mix(in srgb, var(--aa-red) 12%, transparent); border: 1px solid color-mix(in srgb, var(--aa-red) 30%, transparent); }
|
|
778
|
+
.au-auth-err svg { flex: 0 0 auto; margin-top: 1px; }
|
|
779
|
+
|
|
780
|
+
/* stepper */
|
|
781
|
+
.au-auth-steps { display: flex; align-items: center; margin: 24px 0 22px; }
|
|
782
|
+
.au-auth-step { display: flex; align-items: center; gap: 8px; }
|
|
783
|
+
.au-auth-step-dot { width: 26px; height: 26px; border-radius: 50%; display: grid; place-items: center; font-size: 12px; font-weight: 700; flex: 0 0 auto;
|
|
784
|
+
background: var(--aa-surface-2); border: 1px solid var(--aa-line); color: var(--aa-faint); transition: .15s; }
|
|
785
|
+
.au-auth-step-dot svg { width: 13px; height: 13px; }
|
|
786
|
+
.au-auth-step-l { font-size: 12px; font-weight: 600; color: var(--aa-faint); white-space: nowrap; }
|
|
787
|
+
.au-auth-step.on .au-auth-step-dot { background: var(--aa-brand); border-color: var(--aa-brand); color: #fff; box-shadow: 0 0 0 4px color-mix(in srgb, var(--aa-brand) 22%, transparent); }
|
|
788
|
+
.au-auth-step.on .au-auth-step-l { color: var(--aa-text); }
|
|
789
|
+
.au-auth-step.done .au-auth-step-dot { background: color-mix(in srgb, var(--aa-brand) 18%, transparent); border-color: color-mix(in srgb, var(--aa-brand) 45%, transparent); color: var(--aa-brand-text); }
|
|
790
|
+
.au-auth-step.done .au-auth-step-l { color: var(--aa-dim); }
|
|
791
|
+
.au-auth-step-line { flex: 1; height: 2px; margin: 0 10px; border-radius: 2px; background: var(--aa-line); }
|
|
792
|
+
.au-auth-step-line.fill { background: color-mix(in srgb, var(--aa-brand) 50%, transparent); }
|
|
793
|
+
|
|
794
|
+
/* field */
|
|
795
|
+
.au-auth-field { margin-bottom: 18px; }
|
|
796
|
+
.au-auth-field label { display: block; font-size: 12px; font-weight: 600; color: var(--aa-dim); margin-bottom: 7px; }
|
|
797
|
+
.au-auth-input { display: flex; align-items: center; gap: 9px; background: var(--aa-surface-2); border: 1px solid var(--aa-line); border-radius: 11px; padding: 11px 13px; transition: .15s; }
|
|
798
|
+
.au-auth-input:focus-within { border-color: var(--aa-brand); box-shadow: 0 0 0 3px color-mix(in srgb, var(--aa-brand) 18%, transparent); }
|
|
799
|
+
.au-auth-input input { flex: 1; border: 0; background: transparent; color: var(--aa-text); font: inherit; font-size: 13.5px; outline: none; }
|
|
800
|
+
.au-auth-input input::placeholder { color: var(--aa-faint); }
|
|
801
|
+
.au-auth-hint { margin-top: 7px; font-size: 11.5px; color: var(--aa-faint); }
|
|
802
|
+
|
|
803
|
+
/* logo dropzone */
|
|
804
|
+
.au-auth-drop { display: flex; flex-direction: column; align-items: center; gap: 10px; text-align: center; border: 1.5px dashed var(--aa-line); border-radius: 14px; padding: 24px 18px; background: var(--aa-surface-2); transition: .15s; cursor: pointer; }
|
|
805
|
+
.au-auth-drop:hover { border-color: color-mix(in srgb, var(--aa-brand) 55%, transparent); background: color-mix(in srgb, var(--aa-brand) 6%, var(--aa-surface-2)); }
|
|
806
|
+
.au-auth-drop .ph { width: 54px; height: 54px; border-radius: 14px; display: grid; place-items: center; background: color-mix(in srgb, var(--aa-brand) 14%, transparent); color: var(--aa-brand-text); overflow: hidden; }
|
|
807
|
+
.au-auth-drop .ph svg { width: 24px; height: 24px; }
|
|
808
|
+
.au-auth-drop .ph img { width: 100%; height: 100%; object-fit: cover; }
|
|
809
|
+
.au-auth-drop .t { font-size: 13px; font-weight: 600; color: var(--aa-text); }
|
|
810
|
+
.au-auth-drop .t b { color: var(--aa-brand-text); font-weight: 700; }
|
|
811
|
+
.au-auth-drop .h { font-size: 11.5px; color: var(--aa-faint); }
|
|
812
|
+
.au-auth-drop-clear { margin-top: 9px; font-size: 12px; font-weight: 600; color: var(--aa-faint); background: transparent; border: 0; cursor: pointer; }
|
|
813
|
+
.au-auth-drop-clear:hover { color: var(--aa-red); }
|
|
814
|
+
|
|
815
|
+
/* success */
|
|
816
|
+
.au-auth-ok { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 6px 0 2px; }
|
|
817
|
+
.au-auth-okring { width: 66px; height: 66px; border-radius: 50%; display: grid; place-items: center; margin-bottom: 16px; color: var(--aa-green);
|
|
818
|
+
background: color-mix(in srgb, var(--aa-green) 15%, transparent); box-shadow: 0 0 0 6px color-mix(in srgb, var(--aa-green) 8%, transparent); }
|
|
819
|
+
.au-auth-okring svg { width: 30px; height: 30px; }
|
|
820
|
+
|
|
821
|
+
/* join icon */
|
|
822
|
+
.au-auth-jicon { width: 46px; height: 46px; border-radius: 13px; display: grid; place-items: center; margin-bottom: 16px; color: var(--aa-brand-text); background: color-mix(in srgb, var(--aa-brand) 14%, transparent); }
|
|
823
|
+
.au-auth-jicon svg { width: 22px; height: 22px; }
|
|
824
|
+
|
|
825
|
+
/* actions */
|
|
826
|
+
.au-auth-actions { display: flex; align-items: center; gap: 10px; margin-top: 24px; }
|
|
827
|
+
.au-auth-actions.center { justify-content: center; }
|
|
828
|
+
.au-auth-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; font: inherit; font-size: 13px; font-weight: 650; border-radius: 11px; padding: 11px 18px; cursor: pointer; transition: .15s; border: 1px solid var(--aa-line); background: transparent; color: var(--aa-text); }
|
|
829
|
+
.au-auth-btn.ghost { color: var(--aa-dim); }
|
|
830
|
+
.au-auth-btn.ghost:hover { color: var(--aa-text); border-color: color-mix(in srgb, var(--aa-brand) 45%, transparent); }
|
|
831
|
+
.au-auth-btn.primary { background: var(--aa-brand); border-color: var(--aa-brand); color: #fff; box-shadow: 0 6px 16px color-mix(in srgb, var(--aa-brand) 32%, transparent); }
|
|
832
|
+
.au-auth-btn.primary:hover { filter: brightness(1.08); }
|
|
833
|
+
.au-auth-btn.primary:active { transform: translateY(1px); }
|
|
834
|
+
.au-auth-btn:disabled { opacity: .5; cursor: not-allowed; }
|
|
835
|
+
.au-auth-btn.full, .au-auth-btn.block { flex: 1; width: 100%; }
|
|
836
|
+
.au-auth-btn svg { width: 15px; height: 15px; }
|
|
837
|
+
|
|
838
|
+
.au-auth-alt { margin-top: 16px; text-align: center; font-size: 12px; color: var(--aa-faint); }
|
|
839
|
+
.au-auth-alt button, .au-auth-alt a { color: var(--aa-brand-text); font: inherit; font-weight: 600; background: transparent; border: 0; cursor: pointer; padding: 0; text-decoration: none; }
|
|
840
|
+
.au-auth-alt button:hover, .au-auth-alt a:hover { text-decoration: underline; }
|
|
841
|
+
|
|
842
|
+
/* stacked form */
|
|
843
|
+
.au-auth-form { display: flex; flex-direction: column; gap: 16px; margin-top: 20px; }
|
|
844
|
+
.au-auth-form .au-auth-field { margin-bottom: 0; }
|
|
845
|
+
|
|
846
|
+
/* notices (info / warn / ok / err) */
|
|
847
|
+
.au-auth-note { display: flex; align-items: flex-start; gap: 9px; margin-top: 16px; padding: 10px 13px; border-radius: 11px; font-size: 12.5px; line-height: 1.45; }
|
|
848
|
+
.au-auth-note svg { flex: 0 0 auto; margin-top: 1px; }
|
|
849
|
+
.au-auth-note.info { color: var(--aa-brand-text); background: color-mix(in srgb, var(--aa-brand) 12%, transparent); border: 1px solid color-mix(in srgb, var(--aa-brand) 28%, transparent); }
|
|
850
|
+
.au-auth-note.warn { color: var(--aa-accent); background: color-mix(in srgb, var(--aa-accent) 14%, transparent); border: 1px solid color-mix(in srgb, var(--aa-accent) 32%, transparent); }
|
|
851
|
+
.au-auth-note.ok { color: var(--aa-green); background: color-mix(in srgb, var(--aa-green) 13%, transparent); border: 1px solid color-mix(in srgb, var(--aa-green) 30%, transparent); }
|
|
852
|
+
.au-auth-note.err { color: var(--aa-red); background: color-mix(in srgb, var(--aa-red) 12%, transparent); border: 1px solid color-mix(in srgb, var(--aa-red) 30%, transparent); }
|
|
853
|
+
|
|
854
|
+
/* password reveal toggle */
|
|
855
|
+
.au-auth-eye { display: grid; place-items: center; padding: 0; background: none; border: 0; color: var(--aa-faint); cursor: pointer; transition: .15s; }
|
|
856
|
+
.au-auth-eye:hover { color: var(--aa-dim); }
|
|
857
|
+
.au-auth-eye svg { width: 17px; height: 17px; }
|
|
858
|
+
|
|
859
|
+
/* right-aligned inline link (forgot password) */
|
|
860
|
+
.au-auth-flink { display: block; width: fit-content; margin: 8px 0 0 auto; font: inherit; font-size: 11.5px; font-weight: 600; color: var(--aa-brand-text); background: none; border: 0; cursor: pointer; }
|
|
861
|
+
.au-auth-flink:hover { text-decoration: underline; }
|
|
862
|
+
|
|
863
|
+
/* inline field error */
|
|
864
|
+
.au-auth-ferr { margin-top: 6px; font-size: 11.5px; color: var(--aa-red); }
|
|
865
|
+
|
|
866
|
+
/* checkbox row */
|
|
867
|
+
.au-auth-check { display: flex; align-items: center; gap: 9px; cursor: pointer; font-size: 12.5px; color: var(--aa-dim); }
|
|
868
|
+
.au-auth-check input { width: 16px; height: 16px; accent-color: var(--aa-brand); cursor: pointer; flex: 0 0 auto; }
|
|
869
|
+
|
|
870
|
+
/* spinner */
|
|
871
|
+
.au-auth-spin { width: 15px; height: 15px; border-radius: 50%; border: 2px solid rgba(255,255,255,.45); border-top-color: #fff; animation: au-auth-spin .6s linear infinite; flex: 0 0 auto; }
|
|
872
|
+
@keyframes au-auth-spin { to { transform: rotate(360deg); } }
|
|
873
|
+
|
|
874
|
+
/* helper line, centered */
|
|
875
|
+
.au-auth-help { margin-top: 14px; text-align: center; font-size: 11.5px; color: var(--aa-faint); }
|
|
876
|
+
|
|
877
|
+
/* when used with the cosmic backdrop, hide the default grid wash */
|
|
878
|
+
.au-auth.astral-space-bg .au-auth-bg { display: none; }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@astralui/core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "AstralUI - a self-contained, dependency-free React design system: theme engine (light/dark + per-brand theming), design tokens, and components (Modal, Drawer, Select, Menu, Toast, DateInput, PinInput, Spinner).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Unbounded Technologies",
|