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.
- package/CHANGELOG.md +29 -0
- package/LICENSE +21 -0
- package/README.md +245 -2
- package/dist/angular/index.cjs +394 -0
- package/dist/angular/index.cjs.map +1 -0
- package/dist/angular/index.d.cts +78 -0
- package/dist/angular/index.d.ts +78 -0
- package/dist/angular/index.js +394 -0
- package/dist/angular/index.js.map +1 -0
- package/dist/cli/index.cjs +25 -0
- package/dist/cli/index.cjs.map +1 -0
- package/dist/cli/index.d.cts +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +25 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/controller-5OzP0U8X.d.cts +193 -0
- package/dist/controller-Co5bvnaB.d.ts +193 -0
- package/dist/element/index.cjs +395 -0
- package/dist/element/index.cjs.map +1 -0
- package/dist/element/index.d.cts +42 -0
- package/dist/element/index.d.ts +42 -0
- package/dist/element/index.js +395 -0
- package/dist/element/index.js.map +1 -0
- package/dist/index.cjs +394 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +209 -0
- package/dist/index.d.ts +209 -0
- package/dist/index.js +394 -0
- package/dist/index.js.map +1 -0
- package/dist/native/index.cjs +2 -0
- package/dist/native/index.cjs.map +1 -0
- package/dist/native/index.d.cts +48 -0
- package/dist/native/index.d.ts +48 -0
- package/dist/native/index.js +2 -0
- package/dist/native/index.js.map +1 -0
- package/dist/react/index.cjs +394 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.cts +99 -0
- package/dist/react/index.d.ts +99 -0
- package/dist/react/index.js +394 -0
- package/dist/react/index.js.map +1 -0
- package/dist/styles.css +377 -0
- package/dist/svelte/index.cjs +394 -0
- package/dist/svelte/index.cjs.map +1 -0
- package/dist/svelte/index.d.cts +41 -0
- package/dist/svelte/index.d.ts +41 -0
- package/dist/svelte/index.js +394 -0
- package/dist/svelte/index.js.map +1 -0
- package/dist/themes/index.cjs +2 -0
- package/dist/themes/index.cjs.map +1 -0
- package/dist/themes/index.d.cts +18 -0
- package/dist/themes/index.d.ts +18 -0
- package/dist/themes/index.js +2 -0
- package/dist/themes/index.js.map +1 -0
- package/dist/types-Ciu5e5xt.d.cts +159 -0
- package/dist/types-Ciu5e5xt.d.ts +159 -0
- package/dist/veilkit.min.js +393 -0
- package/dist/vue/index.cjs +394 -0
- package/dist/vue/index.cjs.map +1 -0
- package/dist/vue/index.d.cts +366 -0
- package/dist/vue/index.d.ts +366 -0
- package/dist/vue/index.js +394 -0
- package/dist/vue/index.js.map +1 -0
- 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"]}
|