vanilla-breeze 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/cdn/components/adr-record.js +383 -0
  2. package/dist/cdn/components/adr-wc.js +403 -0
  3. package/dist/cdn/components/analytics-panel.js +34 -0
  4. package/dist/cdn/components/author-index.js +3 -0
  5. package/dist/cdn/components/brand-mark.js +2 -0
  6. package/dist/cdn/components/calendar-wc.js +2 -2
  7. package/dist/cdn/components/carousel-wc.js +1 -1
  8. package/dist/cdn/components/chart-wc.js +25 -25
  9. package/dist/cdn/components/color-palette.js +13 -7
  10. package/dist/cdn/components/comment-wc.js +2 -0
  11. package/dist/cdn/components/consent-banner.js +1 -1
  12. package/dist/cdn/components/content-lens.js +2 -0
  13. package/dist/cdn/components/day-view.js +2 -0
  14. package/dist/cdn/components/empathy-map.js +42 -25
  15. package/dist/cdn/components/flow-diagram.js +2 -0
  16. package/dist/cdn/components/font-pairer.js +108 -0
  17. package/dist/cdn/components/gantt-chart.js +2 -0
  18. package/dist/cdn/components/geo-map.js +7 -7
  19. package/dist/cdn/components/glossary-wc.js +2 -0
  20. package/dist/cdn/components/gradient-builder.js +52 -0
  21. package/dist/cdn/components/highlight-wc.js +3 -0
  22. package/dist/cdn/components/manifest.json +134 -26
  23. package/dist/cdn/components/markdown-viewer.js +3 -3
  24. package/dist/cdn/components/motion-specimen.js +21 -0
  25. package/dist/cdn/components/note-wc.js +3 -0
  26. package/dist/cdn/components/notification-wc.js +37 -0
  27. package/dist/cdn/components/page-info.js +55 -24
  28. package/dist/cdn/components/page-toc.js +1 -1
  29. package/dist/cdn/components/popularity-index.js +9 -0
  30. package/dist/cdn/components/print-page.js +1 -1
  31. package/dist/cdn/components/recently-visited.js +3 -0
  32. package/dist/cdn/components/review-surface.js +541 -0
  33. package/dist/cdn/components/selection-menu.js +2 -0
  34. package/dist/cdn/components/semantic-palette.js +30 -0
  35. package/dist/cdn/components/settings-panel.js +55 -51
  36. package/dist/cdn/components/share-wc.js +2 -2
  37. package/dist/cdn/components/site-map-wc.js +2 -0
  38. package/dist/cdn/components/spacing-specimen.js +5 -5
  39. package/dist/cdn/components/split-surface.js +1 -1
  40. package/dist/cdn/components/text-reader.js +2 -2
  41. package/dist/cdn/components/theme-export.js +18 -0
  42. package/dist/cdn/components/theme-picker.js +58 -58
  43. package/dist/cdn/components/token-specimen.js +25 -20
  44. package/dist/cdn/components/topic-map.js +3 -0
  45. package/dist/cdn/components/trust-filter.js +4 -0
  46. package/dist/cdn/components/type-specimen.js +16 -13
  47. package/dist/cdn/components/user-journey.js +48 -30
  48. package/dist/cdn/components/user-persona.js +17 -15
  49. package/dist/cdn/components/user-story.js +55 -22
  50. package/dist/cdn/components/watch-wc.js +3 -0
  51. package/dist/cdn/components/week-view.js +2 -0
  52. package/dist/cdn/components/work-item.js +446 -0
  53. package/dist/cdn/packs/design-system.full.js +124 -47
  54. package/dist/cdn/packs/effects.full.js +1 -1
  55. package/dist/cdn/packs/kawaii.full.css +1 -1
  56. package/dist/cdn/packs/kawaii.full.js +1 -1
  57. package/dist/cdn/packs/kawaii.theme.css +1 -1
  58. package/dist/cdn/packs/manifest.json +10 -40
  59. package/dist/cdn/packs/prototype.full.js +1 -1
  60. package/dist/cdn/packs/ui.full.css +1 -1
  61. package/dist/cdn/packs/ui.full.js +50 -50
  62. package/dist/cdn/packs/ux-planning.full.css +1 -1
  63. package/dist/cdn/packs/ux-planning.full.js +1546 -92
  64. package/dist/cdn/themes/8bit.css +1 -1
  65. package/dist/cdn/themes/alpha1999.css +1 -1
  66. package/dist/cdn/themes/bauhaus.css +1 -1
  67. package/dist/cdn/themes/brutalist.css +1 -1
  68. package/dist/cdn/themes/claymorphism.css +1 -1
  69. package/dist/cdn/themes/cottagecore.css +1 -1
  70. package/dist/cdn/themes/cyber.css +1 -1
  71. package/dist/cdn/themes/genai.css +1 -1
  72. package/dist/cdn/themes/glassmorphism.css +1 -1
  73. package/dist/cdn/themes/kawaii.css +1 -1
  74. package/dist/cdn/themes/magna.css +1 -1
  75. package/dist/cdn/themes/manifest.json +20 -20
  76. package/dist/cdn/themes/nes.css +1 -1
  77. package/dist/cdn/themes/neumorphism.css +1 -1
  78. package/dist/cdn/themes/organic.css +1 -1
  79. package/dist/cdn/themes/rough.css +1 -1
  80. package/dist/cdn/themes/startup.css +1 -1
  81. package/dist/cdn/themes/super2026.css +1 -1
  82. package/dist/cdn/themes/terminal.css +1 -1
  83. package/dist/cdn/themes/vaporwave.css +1 -1
  84. package/dist/cdn/themes/win9x.css +1 -1
  85. package/dist/cdn/vanilla-breeze-charts.js +25 -25
  86. package/dist/cdn/vanilla-breeze-core.css +1 -1
  87. package/dist/cdn/vanilla-breeze-core.js +119 -47
  88. package/dist/cdn/vanilla-breeze-dev.js +1 -1
  89. package/dist/cdn/vanilla-breeze-extras.js +154 -74
  90. package/dist/cdn/vanilla-breeze.css +1 -1
  91. package/dist/cdn/vanilla-breeze.js +1988 -248
  92. package/package.json +8 -6
  93. package/dist/cdn/packs/retro.bundle.js +0 -2
  94. package/dist/cdn/packs/retro.components.js +0 -1
  95. package/dist/cdn/packs/retro.effects.css +0 -2
  96. package/dist/cdn/packs/retro.effects.js +0 -16
  97. package/dist/cdn/packs/retro.full.css +0 -5
  98. package/dist/cdn/packs/retro.full.js +0 -16
  99. package/dist/cdn/packs/retro.theme.css +0 -2
