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/core/themes.ts","../../src/core/animations.ts","../../src/core/css.ts","../../src/core/sync.ts","../../src/core/observer.ts","../../src/core/primitives.ts","../../src/core/spinners.ts","../../src/core/progress.ts","../../src/core/a11y.ts","../../src/core/overlay.ts","../../src/core/button.ts","../../src/element/index.ts"],"names":["BUILTIN_THEMES","getAnimationKeyframesCSS","styleInjected","getStylesCSS","light","dark","name","t","injectStyles","nonce","css","effectiveNonce","sheet","styleEl","globalStartTime","getTimelineOrigin","getSyncDelay","durationMs","elapsed","parseDurationMs","duration","trimmed","intersectionObserver","observedElements","visibilityInitialized","handleIntersection","entries","entry","el","setupVisibilityObserver","observeOffscreen","element","createSkeletonElement","props","shape","durMs","key","val","createSkeletonParagraph","lines","container","gap","defaultWidths","lastWidth","i","width","lineEl","createSpinner","type","size","color","secondaryColor","ring","dot","bar","pulseCircle","nucleus","orbitRing","satellite","line","ball","spoke","orb","svg","bgCircle","meterCircle","injectSpinnerKeyframes","spinnerKeyframesInjected","style","createProgressElement","isCircular","trackColor","strokeWidth","track","meter","circumference","offset","text","height","DEFAULT_LABELS","currentLocale","customLabels","getLabel","applyA11yLoading","label","srNode","removeA11yLoading","activeOverlays","scrollLockOriginalOverflow","OverlayController","target","isFullscreen","overlay","blurVal","spinnerType","spinnerEl","msg","overlayController","wrapLoadingButton","buttonEl","originalWidth","originalHeight","originalContent","spinnerWrapper","textNode","setLoading","loading","loadingText","rect","spinner","node","VeilSkeletonElement","radius","animation","theme","VeilSpinnerElement","VeilProgressElement","value","circular","VeilOverlayElement","visible","message","blur","VeilLoadingButtonElement","btn","defineVeilElements"],"mappings":"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A;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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","file":"index.cjs","sourcesContent":["/**\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 - 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 - 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 - 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 - 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 - Loading Button Controller\n * Inline spinner, preserves exact button dimensions to prevent layout shifts,\n * disables clicks, and applies aria-disabled state.\n */\n\nimport { LoadingButtonProps } from './types';\nimport { createSpinner } from './spinners';\nimport { injectStyles } from './css';\n\nexport function wrapLoadingButton(\n buttonEl: HTMLButtonElement,\n props: LoadingButtonProps = {},\n): {\n setLoading: (loading: boolean, loadingText?: string) => void;\n destroy: () => void;\n} {\n injectStyles();\n\n let originalWidth: string = '';\n let originalHeight: string = '';\n let originalContent: Node[] = [];\n let spinnerWrapper: HTMLElement | null = null;\n let textNode: Text | null = null;\n\n function setLoading(loading: boolean, loadingText?: string) {\n if (loading) {\n if (!buttonEl.classList.contains('veil-btn-loading')) {\n const rect = buttonEl.getBoundingClientRect();\n originalWidth = buttonEl.style.width;\n originalHeight = buttonEl.style.height;\n\n // Lock button dimension to prevent layout shifts\n if (rect.width > 0) {\n buttonEl.style.width = `${rect.width}px`;\n }\n if (rect.height > 0) {\n buttonEl.style.height = `${rect.height}px`;\n }\n\n buttonEl.classList.add('veil-btn-loading');\n buttonEl.setAttribute('aria-disabled', 'true');\n buttonEl.setAttribute('aria-busy', 'true');\n\n if (props.spinnerPlacement === 'replace') {\n originalContent = Array.from(buttonEl.childNodes);\n buttonEl.innerHTML = '';\n const spinner = createSpinner({ type: props.spinner || 'ring', size: 18, color: 'currentColor' });\n buttonEl.appendChild(spinner);\n } else {\n // Prepend spinner\n spinnerWrapper = document.createElement('span');\n spinnerWrapper.className = 'veil-btn-spinner-wrap';\n const spinner = createSpinner({ type: props.spinner || 'ring', size: 16, color: 'currentColor' });\n spinnerWrapper.appendChild(spinner);\n buttonEl.insertBefore(spinnerWrapper, buttonEl.firstChild);\n\n if (loadingText || props.loadingText) {\n textNode = document.createTextNode(` ${loadingText || props.loadingText}`);\n buttonEl.appendChild(textNode);\n }\n }\n }\n } else {\n if (buttonEl.classList.contains('veil-btn-loading')) {\n buttonEl.classList.remove('veil-btn-loading');\n buttonEl.removeAttribute('aria-disabled');\n buttonEl.removeAttribute('aria-busy');\n\n buttonEl.style.width = originalWidth;\n buttonEl.style.height = originalHeight;\n\n if (props.spinnerPlacement === 'replace') {\n buttonEl.innerHTML = '';\n for (const node of originalContent) {\n buttonEl.appendChild(node);\n }\n originalContent = [];\n } else {\n if (spinnerWrapper) {\n spinnerWrapper.remove();\n spinnerWrapper = null;\n }\n if (textNode) {\n textNode.remove();\n textNode = null;\n }\n }\n }\n }\n }\n\n if (props.loading) {\n setLoading(true, props.loadingText);\n }\n\n return {\n setLoading,\n destroy: () => setLoading(false),\n };\n}\n","/**\n * Veilkit - Web Components & Custom Elements (`veilkit/element`)\n * Universal custom elements for Solid, Qwik, HTMX, Astro, Blade, plain HTML\n */\n\nimport { injectStyles } from '../core/css';\nimport { createSkeletonElement, createSkeletonParagraph } from '../core/primitives';\nimport { createSpinner } from '../core/spinners';\nimport { createProgressElement } from '../core/progress';\nimport { overlayController } from '../core/overlay';\nimport { wrapLoadingButton } from '../core/button';\nimport {\n VeilPrimitiveType,\n VeilAnimationName,\n VeilThemeName,\n VeilSpinnerType,\n} from '../core/types';\n\nexport class VeilSkeletonElement extends HTMLElement {\n static get observedAttributes() {\n return ['type', 'width', 'height', 'radius', 'lines', 'animation', 'theme', 'circle'];\n }\n\n connectedCallback() {\n injectStyles();\n this.render();\n }\n\n attributeChangedCallback() {\n this.render();\n }\n\n private render() {\n this.innerHTML = '';\n const type = (this.getAttribute('type') as VeilPrimitiveType) || 'rect';\n const lines = this.getAttribute('lines') ? parseInt(this.getAttribute('lines')!, 10) : undefined;\n const width = this.getAttribute('width') || undefined;\n const height = this.getAttribute('height') || undefined;\n const radius = this.getAttribute('radius') || undefined;\n const animation = (this.getAttribute('animation') as VeilAnimationName) || 'shimmer';\n const theme = (this.getAttribute('theme') as VeilThemeName) || 'light';\n const circle = this.hasAttribute('circle');\n\n const shape = circle ? 'circle' : type;\n\n const el = lines\n ? createSkeletonParagraph(lines, { width, animation, theme })\n : createSkeletonElement({\n type: shape,\n width,\n height,\n radius,\n animation,\n theme,\n });\n\n this.appendChild(el);\n }\n}\n\nexport class VeilSpinnerElement extends HTMLElement {\n static get observedAttributes() {\n return ['type', 'size', 'color'];\n }\n\n connectedCallback() {\n injectStyles();\n this.render();\n }\n\n attributeChangedCallback() {\n this.render();\n }\n\n private render() {\n this.innerHTML = '';\n const type = (this.getAttribute('type') as VeilSpinnerType) || 'ring';\n const size = this.getAttribute('size') || '28px';\n const color = this.getAttribute('color') || undefined;\n\n const el = createSpinner({ type, size, color });\n this.appendChild(el);\n }\n}\n\nexport class VeilProgressElement extends HTMLElement {\n static get observedAttributes() {\n return ['value', 'circular', 'size', 'color'];\n }\n\n connectedCallback() {\n injectStyles();\n this.render();\n }\n\n attributeChangedCallback() {\n this.render();\n }\n\n private render() {\n this.innerHTML = '';\n const value = this.getAttribute('value') ? parseFloat(this.getAttribute('value')!) : undefined;\n const circular = this.hasAttribute('circular');\n const size = this.getAttribute('size') || undefined;\n const color = this.getAttribute('color') || undefined;\n\n const el = createProgressElement({ value, circular, size, color });\n this.appendChild(el);\n }\n}\n\nexport class VeilOverlayElement extends HTMLElement {\n static get observedAttributes() {\n return ['visible', 'message', 'blur'];\n }\n\n connectedCallback() {\n injectStyles();\n this.update();\n }\n\n attributeChangedCallback() {\n this.update();\n }\n\n private update() {\n const visible = this.hasAttribute('visible') && this.getAttribute('visible') !== 'false';\n const message = this.getAttribute('message') || undefined;\n const blur = this.getAttribute('blur') !== 'false';\n\n if (visible) {\n overlayController.show(this, { message, blur });\n } else {\n overlayController.hide(this);\n }\n }\n\n disconnectedCallback() {\n overlayController.hide(this);\n }\n}\n\nexport class VeilLoadingButtonElement extends HTMLElement {\n private btnController: ReturnType<typeof wrapLoadingButton> | null = null;\n\n static get observedAttributes() {\n return ['loading', 'loading-text'];\n }\n\n connectedCallback() {\n injectStyles();\n const btn = this.querySelector('button');\n if (btn) {\n this.btnController = wrapLoadingButton(btn, {\n loading: this.hasAttribute('loading'),\n loadingText: this.getAttribute('loading-text') || undefined,\n });\n }\n }\n\n attributeChangedCallback(name: string) {\n if (name === 'loading' && this.btnController) {\n const loading = this.hasAttribute('loading') && this.getAttribute('loading') !== 'false';\n this.btnController.setLoading(loading, this.getAttribute('loading-text') || undefined);\n }\n }\n\n disconnectedCallback() {\n if (this.btnController) {\n this.btnController.destroy();\n this.btnController = null;\n }\n }\n}\n\n/**\n * Registers all Veilkit custom elements\n */\nexport function defineVeilElements(): void {\n if (typeof window === 'undefined' || typeof customElements === 'undefined') return;\n\n if (!customElements.get('veil-skeleton')) {\n customElements.define('veil-skeleton', VeilSkeletonElement);\n }\n if (!customElements.get('veil-spinner')) {\n customElements.define('veil-spinner', VeilSpinnerElement);\n }\n if (!customElements.get('veil-progress')) {\n customElements.define('veil-progress', VeilProgressElement);\n }\n if (!customElements.get('veil-overlay')) {\n customElements.define('veil-overlay', VeilOverlayElement);\n }\n if (!customElements.get('veil-loading-button')) {\n customElements.define('veil-loading-button', VeilLoadingButtonElement);\n }\n}\n\n// Auto-define when imported in a browser environment\nif (typeof window !== 'undefined') {\n defineVeilElements();\n}\n"]}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Veilkit - Web Components & Custom Elements (`veilkit/element`)
|
|
3
|
+
* Universal custom elements for Solid, Qwik, HTMX, Astro, Blade, plain HTML
|
|
4
|
+
*/
|
|
5
|
+
declare class VeilSkeletonElement extends HTMLElement {
|
|
6
|
+
static get observedAttributes(): string[];
|
|
7
|
+
connectedCallback(): void;
|
|
8
|
+
attributeChangedCallback(): void;
|
|
9
|
+
private render;
|
|
10
|
+
}
|
|
11
|
+
declare class VeilSpinnerElement extends HTMLElement {
|
|
12
|
+
static get observedAttributes(): string[];
|
|
13
|
+
connectedCallback(): void;
|
|
14
|
+
attributeChangedCallback(): void;
|
|
15
|
+
private render;
|
|
16
|
+
}
|
|
17
|
+
declare class VeilProgressElement extends HTMLElement {
|
|
18
|
+
static get observedAttributes(): string[];
|
|
19
|
+
connectedCallback(): void;
|
|
20
|
+
attributeChangedCallback(): void;
|
|
21
|
+
private render;
|
|
22
|
+
}
|
|
23
|
+
declare class VeilOverlayElement extends HTMLElement {
|
|
24
|
+
static get observedAttributes(): string[];
|
|
25
|
+
connectedCallback(): void;
|
|
26
|
+
attributeChangedCallback(): void;
|
|
27
|
+
private update;
|
|
28
|
+
disconnectedCallback(): void;
|
|
29
|
+
}
|
|
30
|
+
declare class VeilLoadingButtonElement extends HTMLElement {
|
|
31
|
+
private btnController;
|
|
32
|
+
static get observedAttributes(): string[];
|
|
33
|
+
connectedCallback(): void;
|
|
34
|
+
attributeChangedCallback(name: string): void;
|
|
35
|
+
disconnectedCallback(): void;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Registers all Veilkit custom elements
|
|
39
|
+
*/
|
|
40
|
+
declare function defineVeilElements(): void;
|
|
41
|
+
|
|
42
|
+
export { VeilLoadingButtonElement, VeilOverlayElement, VeilProgressElement, VeilSkeletonElement, VeilSpinnerElement, defineVeilElements };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Veilkit - Web Components & Custom Elements (`veilkit/element`)
|
|
3
|
+
* Universal custom elements for Solid, Qwik, HTMX, Astro, Blade, plain HTML
|
|
4
|
+
*/
|
|
5
|
+
declare class VeilSkeletonElement extends HTMLElement {
|
|
6
|
+
static get observedAttributes(): string[];
|
|
7
|
+
connectedCallback(): void;
|
|
8
|
+
attributeChangedCallback(): void;
|
|
9
|
+
private render;
|
|
10
|
+
}
|
|
11
|
+
declare class VeilSpinnerElement extends HTMLElement {
|
|
12
|
+
static get observedAttributes(): string[];
|
|
13
|
+
connectedCallback(): void;
|
|
14
|
+
attributeChangedCallback(): void;
|
|
15
|
+
private render;
|
|
16
|
+
}
|
|
17
|
+
declare class VeilProgressElement extends HTMLElement {
|
|
18
|
+
static get observedAttributes(): string[];
|
|
19
|
+
connectedCallback(): void;
|
|
20
|
+
attributeChangedCallback(): void;
|
|
21
|
+
private render;
|
|
22
|
+
}
|
|
23
|
+
declare class VeilOverlayElement extends HTMLElement {
|
|
24
|
+
static get observedAttributes(): string[];
|
|
25
|
+
connectedCallback(): void;
|
|
26
|
+
attributeChangedCallback(): void;
|
|
27
|
+
private update;
|
|
28
|
+
disconnectedCallback(): void;
|
|
29
|
+
}
|
|
30
|
+
declare class VeilLoadingButtonElement extends HTMLElement {
|
|
31
|
+
private btnController;
|
|
32
|
+
static get observedAttributes(): string[];
|
|
33
|
+
connectedCallback(): void;
|
|
34
|
+
attributeChangedCallback(name: string): void;
|
|
35
|
+
disconnectedCallback(): void;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Registers all Veilkit custom elements
|
|
39
|
+
*/
|
|
40
|
+
declare function defineVeilElements(): void;
|
|
41
|
+
|
|
42
|
+
export { VeilLoadingButtonElement, VeilOverlayElement, VeilProgressElement, VeilSkeletonElement, VeilSpinnerElement, defineVeilElements };
|