vanilla-breeze 0.1.2 → 0.1.4

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 (268) hide show
  1. package/dist/cdn/components/accessibility-specimen.js +11 -0
  2. package/dist/cdn/components/accordion-wc.js +1 -1
  3. package/dist/cdn/components/activity-feed.js +2 -0
  4. package/dist/cdn/components/adr-wc.js +17 -17
  5. package/dist/cdn/components/ai-chat.js +28 -0
  6. package/dist/cdn/components/ai-summary.js +10 -0
  7. package/dist/cdn/components/analytics-panel.js +5 -5
  8. package/dist/cdn/components/audio-player.js +3 -3
  9. package/dist/cdn/components/audio-visualizer.js +2 -2
  10. package/dist/cdn/components/author-index.js +2 -2
  11. package/dist/cdn/components/brand-mark.js +1 -1
  12. package/dist/cdn/components/bread-crumb.js +2 -0
  13. package/dist/cdn/components/breakpoint-specimen.js +26 -0
  14. package/dist/cdn/components/burndown-chart.js +2 -0
  15. package/dist/cdn/components/calendar-wc.js +2 -2
  16. package/dist/cdn/components/capacity-plan.js +25 -0
  17. package/dist/cdn/components/card-list.js +1 -1
  18. package/dist/cdn/components/carousel-wc.js +1 -1
  19. package/dist/cdn/components/change-set.js +2 -2
  20. package/dist/cdn/components/chart-wc.js +58 -36
  21. package/dist/cdn/components/chat-input.js +1 -1
  22. package/dist/cdn/components/chat-window.js +1 -1
  23. package/dist/cdn/components/color-palette.js +9 -9
  24. package/dist/cdn/components/color-picker.js +1 -1
  25. package/dist/cdn/components/combo-box.js +1 -1
  26. package/dist/cdn/components/command-palette.js +1 -1
  27. package/dist/cdn/components/comment-box.js +60 -0
  28. package/dist/cdn/components/comment-thread.js +60 -0
  29. package/dist/cdn/components/comment-wc.js +1 -1
  30. package/dist/cdn/components/compare-surface.js +1 -1
  31. package/dist/cdn/components/component-sampler.js +4 -4
  32. package/dist/cdn/components/consent-banner.js +1 -1
  33. package/dist/cdn/components/content-lens.js +1 -1
  34. package/dist/cdn/components/content-swap.js +1 -1
  35. package/dist/cdn/components/context-menu.js +1 -1
  36. package/dist/cdn/components/data-table.js +1 -1
  37. package/dist/cdn/components/date-picker.js +1 -1
  38. package/dist/cdn/components/day-view.js +1 -1
  39. package/dist/cdn/components/diagram-wc.js +3 -0
  40. package/dist/cdn/components/drag-surface.js +1 -1
  41. package/dist/cdn/components/drop-down.js +1 -1
  42. package/dist/cdn/components/emoji-picker.js +1 -1
  43. package/dist/cdn/components/empathy-map.js +41 -43
  44. package/dist/cdn/components/flow-diagram.js +1 -1
  45. package/dist/cdn/components/font-pairer.js +81 -81
  46. package/dist/cdn/components/foot-notes.js +1 -1
  47. package/dist/cdn/components/form-field.js +1 -1
  48. package/dist/cdn/components/gantt-chart.js +1 -1
  49. package/dist/cdn/components/geo-map.js +25 -23
  50. package/dist/cdn/components/glossary-index.js +1 -1
  51. package/dist/cdn/components/glossary-wc.js +1 -1
  52. package/dist/cdn/components/gradient-builder.js +29 -29
  53. package/dist/cdn/components/heading-links.js +1 -1
  54. package/dist/cdn/components/highlight-wc.js +2 -2
  55. package/dist/cdn/components/image-gallery.js +1 -1
  56. package/dist/cdn/components/image-map.js +1 -1
  57. package/dist/cdn/components/impact-effort.js +1 -1
  58. package/dist/cdn/components/include-file.js +1 -1
  59. package/dist/cdn/components/iron-triangle.js +2 -0
  60. package/dist/cdn/components/kanban-board.js +1 -1
  61. package/dist/cdn/components/layout-specimen.js +35 -0
  62. package/dist/cdn/components/manifest.json +228 -100
  63. package/dist/cdn/components/markdown-editor.js +1 -1
  64. package/dist/cdn/components/markdown-viewer.js +12 -12
  65. package/dist/cdn/components/motion-specimen.js +12 -12
  66. package/dist/cdn/components/nav-bar.js +2 -0
  67. package/dist/cdn/components/note-wc.js +2 -2
  68. package/dist/cdn/components/notification-wc.js +4 -4
  69. package/dist/cdn/components/page-info.js +21 -21
  70. package/dist/cdn/components/page-stats.js +1 -1
  71. package/dist/cdn/components/page-toc.js +1 -1
  72. package/dist/cdn/components/page-tools.js +1 -1
  73. package/dist/cdn/components/page-tour.js +6 -6
  74. package/dist/cdn/components/pager-wc.js +2 -0
  75. package/dist/cdn/components/palette-generator.js +11 -11
  76. package/dist/cdn/components/poll-wc.js +2 -0
  77. package/dist/cdn/components/pop-over.js +2 -0
  78. package/dist/cdn/components/popularity-index.js +2 -2
  79. package/dist/cdn/components/print-page.js +1 -1
  80. package/dist/cdn/components/product-roadmap.js +3 -0
  81. package/dist/cdn/components/progress-tracker.js +2 -0
  82. package/dist/cdn/components/qr-code.js +1 -1
  83. package/dist/cdn/components/quadrant-grid.js +3 -0
  84. package/dist/cdn/components/quality-target.js +12 -0
  85. package/dist/cdn/components/reaction-bar.js +2 -0
  86. package/dist/cdn/components/reader-view.js +3 -3
  87. package/dist/cdn/components/reading-progress.js +2 -0
  88. package/dist/cdn/components/recently-visited.js +26 -2
  89. package/dist/cdn/components/requirement-card.js +122 -0
  90. package/dist/cdn/components/review-surface.js +34 -40
  91. package/dist/cdn/components/risk-register.js +25 -0
  92. package/dist/cdn/components/roadmap.js +3 -0
  93. package/dist/cdn/components/score-card.js +197 -0
  94. package/dist/cdn/components/selection-menu.js +1 -1
  95. package/dist/cdn/components/semantic-palette.js +15 -15
  96. package/dist/cdn/components/settings-panel.js +12 -12
  97. package/dist/cdn/components/share-wc.js +2 -2
  98. package/dist/cdn/components/short-cuts.js +1 -1
  99. package/dist/cdn/components/site-index.js +4 -4
  100. package/dist/cdn/components/site-map-wc.js +1 -1
  101. package/dist/cdn/components/site-map.js +1 -1
  102. package/dist/cdn/components/site-search.js +9 -9
  103. package/dist/cdn/components/slide-accept.js +1 -1
  104. package/dist/cdn/components/social-embed.js +1 -1
  105. package/dist/cdn/components/spacing-specimen.js +5 -5
  106. package/dist/cdn/components/split-surface.js +1 -1
  107. package/dist/cdn/components/star-rating.js +1 -1
  108. package/dist/cdn/components/status-wc.js +2 -0
  109. package/dist/cdn/components/stepper-wc.js +2 -0
  110. package/dist/cdn/components/story-map.js +1 -1
  111. package/dist/cdn/components/tab-set.js +1 -1
  112. package/dist/cdn/components/text-reader.js +2 -2
  113. package/dist/cdn/components/theme-catalog.js +28 -0
  114. package/dist/cdn/components/theme-export.js +20 -12
  115. package/dist/cdn/components/theme-import.js +44 -0
  116. package/dist/cdn/components/theme-picker.js +31 -28
  117. package/dist/cdn/components/time-index.js +2 -2
  118. package/dist/cdn/components/time-picker.js +1 -1
  119. package/dist/cdn/components/toast-msg.js +3 -3
  120. package/dist/cdn/components/token-specimen.js +14 -14
  121. package/dist/cdn/components/tool-tip.js +1 -1
  122. package/dist/cdn/components/topic-map.js +3 -2
  123. package/dist/cdn/components/traceability-matrix.js +3 -0
  124. package/dist/cdn/components/trust-filter.js +3 -3
  125. package/dist/cdn/components/type-specimen.js +15 -15
  126. package/dist/cdn/components/user-journey.js +63 -70
  127. package/dist/cdn/components/user-persona.js +75 -13
  128. package/dist/cdn/components/user-story.js +13 -12
  129. package/dist/cdn/components/version-switcher.js +17 -0
  130. package/dist/cdn/components/video-player.js +4 -4
  131. package/dist/cdn/components/watch-wc.js +2 -2
  132. package/dist/cdn/components/week-view.js +1 -1
  133. package/dist/cdn/components/work-item.js +29 -28
  134. package/dist/cdn/components/youtube-player.js +1 -1
  135. package/dist/cdn/packs/design-system.full.js +59 -51
  136. package/dist/cdn/packs/effects.full.js +1 -1
  137. package/dist/cdn/packs/icons.effects.js +1 -1
  138. package/dist/cdn/packs/icons.full.js +1 -1
  139. package/dist/cdn/packs/kawaii.full.css +1 -1
  140. package/dist/cdn/packs/kawaii.full.js +6 -6
  141. package/dist/cdn/packs/kawaii.theme.css +1 -1
  142. package/dist/cdn/packs/manifest.json +11 -11
  143. package/dist/cdn/packs/ui.full.css +1 -1
  144. package/dist/cdn/packs/ui.full.js +54 -51
  145. package/dist/cdn/packs/ux-planning.full.css +1 -1
  146. package/dist/cdn/packs/ux-planning.full.js +324 -248
  147. package/dist/cdn/themes/8bit.css +1 -1
  148. package/dist/cdn/themes/8bit.tokens.json +662 -0
  149. package/dist/cdn/themes/alpha1999-dark.tokens.json +693 -0
  150. package/dist/cdn/themes/alpha1999.css +1 -1
  151. package/dist/cdn/themes/alpha1999.tokens.json +869 -0
  152. package/dist/cdn/themes/anthropic.css +2 -0
  153. package/dist/cdn/themes/anthropic.tokens.json +564 -0
  154. package/dist/cdn/themes/art-deco-dark.tokens.json +407 -0
  155. package/dist/cdn/themes/art-deco.css +1 -1
  156. package/dist/cdn/themes/art-deco.tokens.json +581 -0
  157. package/dist/cdn/themes/bauhaus-dark.tokens.json +260 -0
  158. package/dist/cdn/themes/bauhaus.css +1 -1
  159. package/dist/cdn/themes/bauhaus.tokens.json +589 -0
  160. package/dist/cdn/themes/brutalist-dark.tokens.json +503 -0
  161. package/dist/cdn/themes/brutalist.tokens.json +677 -0
  162. package/dist/cdn/themes/catalog/atlassian.tokens.json +303 -0
  163. package/dist/cdn/themes/catalog/bootstrap.tokens.json +304 -0
  164. package/dist/cdn/themes/catalog/carbon.tokens.json +301 -0
  165. package/dist/cdn/themes/catalog/catppuccin-mocha.tokens.json +301 -0
  166. package/dist/cdn/themes/catalog/govuk.tokens.json +301 -0
  167. package/dist/cdn/themes/catalog/manifest.json +132 -0
  168. package/dist/cdn/themes/catalog/material.tokens.json +289 -0
  169. package/dist/cdn/themes/catalog/salesforce.tokens.json +301 -0
  170. package/dist/cdn/themes/catalog/tailwind.tokens.json +302 -0
  171. package/dist/cdn/themes/catppuccin-frappe.css +1 -1
  172. package/dist/cdn/themes/catppuccin-frappe.tokens.json +608 -0
  173. package/dist/cdn/themes/catppuccin-latte-dark.tokens.json +472 -0
  174. package/dist/cdn/themes/catppuccin-latte.css +1 -1
  175. package/dist/cdn/themes/catppuccin-latte.tokens.json +608 -0
  176. package/dist/cdn/themes/catppuccin-macchiato.css +1 -1
  177. package/dist/cdn/themes/catppuccin-macchiato.tokens.json +608 -0
  178. package/dist/cdn/themes/catppuccin-mocha.tokens.json +608 -0
  179. package/dist/cdn/themes/classic-dark.tokens.json +503 -0
  180. package/dist/cdn/themes/classic.tokens.json +640 -0
  181. package/dist/cdn/themes/claymorphism-dark.tokens.json +493 -0
  182. package/dist/cdn/themes/claymorphism.css +1 -1
  183. package/dist/cdn/themes/claymorphism.tokens.json +626 -0
  184. package/dist/cdn/themes/clinical-dark.tokens.json +472 -0
  185. package/dist/cdn/themes/clinical.tokens.json +608 -0
  186. package/dist/cdn/themes/cottagecore-dark.tokens.json +412 -0
  187. package/dist/cdn/themes/cottagecore.css +1 -1
  188. package/dist/cdn/themes/cottagecore.tokens.json +544 -0
  189. package/dist/cdn/themes/cyber.tokens.json +668 -0
  190. package/dist/cdn/themes/dawn-dark.tokens.json +472 -0
  191. package/dist/cdn/themes/dawn.css +1 -1
  192. package/dist/cdn/themes/dawn.tokens.json +608 -0
  193. package/dist/cdn/themes/dracula.tokens.json +534 -0
  194. package/dist/cdn/themes/dusk.tokens.json +533 -0
  195. package/dist/cdn/themes/editorial-dark.tokens.json +400 -0
  196. package/dist/cdn/themes/editorial.tokens.json +690 -0
  197. package/dist/cdn/themes/financial-dark.tokens.json +472 -0
  198. package/dist/cdn/themes/financial.css +1 -1
  199. package/dist/cdn/themes/financial.tokens.json +607 -0
  200. package/dist/cdn/themes/genai.tokens.json +534 -0
  201. package/dist/cdn/themes/glassmorphism-dark.tokens.json +489 -0
  202. package/dist/cdn/themes/glassmorphism.css +1 -1
  203. package/dist/cdn/themes/glassmorphism.tokens.json +632 -0
  204. package/dist/cdn/themes/government-dark.tokens.json +472 -0
  205. package/dist/cdn/themes/government.tokens.json +608 -0
  206. package/dist/cdn/themes/gruvbox-dark.tokens.json +472 -0
  207. package/dist/cdn/themes/gruvbox.tokens.json +608 -0
  208. package/dist/cdn/themes/high-noon-dark.tokens.json +397 -0
  209. package/dist/cdn/themes/high-noon.tokens.json +533 -0
  210. package/dist/cdn/themes/ibm.css +2 -0
  211. package/dist/cdn/themes/ibm.tokens.json +568 -0
  212. package/dist/cdn/themes/kawaii-dark.tokens.json +549 -0
  213. package/dist/cdn/themes/kawaii.css +1 -1
  214. package/dist/cdn/themes/kawaii.tokens.json +641 -0
  215. package/dist/cdn/themes/magna-dark.tokens.json +482 -0
  216. package/dist/cdn/themes/magna.css +1 -1
  217. package/dist/cdn/themes/magna.tokens.json +632 -0
  218. package/dist/cdn/themes/manifest.json +162 -62
  219. package/dist/cdn/themes/mcdonalds.css +2 -0
  220. package/dist/cdn/themes/mcdonalds.tokens.json +533 -0
  221. package/dist/cdn/themes/midnight.tokens.json +534 -0
  222. package/dist/cdn/themes/minimal-dark.tokens.json +294 -0
  223. package/dist/cdn/themes/minimal.tokens.json +494 -0
  224. package/dist/cdn/themes/modern-dark.tokens.json +490 -0
  225. package/dist/cdn/themes/modern.tokens.json +573 -0
  226. package/dist/cdn/themes/nes-dark.tokens.json +564 -0
  227. package/dist/cdn/themes/nes.css +1 -1
  228. package/dist/cdn/themes/nes.tokens.json +687 -0
  229. package/dist/cdn/themes/neumorphism-dark.tokens.json +471 -0
  230. package/dist/cdn/themes/neumorphism.css +1 -1
  231. package/dist/cdn/themes/neumorphism.tokens.json +589 -0
  232. package/dist/cdn/themes/nord-dark.tokens.json +484 -0
  233. package/dist/cdn/themes/nord.tokens.json +619 -0
  234. package/dist/cdn/themes/organic-dark.tokens.json +532 -0
  235. package/dist/cdn/themes/organic.tokens.json +685 -0
  236. package/dist/cdn/themes/rose-pine-dark.tokens.json +472 -0
  237. package/dist/cdn/themes/rose-pine.tokens.json +608 -0
  238. package/dist/cdn/themes/rough-dark.tokens.json +515 -0
  239. package/dist/cdn/themes/rough.css +1 -1
  240. package/dist/cdn/themes/rough.tokens.json +650 -0
  241. package/dist/cdn/themes/solarized-dark.tokens.json +397 -0
  242. package/dist/cdn/themes/solarized.tokens.json +532 -0
  243. package/dist/cdn/themes/starbucks.css +2 -0
  244. package/dist/cdn/themes/starbucks.tokens.json +593 -0
  245. package/dist/cdn/themes/startup-dark.tokens.json +522 -0
  246. package/dist/cdn/themes/startup.css +1 -1
  247. package/dist/cdn/themes/startup.tokens.json +607 -0
  248. package/dist/cdn/themes/super2026-dark.tokens.json +667 -0
  249. package/dist/cdn/themes/super2026.tokens.json +863 -0
  250. package/dist/cdn/themes/swiss-dark.tokens.json +390 -0
  251. package/dist/cdn/themes/swiss.tokens.json +750 -0
  252. package/dist/cdn/themes/terminal.css +1 -1
  253. package/dist/cdn/themes/terminal.tokens.json +689 -0
  254. package/dist/cdn/themes/tokyo-night-dark.tokens.json +472 -0
  255. package/dist/cdn/themes/tokyo-night.tokens.json +608 -0
  256. package/dist/cdn/themes/vaporwave-dark.tokens.json +413 -0
  257. package/dist/cdn/themes/vaporwave.tokens.json +549 -0
  258. package/dist/cdn/themes/win9x-dark.tokens.json +563 -0
  259. package/dist/cdn/themes/win9x.tokens.json +700 -0
  260. package/dist/cdn/vanilla-breeze-charts.css +1 -1
  261. package/dist/cdn/vanilla-breeze-charts.js +58 -36
  262. package/dist/cdn/vanilla-breeze-core.css +1 -1
  263. package/dist/cdn/vanilla-breeze-core.js +246 -51
  264. package/dist/cdn/vanilla-breeze-dev.js +1 -1
  265. package/dist/cdn/vanilla-breeze-extras.js +90 -80
  266. package/dist/cdn/vanilla-breeze.css +1 -1
  267. package/dist/cdn/vanilla-breeze.js +1395 -405
  268. package/package.json +14 -4