@@ -1,6 +1,6 @@
1
- var p=window.matchMedia("(prefers-reduced-motion: reduce)");var f=new Map;function m(o,r,t={}){let n=t.priority??10,i={impl:r,bundle:t.bundle,contract:t.contract,priority:n},e=f.get(o);if(customElements.get(o)){if(!e||e.priority>=n){e&&e.priority===n&&e.impl!==r&&console.warn(`[VB Bundle] Tag <${o}> already registered by "${e.bundle}" (priority ${e.priority}). Skipping "${t.bundle}".`);return}console.warn(`[VB Bundle] Tag <${o}> defined by "${e.bundle}" cannot be replaced (customElements.define is permanent). "${t.bundle}" has higher priority but arrived late.`);return}if(e&&e.priority>=n){e.priority===n&&console.warn(`[VB Bundle] Tag <${o}> already registered by "${e.bundle}". Skipping "${t.bundle}" (first wins at equal priority).`);return}f.set(o,i),customElements.define(o,r)}var l=class extends HTMLElement{#e=[];connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&this.setAttribute("data-upgraded","")}disconnectedCallback(){for(let r of this.#e)r();this.#e=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(r,t,n,i){r.addEventListener(t,n,i),this.#e.push(()=>r.removeEventListener(t,n,i))}setup(){}teardown(){}};var d=class extends l{static observedAttributes=["tokens","prefix","show-values","label"];setup(){this.#e()}attributeChangedCallback(){this.isConnected&&this.#e()}#e(){let r=this.getAttribute("tokens")||"3xs,2xs,xs,s,m,l,xl,2xl,3xl",t=this.getAttribute("prefix")||"--size-",n=this.getAttribute("show-values")!=="false",i=this.getAttribute("label")||"",e=r.split(",").map(s=>s.trim()),a="";i&&(a+=`<div style="font-size:0.75rem;font-weight:700;text-transform:uppercase;letter-spacing:0.08em;color:var(--color-text-muted,#666);margin-block-end:0.75rem;font-family:var(--font-sans,system-ui)">${i}</div>`),a+=`<div role="list" aria-label="${i||"Spacing scale"}" style="display:flex;flex-direction:column;gap:0.25rem">`;for(let s of e){let c=`${t}${s}`;a+=`<div role="listitem" style="display:grid;grid-template-columns:3rem 1fr auto;align-items:center;gap:0.75rem;min-block-size:1.75rem">
2
- <span style="font-family:var(--font-mono,monospace);font-size:0.875rem;color:var(--color-text-muted,#666);text-align:end">${s}</span>
3
- <div class="scale-bar" style="display:block;block-size:var(--size-m,1rem);min-inline-size:2px;inline-size:var(${c});background:var(--color-interactive,oklch(55% 0.2 260));border-radius:var(--radius-s,0.25rem)" aria-hidden="true"></div>
4
- ${n?'<span class="scale-value" style="font-family:var(--font-mono,monospace);font-size:0.75rem;color:var(--color-text-muted,#666);font-variant-numeric:tabular-nums;min-inline-size:3.5rem;text-align:end"></span>':""}
5
- </div>`}a+="</div>",this.innerHTML=a,n&&requestAnimationFrame(()=>{this.querySelectorAll(".scale-bar").forEach(s=>{let c=s.getBoundingClientRect().width,u=s.nextElementSibling;u&&(u.textContent=`${Math.round(c*100)/100}px`)})})}};m("spacing-specimen",d);
1
+ var p=window.matchMedia("(prefers-reduced-motion: reduce)");var m=new Map;function h(s,e,t={}){let n=t.priority??10,o={impl:e,bundle:t.bundle,contract:t.contract,priority:n},r=m.get(s);if(customElements.get(s)){if(!r||r.priority>=n){r&&r.priority===n&&r.impl!==e&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${r.bundle}" (priority ${r.priority}). Skipping "${t.bundle}".`);return}console.warn(`[VB Bundle] Tag <${s}> defined by "${r.bundle}" cannot be replaced (customElements.define is permanent). "${t.bundle}" has higher priority but arrived late.`);return}if(r&&r.priority>=n){r.priority===n&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${r.bundle}". Skipping "${t.bundle}" (first wins at equal priority).`);return}m.set(s,o),customElements.define(s,e)}var u=class extends HTMLElement{#e=[];connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&this.setAttribute("data-upgraded","")}disconnectedCallback(){for(let e of this.#e)e();this.#e=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(e,t,n,o){e.addEventListener(t,n,o),this.#e.push(()=>e.removeEventListener(t,n,o))}setup(){}teardown(){}};var f=class extends u{static observedAttributes=["tokens","prefix","show-values","label","editable","target"];setup(){this.#e(),this.#t()}attributeChangedCallback(){this.isConnected&&(this.#e(),this.#t())}#e(){let e=this.getAttribute("tokens")||"3xs,2xs,xs,s,m,l,xl,2xl,3xl",t=this.getAttribute("prefix")||"--size-",n=this.getAttribute("show-values")!=="false",o=this.getAttribute("label")||"",r=this.hasAttribute("editable"),d=e.split(",").map(i=>i.trim()),c="";o&&(c+=`<div style="font-size:0.75rem;font-weight:700;text-transform:uppercase;letter-spacing:0.08em;color:var(--color-text-muted,#666);margin-block-end:0.75rem;font-family:var(--font-sans,system-ui)">${o}</div>`),c+=`<div role="list" aria-label="${o||"Spacing scale"}" style="display:flex;flex-direction:column;gap:0.25rem">`;for(let i of d){let a=`${t}${i}`,l=r?`<input type="text" class="scale-edit" data-token="${i}" aria-label="${i} value" style="font-family:var(--font-mono,monospace);font-size:0.75rem;padding:0.125rem 0.375rem;border:1px solid var(--color-border,#ccc);border-radius:var(--radius-s,0.25rem);background:var(--color-surface,#fff);color:var(--color-text,#222);inline-size:6rem;text-align:end">`:n?'<span class="scale-value" style="font-family:var(--font-mono,monospace);font-size:0.75rem;color:var(--color-text-muted,#666);font-variant-numeric:tabular-nums;min-inline-size:3.5rem;text-align:end"></span>':"";c+=`<div role="listitem" style="display:grid;grid-template-columns:3rem 1fr auto;align-items:center;gap:0.75rem;min-block-size:1.75rem">
2
+ <span style="font-family:var(--font-mono,monospace);font-size:0.875rem;color:var(--color-text-muted,#666);text-align:end">${i}</span>
3
+ <div class="scale-bar" style="display:block;block-size:var(--size-m,1rem);min-inline-size:2px;inline-size:var(${a});background:var(--color-interactive,oklch(55% 0.2 260));border-radius:var(--radius-s,0.25rem)" aria-hidden="true"></div>
4
+ ${l}
5
+ </div>`}c+="</div>",this.innerHTML=c,requestAnimationFrame(()=>{if(r){let i=getComputedStyle(this);this.querySelectorAll(".scale-edit").forEach(a=>{let l=a.getAttribute("data-token"),b=i.getPropertyValue(`${t}${l}`).trim();a.value=b||""})}else n&&this.querySelectorAll(".scale-bar").forEach(i=>{let a=i.getBoundingClientRect().width,l=i.nextElementSibling;l&&(l.textContent=`${Math.round(a*100)/100}px`)})})}#t(){if(!this.hasAttribute("editable"))return;let e=this.getAttribute("prefix")||"--size-";this.querySelectorAll(".scale-edit").forEach(t=>{this.listen(t,"change",()=>this.#r(t,e)),this.listen(t,"keydown",n=>{n.key==="Enter"&&this.#r(t,e)})})}#r(e,t){let n=e.getAttribute("data-token"),o=e.value.trim();if(!n||!o)return;let r=this.#n(),d=`${t}${n}`;r&&r.style.setProperty(d,o),this.dispatchEvent(new CustomEvent("spacing-specimen:change",{bubbles:!0,detail:{name:n,value:o,token:d,target:this.getAttribute("target")||":root"}}))}#n(){let e=this.getAttribute("target")||":root";try{return e===":root"?document.documentElement:document.querySelector(e)}catch{return document.documentElement}}};h("spacing-specimen",f);
6
6
  //# sourceMappingURL=spacing-specimen.js.map
@@ -1,2 +1,2 @@
1
- var d=window.matchMedia("(prefers-reduced-motion: reduce)");var c=new Map;function h(r,t,e={}){let i=e.priority??10,n={impl:t,bundle:e.bundle,contract:e.contract,priority:i},s=c.get(r);if(customElements.get(r)){if(!s||s.priority>=i){s&&s.priority===i&&s.impl!==t&&console.warn(`[VB Bundle] Tag <${r}> already registered by "${s.bundle}" (priority ${s.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${r}> defined by "${s.bundle}" cannot be replaced (customElements.define is permanent). "${e.bundle}" has higher priority but arrived late.`);return}if(s&&s.priority>=i){s.priority===i&&console.warn(`[VB Bundle] Tag <${r}> already registered by "${s.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}c.set(r,n),customElements.define(r,t)}var o=class extends HTMLElement{#t=[];connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&this.setAttribute("data-upgraded","")}disconnectedCallback(){for(let t of this.#t)t();this.#t=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,e,i,n){t.addEventListener(e,i,n),this.#t.push(()=>t.removeEventListener(e,i,n))}setup(){}teardown(){}};var l=class extends o{#t;#i;#o;#a=!1;#r=50;#s=!1;#u=50;get#l(){return this.getAttribute("direction")==="vertical"}get#c(){let t=this.getAttribute("min"),e=Number(t);return t!==null&&!isNaN(e)?e:10}get#h(){let t=this.getAttribute("max"),e=Number(t);return t!==null&&!isNaN(e)?e:90}get position(){return this.#r}set position(t){this.#e(Number(t))}get collapsed(){return this.#s}set collapsed(t){t?this.#p():this.#b()}reset(){let t=this.getAttribute("position"),e=Number(t),i=t!==null&&!isNaN(e)?e:50;this.#s=!1,this.#e(i),this.#w()}setup(){let t=[...this.children].filter(u=>!u.classList.contains("split-divider"));if(t.length<2)return!1;this.#i=t[0],this.#o=t[1];let e=this.getAttribute("position"),i=Number(e),n=e!==null&&!isNaN(i)?i:null,s=this.#g(),a=n??s??50;this.#t=document.createElement("div"),this.#t.className="split-divider",this.#t.setAttribute("role","separator"),this.#t.setAttribute("aria-orientation",this.#l?"vertical":"horizontal"),this.#t.setAttribute("aria-valuenow",String(Math.round(a))),this.#t.setAttribute("aria-valuemin",String(this.#c)),this.#t.setAttribute("aria-valuemax",String(this.#h)),this.#t.setAttribute("aria-label","Resize panels"),this.#t.setAttribute("tabindex","0"),this.insertBefore(this.#t,this.#o),this.#e(a),this.listen(this.#t,"pointerdown",this.#m),this.listen(this.#t,"keydown",this.#v),this.hasAttribute("collapsible")&&this.listen(this.#t,"dblclick",this.#y)}teardown(){this.#t&&(this.#t.remove(),this.#t=null)}#m=t=>{t.preventDefault(),this.#a=!0,this.#t.setPointerCapture(t.pointerId),this.style.userSelect="none",this.#t.addEventListener("pointermove",this.#d),this.#t.addEventListener("pointerup",this.#f)};#d=t=>{if(!this.#a)return;let e=this.getBoundingClientRect(),i;this.#l?i=(t.clientY-e.top)/e.height*100:i=(t.clientX-e.left)/e.width*100,this.#s&&(this.#s=!1),this.#e(i)};#f=t=>{this.#a=!1,this.#t.releasePointerCapture(t.pointerId),this.style.userSelect="",this.#t.removeEventListener("pointermove",this.#d),this.#t.removeEventListener("pointerup",this.#f),this.#n()};#v=t=>{let e=t.shiftKey?10:1,i=this.#r,n=this.#l?["ArrowUp"]:["ArrowLeft"],s=this.#l?["ArrowDown"]:["ArrowRight"];n.includes(t.key)?(t.preventDefault(),this.#e(i-e),this.#n()):s.includes(t.key)?(t.preventDefault(),this.#e(i+e),this.#n()):t.key==="Home"?(t.preventDefault(),this.#e(this.#c),this.#n()):t.key==="End"&&(t.preventDefault(),this.#e(this.#h),this.#n())};#y=()=>{this.#s?this.#b():this.#p(),this.#n()};#p(){this.#u=this.#r,this.#s=!0,this.#i.style.flexBasis="0%",this.#i.style.overflow="hidden",this.#t.setAttribute("aria-valuenow","0"),this.#r=0,this.dispatchEvent(new CustomEvent("split-surface:collapse",{detail:{collapsed:!0},bubbles:!0}))}#b(){this.#s=!1,this.#i.style.overflow="auto",this.#e(this.#u),this.dispatchEvent(new CustomEvent("split-surface:collapse",{detail:{collapsed:!1},bubbles:!0}))}#e(t){let e=this.#s?0:Math.min(this.#h,Math.max(this.#c,t));this.#r=e,this.#i.style.flexBasis=`${e}%`,this.#i.style.flexGrow="0",this.#i.style.flexShrink="0",this.#i.style.overflow="auto",this.#o.style.flexGrow="1",this.#o.style.overflow="auto",this.#t.setAttribute("aria-valuenow",String(Math.round(e))),this.dispatchEvent(new CustomEvent("split-surface:resize",{detail:{position:e},bubbles:!0}))}#g(){let t=this.getAttribute("persist");if(!t)return null;try{let e=localStorage.getItem(`split-surface:${t}`);return e!==null?Number(e):null}catch{return null}}#n(){let t=this.getAttribute("persist");if(t)try{localStorage.setItem(`split-surface:${t}`,String(Math.round(this.#r)))}catch{}}#w(){let t=this.getAttribute("persist");if(t)try{localStorage.removeItem(`split-surface:${t}`)}catch{}}};h("split-surface",l);export{l as SplitSurface};
1
+ var v=window.matchMedia("(prefers-reduced-motion: reduce)");var f=new Map;function p(s,t,e={}){let i=e.priority??10,n={impl:t,bundle:e.bundle,contract:e.contract,priority:i},r=f.get(s);if(customElements.get(s)){if(!r||r.priority>=i){r&&r.priority===i&&r.impl!==t&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${r.bundle}" (priority ${r.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${s}> defined by "${r.bundle}" cannot be replaced (customElements.define is permanent). "${e.bundle}" has higher priority but arrived late.`);return}if(r&&r.priority>=i){r.priority===i&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${r.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}f.set(s,n),customElements.define(s,t)}var c=class extends HTMLElement{#t=[];connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&this.setAttribute("data-upgraded","")}disconnectedCallback(){for(let t of this.#t)t();this.#t=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,e,i,n){t.addEventListener(e,i,n),this.#t.push(()=>t.removeEventListener(e,i,n))}setup(){}teardown(){}};function w(){let s=globalThis.localStorage;if(!s)throw new Error("VBStore: localStorage is not available in this environment");return{async getRaw(t){return s.getItem(t)},async setRaw(t,e){s.setItem(t,e)},async removeRaw(t){s.removeItem(t)},async keys(t){let e=[];for(let i=0;i<s.length;i++){let n=s.key(i);n&&n.startsWith(t)&&e.push(n)}return e}}}var u=null;function o(){return u||(u=w()),u}function h(s,t){if(typeof s!="string"||!s)throw new TypeError("VBStore: namespace must be a non-empty string");if(typeof t!="string"||!t)throw new TypeError("VBStore: key must be a non-empty string");return`vb:${s}:${t}`}function m(s){if(typeof s!="string"||!s)throw new TypeError("VBStore: namespace must be a non-empty string");return`vb:${s}:`}function y(s){try{let t=JSON.parse(s);if(t&&typeof t=="object"&&typeof t.timestamp=="number")return t}catch{}return null}var l={configure(s={}){u=s.backend??null},async set(s,t,e){let i={data:e,timestamp:Date.now()};await o().setRaw(h(s,t),JSON.stringify(i))},async get(s,t,e){let i=await o().getRaw(h(s,t));if(i==null)return null;let n=y(i);return!n||e?.maxAge!=null&&Date.now()-n.timestamp>e.maxAge?null:n.data},async remove(s,t){await o().removeRaw(h(s,t))},async list(s){let t=m(s),e=await o().keys(t),i=[];for(let n of e){let r=await o().getRaw(n);if(r==null)continue;let a=y(r);a&&i.push({key:n.slice(t.length),data:a.data,timestamp:a.timestamp})}return i},async clear(s){let t=m(s),e=await o().keys(t);for(let i of e)await o().removeRaw(i)},async clearAll(){let s=await o().keys("vb:");for(let t of s)await o().removeRaw(t)},async setMany(s,t){for(let[e,i]of t)await l.set(s,e,i)}};var d=class extends c{#t;#s;#o;#l=!1;#n=50;#i=!1;#h=50;get#a(){return this.getAttribute("direction")==="vertical"}get#c(){let t=this.getAttribute("min"),e=Number(t);return t!==null&&!isNaN(e)?e:10}get#u(){let t=this.getAttribute("max"),e=Number(t);return t!==null&&!isNaN(e)?e:90}get position(){return this.#n}set position(t){this.#e(Number(t))}get collapsed(){return this.#i}set collapsed(t){t?this.#p():this.#m()}reset(){let t=this.getAttribute("position"),e=Number(t),i=t!==null&&!isNaN(e)?e:50;this.#i=!1,this.#e(i),this.#g()}async setup(){let t=[...this.children].filter(b=>!b.classList.contains("split-divider"));if(t.length<2)return!1;this.#s=t[0],this.#o=t[1];let e=this.getAttribute("position"),i=Number(e),n=e!==null&&!isNaN(i)?i:null,r=await this.#v(),a=n??r??50;this.#t=document.createElement("div"),this.#t.className="split-divider",this.#t.setAttribute("role","separator"),this.#t.setAttribute("aria-orientation",this.#a?"vertical":"horizontal"),this.#t.setAttribute("aria-valuenow",String(Math.round(a))),this.#t.setAttribute("aria-valuemin",String(this.#c)),this.#t.setAttribute("aria-valuemax",String(this.#u)),this.#t.setAttribute("aria-label","Resize panels"),this.#t.setAttribute("tabindex","0"),this.insertBefore(this.#t,this.#o),this.#e(a),this.listen(this.#t,"pointerdown",this.#y),this.listen(this.#t,"keydown",this.#b),this.hasAttribute("collapsible")&&this.listen(this.#t,"dblclick",this.#w)}teardown(){this.#t&&(this.#t.remove(),this.#t=null)}#y=t=>{t.preventDefault(),this.#l=!0,this.#t.setPointerCapture(t.pointerId),this.style.userSelect="none",this.#t.addEventListener("pointermove",this.#d),this.#t.addEventListener("pointerup",this.#f)};#d=t=>{if(!this.#l)return;let e=this.getBoundingClientRect(),i;this.#a?i=(t.clientY-e.top)/e.height*100:i=(t.clientX-e.left)/e.width*100,this.#i&&(this.#i=!1),this.#e(i)};#f=t=>{this.#l=!1,this.#t.releasePointerCapture(t.pointerId),this.style.userSelect="",this.#t.removeEventListener("pointermove",this.#d),this.#t.removeEventListener("pointerup",this.#f),this.#r()};#b=t=>{let e=t.shiftKey?10:1,i=this.#n,n=this.#a?["ArrowUp"]:["ArrowLeft"],r=this.#a?["ArrowDown"]:["ArrowRight"];n.includes(t.key)?(t.preventDefault(),this.#e(i-e),this.#r()):r.includes(t.key)?(t.preventDefault(),this.#e(i+e),this.#r()):t.key==="Home"?(t.preventDefault(),this.#e(this.#c),this.#r()):t.key==="End"&&(t.preventDefault(),this.#e(this.#u),this.#r())};#w=()=>{this.#i?this.#m():this.#p(),this.#r()};#p(){this.#h=this.#n,this.#i=!0,this.#s.style.flexBasis="0%",this.#s.style.overflow="hidden",this.#t.setAttribute("aria-valuenow","0"),this.#n=0,this.dispatchEvent(new CustomEvent("split-surface:collapse",{detail:{collapsed:!0},bubbles:!0}))}#m(){this.#i=!1,this.#s.style.overflow="auto",this.#e(this.#h),this.dispatchEvent(new CustomEvent("split-surface:collapse",{detail:{collapsed:!1},bubbles:!0}))}#e(t){let e=this.#i?0:Math.min(this.#u,Math.max(this.#c,t));this.#n=e,this.#s.style.flexBasis=`${e}%`,this.#s.style.flexGrow="0",this.#s.style.flexShrink="0",this.#s.style.overflow="auto",this.#o.style.flexGrow="1",this.#o.style.overflow="auto",this.#t.setAttribute("aria-valuenow",String(Math.round(e))),this.dispatchEvent(new CustomEvent("split-surface:resize",{detail:{position:e},bubbles:!0}))}async#v(){let t=this.getAttribute("persist");if(!t)return null;let e=await l.get("layout",`split:${t}`);return typeof e=="number"?e:null}#r(){let t=this.getAttribute("persist");t&&l.set("layout",`split:${t}`,Math.round(this.#n)).catch(()=>{})}#g(){let t=this.getAttribute("persist");t&&l.remove("layout",`split:${t}`).catch(()=>{})}};p("split-surface",d);export{d as SplitSurface};
2
2
  //# sourceMappingURL=split-surface.js.map
@@ -1,7 +1,7 @@
1
- var m=window.matchMedia("(prefers-reduced-motion: reduce)");var f=new Map;function g(l,e,i={}){let t=i.priority??10,n={impl:e,bundle:i.bundle,contract:i.contract,priority:t},s=f.get(l);if(customElements.get(l)){if(!s||s.priority>=t){s&&s.priority===t&&s.impl!==e&&console.warn(`[VB Bundle] Tag <${l}> already registered by "${s.bundle}" (priority ${s.priority}). Skipping "${i.bundle}".`);return}console.warn(`[VB Bundle] Tag <${l}> defined by "${s.bundle}" cannot be replaced (customElements.define is permanent). "${i.bundle}" has higher priority but arrived late.`);return}if(s&&s.priority>=t){s.priority===t&&console.warn(`[VB Bundle] Tag <${l}> already registered by "${s.bundle}". Skipping "${i.bundle}" (first wins at equal priority).`);return}f.set(l,n),customElements.define(l,e)}var u=class extends HTMLElement{#n=[];connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&this.setAttribute("data-upgraded","")}disconnectedCallback(){for(let e of this.#n)e();this.#n=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(e,i,t,n){e.addEventListener(i,t,n),this.#n.push(()=>e.removeEventListener(i,t,n))}setup(){}teardown(){}};var p=class extends u{#n=null;#w=null;#c=[];#t="";#a=0;#l=null;#f=null;#x=null;#g=null;#s=!1;#i=!1;#A=0;#e=null;#o=null;#h=null;#d=null;#u=null;#m=null;#F=null;static get observedAttributes(){return["speed","voice","for"]}attributeChangedCallback(e,i,t){if(i!==t&&(e==="for"&&(this.stop(),this.#k()),(e==="speed"||e==="voice")&&this.#s&&this.#y(),e==="speed"&&this.#u)){let n=this.#E(parseFloat(t)||1);this.#u.value=String(n),this.#m&&(this.#m.textContent=`${n}\xD7`)}}setup(){if(!("speechSynthesis"in window))return this.style.display="none",!1;this.#I(),this.#k(),this.#H(),this.#g=this.#T(),this.#g.then(e=>this.#j(e)),this.listen(window,"beforeunload",this.#D)}teardown(){this.stop(),this.#q()}play(){if(this.#i){this.resume();return}this.#s||this.#$(0)}pause(){!this.#s||this.#i||(speechSynthesis.pause(),this.#i=!0,this.#V(!0),this.#r("text-reader:pause"))}resume(){this.#i&&(speechSynthesis.resume(),this.#i=!1,this.#V(!1),this.#r("text-reader:resume"))}stop(){speechSynthesis.cancel(),this.#v(),this.#r("text-reader:stop")}get voices(){return this.#g||this.#T()}get speaking(){return this.#s}get paused(){return this.#i}get progress(){return this.#t.length?Math.min(this.#a/this.#t.length,1):0}#I(){let e=document.createElement("div");e.setAttribute("part","controls"),e.setAttribute("role","group"),e.setAttribute("aria-label","Article reader");let i=this.#b("play",this.getAttribute("label-play")||"Play","\u25B6");i.addEventListener("click",()=>this.play());let t=this.#b("pause",this.getAttribute("label-pause")||"Pause","\u23F8");t.hidden=!0,t.addEventListener("click",()=>this.pause());let n=this.#b("stop",this.getAttribute("label-stop")||"Stop","\u23F9");n.disabled=!0,n.addEventListener("click",()=>this.stop());let s=document.createElement("select");s.setAttribute("aria-label","Voice");let r=document.createElement("option");r.textContent="Loading voices\u2026",s.append(r),s.addEventListener("change",()=>{this.#s&&this.#y()});let h=document.createElement("label");h.setAttribute("data-speed-group","");let o=document.createElement("span");o.setAttribute("data-speed-value","");let a=this.#E(parseFloat(this.getAttribute("speed")??"1")||1);o.textContent=`${a}\xD7`;let c=document.createElement("input");c.type="range",c.min="0.5",c.max="2",c.step="0.1",c.value=String(a),c.setAttribute("aria-label","Speed"),c.addEventListener("input",()=>{let d=parseFloat(c.value);o.textContent=`${d}\xD7`,this.#s&&this.#y()}),h.append(o,c),this.#S("icon-play",i),this.#S("icon-pause",t),this.#S("icon-stop",n),e.append(i,t,n,s,h),this.prepend(e),this.#F=e,this.#e=i,this.#o=t,this.#h=n,this.#d=s,this.#u=c,this.#m=o}#b(e,i,t){let n=document.createElement("button");return n.type="button",n.setAttribute("part",`button ${e}`),n.setAttribute("aria-label",i),n.textContent=t,n}#S(e,i){let t=this.querySelector(`[slot="${e}"]`);t&&(t.removeAttribute("slot"),i.textContent="",i.append(t))}#k(){let e=this.getAttribute("for");if(!e){console.warn('<text-reader>: missing "for" attribute'),this.#C();return}if(this.#n=document.getElementById(e),!this.#n){console.warn(`<text-reader>: no element found with id="${e}"`),this.#C();return}this.#P(),this.#N()}#C(){this.#e&&(this.#e.disabled=!0),this.#h&&(this.#h.disabled=!0)}#N(){this.#e&&(this.#e.disabled=!1)}#P(){let e=this.#n;if(!e)return;let i=this.getAttribute("selectors")||"p,li",t=[...e.querySelectorAll(i)],n=r=>r.closest("pre")||r.closest("code")||r.closest('[aria-hidden="true"]');this.#c=[];let s=0;for(let r of t){if(n(r))continue;let h=r.textContent.trim();h&&(this.#c.push({element:r,text:h,speechStart:s,speechEnd:s+h.length}),s+=h.length+1)}this.#t=this.#c.map(r=>r.text).join(" ")}#$(e){if(!this.#t)return;let i=e>0?this.#t.slice(e):this.#t;if(!i.trim())return;let t=new SpeechSynthesisUtterance(i);t.rate=this.#E(parseFloat(this.#u?.value??"1")||1);let n=this.#d?.selectedOptions[0];if(n?.dataset.voiceUri){let s=speechSynthesis.getVoices().find(r=>r.voiceURI===n.dataset.voiceUri);s&&(t.voice=s)}t.onboundary=s=>{if(s.name!=="word")return;let r=e+s.charIndex;this.#a=r;let h=s.charLength;if(!h){let a=this.#t.slice(r).match(/^\S+/);h=a?a[0].length:1}this.#O(r,h),this.#r("text-reader:word",{word:this.#t.slice(r,r+h),charIndex:r,element:this.#L(r)?.element})},t.onend=()=>{let s=Date.now()-this.#A;this.#v(),this.#r("text-reader:end",{duration:s})},t.onerror=s=>{s.error==="interrupted"||s.error==="canceled"||(this.#v(),this.#r("text-reader:error",{error:s.error}))},this.#w=t,this.#s=!0,this.#i=!1,this.#A=Date.now(),this.#a=e,this.#B(!0),speechSynthesis.cancel(),speechSynthesis.speak(t),this.#U(),this.#r("text-reader:play",{voice:t.voice?.name,speed:t.rate})}#y(){let e=this.#a;speechSynthesis.cancel(),this.#p(),requestAnimationFrame(()=>this.#$(e))}#U(){this.#p(),this.#l=setInterval(()=>{if(!speechSynthesis.speaking){this.#p();return}speechSynthesis.pause(),speechSynthesis.resume()},1e4)}#p(){this.#l&&clearInterval(this.#l),this.#l=null}#H(){if(!CSS.highlights)return;let e=new CSSStyleSheet;e.replaceSync(`
1
+ var m=window.matchMedia("(prefers-reduced-motion: reduce)");var f=new Map;function g(c,t,s={}){let e=s.priority??10,i={impl:t,bundle:s.bundle,contract:s.contract,priority:e},r=f.get(c);if(customElements.get(c)){if(!r||r.priority>=e){r&&r.priority===e&&r.impl!==t&&console.warn(`[VB Bundle] Tag <${c}> already registered by "${r.bundle}" (priority ${r.priority}). Skipping "${s.bundle}".`);return}console.warn(`[VB Bundle] Tag <${c}> defined by "${r.bundle}" cannot be replaced (customElements.define is permanent). "${s.bundle}" has higher priority but arrived late.`);return}if(r&&r.priority>=e){r.priority===e&&console.warn(`[VB Bundle] Tag <${c}> already registered by "${r.bundle}". Skipping "${s.bundle}" (first wins at equal priority).`);return}f.set(c,i),customElements.define(c,t)}var u=class extends HTMLElement{#h=[];connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&this.setAttribute("data-upgraded","")}disconnectedCallback(){for(let t of this.#h)t();this.#h=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,s,e,i){t.addEventListener(s,e,i),this.#h.push(()=>t.removeEventListener(s,e,i))}setup(){}teardown(){}};var p=class extends u{#h=null;#k=null;#f=[];#r="";#u=0;#g=null;#v=null;#C=null;#E=null;#s=!1;#i=!1;#L=0;#e=null;#a=null;#l=null;#m=null;#b=null;#y=null;#H=null;#$=!1;#n=null;#t=null;static get observedAttributes(){return["speed","voice","for"]}attributeChangedCallback(t,s,e){if(s!==e&&(t==="for"&&(this.stop(),this.#B()),(t==="speed"||t==="voice")&&this.#s&&this.#A(),t==="speed")){let i=this.#p(parseFloat(e)||1);this.#b&&(this.#b.value=String(i)),this.#y&&(this.#y.textContent=`${i}\xD7`)}}setup(){if(!("speechSynthesis"in window))return this.style.display="none",!1;this.getAttribute("variant")==="icon"?this.#O():this.#D(),this.#B(),this.#J(),this.#E=this.#U(),this.#E.then(t=>this.#tt(t)),this.listen(window,"beforeunload",this.#et)}teardown(){this.stop(),this.#Q(),this.#t&&(this.#t.remove(),this.#t=null),this.#n&&(this.#n.remove(),this.#n=null)}play(){if(this.#i){this.resume();return}this.#s||this.#V(0)}pause(){!this.#s||this.#i||(speechSynthesis.pause(),this.#i=!0,this.#N(!0),this.#c("text-reader:pause"))}resume(){this.#i&&(speechSynthesis.resume(),this.#i=!1,this.#N(!1),this.#c("text-reader:resume"))}stop(){speechSynthesis.cancel(),this.#x(),this.#c("text-reader:stop")}get voices(){return this.#E||this.#U()}get speaking(){return this.#s}get paused(){return this.#i}get progress(){return this.#r.length?Math.min(this.#u/this.#r.length,1):0}#D(){let t=document.createElement("div");t.setAttribute("part","controls"),t.setAttribute("role","group"),t.setAttribute("aria-label","Article reader");let s=this.#o("play",this.getAttribute("label-play")||"Play","\u25B6");s.addEventListener("click",()=>this.play());let e=this.#o("pause",this.getAttribute("label-pause")||"Pause","\u23F8");e.hidden=!0,e.addEventListener("click",()=>this.pause());let i=this.#o("stop",this.getAttribute("label-stop")||"Stop","\u23F9");i.disabled=!0,i.addEventListener("click",()=>this.stop());let r=document.createElement("select");r.setAttribute("aria-label","Voice");let n=document.createElement("option");n.textContent="Loading voices\u2026",r.append(n),r.addEventListener("change",()=>{this.#s&&this.#A()});let h=document.createElement("label");h.setAttribute("data-speed-group","");let o=document.createElement("span");o.setAttribute("data-speed-value","");let l=this.#p(parseFloat(this.getAttribute("speed")??"1")||1);o.textContent=`${l}\xD7`;let a=document.createElement("input");a.type="range",a.min="0.5",a.max="2",a.step="0.1",a.value=String(l),a.setAttribute("aria-label","Speed"),a.addEventListener("input",()=>{let d=parseFloat(a.value);o.textContent=`${d}\xD7`,this.#s&&this.#A()}),h.append(o,a),this.#d("icon-play",s),this.#d("icon-pause",e),this.#d("icon-stop",i),t.append(s,e,i,r,h),this.prepend(t),this.#H=t,this.#e=s,this.#a=e,this.#l=i,this.#m=r,this.#b=a,this.#y=o}#o(t,s,e){let i=document.createElement("button");return i.type="button",i.setAttribute("part",`button ${t}`),i.setAttribute("aria-label",s),i.textContent=e,i}#d(t,s){let e=this.querySelector(`[slot="${t}"]`);e&&(e.removeAttribute("slot"),s.textContent="",s.append(e))}#O(){this.#$=!0;for(let e of this.querySelectorAll(':scope > [part="trigger"]'))e.remove();let t=document.createElement("button");t.type="button",t.setAttribute("part","trigger"),t.setAttribute("aria-label","Article reader"),t.setAttribute("aria-pressed","false");let s=this.querySelector('[slot="icon-trigger"]');if(s)s.removeAttribute("slot"),t.append(s);else{let e=document.createElement("icon-wc");e.setAttribute("name","volume-2"),e.setAttribute("aria-hidden","true"),t.append(e)}t.addEventListener("click",()=>this.#W()),this.append(t),this.#n=t,this.#R()}#R(){let t=document.createElement("div");t.setAttribute("data-text-reader-toolbar",""),t.setAttribute("role","group"),t.setAttribute("aria-label","Reader controls"),t.hidden=!0;let s=this.#o("play",this.getAttribute("label-play")||"Play","\u25B6");s.addEventListener("click",()=>this.play());let e=this.#o("pause",this.getAttribute("label-pause")||"Pause","\u23F8");e.hidden=!0,e.addEventListener("click",()=>this.pause());let i=this.#o("stop",this.getAttribute("label-stop")||"Stop","\u23F9");i.addEventListener("click",()=>this.stop());let r=this.#o("speed-down","Slower","\u2212");r.addEventListener("click",()=>this.#T(-.1));let n=document.createElement("span");n.setAttribute("data-speed-value","");let h=this.#p(parseFloat(this.getAttribute("speed")??"1")||1);n.textContent=`${h}\xD7`;let o=this.#o("speed-up","Faster","+");o.addEventListener("click",()=>this.#T(.1)),this.#d("icon-play",s),this.#d("icon-pause",e),this.#d("icon-stop",i),t.append(s,e,i,r,n,o),document.body.append(t),this.#e=s,this.#a=e,this.#l=i,this.#y=n,this.#t=t,this.listen(document,"pointerdown",this.#_),this.listen(document,"keydown",this.#G)}#W(){if(!this.#s){this.play();return}this.#t?.hidden&&this.#M(),this.#i?this.resume():this.pause()}#M(){if(!this.#t||!this.#n)return;let t=this.#t;t.hidden=!1,t.style.visibility="hidden",requestAnimationFrame(()=>{this.#j(),t.style.visibility=""})}#w(){this.#t&&(this.#t.hidden=!0)}#j(){let t=this.#t,s=this.#n;if(!t||!s)return;let e=s.getBoundingClientRect(),i=t.offsetWidth,r=t.offsetHeight,n=8,h=8,o=e.top-r-n;o<h&&(o=e.bottom+n);let l=e.left+e.width/2-i/2,a=window.innerWidth-i-h;l=Math.max(h,Math.min(l,a)),t.style.top=`${o}px`,t.style.left=`${l}px`}#T(t){let s=parseFloat(this.getAttribute("speed")??"1")||1,e=this.#p(s+t);this.setAttribute("speed",String(e))}#_=t=>{!this.#t||this.#t.hidden||this.#t.contains(t.target)||this.#n?.contains(t.target)||this.#w()};#G=t=>{t.key==="Escape"&&this.#t&&!this.#t.hidden&&this.#w()};#B(){let t=this.getAttribute("for");if(!t){console.warn('<text-reader>: missing "for" attribute'),this.#F();return}if(this.#h=document.getElementById(t),!this.#h){console.warn(`<text-reader>: no element found with id="${t}"`),this.#F();return}this.#X(),this.#K()}#F(){this.#e&&(this.#e.disabled=!0),this.#l&&(this.#l.disabled=!0)}#K(){this.#e&&(this.#e.disabled=!1)}#X(){let t=this.#h;if(!t)return;let s=this.getAttribute("selectors")||"p,li",e=[...t.querySelectorAll(s)],i=n=>n.closest("pre")||n.closest("code")||n.closest('[aria-hidden="true"]');this.#f=[];let r=0;for(let n of e){if(i(n))continue;let h=n.textContent.trim();h&&(this.#f.push({element:n,text:h,speechStart:r,speechEnd:r+h.length}),r+=h.length+1)}this.#r=this.#f.map(n=>n.text).join(" ")}#V(t){if(!this.#r)return;let s=t>0?this.#r.slice(t):this.#r;if(!s.trim())return;let e=s.replace(/[<>]/g," "),i=new SpeechSynthesisUtterance(e);i.rate=this.#p(parseFloat(this.#b?.value??this.getAttribute("speed")??"1")||1);let r=this.#m?.selectedOptions[0];if(r?.dataset.voiceUri){let n=speechSynthesis.getVoices().find(h=>h.voiceURI===r.dataset.voiceUri);n&&(i.voice=n)}i.onboundary=n=>{if(n.name!=="word")return;let h=t+n.charIndex;this.#u=h;let o=n.charLength;if(!o){let a=this.#r.slice(h).match(/^\S+/);o=a?a[0].length:1}this.#Y(h,o),this.#c("text-reader:word",{word:this.#r.slice(h,h+o),charIndex:h,element:this.#P(h)?.element})},i.onend=()=>{let n=Date.now()-this.#L;this.#x(),this.#c("text-reader:end",{duration:n})},i.onerror=n=>{n.error==="interrupted"||n.error==="canceled"||(console.warn("<text-reader>: SpeechSynthesisUtterance error:",n.error),this.#x(),this.#c("text-reader:error",{error:n.error}))},this.#k=i,this.#s=!0,this.#i=!1,this.#L=Date.now(),this.#u=t,this.#q(!0),speechSynthesis.cancel(),speechSynthesis.speak(i),this.#z(),this.#c("text-reader:play",{voice:i.voice?.name,speed:i.rate})}#A(){let t=this.#u;speechSynthesis.cancel(),this.#S(),requestAnimationFrame(()=>this.#V(t))}#z(){this.#S(),this.#g=setInterval(()=>{if(!speechSynthesis.speaking){this.#S();return}speechSynthesis.pause(),speechSynthesis.resume()},1e4)}#S(){this.#g&&clearInterval(this.#g),this.#g=null}#J(){if(!CSS.highlights)return;let t=new CSSStyleSheet;t.replaceSync(`
2
2
  ::highlight(text-reader-word) {
3
3
  background-color: var(--text-reader-highlight, Mark);
4
4
  color: var(--text-reader-highlight-text, MarkText);
5
5
  }
6
- `),this.#f=e,document.adoptedStyleSheets=[...document.adoptedStyleSheets,e]}#q(){let e=this.#f;e&&(document.adoptedStyleSheets=document.adoptedStyleSheets.filter(i=>i!==e),this.#f=null),this.#M()}#O(e,i){if(!CSS.highlights||this.getAttribute("highlight")==="false")return;let t=this.#L(e);if(!t)return;let n=e-t.speechStart,s=this.#R(t.element,n,i);if(!s)return;let r=new Highlight(s);if(CSS.highlights.set("text-reader-word",r),this.#x=r,this.getAttribute("scroll")!=="false"){let h=s.getBoundingClientRect(),o=window.innerHeight;(h.top<0||h.bottom>o)&&t.element.scrollIntoView({behavior:"smooth",block:"nearest"})}}#M(){CSS.highlights&&CSS.highlights.delete("text-reader-word"),this.#x=null}#L(e){let i=this.#c,t=0,n=i.length-1;for(;t<=n;){let s=t+n>>>1,r=i[s];if(e<r.speechStart)n=s-1;else if(e>=r.speechEnd)t=s+1;else return r}return null}#R(e,i,t){let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT),s=0;for(;n.nextNode();){let r=n.currentNode,h=r.textContent??"";if(!h.trim())continue;let o=h.length;if(s+o>i){let a=i-s,c=document.createRange();c.setStart(r,Math.min(a,o));let d=a+t;return d<=o?c.setEnd(r,d):c.setEnd(r,o),c}s+=o}return null}async#T(){let e=speechSynthesis.getVoices();return e.length>0?e:new Promise(i=>{let t=()=>{speechSynthesis.removeEventListener("voiceschanged",t),i(speechSynthesis.getVoices())};speechSynthesis.addEventListener("voiceschanged",t),setTimeout(()=>{speechSynthesis.removeEventListener("voiceschanged",t),i(speechSynthesis.getVoices())},3e3)})}#j(e){if(!this.#d||!e.length)return;let i=this.#d;i.innerHTML="";let t=document.documentElement.lang||"en",n=e.filter(o=>o.lang.startsWith(t)),s=e.filter(o=>!o.lang.startsWith(t)),r=[...n,...s],h=this.getAttribute("voice");for(let o of r){let a=document.createElement("option");a.textContent=`${o.name} (${o.lang})`,a.dataset.voiceUri=o.voiceURI,h&&o.voiceURI===h&&(a.selected=!0),i.append(a)}if(!h){let o=n.find(a=>a.default)||n[0];if(o){let a=[...i.options].find(c=>c.dataset.voiceUri===o.voiceURI);a&&(a.selected=!0)}}}#B(e){!this.#e||!this.#o||!this.#h||(e?(this.#e.hidden=!0,this.#o.hidden=!1,this.#h.disabled=!1):(this.#e.hidden=!1,this.#o.hidden=!0,this.#h.disabled=!0))}#V(e){!this.#e||!this.#o||(this.#e.hidden=!e,this.#o.hidden=e)}#v(){this.#s=!1,this.#i=!1,this.#a=0,this.#w=null,this.#p(),this.#M(),this.#B(!1)}#E(e){return Math.round(Math.max(.5,Math.min(2,e))*10)/10}#r(e,i={}){this.dispatchEvent(new CustomEvent(e,{detail:i,bubbles:!0}))}#D=()=>{speechSynthesis.cancel()}};g("text-reader",p);export{p as TextReader};
6
+ `),this.#v=t,document.adoptedStyleSheets=[...document.adoptedStyleSheets,t]}#Q(){let t=this.#v;t&&(document.adoptedStyleSheets=document.adoptedStyleSheets.filter(s=>s!==t),this.#v=null),this.#I()}#Y(t,s){if(!CSS.highlights||this.getAttribute("highlight")==="false")return;let e=this.#P(t);if(!e)return;let i=t-e.speechStart,r=this.#Z(e.element,i,s);if(!r)return;let n=new Highlight(r);if(CSS.highlights.set("text-reader-word",n),this.#C=n,this.getAttribute("scroll")!=="false"){let h=r.getBoundingClientRect(),o=window.innerHeight;(h.top<0||h.bottom>o)&&e.element.scrollIntoView({behavior:"smooth",block:"nearest"})}}#I(){CSS.highlights&&CSS.highlights.delete("text-reader-word"),this.#C=null}#P(t){let s=this.#f,e=0,i=s.length-1;for(;e<=i;){let r=e+i>>>1,n=s[r];if(t<n.speechStart)i=r-1;else if(t>=n.speechEnd)e=r+1;else return n}return null}#Z(t,s,e){let i=document.createTreeWalker(t,NodeFilter.SHOW_TEXT),r=0;for(;i.nextNode();){let n=i.currentNode,h=n.textContent??"";if(!h.trim())continue;let o=h.length;if(r+o>s){let l=s-r,a=document.createRange();a.setStart(n,Math.min(l,o));let d=l+e;return d<=o?a.setEnd(n,d):a.setEnd(n,o),a}r+=o}return null}async#U(){let t=speechSynthesis.getVoices();return t.length>0?t:new Promise(s=>{let e=()=>{speechSynthesis.removeEventListener("voiceschanged",e),s(speechSynthesis.getVoices())};speechSynthesis.addEventListener("voiceschanged",e),setTimeout(()=>{speechSynthesis.removeEventListener("voiceschanged",e),s(speechSynthesis.getVoices())},3e3)})}#tt(t){if(!this.#m||!t.length)return;let s=this.#m;s.innerHTML="";let e=document.documentElement.lang||"en",i=t.filter(o=>o.lang.startsWith(e)),r=t.filter(o=>!o.lang.startsWith(e)),n=[...i,...r],h=this.getAttribute("voice");for(let o of n){let l=document.createElement("option");l.textContent=`${o.name} (${o.lang})`,l.dataset.voiceUri=o.voiceURI,h&&o.voiceURI===h&&(l.selected=!0),s.append(l)}if(!h){let o=i.find(l=>l.default)||i[0];if(o){let l=[...s.options].find(a=>a.dataset.voiceUri===o.voiceURI);l&&(l.selected=!0)}}}#q(t){!this.#e||!this.#a||!this.#l||(t?(this.#e.hidden=!0,this.#a.hidden=!1,this.#l.disabled=!1):(this.#e.hidden=!1,this.#a.hidden=!0,this.#l.disabled=!0),this.#$&&(this.#n&&this.#n.setAttribute("aria-pressed",String(t)),t?this.#M():this.#w()))}#N(t){!this.#e||!this.#a||(this.#e.hidden=!t,this.#a.hidden=t)}#x(){this.#s=!1,this.#i=!1,this.#u=0,this.#k=null,this.#S(),this.#I(),this.#q(!1)}#p(t){return Math.round(Math.max(.5,Math.min(2,t))*10)/10}#c(t,s={}){this.dispatchEvent(new CustomEvent(t,{detail:s,bubbles:!0}))}#et=()=>{speechSynthesis.cancel()}};g("text-reader",p);export{p as TextReader};
7
7
  //# sourceMappingURL=text-reader.js.map
@@ -0,0 +1,18 @@
1
+ var p=window.matchMedia("(prefers-reduced-motion: reduce)");var u=new Map;function d(i,e,t={}){let r=t.priority??10,n={impl:e,bundle:t.bundle,contract:t.contract,priority:r},o=u.get(i);if(customElements.get(i)){if(!o||o.priority>=r){o&&o.priority===r&&o.impl!==e&&console.warn(`[VB Bundle] Tag <${i}> already registered by "${o.bundle}" (priority ${o.priority}). Skipping "${t.bundle}".`);return}console.warn(`[VB Bundle] Tag <${i}> defined by "${o.bundle}" cannot be replaced (customElements.define is permanent). "${t.bundle}" has higher priority but arrived late.`);return}if(o&&o.priority>=r){o.priority===r&&console.warn(`[VB Bundle] Tag <${i}> already registered by "${o.bundle}". Skipping "${t.bundle}" (first wins at equal priority).`);return}u.set(i,n),customElements.define(i,e)}var c=class extends HTMLElement{#e=[];connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&this.setAttribute("data-upgraded","")}disconnectedCallback(){for(let e of this.#e)e();this.#e=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(e,t,r,n){e.addEventListener(t,r,n),this.#e.push(()=>e.removeEventListener(t,r,n))}setup(){}teardown(){}};var h="--color-,--hue-,--lightness-,--chroma-,--font-,--size-,--radius-,--shadow-,--border-width-,--ease-,--duration-",m=["type-specimen:change","spacing-specimen:change","token-specimen:change","semantic-palette:change"],a=class extends c{static observedAttributes=["scope","selector","include","format","label","live"];setup(){this.#o(),this.#t(),this.#r(),this.#n()}attributeChangedCallback(){this.isConnected&&this.hasAttribute("data-upgraded")&&(this.#o(),this.#t(),this.#r(),this.#n())}#e(){let e=this.getAttribute("scope")||":root";try{return e===":root"?document.documentElement:document.querySelector(e)}catch{return document.documentElement}}#s(){return(this.getAttribute("include")||h).split(",").map(t=>t.trim()).filter(Boolean)}#i(){let e=this.#e();if(!e)return[];let t=this.#s(),r=e.style,n=[];for(let o=0;o<r.length;o++){let s=r.item(o);if(!s.startsWith("--")||!t.some(f=>s.startsWith(f)))continue;let l=r.getPropertyValue(s).trim();l&&n.push([s,l])}return n}#c(e){if((this.getAttribute("format")||"css")==="json"){let o=Object.fromEntries(e);return JSON.stringify(o,null,2)}let r=this.getAttribute("selector")||":root";if(!e.length)return`${r} {
2
+ /* No theme overrides detected yet. Edit a specimen to populate. */
3
+ }
4
+ `;let n=e.map(([o,s])=>` ${o}: ${s};`).join(`
5
+ `);return`${r} {
6
+ ${n}
7
+ }
8
+ `}#o(){let e=this.getAttribute("label")||"",t=e?`<p style="font-weight:600;margin:0 0 var(--size-xs,0.5rem)">${e}</p>`:"",r="display:flex;gap:var(--size-2xs,0.375rem);margin-block-end:var(--size-xs,0.5rem)",n="padding:0.375rem 0.75rem;border:1px solid var(--color-border,#ccc);border-radius:var(--radius-s,0.25rem);background:var(--color-surface,#fff);color:var(--color-text,#222);cursor:pointer;font:inherit;font-size:var(--font-size-xs,0.75rem)",o="inline-size:100%;block-size:16rem;padding:var(--size-s,0.75rem);border:1px solid var(--color-border,#ccc);border-radius:var(--radius-s,0.25rem);background:var(--color-surface-sunken,#f8f8f8);color:var(--color-text,#222);font-family:var(--font-mono,monospace);font-size:var(--font-size-xs,0.75rem);white-space:pre;overflow:auto;tab-size:2;resize:vertical;box-sizing:border-box";this.innerHTML=`
9
+ ${t}
10
+ <div class="te-toolbar" style="${r}">
11
+ <button type="button" class="te-refresh" style="${n}" aria-label="Refresh">Refresh</button>
12
+ <button type="button" class="te-copy" style="${n}">Copy</button>
13
+ <button type="button" class="te-download" style="${n}">Download</button>
14
+ <span class="te-count" style="align-self:center;font-size:var(--font-size-xs,0.75rem);color:var(--color-text-muted,#666);margin-inline-start:auto"></span>
15
+ </div>
16
+ <textarea class="te-output" readonly aria-label="Theme output" style="${o}"></textarea>
17
+ `}#t(){let e=this.#i(),t=this.#c(e),r=this.querySelector(".te-output"),n=this.querySelector(".te-count");r&&(r.value=t),n&&(n.textContent=`${e.length} token${e.length===1?"":"s"}`),this.dispatchEvent(new CustomEvent("theme-export:change",{bubbles:!0,detail:{output:t,format:this.getAttribute("format")||"css",tokens:Object.fromEntries(e)}}))}#r(){let e=this.querySelector(".te-refresh"),t=this.querySelector(".te-copy"),r=this.querySelector(".te-download");e&&this.listen(e,"click",()=>this.#t()),t&&this.listen(t,"click",()=>{let n=this.querySelector(".te-output");if(!n)return;navigator.clipboard?.writeText(n.value);let o=t.textContent;t.textContent="Copied!",setTimeout(()=>{t.textContent=o},1500)}),r&&this.listen(r,"click",()=>this.#a())}#a(){let e=this.querySelector(".te-output");if(!e)return;let t=this.getAttribute("format")||"css",r=t==="json"?"json":"css",n=new Blob([e.value],{type:t==="json"?"application/json":"text/css"}),o=URL.createObjectURL(n),s=document.createElement("a");s.href=o,s.download=`theme.${r}`,s.click(),URL.revokeObjectURL(o)}#n(){if(this.hasAttribute("live"))for(let e of m)this.listen(document,e,()=>this.#t())}};d("theme-export",a);
18
+ //# sourceMappingURL=theme-export.js.map