veilkit 0.0.0-stage → 0.1.0

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.
Files changed (64) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/LICENSE +21 -0
  3. package/README.md +245 -2
  4. package/dist/angular/index.cjs +394 -0
  5. package/dist/angular/index.cjs.map +1 -0
  6. package/dist/angular/index.d.cts +78 -0
  7. package/dist/angular/index.d.ts +78 -0
  8. package/dist/angular/index.js +394 -0
  9. package/dist/angular/index.js.map +1 -0
  10. package/dist/cli/index.cjs +25 -0
  11. package/dist/cli/index.cjs.map +1 -0
  12. package/dist/cli/index.d.cts +1 -0
  13. package/dist/cli/index.d.ts +1 -0
  14. package/dist/cli/index.js +25 -0
  15. package/dist/cli/index.js.map +1 -0
  16. package/dist/controller-5OzP0U8X.d.cts +193 -0
  17. package/dist/controller-Co5bvnaB.d.ts +193 -0
  18. package/dist/element/index.cjs +395 -0
  19. package/dist/element/index.cjs.map +1 -0
  20. package/dist/element/index.d.cts +42 -0
  21. package/dist/element/index.d.ts +42 -0
  22. package/dist/element/index.js +395 -0
  23. package/dist/element/index.js.map +1 -0
  24. package/dist/index.cjs +394 -0
  25. package/dist/index.cjs.map +1 -0
  26. package/dist/index.d.cts +209 -0
  27. package/dist/index.d.ts +209 -0
  28. package/dist/index.js +394 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/native/index.cjs +2 -0
  31. package/dist/native/index.cjs.map +1 -0
  32. package/dist/native/index.d.cts +48 -0
  33. package/dist/native/index.d.ts +48 -0
  34. package/dist/native/index.js +2 -0
  35. package/dist/native/index.js.map +1 -0
  36. package/dist/react/index.cjs +394 -0
  37. package/dist/react/index.cjs.map +1 -0
  38. package/dist/react/index.d.cts +99 -0
  39. package/dist/react/index.d.ts +99 -0
  40. package/dist/react/index.js +394 -0
  41. package/dist/react/index.js.map +1 -0
  42. package/dist/styles.css +377 -0
  43. package/dist/svelte/index.cjs +394 -0
  44. package/dist/svelte/index.cjs.map +1 -0
  45. package/dist/svelte/index.d.cts +41 -0
  46. package/dist/svelte/index.d.ts +41 -0
  47. package/dist/svelte/index.js +394 -0
  48. package/dist/svelte/index.js.map +1 -0
  49. package/dist/themes/index.cjs +2 -0
  50. package/dist/themes/index.cjs.map +1 -0
  51. package/dist/themes/index.d.cts +18 -0
  52. package/dist/themes/index.d.ts +18 -0
  53. package/dist/themes/index.js +2 -0
  54. package/dist/themes/index.js.map +1 -0
  55. package/dist/types-Ciu5e5xt.d.cts +159 -0
  56. package/dist/types-Ciu5e5xt.d.ts +159 -0
  57. package/dist/veilkit.min.js +393 -0
  58. package/dist/vue/index.cjs +394 -0
  59. package/dist/vue/index.cjs.map +1 -0
  60. package/dist/vue/index.d.cts +366 -0
  61. package/dist/vue/index.d.ts +366 -0
  62. package/dist/vue/index.js +394 -0
  63. package/dist/vue/index.js.map +1 -0
  64. package/package.json +238 -4
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/angular/service.ts","../../src/core/manager.ts","../../src/core/themes.ts","../../src/core/animations.ts","../../src/core/css.ts","../../src/core/progress.ts","../../src/core/spinners.ts","../../src/core/a11y.ts","../../src/core/overlay.ts","../../src/core/sync.ts","../../src/core/observer.ts","../../src/core/primitives.ts","../../src/core/presets.ts","../../src/core/reveal.ts","../../src/core/measure.ts","../../src/core/antiflicker.ts","../../src/core/track.ts","../../src/core/controller.ts","../../src/angular/directive.ts","../../src/angular/components.ts","../../src/angular/router.ts","../../src/angular/interceptor.ts"],"names":["LoadingManager","id","key","first","listener","loading","loadingManager","BUILTIN_THEMES","customThemesRegistry","createTheme","themeInput","parentTheme","resolvedTheme","getThemeTokens","theme","custom","getAnimationKeyframesCSS","styleInjected","cspNonce","setNonce","nonce","getStylesCSS","light","dark","name","t","injectStyles","css","effectiveNonce","sheet","styleEl","RouteProgressController","n","percent","amount","progressController","createProgressElement","props","isCircular","color","trackColor","size","strokeWidth","container","svg","track","meter","circumference","val","offset","text","height","bar","createSpinner","type","secondaryColor","ring","i","dot","pulseCircle","nucleus","orbitRing","satellite","line","ball","spoke","orb","shape","bgCircle","meterCircle","injectSpinnerKeyframes","spinnerKeyframesInjected","style","DEFAULT_LABELS","currentLocale","customLabels","setLocale","locale","setLabels","labels","getLabel","applyA11yLoading","label","srNode","removeA11yLoading","activeOverlays","scrollLockOriginalOverflow","OverlayController","target","isFullscreen","overlay","blurVal","spinnerType","spinnerEl","msg","overlayController","globalStartTime","getTimelineOrigin","getSyncDelay","durationMs","elapsed","parseDurationMs","duration","trimmed","intersectionObserver","observedElements","visibilityInitialized","handleIntersection","entries","entry","el","setupVisibilityObserver","observeOffscreen","element","createSkeletonElement","durMs","createSkeletonParagraph","lines","gap","defaultWidths","lastWidth","width","lineEl","createPrimitive","row","cols","cell","createPreset","baseProps","img","title","btn","badge","price","itemsCount","item","avatar","content","subtitle","action","count","headerRow","c","th","rows","r","td","bio","cover","userRow","meta","handle","header","av","body","media","actions","hero","byline","p1","p2","reply","messages","bubble","statsRow","statCard","chartRow","chart1","chart2","group","thumb","metaRow","details","logo","navLinks","right","top","navItem","footer","section","textGroup","control","applyReveal","options","transition","children","child","idx","totalDuration","className","handleEnd","memoryLayoutCache","getCachedLayout","cacheKey","stored","parsed","setCachedLayout","layout","persist","measureContainer","ignoreSelector","containerRect","boxes","isLeafOrTarget","tag","walk","node","rect","radius","customShape","createAutoMeasureOverlay","skeletonProps","computed","renderLayout","box","update","cached","ro","mo","AntiFlickerController","callback","remaining","task","reqId","antiFlicker","error","wrapFetch","fetchFn","input","init","VeilkitController","config","measureInstance","isShowing","show","hide","destroy","spinner","veil","controller_default","VeilService","signal","_","__decorateClass","Injectable","VeilDirective","changes","nativeEl","Input","Directive","VeilSkeletonComponent","_changes","native","Component","VeilSpinnerComponent","VeilProgressBarComponent","prog","VeilRouterProgressService","router","event","NavigationStart","NavigationEnd","NavigationCancel","NavigationError","veilHttpInterceptor","req","next","veilService","inject","finalize"],"mappings":"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","file":"index.js","sourcesContent":["import { Injectable, signal, computed } from '@angular/core';\nimport { loadingManager } from '../core/manager';\nimport { progressController } from '../core/progress';\nimport { overlayController } from '../core/overlay';\nimport veil from '../core/controller';\nimport { VeilGlobalConfig } from '../core/types';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class VeilService {\n private _loadingCount = signal(0);\n\n public readonly isLoading = computed(() => this._loadingCount() > 0);\n public readonly activeCount = computed(() => this._loadingCount());\n\n constructor() {\n loadingManager.subscribe((_, count) => {\n this._loadingCount.set(count);\n });\n }\n\n public configure(config: VeilGlobalConfig): void {\n veil.configure(config);\n }\n\n public start(id?: string): string {\n return loadingManager.start(id);\n }\n\n public stop(id?: string): void {\n loadingManager.stop(id);\n }\n\n public progress = progressController;\n public overlay = overlayController;\n public core = veil;\n}\n","/**\n * Veilkit - Global Loading Manager\n * Manages concurrent requests using request IDs and counter.\n * Ensures loader remains active until all pending operations finish.\n */\n\ntype Listener = (isLoading: boolean, count: number) => void;\n\nexport class LoadingManager {\n private activeIds = new Set<string>();\n private counter: number = 0;\n private listeners = new Set<Listener>();\n\n /**\n * Start a loading operation. Optionally associate with a unique ID.\n */\n public start(id?: string): string {\n const key = id || `req_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`;\n if (!this.activeIds.has(key)) {\n this.activeIds.add(key);\n this.counter++;\n this.notify();\n }\n return key;\n }\n\n /**\n * Complete a loading operation by ID or decrement counter.\n */\n public stop(id?: string): void {\n if (id) {\n if (this.activeIds.has(id)) {\n this.activeIds.delete(id);\n this.counter = Math.max(0, this.counter - 1);\n this.notify();\n }\n } else {\n if (this.counter > 0) {\n this.counter--;\n // Remove an arbitrary id if any\n const first = this.activeIds.values().next().value;\n if (first) this.activeIds.delete(first);\n this.notify();\n }\n }\n }\n\n /**\n * True if there is at least one active operation\n */\n public isLoading(): boolean {\n return this.counter > 0;\n }\n\n /**\n * Current number of concurrent operations\n */\n public getCount(): number {\n return this.counter;\n }\n\n /**\n * Subscribe to state changes\n */\n public subscribe(listener: Listener): () => void {\n this.listeners.add(listener);\n // Initial emission\n listener(this.isLoading(), this.counter);\n\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n /**\n * Reset all active requests\n */\n public reset(): void {\n this.activeIds.clear();\n this.counter = 0;\n this.notify();\n }\n\n private notify(): void {\n const loading = this.isLoading();\n for (const listener of this.listeners) {\n listener(loading, this.counter);\n }\n }\n}\n\nexport const loadingManager = new LoadingManager();\n","/**\n * Veilkit - Themes & Token Definitions\n * 11 Built-in Themes + `createTheme()`\n */\n\nimport { VeilThemeName, VeilThemeTokens, CustomThemeInput } from './types';\n\nexport const BUILTIN_THEMES: Record<VeilThemeName, VeilThemeTokens> = {\n light: {\n base: '#e5e7eb',\n highlight: 'rgba(255, 255, 255, 0.7)',\n radius: '6px',\n duration: '1.5s',\n easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n border: 'none',\n contrast: '#374151',\n },\n dark: {\n base: '#1f2937',\n highlight: 'rgba(255, 255, 255, 0.12)',\n radius: '6px',\n duration: '1.5s',\n easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n border: 'none',\n contrast: '#f3f4f6',\n },\n auto: {\n // Dynamic CSS variables will resolve light/dark via prefers-color-scheme\n base: 'var(--veil-auto-base, #e5e7eb)',\n highlight: 'var(--veil-auto-highlight, rgba(255, 255, 255, 0.7))',\n radius: '6px',\n duration: '1.5s',\n easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n border: 'none',\n contrast: 'var(--veil-auto-contrast, #374151)',\n },\n glass: {\n base: 'rgba(255, 255, 255, 0.08)',\n highlight: 'rgba(255, 255, 255, 0.25)',\n radius: '12px',\n duration: '1.8s',\n easing: 'cubic-bezier(0.25, 1, 0.5, 1)',\n blur: '12px',\n border: '1px solid rgba(255, 255, 255, 0.15)',\n glow: 'inset 0 1px 1px 0 rgba(255, 255, 255, 0.25), 0 4px 16px 0 rgba(0, 0, 0, 0.12)',\n contrast: '#ffffff',\n },\n ios: {\n base: 'rgba(120, 120, 128, 0.18)',\n highlight: 'rgba(255, 255, 255, 0.45)',\n radius: '10px',\n duration: '1.4s',\n easing: 'cubic-bezier(0.32, 0.72, 0, 1)',\n border: 'none',\n contrast: '#1c1c1e',\n },\n material: {\n base: '#e7e0ec',\n highlight: '#f7f2fa',\n radius: '12px',\n duration: '1.6s',\n easing: 'cubic-bezier(0.2, 0, 0, 1)',\n border: 'none',\n contrast: '#1d1b20',\n },\n minimal: {\n base: '#f1f3f5',\n highlight: '#ffffff',\n radius: '4px',\n duration: '1.4s',\n easing: 'ease-in-out',\n border: 'none',\n contrast: '#212529',\n },\n mono: {\n base: '#e0e0e0',\n highlight: '#ffffff',\n radius: '0px',\n duration: '1.2s',\n easing: 'linear',\n border: '1px solid #cccccc',\n contrast: '#000000',\n },\n neon: {\n base: '#0c0b16',\n highlight: 'rgba(0, 240, 255, 0.5)',\n radius: '8px',\n duration: '1.6s',\n easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n border: '1px solid rgba(0, 240, 255, 0.3)',\n glow: '0 0 12px rgba(0, 240, 255, 0.35)',\n contrast: '#00f0ff',\n },\n sunset: {\n base: '#fed7aa',\n highlight: '#fff7ed',\n radius: '8px',\n duration: '1.7s',\n easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n border: 'none',\n glow: '0 0 8px rgba(251, 146, 60, 0.25)',\n contrast: '#7c2d12',\n },\n ocean: {\n base: '#0f2937',\n highlight: 'rgba(56, 189, 248, 0.45)',\n radius: '8px',\n duration: '1.7s',\n easing: 'cubic-bezier(0.4, 0, 0.2, 1)',\n border: '1px solid rgba(56, 189, 248, 0.2)',\n glow: '0 0 10px rgba(56, 189, 248, 0.25)',\n contrast: '#38bdf8',\n },\n};\n\nconst customThemesRegistry = new Map<string, VeilThemeTokens>();\n\n/**\n * Creates and registers a new custom theme\n */\nexport function createTheme(themeInput: CustomThemeInput): VeilThemeTokens {\n const parentTheme = themeInput.parent && BUILTIN_THEMES[themeInput.parent]\n ? BUILTIN_THEMES[themeInput.parent]\n : BUILTIN_THEMES.light;\n\n const resolvedTheme: VeilThemeTokens = {\n base: themeInput.base ?? parentTheme.base,\n highlight: themeInput.highlight ?? parentTheme.highlight,\n radius: themeInput.radius ?? parentTheme.radius,\n duration: themeInput.duration ?? parentTheme.duration,\n easing: themeInput.easing ?? parentTheme.easing,\n border: themeInput.border ?? parentTheme.border,\n blur: themeInput.blur ?? parentTheme.blur,\n glow: themeInput.glow ?? parentTheme.glow,\n contrast: themeInput.contrast ?? parentTheme.contrast,\n };\n\n customThemesRegistry.set(themeInput.name, resolvedTheme);\n return resolvedTheme;\n}\n\n/**\n * Get theme tokens by name or object\n */\nexport function getThemeTokens(theme?: VeilThemeName | CustomThemeInput | string): VeilThemeTokens {\n if (!theme) return BUILTIN_THEMES.light;\n if (typeof theme === 'string') {\n if (theme in BUILTIN_THEMES) {\n return BUILTIN_THEMES[theme as VeilThemeName];\n }\n const custom = customThemesRegistry.get(theme);\n if (custom) return custom;\n return BUILTIN_THEMES.light;\n }\n return createTheme(theme);\n}\n","/**\n * Veilkit - Animation Engine\n * 12 GPU-Accelerated Animation Definitions (transform & opacity only)\n */\n\nimport { VeilAnimationName, VeilDirection } from './types';\n\nexport interface AnimationConfig {\n name: VeilAnimationName;\n duration?: number | string;\n direction?: VeilDirection;\n speedMultiplier?: number;\n intensity?: number;\n}\n\nexport const ANIMATION_NAMES: VeilAnimationName[] = [\n 'shimmer',\n 'wave',\n 'pulse',\n 'blink',\n 'breathe',\n 'glass-shine',\n 'gradient-flow',\n 'aurora',\n 'scan-line',\n 'sparkle',\n 'neon-glow',\n 'stagger',\n 'none',\n];\n\n/**\n * Generates the CSS keyframes and utility rules for all 12 animations.\n * Strictly uses transform and opacity for 60fps GPU execution.\n */\nexport function getAnimationKeyframesCSS(): string {\n return [\n '@keyframes veil-shimmer-ltr{0%{transform:translateX(-100%)}100%{transform:translateX(100%)}}',\n '@keyframes veil-shimmer-rtl{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}}',\n '@keyframes veil-shimmer-ttb{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}',\n '@keyframes veil-shimmer-btt{0%{transform:translateY(100%)}100%{transform:translateY(-100%)}}',\n '@keyframes veil-wave{0%{transform:translateX(-120%) scaleX(0.8);opacity:0.3}50%{opacity:0.95}100%{transform:translateX(120%) scaleX(1.2);opacity:0.3}}',\n '@keyframes veil-pulse{0%,100%{opacity:1}50%{opacity:0.38}}',\n '@keyframes veil-blink{0%,49%{opacity:1}50%,99%{opacity:0.2}100%{opacity:1}}',\n '@keyframes veil-breathe{0%,100%{opacity:0.65;transform:scale(0.995)}50%{opacity:1;transform:scale(1.005)}}',\n '@keyframes veil-glass-shine{0%{transform:translate3d(-150%,-150%,0) rotate(35deg);opacity:0.1}40%,60%{opacity:0.85}100%{transform:translate3d(200%,200%,0) rotate(35deg);opacity:0.1}}',\n '@keyframes veil-gradient-flow{0%{transform:translateX(-66.6%)}100%{transform:translateX(0%)}}',\n '@keyframes veil-aurora{0%{transform:translate3d(-20%,-15%,0) rotate(0deg) scale(1);opacity:0.5}50%{transform:translate3d(25%,20%,0) rotate(180deg) scale(1.25);opacity:0.85}100%{transform:translate3d(-20%,-15%,0) rotate(360deg) scale(1);opacity:0.5}}',\n '@keyframes veil-scan-line{0%{transform:translateY(-100%);opacity:0.2}50%{opacity:1}100%{transform:translateY(300%);opacity:0.2}}',\n '@keyframes veil-sparkle{0%,100%{opacity:0.2;transform:scale(0.98)}25%{opacity:0.8;transform:scale(1.02)}50%{opacity:0.3;transform:scale(0.99)}75%{opacity:0.95;transform:scale(1.01)}}',\n '@keyframes veil-neon-glow{0%,100%{opacity:0.45;transform:scale(0.998)}50%{opacity:1;transform:scale(1.002)}}',\n '[data-veil-anim=\"stagger\"]>*{animation-delay:calc(var(--veil-stagger-idx,0)*120ms)!important}',\n ].join('');\n}\n","/**\n * Veilkit - CSS Engine & Style Injector\n * SSR-safe, adoptedStyleSheets support, CSP nonce, and zero-layout-thrash animations\n */\n\nimport { BUILTIN_THEMES } from './themes';\nimport { getAnimationKeyframesCSS } from './animations';\n\nlet styleInjected = false;\nlet cspNonce: string | undefined = undefined;\n\n/**\n * Configure CSP nonce for injected styles\n */\nexport function setNonce(nonce: string): void {\n cspNonce = nonce;\n}\n\n/**\n * Generates the full CSS stylesheet string\n */\nexport function getStylesCSS(): string {\n const light = BUILTIN_THEMES.light;\n const dark = BUILTIN_THEMES.dark;\n\n return `\n/* === VEILKIT CORE STYLES === */\n:root {\n --veil-base: ${light.base};\n --veil-highlight: ${light.highlight};\n --veil-radius: ${light.radius};\n --veil-duration: ${light.duration};\n --veil-easing: ${light.easing};\n --veil-direction: ltr;\n --veil-border: none;\n --veil-blur: none;\n --veil-glow: none;\n --veil-contrast: ${light.contrast};\n\n --veil-auto-base: ${light.base};\n --veil-auto-highlight: ${light.highlight};\n --veil-auto-contrast: ${light.contrast};\n}\n\n@media (prefers-color-scheme: dark) {\n :root {\n --veil-auto-base: ${dark.base};\n --veil-auto-highlight: ${dark.highlight};\n --veil-auto-contrast: ${dark.contrast};\n }\n}\n\n/* === DARK THEME SELECTORS === */\n[data-theme=\"dark\"], .dark, [data-theme=\"dark\"] .veil-skeleton {\n --veil-base: ${dark.base};\n --veil-highlight: ${dark.highlight};\n --veil-contrast: ${dark.contrast};\n}\n\n/* === THEME ATTRIBUTE CLASSES === */\n${Object.entries(BUILTIN_THEMES).map(([name, t]) => `[data-veil-theme=\"${name}\"]{--veil-base:${t.base};--veil-highlight:${t.highlight};--veil-radius:${t.radius};--veil-duration:${t.duration};--veil-easing:${t.easing};${t.border ? `--veil-border:${t.border};` : ''}${t.blur ? `--veil-blur:${t.blur};` : ''}${t.glow ? `--veil-glow:${t.glow};` : ''}--veil-contrast:${t.contrast};}`).join('')}\n\n/* === BASE SKELETON ELEMENT === */\n.veil-skeleton {\n position: relative;\n display: block;\n box-sizing: border-box;\n background-color: var(--veil-base, #e5e7eb);\n border-radius: var(--veil-radius, 6px);\n border: var(--veil-border, none);\n box-shadow: var(--veil-glow, none);\n overflow: hidden;\n pointer-events: none;\n user-select: none;\n min-height: 12px;\n}\n\n[data-veil-theme=\"glass\"] .veil-skeleton,\n.veil-skeleton[data-veil-theme=\"glass\"] {\n backdrop-filter: blur(var(--veil-blur, 12px));\n -webkit-backdrop-filter: blur(var(--veil-blur, 12px));\n}\n\n/* === SHIMMER / ANIMATION OVERLAY === */\n.veil-skeleton::after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n will-change: transform, opacity;\n background: linear-gradient(\n 90deg,\n transparent 0%,\n var(--veil-highlight, rgba(255, 255, 255, 0.7)) 50%,\n transparent 100%\n );\n animation-duration: var(--veil-duration, 1.5s);\n animation-timing-function: var(--veil-easing, cubic-bezier(0.4, 0, 0.2, 1));\n animation-iteration-count: infinite;\n animation-delay: var(--veil-sync-delay, 0s);\n animation-play-state: var(--veil-play-state, running);\n}\n\n/* Animation name mapping */\n.veil-skeleton[data-veil-anim=\"shimmer\"]::after,\n.veil-skeleton:not([data-veil-anim])::after {\n animation-name: veil-shimmer-ltr;\n}\n.veil-skeleton[data-veil-dir=\"rtl\"]::after,\n[dir=\"rtl\"] .veil-skeleton[data-veil-anim=\"shimmer\"]::after {\n animation-name: veil-shimmer-rtl;\n}\n.veil-skeleton[data-veil-dir=\"ttb\"]::after {\n animation-name: veil-shimmer-ttb;\n background: linear-gradient(180deg, transparent 0%, var(--veil-highlight, rgba(255,255,255,0.7)) 50%, transparent 100%);\n}\n.veil-skeleton[data-veil-dir=\"btt\"]::after {\n animation-name: veil-shimmer-btt;\n background: linear-gradient(0deg, transparent 0%, var(--veil-highlight, rgba(255,255,255,0.7)) 50%, transparent 100%);\n}\n\n.veil-skeleton[data-veil-anim=\"wave\"]::after {\n animation-name: veil-wave;\n}\n\n.veil-skeleton[data-veil-anim=\"pulse\"]::after {\n background: none;\n}\n.veil-skeleton[data-veil-anim=\"pulse\"] {\n animation: veil-pulse var(--veil-duration, 1.5s) var(--veil-easing, ease-in-out) infinite;\n animation-delay: var(--veil-sync-delay, 0s);\n animation-play-state: var(--veil-play-state, running);\n}\n\n.veil-skeleton[data-veil-anim=\"blink\"]::after {\n background: none;\n}\n.veil-skeleton[data-veil-anim=\"blink\"] {\n animation: veil-blink var(--veil-duration, 1.2s) steps(2, start) infinite;\n animation-delay: var(--veil-sync-delay, 0s);\n animation-play-state: var(--veil-play-state, running);\n}\n\n.veil-skeleton[data-veil-anim=\"breathe\"]::after {\n background: none;\n}\n.veil-skeleton[data-veil-anim=\"breathe\"] {\n animation: veil-breathe var(--veil-duration, 2.2s) var(--veil-easing, ease-in-out) infinite;\n animation-delay: var(--veil-sync-delay, 0s);\n animation-play-state: var(--veil-play-state, running);\n}\n\n.veil-skeleton[data-veil-anim=\"glass-shine\"]::after {\n animation-name: veil-glass-shine;\n background: linear-gradient(\n 115deg,\n transparent 20%,\n var(--veil-highlight, rgba(255, 255, 255, 0.4)) 50%,\n transparent 80%\n );\n}\n\n.veil-skeleton[data-veil-anim=\"gradient-flow\"]::after {\n width: 300%;\n animation-name: veil-gradient-flow;\n background: linear-gradient(\n 90deg,\n var(--veil-base, #e5e7eb) 0%,\n var(--veil-highlight, rgba(255, 255, 255, 0.8)) 30%,\n var(--veil-base, #e5e7eb) 60%,\n var(--veil-highlight, rgba(255, 255, 255, 0.8)) 100%\n );\n}\n\n.veil-skeleton[data-veil-anim=\"aurora\"]::after {\n width: 160%;\n height: 160%;\n animation-name: veil-aurora;\n background: radial-gradient(\n circle at 50% 50%,\n rgba(56, 189, 248, 0.3) 0%,\n rgba(168, 85, 247, 0.25) 45%,\n rgba(236, 72, 153, 0.2) 75%,\n transparent 100%\n );\n}\n\n.veil-skeleton[data-veil-anim=\"scan-line\"]::after {\n height: 30%;\n animation-name: veil-scan-line;\n background: linear-gradient(180deg, transparent, var(--veil-highlight, rgba(0, 240, 255, 0.8)), transparent);\n}\n\n.veil-skeleton[data-veil-anim=\"sparkle\"]::after {\n animation-name: veil-sparkle;\n}\n\n.veil-skeleton[data-veil-anim=\"neon-glow\"] {\n animation: veil-neon-glow var(--veil-duration, 1.6s) ease-in-out infinite;\n animation-delay: var(--veil-sync-delay, 0s);\n}\n\n.veil-skeleton[data-veil-anim=\"none\"]::after {\n display: none !important;\n}\n\n/* === PRIMITIVE VARIANTS === */\n.veil-skeleton[data-veil-shape=\"line\"] {\n height: 1em;\n margin: 0.35em 0;\n border-radius: var(--veil-radius, 4px);\n}\n.veil-skeleton[data-veil-shape=\"circle\"] {\n border-radius: 50% !important;\n aspect-ratio: 1 / 1;\n}\n.veil-skeleton[data-veil-shape=\"heading\"] {\n height: 1.8em;\n margin: 0.5em 0;\n border-radius: var(--veil-radius, 6px);\n}\n.veil-skeleton[data-veil-shape=\"button\"] {\n height: 2.5rem;\n border-radius: var(--veil-radius, 8px);\n}\n.veil-skeleton[data-veil-shape=\"badge\"] {\n height: 1.35rem;\n border-radius: 9999px;\n display: inline-block;\n}\n.veil-skeleton[data-veil-shape=\"icon\"] {\n width: 1.5rem;\n height: 1.5rem;\n border-radius: var(--veil-radius, 6px);\n display: inline-block;\n}\n.veil-skeleton[data-veil-shape=\"input\"] {\n height: 2.6rem;\n border-radius: var(--veil-radius, 8px);\n}\n.veil-skeleton[data-veil-shape=\"divider\"] {\n height: 1px;\n width: 100%;\n margin: 1rem 0;\n min-height: 1px;\n}\n\n/* Natural randomized last-line widths */\n.veil-lines-group > .veil-skeleton:last-child {\n width: var(--veil-last-width, 68%);\n}\n\n/* === ACCESSIBILITY === */\n.veil-sr-only {\n position: absolute !important;\n width: 1px !important;\n height: 1px !important;\n padding: 0 !important;\n margin: -1px !important;\n overflow: hidden !important;\n clip: rect(0, 0, 0, 0) !important;\n white-space: nowrap !important;\n border-width: 0 !important;\n}\n\n/* prefers-reduced-motion */\n@media (prefers-reduced-motion: reduce) {\n .veil-skeleton::after {\n animation: none !important;\n display: none !important;\n }\n .veil-skeleton {\n animation: veil-pulse 3s ease-in-out infinite !important;\n transform: none !important;\n }\n}\n\n/* forced-colors */\n@media (forced-colors: active) {\n .veil-skeleton {\n forced-color-adjust: none;\n background-color: ButtonFace !important;\n outline: 1px solid Highlight !important;\n }\n .veil-skeleton::after {\n display: none !important;\n }\n}\n\n/* Offscreen & Tab Hidden Pausing */\n[data-veil-tab-hidden=\"true\"] .veil-skeleton,\n[data-veil-tab-hidden=\"true\"] .veil-skeleton::after,\n[data-veil-offscreen=\"true\"],\n[data-veil-offscreen=\"true\"]::after {\n animation-play-state: paused !important;\n}\n\n/* === REVEAL TRANSITIONS === */\n.veil-revealing {\n position: relative;\n}\n.veil-reveal-fade {\n animation: veil-reveal-fade 350ms cubic-bezier(0.16, 1, 0.3, 1) forwards;\n}\n.veil-reveal-blur-in {\n animation: veil-reveal-blur 400ms cubic-bezier(0.16, 1, 0.3, 1) forwards;\n}\n.veil-reveal-slide-up {\n animation: veil-reveal-slide 400ms cubic-bezier(0.16, 1, 0.3, 1) forwards;\n}\n.veil-reveal-scale {\n animation: veil-reveal-scale 350ms cubic-bezier(0.16, 1, 0.3, 1) forwards;\n}\n\n@keyframes veil-reveal-fade {\n 0% { opacity: 0; }\n 100% { opacity: 1; }\n}\n@keyframes veil-reveal-blur {\n 0% { opacity: 0; filter: blur(8px); }\n 100% { opacity: 1; filter: blur(0px); }\n}\n@keyframes veil-reveal-slide {\n 0% { opacity: 0; transform: translateY(12px); }\n 100% { opacity: 1; transform: translateY(0); }\n}\n@keyframes veil-reveal-scale {\n 0% { opacity: 0; transform: scale(0.96); }\n 100% { opacity: 1; transform: scale(1); }\n}\n\n/* === SPINNERS, PROGRESS, OVERLAY, BUTTON, LAZY IMAGE === */\n.veil-spinner {\n display: inline-block;\n box-sizing: border-box;\n vertical-align: middle;\n}\n.veil-overlay {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 12px;\n background-color: var(--veil-overlay-bg, rgba(255, 255, 255, 0.75));\n backdrop-filter: blur(var(--veil-overlay-blur, 6px));\n -webkit-backdrop-filter: blur(var(--veil-overlay-blur, 6px));\n z-index: 100;\n transition: opacity 250ms ease;\n}\n.veil-overlay-fullscreen {\n position: fixed !important;\n z-index: 999999 !important;\n}\n.veil-progress-bar {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n height: 3px;\n z-index: 999999;\n background: transparent;\n pointer-events: none;\n}\n.veil-progress-inner {\n height: 100%;\n background: var(--veil-progress-color, #3b82f6);\n box-shadow: 0 0 10px var(--veil-progress-color, #3b82f6), 0 0 5px var(--veil-progress-color, #3b82f6);\n transition: width 200ms ease, opacity 350ms ease;\n}\n.veil-btn-loading {\n position: relative;\n pointer-events: none;\n cursor: default;\n}\n.veil-btn-spinner-wrap {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n margin-right: 8px;\n}\n.veil-lazy-img-wrap {\n position: relative;\n overflow: hidden;\n display: inline-block;\n}\n.veil-lazy-img {\n transition: opacity 350ms ease, filter 350ms ease;\n}\n.veil-lazy-img-loading {\n opacity: 0;\n filter: blur(10px);\n}\n.veil-lazy-img-loaded {\n opacity: 1;\n filter: blur(0px);\n}\n\n${getAnimationKeyframesCSS()}\n`;\n}\n\n/**\n * Injects CSS into the document head safely (runs only once, SSR safe)\n */\nexport function injectStyles(nonce?: string): void {\n if (styleInjected || typeof document === 'undefined') return;\n styleInjected = true;\n\n const css = getStylesCSS();\n const effectiveNonce = nonce || cspNonce;\n\n // Try adoptedStyleSheets if supported\n if (\n typeof document.adoptedStyleSheets !== 'undefined' &&\n typeof CSSStyleSheet !== 'undefined' &&\n 'replaceSync' in CSSStyleSheet.prototype &&\n !effectiveNonce // Some CSP setups disallow adoptedStyleSheets with strict style-src\n ) {\n try {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(css);\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];\n return;\n } catch {\n // Fallback to <style> injection\n }\n }\n\n // <style> tag fallback with CSP nonce support\n const styleEl = document.createElement('style');\n styleEl.id = 'veilkit-styles';\n if (effectiveNonce) {\n styleEl.setAttribute('nonce', effectiveNonce);\n }\n styleEl.textContent = css;\n document.head.appendChild(styleEl);\n}\n","/**\n * Veilkit - Progress System\n * Route Progress Bar (NProgress-style with auto-trickle) +\n * Determinate & Indeterminate Linear and Circular Progress components\n */\n\nimport { ProgressProps } from './types';\nimport { injectStyles } from './css';\n\nexport class RouteProgressController {\n private el: HTMLElement | null = null;\n private innerEl: HTMLElement | null = null;\n private currentProgress: number = 0;\n private trickleTimer: any = null;\n private status: 'idle' | 'loading' | 'success' | 'error' = 'idle';\n\n private ensureDOM(): void {\n if (this.el || typeof document === 'undefined') return;\n injectStyles();\n\n this.el = document.createElement('div');\n this.el.className = 'veil-progress-bar';\n this.el.setAttribute('role', 'progressbar');\n this.el.setAttribute('aria-valuemin', '0');\n this.el.setAttribute('aria-valuemax', '100');\n this.el.setAttribute('aria-valuenow', '0');\n\n this.innerEl = document.createElement('div');\n this.innerEl.className = 'veil-progress-inner';\n this.innerEl.style.width = '0%';\n this.innerEl.style.opacity = '1';\n\n this.el.appendChild(this.innerEl);\n document.body.appendChild(this.el);\n }\n\n public start(): void {\n this.ensureDOM();\n if (this.status === 'loading') return;\n this.status = 'loading';\n this.currentProgress = 0;\n this.set(0.08);\n\n if (this.innerEl) {\n this.innerEl.style.opacity = '1';\n this.innerEl.style.backgroundColor = 'var(--veil-progress-color, #3b82f6)';\n }\n\n this.trickle();\n }\n\n public set(n: number): void {\n this.ensureDOM();\n this.currentProgress = Math.min(1, Math.max(0, n));\n const percent = Math.round(this.currentProgress * 100);\n\n if (this.innerEl) {\n this.innerEl.style.width = `${percent}%`;\n }\n if (this.el) {\n this.el.setAttribute('aria-valuenow', String(percent));\n }\n }\n\n public inc(amount?: number): void {\n const n = this.currentProgress;\n if (n >= 1) return;\n\n if (typeof amount !== 'number') {\n if (n >= 0 && n < 0.2) amount = 0.1;\n else if (n >= 0.2 && n < 0.5) amount = 0.04;\n else if (n >= 0.5 && n < 0.8) amount = 0.02;\n else if (n >= 0.8 && n < 0.99) amount = 0.005;\n else amount = 0;\n }\n\n this.set(n + amount);\n }\n\n private trickle(): void {\n this.stopTrickle();\n this.trickleTimer = setInterval(() => {\n if (this.currentProgress < 0.95) {\n this.inc();\n }\n }, 250);\n }\n\n private stopTrickle(): void {\n if (this.trickleTimer) {\n clearInterval(this.trickleTimer);\n this.trickleTimer = null;\n }\n }\n\n public done(): void {\n if (this.status === 'idle') return;\n this.stopTrickle();\n this.set(1);\n this.status = 'idle';\n\n setTimeout(() => {\n if (this.innerEl) {\n this.innerEl.style.opacity = '0';\n }\n setTimeout(() => {\n if (this.el) {\n this.el.remove();\n this.el = null;\n this.innerEl = null;\n }\n this.currentProgress = 0;\n }, 350);\n }, 200);\n }\n\n public fail(): void {\n this.stopTrickle();\n this.status = 'error';\n if (this.innerEl) {\n this.innerEl.style.backgroundColor = '#ef4444'; // Red error color\n }\n this.set(1);\n setTimeout(() => this.done(), 500);\n }\n}\n\nexport const progressController = new RouteProgressController();\n\n/**\n * Creates an inline determinate or indeterminate Linear/Circular Progress element\n */\nexport function createProgressElement(props: ProgressProps = {}): HTMLElement {\n injectStyles();\n\n const isCircular = Boolean(props.circular);\n const color = props.color || 'var(--veil-progress-color, #3b82f6)';\n const trackColor = props.trackColor || 'rgba(0, 0, 0, 0.08)';\n\n if (isCircular) {\n const size = props.size !== undefined ? (typeof props.size === 'number' ? `${props.size}px` : props.size) : '48px';\n const strokeWidth = props.strokeWidth || 4;\n\n const container = document.createElement('div');\n container.className = `veil-progress-circular ${props.className || ''}`.trim();\n container.style.width = size;\n container.style.height = size;\n container.style.display = 'inline-flex';\n container.style.alignItems = 'center';\n container.style.justifyContent = 'center';\n container.style.position = 'relative';\n\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('viewBox', '0 0 48 48');\n svg.style.width = '100%';\n svg.style.height = '100%';\n svg.style.transform = 'rotate(-90deg)';\n\n const track = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n track.setAttribute('cx', '24');\n track.setAttribute('cy', '24');\n track.setAttribute('r', '20');\n track.setAttribute('fill', 'none');\n track.setAttribute('stroke', trackColor);\n track.setAttribute('stroke-width', String(strokeWidth));\n\n const meter = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n meter.setAttribute('cx', '24');\n meter.setAttribute('cy', '24');\n meter.setAttribute('r', '20');\n meter.setAttribute('fill', 'none');\n meter.setAttribute('stroke', color);\n meter.setAttribute('stroke-width', String(strokeWidth));\n meter.setAttribute('stroke-linecap', 'round');\n\n const circumference = 2 * Math.PI * 20; // ~125.66\n meter.setAttribute('stroke-dasharray', String(circumference));\n\n if (props.value !== undefined) {\n const val = Math.min(100, Math.max(0, props.value));\n const offset = circumference - (val / 100) * circumference;\n meter.setAttribute('stroke-dashoffset', String(offset));\n meter.style.transition = 'stroke-dashoffset 300ms ease';\n } else {\n // Indeterminate mode\n meter.setAttribute('stroke-dashoffset', String(circumference * 0.75));\n svg.style.animation = 'veil-spin 1200ms linear infinite';\n }\n\n svg.append(track, meter);\n container.appendChild(svg);\n\n if (props.showPercentage && props.value !== undefined) {\n const text = document.createElement('span');\n text.style.position = 'absolute';\n text.style.fontSize = '11px';\n text.style.fontWeight = '600';\n text.textContent = `${Math.round(props.value)}%`;\n container.appendChild(text);\n }\n\n return container;\n }\n\n // Linear progress\n const height = props.height !== undefined ? (typeof props.height === 'number' ? `${props.height}px` : props.height) : '4px';\n const container = document.createElement('div');\n container.className = `veil-progress-linear ${props.className || ''}`.trim();\n container.setAttribute('role', 'progressbar');\n container.style.width = '100%';\n container.style.height = height;\n container.style.backgroundColor = trackColor;\n container.style.borderRadius = '9999px';\n container.style.overflow = 'hidden';\n container.style.position = 'relative';\n\n const bar = document.createElement('div');\n bar.style.height = '100%';\n bar.style.backgroundColor = color;\n bar.style.borderRadius = '9999px';\n\n if (props.value !== undefined) {\n const val = Math.min(100, Math.max(0, props.value));\n container.setAttribute('aria-valuenow', String(val));\n bar.style.width = `${val}%`;\n bar.style.transition = 'width 250ms ease';\n } else {\n // Indeterminate\n bar.style.width = '35%';\n bar.style.animation = 'veil-progress-indeterminate 1400ms ease-in-out infinite';\n }\n\n container.appendChild(bar);\n return container;\n}\n","/**\n * Veilkit - 12 Spinner Loaders\n * Types: ring, dual-ring, dots, bars, pulse, orbit, wave, bounce,\n * ios-activity, glass-orb, morph, progress-circle\n */\n\nimport { SpinnerProps, VeilSpinnerType } from './types';\nimport { injectStyles } from './css';\n\nexport const SPINNER_TYPES: VeilSpinnerType[] = [\n 'ring',\n 'dual-ring',\n 'dots',\n 'bars',\n 'pulse',\n 'orbit',\n 'wave',\n 'bounce',\n 'ios-activity',\n 'glass-orb',\n 'morph',\n 'progress-circle',\n];\n\n/**\n * Creates a DOM spinner element with specified type, size, and colors\n */\nexport function createSpinner(props: SpinnerProps = {}): HTMLElement {\n injectStyles();\n\n const type = props.type || 'ring';\n const size = props.size !== undefined ? (typeof props.size === 'number' ? `${props.size}px` : props.size) : '28px';\n const color = props.color || 'var(--veil-progress-color, #3b82f6)';\n const secondaryColor = props.secondaryColor || 'rgba(0, 0, 0, 0.12)';\n\n const container = document.createElement('div');\n container.className = `veil-spinner veil-spinner-${type} ${props.className || ''}`.trim();\n container.setAttribute('role', 'status');\n container.setAttribute('aria-label', props.label || 'Loading');\n container.style.width = size;\n container.style.height = size;\n container.style.display = 'inline-flex';\n container.style.alignItems = 'center';\n container.style.justifyContent = 'center';\n container.style.position = 'relative';\n\n switch (type) {\n case 'ring': {\n const ring = document.createElement('div');\n ring.style.width = '100%';\n ring.style.height = '100%';\n ring.style.borderRadius = '50%';\n ring.style.border = `3px solid ${secondaryColor}`;\n ring.style.borderTopColor = color;\n ring.style.animation = 'veil-spin 800ms linear infinite';\n ring.style.boxSizing = 'border-box';\n container.appendChild(ring);\n break;\n }\n\n case 'dual-ring': {\n const ring = document.createElement('div');\n ring.style.width = '100%';\n ring.style.height = '100%';\n ring.style.borderRadius = '50%';\n ring.style.border = `3px solid transparent`;\n ring.style.borderTopColor = color;\n ring.style.borderBottomColor = color;\n ring.style.animation = 'veil-spin 900ms cubic-bezier(0.5, 0, 0.5, 1) infinite';\n ring.style.boxSizing = 'border-box';\n container.appendChild(ring);\n break;\n }\n\n case 'dots': {\n container.style.gap = '4px';\n for (let i = 0; i < 3; i++) {\n const dot = document.createElement('div');\n dot.style.width = '28%';\n dot.style.height = '28%';\n dot.style.borderRadius = '50%';\n dot.style.backgroundColor = color;\n dot.style.animation = 'veil-dot-bounce 1200ms ease-in-out infinite';\n dot.style.animationDelay = `${i * 160}ms`;\n container.appendChild(dot);\n }\n break;\n }\n\n case 'bars': {\n container.style.gap = '3px';\n for (let i = 0; i < 4; i++) {\n const bar = document.createElement('div');\n bar.style.width = '18%';\n bar.style.height = '100%';\n bar.style.borderRadius = '2px';\n bar.style.backgroundColor = color;\n bar.style.animation = 'veil-bar-wave 1000ms ease-in-out infinite';\n bar.style.animationDelay = `${i * 140}ms`;\n container.appendChild(bar);\n }\n break;\n }\n\n case 'pulse': {\n const pulseCircle = document.createElement('div');\n pulseCircle.style.width = '100%';\n pulseCircle.style.height = '100%';\n pulseCircle.style.borderRadius = '50%';\n pulseCircle.style.backgroundColor = color;\n pulseCircle.style.animation = 'veil-pulse-scale 1200ms ease-out infinite';\n container.appendChild(pulseCircle);\n break;\n }\n\n case 'orbit': {\n const nucleus = document.createElement('div');\n nucleus.style.width = '30%';\n nucleus.style.height = '30%';\n nucleus.style.borderRadius = '50%';\n nucleus.style.backgroundColor = color;\n nucleus.style.position = 'absolute';\n\n const orbitRing = document.createElement('div');\n orbitRing.style.width = '100%';\n orbitRing.style.height = '100%';\n orbitRing.style.position = 'absolute';\n orbitRing.style.animation = 'veil-spin 1200ms linear infinite';\n\n const satellite = document.createElement('div');\n satellite.style.width = '24%';\n satellite.style.height = '24%';\n satellite.style.borderRadius = '50%';\n satellite.style.backgroundColor = color;\n satellite.style.position = 'absolute';\n satellite.style.top = '0';\n satellite.style.left = '38%';\n\n orbitRing.appendChild(satellite);\n container.append(nucleus, orbitRing);\n break;\n }\n\n case 'wave': {\n container.style.gap = '4px';\n for (let i = 0; i < 5; i++) {\n const line = document.createElement('div');\n line.style.width = '12%';\n line.style.height = '80%';\n line.style.borderRadius = '3px';\n line.style.backgroundColor = color;\n line.style.animation = 'veil-wave-dance 1100ms ease-in-out infinite';\n line.style.animationDelay = `${i * 110}ms`;\n container.appendChild(line);\n }\n break;\n }\n\n case 'bounce': {\n const ball = document.createElement('div');\n ball.style.width = '60%';\n ball.style.height = '60%';\n ball.style.borderRadius = '50%';\n ball.style.backgroundColor = color;\n ball.style.animation = 'veil-bounce-ball 900ms cubic-bezier(0.28, 0.84, 0.42, 1) infinite';\n container.appendChild(ball);\n break;\n }\n\n case 'ios-activity': {\n // 12 radial tick spokes with stepped opacity\n for (let i = 0; i < 12; i++) {\n const spoke = document.createElement('div');\n spoke.style.position = 'absolute';\n spoke.style.width = '8%';\n spoke.style.height = '26%';\n spoke.style.backgroundColor = color;\n spoke.style.borderRadius = '2px';\n spoke.style.transformOrigin = '50% 190%';\n spoke.style.transform = `rotate(${i * 30}deg) translateY(-90%)`;\n spoke.style.animation = 'veil-ios-fade 1000ms linear infinite';\n spoke.style.animationDelay = `-${(12 - i) * (1000 / 12)}ms`;\n container.appendChild(spoke);\n }\n break;\n }\n\n case 'glass-orb': {\n const orb = document.createElement('div');\n orb.style.width = '100%';\n orb.style.height = '100%';\n orb.style.borderRadius = '50%';\n orb.style.background = `radial-gradient(circle at 35% 35%, rgba(255,255,255,0.8), ${color} 70%)`;\n orb.style.boxShadow = `0 4px 12px ${color}44, inset 0 2px 4px rgba(255,255,255,0.6)`;\n orb.style.animation = 'veil-glass-orbit 1600ms ease-in-out infinite';\n container.appendChild(orb);\n break;\n }\n\n case 'morph': {\n const shape = document.createElement('div');\n shape.style.width = '80%';\n shape.style.height = '80%';\n shape.style.backgroundColor = color;\n shape.style.animation = 'veil-morph-shape 2000ms ease-in-out infinite';\n container.appendChild(shape);\n break;\n }\n\n case 'progress-circle': {\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('viewBox', '0 0 36 36');\n svg.style.width = '100%';\n svg.style.height = '100%';\n svg.style.transform = 'rotate(-90deg)';\n\n const bgCircle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n bgCircle.setAttribute('cx', '18');\n bgCircle.setAttribute('cy', '18');\n bgCircle.setAttribute('r', '14');\n bgCircle.setAttribute('fill', 'none');\n bgCircle.setAttribute('stroke', secondaryColor);\n bgCircle.setAttribute('stroke-width', '3');\n\n const meterCircle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n meterCircle.setAttribute('cx', '18');\n meterCircle.setAttribute('cy', '18');\n meterCircle.setAttribute('r', '14');\n meterCircle.setAttribute('fill', 'none');\n meterCircle.setAttribute('stroke', color);\n meterCircle.setAttribute('stroke-width', '3');\n meterCircle.setAttribute('stroke-dasharray', '88');\n meterCircle.setAttribute('stroke-dashoffset', '25');\n meterCircle.setAttribute('stroke-linecap', 'round');\n meterCircle.style.animation = 'veil-spin 1200ms linear infinite';\n meterCircle.style.transformOrigin = '50% 50%';\n\n svg.append(bgCircle, meterCircle);\n container.appendChild(svg);\n break;\n }\n }\n\n // Keyframes for spinners if not already injected\n injectSpinnerKeyframes();\n\n return container;\n}\n\nlet spinnerKeyframesInjected = false;\nfunction injectSpinnerKeyframes(): void {\n if (spinnerKeyframesInjected || typeof document === 'undefined') return;\n spinnerKeyframesInjected = true;\n\n const style = document.createElement('style');\n style.id = 'veilkit-spinner-keyframes';\n style.textContent = `\n @keyframes veil-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }\n @keyframes veil-dot-bounce { 0%, 80%, 100% { transform: scale(0.4); opacity: 0.4; } 40% { transform: scale(1); opacity: 1; } }\n @keyframes veil-bar-wave { 0%, 100% { transform: scaleY(0.3); opacity: 0.5; } 50% { transform: scaleY(1); opacity: 1; } }\n @keyframes veil-pulse-scale { 0% { transform: scale(0.2); opacity: 1; } 100% { transform: scale(1.1); opacity: 0; } }\n @keyframes veil-wave-dance { 0%, 100% { transform: scaleY(0.2); } 50% { transform: scaleY(1); } }\n @keyframes veil-bounce-ball { 0%, 100% { transform: translateY(35%) scale(1.15, 0.75); } 50% { transform: translateY(-40%) scale(0.9, 1.1); } }\n @keyframes veil-ios-fade { 0% { opacity: 1; } 100% { opacity: 0.15; } }\n @keyframes veil-glass-orbit { 0%, 100% { transform: scale(0.9) rotate(0deg); } 50% { transform: scale(1.08) rotate(180deg); } }\n @keyframes veil-morph-shape {\n 0%, 100% { border-radius: 50%; transform: rotate(0deg); }\n 33% { border-radius: 8px; transform: rotate(90deg); }\n 66% { border-radius: 20px; transform: rotate(180deg); }\n }\n `;\n document.head.appendChild(style);\n}\n","/**\n * Veilkit - Accessibility & Localization Engine\n * Screen-reader announcements, polite live regions, and WCAG AA compliance\n */\n\nconst DEFAULT_LABELS: Record<string, Record<string, string>> = {\n en: {\n loading: 'Loading content, please wait…',\n loaded: 'Content loaded.',\n progress: 'Loading progress',\n busy: 'Busy',\n },\n es: {\n loading: 'Cargando contenido, por favor espere…',\n loaded: 'Contenido cargado.',\n progress: 'Progreso de carga',\n busy: 'Ocupado',\n },\n fr: {\n loading: 'Chargement du contenu, veuillez patienter…',\n loaded: 'Contenu chargé.',\n progress: 'Progression du chargement',\n busy: 'Occupé',\n },\n de: {\n loading: 'Inhalt wird geladen, bitte warten…',\n loaded: 'Inhalt geladen.',\n progress: 'Ladefortschritt',\n busy: 'Beschäftigt',\n },\n ja: {\n loading: 'コンテンツを読み込んでいます…',\n loaded: '読み込みが完了しました。',\n progress: '読み込み状況',\n busy: '処理中',\n },\n zh: {\n loading: '正在加载内容,请稍候…',\n loaded: '内容加载完成。',\n progress: '加载进度',\n busy: '忙碌中',\n },\n ar: {\n loading: 'جاري تحميل المحتوى، يرجى الانتظار…',\n loaded: 'تم تحميل المحتوى.',\n progress: 'تقدم التحميل',\n busy: 'مشغول',\n },\n};\n\nlet currentLocale = 'en';\nconst customLabels: Record<string, string> = {};\n\n/**\n * Configure active localization language\n */\nexport function setLocale(locale: string): void {\n currentLocale = locale;\n}\n\n/**\n * Get current active locale\n */\nexport function getLocale(): string {\n return currentLocale;\n}\n\n/**\n * Register or override accessibility label strings\n */\nexport function setLabels(labels: Record<string, string>): void {\n Object.assign(customLabels, labels);\n}\n\n/**\n * Resolves a localized label for screen readers\n */\nexport function getLabel(key: 'loading' | 'loaded' | 'progress' | 'busy' | string): string {\n if (customLabels[key]) return customLabels[key];\n const dict = DEFAULT_LABELS[currentLocale] || DEFAULT_LABELS.en;\n return dict[key] || DEFAULT_LABELS.en[key] || 'Loading…';\n}\n\n/**\n * Marks a container element with accessible loading attributes\n */\nexport function applyA11yLoading(container: HTMLElement, label?: string): HTMLElement {\n container.setAttribute('aria-busy', 'true');\n\n let srNode = container.querySelector('.veil-sr-only') as HTMLElement;\n if (!srNode) {\n srNode = document.createElement('span');\n srNode.className = 'veil-sr-only';\n srNode.setAttribute('role', 'status');\n srNode.setAttribute('aria-live', 'polite');\n container.appendChild(srNode);\n }\n srNode.textContent = label || getLabel('loading');\n return srNode;\n}\n\n/**\n * Clears accessible loading state from container\n */\nexport function removeA11yLoading(container: HTMLElement): void {\n container.removeAttribute('aria-busy');\n const srNode = container.querySelector('.veil-sr-only');\n if (srNode) {\n srNode.remove();\n }\n}\n","/**\n * Veilkit - Loading Overlay System\n * Container-level and fullscreen blurred frosted overlays with spinner and message.\n */\n\nimport { OverlayProps } from './types';\nimport { injectStyles } from './css';\nimport { createSpinner } from './spinners';\nimport { applyA11yLoading, removeA11yLoading } from './a11y';\n\nconst activeOverlays = new Map<HTMLElement, HTMLElement>();\nlet scrollLockOriginalOverflow: string = '';\n\nexport class OverlayController {\n /**\n * Shows a loading overlay over a container element or fullscreen\n */\n public show(target?: HTMLElement | string, props: OverlayProps = {}): HTMLElement {\n injectStyles();\n\n let container: HTMLElement;\n const isFullscreen = !target;\n\n if (isFullscreen) {\n container = document.body;\n } else if (typeof target === 'string') {\n container = document.querySelector(target) as HTMLElement;\n if (!container) container = document.body;\n } else {\n container = target;\n }\n\n if (activeOverlays.has(container)) {\n return activeOverlays.get(container)!;\n }\n\n const overlay = document.createElement('div');\n overlay.className = `veil-overlay ${isFullscreen ? 'veil-overlay-fullscreen' : ''} ${props.className || ''}`.trim();\n overlay.setAttribute('role', 'status');\n\n if (props.color) {\n overlay.style.setProperty('--veil-overlay-bg', props.color);\n }\n if (props.blur !== undefined) {\n const blurVal = typeof props.blur === 'boolean' ? (props.blur ? '8px' : '0px') : props.blur;\n overlay.style.setProperty('--veil-overlay-blur', blurVal);\n }\n if (props.zIndex !== undefined) {\n overlay.style.zIndex = String(props.zIndex);\n }\n\n // Spinner\n if (props.spinner !== false) {\n const spinnerType = typeof props.spinner === 'string' ? props.spinner : 'ring';\n const spinnerEl = createSpinner({ type: spinnerType, size: 36 });\n overlay.appendChild(spinnerEl);\n }\n\n // Message\n if (props.message) {\n const msg = document.createElement('span');\n msg.className = 'veil-overlay-message';\n msg.style.fontSize = '14px';\n msg.style.fontWeight = '500';\n msg.style.color = 'var(--veil-contrast, #1f2937)';\n msg.textContent = props.message;\n overlay.appendChild(msg);\n }\n\n if (!isFullscreen) {\n const compPos = window.getComputedStyle(container).position;\n if (compPos === 'static') {\n container.style.position = 'relative';\n }\n }\n\n applyA11yLoading(container, props.message);\n\n if (props.lockScroll && isFullscreen && typeof document !== 'undefined') {\n scrollLockOriginalOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n\n container.appendChild(overlay);\n activeOverlays.set(container, overlay);\n\n return overlay;\n }\n\n /**\n * Hides and removes the overlay\n */\n public hide(target?: HTMLElement | string): void {\n let container: HTMLElement;\n const isFullscreen = !target;\n\n if (isFullscreen) {\n container = document.body;\n } else if (typeof target === 'string') {\n container = document.querySelector(target) as HTMLElement;\n if (!container) container = document.body;\n } else {\n container = target;\n }\n\n const overlay = activeOverlays.get(container);\n if (!overlay) return;\n\n overlay.style.opacity = '0';\n setTimeout(() => {\n overlay.remove();\n activeOverlays.delete(container);\n removeA11yLoading(container);\n\n if (isFullscreen && scrollLockOriginalOverflow !== undefined) {\n document.body.style.overflow = scrollLockOriginalOverflow;\n }\n }, 200);\n }\n}\n\nexport const overlayController = new OverlayController();\n","/**\n * Veilkit - Global Synchronized Timeline\n * Keeps all shimmer animations in lockstep phase via negative animation-delay\n */\n\nlet globalStartTime: number = 0;\n\n/**\n * Initializes or gets the baseline global timeline origin\n */\nexport function getTimelineOrigin(): number {\n if (globalStartTime === 0 && typeof performance !== 'undefined') {\n globalStartTime = performance.now();\n }\n return globalStartTime;\n}\n\n/**\n * Computes a negative animation-delay string so that an element mounting right now\n * is in exact phase synchronization with all other animations sharing this duration.\n *\n * @param durationMs Duration in milliseconds (default 1500)\n * @returns CSS animation-delay value, e.g. \"-642ms\"\n */\nexport function getSyncDelay(durationMs: number = 1500): string {\n if (typeof performance === 'undefined') return '0ms';\n const elapsed = performance.now() - getTimelineOrigin();\n const phaseOffset = Math.round(elapsed % durationMs);\n return `-${phaseOffset}ms`;\n}\n\n/**\n * Parses duration string (e.g. \"1.5s\", \"800ms\") into milliseconds\n */\nexport function parseDurationMs(duration: string | number = 1500): number {\n if (typeof duration === 'number') return duration;\n if (!duration) return 1500;\n const trimmed = duration.trim().toLowerCase();\n if (trimmed.endsWith('ms')) {\n return parseFloat(trimmed) || 1500;\n }\n if (trimmed.endsWith('s')) {\n return (parseFloat(trimmed) || 1.5) * 1000;\n }\n return parseFloat(trimmed) || 1500;\n}\n","/**\n * Veilkit - Performance & Offscreen Observers\n * Automatically pauses animations when offscreen or when document is hidden\n */\n\nlet intersectionObserver: IntersectionObserver | null = null;\nconst observedElements = new Set<HTMLElement>();\nlet visibilityInitialized = false;\n\nfunction handleIntersection(entries: IntersectionObserverEntry[]) {\n for (const entry of entries) {\n const el = entry.target as HTMLElement;\n if (entry.isIntersecting) {\n el.removeAttribute('data-veil-offscreen');\n el.style.removeProperty('--veil-play-state');\n } else {\n el.setAttribute('data-veil-offscreen', 'true');\n el.style.setProperty('--veil-play-state', 'paused');\n }\n }\n}\n\n/**\n * Ensures tab visibility change listener is attached\n */\nexport function setupVisibilityObserver(): void {\n if (visibilityInitialized || typeof document === 'undefined') return;\n visibilityInitialized = true;\n\n document.addEventListener('visibilitychange', () => {\n if (document.hidden) {\n document.documentElement.setAttribute('data-veil-tab-hidden', 'true');\n } else {\n document.documentElement.removeAttribute('data-veil-tab-hidden');\n }\n });\n}\n\n/**\n * Registers an element to pause CSS animations when outside the viewport\n */\nexport function observeOffscreen(element: HTMLElement): () => void {\n if (typeof window === 'undefined' || typeof IntersectionObserver === 'undefined') {\n return () => {};\n }\n\n setupVisibilityObserver();\n\n if (!intersectionObserver) {\n intersectionObserver = new IntersectionObserver(handleIntersection, {\n rootMargin: '100px 0px', // Pre-activate 100px before coming into view\n threshold: 0,\n });\n }\n\n intersectionObserver.observe(element);\n observedElements.add(element);\n\n return () => {\n if (intersectionObserver && element) {\n intersectionObserver.unobserve(element);\n observedElements.delete(element);\n }\n };\n}\n\n/**\n * Disconnects all observers\n */\nexport function teardownObservers(): void {\n if (intersectionObserver) {\n intersectionObserver.disconnect();\n intersectionObserver = null;\n }\n observedElements.clear();\n}\n","/**\n * Veilkit - Skeleton Primitives\n * Primitives: line, paragraph, heading, circle, rect, image, button, badge, icon, input, table-row, divider\n */\n\nimport { SkeletonProps, VeilPrimitiveType } from './types';\nimport { injectStyles } from './css';\nimport { getSyncDelay, parseDurationMs } from './sync';\nimport { observeOffscreen } from './observer';\n\n/**\n * Creates a DOM skeleton element with applied styles, classes, and synced timing\n */\nexport function createSkeletonElement(props: SkeletonProps = {}): HTMLElement {\n injectStyles();\n\n const el = document.createElement('div');\n el.className = `veil-skeleton ${props.className || ''}`.trim();\n el.setAttribute('aria-hidden', 'true');\n\n const shape = props.type || 'rect';\n el.setAttribute('data-veil-shape', shape);\n\n if (props.animation) {\n el.setAttribute('data-veil-anim', props.animation);\n }\n if (props.direction) {\n el.setAttribute('data-veil-dir', props.direction);\n }\n if (typeof props.theme === 'string') {\n el.setAttribute('data-veil-theme', props.theme);\n }\n\n // Style attributes\n if (props.width !== undefined) {\n el.style.width = typeof props.width === 'number' ? `${props.width}px` : props.width;\n }\n if (props.height !== undefined) {\n el.style.height = typeof props.height === 'number' ? `${props.height}px` : props.height;\n }\n if (props.radius !== undefined) {\n el.style.setProperty('--veil-radius', typeof props.radius === 'number' ? `${props.radius}px` : props.radius);\n el.style.borderRadius = typeof props.radius === 'number' ? `${props.radius}px` : props.radius;\n }\n if (props.speed !== undefined) {\n const durMs = parseDurationMs(props.speed);\n el.style.setProperty('--veil-duration', `${durMs}ms`);\n el.style.setProperty('--veil-sync-delay', getSyncDelay(durMs));\n } else {\n el.style.setProperty('--veil-sync-delay', getSyncDelay(1500));\n }\n\n if (props.style) {\n for (const [key, val] of Object.entries(props.style)) {\n (el.style as any)[key] = val;\n }\n }\n\n observeOffscreen(el);\n return el;\n}\n\n/**\n * Creates multiple lines of text with natural varied widths\n */\nexport function createSkeletonParagraph(lines: number = 3, props: SkeletonProps = {}): HTMLElement {\n const container = document.createElement('div');\n container.className = `veil-lines-group ${props.className || ''}`.trim();\n container.setAttribute('aria-hidden', 'true');\n\n const gap = props.gap !== undefined ? (typeof props.gap === 'number' ? `${props.gap}px` : props.gap) : '0.45rem';\n container.style.display = 'flex';\n container.style.flexDirection = 'column';\n container.style.gap = gap;\n\n const defaultWidths = ['100%', '94%', '88%', '75%'];\n const lastWidth = props.lastLineWidth !== undefined\n ? (typeof props.lastLineWidth === 'number' ? `${props.lastLineWidth}px` : props.lastLineWidth)\n : '65%';\n\n for (let i = 0; i < lines; i++) {\n const isLast = i === lines - 1;\n const width = isLast ? lastWidth : (defaultWidths[i % defaultWidths.length] || '95%');\n const lineEl = createSkeletonElement({\n ...props,\n type: 'line',\n width,\n });\n lineEl.style.setProperty('--veil-stagger-idx', String(i));\n container.appendChild(lineEl);\n }\n\n return container;\n}\n\n/**\n * Creates any primitive by type\n */\nexport function createPrimitive(type: VeilPrimitiveType, props: SkeletonProps = {}): HTMLElement {\n switch (type) {\n case 'paragraph':\n return createSkeletonParagraph(props.lines || 3, props);\n case 'line':\n return createSkeletonElement({ ...props, type: 'line' });\n case 'heading':\n return createSkeletonElement({ ...props, type: 'heading', width: props.width || '65%' });\n case 'circle':\n return createSkeletonElement({\n ...props,\n type: 'circle',\n width: props.width || props.height || '40px',\n height: props.height || props.width || '40px',\n radius: '50%',\n });\n case 'image':\n return createSkeletonElement({\n ...props,\n type: 'rect',\n width: props.width || '100%',\n height: props.height || '200px',\n radius: props.radius || '8px',\n });\n case 'button':\n return createSkeletonElement({\n ...props,\n type: 'button',\n width: props.width || '120px',\n height: props.height || '38px',\n });\n case 'badge':\n return createSkeletonElement({\n ...props,\n type: 'badge',\n width: props.width || '64px',\n height: props.height || '22px',\n });\n case 'icon':\n return createSkeletonElement({\n ...props,\n type: 'icon',\n width: props.width || '24px',\n height: props.height || '24px',\n });\n case 'input':\n return createSkeletonElement({\n ...props,\n type: 'input',\n width: props.width || '100%',\n height: props.height || '40px',\n });\n case 'divider':\n return createSkeletonElement({\n ...props,\n type: 'divider',\n width: '100%',\n height: '1px',\n });\n case 'table-row': {\n const row = document.createElement('div');\n row.style.display = 'flex';\n row.style.gap = '1rem';\n row.style.alignItems = 'center';\n row.style.width = '100%';\n row.style.padding = '0.5rem 0';\n const cols = props.count || 4;\n for (let i = 0; i < cols; i++) {\n const cell = createSkeletonElement({\n ...props,\n type: 'line',\n width: `${100 / cols}%`,\n height: '16px',\n });\n row.appendChild(cell);\n }\n return row;\n }\n default:\n return createSkeletonElement(props);\n }\n}\n","/**\n * Veilkit - Presets Engine\n * 18 Ready-Made, Customizable, Responsive Skeleton Layout Presets\n */\n\nimport { PresetProps, SkeletonProps } from './types';\nimport { createSkeletonElement, createSkeletonParagraph } from './primitives';\n\nexport function createPreset(props: PresetProps): HTMLElement {\n const container = document.createElement('div');\n container.className = `veil-preset veil-preset-${props.name} ${props.className || ''}`.trim();\n container.setAttribute('aria-hidden', 'true');\n container.style.width = props.width !== undefined ? (typeof props.width === 'number' ? `${props.width}px` : props.width) : '100%';\n container.style.boxSizing = 'border-box';\n\n const baseProps: SkeletonProps = {\n animation: props.animation,\n theme: props.theme,\n direction: props.direction,\n speed: props.speed,\n };\n\n switch (props.name) {\n case 'card': {\n container.style.display = 'flex';\n container.style.flexDirection = 'column';\n container.style.gap = '12px';\n container.style.padding = '16px';\n container.style.borderRadius = '12px';\n container.style.border = '1px solid rgba(0,0,0,0.08)';\n\n const img = createSkeletonElement({ ...baseProps, type: 'rect', height: '180px', radius: '8px' });\n const title = createSkeletonElement({ ...baseProps, type: 'heading', width: '70%', height: '24px' });\n const text = createSkeletonParagraph(2, baseProps);\n const btn = createSkeletonElement({ ...baseProps, type: 'button', width: '110px', height: '36px' });\n\n container.append(img, title, text, btn);\n break;\n }\n\n case 'product-card': {\n container.style.display = 'flex';\n container.style.flexDirection = 'column';\n container.style.gap = '10px';\n container.style.padding = '14px';\n container.style.borderRadius = '12px';\n container.style.border = '1px solid rgba(0,0,0,0.06)';\n\n const img = createSkeletonElement({ ...baseProps, type: 'rect', height: '200px', radius: '10px' });\n const badge = createSkeletonElement({ ...baseProps, type: 'badge', width: '50px', height: '18px' });\n const title = createSkeletonElement({ ...baseProps, type: 'line', width: '85%', height: '18px' });\n const price = createSkeletonElement({ ...baseProps, type: 'line', width: '40%', height: '22px' });\n const btn = createSkeletonElement({ ...baseProps, type: 'button', width: '100%', height: '38px' });\n\n container.append(img, badge, title, price, btn);\n break;\n }\n\n case 'product-grid': {\n const itemsCount = props.items || 4;\n const cols = props.columns || 2;\n container.style.display = 'grid';\n container.style.gridTemplateColumns = `repeat(${cols}, minmax(0, 1fr))`;\n container.style.gap = '16px';\n\n for (let i = 0; i < itemsCount; i++) {\n const item = createPreset({ ...props, name: 'product-card' });\n item.style.setProperty('--veil-stagger-idx', String(i));\n container.appendChild(item);\n }\n break;\n }\n\n case 'list-item': {\n container.style.display = 'flex';\n container.style.alignItems = 'center';\n container.style.gap = '14px';\n container.style.padding = '10px 0';\n\n const avatar = createSkeletonElement({ ...baseProps, type: 'circle', width: '44px', height: '44px' });\n const content = document.createElement('div');\n content.style.flex = '1';\n content.style.display = 'flex';\n content.style.flexDirection = 'column';\n content.style.gap = '6px';\n\n const title = createSkeletonElement({ ...baseProps, type: 'line', width: '55%', height: '16px' });\n const subtitle = createSkeletonElement({ ...baseProps, type: 'line', width: '35%', height: '12px' });\n content.append(title, subtitle);\n\n const action = createSkeletonElement({ ...baseProps, type: 'icon', width: '24px', height: '24px' });\n container.append(avatar, content, action);\n break;\n }\n\n case 'list': {\n const count = props.items || 5;\n container.style.display = 'flex';\n container.style.flexDirection = 'column';\n container.style.gap = '8px';\n\n for (let i = 0; i < count; i++) {\n const item = createPreset({ ...props, name: 'list-item' });\n item.style.setProperty('--veil-stagger-idx', String(i));\n container.appendChild(item);\n }\n break;\n }\n\n case 'table': {\n container.style.display = 'flex';\n container.style.flexDirection = 'column';\n container.style.gap = '10px';\n container.style.width = '100%';\n\n // Header row\n const headerRow = document.createElement('div');\n headerRow.style.display = 'flex';\n headerRow.style.gap = '16px';\n headerRow.style.paddingBottom = '8px';\n headerRow.style.borderBottom = '2px solid rgba(0,0,0,0.06)';\n const cols = props.columns || 4;\n for (let c = 0; c < cols; c++) {\n const th = createSkeletonElement({ ...baseProps, type: 'line', width: `${100 / cols}%`, height: '20px' });\n headerRow.appendChild(th);\n }\n container.appendChild(headerRow);\n\n // Body rows\n const rows = props.items || 5;\n for (let r = 0; r < rows; r++) {\n const row = document.createElement('div');\n row.style.display = 'flex';\n row.style.gap = '16px';\n row.style.padding = '8px 0';\n row.style.borderBottom = '1px solid rgba(0,0,0,0.04)';\n for (let c = 0; c < cols; c++) {\n const td = createSkeletonElement({ ...baseProps, type: 'line', width: `${100 / cols}%`, height: '14px' });\n row.appendChild(td);\n }\n row.style.setProperty('--veil-stagger-idx', String(r));\n container.appendChild(row);\n }\n break;\n }\n\n case 'profile': {\n container.style.display = 'flex';\n container.style.flexDirection = 'column';\n container.style.alignItems = 'center';\n container.style.gap = '12px';\n container.style.padding = '24px';\n container.style.textAlign = 'center';\n\n const avatar = createSkeletonElement({ ...baseProps, type: 'circle', width: '80px', height: '80px' });\n const name = createSkeletonElement({ ...baseProps, type: 'heading', width: '160px', height: '22px' });\n const bio = createSkeletonParagraph(2, { ...baseProps, width: '240px' });\n const btn = createSkeletonElement({ ...baseProps, type: 'button', width: '120px', height: '36px' });\n\n container.append(avatar, name, bio, btn);\n break;\n }\n\n case 'profile-header': {\n container.style.display = 'flex';\n container.style.flexDirection = 'column';\n container.style.gap = '16px';\n\n const cover = createSkeletonElement({ ...baseProps, type: 'rect', height: '140px', radius: '10px' });\n const userRow = document.createElement('div');\n userRow.style.display = 'flex';\n userRow.style.alignItems = 'flex-end';\n userRow.style.gap = '16px';\n userRow.style.marginTop = '-40px';\n userRow.style.paddingLeft = '20px';\n\n const avatar = createSkeletonElement({ ...baseProps, type: 'circle', width: '72px', height: '72px' });\n avatar.style.border = '4px solid white';\n\n const meta = document.createElement('div');\n meta.style.display = 'flex';\n meta.style.flexDirection = 'column';\n meta.style.gap = '6px';\n meta.style.flex = '1';\n const name = createSkeletonElement({ ...baseProps, type: 'heading', width: '140px', height: '20px' });\n const handle = createSkeletonElement({ ...baseProps, type: 'line', width: '90px', height: '14px' });\n meta.append(name, handle);\n\n userRow.append(avatar, meta);\n const bio = createSkeletonParagraph(2, baseProps);\n\n container.append(cover, userRow, bio);\n break;\n }\n\n case 'feed-post': {\n container.style.display = 'flex';\n container.style.flexDirection = 'column';\n container.style.gap = '12px';\n container.style.padding = '16px';\n container.style.borderRadius = '12px';\n container.style.border = '1px solid rgba(0,0,0,0.06)';\n\n const header = document.createElement('div');\n header.style.display = 'flex';\n header.style.alignItems = 'center';\n header.style.gap = '10px';\n const av = createSkeletonElement({ ...baseProps, type: 'circle', width: '40px', height: '40px' });\n const meta = document.createElement('div');\n meta.style.display = 'flex';\n meta.style.flexDirection = 'column';\n meta.style.gap = '4px';\n meta.append(\n createSkeletonElement({ ...baseProps, type: 'line', width: '110px', height: '14px' }),\n createSkeletonElement({ ...baseProps, type: 'line', width: '60px', height: '10px' }),\n );\n header.append(av, meta);\n\n const body = createSkeletonParagraph(3, baseProps);\n const media = createSkeletonElement({ ...baseProps, type: 'rect', height: '180px', radius: '8px' });\n\n const actions = document.createElement('div');\n actions.style.display = 'flex';\n actions.style.gap = '24px';\n actions.append(\n createSkeletonElement({ ...baseProps, type: 'icon', width: '20px', height: '20px' }),\n createSkeletonElement({ ...baseProps, type: 'icon', width: '20px', height: '20px' }),\n createSkeletonElement({ ...baseProps, type: 'icon', width: '20px', height: '20px' }),\n );\n\n container.append(header, body, media, actions);\n break;\n }\n\n case 'article': {\n container.style.display = 'flex';\n container.style.flexDirection = 'column';\n container.style.gap = '16px';\n\n const hero = createSkeletonElement({ ...baseProps, type: 'rect', height: '240px', radius: '10px' });\n const title = createSkeletonElement({ ...baseProps, type: 'heading', width: '80%', height: '32px' });\n const byline = createSkeletonElement({ ...baseProps, type: 'line', width: '30%', height: '14px' });\n const p1 = createSkeletonParagraph(4, baseProps);\n const p2 = createSkeletonParagraph(3, baseProps);\n\n container.append(hero, title, byline, p1, p2);\n break;\n }\n\n case 'comment-thread': {\n container.style.display = 'flex';\n container.style.flexDirection = 'column';\n container.style.gap = '14px';\n\n const count = props.items || 3;\n for (let i = 0; i < count; i++) {\n const item = createPreset({ ...props, name: 'list-item' });\n item.style.setProperty('--veil-stagger-idx', String(i));\n container.appendChild(item);\n if (i === 1) {\n // Nested reply\n const reply = createPreset({ ...props, name: 'list-item' });\n reply.style.marginLeft = '40px';\n container.appendChild(reply);\n }\n }\n break;\n }\n\n case 'chat': {\n container.style.display = 'flex';\n container.style.flexDirection = 'column';\n container.style.gap = '12px';\n\n const messages = [\n { isSelf: false, width: '60%' },\n { isSelf: true, width: '45%' },\n { isSelf: false, width: '75%' },\n { isSelf: true, width: '50%' },\n ];\n\n for (let i = 0; i < messages.length; i++) {\n const msg = messages[i]!;\n const row = document.createElement('div');\n row.style.display = 'flex';\n row.style.gap = '8px';\n row.style.justifyContent = msg.isSelf ? 'flex-end' : 'flex-start';\n\n if (!msg.isSelf) {\n row.appendChild(createSkeletonElement({ ...baseProps, type: 'circle', width: '28px', height: '28px' }));\n }\n\n const bubble = createSkeletonElement({\n ...baseProps,\n type: 'rect',\n width: msg.width,\n height: '36px',\n radius: '16px',\n });\n row.appendChild(bubble);\n\n row.style.setProperty('--veil-stagger-idx', String(i));\n container.appendChild(row);\n }\n break;\n }\n\n case 'dashboard': {\n container.style.display = 'flex';\n container.style.flexDirection = 'column';\n container.style.gap = '16px';\n\n // 4 stat cards\n const statsRow = document.createElement('div');\n statsRow.style.display = 'grid';\n statsRow.style.gridTemplateColumns = 'repeat(auto-fit, minmax(180px, 1fr))';\n statsRow.style.gap = '12px';\n\n for (let i = 0; i < 4; i++) {\n const statCard = document.createElement('div');\n statCard.style.padding = '14px';\n statCard.style.borderRadius = '10px';\n statCard.style.border = '1px solid rgba(0,0,0,0.06)';\n statCard.style.display = 'flex';\n statCard.style.flexDirection = 'column';\n statCard.style.gap = '8px';\n\n statCard.append(\n createSkeletonElement({ ...baseProps, type: 'line', width: '50%', height: '14px' }),\n createSkeletonElement({ ...baseProps, type: 'heading', width: '70%', height: '24px' }),\n );\n statsRow.appendChild(statCard);\n }\n\n // 2 chart blocks\n const chartRow = document.createElement('div');\n chartRow.style.display = 'grid';\n chartRow.style.gridTemplateColumns = 'repeat(auto-fit, minmax(280px, 1fr))';\n chartRow.style.gap = '16px';\n\n const chart1 = createSkeletonElement({ ...baseProps, type: 'rect', height: '220px', radius: '10px' });\n const chart2 = createSkeletonElement({ ...baseProps, type: 'rect', height: '220px', radius: '10px' });\n chartRow.append(chart1, chart2);\n\n container.append(statsRow, chartRow);\n break;\n }\n\n case 'form': {\n container.style.display = 'flex';\n container.style.flexDirection = 'column';\n container.style.gap = '16px';\n container.style.padding = '20px';\n container.style.borderRadius = '12px';\n container.style.border = '1px solid rgba(0,0,0,0.06)';\n\n const title = createSkeletonElement({ ...baseProps, type: 'heading', width: '40%', height: '26px' });\n container.appendChild(title);\n\n for (let i = 0; i < 3; i++) {\n const group = document.createElement('div');\n group.style.display = 'flex';\n group.style.flexDirection = 'column';\n group.style.gap = '6px';\n group.append(\n createSkeletonElement({ ...baseProps, type: 'line', width: '25%', height: '12px' }),\n createSkeletonElement({ ...baseProps, type: 'input', width: '100%', height: '40px' }),\n );\n container.appendChild(group);\n }\n\n const btn = createSkeletonElement({ ...baseProps, type: 'button', width: '140px', height: '40px' });\n container.appendChild(btn);\n break;\n }\n\n case 'media-card': {\n container.style.display = 'flex';\n container.style.flexDirection = 'column';\n container.style.gap = '10px';\n\n const thumb = createSkeletonElement({ ...baseProps, type: 'rect', height: '180px', radius: '10px' });\n const metaRow = document.createElement('div');\n metaRow.style.display = 'flex';\n metaRow.style.gap = '12px';\n\n const avatar = createSkeletonElement({ ...baseProps, type: 'circle', width: '38px', height: '38px' });\n const details = document.createElement('div');\n details.style.flex = '1';\n details.style.display = 'flex';\n details.style.flexDirection = 'column';\n details.style.gap = '6px';\n details.append(\n createSkeletonElement({ ...baseProps, type: 'line', width: '85%', height: '16px' }),\n createSkeletonElement({ ...baseProps, type: 'line', width: '50%', height: '12px' }),\n );\n metaRow.append(avatar, details);\n\n container.append(thumb, metaRow);\n break;\n }\n\n case 'navbar': {\n container.style.display = 'flex';\n container.style.alignItems = 'center';\n container.style.justifyContent = 'space-between';\n container.style.padding = '12px 20px';\n container.style.borderBottom = '1px solid rgba(0,0,0,0.06)';\n\n const logo = createSkeletonElement({ ...baseProps, type: 'rect', width: '100px', height: '28px', radius: '6px' });\n const navLinks = document.createElement('div');\n navLinks.style.display = 'flex';\n navLinks.style.gap = '20px';\n for (let i = 0; i < 4; i++) {\n navLinks.appendChild(createSkeletonElement({ ...baseProps, type: 'line', width: '60px', height: '14px' }));\n }\n const right = document.createElement('div');\n right.style.display = 'flex';\n right.style.alignItems = 'center';\n right.style.gap = '12px';\n right.append(\n createSkeletonElement({ ...baseProps, type: 'input', width: '140px', height: '32px' }),\n createSkeletonElement({ ...baseProps, type: 'circle', width: '32px', height: '32px' }),\n );\n\n container.append(logo, navLinks, right);\n break;\n }\n\n case 'sidebar': {\n container.style.display = 'flex';\n container.style.flexDirection = 'column';\n container.style.justifyContent = 'space-between';\n container.style.padding = '20px 16px';\n container.style.width = '220px';\n container.style.height = '450px';\n container.style.borderRight = '1px solid rgba(0,0,0,0.06)';\n\n const top = document.createElement('div');\n top.style.display = 'flex';\n top.style.flexDirection = 'column';\n top.style.gap = '16px';\n top.appendChild(createSkeletonElement({ ...baseProps, type: 'rect', width: '120px', height: '32px', radius: '6px' }));\n\n for (let i = 0; i < 5; i++) {\n const navItem = document.createElement('div');\n navItem.style.display = 'flex';\n navItem.style.alignItems = 'center';\n navItem.style.gap = '10px';\n navItem.append(\n createSkeletonElement({ ...baseProps, type: 'icon', width: '20px', height: '20px' }),\n createSkeletonElement({ ...baseProps, type: 'line', width: '90px', height: '14px' }),\n );\n top.appendChild(navItem);\n }\n\n const footer = document.createElement('div');\n footer.style.display = 'flex';\n footer.style.alignItems = 'center';\n footer.style.gap = '10px';\n footer.append(\n createSkeletonElement({ ...baseProps, type: 'circle', width: '36px', height: '36px' }),\n createSkeletonElement({ ...baseProps, type: 'line', width: '80px', height: '14px' }),\n );\n\n container.append(top, footer);\n break;\n }\n\n case 'settings-page': {\n container.style.display = 'flex';\n container.style.flexDirection = 'column';\n container.style.gap = '24px';\n container.style.padding = '24px';\n\n const title = createSkeletonElement({ ...baseProps, type: 'heading', width: '220px', height: '30px' });\n container.appendChild(title);\n\n for (let i = 0; i < 3; i++) {\n const section = document.createElement('div');\n section.style.display = 'flex';\n section.style.alignItems = 'center';\n section.style.justifyContent = 'space-between';\n section.style.padding = '14px 0';\n section.style.borderBottom = '1px solid rgba(0,0,0,0.06)';\n\n const textGroup = document.createElement('div');\n textGroup.style.display = 'flex';\n textGroup.style.flexDirection = 'column';\n textGroup.style.gap = '6px';\n textGroup.append(\n createSkeletonElement({ ...baseProps, type: 'line', width: '160px', height: '16px' }),\n createSkeletonElement({ ...baseProps, type: 'line', width: '240px', height: '12px' }),\n );\n\n const control = createSkeletonElement({ ...baseProps, type: 'button', width: '50px', height: '28px', radius: '14px' });\n section.append(textGroup, control);\n container.appendChild(section);\n }\n\n break;\n }\n }\n\n return container;\n}\n","/**\n * Veilkit - Reveal Transitions Engine\n * Seamless skeleton -> content reveal transitions:\n * fade, blur-in, slide-up, scale, stagger-children, none\n */\n\nimport { VeilRevealTransition } from './types';\n\nexport interface RevealOptions {\n transition?: VeilRevealTransition;\n duration?: number; // ms\n easing?: string;\n onComplete?: () => void;\n}\n\nexport function applyReveal(element: HTMLElement, options: RevealOptions = {}): void {\n const transition = options.transition || 'fade';\n if (transition === 'none') {\n if (options.onComplete) options.onComplete();\n return;\n }\n\n element.classList.add('veil-revealing');\n\n if (transition === 'stagger-children') {\n const children = Array.from(element.children) as HTMLElement[];\n children.forEach((child, idx) => {\n child.classList.add('veil-reveal-fade');\n child.style.animationDelay = `${idx * 60}ms`;\n if (options.duration) {\n child.style.animationDuration = `${options.duration}ms`;\n }\n });\n\n const totalDuration = (options.duration || 350) + (children.length * 60);\n setTimeout(() => {\n element.classList.remove('veil-revealing');\n children.forEach((child) => {\n child.classList.remove('veil-reveal-fade');\n child.style.removeProperty('animation-delay');\n child.style.removeProperty('animation-duration');\n });\n if (options.onComplete) options.onComplete();\n }, totalDuration);\n\n return;\n }\n\n const className = `veil-reveal-${transition}`;\n element.classList.add(className);\n\n if (options.duration) {\n element.style.animationDuration = `${options.duration}ms`;\n }\n if (options.easing) {\n element.style.animationTimingFunction = options.easing;\n }\n\n const handleEnd = () => {\n element.removeEventListener('animationend', handleEnd);\n element.classList.remove('veil-revealing', className);\n element.style.removeProperty('animation-duration');\n element.style.removeProperty('animation-timing-function');\n if (options.onComplete) options.onComplete();\n };\n\n element.addEventListener('animationend', handleEnd);\n}\n","/**\n * Veilkit - Auto-Measure Skeleton Engine\n * Dynamically measures real DOM trees, generates matching skeleton overlays,\n * updates on resize/mutation, and supports instant layout caching.\n */\n\nimport { AutoMeasureOptions, SkeletonProps } from './types';\nimport { createSkeletonElement } from './primitives';\nimport { applyReveal } from './reveal';\n\nexport interface LeafBox {\n x: number;\n y: number;\n width: number;\n height: number;\n radius: string;\n shape: 'circle' | 'rect' | 'line';\n}\n\nexport interface CachedLayout {\n width: number;\n height: number;\n boxes: LeafBox[];\n}\n\nconst memoryLayoutCache = new Map<string, CachedLayout>();\n\n/**\n * Retrieve cached layout by key\n */\nexport function getCachedLayout(cacheKey: string): CachedLayout | null {\n if (memoryLayoutCache.has(cacheKey)) {\n return memoryLayoutCache.get(cacheKey)!;\n }\n if (typeof window !== 'undefined' && window.localStorage) {\n try {\n const stored = localStorage.getItem(`veil_cache_${cacheKey}`);\n if (stored) {\n const parsed = JSON.parse(stored) as CachedLayout;\n memoryLayoutCache.set(cacheKey, parsed);\n return parsed;\n }\n } catch {\n // Storage unavailable or quota exceeded\n }\n }\n return null;\n}\n\n/**\n * Store layout in cache\n */\nexport function setCachedLayout(cacheKey: string, layout: CachedLayout, persist: boolean = false): void {\n memoryLayoutCache.set(cacheKey, layout);\n if (persist && typeof window !== 'undefined' && window.localStorage) {\n try {\n localStorage.setItem(`veil_cache_${cacheKey}`, JSON.stringify(layout));\n } catch {\n // Storage unavailable\n }\n }\n}\n\n/**\n * Measures the leaf elements of a container DOM tree\n */\nexport function measureContainer(container: HTMLElement, ignoreSelector?: string): CachedLayout {\n const containerRect = container.getBoundingClientRect();\n const boxes: LeafBox[] = [];\n\n function isLeafOrTarget(el: HTMLElement): boolean {\n if (el.hasAttribute('data-veil-ignore')) return false;\n if (ignoreSelector && el.matches(ignoreSelector)) return false;\n\n const style = window.getComputedStyle(el);\n if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') {\n return false;\n }\n\n const tag = el.tagName.toLowerCase();\n if (['img', 'svg', 'button', 'input', 'textarea', 'select'].includes(tag)) {\n return true;\n }\n\n if (el.hasAttribute('data-veil-shape')) {\n return true;\n }\n\n // Has text nodes and no child elements\n const hasOnlyText = Array.from(el.childNodes).some((n) => n.nodeType === Node.TEXT_NODE && (n.textContent || '').trim().length > 0) &&\n el.children.length === 0;\n\n return hasOnlyText;\n }\n\n function walk(node: HTMLElement) {\n if (node !== container && isLeafOrTarget(node)) {\n const rect = node.getBoundingClientRect();\n if (rect.width > 2 && rect.height > 2) {\n const computed = window.getComputedStyle(node);\n const radius = computed.borderRadius || '6px';\n const customShape = node.getAttribute('data-veil-shape');\n\n let shape: 'circle' | 'rect' | 'line' = 'rect';\n if (customShape === 'circle' || radius === '50%' || (radius.includes('px') && parseFloat(radius) >= rect.width / 2)) {\n shape = 'circle';\n } else if (customShape === 'line' || ['p', 'span', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'a', 'label'].includes(node.tagName.toLowerCase())) {\n shape = 'line';\n }\n\n boxes.push({\n x: Math.round(rect.left - containerRect.left),\n y: Math.round(rect.top - containerRect.top),\n width: Math.round(rect.width),\n height: Math.round(rect.height),\n radius,\n shape,\n });\n }\n return;\n }\n\n const children = Array.from(node.children) as HTMLElement[];\n for (const child of children) {\n if (!child.hasAttribute('data-veil-ignore')) {\n walk(child);\n }\n }\n }\n\n walk(container);\n\n return {\n width: Math.round(containerRect.width),\n height: Math.round(containerRect.height),\n boxes,\n };\n}\n\n/**\n * Creates and attaches an auto-measured skeleton overlay to a container\n */\nexport function createAutoMeasureOverlay(\n container: HTMLElement,\n options: AutoMeasureOptions = {},\n skeletonProps: SkeletonProps = {},\n): {\n overlay: HTMLElement;\n refresh: () => void;\n destroy: () => void;\n} {\n const overlay = document.createElement('div');\n overlay.className = 'veil-auto-overlay';\n overlay.setAttribute('aria-hidden', 'true');\n overlay.style.position = 'absolute';\n overlay.style.top = '0';\n overlay.style.left = '0';\n overlay.style.width = '100%';\n overlay.style.height = '100%';\n overlay.style.pointerEvents = 'none';\n overlay.style.zIndex = '5';\n\n if (!options.preserveBackground) {\n const computed = window.getComputedStyle(container);\n overlay.style.backgroundColor = computed.backgroundColor !== 'rgba(0, 0, 0, 0)' ? computed.backgroundColor : 'transparent';\n }\n\n function renderLayout(layout: CachedLayout) {\n overlay.innerHTML = '';\n for (let i = 0; i < layout.boxes.length; i++) {\n const box = layout.boxes[i]!;\n const el = createSkeletonElement({\n ...skeletonProps,\n type: box.shape,\n radius: box.radius,\n });\n el.style.position = 'absolute';\n el.style.left = `${box.x}px`;\n el.style.top = `${box.y}px`;\n el.style.width = `${box.width}px`;\n el.style.height = `${box.height}px`;\n el.style.setProperty('--veil-stagger-idx', String(i));\n overlay.appendChild(el);\n }\n }\n\n function update() {\n const layout = measureContainer(container, options.ignoreSelector);\n if (layout.boxes.length > 0) {\n renderLayout(layout);\n if (options.cacheKey) {\n setCachedLayout(options.cacheKey, layout, options.persistCache);\n }\n }\n }\n\n // Check cache first for instant repeat render\n if (options.cacheKey) {\n const cached = getCachedLayout(options.cacheKey);\n if (cached) {\n renderLayout(cached);\n }\n }\n\n // Ensure container has relative positioning\n const compPos = window.getComputedStyle(container).position;\n if (compPos === 'static') {\n container.style.position = 'relative';\n }\n\n container.appendChild(overlay);\n\n // If no cache hit, measure immediately\n if (overlay.children.length === 0) {\n update();\n }\n\n let ro: ResizeObserver | null = null;\n let mo: MutationObserver | null = null;\n\n if (options.observeResize !== false && typeof ResizeObserver !== 'undefined') {\n ro = new ResizeObserver(() => update());\n ro.observe(container);\n }\n\n if (options.observeMutations !== false && typeof MutationObserver !== 'undefined') {\n mo = new MutationObserver(() => update());\n mo.observe(container, { childList: true, subtree: true, attributes: false });\n }\n\n return {\n overlay,\n refresh: update,\n destroy: () => {\n if (ro) ro.disconnect();\n if (mo) mo.disconnect();\n if (options.reveal && options.reveal !== 'none') {\n applyReveal(container, {\n transition: options.reveal,\n duration: options.revealDuration,\n easing: options.revealEasing,\n onComplete: () => overlay.remove(),\n });\n } else {\n overlay.remove();\n }\n },\n };\n}\n","/**\n * Veilkit - Anti-Flicker Timing Controller\n * Prevents UI flicker:\n * 1. delay (default 150ms): suppresses loading state if task completes very quickly\n * 2. minVisible (default 300ms): guarantees loader stays visible long enough to avoid rapid flashing\n */\n\nexport interface AntiFlickerOptions {\n delay?: number; // ms to wait before showing loader\n minVisible?: number; // min ms loader remains once shown\n onShow?: () => void;\n onHide?: () => void;\n}\n\nexport class AntiFlickerController {\n private delay: number;\n private minVisible: number;\n private onShow?: () => void;\n private onHide?: () => void;\n\n private delayTimer: any = null;\n private minVisibleTimer: any = null;\n private shownTimestamp: number | null = null;\n private isVisible: boolean = false;\n private isPending: boolean = false;\n\n constructor(options: AntiFlickerOptions = {}) {\n this.delay = options.delay !== undefined ? options.delay : 150;\n this.minVisible = options.minVisible !== undefined ? options.minVisible : 300;\n this.onShow = options.onShow;\n this.onHide = options.onHide;\n }\n\n /**\n * Request loader to be shown (subject to delay)\n */\n public start(): void {\n if (this.isPending || this.isVisible) return;\n this.isPending = true;\n\n if (this.delay <= 0) {\n this.display();\n return;\n }\n\n this.delayTimer = setTimeout(() => {\n this.delayTimer = null;\n if (this.isPending) {\n this.display();\n }\n }, this.delay);\n }\n\n private display(): void {\n this.isPending = false;\n this.isVisible = true;\n this.shownTimestamp = Date.now();\n if (this.onShow) this.onShow();\n }\n\n /**\n * Request loader to be hidden (subject to minVisible)\n */\n public finish(callback?: () => void): void {\n // If it hasn't even shown yet, cancel the delay timer\n if (this.delayTimer) {\n clearTimeout(this.delayTimer);\n this.delayTimer = null;\n this.isPending = false;\n if (callback) callback();\n return;\n }\n\n if (!this.isVisible) {\n this.isPending = false;\n if (callback) callback();\n return;\n }\n\n const elapsed = this.shownTimestamp ? Date.now() - this.shownTimestamp : 0;\n const remaining = Math.max(0, this.minVisible - elapsed);\n\n if (remaining <= 0) {\n this.hide();\n if (callback) callback();\n } else {\n this.minVisibleTimer = setTimeout(() => {\n this.minVisibleTimer = null;\n this.hide();\n if (callback) callback();\n }, remaining);\n }\n }\n\n private hide(): void {\n this.isVisible = false;\n this.isPending = false;\n this.shownTimestamp = null;\n if (this.onHide) this.onHide();\n }\n\n public active(): boolean {\n return this.isVisible;\n }\n\n public destroy(): void {\n if (this.delayTimer) clearTimeout(this.delayTimer);\n if (this.minVisibleTimer) clearTimeout(this.minVisibleTimer);\n this.delayTimer = null;\n this.minVisibleTimer = null;\n this.isVisible = false;\n this.isPending = false;\n }\n}\n","/**\n * Veilkit - Request Tracker & Fetch Wrapper\n * Automatic loading state tracking with anti-flicker and error resilience\n */\n\nimport { loadingManager } from './manager';\nimport { AntiFlickerController } from './antiflicker';\nimport { progressController } from './progress';\nimport { overlayController } from './overlay';\n\nexport interface TrackOptions {\n id?: string;\n delay?: number;\n minVisible?: number;\n overlay?: boolean;\n target?: HTMLElement | string;\n progress?: boolean;\n onStart?: () => void;\n onFinish?: () => void;\n}\n\n/**\n * Tracks a Promise or async function, updating loading states automatically\n */\nexport async function track<T>(\n task: Promise<T> | (() => Promise<T>),\n options: TrackOptions = {},\n): Promise<T> {\n const reqId = loadingManager.start(options.id);\n\n if (options.progress) {\n progressController.start();\n }\n\n const antiFlicker = new AntiFlickerController({\n delay: options.delay !== undefined ? options.delay : 150,\n minVisible: options.minVisible !== undefined ? options.minVisible : 300,\n onShow: () => {\n if (options.overlay) {\n overlayController.show(options.target);\n }\n if (options.onStart) options.onStart();\n },\n onHide: () => {\n if (options.overlay) {\n overlayController.hide(options.target);\n }\n if (options.onFinish) options.onFinish();\n },\n });\n\n antiFlicker.start();\n\n try {\n const promise = typeof task === 'function' ? task() : task;\n const result = await promise;\n return result;\n } catch (error) {\n if (options.progress) {\n progressController.fail();\n }\n throw error;\n } finally {\n loadingManager.stop(reqId);\n if (options.progress) {\n progressController.done();\n }\n antiFlicker.finish();\n }\n}\n\n/**\n * Opt-in fetch wrapper that tracks HTTP requests automatically\n * (Never patches global fetch by default)\n */\nexport function wrapFetch(\n fetchFn: typeof fetch = typeof window !== 'undefined' ? window.fetch.bind(window) : (fetch as any),\n options: TrackOptions = {},\n): typeof fetch {\n return async function wrappedFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n return track(() => fetchFn(input, init), options);\n };\n}\n","/**\n * Veilkit - Imperative & Global API\n * Single unified interface for controlling loading states across any environment.\n */\n\nimport {\n VeilGlobalConfig,\n SkeletonProps,\n SkeletonController,\n SpinnerProps,\n AutoMeasureOptions,\n} from './types';\nimport { injectStyles, setNonce } from './css';\nimport { createSkeletonElement, createPrimitive } from './primitives';\nimport { createPreset } from './presets';\nimport { createSpinner } from './spinners';\nimport { overlayController } from './overlay';\nimport { progressController } from './progress';\nimport { createAutoMeasureOverlay } from './measure';\nimport { loadingManager } from './manager';\nimport { track, wrapFetch } from './track';\nimport { setLocale, setLabels } from './a11y';\nimport { createTheme, getThemeTokens } from './themes';\n\nexport class VeilkitController {\n private config: VeilGlobalConfig = {};\n\n /**\n * Configure global defaults for themes, animations, anti-flicker, CSP nonce, and a11y\n */\n public configure(config: VeilGlobalConfig): void {\n Object.assign(this.config, config);\n if (config.nonce) {\n setNonce(config.nonce);\n }\n if (config.locale) {\n setLocale(config.locale);\n }\n if (config.labels) {\n setLabels(config.labels);\n }\n injectStyles(config.nonce);\n }\n\n /**\n * Mounts a skeleton controller onto an element with show/hide/update/destroy methods\n */\n public skeleton(target: HTMLElement | string, options: SkeletonProps & AutoMeasureOptions = {}): SkeletonController {\n injectStyles();\n\n const element = typeof target === 'string'\n ? (document.querySelector(target) as HTMLElement)\n : target;\n\n if (!element) {\n throw new Error(`[Veilkit] Target element not found for skeleton.`);\n }\n\n let measureInstance: { overlay: HTMLElement; refresh: () => void; destroy: () => void } | null = null;\n let isShowing = false;\n\n const show = () => {\n if (isShowing) return;\n isShowing = true;\n element.setAttribute('aria-busy', 'true');\n measureInstance = createAutoMeasureOverlay(element, options, options);\n };\n\n const hide = () => {\n if (!isShowing) return;\n isShowing = false;\n element.removeAttribute('aria-busy');\n if (measureInstance) {\n measureInstance.destroy();\n measureInstance = null;\n }\n };\n\n const update = (props: Partial<SkeletonProps>) => {\n Object.assign(options, props);\n if (measureInstance) {\n measureInstance.refresh();\n }\n };\n\n const destroy = () => {\n hide();\n };\n\n // Auto-show by default\n show();\n\n return {\n element,\n show,\n hide,\n update,\n destroy,\n };\n }\n\n /**\n * Injects a spinner into a target element\n */\n public spinner(target: HTMLElement | string, props: SpinnerProps = {}): HTMLElement {\n const el = typeof target === 'string'\n ? (document.querySelector(target) as HTMLElement)\n : target;\n\n const spinner = createSpinner(props);\n if (el) {\n el.appendChild(spinner);\n }\n return spinner;\n }\n\n // Subsystem controllers\n public overlay = overlayController;\n public progress = progressController;\n public manager = loadingManager;\n public track = track;\n public wrapFetch = wrapFetch;\n public setLocale = setLocale;\n public setLabels = setLabels;\n public createTheme = createTheme;\n public getThemeTokens = getThemeTokens;\n\n // DOM primitives & presets factories\n public createSkeleton = createSkeletonElement;\n public createPrimitive = createPrimitive;\n public createPreset = createPreset;\n}\n\nexport const veil = new VeilkitController();\nexport default veil;\n","import { Directive, ElementRef, Input, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\nimport { createAutoMeasureOverlay } from '../core/measure';\nimport { injectStyles } from '../core/css';\n\n@Directive({\n selector: '[veil]',\n standalone: true,\n})\nexport class VeilDirective implements OnChanges, OnDestroy {\n @Input('veil') loading: boolean = false;\n @Input('veilCacheKey') cacheKey?: string;\n @Input('veilPersistCache') persistCache?: boolean;\n @Input('veilReveal') reveal?: 'fade' | 'blur-in' | 'slide-up' | 'scale' | 'none';\n\n private overlayInstance: ReturnType<typeof createAutoMeasureOverlay> | null = null;\n\n constructor(private el: ElementRef<HTMLElement>) {\n injectStyles();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['loading']) {\n this.updateState();\n }\n }\n\n private updateState(): void {\n const nativeEl = this.el.nativeElement;\n if (this.loading && !this.overlayInstance) {\n this.overlayInstance = createAutoMeasureOverlay(nativeEl, {\n cacheKey: this.cacheKey,\n persistCache: this.persistCache,\n reveal: this.reveal || 'fade',\n });\n nativeEl.setAttribute('aria-busy', 'true');\n } else if (!this.loading && this.overlayInstance) {\n this.overlayInstance.destroy();\n this.overlayInstance = null;\n nativeEl.removeAttribute('aria-busy');\n }\n }\n\n ngOnDestroy(): void {\n if (this.overlayInstance) {\n this.overlayInstance.destroy();\n this.overlayInstance = null;\n }\n }\n}\n","import { Component, ElementRef, Input, OnInit, OnChanges, SimpleChanges } from '@angular/core';\nimport type { VeilPrimitiveType, VeilAnimationName, VeilThemeName, VeilSpinnerType } from '../core/types';\nimport { createSkeletonElement, createSkeletonParagraph } from '../core/primitives';\nimport { createSpinner } from '../core/spinners';\nimport { createProgressElement } from '../core/progress';\nimport { injectStyles } from '../core/css';\n\n@Component({\n selector: 'veil-skeleton',\n standalone: true,\n template: ``,\n})\nexport class VeilSkeletonComponent implements OnInit, OnChanges {\n @Input() type: VeilPrimitiveType = 'rect';\n @Input() width?: string | number;\n @Input() height?: string | number;\n @Input() radius?: string | number;\n @Input() lines?: number;\n @Input() animation: VeilAnimationName = 'shimmer';\n @Input() theme: VeilThemeName = 'light';\n @Input() circle: boolean = false;\n\n constructor(private el: ElementRef<HTMLElement>) {\n injectStyles();\n }\n\n ngOnInit(): void {\n this.render();\n }\n\n ngOnChanges(_changes: SimpleChanges): void {\n this.render();\n }\n\n private render(): void {\n const native = this.el.nativeElement;\n native.innerHTML = '';\n const shape = this.circle ? 'circle' : this.type;\n const node = this.lines\n ? createSkeletonParagraph(this.lines, {\n width: this.width,\n animation: this.animation,\n theme: this.theme,\n })\n : createSkeletonElement({\n type: shape,\n width: this.width,\n height: this.height,\n radius: this.radius,\n animation: this.animation,\n theme: this.theme,\n });\n\n native.appendChild(node);\n }\n}\n\n@Component({\n selector: 'veil-spinner',\n standalone: true,\n template: ``,\n})\nexport class VeilSpinnerComponent implements OnInit {\n @Input() type: VeilSpinnerType = 'ring';\n @Input() size?: string | number = 28;\n @Input() color?: string;\n\n constructor(private el: ElementRef<HTMLElement>) {\n injectStyles();\n }\n\n ngOnInit(): void {\n const spinner = createSpinner({\n type: this.type,\n size: this.size,\n color: this.color,\n });\n this.el.nativeElement.appendChild(spinner);\n }\n}\n\n@Component({\n selector: 'veil-progress',\n standalone: true,\n template: ``,\n})\nexport class VeilProgressBarComponent implements OnInit {\n @Input() value?: number;\n @Input() circular: boolean = false;\n @Input() size?: string | number;\n @Input() color?: string;\n\n constructor(private el: ElementRef<HTMLElement>) {\n injectStyles();\n }\n\n ngOnInit(): void {\n const prog = createProgressElement({\n value: this.value,\n circular: this.circular,\n size: this.size,\n color: this.color,\n });\n this.el.nativeElement.appendChild(prog);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Router, NavigationStart, NavigationEnd, NavigationCancel, NavigationError } from '@angular/router';\nimport { progressController } from '../core/progress';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class VeilRouterProgressService {\n constructor(private router: Router) {\n this.router.events.subscribe((event) => {\n if (event instanceof NavigationStart) {\n progressController.start();\n } else if (\n event instanceof NavigationEnd ||\n event instanceof NavigationCancel ||\n event instanceof NavigationError\n ) {\n progressController.done();\n }\n });\n }\n}\n","import { inject } from '@angular/core';\nimport { VeilService } from './service';\nimport { Observable } from 'rxjs';\nimport { finalize } from 'rxjs/operators';\n\n/**\n * Functional HTTP Interceptor for Angular 17+ (provideHttpClient(withInterceptors([veilHttpInterceptor])))\n */\nexport function veilHttpInterceptor(req: any, next: any): Observable<any> {\n const veilService = inject(VeilService);\n const id = veilService.start();\n\n return next(req).pipe(\n finalize(() => {\n veilService.stop(id);\n }),\n );\n}\n"]}
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';var S=require('fs'),L=require('path');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var S__default=/*#__PURE__*/_interopDefault(S);var L__default=/*#__PURE__*/_interopDefault(L);async function M(){let t=process.argv.slice(2),r=t[0];(!r||r==="--help"||r==="-h")&&(console.log(`
3
+ Veilkit CLI - Zero-Runtime Static Skeleton Capture
4
+
5
+ Usage:
6
+ npx veilkit capture <url> [options]
7
+
8
+ Options:
9
+ --out <file> Output file path (default: .veil.json)
10
+ --selector <sel> Target container CSS selector (default: body)
11
+ --width <px> Browser viewport width (default: 1280)
12
+ --height <px> Browser viewport height (default: 800)
13
+ --help, -h Show this help message
14
+
15
+ Example:
16
+ npx veilkit capture https://example.com/dashboard --out ./dashboard.veil.json
17
+ `),process.exit(0)),r!=="capture"&&(console.error(`Unknown command: "${r}". Try "npx veilkit capture --help"`),process.exit(1));let n=t[1];(!n||n.startsWith("--"))&&(console.error("Error: Please provide a URL to capture. Example: npx veilkit capture https://myapp.com"),process.exit(1));let p=".veil.json",l="body",d=1280,u=800;for(let e=2;e<t.length;e++)t[e]==="--out"&&t[e+1]?p=t[++e]:t[e]==="--selector"&&t[e+1]?l=t[++e]:t[e]==="--width"&&t[e+1]?d=parseInt(t[++e],10):t[e]==="--height"&&t[e+1]&&(u=parseInt(t[++e],10));console.log(`
18
+ \u{1F578}\uFE0F Veilkit Capture: Launching browser for ${n}...`);let g;try{g=await import('playwright');}catch{console.error(`
19
+ [Veilkit CLI] Playwright is required for headless layout capture.
20
+ Please run:
21
+ pnpm add -D playwright
22
+ and try again.
23
+ `),process.exit(1);}try{let e=await g.chromium.launch({headless:!0}),w=await e.newPage({viewport:{width:d,height:u}});console.log(`Navigating to ${n}...`),await w.goto(n,{waitUntil:"networkidle"}),console.log(`Analyzing leaf layouts on "${l}"...`);let f=await w.evaluate(b=>{let c=document.querySelector(b)||document.body,a=c.getBoundingClientRect(),y=[];function v(i){if(i.hasAttribute("data-veil-ignore"))return;let s=window.getComputedStyle(i);if(s.display==="none"||s.visibility==="hidden"||s.opacity==="0")return;let x=i.tagName.toLowerCase(),k=["img","svg","button","input"].includes(x)||Array.from(i.childNodes).some(o=>o.nodeType===Node.TEXT_NODE&&(o.textContent||"").trim().length>0)&&i.children.length===0;if(i!==c&&k){let o=i.getBoundingClientRect();if(o.width>2&&o.height>2){let h=s.borderRadius||"6px",C=h==="50%"||parseFloat(h)>=o.width/2?"circle":["p","span","h1","h2","h3"].includes(x)?"line":"rect";y.push({x:Math.round(o.left-a.left),y:Math.round(o.top-a.top),width:Math.round(o.width),height:Math.round(o.height),radius:h,shape:C});}return}for(let o of Array.from(i.children))v(o);}return v(c),{url:window.location.href,viewport:{width:window.innerWidth,height:window.innerHeight},container:{width:Math.round(a.width),height:Math.round(a.height)},boxes:y}},l);await e.close();let m=L__default.default.resolve(process.cwd(),p);S__default.default.writeFileSync(m,JSON.stringify(f,null,2),"utf8"),console.log(`\u2713 Successfully captured ${f.boxes.length} layout elements!`),console.log(`\u{1F4C1} Saved layout map to: ${m}
24
+ `);}catch(e){console.error("[Veilkit CLI] Capture failed:",e.message),process.exit(1);}}M();//# sourceMappingURL=index.cjs.map
25
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cli/index.ts"],"names":["run","args","command","targetUrl","outFile","selector","width","height","i","playwright","browser","page","layout","targetSelector","container","cRect","boxes","walk","el","style","tag","isLeaf","n","r","rad","shape","child","resolvedPath","path","fs","err"],"mappings":"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","file":"index.cjs","sourcesContent":["#!/usr/bin/env node\n\n/**\n * Veilkit CLI\n * `npx veilkit capture <url> [--out .veil.json] [--selector \"#app\"]`\n * Records real DOM layouts with Playwright into static .veil.json files for zero-runtime measurement\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nasync function run() {\n const args = process.argv.slice(2);\n const command = args[0];\n\n if (!command || command === '--help' || command === '-h') {\n console.log(`\nVeilkit CLI - Zero-Runtime Static Skeleton Capture\n\nUsage:\n npx veilkit capture <url> [options]\n\nOptions:\n --out <file> Output file path (default: .veil.json)\n --selector <sel> Target container CSS selector (default: body)\n --width <px> Browser viewport width (default: 1280)\n --height <px> Browser viewport height (default: 800)\n --help, -h Show this help message\n\nExample:\n npx veilkit capture https://example.com/dashboard --out ./dashboard.veil.json\n`);\n process.exit(0);\n }\n\n if (command !== 'capture') {\n console.error(`Unknown command: \"${command}\". Try \"npx veilkit capture --help\"`);\n process.exit(1);\n }\n\n const targetUrl = args[1];\n if (!targetUrl || targetUrl.startsWith('--')) {\n console.error('Error: Please provide a URL to capture. Example: npx veilkit capture https://myapp.com');\n process.exit(1);\n }\n\n let outFile = '.veil.json';\n let selector = 'body';\n let width = 1280;\n let height = 800;\n\n for (let i = 2; i < args.length; i++) {\n if (args[i] === '--out' && args[i + 1]) {\n outFile = args[++i]!;\n } else if (args[i] === '--selector' && args[i + 1]) {\n selector = args[++i]!;\n } else if (args[i] === '--width' && args[i + 1]) {\n width = parseInt(args[++i]!, 10);\n } else if (args[i] === '--height' && args[i + 1]) {\n height = parseInt(args[++i]!, 10);\n }\n }\n\n console.log(`\\n🕸️ Veilkit Capture: Launching browser for ${targetUrl}...`);\n\n let playwright: any;\n try {\n const pkgName = 'playwright';\n playwright = await import(/* @vite-ignore */ pkgName);\n } catch {\n console.error(`\n[Veilkit CLI] Playwright is required for headless layout capture.\nPlease run:\n pnpm add -D playwright\nand try again.\n`);\n process.exit(1);\n }\n\n try {\n const browser = await playwright.chromium.launch({ headless: true });\n const page = await browser.newPage({ viewport: { width, height } });\n\n console.log(`Navigating to ${targetUrl}...`);\n await page.goto(targetUrl, { waitUntil: 'networkidle' });\n\n console.log(`Analyzing leaf layouts on \"${selector}\"...`);\n const layout = await page.evaluate((targetSelector: string) => {\n const container = document.querySelector(targetSelector) || document.body;\n const cRect = container.getBoundingClientRect();\n const boxes: any[] = [];\n\n function walk(el: HTMLElement) {\n if (el.hasAttribute('data-veil-ignore')) return;\n const style = window.getComputedStyle(el);\n if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') return;\n\n const tag = el.tagName.toLowerCase();\n const isLeaf = ['img', 'svg', 'button', 'input'].includes(tag) ||\n (Array.from(el.childNodes).some((n) => n.nodeType === Node.TEXT_NODE && (n.textContent || '').trim().length > 0) && el.children.length === 0);\n\n if (el !== container && isLeaf) {\n const r = el.getBoundingClientRect();\n if (r.width > 2 && r.height > 2) {\n const rad = style.borderRadius || '6px';\n const shape = (rad === '50%' || parseFloat(rad) >= r.width / 2) ? 'circle' : (['p', 'span', 'h1', 'h2', 'h3'].includes(tag) ? 'line' : 'rect');\n boxes.push({\n x: Math.round(r.left - cRect.left),\n y: Math.round(r.top - cRect.top),\n width: Math.round(r.width),\n height: Math.round(r.height),\n radius: rad,\n shape,\n });\n }\n return;\n }\n\n for (const child of Array.from(el.children)) {\n walk(child as HTMLElement);\n }\n }\n\n walk(container as HTMLElement);\n\n return {\n url: window.location.href,\n viewport: { width: window.innerWidth, height: window.innerHeight },\n container: { width: Math.round(cRect.width), height: Math.round(cRect.height) },\n boxes,\n };\n }, selector);\n\n await browser.close();\n\n const resolvedPath = path.resolve(process.cwd(), outFile);\n fs.writeFileSync(resolvedPath, JSON.stringify(layout, null, 2), 'utf8');\n\n console.log(`✓ Successfully captured ${layout.boxes.length} layout elements!`);\n console.log(`📁 Saved layout map to: ${resolvedPath}\\n`);\n } catch (err: any) {\n console.error(`[Veilkit CLI] Capture failed:`, err.message);\n process.exit(1);\n }\n}\n\nrun();\n"]}
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env node
2
+ import S from'fs';import L from'path';async function M(){let t=process.argv.slice(2),r=t[0];(!r||r==="--help"||r==="-h")&&(console.log(`
3
+ Veilkit CLI - Zero-Runtime Static Skeleton Capture
4
+
5
+ Usage:
6
+ npx veilkit capture <url> [options]
7
+
8
+ Options:
9
+ --out <file> Output file path (default: .veil.json)
10
+ --selector <sel> Target container CSS selector (default: body)
11
+ --width <px> Browser viewport width (default: 1280)
12
+ --height <px> Browser viewport height (default: 800)
13
+ --help, -h Show this help message
14
+
15
+ Example:
16
+ npx veilkit capture https://example.com/dashboard --out ./dashboard.veil.json
17
+ `),process.exit(0)),r!=="capture"&&(console.error(`Unknown command: "${r}". Try "npx veilkit capture --help"`),process.exit(1));let n=t[1];(!n||n.startsWith("--"))&&(console.error("Error: Please provide a URL to capture. Example: npx veilkit capture https://myapp.com"),process.exit(1));let p=".veil.json",l="body",d=1280,u=800;for(let e=2;e<t.length;e++)t[e]==="--out"&&t[e+1]?p=t[++e]:t[e]==="--selector"&&t[e+1]?l=t[++e]:t[e]==="--width"&&t[e+1]?d=parseInt(t[++e],10):t[e]==="--height"&&t[e+1]&&(u=parseInt(t[++e],10));console.log(`
18
+ \u{1F578}\uFE0F Veilkit Capture: Launching browser for ${n}...`);let g;try{g=await import('playwright');}catch{console.error(`
19
+ [Veilkit CLI] Playwright is required for headless layout capture.
20
+ Please run:
21
+ pnpm add -D playwright
22
+ and try again.
23
+ `),process.exit(1);}try{let e=await g.chromium.launch({headless:!0}),w=await e.newPage({viewport:{width:d,height:u}});console.log(`Navigating to ${n}...`),await w.goto(n,{waitUntil:"networkidle"}),console.log(`Analyzing leaf layouts on "${l}"...`);let f=await w.evaluate(b=>{let c=document.querySelector(b)||document.body,a=c.getBoundingClientRect(),y=[];function v(i){if(i.hasAttribute("data-veil-ignore"))return;let s=window.getComputedStyle(i);if(s.display==="none"||s.visibility==="hidden"||s.opacity==="0")return;let x=i.tagName.toLowerCase(),k=["img","svg","button","input"].includes(x)||Array.from(i.childNodes).some(o=>o.nodeType===Node.TEXT_NODE&&(o.textContent||"").trim().length>0)&&i.children.length===0;if(i!==c&&k){let o=i.getBoundingClientRect();if(o.width>2&&o.height>2){let h=s.borderRadius||"6px",C=h==="50%"||parseFloat(h)>=o.width/2?"circle":["p","span","h1","h2","h3"].includes(x)?"line":"rect";y.push({x:Math.round(o.left-a.left),y:Math.round(o.top-a.top),width:Math.round(o.width),height:Math.round(o.height),radius:h,shape:C});}return}for(let o of Array.from(i.children))v(o);}return v(c),{url:window.location.href,viewport:{width:window.innerWidth,height:window.innerHeight},container:{width:Math.round(a.width),height:Math.round(a.height)},boxes:y}},l);await e.close();let m=L.resolve(process.cwd(),p);S.writeFileSync(m,JSON.stringify(f,null,2),"utf8"),console.log(`\u2713 Successfully captured ${f.boxes.length} layout elements!`),console.log(`\u{1F4C1} Saved layout map to: ${m}
24
+ `);}catch(e){console.error("[Veilkit CLI] Capture failed:",e.message),process.exit(1);}}M();//# sourceMappingURL=index.js.map
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cli/index.ts"],"names":["run","args","command","targetUrl","outFile","selector","width","height","i","playwright","browser","page","layout","targetSelector","container","cRect","boxes","walk","el","style","tag","isLeaf","n","r","rad","shape","child","resolvedPath","path","fs","err"],"mappings":"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","file":"index.js","sourcesContent":["#!/usr/bin/env node\n\n/**\n * Veilkit CLI\n * `npx veilkit capture <url> [--out .veil.json] [--selector \"#app\"]`\n * Records real DOM layouts with Playwright into static .veil.json files for zero-runtime measurement\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nasync function run() {\n const args = process.argv.slice(2);\n const command = args[0];\n\n if (!command || command === '--help' || command === '-h') {\n console.log(`\nVeilkit CLI - Zero-Runtime Static Skeleton Capture\n\nUsage:\n npx veilkit capture <url> [options]\n\nOptions:\n --out <file> Output file path (default: .veil.json)\n --selector <sel> Target container CSS selector (default: body)\n --width <px> Browser viewport width (default: 1280)\n --height <px> Browser viewport height (default: 800)\n --help, -h Show this help message\n\nExample:\n npx veilkit capture https://example.com/dashboard --out ./dashboard.veil.json\n`);\n process.exit(0);\n }\n\n if (command !== 'capture') {\n console.error(`Unknown command: \"${command}\". Try \"npx veilkit capture --help\"`);\n process.exit(1);\n }\n\n const targetUrl = args[1];\n if (!targetUrl || targetUrl.startsWith('--')) {\n console.error('Error: Please provide a URL to capture. Example: npx veilkit capture https://myapp.com');\n process.exit(1);\n }\n\n let outFile = '.veil.json';\n let selector = 'body';\n let width = 1280;\n let height = 800;\n\n for (let i = 2; i < args.length; i++) {\n if (args[i] === '--out' && args[i + 1]) {\n outFile = args[++i]!;\n } else if (args[i] === '--selector' && args[i + 1]) {\n selector = args[++i]!;\n } else if (args[i] === '--width' && args[i + 1]) {\n width = parseInt(args[++i]!, 10);\n } else if (args[i] === '--height' && args[i + 1]) {\n height = parseInt(args[++i]!, 10);\n }\n }\n\n console.log(`\\n🕸️ Veilkit Capture: Launching browser for ${targetUrl}...`);\n\n let playwright: any;\n try {\n const pkgName = 'playwright';\n playwright = await import(/* @vite-ignore */ pkgName);\n } catch {\n console.error(`\n[Veilkit CLI] Playwright is required for headless layout capture.\nPlease run:\n pnpm add -D playwright\nand try again.\n`);\n process.exit(1);\n }\n\n try {\n const browser = await playwright.chromium.launch({ headless: true });\n const page = await browser.newPage({ viewport: { width, height } });\n\n console.log(`Navigating to ${targetUrl}...`);\n await page.goto(targetUrl, { waitUntil: 'networkidle' });\n\n console.log(`Analyzing leaf layouts on \"${selector}\"...`);\n const layout = await page.evaluate((targetSelector: string) => {\n const container = document.querySelector(targetSelector) || document.body;\n const cRect = container.getBoundingClientRect();\n const boxes: any[] = [];\n\n function walk(el: HTMLElement) {\n if (el.hasAttribute('data-veil-ignore')) return;\n const style = window.getComputedStyle(el);\n if (style.display === 'none' || style.visibility === 'hidden' || style.opacity === '0') return;\n\n const tag = el.tagName.toLowerCase();\n const isLeaf = ['img', 'svg', 'button', 'input'].includes(tag) ||\n (Array.from(el.childNodes).some((n) => n.nodeType === Node.TEXT_NODE && (n.textContent || '').trim().length > 0) && el.children.length === 0);\n\n if (el !== container && isLeaf) {\n const r = el.getBoundingClientRect();\n if (r.width > 2 && r.height > 2) {\n const rad = style.borderRadius || '6px';\n const shape = (rad === '50%' || parseFloat(rad) >= r.width / 2) ? 'circle' : (['p', 'span', 'h1', 'h2', 'h3'].includes(tag) ? 'line' : 'rect');\n boxes.push({\n x: Math.round(r.left - cRect.left),\n y: Math.round(r.top - cRect.top),\n width: Math.round(r.width),\n height: Math.round(r.height),\n radius: rad,\n shape,\n });\n }\n return;\n }\n\n for (const child of Array.from(el.children)) {\n walk(child as HTMLElement);\n }\n }\n\n walk(container as HTMLElement);\n\n return {\n url: window.location.href,\n viewport: { width: window.innerWidth, height: window.innerHeight },\n container: { width: Math.round(cRect.width), height: Math.round(cRect.height) },\n boxes,\n };\n }, selector);\n\n await browser.close();\n\n const resolvedPath = path.resolve(process.cwd(), outFile);\n fs.writeFileSync(resolvedPath, JSON.stringify(layout, null, 2), 'utf8');\n\n console.log(`✓ Successfully captured ${layout.boxes.length} layout elements!`);\n console.log(`📁 Saved layout map to: ${resolvedPath}\\n`);\n } catch (err: any) {\n console.error(`[Veilkit CLI] Capture failed:`, err.message);\n process.exit(1);\n }\n}\n\nrun();\n"]}