vanilla-breeze 0.1.4 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +25084 -6649
- package/dist/cdn/components/icon-wc.js +4 -4
- package/dist/cdn/components/manifest.json +2 -6
- package/dist/cdn/components/settings-panel.js +1 -1
- package/dist/cdn/components/site-map.js +1 -1
- package/dist/cdn/components/user-story.js +5 -5
- package/dist/cdn/icons/bold.css +17 -0
- package/dist/cdn/icons/bold.json +1 -0
- package/dist/cdn/icons/custom.css +6 -0
- package/dist/cdn/icons/custom.json +1 -0
- package/dist/cdn/icons/lucide.css +1914 -0
- package/dist/cdn/icons/lucide.json +1 -0
- package/dist/cdn/icons/mage.css +17 -0
- package/dist/cdn/icons/mage.json +1 -0
- package/dist/cdn/icons/phosphor.css +17 -0
- package/dist/cdn/icons/phosphor.json +1 -0
- package/dist/cdn/icons/tabler.css +17 -0
- package/dist/cdn/icons/tabler.json +1 -0
- package/dist/cdn/packs/manifest.json +2 -2
- package/dist/cdn/packs/ux-planning.full.css +1 -1
- package/dist/cdn/packs/ux-planning.full.js +146 -147
- package/dist/cdn/themes/8bit.tokens.json +1 -1
- package/dist/cdn/themes/alpha1999-dark.tokens.json +1 -1
- package/dist/cdn/themes/alpha1999.tokens.json +1 -1
- package/dist/cdn/themes/anthropic.tokens.json +1 -1
- package/dist/cdn/themes/art-deco-dark.tokens.json +1 -1
- package/dist/cdn/themes/art-deco.tokens.json +1 -1
- package/dist/cdn/themes/bauhaus-dark.tokens.json +1 -1
- package/dist/cdn/themes/bauhaus.tokens.json +1 -1
- package/dist/cdn/themes/brutalist-dark.tokens.json +1 -1
- package/dist/cdn/themes/brutalist.tokens.json +1 -1
- package/dist/cdn/themes/catppuccin-frappe.tokens.json +1 -1
- package/dist/cdn/themes/catppuccin-latte-dark.tokens.json +1 -1
- package/dist/cdn/themes/catppuccin-latte.tokens.json +1 -1
- package/dist/cdn/themes/catppuccin-macchiato.tokens.json +1 -1
- package/dist/cdn/themes/catppuccin-mocha.tokens.json +1 -1
- package/dist/cdn/themes/classic-dark.tokens.json +1 -1
- package/dist/cdn/themes/classic.tokens.json +1 -1
- package/dist/cdn/themes/claymorphism-dark.tokens.json +1 -1
- package/dist/cdn/themes/claymorphism.tokens.json +1 -1
- package/dist/cdn/themes/clinical-dark.tokens.json +1 -1
- package/dist/cdn/themes/clinical.tokens.json +1 -1
- package/dist/cdn/themes/cottagecore-dark.tokens.json +1 -1
- package/dist/cdn/themes/cottagecore.tokens.json +1 -1
- package/dist/cdn/themes/cyber.tokens.json +1 -1
- package/dist/cdn/themes/dawn-dark.tokens.json +1 -1
- package/dist/cdn/themes/dawn.tokens.json +1 -1
- package/dist/cdn/themes/dracula.tokens.json +1 -1
- package/dist/cdn/themes/dusk.tokens.json +1 -1
- package/dist/cdn/themes/editorial-dark.tokens.json +1 -1
- package/dist/cdn/themes/editorial.tokens.json +1 -1
- package/dist/cdn/themes/financial-dark.tokens.json +1 -1
- package/dist/cdn/themes/financial.tokens.json +1 -1
- package/dist/cdn/themes/genai.tokens.json +1 -1
- package/dist/cdn/themes/glassmorphism-dark.tokens.json +1 -1
- package/dist/cdn/themes/glassmorphism.tokens.json +1 -1
- package/dist/cdn/themes/government-dark.tokens.json +1 -1
- package/dist/cdn/themes/government.tokens.json +1 -1
- package/dist/cdn/themes/gruvbox-dark.tokens.json +1 -1
- package/dist/cdn/themes/gruvbox.tokens.json +1 -1
- package/dist/cdn/themes/high-noon-dark.tokens.json +1 -1
- package/dist/cdn/themes/high-noon.tokens.json +1 -1
- package/dist/cdn/themes/ibm.tokens.json +1 -1
- package/dist/cdn/themes/kawaii-dark.tokens.json +1 -1
- package/dist/cdn/themes/kawaii.tokens.json +1 -1
- package/dist/cdn/themes/magna-dark.tokens.json +1 -1
- package/dist/cdn/themes/magna.tokens.json +1 -1
- package/dist/cdn/themes/mcdonalds.tokens.json +1 -1
- package/dist/cdn/themes/midnight.tokens.json +1 -1
- package/dist/cdn/themes/minimal-dark.tokens.json +1 -1
- package/dist/cdn/themes/minimal.tokens.json +1 -1
- package/dist/cdn/themes/modern-dark.tokens.json +1 -1
- package/dist/cdn/themes/modern.tokens.json +1 -1
- package/dist/cdn/themes/nes-dark.tokens.json +1 -1
- package/dist/cdn/themes/nes.tokens.json +1 -1
- package/dist/cdn/themes/neumorphism-dark.tokens.json +1 -1
- package/dist/cdn/themes/neumorphism.tokens.json +1 -1
- package/dist/cdn/themes/nord-dark.tokens.json +1 -1
- package/dist/cdn/themes/nord.tokens.json +1 -1
- package/dist/cdn/themes/organic-dark.tokens.json +1 -1
- package/dist/cdn/themes/organic.tokens.json +1 -1
- package/dist/cdn/themes/rose-pine-dark.tokens.json +1 -1
- package/dist/cdn/themes/rose-pine.tokens.json +1 -1
- package/dist/cdn/themes/rough-dark.tokens.json +1 -1
- package/dist/cdn/themes/rough.tokens.json +1 -1
- package/dist/cdn/themes/solarized-dark.tokens.json +1 -1
- package/dist/cdn/themes/solarized.tokens.json +1 -1
- package/dist/cdn/themes/starbucks.tokens.json +1 -1
- package/dist/cdn/themes/startup-dark.tokens.json +1 -1
- package/dist/cdn/themes/startup.tokens.json +1 -1
- package/dist/cdn/themes/super2026-dark.tokens.json +1 -1
- package/dist/cdn/themes/super2026.tokens.json +1 -1
- package/dist/cdn/themes/swiss-dark.tokens.json +1 -1
- package/dist/cdn/themes/swiss.tokens.json +1 -1
- package/dist/cdn/themes/terminal.tokens.json +1 -1
- package/dist/cdn/themes/tokyo-night-dark.tokens.json +1 -1
- package/dist/cdn/themes/tokyo-night.tokens.json +1 -1
- package/dist/cdn/themes/vaporwave-dark.tokens.json +1 -1
- package/dist/cdn/themes/vaporwave.tokens.json +1 -1
- package/dist/cdn/themes/win9x-dark.tokens.json +1 -1
- package/dist/cdn/themes/win9x.tokens.json +1 -1
- package/dist/cdn/vanilla-breeze-core.css +1 -1
- package/dist/cdn/vanilla-breeze-core.js +23 -23
- package/dist/cdn/vanilla-breeze.css +1 -1
- package/dist/cdn/vanilla-breeze.js +161 -161
- package/package.json +3 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var l=`
|
|
1
|
+
function u({basePath:o,set:n,name:e}){return`${o}/${n}/${e}.svg`}function h(o,n=document){let e=o.getAttribute("data-icon-set");if(e)return e;let t=o.closest("[data-icon-set]");return t?t.getAttribute("data-icon-set"):n.documentElement.dataset.iconSet||"lucide"}function m(o=document){return o.documentElement.dataset.iconPath||"/cdn/icons"}function l(o){let n=o.getAttribute("data-icon");if(!n){o.style.removeProperty("--vb-icon");return}let e=u({basePath:m(document),set:h(o,document),name:n});o.style.setProperty("--vb-icon",`url("${e}")`)}function a(o=document){for(let n of o.querySelectorAll("[data-icon]"))l(n)}var f=!1;function y(){if(f)return;f=!0,a(),new MutationObserver(n=>{for(let e of n)if(e.type==="attributes"){let t=e.target;t.hasAttribute&&t.hasAttribute("data-icon")&&l(t),e.attributeName==="data-icon-set"&&t.querySelectorAll&&a(t)}else for(let t of e.addedNodes){if(t.nodeType!==1)continue;let i=t;i.hasAttribute("data-icon")&&l(i),i.querySelectorAll&&a(i)}}).observe(document.documentElement,{subtree:!0,childList:!0,attributes:!0,attributeFilter:["data-icon","data-icon-set"]})}typeof document<"u"&&y();var b=`
|
|
2
2
|
:host {
|
|
3
3
|
display: inline-flex;
|
|
4
4
|
align-items: center;
|
|
@@ -59,8 +59,8 @@ svg {
|
|
|
59
59
|
:host([hidden]) {
|
|
60
60
|
display: none;
|
|
61
61
|
}
|
|
62
|
-
`;var
|
|
63
|
-
<style>${
|
|
62
|
+
`;var A=window.matchMedia("(prefers-reduced-motion: reduce)");var g=new Map;function p(o,n,e={}){let t=e.priority??10,i={impl:n,bundle:e.bundle,contract:e.contract,priority:t},r=g.get(o);if(customElements.get(o)){if(!r||r.priority>=t){r&&r.priority===t&&r.impl!==n&&console.warn(`[VB Bundle] Tag <${o}> already registered by "${r.bundle}" (priority ${r.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${o}> defined by "${r.bundle}" cannot be replaced (customElements.define is permanent). "${e.bundle}" has higher priority but arrived late.`);return}if(r&&r.priority>=t){r.priority===t&&console.warn(`[VB Bundle] Tag <${o}> already registered by "${r.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}g.set(o,i),customElements.define(o,n)}var s=new Map,c=new Map,d=class o extends HTMLElement{static#e=new Set;static#t=null;static#o(){o.#t||(o.#t=new MutationObserver(n=>{for(let e of n)if(e.attributeName==="data-icon-set")for(let t of o.#e)t.hasAttribute("set")||(t.render(),t.loadIcon())}),o.#t?.observe(document.documentElement,{attributes:!0,attributeFilter:["data-icon-set"]}))}static get observedAttributes(){return["name","set","size","label"]}constructor(){super(),this.attachShadow({mode:"open"})}get name(){return this.getAttribute("name")||""}get set(){return this.getAttribute("set")||document.documentElement.dataset.iconSet||"lucide"}get size(){return this.getAttribute("size")||"md"}get label(){return this.getAttribute("label")}get basePath(){return this.getAttribute("base-path")||document.documentElement.dataset.iconPath||"/cdn/icons"}get iconPath(){return`${this.basePath}/${this.set}/${this.name}.svg`}render(){this.shadowRoot.innerHTML=`
|
|
63
|
+
<style>${b}</style>
|
|
64
64
|
<slot></slot>
|
|
65
|
-
`}async loadIcon(){if(!this.name){this.setError("No icon name specified");return}let
|
|
65
|
+
`}async loadIcon(){if(!this.name){this.setError("No icon name specified");return}let n=`${this.set}/${this.name}`;if(s.has(n)){this.displayIcon(s.get(n));return}try{let e=await this.#n(this.set,n);this.displayIcon(e)}catch(e){let t="lucide";if(this.set!==t){let i=`${t}/${this.name}`;if(s.has(i)){this.displayIcon(s.get(i));return}try{let r=await this.#n(t,i);this.displayIcon(r);return}catch{}}this.setError(e.message)}}async#n(n,e){return c.has(e)||c.set(e,this.#i(n).then(t=>(s.set(e,t),c.delete(e),t)).catch(t=>{throw c.delete(e),t})),c.get(e)}async#i(n){let e=`${this.basePath}/${n}/${this.name}.svg`,t=await fetch(e);if(!t.ok)throw new Error(`Icon not found: ${this.name}`);let i=await t.text();if(!i.includes("<svg"))throw new Error(`Invalid SVG: ${this.name}`);return i}displayIcon(n){let i=new DOMParser().parseFromString(n,"image/svg+xml").querySelector("svg");if(!i){this.setError("Invalid SVG content");return}i.removeAttribute("width"),i.removeAttribute("height"),this.label?(i.setAttribute("role","img"),i.setAttribute("aria-label",this.label)):i.setAttribute("aria-hidden","true"),this.removeAttribute("data-error");let r=this.shadowRoot?.querySelector("slot");r&&r.replaceWith(i)}setError(n){this.setAttribute("data-error","true"),console.warn(`icon-wc: ${n}`);let e=this.shadowRoot?.querySelector("slot");e&&(e.textContent="")}connectedCallback(){o.#e.add(this),o.#o(),this.render(),this.loadIcon(),this._onThemeChange=()=>{let n=this.shadowRoot?.querySelector("svg");n&&(n.style.stroke="none",requestAnimationFrame(()=>{n.style.stroke=""}))},window.addEventListener("vb:theme-change",this._onThemeChange),this.setAttribute("data-upgraded","")}disconnectedCallback(){this.removeAttribute("data-upgraded"),o.#e.delete(this),this._onThemeChange&&window.removeEventListener("vb:theme-change",this._onThemeChange)}attributeChangedCallback(n,e,t){if(e!==t&&this.isConnected){if(n==="name"||n==="set")this.render(),this.loadIcon();else if(n==="label"){let i=this.shadowRoot?.querySelector("svg");i&&(t?(i.setAttribute("role","img"),i.setAttribute("aria-label",t)):(i.removeAttribute("role"),i.setAttribute("aria-hidden","true")))}}}};p("icon-wc",d);export{d as IconWc};
|
|
66
66
|
//# sourceMappingURL=icon-wc.js.map
|
|
@@ -389,11 +389,7 @@
|
|
|
389
389
|
},
|
|
390
390
|
"site-map": {
|
|
391
391
|
"file": "site-map.js",
|
|
392
|
-
"size":
|
|
393
|
-
},
|
|
394
|
-
"site-map-wc": {
|
|
395
|
-
"file": "site-map-wc.js",
|
|
396
|
-
"size": 25772
|
|
392
|
+
"size": 27734
|
|
397
393
|
},
|
|
398
394
|
"site-search": {
|
|
399
395
|
"file": "site-search.js",
|
|
@@ -501,7 +497,7 @@
|
|
|
501
497
|
},
|
|
502
498
|
"user-story": {
|
|
503
499
|
"file": "user-story.js",
|
|
504
|
-
"size":
|
|
500
|
+
"size": 22499
|
|
505
501
|
},
|
|
506
502
|
"version-switcher": {
|
|
507
503
|
"file": "version-switcher.js",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var je=Object.defineProperty;var ge=(t,e)=>()=>(t&&(e=t(t=0)),e);var me=(t,e)=>{for(var a in e)je(t,a,{get:e[a],enumerable:!0})};var U={};me(U,{destroyStickyManager:()=>tt,initStickyManager:()=>et});function T(){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(){T()}function et(){if(j)return;j=!0,T(),requestAnimationFrame(T),document.fonts?.ready?.then(T),window.addEventListener("resize",T,{passive:!0}),document.addEventListener("toggle",Le,!0),Q=new ResizeObserver(T);let t=document.querySelector("header[data-sticky]");t&&Q.observe(t)}function tt(){if(j){if(j=!1,window.removeEventListener("resize",T),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 j,Q,Z,W=ge(()=>{j=!1,Z=!1});var Re={};me(Re,{SoundManager:()=>at});var qe,ee,at,Ie=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 R=class extends HTMLElement{#t=[];#e;connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&(this.setAttribute("data-upgraded",""),queueMicrotask(()=>{this.dispatchEvent(new CustomEvent(`${this.localName}:upgraded`,{bubbles:!0}))}))}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(){}setState(e,a){this.#e||(this.#e=this.attachInternals());let s=this.#e.states;try{a?s.add(e):s.delete(e)}catch{let r=`--${e}`;a?s.add(r):s.delete(r)}}_adoptInternals(e){this.#e||(this.#e=e)}};var x=new Map,z=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 Ue=new Set(["default","a11y-high-contrast","a11y-large-text","a11y-dyslexia","modern","minimal","classic"]),We=new Set(["kawaii","memphis"]);function N(t){return We.has(t)}function ze(t,e){return`${e}/themes/${t}.css`}function we(t,e){if(!N(t))return Promise.resolve();if(z.has(t))return z.get(t);let a=import(`${e}/packs/${t}.full.js`).catch(()=>{});return z.set(t,a),a}function Ne(t,e){let a=be(),s=()=>{(N(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"),g(),s(),r(void 0)},c=()=>{t.setAttribute("data-vb-theme-state","error"),x.delete(e),g(),n(new Error(`Failed to load theme: ${e}`))},g=()=>{t.removeEventListener("load",i),t.removeEventListener("error",c)};t.addEventListener("load",i,{once:!0}),t.addEventListener("error",c,{once:!0})})}async function D(t){if(!t||Ue.has(t))return;if(x.has(t))return x.get(t);if(typeof document<"u"){let s=document.querySelector(`link[data-vb-theme="${t}"]`);if(s){let r=Ne(s,t);return x.set(t,r),r}}let e=be(),a=N(t)?Xe(t,e):Ke(t,e);return x.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(),x.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 g=document.createElement("link");g.rel="stylesheet",g.href=s,g.setAttribute("data-vb-pack-effects",t),document.head.appendChild(g),we(t,e),r()},c.onerror=()=>{c.setAttribute("data-vb-theme-state","error"),c.remove(),x.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"}],K=[{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"}],X=[{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=[...K,...X],dt=[...Se,...K,...X,...ke],_=t=>K.filter(e=>e.category===t),Ee=[{label:"Style",themes:Se,tier:"core"},{label:"Design",themes:_("Design"),tier:"showcase"},{label:"Content",themes:_("Content"),tier:"showcase"},{label:"Modern",themes:_("Modern"),tier:"showcase"},{label:"Creative",themes:_("Creative"),tier:"showcase"},{label:"Aesthetic",themes:_("Aesthetic"),tier:"showcase"},{label:"Signature",themes:_("Signature"),tier:"showcase"},{label:"OS Styles",themes:_("OS Styles"),tier:"showcase"},{label:"Packs",themes:ke,tier:"showcase"},{label:"More Themes",themes:X,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 I=null;function v(){return I||(I=Ye()),I}function Y(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 xe(t){if(typeof t!="string"||!t)throw new TypeError("VBStore: namespace must be a non-empty string");return`vb:${t}:`}function _e(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={}){I=t.backend??null},async set(t,e,a){let s={data:a,timestamp:Date.now()};await v().setRaw(Y(t,e),JSON.stringify(s))},async get(t,e,a){let s=await v().getRaw(Y(t,e));if(s==null)return null;let r=_e(s);return!r||a?.maxAge!=null&&Date.now()-r.timestamp>a.maxAge?null:r.data},async remove(t,e){await v().removeRaw(Y(t,e))},async list(t){let e=xe(t),a=await v().keys(e),s=[];for(let r of a){let n=await v().getRaw(r);if(n==null)continue;let i=_e(n);i&&s.push({key:r.slice(e.length),data:i.data,timestamp:i.timestamp})}return s},async clear(t){let e=xe(t),a=await v().keys(e);for(let s of a)await v().removeRaw(s)},async clearAll(){let t=await v().keys("vb:");for(let e of t)await v().removeRaw(e)},async setMany(t,e){for(let[a,s]of e)await u.set(t,a,s)}};var H="theme",V="current",B={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"],h=null,l={_initPromise:null,async init(){return this._initPromise?this._initPromise:(this._initPromise=(async()=>{let t=await u.get(H,V);h=t?{...B,...t}:{...B};try{await D(h.brand)}catch{h.brand="default"}return this.apply(h),this._watchSystemPreference(),this._watchRootAttributes(),this._watchCrossDocumentStorage(),h})(),this._initPromise)},_watchCrossDocumentStorage(){typeof window>"u"||window.addEventListener("storage",async t=>{if(t.key!==`vb:${H}:${V}`||!t.newValue)return;let e;try{e=JSON.parse(t.newValue)?.data}catch{return}if(!e||typeof e!="object")return;let a={...B,...h,...e};if(a.brand&&a.brand!==h?.brand)try{await D(a.brand)}catch{a.brand="default"}h=a,this.apply(h||{})})},load(){return h?{...h}:{...B}},save(t){let e={...h??B,...t};return h=e,u.set(H,V,e).catch(()=>{}),e},apply({mode:t="auto",brand:e="default",borderStyle:a="",iconSet:s="",fluid:r="",backdrop:n="",backdropChrome:i="",pageBgType:c="",pageBgColor:g="",pageBgGradStart:y="",pageBgGradEnd:p="",pageBgGradDir:b=""}={}){let d=document.documentElement;d.dataset.mode=t==="auto"?this.getEffectiveMode():t;let M=(d.dataset.theme||"").split(" ").filter(P=>P.startsWith("a11y-")),m=e!=="default"?[e,...M]:[...M];m.length?d.dataset.theme=m.join(" "):delete d.dataset.theme;let S=a||this._readCSSHint("--theme-border-style");S&&S!=="clean"?d.dataset.borderStyle=S: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"&&g)d.style.setProperty("--page-bg-color",g),d.style.removeProperty("--page-bg-gradient");else if(c==="gradient"&&y&&p){let P=b||"to bottom";d.style.setProperty("--page-bg-gradient",`linear-gradient(${P}, ${y}, ${p})`),d.style.removeProperty("--page-bg-color")}else d.style.removeProperty("--page-bg-color"),d.style.removeProperty("--page-bg-gradient");let w=this.load().accent||"default";this._applyAccent(w),window.dispatchEvent(new CustomEvent("vb:theme-change",{detail:{mode:t,brand:e,accent:w,borderStyle:S,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 D(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:g,pageBgColor:y,pageBgGradStart:p,pageBgGradEnd:b,pageBgGradDir:d}=this.load();return{mode:t,brand:e,accent:a,borderStyle:s,iconSet:r,fluid:n,backdrop:i,backdropChrome:c,pageBgType:g,pageBgColor:y,pageBgGradStart:p,pageBgGradEnd:b,pageBgGradDir:d,effectiveMode:this.getEffectiveMode()}},toggleMode(){let e=this.getEffectiveMode()==="dark"?"light":"dark";this.setMode(e)},reset(){h={...B},u.remove(H,V).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(B)},_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(!h)return;let a=(document.documentElement.dataset.theme||"").split(/\s+/).filter(Boolean).find(s=>!s.startsWith("a11y-"))||"default";a!==h.brand&&(h.brand=a,D(a).catch(()=>{}),window.dispatchEvent(new CustomEvent("vb:theme-change",{detail:{...this.getState()}})))},_syncFromDataMode(){if(!h)return;let t=document.documentElement.dataset.mode||"auto",e=h.mode==="auto"?this.getEffectiveMode():h.mode;t!==e&&(h.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,E={...J};function C(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);E=t?{...J,...t}:{...J},(E.timeOfDay||E.seasonal)&&(this._captureBaseHues(),this._update(),this._startLoop()),window.addEventListener("vb:theme-change",()=>{this._hasActiveSource()&&requestAnimationFrame(()=>{this._captureBaseHues(),this._update()})})},load(){return{...E}},save(t){return E={...E,...t},u.set(Ce,Te,E).catch(()=>{}),{...E}},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?C(-20,20,(t-5)/2):t<10?C(20,5,(t-7)/3):t<14?C(5,0,(t-10)/4):t<17?C(0,-5,(t-14)/3):t<19?C(-5,15,(t-17)/2):t<21?C(15,-10,(t-19)/2):C(-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 G=null;function Me(){return"0.1.4-199c7c25"}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 G||(G=navigator.serviceWorker?.ready??Promise.reject(new Error("SW not supported"))),G}function $e(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 Fe(){return $e("GET_STATUS")}async function De(){return $e("CLEAR_CACHE")}async function Oe(){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",()=>{G=navigator.serviceWorker.register(t).catch(e=>{console.warn("[VB] Service worker registration failed:",e)})})}var $=null,f="settings",L={motionFx:!0,sounds:!1},te=class extends R{#t=null;#e=null;#s=!1;#r=[];#a={...L};#n=!1;setup(){return this.#A(),!0}async#A(){await this.#M(),this.#P(),this.#F(),this.#i(),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(){}get data(){return{a11yThemes:[...this.#r],extensions:{...this.#a},sticky:this.#n}}set data(e){if(!e||typeof e!="object")return;let a=[];Array.isArray(e.a11yThemes)&&(this.#r=[...e.a11yThemes],a.push(u.set(f,"a11y",this.#r))),e.extensions&&typeof e.extensions=="object"&&(this.#a={...L,...e.extensions},a.push(u.set(f,"extensions",this.#a))),e.sticky!=null&&(this.#n=!!e.sticky,a.push(u.set(f,"sticky",this.#n?"on":"off"))),Promise.all(a).then(()=>{this.#i?.(),this.dispatchEvent(new CustomEvent("settings-panel:data-changed",{detail:{data:this.data,source:"property"},bubbles:!0}))})}async#M(){let[e,a,s]=await Promise.all([u.get(f,"a11y"),u.get(f,"extensions"),u.get(f,"sticky")]);this.#r=Array.isArray(e)?e:[],this.#a={...L,...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"}#P(){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.#$(),this.appendChild(this.#e)}#$(){let{mode:e,brand:a,fluid:s,backdrop:r,backdropChrome:n,pageBgType:i,pageBgColor:c,pageBgGradStart:g,pageBgGradEnd:y,pageBgGradDir:p}=l.getState(),b=this.#c(),d=this.#f(),A=this.#b(s),M=this.#d(s),m=this.#S(r),S=this.#l(r);return`
|
|
1
|
+
var je=Object.defineProperty;var ge=(t,e)=>()=>(t&&(e=t(t=0)),e);var me=(t,e)=>{for(var a in e)je(t,a,{get:e[a],enumerable:!0})};var U={};me(U,{destroyStickyManager:()=>tt,initStickyManager:()=>et});function T(){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(){T()}function et(){if(j)return;j=!0,T(),requestAnimationFrame(T),document.fonts?.ready?.then(T),window.addEventListener("resize",T,{passive:!0}),document.addEventListener("toggle",Le,!0),Q=new ResizeObserver(T);let t=document.querySelector("header[data-sticky]");t&&Q.observe(t)}function tt(){if(j){if(j=!1,window.removeEventListener("resize",T),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 j,Q,Z,W=ge(()=>{j=!1,Z=!1});var Re={};me(Re,{SoundManager:()=>at});var qe,ee,at,Ie=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 R=class extends HTMLElement{#t=[];#e;connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&(this.setAttribute("data-upgraded",""),queueMicrotask(()=>{this.dispatchEvent(new CustomEvent(`${this.localName}:upgraded`,{bubbles:!0}))}))}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(){}setState(e,a){this.#e||(this.#e=this.attachInternals());let s=this.#e.states;try{a?s.add(e):s.delete(e)}catch{let r=`--${e}`;a?s.add(r):s.delete(r)}}_adoptInternals(e){this.#e||(this.#e=e)}};var x=new Map,z=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 Ue=new Set(["default","a11y-high-contrast","a11y-large-text","a11y-dyslexia","modern","minimal","classic"]),We=new Set(["kawaii","memphis"]);function N(t){return We.has(t)}function ze(t,e){return`${e}/themes/${t}.css`}function we(t,e){if(!N(t))return Promise.resolve();if(z.has(t))return z.get(t);let a=import(`${e}/packs/${t}.full.js`).catch(()=>{});return z.set(t,a),a}function Ne(t,e){let a=be(),s=()=>{(N(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"),g(),s(),r(void 0)},c=()=>{t.setAttribute("data-vb-theme-state","error"),x.delete(e),g(),n(new Error(`Failed to load theme: ${e}`))},g=()=>{t.removeEventListener("load",i),t.removeEventListener("error",c)};t.addEventListener("load",i,{once:!0}),t.addEventListener("error",c,{once:!0})})}async function D(t){if(!t||Ue.has(t))return;if(x.has(t))return x.get(t);if(typeof document<"u"){let s=document.querySelector(`link[data-vb-theme="${t}"]`);if(s){let r=Ne(s,t);return x.set(t,r),r}}let e=be(),a=N(t)?Xe(t,e):Ke(t,e);return x.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(),x.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 g=document.createElement("link");g.rel="stylesheet",g.href=s,g.setAttribute("data-vb-pack-effects",t),document.head.appendChild(g),we(t,e),r()},c.onerror=()=>{c.setAttribute("data-vb-theme-state","error"),c.remove(),x.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"}],K=[{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"}],X=[{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=[...K,...X],dt=[...Se,...K,...X,...ke],_=t=>K.filter(e=>e.category===t),Ee=[{label:"Style",themes:Se,tier:"core"},{label:"Design",themes:_("Design"),tier:"showcase"},{label:"Content",themes:_("Content"),tier:"showcase"},{label:"Modern",themes:_("Modern"),tier:"showcase"},{label:"Creative",themes:_("Creative"),tier:"showcase"},{label:"Aesthetic",themes:_("Aesthetic"),tier:"showcase"},{label:"Signature",themes:_("Signature"),tier:"showcase"},{label:"OS Styles",themes:_("OS Styles"),tier:"showcase"},{label:"Packs",themes:ke,tier:"showcase"},{label:"More Themes",themes:X,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 I=null;function v(){return I||(I=Ye()),I}function Y(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 xe(t){if(typeof t!="string"||!t)throw new TypeError("VBStore: namespace must be a non-empty string");return`vb:${t}:`}function _e(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={}){I=t.backend??null},async set(t,e,a){let s={data:a,timestamp:Date.now()};await v().setRaw(Y(t,e),JSON.stringify(s))},async get(t,e,a){let s=await v().getRaw(Y(t,e));if(s==null)return null;let r=_e(s);return!r||a?.maxAge!=null&&Date.now()-r.timestamp>a.maxAge?null:r.data},async remove(t,e){await v().removeRaw(Y(t,e))},async list(t){let e=xe(t),a=await v().keys(e),s=[];for(let r of a){let n=await v().getRaw(r);if(n==null)continue;let i=_e(n);i&&s.push({key:r.slice(e.length),data:i.data,timestamp:i.timestamp})}return s},async clear(t){let e=xe(t),a=await v().keys(e);for(let s of a)await v().removeRaw(s)},async clearAll(){let t=await v().keys("vb:");for(let e of t)await v().removeRaw(e)},async setMany(t,e){for(let[a,s]of e)await u.set(t,a,s)}};var H="theme",V="current",B={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"],h=null,l={_initPromise:null,async init(){return this._initPromise?this._initPromise:(this._initPromise=(async()=>{let t=await u.get(H,V);h=t?{...B,...t}:{...B};try{await D(h.brand)}catch{h.brand="default"}return this.apply(h),this._watchSystemPreference(),this._watchRootAttributes(),this._watchCrossDocumentStorage(),h})(),this._initPromise)},_watchCrossDocumentStorage(){typeof window>"u"||window.addEventListener("storage",async t=>{if(t.key!==`vb:${H}:${V}`||!t.newValue)return;let e;try{e=JSON.parse(t.newValue)?.data}catch{return}if(!e||typeof e!="object")return;let a={...B,...h,...e};if(a.brand&&a.brand!==h?.brand)try{await D(a.brand)}catch{a.brand="default"}h=a,this.apply(h||{})})},load(){return h?{...h}:{...B}},save(t){let e={...h??B,...t};return h=e,u.set(H,V,e).catch(()=>{}),e},apply({mode:t="auto",brand:e="default",borderStyle:a="",iconSet:s="",fluid:r="",backdrop:n="",backdropChrome:i="",pageBgType:c="",pageBgColor:g="",pageBgGradStart:y="",pageBgGradEnd:p="",pageBgGradDir:b=""}={}){let d=document.documentElement;d.dataset.mode=t==="auto"?this.getEffectiveMode():t;let M=(d.dataset.theme||"").split(" ").filter(P=>P.startsWith("a11y-")),m=e!=="default"?[e,...M]:[...M];m.length?d.dataset.theme=m.join(" "):delete d.dataset.theme;let S=a||this._readCSSHint("--theme-border-style");S&&S!=="clean"?d.dataset.borderStyle=S: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"&&g)d.style.setProperty("--page-bg-color",g),d.style.removeProperty("--page-bg-gradient");else if(c==="gradient"&&y&&p){let P=b||"to bottom";d.style.setProperty("--page-bg-gradient",`linear-gradient(${P}, ${y}, ${p})`),d.style.removeProperty("--page-bg-color")}else d.style.removeProperty("--page-bg-color"),d.style.removeProperty("--page-bg-gradient");let w=this.load().accent||"default";this._applyAccent(w),window.dispatchEvent(new CustomEvent("vb:theme-change",{detail:{mode:t,brand:e,accent:w,borderStyle:S,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 D(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:g,pageBgColor:y,pageBgGradStart:p,pageBgGradEnd:b,pageBgGradDir:d}=this.load();return{mode:t,brand:e,accent:a,borderStyle:s,iconSet:r,fluid:n,backdrop:i,backdropChrome:c,pageBgType:g,pageBgColor:y,pageBgGradStart:p,pageBgGradEnd:b,pageBgGradDir:d,effectiveMode:this.getEffectiveMode()}},toggleMode(){let e=this.getEffectiveMode()==="dark"?"light":"dark";this.setMode(e)},reset(){h={...B},u.remove(H,V).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(B)},_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(!h)return;let a=(document.documentElement.dataset.theme||"").split(/\s+/).filter(Boolean).find(s=>!s.startsWith("a11y-"))||"default";a!==h.brand&&(h.brand=a,D(a).catch(()=>{}),window.dispatchEvent(new CustomEvent("vb:theme-change",{detail:{...this.getState()}})))},_syncFromDataMode(){if(!h)return;let t=document.documentElement.dataset.mode||"auto",e=h.mode==="auto"?this.getEffectiveMode():h.mode;t!==e&&(h.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,E={...J};function C(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);E=t?{...J,...t}:{...J},(E.timeOfDay||E.seasonal)&&(this._captureBaseHues(),this._update(),this._startLoop()),window.addEventListener("vb:theme-change",()=>{this._hasActiveSource()&&requestAnimationFrame(()=>{this._captureBaseHues(),this._update()})})},load(){return{...E}},save(t){return E={...E,...t},u.set(Ce,Te,E).catch(()=>{}),{...E}},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?C(-20,20,(t-5)/2):t<10?C(20,5,(t-7)/3):t<14?C(5,0,(t-10)/4):t<17?C(0,-5,(t-14)/3):t<19?C(-5,15,(t-17)/2):t<21?C(15,-10,(t-19)/2):C(-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 G=null;function Me(){return"0.2.0-eb7b5882"}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 G||(G=navigator.serviceWorker?.ready??Promise.reject(new Error("SW not supported"))),G}function $e(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 Fe(){return $e("GET_STATUS")}async function De(){return $e("CLEAR_CACHE")}async function Oe(){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",()=>{G=navigator.serviceWorker.register(t).catch(e=>{console.warn("[VB] Service worker registration failed:",e)})})}var $=null,f="settings",L={motionFx:!0,sounds:!1},te=class extends R{#t=null;#e=null;#s=!1;#r=[];#a={...L};#n=!1;setup(){return this.#A(),!0}async#A(){await this.#M(),this.#P(),this.#F(),this.#i(),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(){}get data(){return{a11yThemes:[...this.#r],extensions:{...this.#a},sticky:this.#n}}set data(e){if(!e||typeof e!="object")return;let a=[];Array.isArray(e.a11yThemes)&&(this.#r=[...e.a11yThemes],a.push(u.set(f,"a11y",this.#r))),e.extensions&&typeof e.extensions=="object"&&(this.#a={...L,...e.extensions},a.push(u.set(f,"extensions",this.#a))),e.sticky!=null&&(this.#n=!!e.sticky,a.push(u.set(f,"sticky",this.#n?"on":"off"))),Promise.all(a).then(()=>{this.#i?.(),this.dispatchEvent(new CustomEvent("settings-panel:data-changed",{detail:{data:this.data,source:"property"},bubbles:!0}))})}async#M(){let[e,a,s]=await Promise.all([u.get(f,"a11y"),u.get(f,"extensions"),u.get(f,"sticky")]);this.#r=Array.isArray(e)?e:[],this.#a={...L,...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"}#P(){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.#$(),this.appendChild(this.#e)}#$(){let{mode:e,brand:a,fluid:s,backdrop:r,backdropChrome:n,pageBgType:i,pageBgColor:c,pageBgGradStart:g,pageBgGradEnd:y,pageBgGradDir:p}=l.getState(),b=this.#c(),d=this.#f(),A=this.#b(s),M=this.#d(s),m=this.#S(r),S=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">
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var u=window.matchMedia("(prefers-reduced-motion: reduce)");var l=new Map;function d(i,n,e={}){let t=e.priority??10,o={impl:n,bundle:e.bundle,contract:e.contract,priority:t},r=l.get(i);if(customElements.get(i)){if(!r||r.priority>=t){r&&r.priority===t&&r.impl!==n&&console.warn(`[VB Bundle] Tag <${i}> already registered by "${r.bundle}" (priority ${r.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${i}> defined by "${r.bundle}" cannot be replaced (customElements.define is permanent). "${e.bundle}" has higher priority but arrived late.`);return}if(r&&r.priority>=t){r.priority===t&&console.warn(`[VB Bundle] Tag <${i}> already registered by "${r.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}l.set(i,o),customElements.define(i,n)}var s=class extends HTMLElement{#t=[];#e;connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&(this.setAttribute("data-upgraded",""),queueMicrotask(()=>{this.dispatchEvent(new CustomEvent(`${this.localName}:upgraded`,{bubbles:!0}))}))}disconnectedCallback(){for(let n of this.#t)n();this.#t=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(n,e,t,o){n.addEventListener(e,t,o),this.#t.push(()=>n.removeEventListener(e,t,o))}setup(){}teardown(){}setState(n,e){this.#e||(this.#e=this.attachInternals());let t=this.#e.states;try{e?t.add(n):t.delete(n)}catch{let o=`--${n}`;e?t.add(o):t.delete(o)}}_adoptInternals(n){this.#e||(this.#e=n)}};var c=class extends s{setup(){this.#t(),this.#e(),this.#r(),this.getAttribute("src")&&this.#o()}#t(){let n=this.getAttribute("current")||window.location.pathname,e=this.querySelectorAll("a");for(let t of e)new URL(t.href,window.location.origin).pathname===n&&t.setAttribute("aria-current","page")}#e(){let n=this.querySelector('[aria-current="page"]');if(!n)return;let e=n.parentElement;for(;e&&e!==this;)e.tagName==="DETAILS"&&(e.open=!0),e=e.parentElement}#r(){let n=this.querySelectorAll("details");if(!n.length)return;let e=document.createElement("nav");e.setAttribute("data-sitemap-controls",""),e.setAttribute("aria-label","Sitemap controls");let t=document.createElement("button");t.type="button",t.textContent="Expand all",t.addEventListener("click",()=>{for(let r of n)r.open=!0});let o=document.createElement("button");o.type="button",o.textContent="Collapse all",o.addEventListener("click",()=>{for(let r of n)r.open=!1;this.#e()}),e.append(t,o),this.prepend(e)}async#o(){let n=this.getAttribute("src");if(n)try{let e=await fetch(n);if(!e.ok)return;let t=await e.json();this.#i(t)}catch{}}#i(n){if(!n||!Array.isArray(n.children))return;let e=document.createElement("nav");e.setAttribute("aria-label","Full site map"),e.append(this.#n(n.children));let t=this.querySelector("nav");t?t.replaceWith(e):this.append(e),this.#t(),this.#e()}#n(n){let e=document.createElement("ul");for(let t of n){let o=document.createElement("li");if(t.children?.length){let r=document.createElement("details"),a=document.createElement("summary");a.textContent=t.title,r.append(a),r.append(this.#n(t.children)),o.append(r)}else{let r=document.createElement("a");r.href=t.href||t.path,r.textContent=t.title,o.append(r)}e.append(o)}return e}};d("site-map",c);export{c as SiteMap};
|
|
1
|
+
var $=window.matchMedia("(prefers-reduced-motion: reduce)");var N=new Map;function T(l,s,t={}){let e=t.priority??10,i={impl:s,bundle:t.bundle,contract:t.contract,priority:e},r=N.get(l);if(customElements.get(l)){if(!r||r.priority>=e){r&&r.priority===e&&r.impl!==s&&console.warn(`[VB Bundle] Tag <${l}> already registered by "${r.bundle}" (priority ${r.priority}). Skipping "${t.bundle}".`);return}console.warn(`[VB Bundle] Tag <${l}> defined by "${r.bundle}" cannot be replaced (customElements.define is permanent). "${t.bundle}" has higher priority but arrived late.`);return}if(r&&r.priority>=e){r.priority===e&&console.warn(`[VB Bundle] Tag <${l}> already registered by "${r.bundle}". Skipping "${t.bundle}" (first wins at equal priority).`);return}N.set(l,i),customElements.define(l,s)}var S=class extends HTMLElement{#p=[];#s;connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&(this.setAttribute("data-upgraded",""),queueMicrotask(()=>{this.dispatchEvent(new CustomEvent(`${this.localName}:upgraded`,{bubbles:!0}))}))}disconnectedCallback(){for(let s of this.#p)s();this.#p=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(s,t,e,i){s.addEventListener(t,e,i),this.#p.push(()=>s.removeEventListener(t,e,i))}setup(){}teardown(){}setState(s,t){this.#s||(this.#s=this.attachInternals());let e=this.#s.states;try{t?e.add(s):e.delete(s)}catch{let i=`--${s}`;t?e.add(i):e.delete(i)}}_adoptInternals(s){this.#s||(this.#s=s)}};var C={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"}},E={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"}},w=class l extends S{static get observedAttributes(){return["src","collapsed","compact","title","data-view","data-orientation","data-detail"]}static#p=0;#s=null;#i=null;#t=null;#m=null;#n=0;#o=0;setup(){if((this.getAttribute("mode")||"nav-enhance")!=="ia-tree"){this.#dt();return}l.#p++;let s=this.getAttribute("src");if(s&&!this.querySelector("nav")){this._loadSrc(s);return}let t=this.querySelector(":scope > nav");if(t){if(this.#n=0,this.#o=0,this.#k(t.querySelector("ul"),0),this.dataset.view==="visual"){this.#N(),this.#st(t),this.dispatchEvent(new CustomEvent("site-map:ready",{bubbles:!0,detail:{nodeCount:this.#n,depth:this.#o}}));return}this.#q(t.querySelector("ul"),0),this.#N(),t.classList.add("sm-tree"),t.setAttribute("role","tree"),t.setAttribute("aria-label",this.getAttribute("title")||"Site map"),this.#s=t,this.hasAttribute("collapsed")&&this.#T(),this.listen(t,"keydown",e=>this.#Q(e)),this.listen(t,"click",e=>this.#Z(e)),this.dispatchEvent(new CustomEvent("site-map:ready",{bubbles:!0,detail:{nodeCount:this.#n,depth:this.#o}}))}}teardown(){if((this.getAttribute("mode")||"nav-enhance")!=="ia-tree"){this.#ut();return}if(this.#t){this.#t.remove(),this.#t=null;let s=this.querySelector("nav");s&&(s.style.display="",s.removeAttribute("aria-hidden"))}this.#i&&(this.#i.remove(),this.#i=null),this.#s&&(this.#s.classList.remove("sm-tree"),this.#s.removeAttribute("role"),this.#s.removeAttribute("aria-label")),this.querySelectorAll(".sm-node-content, .sm-toggle").forEach(s=>s.remove()),this.querySelectorAll('li[role="treeitem"]').forEach(s=>{s.removeAttribute("role"),s.removeAttribute("aria-expanded"),s.removeAttribute("tabindex")}),this.querySelectorAll('ul[role="group"]').forEach(s=>{s.removeAttribute("role"),s.classList.remove("sm-subtree","sm-collapsed")}),this.#s=null,this.#m=null,this.#n=0,this.#o=0}attributeChangedCallback(s,t,e){(this.getAttribute("mode")||"nav-enhance")==="ia-tree"&&(t===e||!this.isConnected||s==="src"&&this._loadSrc(e))}#k(s,t){if(!s)return;let e=s.querySelectorAll(":scope > li");for(let i of e){this.#n++;let r=t+1;r>this.#o&&(this.#o=r);let o=i.querySelector(":scope > ul");o&&this.#k(o,r)}}#q(s,t){if(!s)return;t>0&&(s.setAttribute("role","group"),s.classList.add("sm-subtree"));let e=[...s.querySelectorAll(":scope > li")];for(let i of e){let r=!!i.querySelector(":scope > ul"),o=i.querySelector(":scope > a"),a=i.getAttribute("data-page-type")||"page",u=i.getAttribute("data-template")||"",p=i.getAttribute("data-status")||"";i.setAttribute("role","treeitem"),i.setAttribute("tabindex","-1");let n=document.createElement("span");if(n.className="sm-node-content",r){i.setAttribute("aria-expanded","true");let c=document.createElement("button");c.className="sm-toggle",c.setAttribute("type","button"),c.setAttribute("aria-hidden","true"),c.setAttribute("tabindex","-1"),c.textContent="\u25BE",n.appendChild(c)}else{let c=document.createElement("span");c.className="sm-leaf-marker",c.setAttribute("aria-hidden","true"),n.appendChild(c)}if(p&&E[p]){let c=document.createElement("span");c.className=`sm-status-dot ${E[p].cssClass}`,c.setAttribute("title",E[p].label),c.setAttribute("aria-label",E[p].label),n.appendChild(c)}if(o&&n.appendChild(o),C[a]){let c=document.createElement("span");c.className=`sm-badge ${C[a].cssClass}`,c.textContent=C[a].label,n.appendChild(c)}if(u){let c=document.createElement("span");c.className="sm-badge sm-badge--template",c.textContent=u,n.appendChild(c)}i.insertBefore(n,i.firstChild);let f=i.querySelector(":scope > ul");f&&this.#q(f,t+1)}}#N(){let s=this.getAttribute("title");if(!s&&this.#n===0)return;if(this.#i=document.createElement("div"),this.#i.className="sm-header",s){let i=document.createElement("h2");i.className="sm-title",i.textContent=s,this.#i.appendChild(i)}let t=document.createElement("span");t.className="sm-summary",t.textContent=`${this.#n} pages \xB7 ${this.#o} levels deep`,this.#i.appendChild(t);let e=document.createElement("button");e.className="sm-toggle-all",e.setAttribute("type","button"),e.textContent="Collapse all",e.addEventListener("click",()=>{this.querySelectorAll('li[aria-expanded="true"]').length>0?(this.#T(),e.textContent="Expand all"):(this.#K(),e.textContent="Collapse all")}),this.#i.appendChild(e),this.insertBefore(this.#i,this.firstChild)}#T(){let s=this.querySelectorAll("li[aria-expanded]");for(let t of s){t.setAttribute("aria-expanded","false");let e=t.querySelector(":scope > ul");e&&e.classList.add("sm-collapsed");let i=t.querySelector(":scope > .sm-node-content > .sm-toggle");i&&(i.textContent="\u25B8")}}#K(){let s=this.querySelectorAll("li[aria-expanded]");for(let t of s){t.setAttribute("aria-expanded","true");let e=t.querySelector(":scope > ul");e&&e.classList.remove("sm-collapsed");let i=t.querySelector(":scope > .sm-node-content > .sm-toggle");i&&(i.textContent="\u25BE")}}#b(s){let t=s.getAttribute("aria-expanded")==="true";s.setAttribute("aria-expanded",t?"false":"true");let e=s.querySelector(":scope > ul");e&&e.classList.toggle("sm-collapsed",t);let i=s.querySelector(":scope > .sm-node-content > .sm-toggle");i&&(i.textContent=t?"\u25B8":"\u25BE")}#Z(s){let t=s.target;if(t.closest(".sm-toggle")){s.preventDefault();let r=t.closest('li[role="treeitem"]');r&&this.#b(r);return}let e=t.closest('li[role="treeitem"]');if(!e)return;this.#l(e);let i=t.closest("a");i&&this.dispatchEvent(new CustomEvent("site-map:select",{bubbles:!0,detail:{href:i.getAttribute("href")||"",pageType:e.getAttribute("data-page-type")||"page",template:e.getAttribute("data-template")||""}}))}#Q(s){let t=s.target.closest('li[role="treeitem"]');if(!t)return;let e=s.key,i=!1;switch(e){case"ArrowDown":i=!0,this.#_(t);break;case"ArrowUp":i=!0,this.#tt(t);break;case"ArrowRight":if(i=!0,t.getAttribute("aria-expanded")==="false")this.#b(t);else if(t.getAttribute("aria-expanded")==="true"){let r=t.querySelector(':scope > ul > li[role="treeitem"]');r&&this.#l(r)}break;case"ArrowLeft":if(i=!0,t.getAttribute("aria-expanded")==="true")this.#b(t);else{let r=t.parentElement?.closest('li[role="treeitem"]');r&&this.#l(r)}break;case"Enter":i=!0,t.hasAttribute("aria-expanded")&&this.#b(t);break;case" ":i=!0;{let r=t.querySelector(":scope > .sm-node-content > a");r&&r.click()}break;case"Home":i=!0;{let r=this.querySelector('li[role="treeitem"]');r&&this.#l(r)}break;case"End":i=!0;{let r=this.#x();r.length&&this.#l(r[r.length-1])}break}i&&(s.preventDefault(),s.stopPropagation())}#x(){let s=[],t=i=>{if(!i)return;let r=[...i.querySelectorAll(':scope > li[role="treeitem"]')];for(let o of r)if(s.push(o),o.getAttribute("aria-expanded")==="true"){let a=o.querySelector(":scope > ul");a&&t(a)}},e=this.querySelector("nav > ul");return t(e),s}#_(s){let t=this.#x(),e=t.indexOf(s);e>=0&&e<t.length-1&&this.#l(t[e+1])}#tt(s){let t=this.#x(),e=t.indexOf(s);e>0&&this.#l(t[e-1])}#l(s){this.#m&&this.#m.setAttribute("tabindex","-1"),s.setAttribute("tabindex","0"),s.focus(),this.#m=s}static#g="http://www.w3.org/2000/svg";static#c=150;static#d=70;static#$=30;static#v=50;static#et=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#M={draft:"#94a3b8",ready:"#f59e0b",live:"#22c55e",deprecated:"#ef4444"};#B(s){let t=[];for(let e of s.querySelectorAll(":scope > li")){let i=e.querySelector(":scope > a"),r=e.querySelector(":scope > ul");t.push({label:i?.textContent?.trim()||e.firstChild?.textContent?.trim()||"",href:i?.getAttribute("href")||"",pageType:e.getAttribute("data-page-type")||"page",template:e.getAttribute("data-template")||"",status:e.getAttribute("data-status")||"",children:r?this.#B(r):[],x:0,y:0,subtreeWidth:0,collapsed:!1,childCount:0})}return t}#D(s,t=0){let e=l.#c,i=l.#d,r=l.#$,o=l.#v;for(let a of s)a.childCount=this.#I(a),a.children.length>0&&!a.collapsed?(this.#D(a.children,t+1),a.subtreeWidth=a.children.reduce((u,p)=>u+p.subtreeWidth,0)+r*(a.children.length-1)):a.subtreeWidth=e,a.subtreeWidth=Math.max(a.subtreeWidth,e)}#I(s){let t=0;for(let e of s.children)t+=1+this.#I(e);return t}#z(s,t,e){let i=l.#c,r=l.#d,o=l.#$,a=l.#v,u=t;for(let p of s)p.x=u+(p.subtreeWidth-i)/2,p.y=e,p.children.length>0&&!p.collapsed&&this.#z(p.children,u,e+r+a),u+=p.subtreeWidth+o}#st(s){s.style.display="none",s.setAttribute("aria-hidden","true");let t=s.querySelector("ul");t&&(this.#e=this.#B(t),this.#u())}#e=null;#r=1;get#S(){return this.dataset.orientation==="horizontal"?"horizontal":"vertical"}get#P(){return Math.min(4,Math.max(0,parseInt(this.dataset.detail||"2",10)))}static#y={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#H=["Shape","Shape + Title","Full","Full + Status","Wireframe"];static#it=0;#rt(s){let t=this.#t?.querySelector(".sm-visual-scroll"),e=this.#t?.querySelector('svg[role="tree"]'),i={nodeId:null,rectTop:0,rectLeft:0,focusId:this.#h};if(!t||!e)return i;let r=s||this.#h;if(!r)return i;let a=e.querySelector(`[data-node-id="${r}"]`)?.querySelector("rect");if(!a)return i;let u=a.getBoundingClientRect(),p=t.getBoundingClientRect();return i.nodeId=r,i.rectTop=u.top-p.top,i.rectLeft=u.left-p.left,i}#F(s){let t=this.#t?.querySelector(".sm-visual-scroll"),e=this.#t?.querySelector('svg[role="tree"]');if(!(!t||!e)){if(s.nodeId){let r=e.querySelector(`[data-node-id="${s.nodeId}"]`)?.querySelector("rect");if(r){let o=r.getBoundingClientRect(),a=t.getBoundingClientRect(),u=o.top-a.top-s.rectTop,p=o.left-a.left-s.rectLeft;t.scrollTop+=u,t.scrollLeft+=p}}s.focusId&&(this.#a(s.focusId),e.focus({preventScroll:!0}))}}#u(s={}){if(!this.#e)return;let t=this.#rt(s.anchorId||null),e=this.#t,i=l.#g,r=l.#c,o=l.#d,a=l.#et,u=this.#S==="horizontal";this.#D(this.#e),this.#z(this.#e,a,a);let p=this.#U(this.#e),n=p.maxX+r+a,f=p.maxY+o+a;u&&([n,f]=[f,n]),this.#t=document.createElement("div"),this.#t.className="sm-visual",this.#t.setAttribute("tabindex","-1"),this.#t.appendChild(this.#nt());let c=document.createElement("div");c.className="sm-visual-scroll";let h=document.createElementNS(i,"svg");h.setAttribute("viewBox",`0 0 ${n} ${f}`),h.setAttribute("width",String(n)),h.setAttribute("height",String(f)),h.setAttribute("role","img"),h.setAttribute("aria-label",`Site map${this.getAttribute("title")?": "+this.getAttribute("title"):""}`);let b=document.createElement("div");if(b.className="sm-visual-zoom",b.style.width=`${Math.round(n*this.#r)}px`,b.style.height=`${Math.round(f*this.#r)}px`,h.style.transform=`scale(${this.#r})`,h.style.transformOrigin="0 0",u){let y=document.createElementNS(i,"g");y.setAttribute("transform",`rotate(90 0 0) translate(0 -${f})`),this.#C(y,this.#e),this.#E(y,this.#e),h.appendChild(y)}else this.#C(h,this.#e),this.#E(h,this.#e);b.appendChild(h),c.appendChild(b),this.#t.appendChild(c);let d=document.createElement("div");d.className="sm-visual-summary";let m=Math.round(this.#r*100);d.textContent=`${this.#n} pages \xB7 ${this.#o} levels \xB7 ${m}%`,this.#t.appendChild(d);let g=this.#t,k=()=>{e&&e.isConnected?e.replaceWith(g):this.appendChild(g)};if(e?.isConnected&&"startViewTransition"in document&&!matchMedia("(prefers-reduced-motion: reduce)").matches){let y=`sm-vt-${++l.#it}`;e.style.viewTransitionName=y,g.style.viewTransitionName=y;let A=document.startViewTransition(k);A.finished.finally(()=>{g.style.viewTransitionName=""}),A.updateCallbackDone.then(()=>this.#F(t))}else k(),this.#F(t);this.#ct(this.#t,h),this.listen(h,"click",y=>{let A=y.target,q=A.closest("[data-toggle]");if(q){let v=q.getAttribute("data-toggle");v&&this.#Y(v);return}let x=A.closest("[data-node-id]");if(x){let v=x.getAttribute("data-node-id");v&&this.#a(v),this.dispatchEvent(new CustomEvent("site-map:select",{bubbles:!0,detail:{href:x.getAttribute("data-href")||"",pageType:x.getAttribute("data-page-type")||"page",template:x.getAttribute("data-template")||""}}))}}),h.setAttribute("tabindex","0"),h.setAttribute("role","tree"),h.setAttribute("aria-label",`Site map${this.getAttribute("title")?": "+this.getAttribute("title"):""} \u2014 use arrow keys to navigate`),h.addEventListener("keydown",y=>this.#at(y)),requestAnimationFrame(()=>{let y=h.querySelector("[data-node-id]");y&&this.#O(y)})}#nt(){let s=document.createElement("div");s.className="sm-vtoolbar",s.setAttribute("role","toolbar"),s.setAttribute("aria-label","Site map controls");let t=h=>`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${h}</svg>`,e=this.#A(t(l.#y.zoomIn),"Zoom in",()=>{this.#r=Math.min(3,this.#r+.25),this.#u()});s.appendChild(e);let i=this.#A(t(l.#y.zoomOut),"Zoom out",()=>{this.#r=Math.max(.25,this.#r-.25),this.#u()});s.appendChild(i);let r=this.#A(t(l.#y.reset),"Reset zoom",()=>{this.#r=1,this.#u()});s.appendChild(r);let o=document.createElement("span");o.className="sm-vtoolbar-sep",s.appendChild(o);let a=this.#S==="horizontal"?"Vertical":"Horizontal",u=this.#A(t(l.#y.flip),a,()=>{this.dataset.orientation=this.#S==="horizontal"?"vertical":"horizontal",this.#u()});s.appendChild(u),s.appendChild(o.cloneNode());let p=this.#P,n=document.createElement("label");n.className="sm-vtoolbar-detail",n.textContent="Detail ";let f=document.createElement("input");f.type="range",f.min="0",f.max="4",f.value=String(p),f.setAttribute("aria-label","Detail level"),f.className="sm-vtoolbar-slider",n.appendChild(f);let c=document.createElement("span");return c.className="sm-vtoolbar-detail-label",c.textContent=l.#H[p],n.appendChild(c),f.addEventListener("input",()=>{this.dataset.detail=f.value,c.textContent=l.#H[parseInt(f.value,10)],this.#u()}),s.appendChild(n),s}#A(s,t,e){let i=document.createElement("button");return i.type="button",i.className="sm-vtoolbar-btn",i.innerHTML=s,i.setAttribute("aria-label",t),i.setAttribute("title",t),i.addEventListener("click",e),i}#h=null;#W(s,t=""){let e=[];for(let i=0;i<s.length;i++){let r=s[i],o=t?`${t}-${i}`:String(i);e.push(o),r.children.length>0&&!r.collapsed&&e.push(...this.#W(r.children,o))}return e}#ot(s){let t=s.lastIndexOf("-");return t>0?s.slice(0,t):null}#mt(s){let t=this.#f(s,this.#e);return!t||t.collapsed||t.children.length===0?null:`${s}-0`}#a(s){if(!s||!this.#t)return;let t=this.#t.querySelector('svg[role="tree"]');if(!t)return;let e=t.querySelector(`[data-node-id="${s}"]`);if(!e)return;this.#O(e),this.#h=s;let i=e.querySelector("rect"),r=this.#t?.querySelector(".sm-visual-scroll");if(i&&r){let o=i.getBoundingClientRect(),a=r.getBoundingClientRect();(o.left<a.left||o.right>a.right||o.top<a.top||o.bottom>a.bottom)&&i.scrollIntoView({behavior:"smooth",block:"nearest",inline:"nearest"})}}#O(s){let t=s.closest("svg");if(!t)return;t.querySelectorAll(".sm-vfocus-ring").forEach(r=>r.remove()),t.querySelectorAll("[data-node-id]").forEach(r=>r.removeAttribute("aria-current"));let e=l.#g,i=s.querySelector("rect");if(i){let r=document.createElementNS(e,"rect");r.setAttribute("x",String(parseFloat(i.getAttribute("x")??"0")-3)),r.setAttribute("y",String(parseFloat(i.getAttribute("y")??"0")-3)),r.setAttribute("width",String(parseFloat(i.getAttribute("width")??"0")+6)),r.setAttribute("height",String(parseFloat(i.getAttribute("height")??"0")+6)),r.setAttribute("rx","11"),r.setAttribute("fill","none"),r.setAttribute("stroke","#3b82f6"),r.setAttribute("stroke-width","2"),r.setAttribute("class","sm-vfocus-ring"),s.parentNode?.insertBefore(r,s)}s.setAttribute("aria-current","true"),this.#h=s.getAttribute("data-node-id")}#at(s){if(!this.#e)return;let t=this.#h||"0",e=!1;switch(s.key){case"ArrowDown":{e=!0;let i=this.#f(t,this.#e);i&&i.children.length>0&&!i.collapsed&&this.#a(`${t}-0`);break}case"ArrowUp":{e=!0;let i=this.#ot(t);i&&this.#a(i);break}case"ArrowRight":{e=!0;let i=this.#V(t,1);i&&this.#a(i);break}case"ArrowLeft":{e=!0;let i=this.#V(t,-1);i&&this.#a(i);break}case"Enter":case" ":{e=!0;let i=this.#f(t,this.#e);i&&i.children.length>0&&this.#Y(t);break}case"Home":{e=!0,this.#a("0");break}case"End":{e=!0;let i=this.#W(this.#e);i.length&&this.#a(i[i.length-1]);break}}e&&(s.preventDefault(),s.stopPropagation())}#V(s,t){let e=s.split("-").map(Number),i=e[e.length-1]+t;if(i<0)return null;let r=e.length>1?e.slice(0,-1).join("-"):null,o=r?this.#f(r,this.#e):null,a=o?o.children:this.#e;if(!a||i>=a.length)return null;let u=[...e];return u[u.length-1]=i,u.join("-")}#R=!1;#lt={dragging:!1,startX:0,startY:0,scrollLeft:0,scrollTop:0,moved:!1};#ct(s,t){if(t.style.cursor="grab",this.#R)return;this.#R=!0;let e=this.#lt;this.listen(this,"pointerdown",i=>{let r=i;if(r.target.closest("button, [data-toggle], .sm-vtoolbar, input"))return;let o=this.querySelector(".sm-visual-scroll");if(!o)return;e.dragging=!0,e.moved=!1,e.startX=r.clientX,e.startY=r.clientY,e.scrollLeft=o.scrollLeft,e.scrollTop=o.scrollTop;let a=this.querySelector('svg[role="tree"]');a&&(a.style.cursor="grabbing")}),this.listen(window,"pointermove",i=>{if(!e.dragging)return;let r=i,o=r.clientX-e.startX,a=r.clientY-e.startY;(Math.abs(o)>3||Math.abs(a)>3)&&(e.moved=!0);let u=this.querySelector(".sm-visual-scroll");u&&(u.scrollLeft=e.scrollLeft-o,u.scrollTop=e.scrollTop-a)}),this.listen(window,"pointerup",()=>{if(!e.dragging)return;e.dragging=!1;let i=this.querySelector('svg[role="tree"]');i&&(i.style.cursor="grab")}),this.listen(this,"click",i=>{e.moved&&(i.stopPropagation(),e.moved=!1)},{capture:!0})}#U(s){let t=0,e=0;for(let i of s)if(i.x+l.#c>t&&(t=i.x+l.#c),i.y+l.#d>e&&(e=i.y+l.#d),i.children.length>0&&!i.collapsed){let r=this.#U(i.children);r.maxX>t&&(t=r.maxX),r.maxY>e&&(e=r.maxY)}return{maxX:t,maxY:e}}#C(s,t){let e=l.#g,i=l.#c,r=l.#d,o=l.#v;for(let a of t){if(a.children.length===0||a.collapsed)continue;let u=a.x+i/2,p=a.y+r,n=p+o/2;for(let f of a.children){let c=f.x+i/2,h=f.y,b=document.createElementNS(e,"path");b.setAttribute("d",`M ${u} ${p} L ${u} ${n} L ${c} ${n} L ${c} ${h}`),b.setAttribute("fill","none"),b.setAttribute("stroke","#cbd5e1"),b.setAttribute("stroke-width","1.5"),s.appendChild(b)}this.#C(s,a.children)}}#E(s,t,e=""){let i=l.#g,r=l.#c,o=l.#d,a=this.#P,u=a>=4;for(let p=0;p<t.length;p++){let n=t[p],f=e?`${e}-${p}`:String(p),c=u?{stroke:"#94a3b8",fill:"#ffffff",text:"#475569"}:l.#L[n.pageType]||l.#L.page,h=document.createElementNS(i,"g");h.setAttribute("data-node-id",f),h.setAttribute("data-href",n.href),h.setAttribute("data-page-type",n.pageType),h.setAttribute("data-template",n.template),h.style.cursor="pointer";let b=document.createElementNS(i,"rect");if(b.setAttribute("x",String(n.x)),b.setAttribute("y",String(n.y)),b.setAttribute("width",String(r)),b.setAttribute("height",String(o)),b.setAttribute("rx","8"),b.setAttribute("fill",c.fill),b.setAttribute("stroke",c.stroke),b.setAttribute("stroke-width",u?"1":"2"),(u||n.pageType==="modal")&&b.setAttribute("stroke-dasharray","6 3"),h.appendChild(b),a>=1){let d=document.createElementNS(i,"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",c.text),d.setAttribute("font-family","system-ui, sans-serif"),d.textContent=n.label.length>18?n.label.slice(0,17)+"\u2026":n.label,h.appendChild(d)}if(a>=2){let d=document.createElementNS(i,"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",c.stroke),d.setAttribute("font-family","system-ui, sans-serif"),d.textContent=(C[n.pageType]?.label||n.pageType).toUpperCase(),h.appendChild(d),n.template){let m=document.createElementNS(i,"text");m.setAttribute("x",String(n.x+r/2)),m.setAttribute("y",String(n.y+54)),m.setAttribute("text-anchor","middle"),m.setAttribute("font-size","9"),m.setAttribute("fill","#94a3b8"),m.setAttribute("font-family","system-ui, sans-serif"),m.textContent=n.template,h.appendChild(m)}}if(a>=3&&n.status&&l.#M[n.status]){let d=document.createElementNS(i,"circle");d.setAttribute("cx",String(n.x+r/2)),d.setAttribute("cy",String(n.y+o-8)),d.setAttribute("r","4"),d.setAttribute("fill",u?"#94a3b8":l.#M[n.status]),h.appendChild(d)}if(u)for(let d=0;d<2;d++){let m=document.createElementNS(i,"line");m.setAttribute("x1",String(n.x+12)),m.setAttribute("x2",String(n.x+r-12)),m.setAttribute("y1",String(n.y+o-22+d*8)),m.setAttribute("y2",String(n.y+o-22+d*8)),m.setAttribute("stroke","#cbd5e1"),m.setAttribute("stroke-width","1"),m.setAttribute("stroke-dasharray","3 2"),h.appendChild(m)}if(n.children.length>0){let d=document.createElementNS(i,"g");d.setAttribute("data-toggle",f),d.style.cursor="pointer";let m=document.createElementNS(i,"circle");m.setAttribute("cx",String(n.x+r/2)),m.setAttribute("cy",String(n.y+o+10)),m.setAttribute("r","10"),m.setAttribute("fill",u?"#fff":"#f1f5f9"),m.setAttribute("stroke","#cbd5e1"),m.setAttribute("stroke-width","1"),d.appendChild(m);let g=document.createElementNS(i,"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),h.appendChild(d)}s.appendChild(h),n.children.length>0&&!n.collapsed&&this.#E(s,n.children,f)}}#Y(s){let t=this.#f(s,this.#e);t&&(t.collapsed=!t.collapsed,this.#h||(this.#h=s),this.#u({anchorId:s}))}#f(s,t){if(!t)return null;let e=s.split("-").map(Number),i=t,r=null;for(let o of e){if(!i||o>=i.length)return null;r=i[o],i=r.children}return r}async _loadSrc(s){if(s)try{let t=await fetch(s);if(!t.ok)throw new Error(`HTTP ${t.status}`);let e=await t.json();e.title&&!this.getAttribute("title")&&this.setAttribute("title",e.title),this._setPages(e.pages||[])}catch(t){console.warn(`[site-map] Failed to load src="${s}":`,t)}}get pages(){let t=this.querySelector(":scope > nav")?.querySelector("ul");return t?this.#G(t):[]}set pages(s){this._setPages(Array.isArray(s)?s:[]),this.dispatchEvent(new CustomEvent("site-map:pages-changed",{detail:{pages:this.pages,source:"property"},bubbles:!0}))}_setPages(s){for(;this.firstChild;)this.firstChild.remove();let t=document.createElement("nav"),e=document.createElement("ul");this.#X(e,s),t.appendChild(e),this.appendChild(t),this.teardown(),this.removeAttribute("data-upgraded"),this.setup()}#G(s){let t=[];for(let e of s.querySelectorAll(":scope > li")){let i=e.querySelector(":scope > a"),r=e.querySelector(":scope > ul"),o={label:i?.textContent?.trim()||"",href:i?.getAttribute("href")||void 0,pageType:e.getAttribute("data-page-type")||void 0,template:e.getAttribute("data-template")||void 0,status:e.getAttribute("data-status")||void 0};r&&(o.children=this.#G(r)),t.push(o)}return t}#X(s,t){for(let e of t){let i=document.createElement("li");e.pageType&&i.setAttribute("data-page-type",e.pageType),e.template&&i.setAttribute("data-template",e.template),e.status&&i.setAttribute("data-status",e.status);let r=document.createElement("a");if(r.href=e.href||"#",r.textContent=e.label||"",i.appendChild(r),e.children&&e.children.length>0){let o=document.createElement("ul");this.#X(o,e.children),i.appendChild(o)}s.appendChild(i)}}#dt(){this.#j(),this.#w(),this.#ht(),this.getAttribute("src")&&this.#pt()}#ut(){this.querySelector(":scope > [data-sitemap-controls]")?.remove()}#j(){let s=this.getAttribute("current")||window.location.pathname,t=this.querySelectorAll("a");for(let e of t)new URL(e.href,window.location.origin).pathname===s&&e.setAttribute("aria-current","page")}#w(){let s=this.querySelector('[aria-current="page"]');if(!s)return;let t=s.parentElement;for(;t&&t!==this;)t.tagName==="DETAILS"&&(t.open=!0),t=t.parentElement}#ht(){let s=this.querySelectorAll("details");if(!s.length)return;let t=document.createElement("nav");t.setAttribute("data-sitemap-controls",""),t.setAttribute("aria-label","Sitemap controls");let e=document.createElement("button");e.type="button",e.textContent="Expand all",this.listen(e,"click",()=>{for(let r of s)r.open=!0});let i=document.createElement("button");i.type="button",i.textContent="Collapse all",this.listen(i,"click",()=>{for(let r of s)r.open=!1;this.#w()}),t.append(e,i),this.prepend(t)}async#pt(){let s=this.getAttribute("src");if(s)try{let t=await fetch(s);if(!t.ok)return;let e=await t.json();this.#ft(e)}catch{}}#ft(s){if(!s||!Array.isArray(s.children))return;let t=document.createElement("nav");t.setAttribute("aria-label","Full site map"),t.append(this.#J(s.children));let e=this.querySelector("nav");e?e.replaceWith(t):this.append(t),this.#j(),this.#w()}#J(s){let t=document.createElement("ul");for(let e of s){let i=document.createElement("li");if(e.children?.length){let r=document.createElement("details"),o=document.createElement("summary");o.textContent=e.title,r.append(o),r.append(this.#J(e.children)),i.append(r)}else{let r=document.createElement("a");r.href=e.href||e.path,r.textContent=e.title,i.append(r)}t.append(i)}return t}};T("site-map",w);export{w as SiteMap};
|
|
2
2
|
//# sourceMappingURL=site-map.js.map
|
|
@@ -321,9 +321,9 @@ var h=`
|
|
|
321
321
|
:host([detail="compact"]) .slot-fallback {
|
|
322
322
|
display: none;
|
|
323
323
|
}
|
|
324
|
-
`;var v=window.matchMedia("(prefers-reduced-motion: reduce)");var m=new Map;function f(r,t,e={}){let s=e.priority??10,a={impl:t,bundle:e.bundle,contract:e.contract,priority:s},o=m.get(r);if(customElements.get(r)){if(!o||o.priority>=s){o&&o.priority===s&&o.impl!==t&&console.warn(`[VB Bundle] Tag <${r}> already registered by "${o.bundle}" (priority ${o.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${r}> defined by "${o.bundle}" cannot be replaced (customElements.define is permanent). "${e.bundle}" has higher priority but arrived late.`);return}if(o&&o.priority>=s){o.priority===s&&console.warn(`[VB Bundle] Tag <${r}> already registered by "${o.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}m.set(r,a),customElements.define(r,t)}function c(r){return String(r).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function b(r){return`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${r}</svg>`}var d={user:'<path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/>',pencil:'<path d="M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z"/><path d="m15 5 4 4"/>',check:'<path d="M20 6 9 17l-5-5"/>',target:'<circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="6"/><circle cx="12" cy="12" r="2"/>',alertTriangle:'<path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/><path d="M12 9v4"/><path d="M12 17h.01"/>',messageCircle:'<path d="M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719"/>',lightbulb:'<path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"/><path d="M9 18h6"/><path d="M10 22h4"/>',wrench:'<path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z"/>',heart:'<path d="M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5"/>',mapPin:'<path d="M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"/><circle cx="12" cy="10" r="3"/>',checkCircle:'<path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><path d="m9 11 3 3L22 4"/>',x:'<path d="M18 6 6 18"/><path d="m6 6 12 12"/>',download:'<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" x2="12" y1="15" y2="3"/>',send:'<path d="M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z"/><path d="m21.854 2.147-10.94 10.939"/>'},w={says:{label:"Says",icon:d.messageCircle,color:"#3b82f6"},thinks:{label:"Thinks",icon:d.lightbulb,color:"#8b5cf6"},does:{label:"Does",icon:d.wrench,color:"#f59e0b"},feels:{label:"Feels",icon:d.heart,color:"#ef4444"}};var u=class r extends HTMLElement{static get observedAttributes(){return["persona-id","priority","points","status","epic","story-id","compact","detail","src"]}static PRIORITIES={critical:{label:"Critical",color:"#dc2626",bg:"rgba(220, 38, 38, 0.1)"},high:{label:"High",color:"#ea580c",bg:"rgba(234, 88, 12, 0.1)"},medium:{label:"Medium",color:"#ca8a04",bg:"rgba(202, 138, 4, 0.1)"},low:{label:"Low",color:"#16a34a",bg:"rgba(22, 163, 74, 0.1)"}};static STATUSES={backlog:{label:"Backlog",color:"#6b7280",bg:"rgba(107, 114, 128, 0.1)"},"to-do":{label:"To Do",color:"#3b82f6",bg:"rgba(59, 130, 246, 0.1)"},"in-progress":{label:"In Progress",color:"#8b5cf6",bg:"rgba(139, 92, 246, 0.1)"},review:{label:"Review",color:"#f59e0b",bg:"rgba(245, 158, 11, 0.1)"},done:{label:"Done",color:"#22c55e",bg:"rgba(34, 197, 94, 0.1)"}};#t=new Map;constructor(){super(),this.attachShadow({mode:"open"})}#s(){for(let t of[...this.children]){let e=t.getAttribute("slot");e&&this.#t.set(e,t.textContent.trim())}}_resolve(t){return this.getAttribute(t)||this.#t.get(t)||""}get data(){return{storyId:this.storyId||void 0,personaId:this.personaId||void 0,priority:this.priority,status:this.status,points:this.points||void 0,epic:this.epic||void 0,detail:this.getAttribute("detail")||void 0,persona:this.persona||void 0,action:this.action||void 0,benefit:this.benefit||void 0,title:this.storyTitle||void 0}}set data(t){!t||typeof t!="object"||(this._applyData(t),this.#s(),this.shadowRoot&&this.#e(),this.dispatchEvent(new CustomEvent("user-story:data-changed",{detail:{data:this.data,source:"property"},bubbles:!0,composed:!0})))}_applyData(t){for(let[e,s]of[["storyId","story-id"],["personaId","persona-id"],["priority","priority"],["status","status"],["points","points"],["epic","epic"],["detail","detail"]])t[e]!=null&&this.setAttribute(s,String(t[e]));if(t.persona&&!this.querySelector('[slot="persona"]')){let e=document.createElement("span");e.slot="persona",e.textContent=String(t.persona),this.appendChild(e)}if(t.action&&!this.querySelector('[slot="action"]')){let e=document.createElement("span");e.slot="action",e.textContent=String(t.action),this.appendChild(e)}if(t.benefit&&!this.querySelector('[slot="benefit"]')){let e=document.createElement("span");e.slot="benefit",e.textContent=String(t.benefit),this.appendChild(e)}if(t.title&&!this.querySelector('[slot="title"]')){let e=document.createElement("h3");e.slot="title",e.textContent=String(t.title),this.appendChild(e)}for(let e of["acceptance-criteria","tasks","notes"]){let s=e==="acceptance-criteria"?"acceptanceCriteria":e;if(t[s]&&!this.querySelector(`[slot="${e}"]`))if(Array.isArray(t[s])){let a=document.createElement("ul");a.slot=e;for(let o of t[s]){let n=document.createElement("li");n.textContent=String(o),a.appendChild(n)}this.appendChild(a)}else{let a=document.createElement("p");a.slot=e,a.textContent=String(t[s]),this.appendChild(a)}}}async _loadSrc(t){if(t)try{let e=await fetch(t);if(!e.ok)throw new Error(`HTTP ${e.status}`);let s=await e.json();this._applyData(s),this.#s(),this.#e()}catch(e){console.warn(`[user-story] Failed to load src="${t}":`,e)}}connectedCallback(){this.#s(),this.storyId&&!this.id&&(this.id=this.storyId),this.hasAttribute("src")&&this._loadSrc(this.getAttribute("src")),this.#e(),this.setAttribute("data-upgraded","")}disconnectedCallback(){this.removeAttribute("data-upgraded")}attributeChangedCallback(t,e,s){e!==s&&this.shadowRoot&&(t==="src"&&this.isConnected?this._loadSrc(s):this.#e())}get persona(){return this.querySelector('[slot="persona"]')?.textContent?.trim()||this.#t.get("persona")||"user"}get personaId(){return this.getAttribute("persona-id")||""}get action(){return this.querySelector('[slot="action"]')?.textContent?.trim()||this.#t.get("action")||""}get benefit(){return this.querySelector('[slot="benefit"]')?.textContent?.trim()||this.#t.get("benefit")||""}get priority(){return this.getAttribute("priority")||"medium"}get points(){return this.getAttribute("points")||""}get status(){return this.getAttribute("status")||"backlog"}get epic(){return this.getAttribute("epic")||""}get storyId(){return this.getAttribute("story-id")||""}get storyTitle(){return this.querySelector('[slot="title"]')?.textContent?.trim()||this.#t.get("title")||""}get _minimalLabel(){if(this.storyTitle)return this.storyTitle;let t=this.action;return t.length>40?t.slice(0,40)+"\u2026":t}get compact(){return this.hasAttribute("compact")}get _detailLevel(){return this.getAttribute("detail")?this.getAttribute("detail"):this.hasAttribute("compact")?"compact":"full"}updateStatus(t){r.STATUSES[t]&&(this.setAttribute("status",t),this.dispatchEvent(new CustomEvent("status-changed",{detail:{status:t,storyId:this.storyId},bubbles:!0,composed:!0})))}updatePriority(t){r.PRIORITIES[t]&&(this.setAttribute("priority",t),this.dispatchEvent(new CustomEvent("priority-changed",{detail:{priority:t,storyId:this.storyId},bubbles:!0,composed:!0})))}showDetail(){let t=`story-dialog-${this.storyId||this.id||"detail"}`,e=document.getElementById(t);e||(e=document.createElement("dialog"),e.id=t,e.setAttribute("data-size","l"),document.body.appendChild(e));let s=document.createElement("form");s.method="dialog";let a=document.createElement("header"),o=document.createElement("h3");o.textContent=this.storyTitle||this.storyId||"Story Detail";let n=document.createElement("button");n.type="submit",n.setAttribute("aria-label","Close"),n.textContent="\xD7",a.appendChild(o),a.appendChild(n);let l=document.createElement("section"),p=document.createElement("user-story");for(let i of this.getAttributeNames())i==="detail"||i==="compact"||i==="data-upgraded"||i==="draggable"||i==="data-id"||i==="data-quadrant"||p.setAttribute(i,this.getAttribute(i)??"");let y=[...this.children].some(i=>i.getAttribute("slot")&&i.tagName!=="DIALOG");p.setAttribute("detail",y?"full":"compact"),p.removeAttribute("id");for(let i of[...this.children])i.tagName!=="DIALOG"&&p.appendChild(i.cloneNode(!0));l.appendChild(p),s.appendChild(a),s.appendChild(l),e.innerHTML="",e.appendChild(s),e.addEventListener("close",()=>{e.innerHTML=""},{once:!0}),e.showModal()}#e(){let t=r.PRIORITIES[this.priority]||r.PRIORITIES.medium,e=r.STATUSES[this.status]||r.STATUSES.backlog,s=this._detailLevel,a=this.storyId?`User story: ${c(this.storyId)}`:"User story";if(this.shadowRoot){if(s==="minimal"){this.shadowRoot.innerHTML=`
|
|
324
|
+
`;var v=window.matchMedia("(prefers-reduced-motion: reduce)");var m=new Map;function f(r,t,e={}){let s=e.priority??10,i={impl:t,bundle:e.bundle,contract:e.contract,priority:s},o=m.get(r);if(customElements.get(r)){if(!o||o.priority>=s){o&&o.priority===s&&o.impl!==t&&console.warn(`[VB Bundle] Tag <${r}> already registered by "${o.bundle}" (priority ${o.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${r}> defined by "${o.bundle}" cannot be replaced (customElements.define is permanent). "${e.bundle}" has higher priority but arrived late.`);return}if(o&&o.priority>=s){o.priority===s&&console.warn(`[VB Bundle] Tag <${r}> already registered by "${o.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}m.set(r,i),customElements.define(r,t)}function c(r){return String(r).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function b(r){return`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${r}</svg>`}var d={user:'<path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/>',pencil:'<path d="M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z"/><path d="m15 5 4 4"/>',check:'<path d="M20 6 9 17l-5-5"/>',target:'<circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="6"/><circle cx="12" cy="12" r="2"/>',alertTriangle:'<path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/><path d="M12 9v4"/><path d="M12 17h.01"/>',messageCircle:'<path d="M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719"/>',lightbulb:'<path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"/><path d="M9 18h6"/><path d="M10 22h4"/>',wrench:'<path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z"/>',heart:'<path d="M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5"/>',mapPin:'<path d="M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"/><circle cx="12" cy="10" r="3"/>',checkCircle:'<path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><path d="m9 11 3 3L22 4"/>',x:'<path d="M18 6 6 18"/><path d="m6 6 12 12"/>',download:'<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" x2="12" y1="15" y2="3"/>',send:'<path d="M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z"/><path d="m21.854 2.147-10.94 10.939"/>'},w={says:{label:"Says",icon:d.messageCircle,color:"#3b82f6"},thinks:{label:"Thinks",icon:d.lightbulb,color:"#8b5cf6"},does:{label:"Does",icon:d.wrench,color:"#f59e0b"},feels:{label:"Feels",icon:d.heart,color:"#ef4444"}};var u=class r extends HTMLElement{static get observedAttributes(){return["persona-id","priority","points","status","epic","story-id","compact","detail","src"]}static PRIORITIES={critical:{label:"Critical",color:"#dc2626",bg:"rgba(220, 38, 38, 0.1)"},high:{label:"High",color:"#ea580c",bg:"rgba(234, 88, 12, 0.1)"},medium:{label:"Medium",color:"#ca8a04",bg:"rgba(202, 138, 4, 0.1)"},low:{label:"Low",color:"#16a34a",bg:"rgba(22, 163, 74, 0.1)"}};static STATUSES={backlog:{label:"Backlog",color:"#6b7280",bg:"rgba(107, 114, 128, 0.1)"},"to-do":{label:"To Do",color:"#3b82f6",bg:"rgba(59, 130, 246, 0.1)"},"in-progress":{label:"In Progress",color:"#8b5cf6",bg:"rgba(139, 92, 246, 0.1)"},review:{label:"Review",color:"#f59e0b",bg:"rgba(245, 158, 11, 0.1)"},done:{label:"Done",color:"#22c55e",bg:"rgba(34, 197, 94, 0.1)"}};#t=new Map;#e=null;constructor(){super(),this.attachShadow({mode:"open"})}#o(){for(let t of[...this.children]){let e=t.getAttribute("slot");e&&this.#t.set(e,t.textContent.trim())}}_resolve(t){return this.getAttribute(t)||this.#t.get(t)||""}get data(){return{storyId:this.storyId||void 0,personaId:this.personaId||void 0,priority:this.priority,status:this.status,points:this.points||void 0,epic:this.epic||void 0,detail:this.getAttribute("detail")||void 0,persona:this.persona||void 0,action:this.action||void 0,benefit:this.benefit||void 0,title:this.storyTitle||void 0}}set data(t){!t||typeof t!="object"||(this._applyData(t),this.#o(),this.shadowRoot&&this.#s(),this.dispatchEvent(new CustomEvent("user-story:data-changed",{detail:{data:this.data,source:"property"},bubbles:!0,composed:!0})))}_applyData(t){for(let[e,s]of[["storyId","story-id"],["personaId","persona-id"],["priority","priority"],["status","status"],["points","points"],["epic","epic"],["detail","detail"]])t[e]!=null&&this.setAttribute(s,String(t[e]));if(t.persona&&!this.querySelector('[slot="persona"]')){let e=document.createElement("span");e.slot="persona",e.textContent=String(t.persona),this.appendChild(e)}if(t.action&&!this.querySelector('[slot="action"]')){let e=document.createElement("span");e.slot="action",e.textContent=String(t.action),this.appendChild(e)}if(t.benefit&&!this.querySelector('[slot="benefit"]')){let e=document.createElement("span");e.slot="benefit",e.textContent=String(t.benefit),this.appendChild(e)}if(t.title&&!this.querySelector('[slot="title"]')){let e=document.createElement("h3");e.slot="title",e.textContent=String(t.title),this.appendChild(e)}for(let e of["acceptance-criteria","tasks","notes"]){let s=e==="acceptance-criteria"?"acceptanceCriteria":e;if(t[s]&&!this.querySelector(`[slot="${e}"]`))if(Array.isArray(t[s])){let i=document.createElement("ul");i.slot=e;for(let o of t[s]){let n=document.createElement("li");n.textContent=String(o),i.appendChild(n)}this.appendChild(i)}else{let i=document.createElement("p");i.slot=e,i.textContent=String(t[s]),this.appendChild(i)}}}async _loadSrc(t){if(t)try{let e=await fetch(t);if(!e.ok)throw new Error(`HTTP ${e.status}`);let s=await e.json();this._applyData(s),this.#o(),this.#s()}catch(e){console.warn(`[user-story] Failed to load src="${t}":`,e)}}connectedCallback(){this.#o(),this.storyId&&!this.id&&(this.id=this.storyId),this.hasAttribute("src")&&this._loadSrc(this.getAttribute("src")),this.#s(),this.#r(),this.setAttribute("data-upgraded","")}disconnectedCallback(){this.removeAttribute("data-upgraded"),this.#e?.disconnect(),this.#e=null}attributeChangedCallback(t,e,s){e!==s&&this.shadowRoot&&(t==="src"&&this.isConnected?this._loadSrc(s):(this.#s(),t==="persona-id"&&this.#r()))}#r(){if(this.#e?.disconnect(),this.#e=null,!this.personaId||this.#i())return;let t=this.getRootNode(),s=(t&&typeof t.getElementById=="function"?t:document).getElementById(this.personaId);!s||s.tagName!=="USER-PERSONA"||(this.#e=new MutationObserver(()=>this.#s()),this.#e.observe(s,{attributes:!0,attributeFilter:["role"]}))}get persona(){return this.#i()||this.#a()||"user"}get personaId(){return this.getAttribute("persona-id")||""}#i(){return this.querySelector('[slot="persona"]')?.textContent?.trim()||this.#t.get("persona")||""}#a(){if(!this.personaId)return"";let t=this.getRootNode(),s=(t&&typeof t.getElementById=="function"?t:document).getElementById(this.personaId);return!s||s.tagName!=="USER-PERSONA"?"":s.getAttribute("role")?.trim()||""}#n(){return/^[aeio]/i.test(this.persona.trim())?"an":"a"}get action(){return this.querySelector('[slot="action"]')?.textContent?.trim()||this.#t.get("action")||""}get benefit(){return this.querySelector('[slot="benefit"]')?.textContent?.trim()||this.#t.get("benefit")||""}get priority(){return this.getAttribute("priority")||"medium"}get points(){return this.getAttribute("points")||""}get status(){return this.getAttribute("status")||"backlog"}get epic(){return this.getAttribute("epic")||""}get storyId(){return this.getAttribute("story-id")||""}get storyTitle(){return this.querySelector('[slot="title"]')?.textContent?.trim()||this.#t.get("title")||""}get _minimalLabel(){if(this.storyTitle)return this.storyTitle;let t=this.action;return t.length>40?t.slice(0,40)+"\u2026":t}get compact(){return this.hasAttribute("compact")}get _detailLevel(){return this.getAttribute("detail")?this.getAttribute("detail"):this.hasAttribute("compact")?"compact":"full"}updateStatus(t){r.STATUSES[t]&&(this.setAttribute("status",t),this.dispatchEvent(new CustomEvent("status-changed",{detail:{status:t,storyId:this.storyId},bubbles:!0,composed:!0})))}updatePriority(t){r.PRIORITIES[t]&&(this.setAttribute("priority",t),this.dispatchEvent(new CustomEvent("priority-changed",{detail:{priority:t,storyId:this.storyId},bubbles:!0,composed:!0})))}showDetail(){let t=`story-dialog-${this.storyId||this.id||"detail"}`,e=document.getElementById(t);e||(e=document.createElement("dialog"),e.id=t,e.setAttribute("data-size","l"),document.body.appendChild(e));let s=document.createElement("form");s.method="dialog";let i=document.createElement("header"),o=document.createElement("h3");o.textContent=this.storyTitle||this.storyId||"Story Detail";let n=document.createElement("button");n.type="submit",n.setAttribute("aria-label","Close"),n.textContent="\xD7",i.appendChild(o),i.appendChild(n);let l=document.createElement("section"),p=document.createElement("user-story");for(let a of this.getAttributeNames())a==="detail"||a==="compact"||a==="data-upgraded"||a==="draggable"||a==="data-id"||a==="data-quadrant"||p.setAttribute(a,this.getAttribute(a)??"");let y=[...this.children].some(a=>a.getAttribute("slot")&&a.tagName!=="DIALOG");p.setAttribute("detail",y?"full":"compact"),p.removeAttribute("id");for(let a of[...this.children])a.tagName!=="DIALOG"&&p.appendChild(a.cloneNode(!0));l.appendChild(p),s.appendChild(i),s.appendChild(l),e.innerHTML="",e.appendChild(s),e.addEventListener("close",()=>{e.innerHTML=""},{once:!0}),e.showModal()}#s(){let t=r.PRIORITIES[this.priority]||r.PRIORITIES.medium,e=r.STATUSES[this.status]||r.STATUSES.backlog,s=this._detailLevel,i=this.storyId?`User story: ${c(this.storyId)}`:"User story";if(this.shadowRoot){if(s==="minimal"){this.shadowRoot.innerHTML=`
|
|
325
325
|
<style>${h}</style>
|
|
326
|
-
<article class="story-card story-card--minimal" role="article" aria-label="${
|
|
326
|
+
<article class="story-card story-card--minimal" role="article" aria-label="${i}"
|
|
327
327
|
tabindex="0">
|
|
328
328
|
<div class="story-body">
|
|
329
329
|
${this.storyId?`<span class="story-id">${c(this.storyId)}</span>`:""}
|
|
@@ -335,7 +335,7 @@ var h=`
|
|
|
335
335
|
`;let o=this.shadowRoot.querySelector(".story-card--minimal");if(!o)return;o.addEventListener("click",()=>this.showDetail()),o.addEventListener("keydown",n=>{let l=n;(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),this.showDetail())})}else this.shadowRoot.innerHTML=`
|
|
336
336
|
<style>${h}</style>
|
|
337
337
|
|
|
338
|
-
<article class="story-card story-card--${s}" part="card" role="article" aria-label="${
|
|
338
|
+
<article class="story-card story-card--${s}" part="card" role="article" aria-label="${i}">
|
|
339
339
|
<header class="story-header" part="header">
|
|
340
340
|
<div class="story-meta">
|
|
341
341
|
${this.storyId?`<span class="story-id" part="id">${c(this.storyId)}</span>`:""}
|
|
@@ -354,8 +354,8 @@ var h=`
|
|
|
354
354
|
|
|
355
355
|
<div class="story-body" part="body">
|
|
356
356
|
<p class="story-statement" part="statement">
|
|
357
|
-
<span class="keyword">As
|
|
358
|
-
${this.personaId?`<a class="persona-text persona-text--link" href="#${c(this.personaId)}">${b(d.user)} <slot name="persona"><span
|
|
357
|
+
<span class="keyword">As ${this.#n()}</span>
|
|
358
|
+
${this.personaId?`<a class="persona-text persona-text--link" href="#${c(this.personaId)}">${b(d.user)} <slot name="persona"><span>${c(this.#a()||"user")}</span></slot></a>`:'<span class="persona-text"><slot name="persona"><span>user</span></slot></span>'},
|
|
359
359
|
<span class="keyword">I want</span>
|
|
360
360
|
<span class="action-text"><slot name="action"><span>[describe the action]</span></slot></span>${this.benefit||this.querySelector('[slot="benefit"]')?`
|
|
361
361
|
<span class="keyword">so that</span>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/* generated by scripts/gen-icon-css.js — do not edit */
|
|
2
|
+
/* Link this stylesheet UNLAYERED (do not @import it into a cascade layer), or icons will not resolve. */
|
|
3
|
+
[data-icon-set="bold"] [data-icon="bell"],[data-icon-set="bold"][data-icon="bell"]{--vb-icon:url("bold/bell.svg")}
|
|
4
|
+
[data-icon-set="bold"] [data-icon="bookmark"],[data-icon-set="bold"][data-icon="bookmark"]{--vb-icon:url("bold/bookmark.svg")}
|
|
5
|
+
[data-icon-set="bold"] [data-icon="calendar"],[data-icon-set="bold"][data-icon="calendar"]{--vb-icon:url("bold/calendar.svg")}
|
|
6
|
+
[data-icon-set="bold"] [data-icon="camera"],[data-icon-set="bold"][data-icon="camera"]{--vb-icon:url("bold/camera.svg")}
|
|
7
|
+
[data-icon-set="bold"] [data-icon="globe"],[data-icon-set="bold"][data-icon="globe"]{--vb-icon:url("bold/globe.svg")}
|
|
8
|
+
[data-icon-set="bold"] [data-icon="heart"],[data-icon-set="bold"][data-icon="heart"]{--vb-icon:url("bold/heart.svg")}
|
|
9
|
+
[data-icon-set="bold"] [data-icon="home"],[data-icon-set="bold"][data-icon="home"]{--vb-icon:url("bold/home.svg")}
|
|
10
|
+
[data-icon-set="bold"] [data-icon="lock"],[data-icon-set="bold"][data-icon="lock"]{--vb-icon:url("bold/lock.svg")}
|
|
11
|
+
[data-icon-set="bold"] [data-icon="mail"],[data-icon-set="bold"][data-icon="mail"]{--vb-icon:url("bold/mail.svg")}
|
|
12
|
+
[data-icon-set="bold"] [data-icon="music"],[data-icon-set="bold"][data-icon="music"]{--vb-icon:url("bold/music.svg")}
|
|
13
|
+
[data-icon-set="bold"] [data-icon="search"],[data-icon-set="bold"][data-icon="search"]{--vb-icon:url("bold/search.svg")}
|
|
14
|
+
[data-icon-set="bold"] [data-icon="settings"],[data-icon-set="bold"][data-icon="settings"]{--vb-icon:url("bold/settings.svg")}
|
|
15
|
+
[data-icon-set="bold"] [data-icon="star"],[data-icon-set="bold"][data-icon="star"]{--vb-icon:url("bold/star.svg")}
|
|
16
|
+
[data-icon-set="bold"] [data-icon="user"],[data-icon-set="bold"][data-icon="user"]{--vb-icon:url("bold/user.svg")}
|
|
17
|
+
[data-icon-set="bold"] [data-icon="zap"],[data-icon-set="bold"][data-icon="zap"]{--vb-icon:url("bold/zap.svg")}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
["bell","bookmark","calendar","camera","globe","heart","home","lock","mail","music","search","settings","star","user","zap"]
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/* generated by scripts/gen-icon-css.js — do not edit */
|
|
2
|
+
/* Link this stylesheet UNLAYERED (do not @import it into a cascade layer), or icons will not resolve. */
|
|
3
|
+
[data-icon-set="custom"] [data-icon="bluesky"],[data-icon-set="custom"][data-icon="bluesky"]{--vb-icon:url("custom/bluesky.svg")}
|
|
4
|
+
[data-icon-set="custom"] [data-icon="mastodon"],[data-icon-set="custom"][data-icon="mastodon"]{--vb-icon:url("custom/mastodon.svg")}
|
|
5
|
+
[data-icon-set="custom"] [data-icon="telegram"],[data-icon-set="custom"][data-icon="telegram"]{--vb-icon:url("custom/telegram.svg")}
|
|
6
|
+
[data-icon-set="custom"] [data-icon="whatsapp"],[data-icon-set="custom"][data-icon="whatsapp"]{--vb-icon:url("custom/whatsapp.svg")}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
["bluesky","mastodon","telegram","whatsapp"]
|