vanilla-breeze 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cdn/components/adr-record.js +383 -0
- package/dist/cdn/components/adr-wc.js +403 -0
- package/dist/cdn/components/analytics-panel.js +34 -0
- package/dist/cdn/components/author-index.js +3 -0
- package/dist/cdn/components/brand-mark.js +2 -0
- package/dist/cdn/components/calendar-wc.js +2 -2
- package/dist/cdn/components/carousel-wc.js +1 -1
- package/dist/cdn/components/chart-wc.js +25 -25
- package/dist/cdn/components/color-palette.js +13 -7
- package/dist/cdn/components/comment-wc.js +2 -0
- package/dist/cdn/components/consent-banner.js +1 -1
- package/dist/cdn/components/content-lens.js +2 -0
- package/dist/cdn/components/day-view.js +2 -0
- package/dist/cdn/components/empathy-map.js +42 -25
- package/dist/cdn/components/flow-diagram.js +2 -0
- package/dist/cdn/components/font-pairer.js +108 -0
- package/dist/cdn/components/gantt-chart.js +2 -0
- package/dist/cdn/components/geo-map.js +7 -7
- package/dist/cdn/components/glossary-wc.js +2 -0
- package/dist/cdn/components/gradient-builder.js +52 -0
- package/dist/cdn/components/highlight-wc.js +3 -0
- package/dist/cdn/components/manifest.json +134 -26
- package/dist/cdn/components/markdown-viewer.js +3 -3
- package/dist/cdn/components/motion-specimen.js +21 -0
- package/dist/cdn/components/note-wc.js +3 -0
- package/dist/cdn/components/notification-wc.js +37 -0
- package/dist/cdn/components/page-info.js +55 -24
- package/dist/cdn/components/page-toc.js +1 -1
- package/dist/cdn/components/popularity-index.js +9 -0
- package/dist/cdn/components/print-page.js +1 -1
- package/dist/cdn/components/recently-visited.js +3 -0
- package/dist/cdn/components/review-surface.js +541 -0
- package/dist/cdn/components/selection-menu.js +2 -0
- package/dist/cdn/components/semantic-palette.js +30 -0
- package/dist/cdn/components/settings-panel.js +55 -51
- package/dist/cdn/components/share-wc.js +2 -2
- package/dist/cdn/components/site-map-wc.js +2 -0
- package/dist/cdn/components/spacing-specimen.js +5 -5
- package/dist/cdn/components/split-surface.js +1 -1
- package/dist/cdn/components/text-reader.js +2 -2
- package/dist/cdn/components/theme-export.js +18 -0
- package/dist/cdn/components/theme-picker.js +58 -58
- package/dist/cdn/components/token-specimen.js +25 -20
- package/dist/cdn/components/topic-map.js +3 -0
- package/dist/cdn/components/trust-filter.js +4 -0
- package/dist/cdn/components/type-specimen.js +16 -13
- package/dist/cdn/components/user-journey.js +48 -30
- package/dist/cdn/components/user-persona.js +17 -15
- package/dist/cdn/components/user-story.js +55 -22
- package/dist/cdn/components/watch-wc.js +3 -0
- package/dist/cdn/components/week-view.js +2 -0
- package/dist/cdn/components/work-item.js +446 -0
- package/dist/cdn/packs/design-system.full.js +124 -47
- package/dist/cdn/packs/effects.full.js +1 -1
- package/dist/cdn/packs/kawaii.full.css +1 -1
- package/dist/cdn/packs/kawaii.full.js +1 -1
- package/dist/cdn/packs/kawaii.theme.css +1 -1
- package/dist/cdn/packs/manifest.json +10 -40
- package/dist/cdn/packs/prototype.full.js +1 -1
- package/dist/cdn/packs/ui.full.css +1 -1
- package/dist/cdn/packs/ui.full.js +50 -50
- package/dist/cdn/packs/ux-planning.full.css +1 -1
- package/dist/cdn/packs/ux-planning.full.js +1546 -92
- package/dist/cdn/themes/8bit.css +1 -1
- package/dist/cdn/themes/alpha1999.css +1 -1
- package/dist/cdn/themes/bauhaus.css +1 -1
- package/dist/cdn/themes/brutalist.css +1 -1
- package/dist/cdn/themes/claymorphism.css +1 -1
- package/dist/cdn/themes/cottagecore.css +1 -1
- package/dist/cdn/themes/cyber.css +1 -1
- package/dist/cdn/themes/genai.css +1 -1
- package/dist/cdn/themes/glassmorphism.css +1 -1
- package/dist/cdn/themes/kawaii.css +1 -1
- package/dist/cdn/themes/magna.css +1 -1
- package/dist/cdn/themes/manifest.json +20 -20
- package/dist/cdn/themes/nes.css +1 -1
- package/dist/cdn/themes/neumorphism.css +1 -1
- package/dist/cdn/themes/organic.css +1 -1
- package/dist/cdn/themes/rough.css +1 -1
- package/dist/cdn/themes/startup.css +1 -1
- package/dist/cdn/themes/super2026.css +1 -1
- package/dist/cdn/themes/terminal.css +1 -1
- package/dist/cdn/themes/vaporwave.css +1 -1
- package/dist/cdn/themes/win9x.css +1 -1
- package/dist/cdn/vanilla-breeze-charts.js +25 -25
- package/dist/cdn/vanilla-breeze-core.css +1 -1
- package/dist/cdn/vanilla-breeze-core.js +119 -47
- package/dist/cdn/vanilla-breeze-dev.js +1 -1
- package/dist/cdn/vanilla-breeze-extras.js +154 -74
- package/dist/cdn/vanilla-breeze.css +1 -1
- package/dist/cdn/vanilla-breeze.js +1988 -248
- package/package.json +8 -6
- package/dist/cdn/packs/retro.bundle.js +0 -2
- package/dist/cdn/packs/retro.components.js +0 -1
- package/dist/cdn/packs/retro.effects.css +0 -2
- package/dist/cdn/packs/retro.effects.js +0 -16
- package/dist/cdn/packs/retro.full.css +0 -5
- package/dist/cdn/packs/retro.full.js +0 -16
- package/dist/cdn/packs/retro.theme.css +0 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var De=Object.defineProperty;var oe=(t,e)=>()=>(t&&(e=t(t=0)),e);var ce=(t,e)=>{for(var a in e)De(t,a,{get:e[a],enumerable:!0})};var O={};ce(O,{destroyStickyManager:()=>Ne,initStickyManager:()=>je});function k(){let t=document.documentElement;if(!t.hasAttribute("data-sticky"))return;let e=document.querySelector("header");e&&!e.hasAttribute("data-sticky")&&(e.dataset.sticky="",j=!0);let a=document.querySelector("header[data-sticky]"),s=a?a.getBoundingClientRect().height:0;t.style.setProperty("--sticky-offset",`${s}px`)}function Ce(){k()}function je(){if(F)return;F=!0,k(),requestAnimationFrame(k),document.fonts?.ready?.then(k),window.addEventListener("resize",k,{passive:!0}),document.addEventListener("toggle",Ce,!0),W=new ResizeObserver(k);let t=document.querySelector("header[data-sticky]");t&&W.observe(t)}function Ne(){if(F){if(F=!1,window.removeEventListener("resize",k),document.removeEventListener("toggle",Ce,!0),W?.disconnect(),j){let t=document.querySelector("header[data-sticky]");t&&delete t.dataset.sticky,j=!1}document.documentElement.style.removeProperty("--sticky-offset")}}var F,W,j,D=oe(()=>{F=!1,j=!1});var Ae={};ce(Ae,{SoundManager:()=>ze});var Te,N,ze,Me=oe(()=>{Te="vb-sound",N={enabled:!1,volume:.5},ze={_ctx:null,_enabled:!1,_volume:.5,_initialized:!1,init(){if(this._initialized)return this;let t=this._load();return this._enabled=t.enabled,this._volume=t.volume,this._initialized=!0,this},_getContext(){return this._ctx||(this._ctx=new(window.AudioContext||window.webkitAudioContext)),this._ctx.state==="suspended"&&this._ctx.resume(),this._ctx},_load(){try{let t=localStorage.getItem(Te);return t?{...N,...JSON.parse(t)}:{...N}}catch{return{...N}}},_save(t){try{let e=this._load();localStorage.setItem(Te,JSON.stringify({...e,...t}))}catch{}},_playTone(t,e,a="sine"){if(!this._enabled)return;let s=this._getContext(),r=s.createOscillator(),n=s.createGain();r.connect(n),n.connect(s.destination),r.frequency.value=t,r.type=a,n.gain.value=this._volume*.3,r.start(),n.gain.exponentialRampToValueAtTime(.01,s.currentTime+e),r.stop(s.currentTime+e)},enable(){this._enabled=!0,this._save({enabled:!0}),this.play("click")},disable(){this._enabled=!1,this._save({enabled:!1})},toggle(){return this._enabled?this.disable():this.enable(),this._enabled},isEnabled(){return this._enabled},setVolume(t){this._volume=Math.max(0,Math.min(1,t)),this._save({volume:this._volume})},getVolume(){return this._volume},play(t){if(this._enabled)switch(t){case"click":this._playTone(800,.1);break;case"success":this._playTone(523,.1),setTimeout(()=>this._playTone(659,.1),100),setTimeout(()=>this._playTone(784,.15),200);break;case"error":this._playTone(200,.15,"sawtooth"),setTimeout(()=>this._playTone(180,.2,"sawtooth"),150);break;case"notification":this._playTone(880,.1),setTimeout(()=>this._playTone(1100,.15),100);break;case"soft":this._playTone(600,.05);break;case"tick":this._playTone(1200,.02,"square");break}},getState(){return{enabled:this._enabled,volume:this._volume}}}});var Ye=window.matchMedia("(prefers-reduced-motion: reduce)");var de=new Map;function le(t,e,a={}){let s=a.priority??10,r={impl:e,bundle:a.bundle,contract:a.contract,priority:s},n=de.get(t);if(customElements.get(t)){if(!n||n.priority>=s){n&&n.priority===s&&n.impl!==e&&console.warn(`[VB Bundle] Tag <${t}> already registered by "${n.bundle}" (priority ${n.priority}). Skipping "${a.bundle}".`);return}console.warn(`[VB Bundle] Tag <${t}> defined by "${n.bundle}" cannot be replaced (customElements.define is permanent). "${a.bundle}" has higher priority but arrived late.`);return}if(n&&n.priority>=s){n.priority===s&&console.warn(`[VB Bundle] Tag <${t}> already registered by "${n.bundle}". Skipping "${a.bundle}" (first wins at equal priority).`);return}de.set(t,r),customElements.define(t,e)}var M=class extends HTMLElement{#t=[];connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&this.setAttribute("data-upgraded","")}disconnectedCallback(){for(let e of this.#t)e();this.#t=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(e,a,s,r){e.addEventListener(a,s,r),this.#t.push(()=>e.removeEventListener(a,s,r))}setup(){}teardown(){}};var v=new Map,L=new Map;var he=null;function ue(){if(typeof window<"u"&&window.__VB_THEME_BASE)return String(window.__VB_THEME_BASE).replace(/\/$/,"");if(he)return he;if(typeof document<"u"){let t=document.querySelectorAll('script[src*="vanilla-breeze"]');for(let e of t){let a=e.getAttribute("src");if(a){let s=a.lastIndexOf("/");if(s!==-1)return a.slice(0,s)}}}return"/cdn"}var qe=new Set(["default","a11y-high-contrast","a11y-large-text","a11y-dyslexia","modern","minimal","classic"]),Le=new Set(["kawaii","retro","memphis"]);function I(t){return Le.has(t)}function Ie(t,e){return`${e}/themes/${t}.css`}function ge(t,e){if(!I(t))return Promise.resolve();if(L.has(t))return L.get(t);let a=import(`${e}/packs/${t}.full.js`).catch(()=>{});return L.set(t,a),a}function Re(t,e){let a=ue(),s=()=>{(I(e)||t.hasAttribute("data-vb-pack"))&&ge(e,a)};return t.getAttribute("data-vb-theme-state")==="error"?Promise.reject(new Error(`Failed to load theme: ${e}`)):t.getAttribute("data-vb-theme-state")==="ready"||t.sheet?(s(),Promise.resolve()):new Promise((r,n)=>{let i=()=>{t.setAttribute("data-vb-theme-state","ready"),u(),s(),r()},l=()=>{t.setAttribute("data-vb-theme-state","error"),v.delete(e),u(),n(new Error(`Failed to load theme: ${e}`))},u=()=>{t.removeEventListener("load",i),t.removeEventListener("error",l)};t.addEventListener("load",i,{once:!0}),t.addEventListener("error",l,{once:!0})})}async function R(t){if(!t||qe.has(t))return;if(v.has(t))return v.get(t);if(typeof document<"u"){let s=document.querySelector(`link[data-vb-theme="${t}"]`);if(s){let r=Re(s,t);return v.set(t,r),r}}let e=ue(),a=I(t)?Ve(t,e):He(t,e);return v.set(t,a),a}async function He(t,e){let a=Ie(t,e);return new Promise((s,r)=>{let n=document.querySelector(`link[data-vb-theme-preload="${t}"]`);n&&n.remove();let i=document.createElement("link");i.rel="stylesheet",i.href=a,i.setAttribute("data-vb-theme",t),i.setAttribute("data-vb-theme-state","loading"),i.onload=()=>{i.setAttribute("data-vb-theme-state","ready"),s()},i.onerror=()=>{i.setAttribute("data-vb-theme-state","error"),i.remove(),v.delete(t),r(new Error(`Failed to load theme: ${t}`))},document.head.appendChild(i)})}function Ve(t,e){let a=`${e}/themes/${t}.css`;return new Promise((s,r)=>{let n=document.querySelector(`link[data-vb-theme-preload="${t}"]`);n&&n.remove();let i=document.createElement("link");i.rel="stylesheet",i.href=a,i.setAttribute("data-vb-theme",t),i.setAttribute("data-vb-pack",t),i.setAttribute("data-vb-theme-state","loading"),i.onload=()=>{i.setAttribute("data-vb-theme-state","ready"),ge(t,e),s()},i.onerror=()=>{i.setAttribute("data-vb-theme-state","error"),i.remove(),v.delete(t),r(new Error(`Failed to load pack: ${t}`))},document.head.appendChild(i)})}var pe=[{id:"default",name:"Default",swatchBg:"#3b82f6",seeds:{}},{id:"ocean",name:"Ocean",swatchBg:"#0891b2",seeds:{"--hue-primary":200,"--hue-secondary":180,"--hue-accent":45,"--lightness-primary":"50%","--chroma-primary":.15,"--lightness-secondary":"45%","--chroma-secondary":.1,"--lightness-accent":"70%","--chroma-accent":.15},seedsDark:{"--lightness-primary":"60%","--chroma-primary":.12}},{id:"forest",name:"Forest",swatchBg:"#059669",seeds:{"--hue-primary":145,"--hue-secondary":90,"--hue-accent":30,"--lightness-primary":"45%","--chroma-primary":.15,"--lightness-secondary":"55%","--chroma-secondary":.12,"--lightness-accent":"65%","--chroma-accent":.16},seedsDark:{"--lightness-primary":"55%","--chroma-primary":.12}},{id:"sunset",name:"Sunset",swatchBg:"#ea580c",seeds:{"--hue-primary":25,"--hue-secondary":0,"--hue-accent":280,"--lightness-primary":"60%","--chroma-primary":.2,"--lightness-secondary":"55%","--chroma-secondary":.18,"--lightness-accent":"55%","--chroma-accent":.18},seedsDark:{"--lightness-primary":"65%","--chroma-primary":.16}},{id:"rose",name:"Rose",swatchBg:"#e11d48",seeds:{"--hue-primary":350,"--hue-secondary":330,"--hue-accent":200,"--lightness-primary":"55%","--chroma-primary":.18,"--lightness-secondary":"50%","--chroma-secondary":.14,"--lightness-accent":"60%","--chroma-accent":.12},seedsDark:{"--lightness-primary":"65%","--chroma-primary":.14}},{id:"lavender",name:"Lavender",swatchBg:"#a855f7",seeds:{"--hue-primary":280,"--hue-secondary":300,"--hue-accent":60,"--lightness-primary":"55%","--chroma-primary":.14,"--lightness-secondary":"50%","--chroma-secondary":.12,"--lightness-accent":"70%","--chroma-accent":.14},seedsDark:{"--lightness-primary":"65%","--chroma-primary":.12}},{id:"coral",name:"Coral",swatchBg:"#f97316",seeds:{"--hue-primary":15,"--hue-secondary":25,"--hue-accent":180,"--lightness-primary":"60%","--chroma-primary":.18,"--lightness-secondary":"55%","--chroma-secondary":.15,"--lightness-accent":"55%","--chroma-accent":.12},seedsDark:{"--lightness-primary":"65%","--chroma-primary":.15}},{id:"slate",name:"Slate",swatchBg:"#64748b",seeds:{"--hue-primary":220,"--hue-secondary":210,"--hue-accent":45,"--lightness-primary":"48%","--chroma-primary":.1,"--lightness-secondary":"45%","--chroma-secondary":.06,"--lightness-accent":"68%","--chroma-accent":.15},seedsDark:{"--lightness-primary":"60%","--chroma-primary":.08}},{id:"emerald",name:"Emerald",swatchBg:"#10b981",seeds:{"--hue-primary":160,"--hue-secondary":140,"--hue-accent":30,"--lightness-primary":"50%","--chroma-primary":.15,"--lightness-secondary":"48%","--chroma-secondary":.12,"--lightness-accent":"65%","--chroma-accent":.16},seedsDark:{"--lightness-primary":"60%","--chroma-primary":.12}},{id:"amber",name:"Amber",swatchBg:"#f59e0b",seeds:{"--hue-primary":45,"--hue-secondary":30,"--hue-accent":240,"--lightness-primary":"60%","--chroma-primary":.16,"--lightness-secondary":"55%","--chroma-secondary":.15,"--lightness-accent":"52%","--chroma-accent":.14},seedsDark:{"--lightness-primary":"68%","--chroma-primary":.14}},{id:"indigo",name:"Indigo",swatchBg:"#6366f1",seeds:{"--hue-primary":250,"--hue-secondary":270,"--hue-accent":35,"--lightness-primary":"48%","--chroma-primary":.18,"--lightness-secondary":"45%","--chroma-secondary":.14,"--lightness-accent":"68%","--chroma-accent":.16},seedsDark:{"--lightness-primary":"62%","--chroma-primary":.14}}],me=[{id:"modern",name:"Modern",hue:270,shape:"rounded",character:"Vibrant & elevated",swatchBg:"#6366f1",tier:"core"},{id:"minimal",name:"Minimal",hue:240,shape:"sharp",character:"Clean & flat",swatchBg:"#71717a",tier:"core"},{id:"classic",name:"Classic",hue:220,shape:"subtle",character:"Serif & elegant",swatchBg:"#92400e",tier:"core"}],H=[{id:"swiss",name:"Swiss",icon:"grid-3x3",character:"Precision grid",swatchBg:"#ff3e00",swatchFg:"white",tier:"showcase",category:"Design"},{id:"brutalist",name:"Brutalist",icon:"square",character:"Raw, industrial",swatchBg:"#1a1a1a",swatchFg:"#f5f5f5",tier:"showcase",category:"Design"},{id:"art-deco",name:"Art Deco",icon:"crown",character:"1920s luxury",swatchBg:"#1A1A1A",swatchFg:"#C9A84C",tier:"showcase",category:"Design"},{id:"editorial",name:"Editorial",icon:"newspaper",character:"Magazine elegance",swatchBg:"#1a1a1a",swatchFg:"#c9a227",tier:"showcase",category:"Content"},{id:"genai",name:"GenAI",icon:"sparkles",character:"AI aesthetic",swatchBg:"#1a0a2e",swatchFg:"#a855f7",tier:"showcase",category:"Modern"},{id:"glassmorphism",name:"Glass",icon:"glass-water",character:"Frosted surfaces",swatchBg:"#667eea",swatchFg:"#ffffff",tier:"showcase",category:"Modern"},{id:"startup",name:"Startup",icon:"rocket",character:"SaaS energy",swatchBg:"#4f46e5",swatchFg:"#ffffff",tier:"showcase",category:"Modern"},{id:"organic",name:"Organic",icon:"leaf",character:"Natural, handcrafted",swatchBg:"#2d5016",swatchFg:"#faf5e6",tier:"showcase",category:"Creative"},{id:"rough",name:"Rough",icon:"pencil",character:"Hand-drawn sketch",swatchBg:"#f5f0e8",swatchFg:"#3a3a3a",tier:"showcase",category:"Creative"},{id:"cyber",name:"Cyber",icon:"zap",character:"Neon futuristic",swatchBg:"#0a0a1a",swatchFg:"#00ff88",tier:"showcase",category:"Creative"},{id:"vaporwave",name:"Vaporwave",icon:"radio",character:"Neon dreamy",swatchBg:"#2b0040",swatchFg:"#ff6ad5",tier:"showcase",category:"Aesthetic"},{id:"neumorphism",name:"Neumorph",icon:"circle",character:"Soft embossed",swatchBg:"#e0e0e0",swatchFg:"#a0a0a0",tier:"showcase",category:"Aesthetic"},{id:"bauhaus",name:"Bauhaus",icon:"shapes",character:"Geometric",swatchBg:"#F1FAEE",swatchFg:"#E63946",tier:"showcase",category:"Aesthetic"},{id:"claymorphism",name:"Clay",icon:"circle-dot",character:"Puffy 3D",swatchBg:"#f0f0f5",swatchFg:"#FF6B9D",tier:"showcase",category:"Aesthetic"},{id:"alpha1999",name:"Alpha1999",icon:"orbit",character:"Space retro-fi",swatchBg:"#0a0a14",swatchFg:"#d4880f",tier:"showcase",category:"Signature"},{id:"super2026",name:"Super2026",icon:"triangle",character:"Supergraphic bold",swatchBg:"#f5f0e6",swatchFg:"#c23616",tier:"showcase",category:"Signature"},{id:"win9x",name:"Win9x",icon:"monitor",character:"Classic desktop",swatchBg:"#008080",swatchFg:"#c0c0c0",tier:"showcase",category:"OS Styles"},{id:"nes",name:"NES",icon:"joystick",character:"Console pixels",swatchBg:"#bcbcbc",swatchFg:"#e40521",tier:"showcase",category:"OS Styles"},{id:"8bit",name:"8-Bit",icon:"gamepad-2",character:"Retro pixel art",swatchBg:"#000080",swatchFg:"#ffff00",tier:"showcase",category:"OS Styles"},{id:"magna",name:"Magna",icon:"orbit",character:"Odyssey 2 retro",swatchBg:"#0d0b14",swatchFg:"#f97316",tier:"showcase",category:"OS Styles"}],V=[{id:"nord",name:"Nord",icon:"snowflake",character:"Arctic calm",swatchBg:"#2E3440",swatchFg:"#81A1C1",tier:"community",category:"Editor Palettes"},{id:"solarized",name:"Solarized",icon:"sun-dim",character:"Engineered precision",swatchBg:"#002B36",swatchFg:"#268BD2",tier:"community",category:"Editor Palettes"},{id:"dracula",name:"Dracula",icon:"moon-star",character:"Dark elegance",swatchBg:"#282A36",swatchFg:"#BD93F9",tier:"community",category:"Editor Palettes"},{id:"catppuccin-mocha",name:"Catppuccin",icon:"coffee",character:"Warm pastels",swatchBg:"#1E1E2E",swatchFg:"#CBA6F7",tier:"community",category:"Editor Palettes"},{id:"catppuccin-latte",name:"Ctp Latte",icon:"coffee",character:"Cozy daytime",swatchBg:"#eff1f5",swatchFg:"#8839ef",tier:"community",category:"Editor Palettes"},{id:"catppuccin-frappe",name:"Ctp Frapp\xE9",icon:"coffee",character:"Cool twilight",swatchBg:"#303446",swatchFg:"#ca9ee6",tier:"community",category:"Editor Palettes"},{id:"catppuccin-macchiato",name:"Ctp Macchiato",icon:"coffee",character:"Deep blue",swatchBg:"#24273a",swatchFg:"#c6a0f6",tier:"community",category:"Editor Palettes"},{id:"gruvbox",name:"Gruvbox",icon:"palette",character:"Retro warmth",swatchBg:"#282828",swatchFg:"#ebdbb2",tier:"community",category:"Editor Palettes"},{id:"tokyo-night",name:"Tokyo Night",icon:"moon",character:"Night-owl vibes",swatchBg:"#1a1b26",swatchFg:"#7aa2f7",tier:"community",category:"Editor Palettes"},{id:"rose-pine",name:"Ros\xE9 Pine",icon:"flower-2",character:"Muted elegance",swatchBg:"#191724",swatchFg:"#ebbcba",tier:"community",category:"Editor Palettes"},{id:"cottagecore",name:"Cottagecore",icon:"flower-2",character:"Pastoral",swatchBg:"#fdf8f0",swatchFg:"#7d8c6d",tier:"community",category:"Niche"},{id:"terminal",name:"Terminal",icon:"terminal",character:"Retro CRT",swatchBg:"#0d1117",swatchFg:"#00ff00",tier:"community",category:"Niche"},{id:"clinical",name:"Clinical",icon:"heart-pulse",character:"Sterile precision",swatchBg:"#ffffff",swatchFg:"#0077b6",tier:"community",category:"Industry"},{id:"financial",name:"Financial",icon:"landmark",character:"Navy + gold",swatchBg:"#1b2a4a",swatchFg:"#c9a84c",tier:"community",category:"Industry"},{id:"government",name:"Government",icon:"shield",character:"Official",swatchBg:"#002868",swatchFg:"#bf0a30",tier:"community",category:"Industry"},{id:"dawn",name:"Dawn",icon:"sunrise",character:"Golden morning",swatchBg:"#fef3e2",swatchFg:"#d4a574",tier:"community",category:"Mood/Time"},{id:"dusk",name:"Dusk",icon:"sunset",character:"Twilight",swatchBg:"#1a1b2e",swatchFg:"#e5a858",tier:"community",category:"Mood/Time"},{id:"midnight",name:"Midnight",icon:"moon",character:"Deep night",swatchBg:"#0d1117",swatchFg:"#58a6ff",tier:"community",category:"Mood/Time"},{id:"high-noon",name:"High Noon",icon:"sun",character:"Maximum bright",swatchBg:"#ffffff",swatchFg:"#e63946",tier:"community",category:"Mood/Time"}],ye=[{id:"kawaii",name:"Kawaii",icon:"heart",character:"Cute aesthetic",swatchBg:"#ffb7c5",swatchFg:"#ff69b4",tier:"showcase",category:"Packs"},{id:"retro",name:"Retro",icon:"tv",character:"CRT terminal",swatchBg:"#0a0a14",swatchFg:"#00ff66",tier:"showcase",category:"Packs"},{id:"memphis",name:"Memphis",icon:"star",character:"Bold patterns",swatchBg:"#FFF8F0",swatchFg:"#d03040",tier:"showcase",category:"Packs"}];var Ze=[...H,...V],et=[...me,...H,...V,...ye],w=t=>H.filter(e=>e.category===t),fe=[{label:"Style",themes:me,tier:"core"},{label:"Design",themes:w("Design"),tier:"showcase"},{label:"Content",themes:w("Content"),tier:"showcase"},{label:"Modern",themes:w("Modern"),tier:"showcase"},{label:"Creative",themes:w("Creative"),tier:"showcase"},{label:"Aesthetic",themes:w("Aesthetic"),tier:"showcase"},{label:"Signature",themes:w("Signature"),tier:"showcase"},{label:"OS Styles",themes:w("OS Styles"),tier:"showcase"},{label:"Packs",themes:ye,tier:"showcase"},{label:"More Themes",themes:V,tier:"community"}];var G="vb-theme",P={mode:"auto",brand:"default",accent:"default",borderStyle:"",iconSet:"",fluid:"",backdrop:"",backdropChrome:"",pageBgType:"",pageBgColor:"",pageBgGradStart:"",pageBgGradEnd:"",pageBgGradDir:""},be=["--hue-primary","--hue-secondary","--hue-accent","--lightness-primary","--chroma-primary","--lightness-secondary","--chroma-secondary","--lightness-accent","--chroma-accent"],d={_initPromise:null,async init(){return this._initPromise?this._initPromise:(this._initPromise=(async()=>{let t=this.load();try{await R(t.brand)}catch{t.brand="default"}return this.apply(t),this._watchSystemPreference(),t})(),this._initPromise)},load(){try{let t=localStorage.getItem(G);return t?{...P,...JSON.parse(t)}:{...P}}catch{return{...P}}},save(t){let a={...this.load(),...t};try{localStorage.setItem(G,JSON.stringify(a))}catch{}return a},apply({mode:t="auto",brand:e="default",borderStyle:a="",iconSet:s="",fluid:r="",backdrop:n="",backdropChrome:i="",pageBgType:l="",pageBgColor:u="",pageBgGradStart:p="",pageBgGradEnd:g="",pageBgGradDir:m=""}={}){let c=document.documentElement;c.dataset.mode=t==="auto"?this.getEffectiveMode():t;let _=(c.dataset.theme||"").split(" ").filter(x=>x.startsWith("a11y-")),h=e!=="default"?[e,..._]:[..._];h.length?c.dataset.theme=h.join(" "):delete c.dataset.theme;let f=a||this._readCSSHint("--theme-border-style");f&&f!=="clean"?c.dataset.borderStyle=f:delete c.dataset.borderStyle;let o=s||this._readCSSHint("--theme-icon-set");if(o&&o!=="lucide"?c.dataset.iconSet=o:delete c.dataset.iconSet,r?c.dataset.fluid=r:delete c.dataset.fluid,n?c.dataset.backdrop=n:delete c.dataset.backdrop,i&&i!=="card"?c.dataset.backdropChrome=i:delete c.dataset.backdropChrome,l==="color"&&u)c.style.setProperty("--page-bg-color",u),c.style.removeProperty("--page-bg-gradient");else if(l==="gradient"&&p&&g){let x=m||"to bottom";c.style.setProperty("--page-bg-gradient",`linear-gradient(${x}, ${p}, ${g})`),c.style.removeProperty("--page-bg-color")}else c.style.removeProperty("--page-bg-color"),c.style.removeProperty("--page-bg-gradient");let y=this.load().accent||"default";this._applyAccent(y),window.dispatchEvent(new CustomEvent("vb:theme-change",{detail:{mode:t,brand:e,accent:y,borderStyle:f,iconSet:o,fluid:r,backdrop:n,backdropChrome:i,pageBgType:l,effectiveMode:this.getEffectiveMode()}}))},setMode(t){let e=this.save({mode:t});this.apply(e)},async setBrand(t){try{await R(t)}catch(a){console.warn(`[VB] Theme "${t}" failed to load, using default`,a),t="default"}let e=this.save({brand:t});this.apply(e)},setAccent(t){let e=this.save({accent:t});this._applyAccent(t),window.dispatchEvent(new CustomEvent("vb:theme-change",{detail:{...this.getState()}}))},setBorderStyle(t){let e=this.save({borderStyle:t});this.apply(e)},setIconSet(t){let e=this.save({iconSet:t});this.apply(e)},setFluid(t){let e=this.save({fluid:t});this.apply(e)},setBackdrop(t){let e=this.save({backdrop:t});this.apply(e)},setBackdropChrome(t){let e=this.save({backdropChrome:t});this.apply(e)},setPageBg({type:t="",color:e="",gradStart:a="",gradEnd:s="",gradDir:r=""}={}){let n=this.save({pageBgType:t,pageBgColor:e,pageBgGradStart:a,pageBgGradEnd:s,pageBgGradDir:r});this.apply(n)},getEffectiveMode(){let{mode:t}=this.load();return t!=="auto"?t:window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"},getState(){let{mode:t,brand:e,accent:a,borderStyle:s,iconSet:r,fluid:n,backdrop:i,backdropChrome:l,pageBgType:u,pageBgColor:p,pageBgGradStart:g,pageBgGradEnd:m,pageBgGradDir:c}=this.load();return{mode:t,brand:e,accent:a,borderStyle:s,iconSet:r,fluid:n,backdrop:i,backdropChrome:l,pageBgType:u,pageBgColor:p,pageBgGradStart:g,pageBgGradEnd:m,pageBgGradDir:c,effectiveMode:this.getEffectiveMode()}},toggleMode(){let e=this.getEffectiveMode()==="dark"?"light":"dark";this.setMode(e)},reset(){try{localStorage.removeItem(G)}catch{}let t=document.documentElement;t.style.removeProperty("--page-bg-color"),t.style.removeProperty("--page-bg-gradient");for(let e of be)t.style.removeProperty(e);this.apply(P)},_readCSSHint(t){return getComputedStyle(document.documentElement).getPropertyValue(t).trim()},_applyAccent(t){let e=document.documentElement,a=pe.find(s=>s.id===t);for(let s of be)e.style.removeProperty(s);if(!(!a||!a.seeds||Object.keys(a.seeds).length===0)){for(let[s,r]of Object.entries(a.seeds))e.style.setProperty(s,String(r));if(a.seedsDark&&this.getEffectiveMode()==="dark")for(let[s,r]of Object.entries(a.seedsDark))e.style.setProperty(s,String(r))}},_watchSystemPreference(){window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",()=>{let e=this.load();e.mode==="auto"&&this.apply(e)})}};var ve="vb-environment",U={timeOfDay:!1,seasonal:!1},Ge=900*1e3;function S(t,e,a){return t+(e-t)*Math.min(1,Math.max(0,a))}var T={_timer:null,_baseHues:null,_timeOverride:null,_monthOverride:null,init(){let t=this.load();(t.timeOfDay||t.seasonal)&&(this._captureBaseHues(),this._update(),this._startLoop()),window.addEventListener("vb:theme-change",()=>{this._hasActiveSource()&&requestAnimationFrame(()=>{this._captureBaseHues(),this._update()})})},load(){try{let t=localStorage.getItem(ve);return t?{...U,...JSON.parse(t)}:{...U}}catch{return{...U}}},save(t){try{localStorage.setItem(ve,JSON.stringify(t))}catch{}return t},setTimeOverride(t){this._timeOverride=t,this._hasActiveSource()&&this._update()},setMonthOverride(t){this._monthOverride=t,this._hasActiveSource()&&this._update()},setSource(t,e){let a={...this.load(),[t]:e};this.save(a),e?(this._captureBaseHues(),this._update(),this._startLoop()):this._hasActiveSource(a)?this._update():(this._clearModifiers(),this._stopLoop())},_hasActiveSource(t){let e=t||this.load();return e.timeOfDay||e.seasonal},_captureBaseHues(){let t=document.documentElement;t.style.removeProperty("--hue-primary"),t.style.removeProperty("--hue-secondary"),t.style.removeProperty("--hue-accent");let e=t.getAttribute("data-theme");if(e){let a=`[data-theme~="${e}"]`;for(let s of document.styleSheets)try{for(let r=0;r<s.cssRules.length;r++){let n=s.cssRules[r];if(n.selectorText?.includes(a)&&!n.selectorText.includes("dark")){let i=n.style?.getPropertyValue("--hue-primary");if(i){this._baseHues={primary:parseFloat(i)||260,secondary:parseFloat(n.style.getPropertyValue("--hue-secondary"))||200,accent:parseFloat(n.style.getPropertyValue("--hue-accent"))||30};return}}}}catch{}}this._baseHues={primary:260,secondary:200,accent:30}},_update(){let t=this.load(),e=0;t.timeOfDay&&(e+=this._getTimeOfDayOffset()),t.seasonal&&(e+=this._getSeasonalOffset());let a=document.documentElement;e!==0&&this._baseHues?(a.style.setProperty("--hue-primary",String(this._baseHues.primary+e)),a.style.setProperty("--hue-secondary",String(this._baseHues.secondary+e)),a.style.setProperty("--hue-accent",String(this._baseHues.accent+e*.5))):e===0&&this._clearModifiers()},_clearModifiers(){let t=document.documentElement;t.style.removeProperty("--hue-primary"),t.style.removeProperty("--hue-secondary"),t.style.removeProperty("--hue-accent")},_getTimeOfDayOffset(){let t=this._timeOverride??new Date().getHours()+new Date().getMinutes()/60;return t<5?-20:t<7?S(-20,20,(t-5)/2):t<10?S(20,5,(t-7)/3):t<14?S(5,0,(t-10)/4):t<17?S(0,-5,(t-14)/3):t<19?S(-5,15,(t-17)/2):t<21?S(15,-10,(t-19)/2):S(-10,-20,(t-21)/8)},_getHemisphere(){return window.__VB_ENV_LOCATION?.hemisphere||"north"},_getSeasonalOffset(){let t=this._monthOverride??new Date().getMonth(),a=this._getHemisphere()==="south"?(t+6)%12:t;return a>=2&&a<=4?5:a>=5&&a<=7?10:a>=8&&a<=10?-5:-10},_startLoop(){this._timer||(this._timer=setInterval(()=>this._update(),Ge))},_stopLoop(){this._timer&&clearInterval(this._timer),this._timer=null}};var $=null;function Se(){return"0.1.0"}function Ue(){let t=document.querySelectorAll('script[src*="vanilla-breeze"]'),e="/cdn/sw.js";for(let a of t){let s=a.getAttribute("src");if(s){let r=s.lastIndexOf("/");if(r!==-1){e=s.slice(0,r)+"/sw.js";break}}}return e}function ke(){return $||($=navigator.serviceWorker?.ready??Promise.reject(new Error("SW not supported"))),$}function Ee(t){return new Promise((e,a)=>{navigator.serviceWorker?.controller?we(navigator.serviceWorker.controller,t,e,a):ke().then(s=>{let r=s.active||s.waiting||s.installing;r?we(r,t,e,a):a(new Error("No active service worker"))}).catch(a)})}function we(t,e,a,s){let r=new MessageChannel;r.port1.onmessage=n=>a(n.data),r.port1.onmessageerror=()=>s(new Error("Message error")),t.postMessage({type:e},[r.port2]),setTimeout(()=>s(new Error("SW message timeout")),5e3)}async function _e(){return Ee("GET_STATUS")}async function xe(){return Ee("CLEAR_CACHE")}async function Be(){let t=await ke();return await t.update(),{updated:!!t.waiting}}function We(){return typeof window>"u"||!("serviceWorker"in navigator)?!1:window.__VB_SERVICE_WORKER?!0:document.querySelector('meta[name="vb-service-worker"]')?.content==="true"}if(We()){let t=Ue();window.addEventListener("load",()=>{$=navigator.serviceWorker.register(t).catch(e=>{console.warn("[VB] Service worker registration failed:",e)})})}var B=null,z="vb-extensions",q={motionFx:!0,sounds:!1},Pe="vb-a11y-themes",K="vb-sticky",Y=class extends M{#t=null;#e=null;#a=!1;setup(){this.#B(),this.#T(),this.#r(),this.listen(window,"vb:theme-change",this.#h),this.listen(window,"vb:extensions-change",this.#h),this.listen(window,"vb:a11y-themes-change",this.#h)}teardown(){}#m(e){return e!==""&&e!==void 0}#o(e){return e==="compact"?"compact":e==="spacious"?"spacious":"default"}#y(e,a){return e?a==="compact"?"compact":a==="spacious"?"spacious":"default":""}#f(){try{return localStorage.getItem(K)==="on"}catch{return!1}}#b(e){return e!==""&&e!==void 0}#c(e){return e==="flush"?"flush":e==="elevated"?"elevated":"default"}#v(e,a){return e?a==="flush"?"flush":a==="elevated"?"elevated":"default":""}#d(e){if(!e)return"card";let a=e.split(/\s+/);for(let s of a)if(s==="stretch"||s==="integrated")return s;return"card"}#l(e){return e?e.split(/\s+/).includes("fixed"):!1}#w(e,a){let s=[];return e&&e!=="card"&&s.push(e),a&&s.push("fixed"),s.join(" ")||"card"}#B(){this.#t=this.querySelector(":scope > [data-trigger]")||this.querySelector(":scope > button"),this.#t||(this.#t=document.createElement("button"),this.#t.setAttribute("data-trigger",""),this.#t.setAttribute("aria-label","Site settings"),this.#t.className="settings-trigger",this.#t.innerHTML='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/></svg>',this.prepend(this.#t)),this.#t.setAttribute("aria-haspopup","dialog"),this.#t.setAttribute("aria-expanded","false"),this.#e=document.createElement("div"),this.#e.className="settings-panel",this.#e.setAttribute("role","dialog"),this.#e.setAttribute("aria-label","Site settings");let e=`settings-panel-${crypto.randomUUID().slice(0,8)}`;this.#e.id=e,this.#t.setAttribute("aria-controls",e),this.#e.innerHTML=this.#C(),this.appendChild(this.#e)}#C(){let{mode:e,brand:a,fluid:s,backdrop:r,backdropChrome:n,pageBgType:i,pageBgColor:l,pageBgGradStart:u,pageBgGradEnd:p,pageBgGradDir:g}=d.getState(),m=this.#n(),c=this.#i(),E=this.#m(s),_=this.#o(s),h=this.#b(r),f=this.#c(r);return`
|
|
1
|
+
var Ue=Object.defineProperty;var ge=(t,e)=>()=>(t&&(e=t(t=0)),e);var me=(t,e)=>{for(var a in e)Ue(t,a,{get:e[a],enumerable:!0})};var V={};me(V,{destroyStickyManager:()=>tt,initStickyManager:()=>et});function C(){let t=document.documentElement;if(!t.hasAttribute("data-sticky"))return;let e=document.querySelector("header");e&&!e.hasAttribute("data-sticky")&&(e.dataset.sticky="",Z=!0);let a=document.querySelector("header[data-sticky]"),s=a?a.getBoundingClientRect().height:0;t.style.setProperty("--sticky-offset",`${s}px`)}function Le(){C()}function et(){if(I)return;I=!0,C(),requestAnimationFrame(C),document.fonts?.ready?.then(C),window.addEventListener("resize",C,{passive:!0}),document.addEventListener("toggle",Le,!0),Q=new ResizeObserver(C);let t=document.querySelector("header[data-sticky]");t&&Q.observe(t)}function tt(){if(I){if(I=!1,window.removeEventListener("resize",C),document.removeEventListener("toggle",Le,!0),Q?.disconnect(),Z){let t=document.querySelector("header[data-sticky]");t&&delete t.dataset.sticky,Z=!1}document.documentElement.style.removeProperty("--sticky-offset")}}var I,Q,Z,G=ge(()=>{I=!1,Z=!1});var Re={};me(Re,{SoundManager:()=>at});var qe,ee,at,He=ge(()=>{qe="vb-sound",ee={enabled:!1,volume:.5},at={_ctx:null,_enabled:!1,_volume:.5,_initialized:!1,init(){if(this._initialized)return this;let t=this._load();return this._enabled=t.enabled,this._volume=t.volume,this._initialized=!0,this},_getContext(){return this._ctx||(this._ctx=new(window.AudioContext||window.webkitAudioContext)),this._ctx.state==="suspended"&&this._ctx.resume(),this._ctx},_load(){try{let t=localStorage.getItem(qe);return t?{...ee,...JSON.parse(t)}:{...ee}}catch{return{...ee}}},_save(t){try{let e=this._load();localStorage.setItem(qe,JSON.stringify({...e,...t}))}catch{}},_playTone(t,e,a="sine"){if(!this._enabled)return;let s=this._getContext(),r=s.createOscillator(),n=s.createGain();r.connect(n),n.connect(s.destination),r.frequency.value=t,r.type=a,n.gain.value=this._volume*.3,r.start(),n.gain.exponentialRampToValueAtTime(.01,s.currentTime+e),r.stop(s.currentTime+e)},enable(){this._enabled=!0,this._save({enabled:!0}),this.play("click")},disable(){this._enabled=!1,this._save({enabled:!1})},toggle(){return this._enabled?this.disable():this.enable(),this._enabled},isEnabled(){return this._enabled},setVolume(t){this._volume=Math.max(0,Math.min(1,t)),this._save({volume:this._volume})},getVolume(){return this._volume},play(t){if(this._enabled)switch(t){case"click":this._playTone(800,.1);break;case"success":this._playTone(523,.1),setTimeout(()=>this._playTone(659,.1),100),setTimeout(()=>this._playTone(784,.15),200);break;case"error":this._playTone(200,.15,"sawtooth"),setTimeout(()=>this._playTone(180,.2,"sawtooth"),150);break;case"notification":this._playTone(880,.1),setTimeout(()=>this._playTone(1100,.15),100);break;case"soft":this._playTone(600,.05);break;case"tick":this._playTone(1200,.02,"square");break}},getState(){return{enabled:this._enabled,volume:this._volume}}}});var rt=window.matchMedia("(prefers-reduced-motion: reduce)");var pe=new Map;function ye(t,e,a={}){let s=a.priority??10,r={impl:e,bundle:a.bundle,contract:a.contract,priority:s},n=pe.get(t);if(customElements.get(t)){if(!n||n.priority>=s){n&&n.priority===s&&n.impl!==e&&console.warn(`[VB Bundle] Tag <${t}> already registered by "${n.bundle}" (priority ${n.priority}). Skipping "${a.bundle}".`);return}console.warn(`[VB Bundle] Tag <${t}> defined by "${n.bundle}" cannot be replaced (customElements.define is permanent). "${a.bundle}" has higher priority but arrived late.`);return}if(n&&n.priority>=s){n.priority===s&&console.warn(`[VB Bundle] Tag <${t}> already registered by "${n.bundle}". Skipping "${a.bundle}" (first wins at equal priority).`);return}pe.set(t,r),customElements.define(t,e)}var L=class extends HTMLElement{#t=[];connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&this.setAttribute("data-upgraded","")}disconnectedCallback(){for(let e of this.#t)e();this.#t=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(e,a,s,r){e.addEventListener(a,s,r),this.#t.push(()=>e.removeEventListener(a,s,r))}setup(){}teardown(){}};var _=new Map,W=new Map;var fe=null;function be(){if(typeof window<"u"&&window.__VB_THEME_BASE)return String(window.__VB_THEME_BASE).replace(/\/$/,"");if(fe)return fe;if(typeof document<"u"){let t=document.querySelectorAll('script[src*="vanilla-breeze"]');for(let e of t){let a=e.getAttribute("src");if(a){let s=a.lastIndexOf("/");if(s!==-1)return a.slice(0,s)}}}return"/cdn"}var We=new Set(["default","a11y-high-contrast","a11y-large-text","a11y-dyslexia","modern","minimal","classic"]),je=new Set(["kawaii","memphis"]);function j(t){return je.has(t)}function ze(t,e){return`${e}/themes/${t}.css`}function we(t,e){if(!j(t))return Promise.resolve();if(W.has(t))return W.get(t);let a=import(`${e}/packs/${t}.full.js`).catch(()=>{});return W.set(t,a),a}function Ne(t,e){let a=be(),s=()=>{(j(e)||t.hasAttribute("data-vb-pack"))&&we(e,a)};return t.getAttribute("data-vb-theme-state")==="error"?Promise.reject(new Error(`Failed to load theme: ${e}`)):t.getAttribute("data-vb-theme-state")==="ready"||t.sheet?(s(),Promise.resolve()):new Promise((r,n)=>{let i=()=>{t.setAttribute("data-vb-theme-state","ready"),h(),s(),r()},c=()=>{t.setAttribute("data-vb-theme-state","error"),_.delete(e),h(),n(new Error(`Failed to load theme: ${e}`))},h=()=>{t.removeEventListener("load",i),t.removeEventListener("error",c)};t.addEventListener("load",i,{once:!0}),t.addEventListener("error",c,{once:!0})})}async function q(t){if(!t||We.has(t))return;if(_.has(t))return _.get(t);if(typeof document<"u"){let s=document.querySelector(`link[data-vb-theme="${t}"]`);if(s){let r=Ne(s,t);return _.set(t,r),r}}let e=be(),a=j(t)?Xe(t,e):Ke(t,e);return _.set(t,a),a}async function Ke(t,e){let a=ze(t,e);return new Promise((s,r)=>{let n=document.querySelector(`link[data-vb-theme-preload="${t}"]`);n&&n.remove();let i=document.createElement("link");i.rel="stylesheet",i.href=a,i.setAttribute("data-vb-theme",t),i.setAttribute("data-vb-theme-state","loading"),i.onload=()=>{i.setAttribute("data-vb-theme-state","ready"),s()},i.onerror=()=>{i.setAttribute("data-vb-theme-state","error"),i.remove(),_.delete(t),r(new Error(`Failed to load theme: ${t}`))},document.head.appendChild(i)})}function Xe(t,e){let a=`${e}/packs/${t}.theme.css`,s=`${e}/packs/${t}.effects.css`;return new Promise((r,n)=>{let i=document.querySelector(`link[data-vb-theme-preload="${t}"]`);i&&i.remove();let c=document.createElement("link");c.rel="stylesheet",c.href=a,c.setAttribute("data-vb-theme",t),c.setAttribute("data-vb-pack",t),c.setAttribute("data-vb-theme-state","loading"),c.onload=()=>{c.setAttribute("data-vb-theme-state","ready");let h=document.createElement("link");h.rel="stylesheet",h.href=s,h.setAttribute("data-vb-pack-effects",t),document.head.appendChild(h),we(t,e),r()},c.onerror=()=>{c.setAttribute("data-vb-theme-state","error"),c.remove(),_.delete(t),n(new Error(`Failed to load pack: ${t}`))},document.head.appendChild(c)})}var ve=[{id:"default",name:"Default",swatchBg:"#3b82f6",seeds:{}},{id:"ocean",name:"Ocean",swatchBg:"#0891b2",seeds:{"--hue-primary":200,"--hue-secondary":180,"--hue-accent":45,"--lightness-primary":"50%","--chroma-primary":.15,"--lightness-secondary":"45%","--chroma-secondary":.1,"--lightness-accent":"70%","--chroma-accent":.15},seedsDark:{"--lightness-primary":"60%","--chroma-primary":.12}},{id:"forest",name:"Forest",swatchBg:"#059669",seeds:{"--hue-primary":145,"--hue-secondary":90,"--hue-accent":30,"--lightness-primary":"45%","--chroma-primary":.15,"--lightness-secondary":"55%","--chroma-secondary":.12,"--lightness-accent":"65%","--chroma-accent":.16},seedsDark:{"--lightness-primary":"55%","--chroma-primary":.12}},{id:"sunset",name:"Sunset",swatchBg:"#ea580c",seeds:{"--hue-primary":25,"--hue-secondary":0,"--hue-accent":280,"--lightness-primary":"60%","--chroma-primary":.2,"--lightness-secondary":"55%","--chroma-secondary":.18,"--lightness-accent":"55%","--chroma-accent":.18},seedsDark:{"--lightness-primary":"65%","--chroma-primary":.16}},{id:"rose",name:"Rose",swatchBg:"#e11d48",seeds:{"--hue-primary":350,"--hue-secondary":330,"--hue-accent":200,"--lightness-primary":"55%","--chroma-primary":.18,"--lightness-secondary":"50%","--chroma-secondary":.14,"--lightness-accent":"60%","--chroma-accent":.12},seedsDark:{"--lightness-primary":"65%","--chroma-primary":.14}},{id:"lavender",name:"Lavender",swatchBg:"#a855f7",seeds:{"--hue-primary":280,"--hue-secondary":300,"--hue-accent":60,"--lightness-primary":"55%","--chroma-primary":.14,"--lightness-secondary":"50%","--chroma-secondary":.12,"--lightness-accent":"70%","--chroma-accent":.14},seedsDark:{"--lightness-primary":"65%","--chroma-primary":.12}},{id:"coral",name:"Coral",swatchBg:"#f97316",seeds:{"--hue-primary":15,"--hue-secondary":25,"--hue-accent":180,"--lightness-primary":"60%","--chroma-primary":.18,"--lightness-secondary":"55%","--chroma-secondary":.15,"--lightness-accent":"55%","--chroma-accent":.12},seedsDark:{"--lightness-primary":"65%","--chroma-primary":.15}},{id:"slate",name:"Slate",swatchBg:"#64748b",seeds:{"--hue-primary":220,"--hue-secondary":210,"--hue-accent":45,"--lightness-primary":"48%","--chroma-primary":.1,"--lightness-secondary":"45%","--chroma-secondary":.06,"--lightness-accent":"68%","--chroma-accent":.15},seedsDark:{"--lightness-primary":"60%","--chroma-primary":.08}},{id:"emerald",name:"Emerald",swatchBg:"#10b981",seeds:{"--hue-primary":160,"--hue-secondary":140,"--hue-accent":30,"--lightness-primary":"50%","--chroma-primary":.15,"--lightness-secondary":"48%","--chroma-secondary":.12,"--lightness-accent":"65%","--chroma-accent":.16},seedsDark:{"--lightness-primary":"60%","--chroma-primary":.12}},{id:"amber",name:"Amber",swatchBg:"#f59e0b",seeds:{"--hue-primary":45,"--hue-secondary":30,"--hue-accent":240,"--lightness-primary":"60%","--chroma-primary":.16,"--lightness-secondary":"55%","--chroma-secondary":.15,"--lightness-accent":"52%","--chroma-accent":.14},seedsDark:{"--lightness-primary":"68%","--chroma-primary":.14}},{id:"indigo",name:"Indigo",swatchBg:"#6366f1",seeds:{"--hue-primary":250,"--hue-secondary":270,"--hue-accent":35,"--lightness-primary":"48%","--chroma-primary":.18,"--lightness-secondary":"45%","--chroma-secondary":.14,"--lightness-accent":"68%","--chroma-accent":.16},seedsDark:{"--lightness-primary":"62%","--chroma-primary":.14}}],Se=[{id:"default",name:"Default",hue:210,shape:"balanced",character:"The default",swatchBg:"#3b82f6",tier:"core"},{id:"modern",name:"Modern",hue:270,shape:"rounded",character:"Vibrant & elevated",swatchBg:"#6366f1",tier:"core"},{id:"minimal",name:"Minimal",hue:240,shape:"sharp",character:"Clean & flat",swatchBg:"#71717a",tier:"core"},{id:"classic",name:"Classic",hue:220,shape:"subtle",character:"Serif & elegant",swatchBg:"#92400e",tier:"core"}],z=[{id:"swiss",name:"Swiss",icon:"grid-3x3",character:"Precision grid",swatchBg:"#ff3e00",swatchFg:"white",tier:"showcase",category:"Design"},{id:"brutalist",name:"Brutalist",icon:"square",character:"Raw, industrial",swatchBg:"#1a1a1a",swatchFg:"#f5f5f5",tier:"showcase",category:"Design"},{id:"art-deco",name:"Art Deco",icon:"crown",character:"1920s luxury",swatchBg:"#1A1A1A",swatchFg:"#C9A84C",tier:"showcase",category:"Design"},{id:"editorial",name:"Editorial",icon:"newspaper",character:"Magazine elegance",swatchBg:"#1a1a1a",swatchFg:"#c9a227",tier:"showcase",category:"Content"},{id:"genai",name:"GenAI",icon:"sparkles",character:"AI aesthetic",swatchBg:"#1a0a2e",swatchFg:"#a855f7",tier:"showcase",category:"Modern"},{id:"glassmorphism",name:"Glass",icon:"glass-water",character:"Frosted surfaces",swatchBg:"#667eea",swatchFg:"#ffffff",tier:"showcase",category:"Modern"},{id:"startup",name:"Startup",icon:"rocket",character:"SaaS energy",swatchBg:"#4f46e5",swatchFg:"#ffffff",tier:"showcase",category:"Modern"},{id:"organic",name:"Organic",icon:"leaf",character:"Natural, handcrafted",swatchBg:"#2d5016",swatchFg:"#faf5e6",tier:"showcase",category:"Creative"},{id:"rough",name:"Rough",icon:"pencil",character:"Hand-drawn sketch",swatchBg:"#f5f0e8",swatchFg:"#3a3a3a",tier:"showcase",category:"Creative"},{id:"cyber",name:"Cyber",icon:"zap",character:"Neon futuristic",swatchBg:"#0a0a1a",swatchFg:"#00ff88",tier:"showcase",category:"Creative"},{id:"vaporwave",name:"Vaporwave",icon:"radio",character:"Neon dreamy",swatchBg:"#2b0040",swatchFg:"#ff6ad5",tier:"showcase",category:"Aesthetic"},{id:"neumorphism",name:"Neumorph",icon:"circle",character:"Soft embossed",swatchBg:"#e0e0e0",swatchFg:"#a0a0a0",tier:"showcase",category:"Aesthetic"},{id:"bauhaus",name:"Bauhaus",icon:"shapes",character:"Geometric",swatchBg:"#F1FAEE",swatchFg:"#E63946",tier:"showcase",category:"Aesthetic"},{id:"claymorphism",name:"Clay",icon:"circle-dot",character:"Puffy 3D",swatchBg:"#f0f0f5",swatchFg:"#FF6B9D",tier:"showcase",category:"Aesthetic"},{id:"alpha1999",name:"Alpha1999",icon:"orbit",character:"Space retro-fi",swatchBg:"#0a0a14",swatchFg:"#d4880f",tier:"showcase",category:"Signature"},{id:"super2026",name:"Super2026",icon:"triangle",character:"Supergraphic bold",swatchBg:"#f5f0e6",swatchFg:"#c23616",tier:"showcase",category:"Signature"},{id:"magna",name:"Magna",icon:"orbit",character:"Odyssey 2 retro",swatchBg:"#0d0b14",swatchFg:"#f97316",tier:"showcase",category:"Signature"},{id:"win9x",name:"Win9x",icon:"monitor",character:"Classic desktop",swatchBg:"#008080",swatchFg:"#c0c0c0",tier:"showcase",category:"OS Styles"},{id:"nes",name:"NES",icon:"joystick",character:"Console pixels",swatchBg:"#bcbcbc",swatchFg:"#e40521",tier:"showcase",category:"OS Styles"},{id:"8bit",name:"8-Bit",icon:"gamepad-2",character:"Retro pixel art",swatchBg:"#000080",swatchFg:"#ffff00",tier:"showcase",category:"OS Styles"}],N=[{id:"nord",name:"Nord",icon:"snowflake",character:"Arctic calm",swatchBg:"#2E3440",swatchFg:"#81A1C1",tier:"community",category:"Editor Palettes"},{id:"solarized",name:"Solarized",icon:"sun-dim",character:"Engineered precision",swatchBg:"#002B36",swatchFg:"#268BD2",tier:"community",category:"Editor Palettes"},{id:"dracula",name:"Dracula",icon:"moon-star",character:"Dark elegance",swatchBg:"#282A36",swatchFg:"#BD93F9",tier:"community",category:"Editor Palettes"},{id:"catppuccin-mocha",name:"Catppuccin",icon:"coffee",character:"Warm pastels",swatchBg:"#1E1E2E",swatchFg:"#CBA6F7",tier:"community",category:"Editor Palettes"},{id:"catppuccin-latte",name:"Ctp Latte",icon:"coffee",character:"Cozy daytime",swatchBg:"#eff1f5",swatchFg:"#8839ef",tier:"community",category:"Editor Palettes"},{id:"catppuccin-frappe",name:"Ctp Frapp\xE9",icon:"coffee",character:"Cool twilight",swatchBg:"#303446",swatchFg:"#ca9ee6",tier:"community",category:"Editor Palettes"},{id:"catppuccin-macchiato",name:"Ctp Macchiato",icon:"coffee",character:"Deep blue",swatchBg:"#24273a",swatchFg:"#c6a0f6",tier:"community",category:"Editor Palettes"},{id:"gruvbox",name:"Gruvbox",icon:"palette",character:"Retro warmth",swatchBg:"#282828",swatchFg:"#ebdbb2",tier:"community",category:"Editor Palettes"},{id:"tokyo-night",name:"Tokyo Night",icon:"moon",character:"Night-owl vibes",swatchBg:"#1a1b26",swatchFg:"#7aa2f7",tier:"community",category:"Editor Palettes"},{id:"rose-pine",name:"Ros\xE9 Pine",icon:"flower-2",character:"Muted elegance",swatchBg:"#191724",swatchFg:"#ebbcba",tier:"community",category:"Editor Palettes"},{id:"cottagecore",name:"Cottagecore",icon:"flower-2",character:"Pastoral",swatchBg:"#fdf8f0",swatchFg:"#7d8c6d",tier:"community",category:"Niche"},{id:"terminal",name:"Terminal",icon:"terminal",character:"Retro CRT",swatchBg:"#0d1117",swatchFg:"#00ff00",tier:"community",category:"Niche"},{id:"clinical",name:"Clinical",icon:"heart-pulse",character:"Sterile precision",swatchBg:"#ffffff",swatchFg:"#0077b6",tier:"community",category:"Industry"},{id:"financial",name:"Financial",icon:"landmark",character:"Navy + gold",swatchBg:"#1b2a4a",swatchFg:"#c9a84c",tier:"community",category:"Industry"},{id:"government",name:"Government",icon:"shield",character:"Official",swatchBg:"#002868",swatchFg:"#bf0a30",tier:"community",category:"Industry"},{id:"dawn",name:"Dawn",icon:"sunrise",character:"Golden morning",swatchBg:"#fef3e2",swatchFg:"#d4a574",tier:"community",category:"Mood/Time"},{id:"dusk",name:"Dusk",icon:"sunset",character:"Twilight",swatchBg:"#1a1b2e",swatchFg:"#e5a858",tier:"community",category:"Mood/Time"},{id:"midnight",name:"Midnight",icon:"moon",character:"Deep night",swatchBg:"#0d1117",swatchFg:"#58a6ff",tier:"community",category:"Mood/Time"},{id:"high-noon",name:"High Noon",icon:"sun",character:"Maximum bright",swatchBg:"#ffffff",swatchFg:"#e63946",tier:"community",category:"Mood/Time"}],ke=[{id:"kawaii",name:"Kawaii",icon:"heart",character:"Cute aesthetic",swatchBg:"#ffb7c5",swatchFg:"#ff69b4",tier:"showcase",category:"Packs"},{id:"memphis",name:"Memphis",icon:"star",character:"Bold patterns",swatchBg:"#FFF8F0",swatchFg:"#d03040",tier:"showcase",category:"Packs"}];var ct=[...z,...N],dt=[...Se,...z,...N,...ke],x=t=>z.filter(e=>e.category===t),Ee=[{label:"Style",themes:Se,tier:"core"},{label:"Design",themes:x("Design"),tier:"showcase"},{label:"Content",themes:x("Content"),tier:"showcase"},{label:"Modern",themes:x("Modern"),tier:"showcase"},{label:"Creative",themes:x("Creative"),tier:"showcase"},{label:"Aesthetic",themes:x("Aesthetic"),tier:"showcase"},{label:"Signature",themes:x("Signature"),tier:"showcase"},{label:"OS Styles",themes:x("OS Styles"),tier:"showcase"},{label:"Packs",themes:ke,tier:"showcase"},{label:"More Themes",themes:N,tier:"community"}];function Ye(){let t=globalThis.localStorage;if(!t)throw new Error("VBStore: localStorage is not available in this environment");return{async getRaw(e){return t.getItem(e)},async setRaw(e,a){t.setItem(e,a)},async removeRaw(e){t.removeItem(e)},async keys(e){let a=[];for(let s=0;s<t.length;s++){let r=t.key(s);r&&r.startsWith(e)&&a.push(r)}return a}}}var R=null;function w(){return R||(R=Ye()),R}function K(t,e){if(typeof t!="string"||!t)throw new TypeError("VBStore: namespace must be a non-empty string");if(typeof e!="string"||!e)throw new TypeError("VBStore: key must be a non-empty string");return`vb:${t}:${e}`}function _e(t){if(typeof t!="string"||!t)throw new TypeError("VBStore: namespace must be a non-empty string");return`vb:${t}:`}function xe(t){try{let e=JSON.parse(t);if(e&&typeof e=="object"&&typeof e.timestamp=="number")return e}catch{}return null}var u={configure(t={}){R=t.backend??null},async set(t,e,a){let s={data:a,timestamp:Date.now()};await w().setRaw(K(t,e),JSON.stringify(s))},async get(t,e,a){let s=await w().getRaw(K(t,e));if(s==null)return null;let r=xe(s);return!r||a?.maxAge!=null&&Date.now()-r.timestamp>a.maxAge?null:r.data},async remove(t,e){await w().removeRaw(K(t,e))},async list(t){let e=_e(t),a=await w().keys(e),s=[];for(let r of a){let n=await w().getRaw(r);if(n==null)continue;let i=xe(n);i&&s.push({key:r.slice(e.length),data:i.data,timestamp:i.timestamp})}return s},async clear(t){let e=_e(t),a=await w().keys(e);for(let s of a)await w().removeRaw(s)},async clearAll(){let t=await w().keys("vb:");for(let e of t)await w().removeRaw(e)},async setMany(t,e){for(let[a,s]of e)await u.set(t,a,s)}};var X="theme",Y="current",P={mode:"auto",brand:"default",accent:"default",borderStyle:"",iconSet:"",fluid:"",backdrop:"",backdropChrome:"",pageBgType:"",pageBgColor:"",pageBgGradStart:"",pageBgGradEnd:"",pageBgGradDir:""},Be=["--hue-primary","--hue-secondary","--hue-accent","--lightness-primary","--chroma-primary","--lightness-secondary","--chroma-secondary","--lightness-accent","--chroma-accent"],g=null,l={_initPromise:null,async init(){return this._initPromise?this._initPromise:(this._initPromise=(async()=>{let t=await u.get(X,Y);g=t?{...P,...t}:{...P};try{await q(g.brand)}catch{g.brand="default"}return this.apply(g),this._watchSystemPreference(),this._watchRootAttributes(),g})(),this._initPromise)},load(){return g?{...g}:{...P}},save(t){let e={...g??P,...t};return g=e,u.set(X,Y,e).catch(()=>{}),e},apply({mode:t="auto",brand:e="default",borderStyle:a="",iconSet:s="",fluid:r="",backdrop:n="",backdropChrome:i="",pageBgType:c="",pageBgColor:h="",pageBgGradStart:y="",pageBgGradEnd:p="",pageBgGradDir:f=""}={}){let d=document.documentElement;d.dataset.mode=t==="auto"?this.getEffectiveMode():t;let A=(d.dataset.theme||"").split(" ").filter(M=>M.startsWith("a11y-")),m=e!=="default"?[e,...A]:[...A];m.length?d.dataset.theme=m.join(" "):delete d.dataset.theme;let v=a||this._readCSSHint("--theme-border-style");v&&v!=="clean"?d.dataset.borderStyle=v:delete d.dataset.borderStyle;let o=s||this._readCSSHint("--theme-icon-set");if(o&&o!=="lucide"?d.dataset.iconSet=o:delete d.dataset.iconSet,r?d.dataset.fluid=r:delete d.dataset.fluid,n?d.dataset.backdrop=n:delete d.dataset.backdrop,i&&i!=="card"?d.dataset.backdropChrome=i:delete d.dataset.backdropChrome,c==="color"&&h)d.style.setProperty("--page-bg-color",h),d.style.removeProperty("--page-bg-gradient");else if(c==="gradient"&&y&&p){let M=f||"to bottom";d.style.setProperty("--page-bg-gradient",`linear-gradient(${M}, ${y}, ${p})`),d.style.removeProperty("--page-bg-color")}else d.style.removeProperty("--page-bg-color"),d.style.removeProperty("--page-bg-gradient");let b=this.load().accent||"default";this._applyAccent(b),window.dispatchEvent(new CustomEvent("vb:theme-change",{detail:{mode:t,brand:e,accent:b,borderStyle:v,iconSet:o,fluid:r,backdrop:n,backdropChrome:i,pageBgType:c,effectiveMode:this.getEffectiveMode()}}))},setMode(t){let e=this.save({mode:t});this.apply(e)},async setBrand(t){try{await q(t)}catch(a){console.warn(`[VB] Theme "${t}" failed to load, using default`,a),t="default"}let e=this.save({brand:t});this.apply(e)},setAccent(t){this.save({accent:t}),this._applyAccent(t),window.dispatchEvent(new CustomEvent("vb:theme-change",{detail:{...this.getState()}}))},setBorderStyle(t){let e=this.save({borderStyle:t});this.apply(e)},setIconSet(t){let e=this.save({iconSet:t});this.apply(e)},setFluid(t){let e=this.save({fluid:t});this.apply(e)},setBackdrop(t){let e=this.save({backdrop:t});this.apply(e)},setBackdropChrome(t){let e=this.save({backdropChrome:t});this.apply(e)},setPageBg({type:t="",color:e="",gradStart:a="",gradEnd:s="",gradDir:r=""}={}){let n=this.save({pageBgType:t,pageBgColor:e,pageBgGradStart:a,pageBgGradEnd:s,pageBgGradDir:r});this.apply(n)},getEffectiveMode(){let{mode:t}=this.load();return t!=="auto"?t:window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"},getState(){let{mode:t,brand:e,accent:a,borderStyle:s,iconSet:r,fluid:n,backdrop:i,backdropChrome:c,pageBgType:h,pageBgColor:y,pageBgGradStart:p,pageBgGradEnd:f,pageBgGradDir:d}=this.load();return{mode:t,brand:e,accent:a,borderStyle:s,iconSet:r,fluid:n,backdrop:i,backdropChrome:c,pageBgType:h,pageBgColor:y,pageBgGradStart:p,pageBgGradEnd:f,pageBgGradDir:d,effectiveMode:this.getEffectiveMode()}},toggleMode(){let e=this.getEffectiveMode()==="dark"?"light":"dark";this.setMode(e)},reset(){g={...P},u.remove(X,Y).catch(()=>{});let t=document.documentElement;t.style.removeProperty("--page-bg-color"),t.style.removeProperty("--page-bg-gradient");for(let e of Be)t.style.removeProperty(e);this.apply(P)},_readCSSHint(t){return getComputedStyle(document.documentElement).getPropertyValue(t).trim()},_applyAccent(t){let e=document.documentElement,a=ve.find(s=>s.id===t);for(let s of Be)e.style.removeProperty(s);if(!(!a||!a.seeds||Object.keys(a.seeds).length===0)){for(let[s,r]of Object.entries(a.seeds))e.style.setProperty(s,String(r));if(a.seedsDark&&this.getEffectiveMode()==="dark")for(let[s,r]of Object.entries(a.seedsDark))e.style.setProperty(s,String(r))}},_watchRootAttributes(){this._rootObserver||(this._rootObserver=new MutationObserver(t=>{for(let e of t)e.attributeName==="data-theme"?this._syncFromDataTheme():e.attributeName==="data-mode"&&this._syncFromDataMode()}),this._rootObserver.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme","data-mode"]}))},_syncFromDataTheme(){if(!g)return;let a=(document.documentElement.dataset.theme||"").split(/\s+/).filter(Boolean).find(s=>!s.startsWith("a11y-"))||"default";a!==g.brand&&(g.brand=a,q(a).catch(()=>{}),window.dispatchEvent(new CustomEvent("vb:theme-change",{detail:{...this.getState()}})))},_syncFromDataMode(){if(!g)return;let t=document.documentElement.dataset.mode||"auto",e=g.mode==="auto"?this.getEffectiveMode():g.mode;t!==e&&(g.mode=t,window.dispatchEvent(new CustomEvent("vb:theme-change",{detail:{...this.getState()}})))},_watchSystemPreference(){window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",()=>{let e=this.load();e.mode==="auto"&&this.apply(e)})}};var Ce="environment",Te="preferences",J={timeOfDay:!1,seasonal:!1},Je=900*1e3,k={...J};function B(t,e,a){return t+(e-t)*Math.min(1,Math.max(0,a))}var O={_timer:null,_baseHues:null,_timeOverride:null,_monthOverride:null,async init(){let t=await u.get(Ce,Te);k=t?{...J,...t}:{...J},(k.timeOfDay||k.seasonal)&&(this._captureBaseHues(),this._update(),this._startLoop()),window.addEventListener("vb:theme-change",()=>{this._hasActiveSource()&&requestAnimationFrame(()=>{this._captureBaseHues(),this._update()})})},load(){return{...k}},save(t){return k={...k,...t},u.set(Ce,Te,k).catch(()=>{}),{...k}},setTimeOverride(t){this._timeOverride=t,this._hasActiveSource()&&this._update()},setMonthOverride(t){this._monthOverride=t,this._hasActiveSource()&&this._update()},setSource(t,e){let a=this.save({[t]:e});e?(this._captureBaseHues(),this._update(),this._startLoop()):this._hasActiveSource(a)?this._update():(this._clearModifiers(),this._stopLoop())},_hasActiveSource(t){let e=t||this.load();return e.timeOfDay||e.seasonal},_captureBaseHues(){let t=document.documentElement;t.style.removeProperty("--hue-primary"),t.style.removeProperty("--hue-secondary"),t.style.removeProperty("--hue-accent");let e=t.getAttribute("data-theme");if(e){let a=`[data-theme~="${e}"]`;for(let s of document.styleSheets)try{for(let r=0;r<s.cssRules.length;r++){let n=s.cssRules[r];if(n.selectorText?.includes(a)&&!n.selectorText.includes("dark")){let i=n.style?.getPropertyValue("--hue-primary");if(i){this._baseHues={primary:parseFloat(i)||260,secondary:parseFloat(n.style.getPropertyValue("--hue-secondary"))||200,accent:parseFloat(n.style.getPropertyValue("--hue-accent"))||30};return}}}}catch{}}this._baseHues={primary:260,secondary:200,accent:30}},_update(){let t=this.load(),e=0;t.timeOfDay&&(e+=this._getTimeOfDayOffset()),t.seasonal&&(e+=this._getSeasonalOffset());let a=document.documentElement;e!==0&&this._baseHues?(a.style.setProperty("--hue-primary",String(this._baseHues.primary+e)),a.style.setProperty("--hue-secondary",String(this._baseHues.secondary+e)),a.style.setProperty("--hue-accent",String(this._baseHues.accent+e*.5))):e===0&&this._clearModifiers()},_clearModifiers(){let t=document.documentElement;t.style.removeProperty("--hue-primary"),t.style.removeProperty("--hue-secondary"),t.style.removeProperty("--hue-accent")},_getTimeOfDayOffset(){let t=this._timeOverride??new Date().getHours()+new Date().getMinutes()/60;return t<5?-20:t<7?B(-20,20,(t-5)/2):t<10?B(20,5,(t-7)/3):t<14?B(5,0,(t-10)/4):t<17?B(0,-5,(t-14)/3):t<19?B(-5,15,(t-17)/2):t<21?B(15,-10,(t-19)/2):B(-10,-20,(t-21)/8)},_getHemisphere(){return window.__VB_ENV_LOCATION?.hemisphere||"north"},_getSeasonalOffset(){let t=this._monthOverride??new Date().getMonth(),a=this._getHemisphere()==="south"?(t+6)%12:t;return a>=2&&a<=4?5:a>=5&&a<=7?10:a>=8&&a<=10?-5:-10},_startLoop(){this._timer||(this._timer=setInterval(()=>this._update(),Je))},_stopLoop(){this._timer&&clearInterval(this._timer),this._timer=null}};var H=null;function Me(){return"0.1.2-9bbc11a4"}function Qe(){let t=document.querySelectorAll('script[src*="vanilla-breeze"]'),e="/cdn/sw.js";for(let a of t){let s=a.getAttribute("src");if(s){let r=s.lastIndexOf("/");if(r!==-1){e=s.slice(0,r)+"/sw.js";break}}}return e}function Pe(){return H||(H=navigator.serviceWorker?.ready??Promise.reject(new Error("SW not supported"))),H}function Fe(t){return new Promise((e,a)=>{navigator.serviceWorker?.controller?Ae(navigator.serviceWorker.controller,t,e,a):Pe().then(s=>{let r=s.active||s.waiting||s.installing;r?Ae(r,t,e,a):a(new Error("No active service worker"))}).catch(a)})}function Ae(t,e,a,s){let r=new MessageChannel;r.port1.onmessage=n=>a(n.data),r.port1.onmessageerror=()=>s(new Error("Message error")),t.postMessage({type:e},[r.port2]),setTimeout(()=>s(new Error("SW message timeout")),5e3)}async function $e(){return Fe("GET_STATUS")}async function Oe(){return Fe("CLEAR_CACHE")}async function De(){let t=await Pe();return await t.update(),{updated:!!t.waiting}}function Ze(){return typeof window>"u"||!("serviceWorker"in navigator)?!1:window.__VB_SERVICE_WORKER?!0:document.querySelector('meta[name="vb-service-worker"]')?.content==="true"}if(Ze()){let t=Qe();window.addEventListener("load",()=>{H=navigator.serviceWorker.register(t).catch(e=>{console.warn("[VB] Service worker registration failed:",e)})})}var F=null,E="settings",U={motionFx:!0,sounds:!1},te=class extends L{#t=null;#e=null;#a=!1;#r=[];#s={...U};#n=!1;async setup(){await this.#A(),this.#M(),this.#F(),this.#o(),this.listen(window,"vb:theme-change",this.#g),this.listen(window,"vb:extensions-change",this.#g),this.listen(window,"vb:a11y-themes-change",this.#g)}teardown(){}async#A(){let[e,a,s]=await Promise.all([u.get(E,"a11y"),u.get(E,"extensions"),u.get(E,"sticky")]);this.#r=Array.isArray(e)?e:[],this.#s={...U,...a??{}},this.#n=s==="on"}#b(e){return e!==""&&e!==void 0}#d(e){return e==="compact"?"compact":e==="spacious"?"spacious":"default"}#w(e,a){return e?a==="compact"?"compact":a==="spacious"?"spacious":"default":""}#v(){return this.#n}#S(e){return e!==""&&e!==void 0}#l(e){return e==="flush"?"flush":e==="elevated"?"elevated":"default"}#k(e,a){return e?a==="flush"?"flush":a==="elevated"?"elevated":"default":""}#h(e){if(!e)return"card";let a=e.split(/\s+/);for(let s of a)if(s==="stretch"||s==="integrated")return s;return"card"}#u(e){return e?e.split(/\s+/).includes("fixed"):!1}#E(e,a){let s=[];return e&&e!=="card"&&s.push(e),a&&s.push("fixed"),s.join(" ")||"card"}#M(){this.#t=this.querySelector(":scope > [data-trigger]")||this.querySelector(":scope > button"),this.#t||(this.#t=document.createElement("button"),this.#t.setAttribute("data-trigger",""),this.#t.setAttribute("aria-label","Site settings"),this.#t.className="settings-trigger",this.#t.innerHTML='<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"/><circle cx="12" cy="12" r="3"/></svg>',this.prepend(this.#t)),this.#t.setAttribute("aria-haspopup","dialog"),this.#t.setAttribute("aria-expanded","false"),this.#e=document.createElement("div"),this.#e.className="settings-panel",this.#e.setAttribute("role","dialog"),this.#e.setAttribute("aria-label","Site settings");let e=`settings-panel-${crypto.randomUUID().slice(0,8)}`;this.#e.id=e,this.#t.setAttribute("aria-controls",e),this.#e.innerHTML=this.#P(),this.appendChild(this.#e)}#P(){let{mode:e,brand:a,fluid:s,backdrop:r,backdropChrome:n,pageBgType:i,pageBgColor:c,pageBgGradStart:h,pageBgGradEnd:y,pageBgGradDir:p}=l.getState(),f=this.#c(),d=this.#f(),T=this.#b(s),A=this.#d(s),m=this.#S(r),v=this.#l(r);return`
|
|
2
2
|
<header class="settings-header">
|
|
3
3
|
<strong>Settings</strong>
|
|
4
4
|
<button type="button" class="settings-close" aria-label="Close settings">
|
|
@@ -12,21 +12,22 @@ var De=Object.defineProperty;var oe=(t,e)=>()=>(t&&(e=t(t=0)),e);var ce=(t,e)=>{
|
|
|
12
12
|
<summary>Appearance</summary>
|
|
13
13
|
<div class="settings-section">
|
|
14
14
|
<span class="settings-label">Color Mode</span>
|
|
15
|
-
<
|
|
15
|
+
<fieldset data-segmented>
|
|
16
|
+
<legend class="visually-hidden">Color mode</legend>
|
|
16
17
|
${[{id:"auto",name:"Auto",icon:"monitor"},{id:"light",name:"Light",icon:"sun"},{id:"dark",name:"Dark",icon:"moon"}].map(o=>`
|
|
17
|
-
<label
|
|
18
|
+
<label>
|
|
18
19
|
<input type="radio" name="settings-mode" value="${o.id}" ${e===o.id?"checked":""} />
|
|
19
|
-
<
|
|
20
|
+
<icon-wc name="${o.icon}" size="xs"></icon-wc> ${o.name}
|
|
20
21
|
</label>
|
|
21
22
|
`).join("")}
|
|
22
|
-
</
|
|
23
|
+
</fieldset>
|
|
23
24
|
|
|
24
25
|
<label class="settings-label" for="settings-theme">Theme</label>
|
|
25
26
|
<select id="settings-theme" name="settings-theme">
|
|
26
|
-
${
|
|
27
|
+
${Ee.map(o=>`
|
|
27
28
|
<optgroup label="${o.label}">
|
|
28
|
-
${o.themes.map(
|
|
29
|
-
<option value="${
|
|
29
|
+
${o.themes.map(b=>`
|
|
30
|
+
<option value="${b.id}" ${a===b.id?"selected":""}>${b.name}</option>
|
|
30
31
|
`).join("")}
|
|
31
32
|
</optgroup>
|
|
32
33
|
`).join("")}
|
|
@@ -40,15 +41,15 @@ var De=Object.defineProperty;var oe=(t,e)=>()=>(t&&(e=t(t=0)),e);var ce=(t,e)=>{
|
|
|
40
41
|
<div class="settings-section">
|
|
41
42
|
<label class="toggle-row">
|
|
42
43
|
<span>High Contrast</span>
|
|
43
|
-
<input type="checkbox" name="a11y-high-contrast" data-switch="sm" data-a11y="a11y-high-contrast" ${
|
|
44
|
+
<input type="checkbox" name="a11y-high-contrast" data-switch="sm" data-a11y="a11y-high-contrast" ${f.includes("a11y-high-contrast")?"checked":""} />
|
|
44
45
|
</label>
|
|
45
46
|
<label class="toggle-row">
|
|
46
47
|
<span>Large Text</span>
|
|
47
|
-
<input type="checkbox" name="a11y-large-text" data-switch="sm" data-a11y="a11y-large-text" ${
|
|
48
|
+
<input type="checkbox" name="a11y-large-text" data-switch="sm" data-a11y="a11y-large-text" ${f.includes("a11y-large-text")?"checked":""} />
|
|
48
49
|
</label>
|
|
49
50
|
<label class="toggle-row">
|
|
50
51
|
<span>Dyslexia-Friendly</span>
|
|
51
|
-
<input type="checkbox" name="a11y-dyslexia" data-switch="sm" data-a11y="a11y-dyslexia" ${
|
|
52
|
+
<input type="checkbox" name="a11y-dyslexia" data-switch="sm" data-a11y="a11y-dyslexia" ${f.includes("a11y-dyslexia")?"checked":""} />
|
|
52
53
|
</label>
|
|
53
54
|
</div>
|
|
54
55
|
</details>
|
|
@@ -59,53 +60,56 @@ var De=Object.defineProperty;var oe=(t,e)=>()=>(t&&(e=t(t=0)),e);var ce=(t,e)=>{
|
|
|
59
60
|
<div class="settings-section">
|
|
60
61
|
<label class="toggle-row">
|
|
61
62
|
<span>Fluid Scaling</span>
|
|
62
|
-
<input type="checkbox" name="fluid-scaling" data-switch="sm" data-fluid-toggle ${
|
|
63
|
+
<input type="checkbox" name="fluid-scaling" data-switch="sm" data-fluid-toggle ${T?"checked":""} />
|
|
63
64
|
</label>
|
|
64
|
-
<div class="density-row" ${
|
|
65
|
+
<div class="density-row" ${T?"":"hidden"}>
|
|
65
66
|
<span class="settings-label">Density</span>
|
|
66
|
-
<
|
|
67
|
+
<fieldset data-segmented>
|
|
68
|
+
<legend class="visually-hidden">Density</legend>
|
|
67
69
|
${["compact","default","spacious"].map(o=>`
|
|
68
|
-
<label
|
|
69
|
-
<input type="radio" name="settings-density" value="${o}" ${
|
|
70
|
-
|
|
70
|
+
<label>
|
|
71
|
+
<input type="radio" name="settings-density" value="${o}" ${A===o?"checked":""} />
|
|
72
|
+
${o[0].toUpperCase()+o.slice(1)}
|
|
71
73
|
</label>
|
|
72
74
|
`).join("")}
|
|
73
|
-
</
|
|
75
|
+
</fieldset>
|
|
74
76
|
</div>
|
|
75
77
|
|
|
76
78
|
<label class="toggle-row">
|
|
77
79
|
<span>Canvas Backdrop</span>
|
|
78
|
-
<input type="checkbox" name="canvas-backdrop" data-switch="sm" data-backdrop-toggle ${
|
|
80
|
+
<input type="checkbox" name="canvas-backdrop" data-switch="sm" data-backdrop-toggle ${m?"checked":""} />
|
|
79
81
|
</label>
|
|
80
|
-
<div class="backdrop-row" ${
|
|
82
|
+
<div class="backdrop-row" ${m?"":"hidden"}>
|
|
81
83
|
<span class="settings-label">Style</span>
|
|
82
|
-
<
|
|
84
|
+
<fieldset data-segmented>
|
|
85
|
+
<legend class="visually-hidden">Backdrop style</legend>
|
|
83
86
|
${["default","flush","elevated"].map(o=>`
|
|
84
|
-
<label
|
|
85
|
-
<input type="radio" name="settings-backdrop" value="${o}" ${
|
|
86
|
-
|
|
87
|
+
<label>
|
|
88
|
+
<input type="radio" name="settings-backdrop" value="${o}" ${v===o?"checked":""} />
|
|
89
|
+
${o[0].toUpperCase()+o.slice(1)}
|
|
87
90
|
</label>
|
|
88
91
|
`).join("")}
|
|
89
|
-
</
|
|
92
|
+
</fieldset>
|
|
90
93
|
</div>
|
|
91
|
-
<div class="backdrop-row" ${
|
|
94
|
+
<div class="backdrop-row" ${m?"":"hidden"}>
|
|
92
95
|
<span class="settings-label">Chrome</span>
|
|
93
|
-
<
|
|
96
|
+
<fieldset data-segmented>
|
|
97
|
+
<legend class="visually-hidden">Backdrop chrome mode</legend>
|
|
94
98
|
${["card","stretch","integrated"].map(o=>`
|
|
95
|
-
<label
|
|
96
|
-
<input type="radio" name="settings-backdrop-chrome" value="${o}" ${this.#
|
|
97
|
-
|
|
99
|
+
<label>
|
|
100
|
+
<input type="radio" name="settings-backdrop-chrome" value="${o}" ${this.#h(n)===o?"checked":""} />
|
|
101
|
+
${o[0].toUpperCase()+o.slice(1)}
|
|
98
102
|
</label>
|
|
99
103
|
`).join("")}
|
|
100
|
-
</
|
|
104
|
+
</fieldset>
|
|
101
105
|
</div>
|
|
102
|
-
<div class="backdrop-row" ${
|
|
106
|
+
<div class="backdrop-row" ${m?"":"hidden"}>
|
|
103
107
|
<label class="toggle-row">
|
|
104
108
|
<span>Fixed Header</span>
|
|
105
|
-
<input type="checkbox" name="settings-backdrop-fixed" data-switch="sm" data-backdrop-fixed ${this.#
|
|
109
|
+
<input type="checkbox" name="settings-backdrop-fixed" data-switch="sm" data-backdrop-fixed ${this.#u(n)?"checked":""} />
|
|
106
110
|
</label>
|
|
107
111
|
</div>
|
|
108
|
-
<div class="backdrop-row" ${
|
|
112
|
+
<div class="backdrop-row" ${m?"":"hidden"}>
|
|
109
113
|
<label class="settings-label" for="settings-page-bg">Page Background</label>
|
|
110
114
|
<select id="settings-page-bg" name="settings-page-bg">
|
|
111
115
|
<option value="" ${i===""?"selected":""}>Theme Default</option>
|
|
@@ -113,29 +117,29 @@ var De=Object.defineProperty;var oe=(t,e)=>()=>(t&&(e=t(t=0)),e);var ce=(t,e)=>{
|
|
|
113
117
|
<option value="gradient" ${i==="gradient"?"selected":""}>Gradient</option>
|
|
114
118
|
</select>
|
|
115
119
|
</div>
|
|
116
|
-
<div class="page-bg-color-row backdrop-row" ${i==="color"&&
|
|
120
|
+
<div class="page-bg-color-row backdrop-row" ${i==="color"&&m?"":"hidden"}>
|
|
117
121
|
<span class="settings-label">Color</span>
|
|
118
|
-
<input type="color" name="settings-page-bg-color" value="${
|
|
122
|
+
<input type="color" name="settings-page-bg-color" value="${c||"#1a1a2e"}" />
|
|
119
123
|
</div>
|
|
120
|
-
<div class="page-bg-grad-row backdrop-row" ${i==="gradient"&&
|
|
124
|
+
<div class="page-bg-grad-row backdrop-row" ${i==="gradient"&&m?"":"hidden"}>
|
|
121
125
|
<span class="settings-label">Start</span>
|
|
122
|
-
<input type="color" name="settings-page-bg-grad-start" value="${
|
|
126
|
+
<input type="color" name="settings-page-bg-grad-start" value="${h||"#1a1a2e"}" />
|
|
123
127
|
<span class="settings-label">End</span>
|
|
124
|
-
<input type="color" name="settings-page-bg-grad-end" value="${
|
|
128
|
+
<input type="color" name="settings-page-bg-grad-end" value="${y||"#16213e"}" />
|
|
125
129
|
</div>
|
|
126
|
-
<div class="page-bg-grad-dir-row backdrop-row" ${i==="gradient"&&
|
|
130
|
+
<div class="page-bg-grad-dir-row backdrop-row" ${i==="gradient"&&m?"":"hidden"}>
|
|
127
131
|
<span class="settings-label">Direction</span>
|
|
128
132
|
<select name="settings-page-bg-grad-dir">
|
|
129
|
-
<option value="to bottom" ${(
|
|
130
|
-
<option value="to right" ${
|
|
131
|
-
<option value="135deg" ${
|
|
132
|
-
<option value="45deg" ${
|
|
133
|
+
<option value="to bottom" ${(p||"to bottom")==="to bottom"?"selected":""}>Top \u2192 Bottom</option>
|
|
134
|
+
<option value="to right" ${p==="to right"?"selected":""}>Left \u2192 Right</option>
|
|
135
|
+
<option value="135deg" ${p==="135deg"?"selected":""}>Diagonal \u2198</option>
|
|
136
|
+
<option value="45deg" ${p==="45deg"?"selected":""}>Diagonal \u2197</option>
|
|
133
137
|
</select>
|
|
134
138
|
</div>
|
|
135
139
|
|
|
136
140
|
<label class="toggle-row">
|
|
137
141
|
<span>Sticky Navigation</span>
|
|
138
|
-
<input type="checkbox" name="sticky-nav" data-switch="sm" data-sticky-toggle ${this.#
|
|
142
|
+
<input type="checkbox" name="sticky-nav" data-switch="sm" data-sticky-toggle ${this.#v()?"checked":""} />
|
|
139
143
|
</label>
|
|
140
144
|
</div>
|
|
141
145
|
</details>
|
|
@@ -146,11 +150,11 @@ var De=Object.defineProperty;var oe=(t,e)=>()=>(t&&(e=t(t=0)),e);var ce=(t,e)=>{
|
|
|
146
150
|
<div class="settings-section">
|
|
147
151
|
<label class="toggle-row">
|
|
148
152
|
<span>Motion Effects</span>
|
|
149
|
-
<input type="checkbox" name="ext-motionFx" data-switch="sm" data-ext="motionFx" ${
|
|
153
|
+
<input type="checkbox" name="ext-motionFx" data-switch="sm" data-ext="motionFx" ${d.motionFx?"checked":""} />
|
|
150
154
|
</label>
|
|
151
155
|
<label class="toggle-row">
|
|
152
156
|
<span>Sound Effects</span>
|
|
153
|
-
<input type="checkbox" name="ext-sounds" data-switch="sm" data-ext="sounds" ${
|
|
157
|
+
<input type="checkbox" name="ext-sounds" data-switch="sm" data-ext="sounds" ${d.sounds?"checked":""} />
|
|
154
158
|
</label>
|
|
155
159
|
</div>
|
|
156
160
|
</details>
|
|
@@ -161,11 +165,11 @@ var De=Object.defineProperty;var oe=(t,e)=>()=>(t&&(e=t(t=0)),e);var ce=(t,e)=>{
|
|
|
161
165
|
<div class="settings-section">
|
|
162
166
|
<label class="toggle-row">
|
|
163
167
|
<span>Time-of-Day Shifts</span>
|
|
164
|
-
<input type="checkbox" name="env-timeOfDay" data-switch="sm" data-env="timeOfDay" ${this.#
|
|
168
|
+
<input type="checkbox" name="env-timeOfDay" data-switch="sm" data-env="timeOfDay" ${this.#y().timeOfDay?"checked":""} />
|
|
165
169
|
</label>
|
|
166
170
|
<label class="toggle-row">
|
|
167
171
|
<span>Seasonal Tinting</span>
|
|
168
|
-
<input type="checkbox" name="env-seasonal" data-switch="sm" data-env="seasonal" ${this.#
|
|
172
|
+
<input type="checkbox" name="env-seasonal" data-switch="sm" data-env="seasonal" ${this.#y().seasonal?"checked":""} />
|
|
169
173
|
</label>
|
|
170
174
|
</div>
|
|
171
175
|
</details>
|
|
@@ -174,7 +178,7 @@ var De=Object.defineProperty;var oe=(t,e)=>()=>(t&&(e=t(t=0)),e);var ce=(t,e)=>{
|
|
|
174
178
|
<details name="settings">
|
|
175
179
|
<summary>System</summary>
|
|
176
180
|
<div class="settings-section system-info">
|
|
177
|
-
<p class="system-version">Vanilla Breeze <code>v${
|
|
181
|
+
<p class="system-version">Vanilla Breeze <code>v${Me()}</code></p>
|
|
178
182
|
<p class="system-sw-status" data-sw-status>Service Worker: <span>checking\u2026</span></p>
|
|
179
183
|
<footer class="system-actions">
|
|
180
184
|
<button type="button" data-action="clear-cache">Clear Cache</button>
|
|
@@ -187,5 +191,5 @@ var De=Object.defineProperty;var oe=(t,e)=>()=>(t&&(e=t(t=0)),e);var ce=(t,e)=>{
|
|
|
187
191
|
<footer class="settings-footer">
|
|
188
192
|
<button type="button" class="settings-reset">Reset to Defaults</button>
|
|
189
193
|
</footer>
|
|
190
|
-
`}#T(){this.#t.addEventListener("click",this.#A),this.listen(document,"click",this.#M),this.listen(document,"keydown",this.#P),this.#e.querySelector(".settings-close")?.addEventListener("click",()=>this.close()),this.#e.querySelectorAll('input[name="settings-mode"]').forEach(e=>{e.addEventListener("change",this.#$)}),this.#e.querySelector("#settings-theme")?.addEventListener("change",this.#F),this.#e.querySelector("input[data-fluid-toggle]")?.addEventListener("change",this.#O),this.#e.querySelectorAll('input[name="settings-density"]').forEach(e=>{e.addEventListener("change",this.#D)}),this.#e.querySelector("input[data-backdrop-toggle]")?.addEventListener("change",this.#q),this.#e.querySelectorAll('input[name="settings-backdrop"]').forEach(e=>{e.addEventListener("change",this.#L)}),this.#e.querySelectorAll('input[name="settings-backdrop-chrome"]').forEach(e=>{e.addEventListener("change",this.#I)}),this.#e.querySelector("input[data-backdrop-fixed]")?.addEventListener("change",this.#R),this.#e.querySelector("input[data-sticky-toggle]")?.addEventListener("change",this.#H),this.#e.querySelector('[name="settings-page-bg"]')?.addEventListener("change",this.#V),this.#e.querySelector('[name="settings-page-bg-color"]')?.addEventListener("input",this.#s),this.#e.querySelector('[name="settings-page-bg-grad-start"]')?.addEventListener("input",this.#s),this.#e.querySelector('[name="settings-page-bg-grad-end"]')?.addEventListener("input",this.#s),this.#e.querySelector('[name="settings-page-bg-grad-dir"]')?.addEventListener("change",this.#s),this.#e.querySelectorAll("input[data-a11y]").forEach(e=>{e.addEventListener("change",this.#G)}),this.#e.querySelectorAll("input[data-ext]").forEach(e=>{e.addEventListener("change",this.#U)}),this.#e.querySelectorAll("input[data-env]").forEach(e=>{e.addEventListener("change",this.#W)}),this.#e.querySelector(".settings-reset")?.addEventListener("click",this.#j),this.#e.querySelector('[data-action="clear-cache"]')?.addEventListener("click",this.#K),this.#e.querySelector('[data-action="check-update"]')?.addEventListener("click",this.#Y),this.#x()}#A=e=>{e.stopPropagation(),this.toggle()};#M=e=>{this.#a&&!this.contains(e.target)&&this.close()};#P=e=>{e.key==="Escape"&&this.#a&&(e.preventDefault(),this.close(),this.#t?.focus())};#$=e=>{d.setMode(e.target.value)};#F=async e=>{let a=e.target;a.disabled=!0;try{await d.setBrand(a.value),this.#N()}catch{console.warn("[VB] Theme load failed, using default")}finally{a.disabled=!1}};#O=e=>{let a=e.target.checked,s=this.#o(d.getState().fluid)||"default";d.setFluid(this.#y(a,s)),this.#S(a)};#D=e=>{d.setFluid(this.#y(!0,e.target.value))};#q=e=>{let a=e.target.checked,s=this.#c(d.getState().backdrop)||"default";d.setBackdrop(this.#v(a,s)),this.#k(a)};#L=e=>{d.setBackdrop(this.#v(!0,e.target.value))};#I=e=>{let a=this.#l(d.getState().backdropChrome);d.setBackdropChrome(this.#w(e.target.value,a))};#R=e=>{let a=this.#d(d.getState().backdropChrome);d.setBackdropChrome(this.#w(a,e.target.checked))};#H=async e=>{let a=e.target.checked;try{localStorage.setItem(K,a?"on":"off")}catch{}let s=document.querySelector("header");if(a){document.documentElement.dataset.sticky="",s&&(s.dataset.sticky="");let{initStickyManager:r}=await Promise.resolve().then(()=>(D(),O));r()}else{delete document.documentElement.dataset.sticky,s&&delete s.dataset.sticky;let{destroyStickyManager:r}=await Promise.resolve().then(()=>(D(),O));r()}};#V=e=>{let a=e.target.value;if(this.#u(a),a==="color"){let s=this.#e.querySelector('[name="settings-page-bg-color"]')?.value||"#1a1a2e";d.setPageBg({type:a,color:s})}else if(a==="gradient"){let s=this.#e.querySelector('[name="settings-page-bg-grad-start"]')?.value||"#1a1a2e",r=this.#e.querySelector('[name="settings-page-bg-grad-end"]')?.value||"#16213e",n=this.#e.querySelector('[name="settings-page-bg-grad-dir"]')?.value||"to bottom";d.setPageBg({type:a,gradStart:s,gradEnd:r,gradDir:n})}else d.setPageBg({})};#s=()=>{let e=this.#e.querySelector('[name="settings-page-bg"]')?.value||"";if(e==="color"){let a=this.#e.querySelector('[name="settings-page-bg-color"]')?.value||"";d.setPageBg({type:e,color:a})}else if(e==="gradient"){let a=this.#e.querySelector('[name="settings-page-bg-grad-start"]')?.value||"",s=this.#e.querySelector('[name="settings-page-bg-grad-end"]')?.value||"",r=this.#e.querySelector('[name="settings-page-bg-grad-dir"]')?.value||"to bottom";d.setPageBg({type:e,gradStart:a,gradEnd:s,gradDir:r})}};#G=e=>{let a=e.target.dataset.a11y,s=this.#n();if(e.target.checked&&!s.includes(a))s.push(a);else if(!e.target.checked){let r=s.indexOf(a);r!==-1&&s.splice(r,1)}this.#E(s),this.#g(),window.dispatchEvent(new CustomEvent("vb:a11y-themes-change",{detail:s}))};#U=e=>{let a=e.target.dataset.ext,s=e.target.checked;this.#z(a,s),this.#_()};#W=e=>{let a=e.target.dataset.env,s=e.target.checked;T.setSource(a,s)};#j=()=>{if(confirm("Reset all settings to defaults?")){d.reset(),this.#E([]),this.#g(),window.dispatchEvent(new CustomEvent("vb:a11y-themes-change",{detail:[]}));try{localStorage.removeItem(z)}catch{}this.#_();try{localStorage.removeItem(K)}catch{}delete document.documentElement.dataset.sticky,Promise.resolve().then(()=>(D(),O)).then(e=>e.destroyStickyManager()).catch(()=>{}),T.setSource("timeOfDay",!1),T.setSource("seasonal",!1),this.#r()}};#h=()=>{this.#r()};#r(){let{mode:e,brand:a,fluid:s,backdrop:r,backdropChrome:n,pageBgType:i,pageBgColor:l,pageBgGradStart:u,pageBgGradEnd:p,pageBgGradDir:g}=d.getState(),m=this.#n(),c=this.#i(),E=this.#m(s),_=this.#o(s),h=this.#b(r),f=this.#c(r),o=this.#e.querySelector(`input[name="settings-mode"][value="${e}"]`);o&&(o.checked=!0);let y=this.#e.querySelector("#settings-theme");y&&(y.value=a||"default");let x=this.#e.querySelector("input[data-fluid-toggle]");x&&(x.checked=E);let J=this.#e.querySelector(`input[name="settings-density"][value="${_}"]`);J&&(J.checked=!0),this.#S(E);let X=this.#e.querySelector("input[data-backdrop-toggle]");X&&(X.checked=h);let Q=this.#e.querySelector(`input[name="settings-backdrop"][value="${f}"]`);Q&&(Q.checked=!0);let $e=this.#d(n),Z=this.#e.querySelector(`input[name="settings-backdrop-chrome"][value="${$e}"]`);Z&&(Z.checked=!0);let ee=this.#e.querySelector("input[data-backdrop-fixed]");ee&&(ee.checked=this.#l(n)),this.#k(h);let te=this.#e.querySelector('[name="settings-page-bg"]');te&&(te.value=i||"");let ae=this.#e.querySelector('[name="settings-page-bg-color"]');ae&&l&&(ae.value=l);let se=this.#e.querySelector('[name="settings-page-bg-grad-start"]');se&&u&&(se.value=u);let re=this.#e.querySelector('[name="settings-page-bg-grad-end"]');re&&p&&(re.value=p);let ne=this.#e.querySelector('[name="settings-page-bg-grad-dir"]');ne&&g&&(ne.value=g),h&&this.#u(i||""),this.#e.querySelectorAll("input[data-a11y]").forEach(C=>{let b=C;b.checked=m.includes(b.dataset.a11y)}),this.#e.querySelectorAll("input[data-ext]").forEach(C=>{let b=C,A=b.dataset.ext,Oe=c[A];b.checked=Oe??q[A]});let ie=this.#e.querySelector("input[data-sticky-toggle]");ie&&(ie.checked=this.#f());let Fe=this.#p();this.#e.querySelectorAll("input[data-env]").forEach(C=>{let b=C,A=b.dataset.env;b.checked=Fe[A]??!1})}#S(e){let a=this.#e.querySelector(".density-row");a&&(a.hidden=!e)}#k(e){if(this.#e.querySelectorAll(".backdrop-row").forEach(a=>{a.hidden=!e}),e){let a=this.#e.querySelector('[name="settings-page-bg"]')?.value||"";this.#u(a)}}#u(e){let a=this.#e.querySelector(".page-bg-color-row"),s=this.#e.querySelector(".page-bg-grad-row"),r=this.#e.querySelector(".page-bg-grad-dir-row");a&&(a.hidden=e!=="color"),s&&(s.hidden=e!=="gradient"),r&&(r.hidden=e!=="gradient")}#n(){try{let e=localStorage.getItem(Pe);return e?JSON.parse(e):[]}catch{return[]}}#E(e){try{localStorage.setItem(Pe,JSON.stringify(e))}catch{}}#g(){let e=this.#n(),{brand:a}=d.getState(),s=document.documentElement,r=a!=="default"?[a,...e]:[...e];r.length?s.dataset.theme=r.join(" "):delete s.dataset.theme}#N(){this.#g()}#p(){return T.load()}#i(){try{let e=localStorage.getItem(z);return e?{...q,...JSON.parse(e)}:{...q}}catch{return{...q}}}#z(e,a){try{let s=this.#i();s[e]=a,localStorage.setItem(z,JSON.stringify(s))}catch{}}async#_(){let e=this.#i(),a=document.documentElement;e.motionFx?delete a.dataset.motionReduced:a.dataset.motionReduced="",e.sounds?(B||(B=(await Promise.resolve().then(()=>(Me(),Ae))).SoundManager),B.init(),B.enable()):B&&B.disable(),window.dispatchEvent(new CustomEvent("vb:extensions-change",{detail:e}))}async#x(){let e=this.#e.querySelector("[data-sw-status] span");if(e){if(!("serviceWorker"in navigator)){e.textContent="Not supported";return}try{let s=(await _e()).cachedURLs?.length??0;e.textContent=`Active (${s} cached files)`}catch{e.textContent="Not registered"}}}#K=async e=>{let a=e.target;a.disabled=!0,a.textContent="Clearing\u2026";try{await xe(),a.textContent="Cleared!",this.#x(),setTimeout(()=>{a.textContent="Clear Cache",a.disabled=!1},2e3)}catch{a.textContent="Failed",setTimeout(()=>{a.textContent="Clear Cache",a.disabled=!1},2e3)}};#Y=async e=>{let a=e.target;a.disabled=!0,a.textContent="Checking\u2026";try{let{updated:s}=await Be();a.textContent=s?"Update available!":"Up to date",setTimeout(()=>{a.textContent="Check for Updates",a.disabled=!1},2e3)}catch{a.textContent="Failed",setTimeout(()=>{a.textContent="Check for Updates",a.disabled=!1},2e3)}};open(){this.#a||(this.#a=!0,this.setAttribute("open",""),this.#t?.setAttribute("aria-expanded","true"),this.#r(),this.#J())}#J(){let e=this.getBoundingClientRect(),a=this.#e;a.style.removeProperty("top"),a.style.removeProperty("bottom"),a.style.removeProperty("left"),a.style.removeProperty("right");let s=a.getBoundingClientRect(),r=window.innerWidth,n=window.innerHeight,i=e.top,l=n-e.bottom;i<s.height&&l>i?(a.style.top="calc(100% + 8px)",a.style.bottom="auto"):(a.style.bottom="calc(100% + 8px)",a.style.top="auto");let u=r-e.right,p=e.left,g=s.width;e.right<g&&p<u?(a.style.left="0",a.style.right="auto"):(a.style.right="0",a.style.left="auto")}close(){this.#a&&(this.#a=!1,this.removeAttribute("open"),this.#t?.setAttribute("aria-expanded","false"))}toggle(){this.#a?this.close():this.open()}};le("settings-panel",Y);export{Y as SettingsPanel};
|
|
194
|
+
`}#F(){this.#t.addEventListener("click",this.#$),this.listen(document,"click",this.#O),this.listen(document,"keydown",this.#D),this.#e.querySelector(".settings-close")?.addEventListener("click",()=>this.close()),this.#e.querySelectorAll('input[name="settings-mode"]').forEach(e=>{e.addEventListener("change",this.#L)}),this.#e.querySelector("#settings-theme")?.addEventListener("change",this.#q),this.#e.querySelector("input[data-fluid-toggle]")?.addEventListener("change",this.#R),this.#e.querySelectorAll('input[name="settings-density"]').forEach(e=>{e.addEventListener("change",this.#H)}),this.#e.querySelector("input[data-backdrop-toggle]")?.addEventListener("change",this.#I),this.#e.querySelectorAll('input[name="settings-backdrop"]').forEach(e=>{e.addEventListener("change",this.#V)}),this.#e.querySelectorAll('input[name="settings-backdrop-chrome"]').forEach(e=>{e.addEventListener("change",this.#G)}),this.#e.querySelector("input[data-backdrop-fixed]")?.addEventListener("change",this.#U),this.#e.querySelector("input[data-sticky-toggle]")?.addEventListener("change",this.#W),this.#e.querySelector('[name="settings-page-bg"]')?.addEventListener("change",this.#j),this.#e.querySelector('[name="settings-page-bg-color"]')?.addEventListener("input",this.#i),this.#e.querySelector('[name="settings-page-bg-grad-start"]')?.addEventListener("input",this.#i),this.#e.querySelector('[name="settings-page-bg-grad-end"]')?.addEventListener("input",this.#i),this.#e.querySelector('[name="settings-page-bg-grad-dir"]')?.addEventListener("change",this.#i),this.#e.querySelectorAll("input[data-a11y]").forEach(e=>{e.addEventListener("change",this.#z)}),this.#e.querySelectorAll("input[data-ext]").forEach(e=>{e.addEventListener("change",this.#N)}),this.#e.querySelectorAll("input[data-env]").forEach(e=>{e.addEventListener("change",this.#K)}),this.#e.querySelector(".settings-reset")?.addEventListener("click",this.#X),this.#e.querySelector('[data-action="clear-cache"]')?.addEventListener("click",this.#Q),this.#e.querySelector('[data-action="check-update"]')?.addEventListener("click",this.#Z),this.#T()}#$=e=>{e.stopPropagation(),this.toggle()};#O=e=>{this.#a&&!this.contains(e.target)&&this.close()};#D=e=>{e.key==="Escape"&&this.#a&&(e.preventDefault(),this.close(),this.#t?.focus())};#L=e=>{l.setMode(e.target.value)};#q=async e=>{let a=e.target;a.disabled=!0;try{await l.setBrand(a.value),this.#Y()}catch{console.warn("[VB] Theme load failed, using default")}finally{a.disabled=!1}};#R=e=>{let a=e.target.checked,s=this.#d(l.getState().fluid)||"default";l.setFluid(this.#w(a,s)),this.#_(a)};#H=e=>{l.setFluid(this.#w(!0,e.target.value))};#I=e=>{let a=e.target.checked,s=this.#l(l.getState().backdrop)||"default";l.setBackdrop(this.#k(a,s)),this.#x(a)};#V=e=>{l.setBackdrop(this.#k(!0,e.target.value))};#G=e=>{let a=this.#u(l.getState().backdropChrome);l.setBackdropChrome(this.#E(e.target.value,a))};#U=e=>{let a=this.#h(l.getState().backdropChrome);l.setBackdropChrome(this.#E(a,e.target.checked))};#W=async e=>{let a=e.target.checked;this.#n=a,await u.set(E,"sticky",a?"on":"off");let s=document.querySelector("header");if(a){document.documentElement.dataset.sticky="",s&&(s.dataset.sticky="");let{initStickyManager:r}=await Promise.resolve().then(()=>(G(),V));r()}else{delete document.documentElement.dataset.sticky,s&&delete s.dataset.sticky;let{destroyStickyManager:r}=await Promise.resolve().then(()=>(G(),V));r()}};#j=e=>{let a=e.target.value;if(this.#m(a),a==="color"){let s=this.#e.querySelector('[name="settings-page-bg-color"]')?.value||"#1a1a2e";l.setPageBg({type:a,color:s})}else if(a==="gradient"){let s=this.#e.querySelector('[name="settings-page-bg-grad-start"]')?.value||"#1a1a2e",r=this.#e.querySelector('[name="settings-page-bg-grad-end"]')?.value||"#16213e",n=this.#e.querySelector('[name="settings-page-bg-grad-dir"]')?.value||"to bottom";l.setPageBg({type:a,gradStart:s,gradEnd:r,gradDir:n})}else l.setPageBg({})};#i=()=>{let e=this.#e.querySelector('[name="settings-page-bg"]')?.value||"";if(e==="color"){let a=this.#e.querySelector('[name="settings-page-bg-color"]')?.value||"";l.setPageBg({type:e,color:a})}else if(e==="gradient"){let a=this.#e.querySelector('[name="settings-page-bg-grad-start"]')?.value||"",s=this.#e.querySelector('[name="settings-page-bg-grad-end"]')?.value||"",r=this.#e.querySelector('[name="settings-page-bg-grad-dir"]')?.value||"to bottom";l.setPageBg({type:e,gradStart:a,gradEnd:s,gradDir:r})}};#z=e=>{let a=e.target.dataset.a11y,s=this.#c();if(e.target.checked&&!s.includes(a))s.push(a);else if(!e.target.checked){let r=s.indexOf(a);r!==-1&&s.splice(r,1)}this.#B(s),this.#p(),window.dispatchEvent(new CustomEvent("vb:a11y-themes-change",{detail:s}))};#N=e=>{let a=e.target.dataset.ext,s=e.target.checked;this.#J(a,s),this.#C()};#K=e=>{let a=e.target.dataset.env,s=e.target.checked;O.setSource(a,s)};#X=()=>{confirm("Reset all settings to defaults?")&&(l.reset(),this.#B([]),this.#p(),window.dispatchEvent(new CustomEvent("vb:a11y-themes-change",{detail:[]})),this.#s={...U},u.remove(E,"extensions").catch(()=>{}),this.#C(),this.#n=!1,u.remove(E,"sticky").catch(()=>{}),delete document.documentElement.dataset.sticky,Promise.resolve().then(()=>(G(),V)).then(e=>e.destroyStickyManager()).catch(()=>{}),O.setSource("timeOfDay",!1),O.setSource("seasonal",!1),this.#o())};#g=()=>{this.#o()};#o(){let{mode:e,brand:a,fluid:s,backdrop:r,backdropChrome:n,pageBgType:i,pageBgColor:c,pageBgGradStart:h,pageBgGradEnd:y,pageBgGradDir:p}=l.getState(),f=this.#c(),d=this.#f(),T=this.#b(s),A=this.#d(s),m=this.#S(r),v=this.#l(r),o=this.#e.querySelector(`input[name="settings-mode"][value="${e}"]`);o&&(o.checked=!0);let b=this.#e.querySelector("#settings-theme");b&&(b.value=a||"default");let M=this.#e.querySelector("input[data-fluid-toggle]");M&&(M.checked=T);let ae=this.#e.querySelector(`input[name="settings-density"][value="${A}"]`);ae&&(ae.checked=!0),this.#_(T);let se=this.#e.querySelector("input[data-backdrop-toggle]");se&&(se.checked=m);let re=this.#e.querySelector(`input[name="settings-backdrop"][value="${v}"]`);re&&(re.checked=!0);let Ie=this.#h(n),ne=this.#e.querySelector(`input[name="settings-backdrop-chrome"][value="${Ie}"]`);ne&&(ne.checked=!0);let ie=this.#e.querySelector("input[data-backdrop-fixed]");ie&&(ie.checked=this.#u(n)),this.#x(m);let oe=this.#e.querySelector('[name="settings-page-bg"]');oe&&(oe.value=i||"");let ce=this.#e.querySelector('[name="settings-page-bg-color"]');ce&&c&&(ce.value=c);let de=this.#e.querySelector('[name="settings-page-bg-grad-start"]');de&&h&&(de.value=h);let le=this.#e.querySelector('[name="settings-page-bg-grad-end"]');le&&y&&(le.value=y);let he=this.#e.querySelector('[name="settings-page-bg-grad-dir"]');he&&p&&(he.value=p),m&&this.#m(i||""),this.#e.querySelectorAll("input[data-a11y]").forEach($=>{let S=$;S.checked=f.includes(S.dataset.a11y)}),this.#e.querySelectorAll("input[data-ext]").forEach($=>{let S=$,D=S.dataset.ext,Ge=d[D];S.checked=Ge??U[D]});let ue=this.#e.querySelector("input[data-sticky-toggle]");ue&&(ue.checked=this.#v());let Ve=this.#y();this.#e.querySelectorAll("input[data-env]").forEach($=>{let S=$,D=S.dataset.env;S.checked=Ve[D]??!1})}#_(e){let a=this.#e.querySelector(".density-row");a&&(a.hidden=!e)}#x(e){if(this.#e.querySelectorAll(".backdrop-row").forEach(a=>{a.hidden=!e}),e){let a=this.#e.querySelector('[name="settings-page-bg"]')?.value||"";this.#m(a)}}#m(e){let a=this.#e.querySelector(".page-bg-color-row"),s=this.#e.querySelector(".page-bg-grad-row"),r=this.#e.querySelector(".page-bg-grad-dir-row");a&&(a.hidden=e!=="color"),s&&(s.hidden=e!=="gradient"),r&&(r.hidden=e!=="gradient")}#c(){return[...this.#r]}#B(e){this.#r=[...e],u.set(E,"a11y",this.#r).catch(()=>{})}#p(){let e=this.#c(),{brand:a}=l.getState(),s=document.documentElement,r=a!=="default"?[a,...e]:[...e];r.length?s.dataset.theme=r.join(" "):delete s.dataset.theme}#Y(){this.#p()}#y(){return O.load()}#f(){return{...this.#s}}#J(e,a){this.#s={...this.#s,[e]:a},u.set(E,"extensions",this.#s).catch(()=>{})}async#C(){let e=this.#f(),a=document.documentElement;e.motionFx?delete a.dataset.motionReduced:a.dataset.motionReduced="",e.sounds?(F||(F=(await Promise.resolve().then(()=>(He(),Re))).SoundManager),F.init(),F.enable()):F&&F.disable(),window.dispatchEvent(new CustomEvent("vb:extensions-change",{detail:e}))}async#T(){let e=this.#e.querySelector("[data-sw-status] span");if(e){if(!("serviceWorker"in navigator)){e.textContent="Not supported";return}try{let s=(await $e()).cachedURLs?.length??0;e.textContent=`Active (${s} cached files)`}catch{e.textContent="Not registered"}}}#Q=async e=>{let a=e.target;a.disabled=!0,a.textContent="Clearing\u2026";try{await Oe(),a.textContent="Cleared!",this.#T(),setTimeout(()=>{a.textContent="Clear Cache",a.disabled=!1},2e3)}catch{a.textContent="Failed",setTimeout(()=>{a.textContent="Clear Cache",a.disabled=!1},2e3)}};#Z=async e=>{let a=e.target;a.disabled=!0,a.textContent="Checking\u2026";try{let{updated:s}=await De();a.textContent=s?"Update available!":"Up to date",setTimeout(()=>{a.textContent="Check for Updates",a.disabled=!1},2e3)}catch{a.textContent="Failed",setTimeout(()=>{a.textContent="Check for Updates",a.disabled=!1},2e3)}};open(){this.#a||(this.#a=!0,this.setAttribute("open",""),this.#t?.setAttribute("aria-expanded","true"),this.#o(),this.#ee())}#ee(){let e=this.getBoundingClientRect(),a=this.#e;a.style.removeProperty("top"),a.style.removeProperty("bottom"),a.style.removeProperty("left"),a.style.removeProperty("right");let s=a.getBoundingClientRect(),r=window.innerWidth,n=window.innerHeight,i=e.top,c=n-e.bottom;i<s.height&&c>i?(a.style.top="calc(100% + 8px)",a.style.bottom="auto"):(a.style.bottom="calc(100% + 8px)",a.style.top="auto");let h=r-e.right,y=e.left,p=s.width;e.right<p&&y<h?(a.style.left="0",a.style.right="auto"):(a.style.right="0",a.style.left="auto")}close(){this.#a&&(this.#a=!1,this.removeAttribute("open"),this.#t?.setAttribute("aria-expanded","false"))}toggle(){this.#a?this.close():this.open()}};ye("settings-panel",te);export{te as SettingsPanel};
|
|
191
195
|
//# sourceMappingURL=settings-panel.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
1
|
+
var b=window.matchMedia("(prefers-reduced-motion: reduce)");var u=new Map;function p(n,t,i={}){let e=i.priority??10,r={impl:t,bundle:i.bundle,contract:i.contract,priority:e},o=u.get(n);if(customElements.get(n)){if(!o||o.priority>=e){o&&o.priority===e&&o.impl!==t&&console.warn(`[VB Bundle] Tag <${n}> already registered by "${o.bundle}" (priority ${o.priority}). Skipping "${i.bundle}".`);return}console.warn(`[VB Bundle] Tag <${n}> defined by "${o.bundle}" cannot be replaced (customElements.define is permanent). "${i.bundle}" has higher priority but arrived late.`);return}if(o&&o.priority>=e){o.priority===e&&console.warn(`[VB Bundle] Tag <${n}> already registered by "${o.bundle}". Skipping "${i.bundle}" (first wins at equal priority).`);return}u.set(n,r),customElements.define(n,t)}var a=class extends HTMLElement{#e=[];connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&this.setAttribute("data-upgraded","")}disconnectedCallback(){for(let t of this.#e)t();this.#e=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,i,e,r){t.addEventListener(i,e,r),this.#e.push(()=>t.removeEventListener(i,e,r))}setup(){}teardown(){}};var l=new Map([["x",{label:"X",iconName:"twitter",buildUrl:({url:n,title:t})=>`https://x.com/intent/post?url=${s(n)}&text=${s(t)}`}],["twitter",{label:"X",iconName:"twitter",buildUrl:({url:n,title:t})=>`https://x.com/intent/post?url=${s(n)}&text=${s(t)}`}],["facebook",{label:"Facebook",iconName:"facebook",buildUrl:({url:n})=>`https://www.facebook.com/sharer/sharer.php?u=${s(n)}`}],["linkedin",{label:"LinkedIn",iconName:"linkedin",buildUrl:({url:n})=>`https://www.linkedin.com/sharing/share-offsite/?url=${s(n)}`}],["whatsapp",{label:"WhatsApp",iconName:"whatsapp",iconSet:"custom",buildUrl:({url:n,title:t})=>`https://wa.me/?text=${s(`${t} ${n}`)}`}],["telegram",{label:"Telegram",iconName:"telegram",iconSet:"custom",buildUrl:({url:n,title:t})=>`https://t.me/share/url?url=${s(n)}&text=${s(t)}`}],["bluesky",{label:"Bluesky",iconName:"bluesky",iconSet:"custom",buildUrl:({url:n,title:t})=>`https://bsky.app/intent/compose?text=${s(`${t} ${n}`)}`}],["mastodon",{label:"Mastodon",iconName:"mastodon",iconSet:"custom",buildUrl:({url:n,title:t},i="mastodon.social")=>`https://${i}/share?text=${s(`${t} ${n}`)}`}],["email",{label:"Email",iconName:"mail",buildUrl:({url:n,title:t,text:i})=>`mailto:?subject=${s(t)}&body=${s(`${i}
|
|
2
2
|
|
|
3
|
-
${
|
|
3
|
+
${n}`)}`}],["copy",{label:"Copy link",iconName:"link",buildUrl:()=>""}]]),c="x,linkedin,bluesky,mastodon,whatsapp,email,copy";function s(n){return encodeURIComponent(n)}var d=class extends a{#e;#r;#o;#i;#n=null;#t=null;get url(){return this.#e}set url(t){this.#e=t}get title(){return this.#r??""}set title(t){this.#r=t}get text(){return this.#o}set text(t){this.#o=t}setup(){if(this.#c(),this.#d(),this.closest("selection-menu")){this.#h(),this.setAttribute("data-tier-resolved","selection");return}this.#i==="native"?this.#u():this.#i==="hidden"?this.style.display="none":this.children.length>0?this.#m():this.#p(),this.setAttribute("data-tier-resolved",this.#i)}teardown(){this.removeAttribute("data-tier-resolved"),this.#n&&(clearTimeout(this.#n),this.#n=null),this.#t&&(this.#t.removeEventListener("click",this.#s),this.#t.remove(),this.#t=null),this.querySelector(".share-trigger")?.remove()}async share(){this.#i==="native"&&await this.#a()}#c(){this.#e=this.getAttribute("url")||document.querySelector('link[rel="canonical"]')?.getAttribute("href")||location.href,this.#r=this.getAttribute("title")||document.querySelector('meta[property="og:title"]')?.getAttribute("content")||document.title,this.#o=this.getAttribute("text")||document.querySelector('meta[name="description"]')?.getAttribute("content")||document.querySelector('meta[property="og:description"]')?.getAttribute("content")||""}#d(){let t=this.getAttribute("tier");if(t==="platforms"||t==="native"){t==="native"&&!navigator.share?this.#i="hidden":this.#i=t;return}if((this.getAttribute("platforms")||c)==="native-only"){this.#i=typeof navigator.share=="function"?"native":"hidden";return}this.#i=typeof navigator.share=="function"?"native":"platforms"}#h(){let t=document.createElement("button");t.type="button",t.setAttribute("aria-label","Share selection");let i=document.createElement("icon-wc");i.setAttribute("name","share-2"),i.setAttribute("size","sm"),i.setAttribute("aria-hidden","true"),t.appendChild(i),t.addEventListener("click",()=>{let e=this.closest("selection-menu"),o=e?.getSelection?.()?.text||window.getSelection()?.toString()||"";o&&navigator.share?navigator.share({text:`"${o}" \u2014 ${location.href}`}).catch(()=>{}):o&&navigator.clipboard?.writeText(`"${o}" \u2014 ${location.href}`).catch(()=>{}),e?.dismiss?.()}),this.appendChild(t)}#u(){let t=this.getAttribute("label")||"Share",i=document.createElement("button");i.type="button",i.className="share-trigger",i.setAttribute("aria-label","Share this page"),i.innerHTML=`<icon-wc name="share-2" size="sm" aria-hidden="true"></icon-wc><span class="share-label">${t}</span>`,i.addEventListener("click",this.#b),this.appendChild(i)}#p(){let t=(this.getAttribute("platforms")||c).split(",").map(i=>i.trim()).filter(Boolean);this.#t=document.createElement("nav"),this.#t.setAttribute("aria-label","Share this page");for(let i of t){let e=l.get(i);if(!e)continue;let r=document.createElement("button");r.type="button",r.dataset.platform=i,r.setAttribute("aria-label",i==="copy"?"Copy link":`Share on ${e.label}`);let o=e.iconSet?` set="${e.iconSet}"`:"";r.innerHTML=`<icon-wc name="${e.iconName}" size="sm"${o} aria-hidden="true"></icon-wc><span class="share-label">${e.label}</span>`,this.#t.appendChild(r)}this.#t.addEventListener("click",this.#s),this.appendChild(this.#t)}#m(){if(this.querySelector("nav"))this.#t=this.querySelector("nav");else{let e=document.createElement("nav");for(e.setAttribute("aria-label","Share this page");this.firstChild;)e.appendChild(this.firstChild);this.appendChild(e),this.#t=e}let t=this.querySelectorAll("a[data-platform]");for(let e of t){let r=e.getAttribute("href")||"";e.setAttribute("href",r.replace(/\{url\}/g,encodeURIComponent(this.#e||"")).replace(/\{title\}/g,encodeURIComponent(this.#r||"")).replace(/\{text\}/g,encodeURIComponent(this.#o||"")))}let i=this.querySelectorAll('[data-platform="copy"]');for(let e of i)e.addEventListener("click",this.#l);this.#t.addEventListener("click",this.#s)}#b=async()=>{await this.#a()};async#a(){let t={url:this.#e||"",title:this.#r||"",text:this.#o||""};this.dispatchEvent(new CustomEvent("share-wc:open",{detail:{platform:"native"},bubbles:!0}));try{if(navigator.canShare&&!navigator.canShare(t))throw new Error("Payload not shareable");await navigator.share(t),this.dispatchEvent(new CustomEvent("share-wc:success",{detail:{platform:"native"},bubbles:!0}))}catch(i){i.name!=="AbortError"&&this.dispatchEvent(new CustomEvent("share-wc:error",{detail:{platform:"native",error:i},bubbles:!0}))}}#s=t=>{let i=t.target.closest("[data-platform]");if(!i)return;let e=i.dataset.platform;if(e==="copy"){this.#l(t,i);return}if(i.tagName==="A"||!e)return;let r=l.get(e);if(!r)return;this.dispatchEvent(new CustomEvent("share-wc:open",{detail:{platform:e},bubbles:!0}));let o={url:this.#e||"",title:this.#r||"",text:this.#o||""};if(e==="email")location.href=r.buildUrl(o);else if(e==="mastodon"){let h=this.getAttribute("mastodon-instance")||"mastodon.social",m=r.buildUrl(o,h);window.open(m,"_blank","noopener,noreferrer")}else window.open(r.buildUrl(o),"_blank","noopener,noreferrer");this.dispatchEvent(new CustomEvent("share-wc:success",{detail:{platform:e},bubbles:!0}))};#l=async(t,i)=>{let e=i||t?.target?.closest('[data-platform="copy"]');if(e)try{await navigator.clipboard.writeText(this.#e||""),e.dataset.state="copied";let r=e.querySelector(".share-label"),o=r?.textContent;r&&(r.textContent="Copied!");let h=e.querySelector("[aria-live]")||e;e.querySelector("[aria-live]")||e.setAttribute("aria-live","polite"),this.dispatchEvent(new CustomEvent("share-wc:success",{detail:{platform:"copy"},bubbles:!0})),this.#n&&clearTimeout(this.#n),this.#n=setTimeout(()=>{delete e.dataset.state,r&&o&&(r.textContent=o),e.removeAttribute("aria-live"),this.#n=null},2e3)}catch(r){this.dispatchEvent(new CustomEvent("share-wc:error",{detail:{platform:"copy",error:r},bubbles:!0}))}}};p("share-wc",d);export{d as ShareWc};
|
|
4
4
|
//# sourceMappingURL=share-wc.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var E=window.matchMedia("(prefers-reduced-motion: reduce)");var v=new Map;function C(c,i,e={}){let s=e.priority??10,t={impl:i,bundle:e.bundle,contract:e.contract,priority:s},r=v.get(c);if(customElements.get(c)){if(!r||r.priority>=s){r&&r.priority===s&&r.impl!==i&&console.warn(`[VB Bundle] Tag <${c}> already registered by "${r.bundle}" (priority ${r.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${c}> defined by "${r.bundle}" cannot be replaced (customElements.define is permanent). "${e.bundle}" has higher priority but arrived late.`);return}if(r&&r.priority>=s){r.priority===s&&console.warn(`[VB Bundle] Tag <${c}> already registered by "${r.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}v.set(c,t),customElements.define(c,i)}var A=class extends HTMLElement{#h=[];connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&this.setAttribute("data-upgraded","")}disconnectedCallback(){for(let i of this.#h)i();this.#h=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(i,e,s,t){i.addEventListener(e,s,t),this.#h.push(()=>i.removeEventListener(e,s,t))}setup(){}teardown(){}};var y={layout:{label:"Layout",cssClass:"sm-badge--layout"},section:{label:"Section",cssClass:"sm-badge--section"},dashboard:{label:"Dashboard",cssClass:"sm-badge--dashboard"},page:{label:"Page",cssClass:"sm-badge--page"},modal:{label:"Modal",cssClass:"sm-badge--modal"},redirect:{label:"Redirect",cssClass:"sm-badge--redirect"}},x={draft:{label:"Draft",cssClass:"sm-status--draft"},ready:{label:"Ready",cssClass:"sm-status--ready"},live:{label:"Live",cssClass:"sm-status--live"},deprecated:{label:"Deprecated",cssClass:"sm-status--deprecated"}},S=class c extends A{static get observedAttributes(){return["src","collapsed","compact","title","data-view","data-orientation","data-detail"]}static#h=0;#u=null;#s=null;#t=null;#f=null;#r=0;#n=0;setup(){c.#h++;let i=this.getAttribute("src");if(i&&!this.querySelector("nav")){this._loadSrc(i);return}let e=this.querySelector(":scope > nav");if(e){if(this.#r=0,this.#n=0,this.#w(e.querySelector("ul"),0),this.dataset.view==="visual"){this.#N(),this.#J(e),this.dispatchEvent(new CustomEvent("site-map-wc:ready",{bubbles:!0,detail:{nodeCount:this.#r,depth:this.#n}}));return}this.#k(e.querySelector("ul"),0),this.#N(),e.classList.add("sm-tree"),e.setAttribute("role","tree"),e.setAttribute("aria-label",this.getAttribute("title")||"Site map"),this.#u=e,this.hasAttribute("collapsed")&&this.#q(),this.listen(e,"keydown",s=>this.#X(s)),this.listen(e,"click",s=>this.#R(s)),this.dispatchEvent(new CustomEvent("site-map-wc:ready",{bubbles:!0,detail:{nodeCount:this.#r,depth:this.#n}}))}}teardown(){if(this.#t){this.#t.remove(),this.#t=null;let i=this.querySelector("nav");i&&(i.style.display="",i.removeAttribute("aria-hidden"))}this.#s&&(this.#s.remove(),this.#s=null),this.#u&&(this.#u.classList.remove("sm-tree"),this.#u.removeAttribute("role"),this.#u.removeAttribute("aria-label")),this.querySelectorAll(".sm-node-content, .sm-toggle").forEach(i=>i.remove()),this.querySelectorAll('li[role="treeitem"]').forEach(i=>{i.removeAttribute("role"),i.removeAttribute("aria-expanded"),i.removeAttribute("tabindex")}),this.querySelectorAll('ul[role="group"]').forEach(i=>{i.removeAttribute("role"),i.classList.remove("sm-subtree","sm-collapsed")}),this.#u=null,this.#f=null,this.#r=0,this.#n=0}attributeChangedCallback(i,e,s){e===s||!this.isConnected||i==="src"&&this._loadSrc(s)}#w(i,e){if(!i)return;let s=i.querySelectorAll(":scope > li");for(let t of s){this.#r++;let r=e+1;r>this.#n&&(this.#n=r);let o=t.querySelector(":scope > ul");o&&this.#w(o,r)}}#k(i,e){if(!i)return;e>0&&(i.setAttribute("role","group"),i.classList.add("sm-subtree"));let s=[...i.querySelectorAll(":scope > li")];for(let t of s){let r=!!t.querySelector(":scope > ul"),o=t.querySelector(":scope > a"),a=t.getAttribute("data-page-type")||"page",h=t.getAttribute("data-template")||"",l=t.getAttribute("data-status")||"";t.setAttribute("role","treeitem"),t.setAttribute("tabindex","-1");let n=document.createElement("span");if(n.className="sm-node-content",r){t.setAttribute("aria-expanded","true");let u=document.createElement("button");u.className="sm-toggle",u.setAttribute("type","button"),u.setAttribute("aria-hidden","true"),u.setAttribute("tabindex","-1"),u.textContent="\u25BE",n.appendChild(u)}else{let u=document.createElement("span");u.className="sm-leaf-marker",u.setAttribute("aria-hidden","true"),n.appendChild(u)}if(l&&x[l]){let u=document.createElement("span");u.className=`sm-status-dot ${x[l].cssClass}`,u.setAttribute("title",x[l].label),u.setAttribute("aria-label",x[l].label),n.appendChild(u)}if(o&&n.appendChild(o),y[a]){let u=document.createElement("span");u.className=`sm-badge ${y[a].cssClass}`,u.textContent=y[a].label,n.appendChild(u)}if(h){let u=document.createElement("span");u.className="sm-badge sm-badge--template",u.textContent=h,n.appendChild(u)}t.insertBefore(n,t.firstChild);let b=t.querySelector(":scope > ul");b&&this.#k(b,e+1)}}#N(){let i=this.getAttribute("title");if(!i&&this.#r===0)return;if(this.#s=document.createElement("div"),this.#s.className="sm-header",i){let t=document.createElement("h2");t.className="sm-title",t.textContent=i,this.#s.appendChild(t)}let e=document.createElement("span");e.className="sm-summary",e.textContent=`${this.#r} pages \xB7 ${this.#n} levels deep`,this.#s.appendChild(e);let s=document.createElement("button");s.className="sm-toggle-all",s.setAttribute("type","button"),s.textContent="Collapse all",s.addEventListener("click",()=>{this.querySelectorAll('li[aria-expanded="true"]').length>0?(this.#q(),s.textContent="Expand all"):(this.#G(),s.textContent="Collapse all")}),this.#s.appendChild(s),this.insertBefore(this.#s,this.firstChild)}#q(){let i=this.querySelectorAll("li[aria-expanded]");for(let e of i){e.setAttribute("aria-expanded","false");let s=e.querySelector(":scope > ul");s&&s.classList.add("sm-collapsed");let t=e.querySelector(":scope > .sm-node-content > .sm-toggle");t&&(t.textContent="\u25B8")}}#G(){let i=this.querySelectorAll("li[aria-expanded]");for(let e of i){e.setAttribute("aria-expanded","true");let s=e.querySelector(":scope > ul");s&&s.classList.remove("sm-collapsed");let t=e.querySelector(":scope > .sm-node-content > .sm-toggle");t&&(t.textContent="\u25BE")}}#b(i){let e=i.getAttribute("aria-expanded")==="true";i.setAttribute("aria-expanded",e?"false":"true");let s=i.querySelector(":scope > ul");s&&s.classList.toggle("sm-collapsed",e);let t=i.querySelector(":scope > .sm-node-content > .sm-toggle");t&&(t.textContent=e?"\u25B8":"\u25BE")}#R(i){let e=i.target;if(e.closest(".sm-toggle")){i.preventDefault();let r=e.closest('li[role="treeitem"]');r&&this.#b(r);return}let s=e.closest('li[role="treeitem"]');if(!s)return;this.#a(s);let t=e.closest("a");t&&this.dispatchEvent(new CustomEvent("site-map-wc:select",{bubbles:!0,detail:{href:t.getAttribute("href")||"",pageType:s.getAttribute("data-page-type")||"page",template:s.getAttribute("data-template")||""}}))}#X(i){let e=i.target.closest('li[role="treeitem"]');if(!e)return;let s=i.key,t=!1;switch(s){case"ArrowDown":t=!0,this.#j(e);break;case"ArrowUp":t=!0,this.#K(e);break;case"ArrowRight":if(t=!0,e.getAttribute("aria-expanded")==="false")this.#b(e);else if(e.getAttribute("aria-expanded")==="true"){let r=e.querySelector(':scope > ul > li[role="treeitem"]');r&&this.#a(r)}break;case"ArrowLeft":if(t=!0,e.getAttribute("aria-expanded")==="true")this.#b(e);else{let r=e.parentElement?.closest('li[role="treeitem"]');r&&this.#a(r)}break;case"Enter":t=!0,e.hasAttribute("aria-expanded")&&this.#b(e);break;case" ":t=!0;{let r=e.querySelector(":scope > .sm-node-content > a");r&&r.click()}break;case"Home":t=!0;{let r=this.querySelector('li[role="treeitem"]');r&&this.#a(r)}break;case"End":t=!0;{let r=this.#x();r.length&&this.#a(r[r.length-1])}break}t&&(i.preventDefault(),i.stopPropagation())}#x(){let i=[],e=t=>{if(!t)return;let r=[...t.querySelectorAll(':scope > li[role="treeitem"]')];for(let o of r)if(i.push(o),o.getAttribute("aria-expanded")==="true"){let a=o.querySelector(":scope > ul");a&&e(a)}},s=this.querySelector("nav > ul");return e(s),i}#j(i){let e=this.#x(),s=e.indexOf(i);s>=0&&s<e.length-1&&this.#a(e[s+1])}#K(i){let e=this.#x(),s=e.indexOf(i);s>0&&this.#a(e[s-1])}#a(i){this.#f&&this.#f.setAttribute("tabindex","-1"),i.setAttribute("tabindex","0"),i.focus(),this.#f=i}static#m="http://www.w3.org/2000/svg";static#l=150;static#c=70;static#$=30;static#S=50;static#Z=20;static#L={layout:{stroke:"#8b5cf6",fill:"#f5f3ff",text:"#6d28d9"},section:{stroke:"#3b82f6",fill:"#eff6ff",text:"#1d4ed8"},dashboard:{stroke:"#22c55e",fill:"#f0fdf4",text:"#15803d"},page:{stroke:"#94a3b8",fill:"#f8fafc",text:"#475569"},modal:{stroke:"#f59e0b",fill:"#fffbeb",text:"#b45309"},redirect:{stroke:"#ef4444",fill:"#fef2f2",text:"#b91c1c"}};static#T={draft:"#94a3b8",ready:"#f59e0b",live:"#22c55e",deprecated:"#ef4444"};#M(i){let e=[];for(let s of i.querySelectorAll(":scope > li")){let t=s.querySelector(":scope > a"),r=s.querySelector(":scope > ul");e.push({label:t?.textContent?.trim()||s.firstChild?.textContent?.trim()||"",href:t?.getAttribute("href")||"",pageType:s.getAttribute("data-page-type")||"page",template:s.getAttribute("data-template")||"",status:s.getAttribute("data-status")||"",children:r?this.#M(r):[],x:0,y:0,subtreeWidth:0,collapsed:!1,childCount:0})}return e}#B(i,e=0){let s=c.#l,t=c.#c,r=c.#$,o=c.#S;for(let a of i)a.childCount=this.#z(a),a.children.length>0&&!a.collapsed?(this.#B(a.children,e+1),a.subtreeWidth=a.children.reduce((h,l)=>h+l.subtreeWidth,0)+r*(a.children.length-1)):a.subtreeWidth=s,a.subtreeWidth=Math.max(a.subtreeWidth,s)}#z(i){let e=0;for(let s of i.children)e+=1+this.#z(s);return e}#D(i,e,s){let t=c.#l,r=c.#c,o=c.#$,a=c.#S,h=e;for(let l of i)l.x=h+(l.subtreeWidth-t)/2,l.y=s,l.children.length>0&&!l.collapsed&&this.#D(l.children,h,s+r+a),h+=l.subtreeWidth+o}#J(i){i.style.display="none",i.setAttribute("aria-hidden","true");let e=i.querySelector("ul");e&&(this.#e=this.#M(e),this.#d())}#e=null;#i=1;get#v(){return this.dataset.orientation==="horizontal"?"horizontal":"vertical"}get#H(){return Math.min(4,Math.max(0,parseInt(this.dataset.detail||"2",10)))}static#g={zoomIn:'<circle cx="11" cy="11" r="8"/><line x1="21" x2="16.65" y1="21" y2="16.65"/><line x1="11" x2="11" y1="8" y2="14"/><line x1="8" x2="14" y1="11" y2="11"/>',zoomOut:'<circle cx="11" cy="11" r="8"/><line x1="21" x2="16.65" y1="21" y2="16.65"/><line x1="8" x2="14" y1="11" y2="11"/>',reset:'<path d="M15 3h6v6"/><path d="m21 3-7 7"/><path d="m3 21 7-7"/><path d="M9 21H3v-6"/>',flip:'<path d="M21 8V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v3"/><path d="M21 16v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-3"/><path d="M4 12H2"/><path d="M10 12H8"/><path d="M16 12h-2"/><path d="M22 12h-2"/>'};static#P=["Shape","Shape + Title","Full","Full + Status","Wireframe"];#d(){if(!this.#e)return;this.#t&&this.#t.remove();let i=c.#m,e=c.#l,s=c.#c,t=c.#Z,r=this.#v==="horizontal";this.#B(this.#e),this.#D(this.#e,t,t);let o=this.#V(this.#e),a=o.maxX+e+t,h=o.maxY+s+t;r&&([a,h]=[h,a]),this.#t=document.createElement("div"),this.#t.className="sm-visual",this.#t.setAttribute("tabindex","-1"),this.#t.appendChild(this.#Q());let l=document.createElementNS(i,"svg");l.setAttribute("viewBox",`0 0 ${a} ${h}`),l.setAttribute("width",String(a)),l.setAttribute("height",String(h)),l.setAttribute("role","img"),l.setAttribute("aria-label",`Site map${this.getAttribute("title")?": "+this.getAttribute("title"):""}`);let n=document.createElement("div");if(n.className="sm-visual-zoom",n.style.width=`${Math.round(a*this.#i)}px`,n.style.height=`${Math.round(h*this.#i)}px`,l.style.transform=`scale(${this.#i})`,l.style.transformOrigin="0 0",r){let f=document.createElementNS(i,"g");f.setAttribute("transform",`rotate(90 0 0) translate(0 -${h})`),this.#C(f,this.#e),this.#E(f,this.#e),l.appendChild(f)}else this.#C(l,this.#e),this.#E(l,this.#e);n.appendChild(l),this.#t.appendChild(n);let b=document.createElement("div");b.className="sm-visual-summary";let u=Math.round(this.#i*100);b.textContent=`${this.#r} pages \xB7 ${this.#n} levels \xB7 ${u}%`,this.#t.appendChild(b),this.appendChild(this.#t),this.#st(this.#t,l),this.listen(l,"click",f=>{let m=f.target,d=m.closest("[data-toggle]");if(d){let g=d.getAttribute("data-toggle");this.#U(g);return}let p=m.closest("[data-node-id]");p&&(this.#o(p.getAttribute("data-node-id")),this.dispatchEvent(new CustomEvent("site-map-wc:select",{bubbles:!0,detail:{href:p.getAttribute("data-href")||"",pageType:p.getAttribute("data-page-type")||"page",template:p.getAttribute("data-template")||""}})))}),l.setAttribute("tabindex","0"),l.setAttribute("role","tree"),l.setAttribute("aria-label",`Site map${this.getAttribute("title")?": "+this.getAttribute("title"):""} \u2014 use arrow keys to navigate`),l.addEventListener("keydown",f=>this.#tt(f)),requestAnimationFrame(()=>{let f=l.querySelector("[data-node-id]");f&&this.#F(f)})}#Q(){let i=document.createElement("div");i.className="sm-vtoolbar",i.setAttribute("role","toolbar"),i.setAttribute("aria-label","Site map controls");let e=f=>`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${f}</svg>`,s=this.#A(e(c.#g.zoomIn),"Zoom in",()=>{this.#i=Math.min(3,this.#i+.25),this.#d()});i.appendChild(s);let t=this.#A(e(c.#g.zoomOut),"Zoom out",()=>{this.#i=Math.max(.25,this.#i-.25),this.#d()});i.appendChild(t);let r=this.#A(e(c.#g.reset),"Reset zoom",()=>{this.#i=1,this.#d()});i.appendChild(r);let o=document.createElement("span");o.className="sm-vtoolbar-sep",i.appendChild(o);let a=this.#v==="horizontal"?"Vertical":"Horizontal",h=this.#A(e(c.#g.flip),a,()=>{this.dataset.orientation=this.#v==="horizontal"?"vertical":"horizontal",this.#d()});i.appendChild(h),i.appendChild(o.cloneNode());let l=this.#H,n=document.createElement("label");n.className="sm-vtoolbar-detail",n.textContent="Detail ";let b=document.createElement("input");b.type="range",b.min="0",b.max="4",b.value=String(l),b.setAttribute("aria-label","Detail level"),b.className="sm-vtoolbar-slider",n.appendChild(b);let u=document.createElement("span");return u.className="sm-vtoolbar-detail-label",u.textContent=c.#P[l],n.appendChild(u),b.addEventListener("input",()=>{this.dataset.detail=b.value,u.textContent=c.#P[parseInt(b.value,10)],this.#d()}),i.appendChild(n),i}#A(i,e,s){let t=document.createElement("button");return t.type="button",t.className="sm-vtoolbar-btn",t.innerHTML=i,t.setAttribute("aria-label",e),t.setAttribute("title",e),t.addEventListener("click",s),t}#y=null;#O(i,e=""){let s=[];for(let t=0;t<i.length;t++){let r=i[t],o=e?`${e}-${t}`:String(t);s.push(o),r.children.length>0&&!r.collapsed&&s.push(...this.#O(r.children,o))}return s}#_(i){let e=i.lastIndexOf("-");return e>0?i.slice(0,e):null}#it(i){let e=this.#p(i,this.#e);return!e||e.collapsed||e.children.length===0?null:`${i}-0`}#o(i){if(!i||!this.#t)return;let e=this.#t.querySelector('svg[role="tree"]');if(!e)return;let s=e.querySelector(`[data-node-id="${i}"]`);if(!s)return;this.#F(s),this.#y=i;let t=s.querySelector("rect");if(t&&this.#t){let r=t.getBoundingClientRect(),o=this.#t.getBoundingClientRect();(r.left<o.left||r.right>o.right||r.top<o.top||r.bottom>o.bottom)&&t.scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})}}#F(i){let e=i.closest("svg");if(!e)return;e.querySelectorAll(".sm-vfocus-ring").forEach(r=>r.remove()),e.querySelectorAll("[data-node-id]").forEach(r=>r.removeAttribute("aria-current"));let s=c.#m,t=i.querySelector("rect");if(t){let r=document.createElementNS(s,"rect");r.setAttribute("x",String(parseFloat(t.getAttribute("x"))-3)),r.setAttribute("y",String(parseFloat(t.getAttribute("y"))-3)),r.setAttribute("width",String(parseFloat(t.getAttribute("width"))+6)),r.setAttribute("height",String(parseFloat(t.getAttribute("height"))+6)),r.setAttribute("rx","11"),r.setAttribute("fill","none"),r.setAttribute("stroke","#3b82f6"),r.setAttribute("stroke-width","2"),r.setAttribute("class","sm-vfocus-ring"),i.parentNode.insertBefore(r,i)}i.setAttribute("aria-current","true"),this.#y=i.getAttribute("data-node-id")}#tt(i){if(!this.#e)return;let e=this.#y||"0",s=!1;switch(i.key){case"ArrowDown":{s=!0;let t=this.#p(e,this.#e);t&&t.children.length>0&&!t.collapsed&&this.#o(`${e}-0`);break}case"ArrowUp":{s=!0;let t=this.#_(e);t&&this.#o(t);break}case"ArrowRight":{s=!0;let t=this.#W(e,1);t&&this.#o(t);break}case"ArrowLeft":{s=!0;let t=this.#W(e,-1);t&&this.#o(t);break}case"Enter":case" ":{s=!0;let t=this.#p(e,this.#e);t&&t.children.length>0&&this.#U(e);break}case"Home":{s=!0,this.#o("0");break}case"End":{s=!0;let t=this.#O(this.#e);t.length&&this.#o(t[t.length-1]);break}}s&&(i.preventDefault(),i.stopPropagation())}#W(i,e){let s=i.split("-").map(Number),t=s[s.length-1]+e;if(t<0)return null;let r=s.length>1?s.slice(0,-1).join("-"):null,o=r?this.#p(r,this.#e):null,a=o?o.children:this.#e;if(!a||t>=a.length)return null;let h=[...s];return h[h.length-1]=t,h.join("-")}#I=!1;#et={dragging:!1,startX:0,startY:0,scrollLeft:0,scrollTop:0,moved:!1};#st(i,e){if(e.style.cursor="grab",this.#I)return;this.#I=!0;let s=this.#et;this.listen(this,"pointerdown",t=>{if(t.target.closest("button, [data-toggle], .sm-vtoolbar, input"))return;let r=this.querySelector(".sm-visual");if(!r)return;s.dragging=!0,s.moved=!1,s.startX=t.clientX,s.startY=t.clientY,s.scrollLeft=r.scrollLeft,s.scrollTop=r.scrollTop;let o=this.querySelector('svg[role="tree"]');o&&(o.style.cursor="grabbing")}),this.listen(window,"pointermove",t=>{if(!s.dragging)return;let r=t.clientX-s.startX,o=t.clientY-s.startY;(Math.abs(r)>3||Math.abs(o)>3)&&(s.moved=!0);let a=this.querySelector(".sm-visual");a&&(a.scrollLeft=s.scrollLeft-r,a.scrollTop=s.scrollTop-o)}),this.listen(window,"pointerup",()=>{if(!s.dragging)return;s.dragging=!1;let t=this.querySelector('svg[role="tree"]');t&&(t.style.cursor="grab")}),this.listen(this,"click",t=>{s.moved&&(t.stopPropagation(),s.moved=!1)},{capture:!0})}#V(i){let e=0,s=0;for(let t of i)if(t.x+c.#l>e&&(e=t.x+c.#l),t.y+c.#c>s&&(s=t.y+c.#c),t.children.length>0&&!t.collapsed){let r=this.#V(t.children);r.maxX>e&&(e=r.maxX),r.maxY>s&&(s=r.maxY)}return{maxX:e,maxY:s}}#C(i,e){let s=c.#m,t=c.#l,r=c.#c,o=c.#S;for(let a of e){if(a.children.length===0||a.collapsed)continue;let h=a.x+t/2,l=a.y+r,n=l+o/2;for(let b of a.children){let u=b.x+t/2,f=b.y,m=document.createElementNS(s,"path");m.setAttribute("d",`M ${h} ${l} L ${h} ${n} L ${u} ${n} L ${u} ${f}`),m.setAttribute("fill","none"),m.setAttribute("stroke","#cbd5e1"),m.setAttribute("stroke-width","1.5"),i.appendChild(m)}this.#C(i,a.children)}}#E(i,e,s=""){let t=c.#m,r=c.#l,o=c.#c,a=this.#H,h=a>=4;for(let l=0;l<e.length;l++){let n=e[l],b=s?`${s}-${l}`:String(l),u=h?{stroke:"#94a3b8",fill:"#ffffff",text:"#475569"}:c.#L[n.pageType]||c.#L.page,f=document.createElementNS(t,"g");f.setAttribute("data-node-id",b),f.setAttribute("data-href",n.href),f.setAttribute("data-page-type",n.pageType),f.setAttribute("data-template",n.template),f.style.cursor="pointer";let m=document.createElementNS(t,"rect");if(m.setAttribute("x",String(n.x)),m.setAttribute("y",String(n.y)),m.setAttribute("width",String(r)),m.setAttribute("height",String(o)),m.setAttribute("rx","8"),m.setAttribute("fill",u.fill),m.setAttribute("stroke",u.stroke),m.setAttribute("stroke-width",h?"1":"2"),(h||n.pageType==="modal")&&m.setAttribute("stroke-dasharray","6 3"),f.appendChild(m),a>=1){let d=document.createElementNS(t,"text");d.setAttribute("x",String(n.x+r/2)),d.setAttribute("y",String(a===1?n.y+o/2+5:n.y+24)),d.setAttribute("text-anchor","middle"),d.setAttribute("font-size","13"),d.setAttribute("font-weight","600"),d.setAttribute("fill",u.text),d.setAttribute("font-family","system-ui, sans-serif"),d.textContent=n.label.length>18?n.label.slice(0,17)+"\u2026":n.label,f.appendChild(d)}if(a>=2){let d=document.createElementNS(t,"text");if(d.setAttribute("x",String(n.x+r/2)),d.setAttribute("y",String(n.y+40)),d.setAttribute("text-anchor","middle"),d.setAttribute("font-size","9"),d.setAttribute("font-weight","700"),d.setAttribute("fill",u.stroke),d.setAttribute("font-family","system-ui, sans-serif"),d.textContent=(y[n.pageType]?.label||n.pageType).toUpperCase(),f.appendChild(d),n.template){let p=document.createElementNS(t,"text");p.setAttribute("x",String(n.x+r/2)),p.setAttribute("y",String(n.y+54)),p.setAttribute("text-anchor","middle"),p.setAttribute("font-size","9"),p.setAttribute("fill","#94a3b8"),p.setAttribute("font-family","system-ui, sans-serif"),p.textContent=n.template,f.appendChild(p)}}if(a>=3&&n.status&&c.#T[n.status]){let d=document.createElementNS(t,"circle");d.setAttribute("cx",String(n.x+r/2)),d.setAttribute("cy",String(n.y+o-8)),d.setAttribute("r","4"),d.setAttribute("fill",h?"#94a3b8":c.#T[n.status]),f.appendChild(d)}if(h)for(let d=0;d<2;d++){let p=document.createElementNS(t,"line");p.setAttribute("x1",String(n.x+12)),p.setAttribute("x2",String(n.x+r-12)),p.setAttribute("y1",String(n.y+o-22+d*8)),p.setAttribute("y2",String(n.y+o-22+d*8)),p.setAttribute("stroke","#cbd5e1"),p.setAttribute("stroke-width","1"),p.setAttribute("stroke-dasharray","3 2"),f.appendChild(p)}if(n.children.length>0){let d=document.createElementNS(t,"g");d.setAttribute("data-toggle",b),d.style.cursor="pointer";let p=document.createElementNS(t,"circle");p.setAttribute("cx",String(n.x+r/2)),p.setAttribute("cy",String(n.y+o+10)),p.setAttribute("r","10"),p.setAttribute("fill",h?"#fff":"#f1f5f9"),p.setAttribute("stroke","#cbd5e1"),p.setAttribute("stroke-width","1"),d.appendChild(p);let g=document.createElementNS(t,"text");g.setAttribute("x",String(n.x+r/2)),g.setAttribute("y",String(n.y+o+14)),g.setAttribute("text-anchor","middle"),g.setAttribute("font-size","11"),g.setAttribute("font-weight","700"),g.setAttribute("fill","#64748b"),g.setAttribute("font-family","system-ui, sans-serif"),g.textContent=n.collapsed?`+${n.childCount}`:"\u2212",d.appendChild(g),f.appendChild(d)}i.appendChild(f),n.children.length>0&&!n.collapsed&&this.#E(i,n.children,b)}}#U(i){let e=this.#p(i,this.#e);if(!e)return;e.collapsed=!e.collapsed;let s=this.#y||i;this.#d(),requestAnimationFrame(()=>{this.#o(s);let t=this.#t?.querySelector('svg[role="tree"]');t&&t.focus({preventScroll:!0})})}#p(i,e){if(!e)return null;let s=i.split("-").map(Number),t=e,r=null;for(let o of s){if(!t||o>=t.length)return null;r=t[o],t=r.children}return r}async _loadSrc(i){if(i)try{let e=await fetch(i);if(!e.ok)throw new Error(`HTTP ${e.status}`);let s=await e.json();for(;this.firstChild;)this.firstChild.remove();s.title&&!this.getAttribute("title")&&this.setAttribute("title",s.title);let t=document.createElement("nav"),r=document.createElement("ul");this.#Y(r,s.pages||[]),t.appendChild(r),this.appendChild(t),this.teardown(),this.removeAttribute("data-upgraded"),this.setup()}catch(e){console.warn(`[site-map-wc] Failed to load src="${i}":`,e)}}#Y(i,e){for(let s of e){let t=document.createElement("li");s.pageType&&t.setAttribute("data-page-type",s.pageType),s.template&&t.setAttribute("data-template",s.template),s.status&&t.setAttribute("data-status",s.status);let r=document.createElement("a");if(r.href=s.href||"#",r.textContent=s.label||"",t.appendChild(r),s.children&&s.children.length>0){let o=document.createElement("ul");this.#Y(o,s.children),t.appendChild(o)}i.appendChild(t)}}};C("site-map-wc",S);export{S as SiteMapWc};
|
|
2
|
+
//# sourceMappingURL=site-map-wc.js.map
|