@@ -0,0 +1,11 @@
1
+ var k=window.matchMedia("(prefers-reduced-motion: reduce)");var b=new Map;function y(s,t,n={}){let e=n.priority??10,r={impl:t,bundle:n.bundle,contract:n.contract,priority:e},a=b.get(s);if(customElements.get(s)){if(!a||a.priority>=e){a&&a.priority===e&&a.impl!==t&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${a.bundle}" (priority ${a.priority}). Skipping "${n.bundle}".`);return}console.warn(`[VB Bundle] Tag <${s}> defined by "${a.bundle}" cannot be replaced (customElements.define is permanent). "${n.bundle}" has higher priority but arrived late.`);return}if(a&&a.priority>=e){a.priority===e&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${a.bundle}". Skipping "${n.bundle}" (first wins at equal priority).`);return}b.set(s,r),customElements.define(s,t)}var u=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 t of this.#t)t();this.#t=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,n,e,r){t.addEventListener(n,e,r),this.#t.push(()=>t.removeEventListener(n,e,r))}setup(){}teardown(){}setState(t,n){this.#e||(this.#e=this.attachInternals());let e=this.#e.states;try{n?e.add(t):e.delete(t)}catch{let r=`--${t}`;n?e.add(r):e.delete(r)}}_adoptInternals(t){this.#e||(this.#e=t)}};function g(s){let t=String(s||"").trim();if(!t)return null;let n=t.match(/^#([0-9a-f]{3,8})$/i);if(n){let e=n[1];if(e.length===3)return[parseInt(e[0]+e[0],16),parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16)];if(e.length===4)return[parseInt(e[0]+e[0],16),parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16)];if(e.length===6)return[parseInt(e.slice(0,2),16),parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16)];if(e.length===8)return[parseInt(e.slice(0,2),16),parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16)]}if(n=t.match(/^rgba?\s*\(\s*([0-9.]+)[\s,]+([0-9.]+)[\s,]+([0-9.]+)/i),n)return[Math.round(+n[1]),Math.round(+n[2]),Math.round(+n[3])];if(typeof document<"u"){let e=document.createElement("span");e.style.color=t,e.style.display="none",document.body.appendChild(e);let r=getComputedStyle(e).color;e.remove();let a=r.match(/^rgba?\s*\(\s*([0-9.]+)[\s,]+([0-9.]+)[\s,]+([0-9.]+)/i);if(a)return[Math.round(+a[1]),Math.round(+a[2]),Math.round(+a[3])]}return null}function f(s){let t=s/255;return t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4)}function E([s,t,n]){return .2126*f(s)+.7152*f(t)+.0722*f(n)}function $(s,t){let n=g(s),e=g(t);if(!n||!e)return null;let r=E(n),a=E(e),o=Math.max(r,a),c=Math.min(r,a);return(o+.05)/(c+.05)}function M(s){return s==null?{aaNormal:!1,aaLarge:!1,aaaNormal:!1,aaaLarge:!1}:{aaNormal:s>=4.5,aaLarge:s>=3,aaaNormal:s>=7,aaaLarge:s>=4.5}}var m=class extends u{static observedAttributes=["type"];setup(){(this.getAttribute("type")||"contrast")==="checklist"?this.#n():this.#t()}attributeChangedCallback(t,n,e){!this.isConnected||n===e||this.setup()}#t(){let t=[...this.querySelectorAll(":scope > button[data-fg][data-bg]")].map(a=>({fg:a.dataset.fg,bg:a.dataset.bg,label:a.dataset.label||a.textContent.trim()||`${a.dataset.fg} on ${a.dataset.bg}`})),n=document.createElement("table");n.className="as-contrast-table";let e=document.createElement("thead");e.innerHTML=`
2
+ <tr>
3
+ <th scope="col">Pair</th>
4
+ <th scope="col">Sample</th>
5
+ <th scope="col">Ratio</th>
6
+ <th scope="col">AA</th>
7
+ <th scope="col">AA Large</th>
8
+ <th scope="col">AAA</th>
9
+ <th scope="col">AAA Large</th>
10
+ </tr>`,n.appendChild(e);let r=document.createElement("tbody");if(t.length===0){let a=document.createElement("tr"),o=document.createElement("td");o.colSpan=7,o.className="as-empty",o.textContent='No color pairs authored. Add <button data-fg="\u2026" data-bg="\u2026">Label</button> children.',a.appendChild(o),r.appendChild(a)}else for(let a of t)r.appendChild(this.#e(a));n.appendChild(r),this.replaceChildren(n)}#e({fg:t,bg:n,label:e}){let r=$(t,n),a=M(r),o=r==null?"?":`${r.toFixed(2)}:1`,c=document.createElement("tr"),i=document.createElement("th");i.scope="row",i.className="as-pair-label",i.innerHTML=`<span class="as-swatch" style="background:${n};border-color:${t}"></span><span>${N(e)}</span>`,c.appendChild(i);let l=document.createElement("td");l.className="as-pair-sample",l.style.background=n,l.style.color=t,l.textContent="Aa Bb 123",c.appendChild(l);let p=document.createElement("td");p.className="as-pair-ratio",p.textContent=o,c.appendChild(p);for(let C of["aaNormal","aaLarge","aaaNormal","aaaLarge"]){let d=document.createElement("td"),h=a[C];d.className=`as-badge ${h?"as-pass":"as-fail"}`,d.textContent=h?"\u2713":"\u2717",d.setAttribute("aria-label",h?"Pass":"Fail"),c.appendChild(d)}return c}#n(){let t=this.querySelector(":scope > ul, :scope > ol");if(t){t.classList.add("as-checklist");for(let n of t.querySelectorAll(":scope > li"))this.#a(n)}}#a(t){if(t.dataset.decorated==="")return;t.dataset.decorated="";let n=t.dataset.status||"na";t.classList.add(`as-status-${n}`);let e=document.createElement("span");e.className="as-checklist-icon",e.setAttribute("aria-hidden","true"),e.textContent={pass:"\u2713",fail:"\u2717",warn:"!",na:"\u2013"}[n]||"\u2013";let r={pass:"Pass",fail:"Fail",warn:"Warning",na:"Not applicable"}[n]||"Not applicable",a=document.createElement("span");a.className="as-sr-only",a.textContent=`${r}: `,t.prepend(e,a)}};function N(s){return String(s).replace(/[&<>"']/g,t=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[t])}y("accessibility-specimen",m);export{m as AccessibilitySpecimen};
11
+ //# sourceMappingURL=accessibility-specimen.js.map
@@ -1,2 +1,2 @@
1
- function o(i){return document.startViewTransition?document.startViewTransition(i):i()}var p=window.matchMedia("(prefers-reduced-motion: reduce)");var u=new Map;function d(i,e,r={}){let n=r.priority??10,t={impl:e,bundle:r.bundle,contract:r.contract,priority:n},s=u.get(i);if(customElements.get(i)){if(!s||s.priority>=n){s&&s.priority===n&&s.impl!==e&&console.warn(`[VB Bundle] Tag <${i}> already registered by "${s.bundle}" (priority ${s.priority}). Skipping "${r.bundle}".`);return}console.warn(`[VB Bundle] Tag <${i}> defined by "${s.bundle}" cannot be replaced (customElements.define is permanent). "${r.bundle}" has higher priority but arrived late.`);return}if(s&&s.priority>=n){s.priority===n&&console.warn(`[VB Bundle] Tag <${i}> already registered by "${s.bundle}". Skipping "${r.bundle}" (first wins at equal priority).`);return}u.set(i,t),customElements.define(i,e)}var a=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,r,n,t){e.addEventListener(r,n,t),this.#e.push(()=>e.removeEventListener(r,n,t))}setup(){}teardown(){}};var h=0,c=class extends a{#e=[];#t=[];#n=[];#r=!1;setup(){if(this.#e=[...this.querySelectorAll(":scope > details")],this.#t=this.#e.map(e=>e.querySelector("summary")),this.#e.length===0)return!1;this.#i(),this.#a(),this.#o()}teardown(){this.#e=[],this.#t=[],this.#n=[],this.#r=!1}#i(){this.#n=this.#e.map(e=>{let r=e.querySelector("summary");if(!r)return null;let n=[...e.children].filter(t=>t!==r);if(n.length===1)return n[0];if(n.length>1){let t=document.createElement("div");for(let s of n)t.appendChild(s);return e.appendChild(t),t}return null})}#o(){if(!this.hasAttribute("transition")||!document.startViewTransition)return;this.#r=!0;let e=++h,r=this.getAttribute("transition")||"fade",n=r==="slide"?"vt-accordion-slide":r==="scale"?"vt-accordion-scale":"vt-accordion";this.#n.forEach((t,s)=>{t&&(t.style.viewTransitionName=`accordion-${e}-${s}`,t.style.viewTransitionClass=n)})}#s(e){o(()=>{e.open=!e.open})}#a(){this.#e.forEach((e,r)=>{let n=this.#t[r],t=this.#n[r];if(n){if(t){let s=n.id||`accordion-heading-${crypto.randomUUID().slice(0,8)}`,l=t.id||`accordion-panel-${crypto.randomUUID().slice(0,8)}`;n.id=s,t.id=l,n.setAttribute("aria-expanded",e.open?"true":"false"),n.setAttribute("aria-controls",l),t.setAttribute("aria-labelledby",s),t.setAttribute("role","region")}else n.setAttribute("aria-expanded",e.open?"true":"false");this.listen(n,"click",s=>{this.#r&&(s.preventDefault(),this.#s(e))}),this.listen(n,"keydown",s=>this.#l(s,r)),this.listen(e,"toggle",()=>this.#c(e,r))}})}#c(e,r){this.#t[r].setAttribute("aria-expanded",e.open?"true":"false"),this.hasAttribute("single")&&e.open&&this.#e.forEach((t,s)=>{s!==r&&t.open&&(t.open=!1,this.#t[s].setAttribute("aria-expanded","false"))}),this.dispatchEvent(new CustomEvent("accordion-wc:toggle",{detail:{index:r,open:e.open},bubbles:!0}))}#l(e,r){let{key:n}=e,t;switch(n){case"ArrowDown":t=(r+1)%this.#e.length;break;case"ArrowUp":t=(r-1+this.#e.length)%this.#e.length;break;case"Home":t=0;break;case"End":t=this.#e.length-1;break;default:return}e.preventDefault(),this.#t[t].focus()}open(e){e<0||e>=this.#e.length||(this.#r&&!this.#e[e].open?o(()=>{this.#e[e].open=!0}):this.#e[e].open=!0)}close(e){e<0||e>=this.#e.length||(this.#r&&this.#e[e].open?o(()=>{this.#e[e].open=!1}):this.#e[e].open=!1)}toggle(e){e<0||e>=this.#e.length||(this.#r?this.#s(this.#e[e]):this.#e[e].open=!this.#e[e].open)}openAll(){this.hasAttribute("single")||this.#e.forEach(e=>{e.open=!0})}closeAll(){this.#e.forEach(e=>{e.open=!1})}};d("accordion-wc",c);export{c as AccordionWc};
1
+ function a(i){return document.startViewTransition?document.startViewTransition(i):i()}var b=window.matchMedia("(prefers-reduced-motion: reduce)");var h=new Map;function f(i,e,t={}){let n=t.priority??10,s={impl:e,bundle:t.bundle,contract:t.contract,priority:n},r=h.get(i);if(customElements.get(i)){if(!r||r.priority>=n){r&&r.priority===n&&r.impl!==e&&console.warn(`[VB Bundle] Tag <${i}> already registered by "${r.bundle}" (priority ${r.priority}). Skipping "${t.bundle}".`);return}console.warn(`[VB Bundle] Tag <${i}> 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 <${i}> already registered by "${r.bundle}". Skipping "${t.bundle}" (first wins at equal priority).`);return}h.set(i,s),customElements.define(i,e)}var c=class extends HTMLElement{#e=[];#t;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.#e)e();this.#e=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(e,t,n,s){e.addEventListener(t,n,s),this.#e.push(()=>e.removeEventListener(t,n,s))}setup(){}teardown(){}setState(e,t){this.#t||(this.#t=this.attachInternals());let n=this.#t.states;try{t?n.add(e):n.delete(e)}catch{let s=`--${e}`;t?n.add(s):n.delete(s)}}_adoptInternals(e){this.#t||(this.#t=e)}};var p=0,l=class extends c{#e=[];#t=[];#n=[];#s=!1;setup(){return this.#e=[...this.querySelectorAll(":scope > details")],this.#t=this.#e.map(e=>e.querySelector("summary")),this.#e.length===0?!1:(this.#i(),this.#a(),this.#o(),!0)}teardown(){this.#e=[],this.#t=[],this.#n=[],this.#s=!1}get panels(){return this.#e.map((e,t)=>({id:e.id||void 0,summary:e.querySelector("summary")?.textContent?.trim()||`Panel ${t+1}`,content:this.#n[t]?.innerHTML||"",open:e.hasAttribute("open")}))}set panels(e){let t=Array.isArray(e)?e:[],s=this.hasAttribute("single")?`acc-${++p}`:null;for(;this.firstChild;)this.firstChild.remove();for(let r of t){let o=document.createElement("details");r.id&&(o.id=r.id),r.open&&o.setAttribute("open",""),s&&o.setAttribute("name",s);let u=document.createElement("summary");u.textContent=r.summary||"",o.appendChild(u);let d=document.createElement("div");d.innerHTML=r.content||"",o.appendChild(d),this.appendChild(o)}this.teardown(),this.removeAttribute("data-upgraded"),this.setup(),this.dispatchEvent(new CustomEvent("accordion-wc:panels-changed",{detail:{panels:t,source:"property"},bubbles:!0}))}#i(){this.#n=this.#e.map(e=>{let t=e.querySelector("summary");if(!t)return null;let n=[...e.children].filter(s=>s!==t);if(n.length===1)return n[0];if(n.length>1){let s=document.createElement("div");for(let r of n)s.appendChild(r);return e.appendChild(s),s}return null})}#o(){if(!this.hasAttribute("transition")||!document.startViewTransition)return;this.#s=!0;let e=++p,t=this.getAttribute("transition")||"fade",n=t==="slide"?"vt-accordion-slide":t==="scale"?"vt-accordion-scale":"vt-accordion";this.#n.forEach((s,r)=>{s&&(s.style.viewTransitionName=`accordion-${e}-${r}`,s.style.viewTransitionClass=n)})}#r(e){a(()=>{e.open=!e.open})}#a(){this.#e.forEach((e,t)=>{let n=this.#t[t],s=this.#n[t];if(n){if(s){let r=n.id||`accordion-heading-${crypto.randomUUID().slice(0,8)}`,o=s.id||`accordion-panel-${crypto.randomUUID().slice(0,8)}`;n.id=r,s.id=o,n.setAttribute("aria-expanded",e.open?"true":"false"),n.setAttribute("aria-controls",o),s.setAttribute("aria-labelledby",r),s.setAttribute("role","region")}else n.setAttribute("aria-expanded",e.open?"true":"false");this.listen(n,"click",r=>{this.#s&&(r.preventDefault(),this.#r(e))}),this.listen(n,"keydown",r=>this.#l(r,t)),this.listen(e,"toggle",()=>this.#c(e,t))}})}#c(e,t){this.#t[t].setAttribute("aria-expanded",e.open?"true":"false"),this.hasAttribute("single")&&e.open&&this.#e.forEach((s,r)=>{r!==t&&s.open&&(s.open=!1,this.#t[r].setAttribute("aria-expanded","false"))}),this.dispatchEvent(new CustomEvent("accordion-wc:toggle",{detail:{index:t,open:e.open},bubbles:!0}))}#l(e,t){let{key:n}=e,s;switch(n){case"ArrowDown":s=(t+1)%this.#e.length;break;case"ArrowUp":s=(t-1+this.#e.length)%this.#e.length;break;case"Home":s=0;break;case"End":s=this.#e.length-1;break;default:return}e.preventDefault(),this.#t[s].focus()}open(e){e<0||e>=this.#e.length||(this.#s&&!this.#e[e].open?a(()=>{this.#e[e].open=!0}):this.#e[e].open=!0)}close(e){e<0||e>=this.#e.length||(this.#s&&this.#e[e].open?a(()=>{this.#e[e].open=!1}):this.#e[e].open=!1)}toggle(e){e<0||e>=this.#e.length||(this.#s?this.#r(this.#e[e]):this.#e[e].open=!this.#e[e].open)}openAll(){this.hasAttribute("single")||this.#e.forEach(e=>{e.open=!0})}closeAll(){this.#e.forEach(e=>{e.open=!1})}};f("accordion-wc",l);export{l as AccordionWc};
2
2
  //# sourceMappingURL=accordion-wc.js.map
@@ -0,0 +1,2 @@
1
+ var w=window.matchMedia("(prefers-reduced-motion: reduce)");var f=new Map;function m(r,t,i={}){let e=i.priority??10,a={impl:t,bundle:i.bundle,contract:i.contract,priority:e},n=f.get(r);if(customElements.get(r)){if(!n||n.priority>=e){n&&n.priority===e&&n.impl!==t&&console.warn(`[VB Bundle] Tag <${r}> already registered by "${n.bundle}" (priority ${n.priority}). Skipping "${i.bundle}".`);return}console.warn(`[VB Bundle] Tag <${r}> defined by "${n.bundle}" cannot be replaced (customElements.define is permanent). "${i.bundle}" has higher priority but arrived late.`);return}if(n&&n.priority>=e){n.priority===e&&console.warn(`[VB Bundle] Tag <${r}> already registered by "${n.bundle}". Skipping "${i.bundle}" (first wins at equal priority).`);return}f.set(r,a),customElements.define(r,t)}var d=class extends HTMLElement{#e=[];#t;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 t of this.#e)t();this.#e=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,i,e,a){t.addEventListener(i,e,a),this.#e.push(()=>t.removeEventListener(i,e,a))}setup(){}teardown(){}setState(t,i){this.#t||(this.#t=this.attachInternals());let e=this.#t.states;try{i?e.add(t):e.delete(t)}catch{let a=`--${t}`;i?e.add(a):e.delete(a)}}_adoptInternals(t){this.#t||(this.#t=t)}};function l(r){let t=(Date.now()-r.getTime())/1e3;if(t<0)return null;if(t<60)return"just now";if(t<3600){let e=Math.floor(t/60);return`${e} minute${e!==1?"s":""} ago`}if(t<86400){let e=Math.floor(t/3600);return`${e} hour${e!==1?"s":""} ago`}if(t<2592e3){let e=Math.floor(t/86400);return`${e} day${e!==1?"s":""} ago`}if(t<31536e3){let e=Math.floor(t/2592e3);return`${e} month${e!==1?"s":""} ago`}let i=Math.floor(t/31536e3);return`${i} year${i!==1?"s":""} ago`}function p(r=document){for(let t of r.querySelectorAll("time[data-relative]")){let i=t.getAttribute("datetime");if(!i)continue;let e=l(new Date(i));e&&(t.textContent=e)}}var b;function v(){p(),b||(b=setInterval(()=>p(),6e4))}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",v,{once:!0}):v();function u(r){let t=new Date(r);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")}`}function y(r){let t=new Date(r),i=(t.getDay()+6)%7,e=new Date(t);e.setDate(t.getDate()-i);let a=new Date(e);a.setDate(e.getDate()+3);let n=new Date(a.getFullYear(),0,1),s=Math.ceil(((a.getTime()-n.getTime())/864e5+1)/7);return`${a.getFullYear()}-W${String(s).padStart(2,"0")}`}function g(r){let t=u(new Date),i=u(new Date(Date.now()-864e5));if(r===t)return"Today";if(r===i)return"Yesterday";let[e,a,n]=r.split("-").map(Number);return new Date(e,a-1,n).toLocaleDateString(void 0,{weekday:"long",month:"short",day:"numeric"})}function E(r){return`Week of ${r.replace("-W",", week ")}`}var h=class extends d{#e=null;#t=null;#a=null;#r=null;#i=null;setup(){return this.hasAttribute("role")||this.setAttribute("role","feed"),this.hasAttribute("aria-label")||this.setAttribute("aria-label","Recent activity"),this.setAttribute("aria-busy","false"),this.#n().forEach(t=>this.#s(t)),this.#o(),this.#c(),this.#e=new MutationObserver(t=>{let i=!1;for(let e of t){for(let a of e.addedNodes){let n=a;a.nodeType===1&&n.matches?.("article[data-activity]")&&(this.#s(n),i=!0)}e.removedNodes.length&&(i=!0)}i&&(this.#o(),this.#c())}),this.#e.observe(this,{childList:!0}),this.#r=setInterval(()=>this.#d(),6e4),this.hasAttribute("data-infinite")&&this.#h(),this.listen(this,"keydown",this.#u),!0}teardown(){this.#r!==null&&clearInterval(this.#r),this.#e?.disconnect(),this.#a?.disconnect()}#n(){return[...this.querySelectorAll(":scope > article[data-activity]")]}#s(t){if(t.dataset.decorated==="")return;t.dataset.decorated="",t.setAttribute("tabindex","-1");let i=document.createElement("div");for(i.className="activity-body";t.firstChild;)i.appendChild(t.firstChild);t.appendChild(i);let e=t.dataset.activityAvatar,a=t.dataset.activityIcon;if(e||a){let s=document.createElement("div");if(s.className="activity-rail",s.setAttribute("aria-hidden","true"),e){let o=document.createElement("user-avatar");o.setAttribute("src",e);let c=i.querySelector("[data-activity-actor]")?.textContent||"";c&&o.setAttribute("name",c),s.appendChild(o)}else{let o=document.createElement("icon-wc");o.setAttribute("name",a),s.appendChild(o)}t.prepend(s)}let n=t.dataset.time;if(n){let s=document.createElement("time");s.className="activity-time",s.setAttribute("datetime",n),s.setAttribute("title",this.#l(n)),s.textContent=l(new Date(n))||n,t.appendChild(s)}}#d(){for(let t of this.querySelectorAll(":scope > article[data-activity] > time.activity-time")){let i=t.getAttribute("datetime");if(!i)continue;let e=l(new Date(i));e&&(t.textContent=e)}}#l(t){try{return new Date(t).toLocaleString()}catch{return t}}#o(){this.querySelectorAll(":scope > [data-activity-heading]").forEach(n=>n.remove());let t=this.#n(),i=t.length,e=this.getAttribute("data-group")||"none",a=null;t.forEach((n,s)=>{if(n.setAttribute("aria-posinset",String(s+1)),n.setAttribute("aria-setsize",String(i)),e!=="none"&&n.dataset.time){let o=e==="week"?y(n.dataset.time):u(n.dataset.time);if(o!==a){let c=document.createElement("h3");c.setAttribute("data-activity-heading",""),c.setAttribute("role","heading"),c.setAttribute("aria-level","3"),c.className="activity-heading",c.textContent=e==="week"?E(o):g(o),this.insertBefore(c,n),a=o}}})}#c(){this.#n().length===0?this.#i||(this.#i=document.createElement("p"),this.#i.className="activity-empty",this.#i.textContent=this.getAttribute("data-empty-text")||"No recent activity",this.appendChild(this.#i)):(this.#i?.remove(),this.#i=null)}#u=t=>{let i=this.#n(),e=document.activeElement,a=e?i.indexOf(e):-1;if(a===-1)return;let n=a;switch(t.key){case"ArrowDown":t.preventDefault(),n=Math.min(i.length-1,a+1);break;case"ArrowUp":t.preventDefault(),n=Math.max(0,a-1);break;case"PageDown":t.preventDefault(),n=Math.min(i.length-1,a+5);break;case"PageUp":t.preventDefault(),n=Math.max(0,a-5);break;case"Home":t.preventDefault(),n=0;break;case"End":t.preventDefault(),n=i.length-1;break;default:return}i[n]?.focus()};#h(){"IntersectionObserver"in window&&(this.#t=document.createElement("div"),this.#t.className="activity-sentinel",this.#t.setAttribute("aria-hidden","true"),this.appendChild(this.#t),this.#a=new IntersectionObserver(t=>{for(let i of t)i.isIntersecting&&this.dispatchEvent(new CustomEvent("activity-feed:load-more",{bubbles:!0}))},{rootMargin:"200px"}),this.#a.observe(this.#t))}addEntry(t,i={}){let e=document.createElement("article");if(e.setAttribute("data-activity",""),e.dataset.time=t.time,t.avatar&&(e.dataset.activityAvatar=t.avatar),t.icon&&(e.dataset.activityIcon=t.icon),e.innerHTML=t.html,i.prepend){let a=this.#n()[0];a?this.insertBefore(e,a):this.appendChild(e)}else this.#t?this.insertBefore(e,this.#t):this.appendChild(e);return e}removeEntry(t){t?.matches?.("article[data-activity]")&&t.remove()}clear(){this.#n().forEach(t=>t.remove())}get entries(){return this.#n()}};m("activity-feed",h);export{h as ActivityFeed};
2
+ //# sourceMappingURL=activity-feed.js.map
@@ -1,4 +1,4 @@
1
- var c=`
1
+ var l=`
2
2
  :host {
3
3
  --_bg: var(--adr-wc-bg, var(--color-surface, #ffffff));
4
4
  --_text: var(--adr-wc-text, var(--color-text, #1a1a1a));
@@ -207,12 +207,12 @@ var c=`
207
207
  .adr-section-icon svg {
208
208
  width: 13px;
209
209
  height: 13px;
210
- fill: white;
210
+ fill: var(--color-text-inverted, #fff);
211
211
  }
212
212
 
213
- .adr-section-icon.context { background: #8b5cf6; }
214
- .adr-section-icon.decision { background: #22c55e; }
215
- .adr-section-icon.consequences { background: #f59e0b; }
213
+ .adr-section-icon.context { background: var(--color-accent, #8b5cf6); }
214
+ .adr-section-icon.decision { background: var(--color-success, #22c55e); }
215
+ .adr-section-icon.consequences { background: var(--color-warning, #f59e0b); }
216
216
 
217
217
  .adr-section-title {
218
218
  font-size: var(--_font-xs);
@@ -323,9 +323,9 @@ var c=`
323
323
  }
324
324
 
325
325
  .state-msg { padding: var(--_space-m); font-size: var(--_font-sm); color: var(--_muted); font-style: italic; }
326
- .state-msg--error { color: #dc2626; }
327
- `;var g=window.matchMedia("(prefers-reduced-motion: reduce)");var m=new Map;function f(o,t,r={}){let e=r.priority??10,s={impl:t,bundle:r.bundle,contract:r.contract,priority:e},a=m.get(o);if(customElements.get(o)){if(!a||a.priority>=e){a&&a.priority===e&&a.impl!==t&&console.warn(`[VB Bundle] Tag <${o}> already registered by "${a.bundle}" (priority ${a.priority}). Skipping "${r.bundle}".`);return}console.warn(`[VB Bundle] Tag <${o}> defined by "${a.bundle}" cannot be replaced (customElements.define is permanent). "${r.bundle}" has higher priority but arrived late.`);return}if(a&&a.priority>=e){a.priority===e&&console.warn(`[VB Bundle] Tag <${o}> already registered by "${a.bundle}". Skipping "${r.bundle}" (first wins at equal priority).`);return}m.set(o,s),customElements.define(o,t)}function i(o){return String(o).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function d(o){return`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${o}</svg>`}var p={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"/>'},y={says:{label:"Says",icon:p.messageCircle,color:"#3b82f6"},thinks:{label:"Thinks",icon:p.lightbulb,color:"#8b5cf6"},does:{label:"Does",icon:p.wrench,color:"#f59e0b"},feels:{label:"Feels",icon:p.heart,color:"#ef4444"}};var v={proposed:{label:"Proposed",color:"#3b82f6",bg:"rgba(59, 130, 246, 0.1)"},accepted:{label:"Accepted",color:"#22c55e",bg:"rgba(34, 197, 94, 0.1)"},deprecated:{label:"Deprecated",color:"#f59e0b",bg:"rgba(245, 158, 11, 0.1)"},superseded:{label:"Superseded",color:"#6b7280",bg:"rgba(107, 114, 128, 0.1)"}},n={calendar:'<rect width="18" height="18" x="3" y="4" rx="2" ry="2"/><line x1="16" x2="16" y1="2" y2="6"/><line x1="8" x2="8" y1="2" y2="6"/><line x1="3" x2="21" y1="10" y2="10"/>',context:'<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" x2="8" y1="13" y2="13"/><line x1="16" x2="8" y1="17" y2="17"/><line x1="10" x2="8" y1="9" y2="9"/>',decision:'<path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><path d="m9 11 3 3L22 4"/>',consequences:'<path d="m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z"/><path d="m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z"/><path d="M7 21h10"/><path d="M12 3v18"/><path d="M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2"/>',arrowRight:'<path d="M5 12h14"/><path d="m12 5 7 7-7 7"/>'},h=class extends HTMLElement{static get observedAttributes(){return["adr-id","status","supersedes","superseded-by","detail","compact","src"]}#e=new Map;constructor(){super(),this.attachShadow({mode:"open"})}#a(){for(let t of[...this.children]){let r=t.getAttribute("slot");r&&this.#e.set(r,t.textContent.trim())}}connectedCallback(){this.#a(),this.adrId&&!this.id&&(this.id=this.adrId),this.hasAttribute("src")&&this._loadSrc(this.getAttribute("src")),this.#t(),this.setAttribute("data-upgraded","")}disconnectedCallback(){this.removeAttribute("data-upgraded")}attributeChangedCallback(t,r,e){r!==e&&this.shadowRoot&&(t==="src"&&this.isConnected?this._loadSrc(e):this.#t())}get adrId(){return this.getAttribute("adr-id")||""}get status(){return this.getAttribute("status")||"proposed"}get adrTitle(){return this.querySelector('[slot="title"]')?.textContent?.trim()||this.#e.get("title")||""}get adrDate(){let t=this.querySelector('[slot="date"]');return t?.getAttribute("datetime")||t?.textContent?.trim()||this.#e.get("date")||""}get supersedes(){let t=this.getAttribute("supersedes")||"";return t?t.split(",").map(r=>r.trim()).filter(Boolean):[]}get supersededBy(){let t=this.getAttribute("superseded-by")||"";return t?t.split(",").map(r=>r.trim()).filter(Boolean):[]}get _detailLevel(){return this.getAttribute("detail")?this.getAttribute("detail"):this.hasAttribute("compact")?"compact":"full"}get _minimalLabel(){return this.adrTitle||this.adrId||"ADR"}async _loadSrc(t){if(t){this.shadowRoot.innerHTML=`<style>${c}</style><div class="state-msg">Loading\u2026</div>`;try{let r=await fetch(t);if(!r.ok)throw new Error(`HTTP ${r.status}`);let e=await r.json();if(e.adrId!=null&&this.setAttribute("adr-id",String(e.adrId)),e.status!=null&&this.setAttribute("status",String(e.status)),e.detail!=null&&this.setAttribute("detail",String(e.detail)),e.supersedes&&this.setAttribute("supersedes",Array.isArray(e.supersedes)?e.supersedes.join(","):e.supersedes),e.supersededBy&&this.setAttribute("superseded-by",Array.isArray(e.supersededBy)?e.supersededBy.join(","):e.supersededBy),e.title&&!this.querySelector('[slot="title"]')){let s=document.createElement("h3");s.slot="title",s.textContent=e.title,this.appendChild(s)}if(e.date&&!this.querySelector('[slot="date"]')){let s=document.createElement("time");s.slot="date",s.setAttribute("datetime",e.date),s.textContent=new Date(e.date).toLocaleDateString(void 0,{year:"numeric",month:"long",day:"numeric"}),this.appendChild(s)}for(let s of["context","decision"])if(e[s]&&!this.querySelector(`[slot="${s}"]`)){let a=document.createElement("p");a.slot=s,a.textContent=e[s],this.appendChild(a)}if(e.consequences&&!this.querySelector('[slot="consequences"]')){let s=document.createElement("ul");s.slot="consequences";let a=Array.isArray(e.consequences)?e.consequences:[e.consequences];for(let l of a){let u=document.createElement("li");u.textContent=l,s.appendChild(u)}this.appendChild(s)}this.#a(),this.#t()}catch(r){this.shadowRoot.innerHTML=`<style>${c}</style><div class="state-msg state-msg--error">Could not load: ${i(r.message)}</div>`}}}#t(){let t=v[this.status]||v.proposed,r=this._detailLevel,e=this.adrId?`ADR: ${i(this.adrId)}`:"Architectural Decision Record",s=!!this.querySelector('[slot="date"]')||this.#e.has("date");if(r==="minimal"){this.shadowRoot.innerHTML=`<style>${c}</style>
328
- <article class="adr-card adr-card--minimal" role="article" aria-label="${e}"
326
+ .state-msg--error { color: var(--color-error-text, var(--color-error, #dc2626)); }
327
+ `;var b=window.matchMedia("(prefers-reduced-motion: reduce)");var m=new Map;function f(s,e,t={}){let a=t.priority??10,o={impl:e,bundle:t.bundle,contract:t.contract,priority:a},r=m.get(s);if(customElements.get(s)){if(!r||r.priority>=a){r&&r.priority===a&&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>=a){r.priority===a&&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)}function i(s){return String(s).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function n(s){return`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${s}</svg>`}var p={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"/>'},y={says:{label:"Says",icon:p.messageCircle,color:"#3b82f6"},thinks:{label:"Thinks",icon:p.lightbulb,color:"#8b5cf6"},does:{label:"Does",icon:p.wrench,color:"#f59e0b"},feels:{label:"Feels",icon:p.heart,color:"#ef4444"}};var v={proposed:{label:"Proposed",color:"#3b82f6",bg:"rgba(59, 130, 246, 0.1)"},accepted:{label:"Accepted",color:"#22c55e",bg:"rgba(34, 197, 94, 0.1)"},deprecated:{label:"Deprecated",color:"#f59e0b",bg:"rgba(245, 158, 11, 0.1)"},superseded:{label:"Superseded",color:"#6b7280",bg:"rgba(107, 114, 128, 0.1)"}},c={calendar:'<rect width="18" height="18" x="3" y="4" rx="2" ry="2"/><line x1="16" x2="16" y1="2" y2="6"/><line x1="8" x2="8" y1="2" y2="6"/><line x1="3" x2="21" y1="10" y2="10"/>',context:'<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" x2="8" y1="13" y2="13"/><line x1="16" x2="8" y1="17" y2="17"/><line x1="10" x2="8" y1="9" y2="9"/>',decision:'<path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><path d="m9 11 3 3L22 4"/>',consequences:'<path d="m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z"/><path d="m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z"/><path d="M7 21h10"/><path d="M12 3v18"/><path d="M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2"/>',arrowRight:'<path d="M5 12h14"/><path d="m12 5 7 7-7 7"/>'},u=class extends HTMLElement{static get observedAttributes(){return["adr-id","status","supersedes","superseded-by","detail","compact","src"]}#e=new Map;constructor(){super(),this.attachShadow({mode:"open"})}#a(){for(let e of[...this.children]){let t=e.getAttribute("slot");t&&this.#e.set(t,e.textContent.trim())}}connectedCallback(){this.#a(),this.adrId&&!this.id&&(this.id=this.adrId),this.hasAttribute("src")&&this._loadSrc(this.getAttribute("src")),this.#t(),this.setAttribute("data-upgraded","")}disconnectedCallback(){this.removeAttribute("data-upgraded")}attributeChangedCallback(e,t,a){t!==a&&this.shadowRoot&&(e==="src"&&this.isConnected?this._loadSrc(a):this.#t())}get adrId(){return this.getAttribute("adr-id")||""}get status(){return this.getAttribute("status")||"proposed"}get adrTitle(){return this.querySelector('[slot="title"]')?.textContent?.trim()||this.#e.get("title")||""}get adrDate(){let e=this.querySelector('[slot="date"]');return e?.getAttribute("datetime")||e?.textContent?.trim()||this.#e.get("date")||""}get supersedes(){let e=this.getAttribute("supersedes")||"";return e?e.split(",").map(t=>t.trim()).filter(Boolean):[]}get supersededBy(){let e=this.getAttribute("superseded-by")||"";return e?e.split(",").map(t=>t.trim()).filter(Boolean):[]}get _detailLevel(){return this.getAttribute("detail")?this.getAttribute("detail"):this.hasAttribute("compact")?"compact":"full"}get _minimalLabel(){return this.adrTitle||this.adrId||"ADR"}get data(){return{adrId:this.adrId||void 0,status:this.status,detail:this.getAttribute("detail")||void 0,supersedes:this.supersedes.length?this.supersedes:void 0,supersededBy:this.supersededBy.length?this.supersededBy:void 0,title:this.adrTitle||void 0,date:this.adrDate||void 0}}set data(e){!e||typeof e!="object"||(this._applyData(e),this.#a(),this.shadowRoot&&this.#t(),this.dispatchEvent(new CustomEvent("adr-wc:data-changed",{detail:{data:this.data,source:"property"},bubbles:!0,composed:!0})))}_applyData(e){if(e.adrId!=null&&this.setAttribute("adr-id",String(e.adrId)),e.status!=null&&this.setAttribute("status",String(e.status)),e.detail!=null&&this.setAttribute("detail",String(e.detail)),e.supersedes&&this.setAttribute("supersedes",Array.isArray(e.supersedes)?e.supersedes.join(","):String(e.supersedes)),e.supersededBy&&this.setAttribute("superseded-by",Array.isArray(e.supersededBy)?e.supersededBy.join(","):String(e.supersededBy)),e.title&&!this.querySelector('[slot="title"]')){let t=document.createElement("h3");t.slot="title",t.textContent=String(e.title),this.appendChild(t)}if(e.date&&!this.querySelector('[slot="date"]')){let t=document.createElement("time");t.slot="date",t.setAttribute("datetime",String(e.date)),t.textContent=new Date(String(e.date)).toLocaleDateString(void 0,{year:"numeric",month:"long",day:"numeric"}),this.appendChild(t)}for(let t of["context","decision"])if(e[t]&&!this.querySelector(`[slot="${t}"]`)){let a=document.createElement("p");a.slot=t,a.textContent=String(e[t]),this.appendChild(a)}if(e.consequences&&!this.querySelector('[slot="consequences"]')){let t=document.createElement("ul");t.slot="consequences";let a=Array.isArray(e.consequences)?e.consequences:[e.consequences];for(let o of a){let r=document.createElement("li");r.textContent=String(o),t.appendChild(r)}this.appendChild(t)}}async _loadSrc(e){if(!e)return;let t=this.shadowRoot;t.innerHTML=`<style>${l}</style><div class="state-msg">Loading\u2026</div>`;try{let a=await fetch(e);if(!a.ok)throw new Error(`HTTP ${a.status}`);let o=await a.json();this._applyData(o),this.#a(),this.#t()}catch(a){t.innerHTML=`<style>${l}</style><div class="state-msg state-msg--error">Could not load: ${i(a.message)}</div>`}}#t(){let e=this.shadowRoot,t=v[this.status]||v.proposed,a=this._detailLevel,o=this.adrId?`ADR: ${i(this.adrId)}`:"Architectural Decision Record",r=!!this.querySelector('[slot="date"]')||this.#e.has("date");if(a==="minimal"){e.innerHTML=`<style>${l}</style>
328
+ <article class="adr-card adr-card--minimal" role="article" aria-label="${o}"
329
329
  tabindex="0">
330
330
  <div class="adr-body">
331
331
  <div class="adr-meta">
@@ -336,13 +336,13 @@ var c=`
336
336
  <slot name="title"><span class="adr-title-fallback">${i(this._minimalLabel)}</span></slot>
337
337
  </div>
338
338
  </div>
339
- </article>`;return}if(this.shadowRoot.innerHTML=`<style>${c}</style>
340
- <article class="adr-card adr-card--${r}" role="article" aria-label="${e}">
339
+ </article>`;return}if(e.innerHTML=`<style>${l}</style>
340
+ <article class="adr-card adr-card--${a}" role="article" aria-label="${o}">
341
341
 
342
342
  <header class="adr-header">
343
343
  <div class="adr-meta">
344
344
  ${this.adrId?`<span class="adr-id">${i(this.adrId)}</span>`:""}
345
- ${s?`<span class="adr-date-wrap">${d(n.calendar)} <slot name="date"></slot></span>`:""}
345
+ ${r?`<span class="adr-date-wrap">${n(c.calendar)} <slot name="date"></slot></span>`:""}
346
346
  </div>
347
347
  <div class="adr-badges">
348
348
  <span class="adr-status" style="color:${t.color};background:${t.bg}">${i(t.label)}</span>
@@ -357,20 +357,20 @@ var c=`
357
357
  ${this.supersedes.length?`
358
358
  <div class="adr-links">
359
359
  <span class="adr-links-label">Supersedes</span>
360
- ${this.supersedes.map(a=>`<a class="adr-link" href="#${i(a)}">${d(n.arrowRight)} ${i(a)}</a>`).join("")}
360
+ ${this.supersedes.map(d=>`<a class="adr-link" href="#${i(d)}">${n(c.arrowRight)} ${i(d)}</a>`).join("")}
361
361
  </div>`:""}
362
362
 
363
363
  ${this.supersededBy.length?`
364
364
  <div class="adr-links">
365
365
  <span class="adr-links-label">Superseded by</span>
366
- ${this.supersededBy.map(a=>`<a class="adr-link" href="#${i(a)}">${d(n.arrowRight)} ${i(a)}</a>`).join("")}
366
+ ${this.supersededBy.map(d=>`<a class="adr-link" href="#${i(d)}">${n(c.arrowRight)} ${i(d)}</a>`).join("")}
367
367
  </div>`:""}
368
368
  </div>
369
369
 
370
370
  <div class="adr-sections">
371
371
  <div class="adr-section">
372
372
  <div class="adr-section-header">
373
- <div class="adr-section-icon context">${d(n.context)}</div>
373
+ <div class="adr-section-icon context">${n(c.context)}</div>
374
374
  <span class="adr-section-title">Context</span>
375
375
  </div>
376
376
  <div class="adr-section-content">
@@ -380,7 +380,7 @@ var c=`
380
380
 
381
381
  <div class="adr-section">
382
382
  <div class="adr-section-header">
383
- <div class="adr-section-icon decision">${d(n.decision)}</div>
383
+ <div class="adr-section-icon decision">${n(c.decision)}</div>
384
384
  <span class="adr-section-title">Decision</span>
385
385
  </div>
386
386
  <div class="adr-section-content">
@@ -390,7 +390,7 @@ var c=`
390
390
 
391
391
  <div class="adr-section">
392
392
  <div class="adr-section-header">
393
- <div class="adr-section-icon consequences">${d(n.consequences)}</div>
393
+ <div class="adr-section-icon consequences">${n(c.consequences)}</div>
394
394
  <span class="adr-section-title">Consequences</span>
395
395
  </div>
396
396
  <div class="adr-section-content">
@@ -399,5 +399,5 @@ var c=`
399
399
  </div>
400
400
  </div>
401
401
 
402
- </article>`,r==="compact")for(let a of this.shadowRoot.querySelectorAll(".adr-section")){let l=a.querySelector("slot");l&&l.assignedNodes().length===0&&a.setAttribute("data-empty","")}this.dispatchEvent(new CustomEvent("adr-wc:ready",{detail:{adrId:this.adrId,title:this.adrTitle,status:this.status},bubbles:!0,composed:!0}))}};f("adr-wc",h);export{h as AdrWc};
402
+ </article>`,a==="compact")for(let d of e.querySelectorAll(".adr-section")){let h=d.querySelector("slot");h&&h.assignedNodes().length===0&&d.setAttribute("data-empty","")}this.dispatchEvent(new CustomEvent("adr-wc:ready",{detail:{adrId:this.adrId,title:this.adrTitle,status:this.status},bubbles:!0,composed:!0}))}};f("adr-wc",u);export{u as AdrWc};
403
403
  //# sourceMappingURL=adr-wc.js.map
@@ -0,0 +1,28 @@
1
+ var N=window.matchMedia("(prefers-reduced-motion: reduce)");var m=new Map;function y(o,t,e={}){let n=e.priority??10,i={impl:t,bundle:e.bundle,contract:e.contract,priority:n},a=m.get(o);if(customElements.get(o)){if(!a||a.priority>=n){a&&a.priority===n&&a.impl!==t&&console.warn(`[VB Bundle] Tag <${o}> already registered by "${a.bundle}" (priority ${a.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${o}> defined by "${a.bundle}" cannot be replaced (customElements.define is permanent). "${e.bundle}" has higher priority but arrived late.`);return}if(a&&a.priority>=n){a.priority===n&&console.warn(`[VB Bundle] Tag <${o}> already registered by "${a.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}m.set(o,i),customElements.define(o,t)}var u=class extends HTMLElement{#e=[];#t;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 t of this.#e)t();this.#e=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,e,n,i){t.addEventListener(e,n,i),this.#e.push(()=>t.removeEventListener(e,n,i))}setup(){}teardown(){}setState(t,e){this.#t||(this.#t=this.attachInternals());let n=this.#t.states;try{e?n.add(t):n.delete(t)}catch{let i=`--${t}`;e?n.add(i):n.delete(i)}}_adoptInternals(t){this.#t||(this.#t=t)}};async function v(o){let t=typeof globalThis<"u"?globalThis:null;if(!t||!(o in t))return{state:"unsupported"};try{let e=t[o];if(!e||typeof e.availability!="function")return{state:"unsupported"};let n=await e.availability();return n==="available"||n==="downloadable"||n==="downloading"||n==="unavailable"?{state:n}:{state:"unsupported"}}catch(e){return{state:"unsupported",error:e}}}var C="ai-chat, ai-summary, .ai-chat-shell, .ais-ui";function w(o,{stripSelectors:t=C}={}){if(o==null)return"";let e;if(typeof o=="string"){if(typeof document>"u")return"";try{e=document.querySelector(o)}catch{return""}}else typeof o=="object"&&typeof o.cloneNode=="function"&&(e=o);if(!e)return"";let n=e.cloneNode(!0);return t&&typeof n.querySelectorAll=="function"&&n.querySelectorAll(t).forEach(i=>i.remove()),(n.textContent||"").trim().replace(/\s+/g," ")}var k=/\{(prompt|url|title|content)\}/g;function g(o,t={}){if(!o)return"";let e={prompt:t.prompt??"",url:t.url??(typeof location<"u"?location.href:""),title:t.title??(typeof document<"u"?document.title:""),content:t.content??""};return String(o).replace(k,(n,i)=>encodeURIComponent(e[i]))}async function*x(o,{prompt:t="",content:e,mode:n,signal:i}={}){let a={prompt:t};e!==void 0&&(a.content=e),n!==void 0&&(a.mode=n);let r=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(a),signal:i});if(!r.ok)throw new Error(`AI endpoint ${o} returned ${r.status} ${r.statusText}`);if((r.headers.get("content-type")||"").toLowerCase().includes("application/json")){let s=await r.json(),c=typeof s?.text=="string"?s.text:"";c&&(yield c);return}if(!r.body||typeof r.body.getReader!="function"){let s=await r.text();s&&(yield s);return}let l=r.body.getReader(),f=new TextDecoder;try{for(;;){let{value:c,done:S}=await l.read();if(S)break;if(c){let b=f.decode(c,{stream:!0});b&&(yield b)}}let s=f.decode();s&&(yield s)}finally{try{l.releaseLock()}catch{}}}function E(o){return o?Math.ceil(String(o).length/4):0}var T="Help me explore this article: {title} ({url})",$={user:{name:"You",role:"user"},assistant:{name:"Assistant",role:"agent"}},h={local:"Gemini Nano (on-device)",endpoint:"Server endpoint","deep-link":"Open in external tool"},p=class extends u{#e=null;#t=null;#o=null;#s=null;#l=null;#i=null;#a=null;#c="unsupported";#n="unavailable";static get observedAttributes(){return["placeholder"]}setup(){this.#w(),this.#g(),this.#x(),this.#b(),this.#C()}teardown(){this.#a?.abort(),this.#i?.destroy?.(),this.#i=null}attributeChangedCallback(t,e,n){if(t==="placeholder"){let i=this.querySelector("chat-input textarea");i&&(i.placeholder=n??"")}}async reset(){this.#a?.abort(),this.#i?.destroy?.(),this.#i=null,this.#e?.clearThread?.(),this.#b(),this.#r("ready")}#w(){let t=this.getAttribute("placeholder")||"Type a message\u2026",e=document.createElement("template");e.innerHTML=`
2
+ <p class="ai-chat-ribbon" hidden></p>
3
+ <p class="ai-chat-notice" hidden></p>
4
+ <div class="ai-chat-starters" role="group" aria-label="Starter prompts" hidden></div>
5
+ <chat-window empty-message="Send a message to start a session.">
6
+ <script type="application/json" data-participants>${JSON.stringify($)}<\/script>
7
+ <header>
8
+ <select class="ai-chat-provider small" data-model-select aria-label="AI provider"></select>
9
+ </header>
10
+ <chat-thread role="log" aria-label="Chat" aria-live="polite"></chat-thread>
11
+ <chat-input name="message">
12
+ <textarea data-grow rows="1" data-max-rows="8" required></textarea>
13
+ <footer>
14
+ <button type="submit" class="small" data-send aria-label="Send">
15
+ <icon-wc name="send"></icon-wc>
16
+ </button>
17
+ </footer>
18
+ </chat-input>
19
+ </chat-window>
20
+ `,this.appendChild(e.content.cloneNode(!0)),this.#e=this.querySelector(":scope > chat-window"),this.#t=this.querySelector(".ai-chat-provider"),this.#o=this.querySelector(":scope > .ai-chat-ribbon"),this.#s=this.querySelector(":scope > .ai-chat-notice"),this.#l=this.querySelector(":scope > .ai-chat-starters");let n=this.querySelector("chat-input textarea");n&&(n.placeholder=t)}#g(){if(!this.#l)return;let t=this.querySelector(':scope > template[data-role="starters"]'),e=(t&&t.content?.textContent||"").split(`
21
+ `).map(n=>n.trim()).filter(Boolean);if(this.#l.replaceChildren(),!e.length){this.#l.hidden=!0;return}this.#l.hidden=!1;for(let n of e){let i=document.createElement("button");i.type="button",i.className="ai-chat-starter small",i.textContent=n,this.listen(i,"click",()=>this.#E(n)),this.#l.appendChild(i)}}#x(){this.#e&&(this.listen(this.#e,"chat-window:send",t=>{t.stopPropagation(),this.#T(t.detail.message,t.detail.typingElement)}),this.listen(this.#e,"chat-window:model-change",t=>{let e=t.detail.model;e&&e!==this.#n&&(this.#n=e,this.#i?.destroy?.(),this.#i=null,this.#m())}),this.listen(this,"keydown",t=>{t.key==="Escape"&&this.#a&&(t.preventDefault(),this.#a.abort())}))}#E(t){let e=this.querySelector("chat-input");if(!e)return;e.value=t;let n=e.querySelector("textarea");n&&n.dispatchEvent(new KeyboardEvent("keydown",{key:"Enter",bubbles:!0}))}#f(){return this.getAttribute("context")?.trim()||""}#u(){let t=this.#f();return t?w(t,{stripSelectors:"ai-chat, ai-summary, .ais-ui"}):""}#b(){if(!this.#o)return;let t=this.#f();if(!t){this.#o.hidden=!0;return}let e=this.#u();if(!e){this.#o.hidden=!1,this.#o.textContent=`Context selector "${t}" matched no readable content.`,this.setAttribute("data-context-state","missing");return}let n=e.length,i=E(e),a=n>6e3,r=this.getAttribute("context-label")||t;this.#o.hidden=!1,this.#o.replaceChildren();let d=document.createElement("span");if(d.className="ai-chat-ribbon-lead",d.textContent=`Page context: ${r} \xB7 ${n.toLocaleString()} chars (~${i.toLocaleString()} tokens)`,this.#o.appendChild(d),a){let l=document.createElement("span");l.className="ai-chat-ribbon-warn",l.textContent="large \u2014 may crowd the conversation",this.#o.appendChild(l)}this.setAttribute("data-context-state",a?"large":"ok")}#S(){let t=this.getAttribute("system")?.trim()||this.querySelector(':scope > template[data-role="system"]')?.content?.textContent?.trim()||"",e=this.#u();if(!e)return t||void 0;let i=`
22
+
23
+ [PAGE CONTENT \u2014 ${this.getAttribute("context-label")||"page"}]
24
+ ${e}
25
+ [END PAGE CONTENT]`;return t?t+i:`Use the following page content to answer the user.${i}`}async#C(){this.#r("checking");let{state:t}=await v("LanguageModel");this.#c=t;let e=[];t==="available"||t==="downloadable"||t==="downloading"?e.push({value:"local",label:h.local}):e.push({value:"local",label:`${h.local} \u2014 unavailable`,disabled:!0}),this.getAttribute("endpoint")&&e.push({value:"endpoint",label:h.endpoint}),this.getAttribute("fallback-url")&&e.push({value:"deep-link",label:this.getAttribute("fallback-label")||h["deep-link"]}),this.#k(e);let n=e.find(i=>!i.disabled);this.#n=n?.value??"unavailable",this.#t&&n&&(this.#t.value=n.value),this.#e&&(this.#e.model=this.#n),this.#m(),this.#r(this.#n==="unavailable"?"unavailable":"ready")}#k(t){if(this.#t){if(this.#t.replaceChildren(),t.length===0){let e=document.createElement("option");e.textContent="Unavailable",e.disabled=!0,this.#t.appendChild(e),this.#t.disabled=!0;return}for(let e of t){let n=document.createElement("option");n.value=e.value,n.textContent=e.label,e.disabled&&(n.disabled=!0),this.#t.appendChild(n)}this.#t.disabled=t.every(e=>e.disabled)}}#m(){this.#n==="unavailable"?this.#d("On-device AI unavailable and no fallback configured. Set endpoint= or fallback-url= to enable a fallback."):this.#n==="deep-link"?this.#d("Send opens the external tool in a new tab. Choose another provider above to chat in-page."):this.#c==="downloadable"&&this.#n==="local"?this.#d("First message will download the on-device model (~1.6 GB)."):this.#p()}async#A(){if(this.#i)return this.#i;let t=this.#S(),e=t?[{role:"system",content:t}]:void 0;return this.#i=await LanguageModel.create({initialPrompts:e,expectedInputs:[{type:"text",languages:["en"]}],expectedOutputs:[{type:"text",languages:["en"]}],monitor:n=>{n.addEventListener("downloadprogress",i=>{if(i.loaded>=1){this.#c="available",this.#p();return}this.#r("downloading"),this.#d(`Downloading on-device model: ${Math.round(i.loaded*100)}%`)})}}),this.#c="available",this.#p(),this.#i.addEventListener?.("contextoverflow",()=>{this.dispatchEvent(new CustomEvent("ai-chat:context-overflow",{bubbles:!0}))}),this.#i}async#T(t,e){if(this.dispatchEvent(new CustomEvent("ai-chat:message",{detail:{role:"user",text:t},bubbles:!0})),this.#n==="deep-link"){e.remove(),window.open(this.#N(t),"_blank","noopener,noreferrer");return}if(this.#n==="unavailable"){this.#y(e,"Chat is unavailable in this browser.",{error:!0});return}this.#r("streaming"),this.#a=new AbortController;let n=e.querySelector("chat-bubble");if(!n)return;let i="";try{let a=this.#n==="local"?await this.#$(t):x(this.getAttribute("endpoint")||"",{prompt:t,content:this.#u()||void 0,mode:"chat",signal:this.#a.signal});for await(let r of a)i+=r,n.textContent=i,this.#v();this.#h(e,i||" "),this.#v(),this.dispatchEvent(new CustomEvent("ai-chat:message",{detail:{role:"assistant",text:i},bubbles:!0})),this.#r("ready")}catch(a){let r=a;if(r?.name==="AbortError"){this.#h(e,i?`${i} (stopped)`:"(stopped)"),this.#r("ready");return}this.#y(e,r?.message||"Generation failed",{error:!0}),this.#r("error"),this.dispatchEvent(new CustomEvent("ai-chat:error",{detail:{error:a},bubbles:!0}))}finally{this.#a=null}}async#$(t){let e=await this.#A(),n=this.#a?.signal,i=e.promptStreaming(t,{signal:n});return(async function*(){for await(let a of i)yield a})()}#h(t,e){let n=t.querySelector("chat-bubble");n&&(n.textContent=e),t.removeAttribute("data-status"),t.removeAttribute("aria-label")}#y(t,e,n={}){this.#h(t,e),n.error&&t.setAttribute("data-status","error")}#v(){this.#e?.scrollToBottom?.()}#r(t){this.setAttribute("data-state",t),this.dispatchEvent(new CustomEvent("ai-chat:state",{detail:{state:t,provider:this.#n},bubbles:!0}))}#d(t){this.#s&&(this.#s.hidden=!1,this.#s.textContent=t)}#p(){this.#s&&(this.#s.hidden=!0,this.#s.textContent="")}#N(t){let n=(this.getAttribute("fallback-prompt")||T).replace(/\{url\}/g,location.href).replace(/\{title\}/g,document.title),i=t?`${n}
26
+
27
+ User: ${t}`:n;return g(this.getAttribute("fallback-url"),{prompt:i})}};y("ai-chat",p);export{p as AIChat};
28
+ //# sourceMappingURL=ai-chat.js.map
@@ -0,0 +1,10 @@
1
+ var L=window.matchMedia("(prefers-reduced-motion: reduce)");var p=new Map;function m(i,t,e={}){let n=e.priority??10,a={impl:t,bundle:e.bundle,contract:e.contract,priority:n},r=p.get(i);if(customElements.get(i)){if(!r||r.priority>=n){r&&r.priority===n&&r.impl!==t&&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>=n){r.priority===n&&console.warn(`[VB Bundle] Tag <${i}> already registered by "${r.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}p.set(i,a),customElements.define(i,t)}var d=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 t of this.#t)t();this.#t=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,e,n,a){t.addEventListener(e,n,a),this.#t.push(()=>t.removeEventListener(e,n,a))}setup(){}teardown(){}setState(t,e){this.#e||(this.#e=this.attachInternals());let n=this.#e.states;try{e?n.add(t):n.delete(t)}catch{let a=`--${t}`;e?n.add(a):n.delete(a)}}_adoptInternals(t){this.#e||(this.#e=t)}};var k=["available","downloadable","downloading"];async function b(i){let t=typeof globalThis<"u"?globalThis:null;if(!t||!(i in t))return{state:"unsupported"};try{let e=t[i];if(!e||typeof e.availability!="function")return{state:"unsupported"};let n=await e.availability();return n==="available"||n==="downloadable"||n==="downloading"||n==="unavailable"?{state:n}:{state:"unsupported"}}catch(e){return{state:"unsupported",error:e}}}function y({availability:i,endpoint:t,fallbackURL:e}){return k.includes(i)?"local":t?"endpoint":e?"deep-link":"unavailable"}var x="ai-chat, ai-summary, .ai-chat-shell, .ais-ui";function g(i,{stripSelectors:t=x}={}){if(i==null)return"";let e;if(typeof i=="string"){if(typeof document>"u")return"";try{e=document.querySelector(i)}catch{return""}}else typeof i=="object"&&typeof i.cloneNode=="function"&&(e=i);if(!e)return"";let n=e.cloneNode(!0);return t&&typeof n.querySelectorAll=="function"&&n.querySelectorAll(t).forEach(a=>a.remove()),(n.textContent||"").trim().replace(/\s+/g," ")}var C=/\{(prompt|url|title|content)\}/g;function v(i,t={}){if(!i)return"";let e={prompt:t.prompt??"",url:t.url??(typeof location<"u"?location.href:""),title:t.title??(typeof document<"u"?document.title:""),content:t.content??""};return String(i).replace(C,(n,a)=>encodeURIComponent(e[a]))}async function*w(i,{prompt:t="",content:e,mode:n,signal:a}={}){let r={prompt:t};e!==void 0&&(r.content=e),n!==void 0&&(r.mode=n);let o=await fetch(i,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r),signal:a});if(!o.ok)throw new Error(`AI endpoint ${i} returned ${o.status} ${o.statusText}`);if((o.headers.get("content-type")||"").toLowerCase().includes("application/json")){let s=await o.json(),l=typeof s?.text=="string"?s.text:"";l&&(yield l);return}if(!o.body||typeof o.body.getReader!="function"){let s=await o.text();s&&(yield s);return}let u=o.body.getReader(),h=new TextDecoder;try{for(;;){let{value:l,done:E}=await u.read();if(E)break;if(l){let f=h.decode(l,{stream:!0});f&&(yield f)}}let s=h.decode();s&&(yield s)}finally{try{u.releaseLock()}catch{}}}var A="Summarize this article: {url}",c=class extends d{#t=null;#e=null;#n=null;#a=null;#r="unavailable";setup(){this.#l(),this.#d()}teardown(){this.#a?.abort(),this.#a=null}#l(){let t=document.createElement("div");t.className="ais-ui",t.innerHTML=`
2
+ <div class="ais-controls">
3
+ <button type="button" class="ais-trigger small" disabled>
4
+ <span class="ais-label">Summarize</span>
5
+ </button>
6
+ <span class="ais-status" data-state="checking" role="status">Checking availability\u2026</span>
7
+ </div>
8
+ <div class="ais-output" hidden aria-live="polite"></div>
9
+ `,this.prepend(t),this.#t=t.querySelector(".ais-trigger"),this.#e=t.querySelector(".ais-status"),this.#n=t.querySelector(".ais-output"),this.listen(this.#t,"click",()=>this.#u())}async#d(){this.#i("checking");let{state:t}=await b("Summarizer");this.#r=y({availability:t,endpoint:this.getAttribute("endpoint")||void 0,fallbackURL:this.getAttribute("fallback-url")||void 0}),this.#c(t)}#c(t){if(!(!this.#t||!this.#e)){if(this.#r==="local"){this.#e.dataset.state=t,this.#e.textContent={available:"Ready (on-device)",downloadable:"Model available \u2014 first run will download",downloading:"Model downloading\u2026"}[t]??t,this.#t.disabled=!1,this.#t.dataset.provider="local",this.#i("ready");return}if(this.#r==="endpoint"){this.#e.dataset.state="available",this.#e.textContent="Ready (remote)",this.#t.disabled=!1,this.#t.dataset.provider="endpoint",this.#i("ready");return}if(this.#r==="deep-link"){this.#e.dataset.state="unavailable",this.#e.textContent="On-device AI unavailable \u2014 using deep-link",this.#t.disabled=!1,this.#t.dataset.provider="deep-link";let e=this.getAttribute("fallback-label")||"Read elsewhere";this.#b(e),this.#i("deep-link");return}this.#e.dataset.state="unavailable",this.#e.textContent="Summarization not available on this device",this.#t.disabled=!0,this.#t.dataset.provider="unavailable",this.#i("unavailable")}}async#u(){if(!(!this.#t||!this.#n)){if(this.#r==="deep-link"){window.open(this.#s(),"_blank","noopener,noreferrer");return}if(this.#r!=="unavailable"){this.#n.hidden=!1,this.#n.textContent="",this.#t.disabled=!0,this.#i("streaming"),this.#a=new AbortController;try{let t=this.#f(),e="",n=this.#r==="local"?await this.#h(t):w(this.getAttribute("endpoint")||"",{prompt:this.#o(),content:t,mode:"summarize",signal:this.#a.signal});for await(let a of n)e+=a,this.#n.textContent=e;this.#p(e),this.#i("complete"),this.dispatchEvent(new CustomEvent("ai-summary:result",{detail:{text:e,provider:this.#r},bubbles:!0}))}catch(t){if(t&&t.name==="AbortError"){this.#i("ready");return}this.#m(t),this.#i("error"),this.dispatchEvent(new CustomEvent("ai-summary:error",{detail:{error:t},bubbles:!0}))}finally{this.#a=null,this.#t.disabled=!1}}}}async#h(t){let e=await Summarizer.create({type:this.getAttribute("type")||"key-points",format:this.getAttribute("format")||"markdown",length:this.getAttribute("length")||"medium",sharedContext:this.getAttribute("shared-context")||void 0,expectedInputLanguages:["en"],outputLanguage:"en",monitor:r=>{r.addEventListener("downloadprogress",o=>{this.#i("downloading"),this.#e&&(this.#e.textContent=`Downloading model: ${Math.round(o.loaded*100)}%`)})}}),n=this.#a?.signal,a=typeof e.summarizeStreaming=="function"?e.summarizeStreaming(t,{signal:n}):(async function*(){yield await e.summarize(t,{signal:n})})();return(async function*(){try{for await(let r of a)yield r}finally{e.destroy?.()}})()}#f(){return g(this,{stripSelectors:".ais-ui"})}#o(){return(this.getAttribute("fallback-prompt")||A).replace(/\{url\}/g,location.href).replace(/\{title\}/g,document.title)}#s(){return v(this.getAttribute("fallback-url"),{prompt:this.#o()})}#p(t){if(!this.#n)return;if(!t){this.#n.textContent="";return}let e=document.createElement("markdown-viewer"),n=document.createElement("pre");n.textContent=t,e.appendChild(n),this.#n.replaceChildren(e)}#m(t){if(!this.#n)return;let e=document.createElement("p");if(e.className="ais-error",e.textContent=`Summarization failed: ${t?.message||t}`,this.#n.replaceChildren(e),this.getAttribute("fallback-url")){let a=document.createElement("p");a.className="ais-fallback";let r=document.createElement("a");r.href=this.#s(),r.target="_blank",r.rel="noopener noreferrer",r.textContent=this.getAttribute("fallback-label")||"Continue elsewhere",a.append("You can ",r," instead."),this.#n.appendChild(a)}}#i(t){this.setAttribute("data-state",t),this.dispatchEvent(new CustomEvent("ai-summary:state",{detail:{state:t,provider:this.#r},bubbles:!0}))}#b(t){let e=this.#t?.querySelector(".ais-label");e&&(e.textContent=t)}};m("ai-summary",c);export{c as AISummary};
10
+ //# sourceMappingURL=ai-summary.js.map
@@ -1,6 +1,6 @@
1
- var y=window.matchMedia("(prefers-reduced-motion: reduce)");var u=new Map;function p(s,t,e={}){let n=e.priority??10,a={impl:t,bundle:e.bundle,contract:e.contract,priority:n},o=u.get(s);if(customElements.get(s)){if(!o||o.priority>=n){o&&o.priority===n&&o.impl!==t&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${o.bundle}" (priority ${o.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${s}> defined by "${o.bundle}" cannot be replaced (customElements.define is permanent). "${e.bundle}" has higher priority but arrived late.`);return}if(o&&o.priority>=n){o.priority===n&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${o.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}u.set(s,a),customElements.define(s,t)}var l=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,n,a){t.addEventListener(e,n,a),this.#t.push(()=>t.removeEventListener(e,n,a))}setup(){}teardown(){}};var i={optout:"vb_optout",sessionCount:"vb_sc",eventQueue:"vb_q"};function h(s){return String(s).replace(/[&<>"']/g,t=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[t])}function f(s){return typeof s!="number"||s<=0?"\u2014":s<6e4?`${Math.round(s/1e3)}s`:`${Math.floor(s/6e4)}m ${Math.round(s%6e4/1e3)}s`}var d=class extends l{setup(){this.#e(),this.listen(this,"click",this.#t)}get isOptedOut(){try{return sessionStorage.getItem(i.optout)==="1"}catch{return!1}}get sessionCounter(){try{let t=sessionStorage.getItem(i.sessionCount);return t?JSON.parse(t):null}catch{return null}}get queuedEvents(){try{let t=sessionStorage.getItem(i.eventQueue);return t?JSON.parse(t):[]}catch{return[]}}get hasSessionData(){return this.sessionCounter!=null||this.queuedEvents.length>0}#t=t=>{let e=t.target?.closest?.("[data-analytics-action]");if(!e||!this.contains(e))return;let n=e.dataset.analyticsAction;n==="clear"&&this.#s(),n==="optout"&&this.#n(),n==="refresh"&&this.#e()};#s(){try{sessionStorage.removeItem(i.sessionCount),sessionStorage.removeItem(i.eventQueue)}catch{}this.dispatchEvent(new CustomEvent("analytics-panel:cleared",{bubbles:!0,composed:!0})),this.#e()}#n(){let t=!this.isOptedOut;try{t?sessionStorage.setItem(i.optout,"1"):sessionStorage.removeItem(i.optout)}catch{}this.dispatchEvent(new CustomEvent(t?"analytics-panel:optout":"analytics-panel:optin",{bubbles:!0,composed:!0})),t?this.#s():this.#e()}#e(){let t=this.getAttribute("title")||"Analytics data",e=this.isOptedOut,n=this.hasSessionData;this.innerHTML=`
1
+ var y=window.matchMedia("(prefers-reduced-motion: reduce)");var u=new Map;function h(n,t,e={}){let s=e.priority??10,o={impl:t,bundle:e.bundle,contract:e.contract,priority:s},a=u.get(n);if(customElements.get(n)){if(!a||a.priority>=s){a&&a.priority===s&&a.impl!==t&&console.warn(`[VB Bundle] Tag <${n}> already registered by "${a.bundle}" (priority ${a.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${n}> defined by "${a.bundle}" cannot be replaced (customElements.define is permanent). "${e.bundle}" has higher priority but arrived late.`);return}if(a&&a.priority>=s){a.priority===s&&console.warn(`[VB Bundle] Tag <${n}> already registered by "${a.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}u.set(n,o),customElements.define(n,t)}var l=class extends HTMLElement{#e=[];#t;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 t of this.#e)t();this.#e=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,e,s,o){t.addEventListener(e,s,o),this.#e.push(()=>t.removeEventListener(e,s,o))}setup(){}teardown(){}setState(t,e){this.#t||(this.#t=this.attachInternals());let s=this.#t.states;try{e?s.add(t):s.delete(t)}catch{let o=`--${t}`;e?s.add(o):s.delete(o)}}_adoptInternals(t){this.#t||(this.#t=t)}};var i={optout:"vb_optout",sessionCount:"vb_sc",eventQueue:"vb_q"};function p(n){return String(n).replace(/[&<>"']/g,t=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[t])}function f(n){return typeof n!="number"||n<=0?"\u2014":n<6e4?`${Math.round(n/1e3)}s`:`${Math.floor(n/6e4)}m ${Math.round(n%6e4/1e3)}s`}var d=class extends l{setup(){this.#s(),this.listen(this,"click",this.#e)}get isOptedOut(){try{return sessionStorage.getItem(i.optout)==="1"}catch{return!1}}get sessionCounter(){try{let t=sessionStorage.getItem(i.sessionCount);return t?JSON.parse(t):null}catch{return null}}get queuedEvents(){try{let t=sessionStorage.getItem(i.eventQueue);return t?JSON.parse(t):[]}catch{return[]}}get hasSessionData(){return this.sessionCounter!=null||this.queuedEvents.length>0}#e=t=>{let e=t.target?.closest?.("[data-analytics-action]");if(!e||!this.contains(e))return;let s=e.dataset.analyticsAction;s==="clear"&&this.#t(),s==="optout"&&this.#n(),s==="refresh"&&this.#s()};#t(){try{sessionStorage.removeItem(i.sessionCount),sessionStorage.removeItem(i.eventQueue)}catch{}this.dispatchEvent(new CustomEvent("analytics-panel:cleared",{bubbles:!0,composed:!0})),this.#s()}#n(){let t=!this.isOptedOut;try{t?sessionStorage.setItem(i.optout,"1"):sessionStorage.removeItem(i.optout)}catch{}this.dispatchEvent(new CustomEvent(t?"analytics-panel:optout":"analytics-panel:optin",{bubbles:!0,composed:!0})),t?this.#t():this.#s()}#s(){let t=this.getAttribute("title")||"Analytics data",e=this.isOptedOut,s=this.hasSessionData;this.innerHTML=`
2
2
  <header class="analytics-panel__header">
3
- <h3>${h(t)}</h3>
3
+ <h3>${p(t)}</h3>
4
4
  <p class="analytics-panel__status" role="status">
5
5
  <span class="analytics-panel__dot analytics-panel__dot--${e?"paused":"active"}" aria-hidden="true"></span>
6
6
  ${e?"Analytics paused for this tab. No data is being collected.":"Analytics active. Only aggregate, device-scoped data is collected."}
@@ -9,11 +9,11 @@ var y=window.matchMedia("(prefers-reduced-motion: reduce)");var u=new Map;functi
9
9
 
10
10
  <section class="analytics-panel__body">
11
11
  <h4>Stored on this device (this session only)</h4>
12
- ${this.#o()}
12
+ ${this.#a()}
13
13
  </section>
14
14
 
15
15
  <footer class="analytics-panel__actions">
16
- ${n?`
16
+ ${s?`
17
17
  <button type="button" data-analytics-action="clear" class="analytics-panel__action analytics-panel__action--danger">
18
18
  Clear my data
19
19
  </button>
@@ -30,5 +30,5 @@ var y=window.matchMedia("(prefers-reduced-motion: reduce)");var u=new Map;functi
30
30
  No cookies, no cross-site identifiers, no IP address stored.
31
31
  Data is cleared automatically when you close this tab.
32
32
  </p>
33
- `}#o(){if(!this.hasSessionData)return'<p class="analytics-panel__empty">No data stored on this device in this session.</p>';let t=this.sessionCounter,e=this.queuedEvents,n=e.find(c=>c?.id==="__scroll"),a=e.find(c=>c?.id==="__attention"),o=e.filter(c=>!c?.id?.startsWith?.("__")).length,r=[];return t?.v!=null&&r.push(`<dt>Pages this session</dt><dd>${t.v}</dd>`),n&&r.push(`<dt>Max scroll depth</dt><dd>${n.params?.depth??"?"}%</dd>`),a&&r.push(`<dt>Active reading time</dt><dd>${f(a.params?.ms)}</dd>`),o>0&&r.push(`<dt>Queued events</dt><dd>${o}</dd>`),`<dl class="analytics-panel__data">${r.join("")}</dl>`}};p("analytics-panel",d);
33
+ `}#a(){if(!this.hasSessionData)return'<p class="analytics-panel__empty">No data stored on this device in this session.</p>';let t=this.sessionCounter,e=this.queuedEvents,s=e.find(c=>c?.id==="__scroll"),o=e.find(c=>c?.id==="__attention"),a=e.filter(c=>!c?.id?.startsWith?.("__")).length,r=[];return t?.v!=null&&r.push(`<dt>Pages this session</dt><dd>${t.v}</dd>`),s&&r.push(`<dt>Max scroll depth</dt><dd>${s.params?.depth??"?"}%</dd>`),o&&r.push(`<dt>Active reading time</dt><dd>${f(o.params?.ms)}</dd>`),a>0&&r.push(`<dt>Queued events</dt><dd>${a}</dd>`),`<dl class="analytics-panel__data">${r.join("")}</dl>`}};h("analytics-panel",d);
34
34
  //# sourceMappingURL=analytics-panel.js.map
@@ -1,4 +1,4 @@
1
- var c=window.matchMedia("(prefers-reduced-motion: reduce)");var u=new Map;function d(s,e,t={}){let r=t.priority??10,i={impl:e,bundle:t.bundle,contract:t.contract,priority:r},a=u.get(s);if(customElements.get(s)){if(!a||a.priority>=r){a&&a.priority===r&&a.impl!==e&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${a.bundle}" (priority ${a.priority}). Skipping "${t.bundle}".`);return}console.warn(`[VB Bundle] Tag <${s}> defined by "${a.bundle}" cannot be replaced (customElements.define is permanent). "${t.bundle}" has higher priority but arrived late.`);return}if(a&&a.priority>=r){a.priority===r&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${a.bundle}". Skipping "${t.bundle}" (first wins at equal priority).`);return}u.set(s,i),customElements.define(s,e)}var n=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,i){e.addEventListener(t,r,i),this.#e.push(()=>e.removeEventListener(t,r,i))}setup(){}teardown(){}};var l=class extends n{#e=null;#t=null;#i=!1;#v=null;#a=null;#s=null;#u=null;#r=null;#d=null;#c=null;#o=null;#h=null;setup(){if(this.#e=this.querySelector("audio"),!this.#e)return!1;this.#t=this.querySelector(".track-list"),this.#e.removeAttribute("controls");let e=!this.shadowRoot;this.#f(),e&&(this.#y(),this.#g(),this.#x()),this.#p(),this.hasAttribute("autoplay")&&this.#e.play().catch(()=>{}),this.#h=()=>{let t=this.shadowRoot?.querySelector(".player");t&&(t.style.display="none",t.offsetHeight,t.style.display="")},this.listen(window,"vb:theme-change",this.#h)}teardown(){this.#e&&this.#e.setAttribute("controls","")}#f(){if(this.shadowRoot)return;let e=this.attachShadow({mode:"open"});e.innerHTML=`
1
+ var c=window.matchMedia("(prefers-reduced-motion: reduce)");var u=new Map;function d(s,t,e={}){let r=e.priority??10,i={impl:t,bundle:e.bundle,contract:e.contract,priority:r},a=u.get(s);if(customElements.get(s)){if(!a||a.priority>=r){a&&a.priority===r&&a.impl!==t&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${a.bundle}" (priority ${a.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${s}> defined by "${a.bundle}" cannot be replaced (customElements.define is permanent). "${e.bundle}" has higher priority but arrived late.`);return}if(a&&a.priority>=r){a.priority===r&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${a.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}u.set(s,i),customElements.define(s,t)}var o=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 t of this.#t)t();this.#t=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,e,r,i){t.addEventListener(e,r,i),this.#t.push(()=>t.removeEventListener(e,r,i))}setup(){}teardown(){}setState(t,e){this.#e||(this.#e=this.attachInternals());let r=this.#e.states;try{e?r.add(t):r.delete(t)}catch{let i=`--${t}`;e?r.add(i):r.delete(i)}}_adoptInternals(t){this.#e||(this.#e=t)}};var l=class extends o{#t=null;#e=null;#a=!1;#v=null;#s=null;#i=null;#u=null;#r=null;#d=null;#c=null;#n=null;#h=null;setup(){if(this.#t=this.querySelector("audio"),!this.#t)return!1;this.#e=this.querySelector(".track-list"),this.#t.removeAttribute("controls");let t=!this.shadowRoot;return this.#f(),t&&(this.#y(),this.#g(),this.#x()),this.#p(),this.hasAttribute("autoplay")&&this.#t.play().catch(()=>{}),this.#h=()=>{let e=this.shadowRoot?.querySelector(".player");e&&(e.style.display="none",e.offsetHeight,e.style.display="")},this.listen(window,"vb:theme-change",this.#h),!0}teardown(){this.#t&&this.#t.setAttribute("controls","")}get src(){return this.#t?.getAttribute("src")||this.#t?.currentSrc||""}set src(t){if(!this.#t)return;let e=t==null?"":String(t);this.#t.getAttribute("src")!==e&&(this.#t.setAttribute("src",e),this.#t.load?.(),this.dispatchEvent(new CustomEvent("audio-player:src-changed",{detail:{src:e,source:"property"},bubbles:!0})))}get currentTime(){return this.#t?.currentTime??0}set currentTime(t){this.#t&&(this.#t.currentTime=Number(t)||0)}#f(){if(this.shadowRoot)return;let t=this.attachShadow({mode:"open"});t.innerHTML=`
2
2
  <style>${this.#b()}</style>
3
3
  <div part="player" class="player">
4
4
  <div part="controls" class="controls" role="group" aria-label="Audio controls">
@@ -42,7 +42,7 @@ var c=window.matchMedia("(prefers-reduced-motion: reduce)");var u=new Map;functi
42
42
  </div>
43
43
  <slot></slot>
44
44
  </div>
45
- `,this.#v=e.querySelector(".controls"),this.#a=e.querySelector(".play-btn"),this.#s=e.querySelector(".timeline"),this.#u=e.querySelector(".timeline-fill"),this.#r=e.querySelector(".volume"),this.#d=e.querySelector(".current-time"),this.#c=e.querySelector(".duration"),this.#o=e.querySelector(".track-title")}#b(){return`
45
+ `,this.#v=t.querySelector(".controls"),this.#s=t.querySelector(".play-btn"),this.#i=t.querySelector(".timeline"),this.#u=t.querySelector(".timeline-fill"),this.#r=t.querySelector(".volume"),this.#d=t.querySelector(".current-time"),this.#c=t.querySelector(".duration"),this.#n=t.querySelector(".track-title")}#b(){return`
46
46
  :host {
47
47
  display: block;
48
48
  --_accent: var(--audio-player-accent, var(--color-primary, oklch(55% 0.2 260)));
@@ -336,5 +336,5 @@ var c=window.matchMedia("(prefers-reduced-motion: reduce)");var u=new Map;functi
336
336
  transform: none;
337
337
  }
338
338
  }
339
- `}#y(){this.#e.addEventListener("timeupdate",()=>this.#k()),this.#e.addEventListener("loadedmetadata",()=>this.#E()),this.#e.addEventListener("play",()=>{this.#i=!0,this.setAttribute("state","playing"),this.#a.setAttribute("aria-label","Pause"),this.#l("audio-player:play",{currentTime:this.#e.currentTime,src:this.#e.currentSrc})}),this.#e.addEventListener("pause",()=>{this.#i=!1,this.setAttribute("state","paused"),this.#a.setAttribute("aria-label","Play"),this.#l("audio-player:pause",{currentTime:this.#e.currentTime})}),this.#e.addEventListener("ended",()=>{this.#i=!1,this.setAttribute("state","ended"),this.#a.setAttribute("aria-label","Play");let e=this.#t?.querySelector("li[data-audio-active]");e&&e.setAttribute("data-audio-played",""),this.#t&&this.#w(),this.#l("audio-player:ended",{src:this.#e.currentSrc})})}#g(){this.#a.addEventListener("click",()=>{this.#i?this.#e.pause():this.#e.play().catch(()=>{})}),this.#s.addEventListener("input",()=>{this.#e.duration&&(this.#e.currentTime=Number(this.#s.value)/100*this.#e.duration)}),this.#r.addEventListener("input",()=>{this.#e.volume=Number(this.#r.value),this.#e.muted=!1,this.removeAttribute("muted"),this.#r.style.setProperty("--_vol",this.#r.value)});let e=this.shadowRoot?.querySelector(".mute-btn");e&&(e.addEventListener("click",()=>{this.#e.muted=!this.#e.muted,this.toggleAttribute("muted",this.#e.muted),this.#r.style.setProperty("--_vol",this.#e.muted?"0":this.#r.value)}),this.addEventListener("keydown",t=>{let r=t.target;if(!(r?.tagName==="INPUT"||r?.tagName==="TEXTAREA"))switch(t.key){case" ":t.preventDefault(),this.#i?this.#e.pause():this.#e.play().catch(()=>{});break;case"ArrowLeft":t.preventDefault(),this.#e.currentTime=Math.max(0,this.#e.currentTime-10);break;case"ArrowRight":t.preventDefault(),this.#e.currentTime=Math.min(this.#e.duration||0,this.#e.currentTime+10);break;case"m":case"M":this.#e.muted=!this.#e.muted,this.toggleAttribute("muted",this.#e.muted),this.#r.style.setProperty("--_vol",this.#e.muted?"0":this.#r.value);break}}),this.hasAttribute("tabindex")||this.setAttribute("tabindex","0"))}#x(){this.#t&&this.#t.addEventListener("click",e=>{let r=e.target?.closest("a[href]");r&&(e.preventDefault(),this.#n(r.href,r.closest("li")))})}#n(e,t){if(!this.#t)return;this.#t.querySelectorAll("li").forEach(i=>i.removeAttribute("data-audio-active")),t&&t.setAttribute("data-audio-active",""),this.#e.src=e,this.#e.play().catch(()=>{}),this.#p(),this.#l("audio-player:track-change",{src:e,title:t?.querySelector("a")?.textContent??""})}#w(){if(!this.#t)return;let e=[...this.#t.querySelectorAll("li")],t=e.findIndex(i=>i.hasAttribute("data-audio-active"));if(this.hasAttribute("shuffle")){let i=e.filter((a,o)=>o!==t);if(i.length){let a=i[Math.floor(Math.random()*i.length)],o=a.querySelector("a[href]");o&&this.#n(o.href,a)}return}let r=t+1;if(r<e.length){let i=e[r].querySelector("a[href]");i&&this.#n(i.href,e[r])}else if(this.hasAttribute("loop")){let i=e[0]?.querySelector("a[href]");i&&this.#n(i.href,e[0])}}#k(){let e=this.#e.currentTime,t=this.#e.duration||0,r=t?e/t*100:0;this.#d.textContent=this.#m(e),this.#s.value=String(r),this.#u.style.width=`${r}%`}#E(){let e=this.#e.duration||0;this.#c.textContent=this.#m(e)}#p(){if(!this.#o)return;if(this.#t){let t=this.#t.querySelector("li[data-audio-active] a");if(t){this.#o.textContent=t.textContent;return}}let e=this.#e.currentSrc||this.#e.querySelector("source")?.src||"";if(e){let t=e.split("/").pop().split("?")[0];this.#o.textContent=t.replace(/\.[^.]+$/,"").replace(/[-_]/g," ")}}#m(e){if(!Number.isFinite(e))return"0:00";let t=Math.floor(e/60),r=Math.floor(e%60).toString().padStart(2,"0");return`${t}:${r}`}#l(e,t){this.dispatchEvent(new CustomEvent(e,{bubbles:!0,composed:!0,detail:t}))}};d("audio-player",l);export{l as AudioPlayerElement};
339
+ `}#y(){this.#t.addEventListener("timeupdate",()=>this.#k()),this.#t.addEventListener("loadedmetadata",()=>this.#E()),this.#t.addEventListener("play",()=>{this.#a=!0,this.setAttribute("state","playing"),this.#s.setAttribute("aria-label","Pause"),this.#l("audio-player:play",{currentTime:this.#t.currentTime,src:this.#t.currentSrc})}),this.#t.addEventListener("pause",()=>{this.#a=!1,this.setAttribute("state","paused"),this.#s.setAttribute("aria-label","Play"),this.#l("audio-player:pause",{currentTime:this.#t.currentTime})}),this.#t.addEventListener("ended",()=>{this.#a=!1,this.setAttribute("state","ended"),this.#s.setAttribute("aria-label","Play");let t=this.#e?.querySelector("li[data-audio-active]");t&&t.setAttribute("data-audio-played",""),this.#e&&this.#w(),this.#l("audio-player:ended",{src:this.#t.currentSrc})})}#g(){this.#s.addEventListener("click",()=>{this.#a?this.#t.pause():this.#t.play().catch(()=>{})}),this.#i.addEventListener("input",()=>{this.#t.duration&&(this.#t.currentTime=Number(this.#i.value)/100*this.#t.duration)}),this.#i.addEventListener("pointerdown",()=>this.setState("scrub-active",!0));let t=()=>this.setState("scrub-active",!1);this.#i.addEventListener("pointerup",t),this.#i.addEventListener("pointercancel",t),this.#r.addEventListener("input",()=>{this.#t.volume=Number(this.#r.value),this.#t.muted=!1,this.removeAttribute("muted"),this.#r.style.setProperty("--_vol",this.#r.value)});let e=this.shadowRoot?.querySelector(".mute-btn");e&&(e.addEventListener("click",()=>{this.#t.muted=!this.#t.muted,this.toggleAttribute("muted",this.#t.muted),this.#r.style.setProperty("--_vol",this.#t.muted?"0":this.#r.value)}),this.addEventListener("keydown",r=>{let i=r.target;if(!(i?.tagName==="INPUT"||i?.tagName==="TEXTAREA"))switch(r.key){case" ":r.preventDefault(),this.#a?this.#t.pause():this.#t.play().catch(()=>{});break;case"ArrowLeft":r.preventDefault(),this.#t.currentTime=Math.max(0,this.#t.currentTime-10);break;case"ArrowRight":r.preventDefault(),this.#t.currentTime=Math.min(this.#t.duration||0,this.#t.currentTime+10);break;case"m":case"M":this.#t.muted=!this.#t.muted,this.toggleAttribute("muted",this.#t.muted),this.#r.style.setProperty("--_vol",this.#t.muted?"0":this.#r.value);break}}),this.hasAttribute("tabindex")||this.setAttribute("tabindex","0"))}#x(){this.#e&&this.#e.addEventListener("click",t=>{let r=t.target?.closest("a[href]");r&&(t.preventDefault(),this.#o(r.href,r.closest("li")))})}#o(t,e){if(!this.#e)return;this.#e.querySelectorAll("li").forEach(i=>i.removeAttribute("data-audio-active")),e&&e.setAttribute("data-audio-active",""),this.#t.src=t,this.#t.play().catch(()=>{}),this.#p(),this.#l("audio-player:track-change",{src:t,title:e?.querySelector("a")?.textContent??""})}#w(){if(!this.#e)return;let t=[...this.#e.querySelectorAll("li")],e=t.findIndex(i=>i.hasAttribute("data-audio-active"));if(this.hasAttribute("shuffle")){let i=t.filter((a,n)=>n!==e);if(i.length){let a=i[Math.floor(Math.random()*i.length)],n=a.querySelector("a[href]");n&&this.#o(n.href,a)}return}let r=e+1;if(r<t.length){let i=t[r].querySelector("a[href]");i&&this.#o(i.href,t[r])}else if(this.hasAttribute("loop")){let i=t[0]?.querySelector("a[href]");i&&this.#o(i.href,t[0])}}#k(){let t=this.#t.currentTime,e=this.#t.duration||0,r=e?t/e*100:0;this.#d.textContent=this.#m(t),this.#i.value=String(r),this.#u.style.width=`${r}%`}#E(){let t=this.#t.duration||0;this.#c.textContent=this.#m(t)}#p(){if(!this.#n)return;if(this.#e){let e=this.#e.querySelector("li[data-audio-active] a");if(e){this.#n.textContent=e.textContent;return}}let t=this.#t.currentSrc||this.#t.querySelector("source")?.src||"";if(t){let e=t.split("/").pop().split("?")[0];this.#n.textContent=e.replace(/\.[^.]+$/,"").replace(/[-_]/g," ")}}#m(t){if(!Number.isFinite(t))return"0:00";let e=Math.floor(t/60),r=Math.floor(t%60).toString().padStart(2,"0");return`${e}:${r}`}#l(t,e){this.dispatchEvent(new CustomEvent(t,{bubbles:!0,composed:!0,detail:e}))}};d("audio-player",l);export{l as AudioPlayerElement};
340
340
  //# sourceMappingURL=audio-player.js.map
@@ -1,4 +1,4 @@
1
- var S=window.matchMedia("(prefers-reduced-motion: reduce)");var v=new Map;function w(o,e,t={}){let n=t.priority??10,s={impl:e,bundle:t.bundle,contract:t.contract,priority:n},i=v.get(o);if(customElements.get(o)){if(!i||i.priority>=n){i&&i.priority===n&&i.impl!==e&&console.warn(`[VB Bundle] Tag <${o}> already registered by "${i.bundle}" (priority ${i.priority}). Skipping "${t.bundle}".`);return}console.warn(`[VB Bundle] Tag <${o}> defined by "${i.bundle}" cannot be replaced (customElements.define is permanent). "${t.bundle}" has higher priority but arrived late.`);return}if(i&&i.priority>=n){i.priority===n&&console.warn(`[VB Bundle] Tag <${o}> already registered by "${i.bundle}". Skipping "${t.bundle}" (first wins at equal priority).`);return}v.set(o,s),customElements.define(o,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,t,n,s){e.addEventListener(t,n,s),this.#n.push(()=>e.removeEventListener(t,n,s))}setup(){}teardown(){}};var f=new Map;function E(){if(!f.has("default"))try{f.set("default",new AudioContext)}catch{return null}return f.get("default")}var m=new WeakMap;function k(o,e){if(m.has(o))return m.get(o);let t=e.createMediaElementSource(o);return m.set(o,t),t}var y=class extends u{#n=null;#E=null;#s=null;#t=null;#e=null;#l=null;#i=null;#c=null;#a=!0;#r=!1;#o=!1;#h=null;static get observedAttributes(){return["for","data-mode","data-fft-size"]}setup(){this.#o=window.matchMedia("(prefers-reduced-motion: reduce)").matches;let e=!this.shadowRoot;this.#m(),this.#u(),e&&(this.#w(),this.#M()),this.#h=()=>{let t=this.shadowRoot?.querySelector("canvas");t&&(t.style.display="none",t.offsetHeight,t.style.display="")},this.listen(window,"vb:theme-change",this.#h)}teardown(){this.#f(),this.#c?.disconnect()}attributeChangedCallback(e){e==="for"&&this.#u()}#m(){if(this.shadowRoot)return;let e=this.attachShadow({mode:"open"});e.innerHTML=`
1
+ var S=window.matchMedia("(prefers-reduced-motion: reduce)");var v=new Map;function w(o,t,e={}){let i=e.priority??10,n={impl:t,bundle:e.bundle,contract:e.contract,priority:i},s=v.get(o);if(customElements.get(o)){if(!s||s.priority>=i){s&&s.priority===i&&s.impl!==t&&console.warn(`[VB Bundle] Tag <${o}> already registered by "${s.bundle}" (priority ${s.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${o}> 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 <${o}> already registered by "${s.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}v.set(o,n),customElements.define(o,t)}var u=class extends HTMLElement{#s=[];#n;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 t of this.#s)t();this.#s=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,e,i,n){t.addEventListener(e,i,n),this.#s.push(()=>t.removeEventListener(e,i,n))}setup(){}teardown(){}setState(t,e){this.#n||(this.#n=this.attachInternals());let i=this.#n.states;try{e?i.add(t):i.delete(t)}catch{let n=`--${t}`;e?i.add(n):i.delete(n)}}_adoptInternals(t){this.#n||(this.#n=t)}};var f=new Map;function E(){if(!f.has("default"))try{f.set("default",new AudioContext)}catch{return null}return f.get("default")}var m=new WeakMap;function k(o,t){if(m.has(o))return m.get(o);let e=t.createMediaElementSource(o);return m.set(o,e),e}var y=class extends u{#s=null;#n=null;#r=null;#e=null;#t=null;#h=null;#i=null;#l=null;#c=!0;#o=!1;#a=!1;#u=null;static get observedAttributes(){return["for","data-mode","data-fft-size"]}setup(){this.#a=window.matchMedia("(prefers-reduced-motion: reduce)").matches;let t=!this.shadowRoot;this.#y(),this.#f(),t&&(this.#M(),this.#E()),this.#u=()=>{let e=this.shadowRoot?.querySelector("canvas");e&&(e.style.display="none",e.offsetHeight,e.style.display="")},this.listen(window,"vb:theme-change",this.#u)}teardown(){this.#m(),this.#l?.disconnect()}attributeChangedCallback(t){t==="for"&&this.#f()}#y(){if(this.shadowRoot)return;let t=this.attachShadow({mode:"open"});t.innerHTML=`
2
2
  <style>
3
3
  :host {
4
4
  display: block;
@@ -16,5 +16,5 @@ var S=window.matchMedia("(prefers-reduced-motion: reduce)");var v=new Map;functi
16
16
  }
17
17
  </style>
18
18
  <canvas aria-hidden="true"></canvas>
19
- `,this.#n=e.querySelector("canvas")}#u(){let e=this.getAttribute("for");e&&(this.#s=document.getElementById(e),!(!this.#s||this.#s.tagName!=="AUDIO")&&(this.#r||this.#s.addEventListener("play",()=>this.#y(),{once:!0})))}#y(){if(this.#r||(this.#r=!0,this.#t=E(),!this.#t))return;this.#t.state==="suspended"&&this.#t.resume();let e=parseInt(this.getAttribute("data-fft-size")||"256",10);this.#e=this.#t.createAnalyser(),this.#e.fftSize=e,this.#e.smoothingTimeConstant=.8,this.#l=k(this.#s,this.#t),this.#l.connect(this.#e),this.#e.connect(this.#t.destination),this.#d()}#d(){if(this.#o)return;let e=()=>{if(!this.#a||this.#o){this.#i=null;return}this.#i=requestAnimationFrame(e),this.#b()};this.#i=requestAnimationFrame(e)}#f(){this.#i&&(cancelAnimationFrame(this.#i),this.#i=null)}#b(){let e=this.#n,t=e.getContext("2d");if(!t)return;let n=e.width=e.offsetWidth*(window.devicePixelRatio||1),s=e.height=e.offsetHeight*(window.devicePixelRatio||1),i=getComputedStyle(this),c=i.getPropertyValue("--_color").trim()||"oklch(55% 0.2 260)",a=i.getPropertyValue("--_bg").trim();if(t.clearRect(0,0,n,s),a&&a!=="transparent"&&(t.fillStyle=a,t.fillRect(0,0,n,s)),!this.#e)return;let d=this.getAttribute("data-mode")||"bars",l=this.#e.frequencyBinCount,r=new Uint8Array(l);d==="waveform"?(this.#e.getByteTimeDomainData(r),this.#g(t,n,s,c,r)):d==="circle"?(this.#e.getByteFrequencyData(r),this.#v(t,n,s,c,r)):(this.#e.getByteFrequencyData(r),this.#p(t,n,s,c,r))}#p(e,t,n,s,i){let c=Math.min(i.length,64),a=t/c-1;e.fillStyle=s;for(let d=0;d<c;d++){let r=i[d]/255*n,h=d*(t/c);e.fillRect(h,n-r,a,r)}}#g(e,t,n,s,i){let c=t/i.length;e.strokeStyle=s,e.lineWidth=2,e.beginPath();for(let a=0;a<i.length;a++){let l=i[a]/128*n/2;a===0?e.moveTo(0,l):e.lineTo(a*c,l)}e.stroke()}#v(e,t,n,s,i){let c=t/2,a=n/2,d=Math.min(t,n)*.25,l=i.length;e.strokeStyle=s,e.lineWidth=2,e.beginPath();for(let r=0;r<l;r++){let h=r/l*Math.PI*2,M=i[r]/255*(d*.8),b=d+M,p=c+b*Math.cos(h),g=a+b*Math.sin(h);r===0?e.moveTo(p,g):e.lineTo(p,g)}e.closePath(),e.stroke()}#w(){this.#c=new IntersectionObserver(([e])=>{this.#a=e.isIntersecting,this.#a&&this.#r&&!this.#i&&!this.#o&&this.#d()}),this.#c.observe(this)}#M(){window.matchMedia("(prefers-reduced-motion: reduce)").addEventListener("change",e=>{this.#o=e.matches,e.matches?this.#f():this.#r&&this.#a&&this.#d()})}};w("audio-visualizer",y);export{y as AudioVisualizerElement};
19
+ `,this.#s=t.querySelector("canvas")}#f(){let t=this.getAttribute("for");t&&(this.#r=document.getElementById(t),!(!this.#r||this.#r.tagName!=="AUDIO")&&(this.#o||this.#r.addEventListener("play",()=>this.#b(),{once:!0})))}#b(){if(this.#o||(this.#o=!0,this.#e=E(),!this.#e))return;this.#e.state==="suspended"&&this.#e.resume();let t=parseInt(this.getAttribute("data-fft-size")||"256",10);this.#t=this.#e.createAnalyser(),this.#t.fftSize=t,this.#t.smoothingTimeConstant=.8,this.#h=k(this.#r,this.#e),this.#h.connect(this.#t),this.#t.connect(this.#e.destination),this.#d()}#d(){if(this.#a)return;let t=()=>{if(!this.#c||this.#a){this.#i=null;return}this.#i=requestAnimationFrame(t),this.#p()};this.#i=requestAnimationFrame(t)}#m(){this.#i&&(cancelAnimationFrame(this.#i),this.#i=null)}#p(){let t=this.#s,e=t.getContext("2d");if(!e)return;let i=t.width=t.offsetWidth*(window.devicePixelRatio||1),n=t.height=t.offsetHeight*(window.devicePixelRatio||1),s=getComputedStyle(this),c=s.getPropertyValue("--_color").trim()||"oklch(55% 0.2 260)",a=s.getPropertyValue("--_bg").trim();if(e.clearRect(0,0,i,n),a&&a!=="transparent"&&(e.fillStyle=a,e.fillRect(0,0,i,n)),!this.#t)return;let l=this.getAttribute("data-mode")||"bars",d=this.#t.frequencyBinCount,r=new Uint8Array(d);l==="waveform"?(this.#t.getByteTimeDomainData(r),this.#v(e,i,n,c,r)):l==="circle"?(this.#t.getByteFrequencyData(r),this.#w(e,i,n,c,r)):(this.#t.getByteFrequencyData(r),this.#g(e,i,n,c,r))}#g(t,e,i,n,s){let c=Math.min(s.length,64),a=e/c-1;t.fillStyle=n;for(let l=0;l<c;l++){let r=s[l]/255*i,h=l*(e/c);t.fillRect(h,i-r,a,r)}}#v(t,e,i,n,s){let c=e/s.length;t.strokeStyle=n,t.lineWidth=2,t.beginPath();for(let a=0;a<s.length;a++){let d=s[a]/128*i/2;a===0?t.moveTo(0,d):t.lineTo(a*c,d)}t.stroke()}#w(t,e,i,n,s){let c=e/2,a=i/2,l=Math.min(e,i)*.25,d=s.length;t.strokeStyle=n,t.lineWidth=2,t.beginPath();for(let r=0;r<d;r++){let h=r/d*Math.PI*2,M=s[r]/255*(l*.8),b=l+M,p=c+b*Math.cos(h),g=a+b*Math.sin(h);r===0?t.moveTo(p,g):t.lineTo(p,g)}t.closePath(),t.stroke()}#M(){this.#l=new IntersectionObserver(([t])=>{this.#c=t.isIntersecting,this.#c&&this.#o&&!this.#i&&!this.#a&&this.#d()}),this.#l.observe(this)}#E(){window.matchMedia("(prefers-reduced-motion: reduce)").addEventListener("change",t=>{this.#a=t.matches,t.matches?this.#m():this.#o&&this.#c&&this.#d()})}};w("audio-visualizer",y);export{y as AudioVisualizerElement};
20
20
  //# sourceMappingURL=audio-visualizer.js.map
@@ -1,3 +1,3 @@
1
- var y=window.matchMedia("(prefers-reduced-motion: reduce)");var g=new Map;function b(s,t,e={}){let n=e.priority??10,o={impl:t,bundle:e.bundle,contract:e.contract,priority:n},r=g.get(s);if(customElements.get(s)){if(!r||r.priority>=n){r&&r.priority===n&&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>=n){r.priority===n&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${r.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}g.set(s,o),customElements.define(s,t)}var d=class extends HTMLElement{#e=[];connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&this.setAttribute("data-upgraded","")}disconnectedCallback(){for(let t of this.#e)t();this.#e=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,e,n,o){t.addEventListener(e,n,o),this.#e.push(()=>t.removeEventListener(e,n,o))}setup(){}teardown(){}};var f=class extends d{setup(){let t=this.getAttribute("data-lens-src")||this.getAttribute("src");t?this.#e(t).catch(()=>{}):this.#t()}async#e(t){let e;try{let o=await fetch(t);if(!o.ok)throw new Error(`status ${o.status}`);e=await o.json()}catch(o){this.#n(`Could not load ${t}: ${o.message}`);return}let n=Array.isArray(e)?e:e.pages||[];this.#r(n),this.#t()}#r(t){let e=new Map;for(let c of t){let i=c.author?.trim()||"Unknown";e.has(i)||e.set(i,[]),e.get(i).push(c)}let n=this.getAttribute("sort")||"alpha",o=[...e.entries()].sort(([c,i],[u,p])=>n==="count"?p.length-i.length:c.localeCompare(u)),r=[`<h2 class="author-index-heading">Authors <small>(${o.length})</small></h2>`];for(let[c,i]of o){let u=i[0],p=c.toLowerCase().replace(/[^a-z0-9]+/g,"-");r.push(`<details data-author-group id="author-${p}">`),r.push(`<summary><span class="author-name">${l(c)}</span> <span class="author-count">${i.length}</span></summary>`),u.authorUrl&&r.push(`<p class="author-link"><a href="${h(u.authorUrl)}" rel="author">View ${l(c)}'s profile</a></p>`),r.push('<ul class="author-pages">');for(let a of i){let m=[a.modified?`<time datetime="${h(a.modified)}">${l(a.modified)}</time>`:"",a.provenance?`<span class="author-prov" data-provenance="${h(a.provenance)}">${l(a.provenance)}</span>`:"",a.signed?'<span class="author-signed" title="Cryptographically signed">signed</span>':""].filter(Boolean).join(" \xB7 ");r.push(`<li><a href="${h(a.url)}">${l(a.title||a.url)}</a>${m?`<small>${m}</small>`:""}</li>`)}r.push("</ul></details>")}this.innerHTML=r.join(`
2
- `)}#n(t){if(this.children.length>0)return;let e=document.createElement("p");e.setAttribute("data-author-index-error",""),e.textContent=t,this.append(e)}#t(){if(!this.querySelector("[data-author-index-search]")){let t=this.getAttribute("placeholder")||"Filter authors\u2026",e=document.createElement("input");e.type="search",e.placeholder=t,e.setAttribute("data-author-index-search",""),e.setAttribute("aria-label",t),e.addEventListener("input",()=>this.#o(e.value)),this.prepend(e)}}#o(t){let e=t.trim().toLowerCase();for(let n of this.querySelectorAll("[data-author-group]")){let o=n.textContent.toLowerCase();n.hidden=e&&!o.includes(e)}}};function l(s){return String(s??"").replace(/[&<>]/g,t=>({"&":"&amp;","<":"&lt;",">":"&gt;"})[t])}function h(s){return String(s??"").replace(/[&<>"]/g,t=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[t])}b("author-index",f);export{f as AuthorIndex};
1
+ var y=window.matchMedia("(prefers-reduced-motion: reduce)");var g=new Map;function b(o,t,e={}){let n=e.priority??10,s={impl:t,bundle:e.bundle,contract:e.contract,priority:n},r=g.get(o);if(customElements.get(o)){if(!r||r.priority>=n){r&&r.priority===n&&r.impl!==t&&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>=n){r.priority===n&&console.warn(`[VB Bundle] Tag <${o}> already registered by "${r.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}g.set(o,s),customElements.define(o,t)}var d=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 t of this.#t)t();this.#t=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,e,n,s){t.addEventListener(e,n,s),this.#t.push(()=>t.removeEventListener(e,n,s))}setup(){}teardown(){}setState(t,e){this.#e||(this.#e=this.attachInternals());let n=this.#e.states;try{e?n.add(t):n.delete(t)}catch{let s=`--${t}`;e?n.add(s):n.delete(s)}}_adoptInternals(t){this.#e||(this.#e=t)}};var f=class extends d{setup(){let t=this.getAttribute("data-lens-src")||this.getAttribute("src");t?this.#t(t).catch(()=>{}):this.#r()}async#t(t){let e;try{let s=await fetch(t);if(!s.ok)throw new Error(`status ${s.status}`);e=await s.json()}catch(s){this.#n(`Could not load ${t}: ${s.message}`);return}let n=Array.isArray(e)?e:e.pages||[];this.#e(n),this.#r()}#e(t){let e=new Map;for(let c of t){let a=c.author?.trim()||"Unknown";e.has(a)||e.set(a,[]),e.get(a).push(c)}let n=this.getAttribute("sort")||"alpha",s=[...e.entries()].sort(([c,a],[u,p])=>n==="count"?p.length-a.length:c.localeCompare(u)),r=[`<h2 class="author-index-heading">Authors <small>(${s.length})</small></h2>`];for(let[c,a]of s){let u=a[0],p=c.toLowerCase().replace(/[^a-z0-9]+/g,"-");r.push(`<details data-author-group id="author-${p}">`),r.push(`<summary><span class="author-name">${l(c)}</span><span class="author-count" aria-label="${a.length} ${a.length===1?"page":"pages"}">(${a.length})</span></summary>`),u.authorUrl&&r.push(`<p class="author-link"><a href="${h(u.authorUrl)}" rel="author">View ${l(c)}'s profile</a></p>`),r.push('<ul class="author-pages">');for(let i of a){let m=[i.modified?`<time datetime="${h(i.modified)}">${l(i.modified)}</time>`:"",i.provenance?`<span class="author-prov" data-provenance="${h(i.provenance)}">${l(i.provenance)}</span>`:"",i.signed?'<span class="author-signed" title="Cryptographically signed">signed</span>':""].filter(Boolean).join(" \xB7 ");r.push(`<li><a href="${h(i.url)}">${l(i.title||i.url)}</a>${m?`<small>${m}</small>`:""}</li>`)}r.push("</ul></details>")}this.innerHTML=r.join(`
2
+ `)}#n(t){if(this.children.length>0)return;let e=document.createElement("p");e.setAttribute("data-author-index-error",""),e.textContent=t,this.append(e)}#r(){if(!this.querySelector("[data-author-index-search]")){let t=this.getAttribute("placeholder")||"Filter authors\u2026",e=document.createElement("input");e.type="search",e.placeholder=t,e.setAttribute("data-author-index-search",""),e.setAttribute("aria-label",t),e.addEventListener("input",()=>this.#s(e.value)),this.prepend(e)}}#s(t){let e=t.trim().toLowerCase();for(let n of this.querySelectorAll("[data-author-group]")){let s=n,r=(s.textContent||"").toLowerCase();s.hidden=!!e&&!r.includes(e)}}};function l(o){return String(o??"").replace(/[&<>]/g,t=>({"&":"&amp;","<":"&lt;",">":"&gt;"})[t])}function h(o){return String(o??"").replace(/[&<>"]/g,t=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[t])}b("author-index",f);export{f as AuthorIndex};
3
3
  //# sourceMappingURL=author-index.js.map
@@ -1,2 +1,2 @@
1
- var a=class extends HTMLElement{#e=[];connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&this.setAttribute("data-upgraded","")}disconnectedCallback(){for(let t of this.#e)t();this.#e=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,e,n,s){t.addEventListener(e,n,s),this.#e.push(()=>t.removeEventListener(e,n,s))}setup(){}teardown(){}};var p=window.matchMedia("(prefers-reduced-motion: reduce)");var h=new Map;function f(i,t,e={}){let n=e.priority??10,s={impl:t,bundle:e.bundle,contract:e.contract,priority:n},r=h.get(i);if(customElements.get(i)){if(!r||r.priority>=n){r&&r.priority===n&&r.impl!==t&&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>=n){r.priority===n&&console.warn(`[VB Bundle] Tag <${i}> already registered by "${r.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}h.set(i,s),customElements.define(i,t)}var l=class extends a{static observedAttributes=["src","src-dark","src-compact","alt","wordmark","height"];#e="";#t=null;#r=null;setup(){this.#e=this.#c(),this.hasAttribute("src-dark")&&this.#s(),this.#i()}teardown(){this.#t?.removeEventListener("change",this.#n),this.#t=null,this.#r?.disconnect(),this.#r=null}attributeChangedCallback(t,e,n){e!==n&&(!this.isConnected||!this.hasAttribute("data-upgraded")||(t==="src-dark"&&(n?this.#s():(this.#t?.removeEventListener("change",this.#n),this.#r?.disconnect())),this.#i()))}#o(){let t=document.documentElement.getAttribute("data-mode");return t==="dark"?!0:t==="light"?!1:this.#t?.matches??!1}#s(){this.#t||(this.#t=matchMedia("(prefers-color-scheme: dark)"),this.#t.addEventListener("change",this.#n)),this.#r||(this.#r=new MutationObserver(this.#n),this.#r.observe(document.documentElement,{attributes:!0,attributeFilter:["data-mode"]}))}#n=()=>{this.isConnected&&this.#i()};#i(){let t=this.getAttribute("src"),e=this.getAttribute("src-dark"),n=e&&this.#o()?e:t;if(!n){this.#e&&this.querySelector("img")&&(this.replaceChildren(document.createTextNode(this.#e)),this.removeAttribute("aria-label"));return}let s=this.#e||this.getAttribute("alt")||"",r=this.hasAttribute("wordmark"),u=this.getAttribute("height");if(this.querySelector("img")?.getAttribute("src")===n){let o=this.querySelector(".brand-mark-wordmark");if(r&&!o){let d=document.createElement("span");d.className="brand-mark-wordmark",d.textContent=s,this.appendChild(d)}else!r&&o&&o.remove();return}let c=document.createElement("img");if(c.src=n,c.alt=r?"":s,c.decoding="async",u&&(c.height=parseInt(u,10)),r){let o=document.createElement("span");o.className="brand-mark-wordmark",o.textContent=s,this.replaceChildren(c,o)}else this.replaceChildren(c),this.getAttribute("alt")||this.setAttribute("aria-label",s)}#c(){let t="";for(let e of this.childNodes)(e.nodeType===Node.TEXT_NODE||e.nodeType===Node.ELEMENT_NODE&&e.tagName!=="IMG")&&(t+=e.textContent);return t.trim()}};f("brand-mark",l);
1
+ var c=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 t of this.#t)t();this.#t=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,e,r,s){t.addEventListener(e,r,s),this.#t.push(()=>t.removeEventListener(e,r,s))}setup(){}teardown(){}setState(t,e){this.#e||(this.#e=this.attachInternals());let r=this.#e.states;try{e?r.add(t):r.delete(t)}catch{let s=`--${t}`;e?r.add(s):r.delete(s)}}_adoptInternals(t){this.#e||(this.#e=t)}};var p=window.matchMedia("(prefers-reduced-motion: reduce)");var u=new Map;function f(n,t,e={}){let r=e.priority??10,s={impl:t,bundle:e.bundle,contract:e.contract,priority:r},i=u.get(n);if(customElements.get(n)){if(!i||i.priority>=r){i&&i.priority===r&&i.impl!==t&&console.warn(`[VB Bundle] Tag <${n}> already registered by "${i.bundle}" (priority ${i.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${n}> defined by "${i.bundle}" cannot be replaced (customElements.define is permanent). "${e.bundle}" has higher priority but arrived late.`);return}if(i&&i.priority>=r){i.priority===r&&console.warn(`[VB Bundle] Tag <${n}> already registered by "${i.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}u.set(n,s),customElements.define(n,t)}var h=class extends c{static observedAttributes=["src","src-dark","src-compact","alt","wordmark","height"];#t="";#e=null;#i=null;#s=!1;setup(){this.#t=this.#c(),this.hasAttribute("src-dark")&&this.#o(),this.#n()}teardown(){this.#e?.removeEventListener("change",this.#r),this.#e=null,this.#i?.disconnect(),this.#i=null,this.#s&&(window.removeEventListener("vb:theme-change",this.#r),this.#s=!1)}attributeChangedCallback(t,e,r){e!==r&&(!this.isConnected||!this.hasAttribute("data-upgraded")||(t==="src-dark"&&(r?this.#o():(this.#e?.removeEventListener("change",this.#r),this.#i?.disconnect(),this.#s&&(window.removeEventListener("vb:theme-change",this.#r),this.#s=!1))),this.#n()))}#a(){let t=document.documentElement.getAttribute("data-mode");if(t==="dark")return!0;if(t==="light")return!1;let e=getComputedStyle(this).colorScheme||"";return/\bdark\b/.test(e)&&!/\blight\b/.test(e)?!0:/\blight\b/.test(e)&&!/\bdark\b/.test(e)?!1:this.#e?.matches??!1}#o(){this.#e||(this.#e=matchMedia("(prefers-color-scheme: dark)"),this.#e.addEventListener("change",this.#r)),this.#i||(this.#i=new MutationObserver(()=>this.#r(void 0)),this.#i.observe(document.documentElement,{attributes:!0,attributeFilter:["data-mode","data-theme"]})),this.#s||(window.addEventListener("vb:theme-change",this.#r),this.#s=!0)}#r=()=>{this.isConnected&&this.#n()};#n(){let t=this.getAttribute("src"),e=this.getAttribute("src-dark"),r=e&&this.#a()?e:t;if(!r){this.#t&&this.querySelector("img")&&(this.replaceChildren(document.createTextNode(this.#t)),this.removeAttribute("aria-label"));return}let s=this.#t||this.getAttribute("alt")||"",i=this.hasAttribute("wordmark"),l=this.getAttribute("height");if(this.querySelector("img")?.getAttribute("src")===r){let o=this.querySelector(".brand-mark-wordmark");if(i&&!o){let d=document.createElement("span");d.className="brand-mark-wordmark",d.textContent=s,this.appendChild(d)}else!i&&o&&o.remove();return}let a=document.createElement("img");if(a.src=r,a.alt=i?"":s,a.decoding="async",l&&(a.height=parseInt(l,10)),i){let o=document.createElement("span");o.className="brand-mark-wordmark",o.textContent=s,this.replaceChildren(a,o)}else this.replaceChildren(a),this.getAttribute("alt")||this.setAttribute("aria-label",s)}#c(){let t="";for(let e of this.childNodes)(e.nodeType===Node.TEXT_NODE||e.nodeType===Node.ELEMENT_NODE&&e.tagName!=="IMG")&&(t+=e.textContent);return t.trim()}};f("brand-mark",h);
2
2
  //# sourceMappingURL=brand-mark.js.map
@@ -0,0 +1,2 @@
1
+ var w=window.matchMedia("(prefers-reduced-motion: reduce)");var y=new Map;function E(i,e,r={}){let t=r.priority??10,o={impl:e,bundle:r.bundle,contract:r.contract,priority:t},n=y.get(i);if(customElements.get(i)){if(!n||n.priority>=t){n&&n.priority===t&&n.impl!==e&&console.warn(`[VB Bundle] Tag <${i}> already registered by "${n.bundle}" (priority ${n.priority}). Skipping "${r.bundle}".`);return}console.warn(`[VB Bundle] Tag <${i}> defined by "${n.bundle}" cannot be replaced (customElements.define is permanent). "${r.bundle}" has higher priority but arrived late.`);return}if(n&&n.priority>=t){n.priority===t&&console.warn(`[VB Bundle] Tag <${i}> already registered by "${n.bundle}". Skipping "${r.bundle}" (first wins at equal priority).`);return}y.set(i,o),customElements.define(i,e)}var h=class extends HTMLElement{#e=[];#t;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.#e)e();this.#e=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(e,r,t,o){e.addEventListener(r,t,o),this.#e.push(()=>e.removeEventListener(r,t,o))}setup(){}teardown(){}setState(e,r){this.#t||(this.#t=this.attachInternals());let t=this.#t.states;try{r?t.add(e):t.delete(e)}catch{let o=`--${e}`;r?t.add(o):t.delete(o)}}_adoptInternals(e){this.#t||(this.#t=e)}};var g="Home",f=class extends h{#e={};setup(){this.hasAttribute("role")||this.setAttribute("role","navigation"),this.hasAttribute("aria-label")||this.setAttribute("aria-label","Breadcrumb"),this.hasAttribute("data-from-pathname")?this.#t():this.#i(),this.#n(),this.#r()}get labels(){return{...this.#e}}set labels(e){!e||typeof e!="object"||(this.#e={...e},this.hasAttribute("data-from-pathname")&&(this.#t(),this.#n(),this.#r()))}#t(){let r=window.location.pathname.split("/").filter(Boolean),t=document.createElement("ol"),o=document.createElement("li"),n=document.createElement("a");n.href="/",n.textContent=this.#e["/"]||this.#e.home||g,o.appendChild(n),t.appendChild(o);let c="";r.forEach((l,u)=>{c+=`/${l}`;let d=u===r.length-1,p=document.createElement("li"),m=`${c}/`,b=this.#e[m]||this.#e[c]||this.#e[l]||d&&this.dataset.currentLabel||this.#o(l);if(d){let s=document.createElement("span");s.setAttribute("aria-current","page"),s.textContent=b,p.appendChild(s)}else{let s=document.createElement("a");s.href=m,s.textContent=b,p.appendChild(s)}t.appendChild(p)});let a=this.querySelector(":scope > ol");a?a.replaceWith(t):this.prepend(t)}#o(e){return e.replace(/[-_]+/g," ").replace(/\w\S*/g,r=>r[0].toUpperCase()+r.slice(1))}#i(){if(this.querySelector(":scope > ol"))return;let r=Array.from(this.querySelectorAll(":scope > a, :scope > span"));if(r.length===0)return;let t=document.createElement("ol");r.forEach(o=>{let n=document.createElement("li");n.appendChild(o),t.appendChild(n)}),this.prepend(t)}#n(){let e=this.querySelectorAll(":scope > ol > li");e.length!==0&&e.forEach((r,t)=>{let o=t===e.length-1,n=r.querySelector("a, span");n&&(o?n.setAttribute("aria-current","page"):n.removeAttribute("aria-current"))})}#r(){if(this.dataset.jsonld==="off")return;let e=Array.from(this.querySelectorAll(":scope > ol > li"));if(e.length===0)return;let t={"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:e.map((n,c)=>{let a=n.querySelector("a, span"),l=a?.textContent?.trim()||"",u=a?.getAttribute("href"),d=u?new URL(u,window.location.origin).href:void 0;return{"@type":"ListItem",position:c+1,name:l,...d?{item:d}:{}}})},o=this.querySelector(':scope > script[type="application/ld+json"]');o||(o=document.createElement("script"),o.type="application/ld+json",this.appendChild(o)),o.textContent=JSON.stringify(t)}};E("bread-crumb",f);
2
+ //# sourceMappingURL=bread-crumb.js.map