vanilla-breeze 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (282) hide show
  1. package/custom-elements.json +25084 -6649
  2. package/dist/cdn/components/accessibility-specimen.js +11 -0
  3. package/dist/cdn/components/accordion-wc.js +1 -1
  4. package/dist/cdn/components/activity-feed.js +2 -0
  5. package/dist/cdn/components/adr-wc.js +17 -17
  6. package/dist/cdn/components/ai-chat.js +28 -0
  7. package/dist/cdn/components/ai-summary.js +10 -0
  8. package/dist/cdn/components/analytics-panel.js +5 -5
  9. package/dist/cdn/components/audio-player.js +3 -3
  10. package/dist/cdn/components/audio-visualizer.js +2 -2
  11. package/dist/cdn/components/author-index.js +2 -2
  12. package/dist/cdn/components/brand-mark.js +1 -1
  13. package/dist/cdn/components/bread-crumb.js +2 -0
  14. package/dist/cdn/components/breakpoint-specimen.js +26 -0
  15. package/dist/cdn/components/burndown-chart.js +2 -0
  16. package/dist/cdn/components/calendar-wc.js +2 -2
  17. package/dist/cdn/components/capacity-plan.js +25 -0
  18. package/dist/cdn/components/card-list.js +1 -1
  19. package/dist/cdn/components/carousel-wc.js +1 -1
  20. package/dist/cdn/components/change-set.js +2 -2
  21. package/dist/cdn/components/chart-wc.js +58 -36
  22. package/dist/cdn/components/chat-input.js +1 -1
  23. package/dist/cdn/components/chat-window.js +1 -1
  24. package/dist/cdn/components/color-palette.js +9 -9
  25. package/dist/cdn/components/color-picker.js +1 -1
  26. package/dist/cdn/components/combo-box.js +1 -1
  27. package/dist/cdn/components/command-palette.js +1 -1
  28. package/dist/cdn/components/comment-box.js +60 -0
  29. package/dist/cdn/components/comment-thread.js +60 -0
  30. package/dist/cdn/components/comment-wc.js +1 -1
  31. package/dist/cdn/components/compare-surface.js +1 -1
  32. package/dist/cdn/components/component-sampler.js +2 -2
  33. package/dist/cdn/components/consent-banner.js +1 -1
  34. package/dist/cdn/components/content-lens.js +1 -1
  35. package/dist/cdn/components/content-swap.js +1 -1
  36. package/dist/cdn/components/context-menu.js +1 -1
  37. package/dist/cdn/components/data-table.js +1 -1
  38. package/dist/cdn/components/date-picker.js +1 -1
  39. package/dist/cdn/components/day-view.js +1 -1
  40. package/dist/cdn/components/diagram-wc.js +3 -0
  41. package/dist/cdn/components/drag-surface.js +1 -1
  42. package/dist/cdn/components/drop-down.js +1 -1
  43. package/dist/cdn/components/emoji-picker.js +1 -1
  44. package/dist/cdn/components/empathy-map.js +41 -43
  45. package/dist/cdn/components/flow-diagram.js +1 -1
  46. package/dist/cdn/components/font-pairer.js +81 -81
  47. package/dist/cdn/components/foot-notes.js +1 -1
  48. package/dist/cdn/components/form-field.js +1 -1
  49. package/dist/cdn/components/gantt-chart.js +1 -1
  50. package/dist/cdn/components/geo-map.js +25 -23
  51. package/dist/cdn/components/glossary-index.js +1 -1
  52. package/dist/cdn/components/glossary-wc.js +1 -1
  53. package/dist/cdn/components/gradient-builder.js +29 -29
  54. package/dist/cdn/components/heading-links.js +1 -1
  55. package/dist/cdn/components/highlight-wc.js +2 -2
  56. package/dist/cdn/components/icon-wc.js +4 -4
  57. package/dist/cdn/components/image-gallery.js +1 -1
  58. package/dist/cdn/components/image-map.js +1 -1
  59. package/dist/cdn/components/impact-effort.js +1 -1
  60. package/dist/cdn/components/include-file.js +1 -1
  61. package/dist/cdn/components/iron-triangle.js +2 -0
  62. package/dist/cdn/components/kanban-board.js +1 -1
  63. package/dist/cdn/components/layout-specimen.js +35 -0
  64. package/dist/cdn/components/manifest.json +227 -103
  65. package/dist/cdn/components/markdown-editor.js +1 -1
  66. package/dist/cdn/components/markdown-viewer.js +12 -12
  67. package/dist/cdn/components/motion-specimen.js +12 -12
  68. package/dist/cdn/components/nav-bar.js +2 -0
  69. package/dist/cdn/components/note-wc.js +2 -2
  70. package/dist/cdn/components/notification-wc.js +4 -4
  71. package/dist/cdn/components/page-info.js +4 -4
  72. package/dist/cdn/components/page-stats.js +1 -1
  73. package/dist/cdn/components/page-toc.js +1 -1
  74. package/dist/cdn/components/page-tools.js +1 -1
  75. package/dist/cdn/components/page-tour.js +6 -6
  76. package/dist/cdn/components/pager-wc.js +2 -0
  77. package/dist/cdn/components/palette-generator.js +11 -11
  78. package/dist/cdn/components/poll-wc.js +2 -0
  79. package/dist/cdn/components/pop-over.js +2 -0
  80. package/dist/cdn/components/popularity-index.js +2 -2
  81. package/dist/cdn/components/print-page.js +1 -1
  82. package/dist/cdn/components/product-roadmap.js +3 -0
  83. package/dist/cdn/components/progress-tracker.js +2 -0
  84. package/dist/cdn/components/qr-code.js +1 -1
  85. package/dist/cdn/components/quadrant-grid.js +3 -0
  86. package/dist/cdn/components/quality-target.js +12 -0
  87. package/dist/cdn/components/reaction-bar.js +2 -0
  88. package/dist/cdn/components/reader-view.js +3 -3
  89. package/dist/cdn/components/reading-progress.js +2 -0
  90. package/dist/cdn/components/recently-visited.js +10 -10
  91. package/dist/cdn/components/requirement-card.js +122 -0
  92. package/dist/cdn/components/review-surface.js +34 -40
  93. package/dist/cdn/components/risk-register.js +25 -0
  94. package/dist/cdn/components/roadmap.js +3 -0
  95. package/dist/cdn/components/score-card.js +197 -0
  96. package/dist/cdn/components/selection-menu.js +1 -1
  97. package/dist/cdn/components/semantic-palette.js +15 -15
  98. package/dist/cdn/components/settings-panel.js +12 -12
  99. package/dist/cdn/components/share-wc.js +2 -2
  100. package/dist/cdn/components/short-cuts.js +1 -1
  101. package/dist/cdn/components/site-index.js +4 -4
  102. package/dist/cdn/components/site-map-wc.js +1 -1
  103. package/dist/cdn/components/site-map.js +1 -1
  104. package/dist/cdn/components/site-search.js +9 -9
  105. package/dist/cdn/components/slide-accept.js +1 -1
  106. package/dist/cdn/components/social-embed.js +1 -1
  107. package/dist/cdn/components/spacing-specimen.js +5 -5
  108. package/dist/cdn/components/split-surface.js +1 -1
  109. package/dist/cdn/components/star-rating.js +1 -1
  110. package/dist/cdn/components/status-wc.js +2 -0
  111. package/dist/cdn/components/stepper-wc.js +2 -0
  112. package/dist/cdn/components/story-map.js +1 -1
  113. package/dist/cdn/components/tab-set.js +1 -1
  114. package/dist/cdn/components/text-reader.js +2 -2
  115. package/dist/cdn/components/theme-catalog.js +28 -0
  116. package/dist/cdn/components/theme-export.js +20 -12
  117. package/dist/cdn/components/theme-import.js +44 -0
  118. package/dist/cdn/components/theme-picker.js +29 -26
  119. package/dist/cdn/components/time-index.js +2 -2
  120. package/dist/cdn/components/time-picker.js +1 -1
  121. package/dist/cdn/components/toast-msg.js +3 -3
  122. package/dist/cdn/components/token-specimen.js +14 -14
  123. package/dist/cdn/components/tool-tip.js +1 -1
  124. package/dist/cdn/components/topic-map.js +3 -3
  125. package/dist/cdn/components/traceability-matrix.js +3 -0
  126. package/dist/cdn/components/trust-filter.js +3 -3
  127. package/dist/cdn/components/type-specimen.js +15 -15
  128. package/dist/cdn/components/user-journey.js +63 -70
  129. package/dist/cdn/components/user-persona.js +75 -13
  130. package/dist/cdn/components/user-story.js +12 -11
  131. package/dist/cdn/components/version-switcher.js +17 -0
  132. package/dist/cdn/components/video-player.js +3 -3
  133. package/dist/cdn/components/watch-wc.js +2 -2
  134. package/dist/cdn/components/week-view.js +1 -1
  135. package/dist/cdn/components/work-item.js +29 -28
  136. package/dist/cdn/components/youtube-player.js +1 -1
  137. package/dist/cdn/icons/bold.css +17 -0
  138. package/dist/cdn/icons/bold.json +1 -0
  139. package/dist/cdn/icons/custom.css +6 -0
  140. package/dist/cdn/icons/custom.json +1 -0
  141. package/dist/cdn/icons/lucide.css +1914 -0
  142. package/dist/cdn/icons/lucide.json +1 -0
  143. package/dist/cdn/icons/mage.css +17 -0
  144. package/dist/cdn/icons/mage.json +1 -0
  145. package/dist/cdn/icons/phosphor.css +17 -0
  146. package/dist/cdn/icons/phosphor.json +1 -0
  147. package/dist/cdn/icons/tabler.css +17 -0
  148. package/dist/cdn/icons/tabler.json +1 -0
  149. package/dist/cdn/packs/design-system.full.js +59 -51
  150. package/dist/cdn/packs/effects.full.js +1 -1
  151. package/dist/cdn/packs/icons.effects.js +1 -1
  152. package/dist/cdn/packs/icons.full.js +1 -1
  153. package/dist/cdn/packs/kawaii.full.css +1 -1
  154. package/dist/cdn/packs/kawaii.full.js +6 -6
  155. package/dist/cdn/packs/kawaii.theme.css +1 -1
  156. package/dist/cdn/packs/manifest.json +11 -11
  157. package/dist/cdn/packs/ui.full.css +1 -1
  158. package/dist/cdn/packs/ui.full.js +54 -51
  159. package/dist/cdn/packs/ux-planning.full.css +1 -1
  160. package/dist/cdn/packs/ux-planning.full.js +318 -243
  161. package/dist/cdn/themes/8bit.css +1 -1
  162. package/dist/cdn/themes/8bit.tokens.json +662 -0
  163. package/dist/cdn/themes/alpha1999-dark.tokens.json +693 -0
  164. package/dist/cdn/themes/alpha1999.css +1 -1
  165. package/dist/cdn/themes/alpha1999.tokens.json +869 -0
  166. package/dist/cdn/themes/anthropic.css +2 -0
  167. package/dist/cdn/themes/anthropic.tokens.json +564 -0
  168. package/dist/cdn/themes/art-deco-dark.tokens.json +407 -0
  169. package/dist/cdn/themes/art-deco.css +1 -1
  170. package/dist/cdn/themes/art-deco.tokens.json +581 -0
  171. package/dist/cdn/themes/bauhaus-dark.tokens.json +260 -0
  172. package/dist/cdn/themes/bauhaus.css +1 -1
  173. package/dist/cdn/themes/bauhaus.tokens.json +589 -0
  174. package/dist/cdn/themes/brutalist-dark.tokens.json +503 -0
  175. package/dist/cdn/themes/brutalist.tokens.json +677 -0
  176. package/dist/cdn/themes/catalog/atlassian.tokens.json +303 -0
  177. package/dist/cdn/themes/catalog/bootstrap.tokens.json +304 -0
  178. package/dist/cdn/themes/catalog/carbon.tokens.json +301 -0
  179. package/dist/cdn/themes/catalog/catppuccin-mocha.tokens.json +301 -0
  180. package/dist/cdn/themes/catalog/govuk.tokens.json +301 -0
  181. package/dist/cdn/themes/catalog/manifest.json +132 -0
  182. package/dist/cdn/themes/catalog/material.tokens.json +289 -0
  183. package/dist/cdn/themes/catalog/salesforce.tokens.json +301 -0
  184. package/dist/cdn/themes/catalog/tailwind.tokens.json +302 -0
  185. package/dist/cdn/themes/catppuccin-frappe.css +1 -1
  186. package/dist/cdn/themes/catppuccin-frappe.tokens.json +608 -0
  187. package/dist/cdn/themes/catppuccin-latte-dark.tokens.json +472 -0
  188. package/dist/cdn/themes/catppuccin-latte.css +1 -1
  189. package/dist/cdn/themes/catppuccin-latte.tokens.json +608 -0
  190. package/dist/cdn/themes/catppuccin-macchiato.css +1 -1
  191. package/dist/cdn/themes/catppuccin-macchiato.tokens.json +608 -0
  192. package/dist/cdn/themes/catppuccin-mocha.tokens.json +608 -0
  193. package/dist/cdn/themes/classic-dark.tokens.json +503 -0
  194. package/dist/cdn/themes/classic.tokens.json +640 -0
  195. package/dist/cdn/themes/claymorphism-dark.tokens.json +493 -0
  196. package/dist/cdn/themes/claymorphism.css +1 -1
  197. package/dist/cdn/themes/claymorphism.tokens.json +626 -0
  198. package/dist/cdn/themes/clinical-dark.tokens.json +472 -0
  199. package/dist/cdn/themes/clinical.tokens.json +608 -0
  200. package/dist/cdn/themes/cottagecore-dark.tokens.json +412 -0
  201. package/dist/cdn/themes/cottagecore.css +1 -1
  202. package/dist/cdn/themes/cottagecore.tokens.json +544 -0
  203. package/dist/cdn/themes/cyber.tokens.json +668 -0
  204. package/dist/cdn/themes/dawn-dark.tokens.json +472 -0
  205. package/dist/cdn/themes/dawn.css +1 -1
  206. package/dist/cdn/themes/dawn.tokens.json +608 -0
  207. package/dist/cdn/themes/dracula.tokens.json +534 -0
  208. package/dist/cdn/themes/dusk.tokens.json +533 -0
  209. package/dist/cdn/themes/editorial-dark.tokens.json +400 -0
  210. package/dist/cdn/themes/editorial.tokens.json +690 -0
  211. package/dist/cdn/themes/financial-dark.tokens.json +472 -0
  212. package/dist/cdn/themes/financial.css +1 -1
  213. package/dist/cdn/themes/financial.tokens.json +607 -0
  214. package/dist/cdn/themes/genai.tokens.json +534 -0
  215. package/dist/cdn/themes/glassmorphism-dark.tokens.json +489 -0
  216. package/dist/cdn/themes/glassmorphism.css +1 -1
  217. package/dist/cdn/themes/glassmorphism.tokens.json +632 -0
  218. package/dist/cdn/themes/government-dark.tokens.json +472 -0
  219. package/dist/cdn/themes/government.tokens.json +608 -0
  220. package/dist/cdn/themes/gruvbox-dark.tokens.json +472 -0
  221. package/dist/cdn/themes/gruvbox.tokens.json +608 -0
  222. package/dist/cdn/themes/high-noon-dark.tokens.json +397 -0
  223. package/dist/cdn/themes/high-noon.tokens.json +533 -0
  224. package/dist/cdn/themes/ibm.css +2 -0
  225. package/dist/cdn/themes/ibm.tokens.json +568 -0
  226. package/dist/cdn/themes/kawaii-dark.tokens.json +549 -0
  227. package/dist/cdn/themes/kawaii.css +1 -1
  228. package/dist/cdn/themes/kawaii.tokens.json +641 -0
  229. package/dist/cdn/themes/magna-dark.tokens.json +482 -0
  230. package/dist/cdn/themes/magna.css +1 -1
  231. package/dist/cdn/themes/magna.tokens.json +632 -0
  232. package/dist/cdn/themes/manifest.json +162 -62
  233. package/dist/cdn/themes/mcdonalds.css +2 -0
  234. package/dist/cdn/themes/mcdonalds.tokens.json +533 -0
  235. package/dist/cdn/themes/midnight.tokens.json +534 -0
  236. package/dist/cdn/themes/minimal-dark.tokens.json +294 -0
  237. package/dist/cdn/themes/minimal.tokens.json +494 -0
  238. package/dist/cdn/themes/modern-dark.tokens.json +490 -0
  239. package/dist/cdn/themes/modern.tokens.json +573 -0
  240. package/dist/cdn/themes/nes-dark.tokens.json +564 -0
  241. package/dist/cdn/themes/nes.css +1 -1
  242. package/dist/cdn/themes/nes.tokens.json +687 -0
  243. package/dist/cdn/themes/neumorphism-dark.tokens.json +471 -0
  244. package/dist/cdn/themes/neumorphism.css +1 -1
  245. package/dist/cdn/themes/neumorphism.tokens.json +589 -0
  246. package/dist/cdn/themes/nord-dark.tokens.json +484 -0
  247. package/dist/cdn/themes/nord.tokens.json +619 -0
  248. package/dist/cdn/themes/organic-dark.tokens.json +532 -0
  249. package/dist/cdn/themes/organic.tokens.json +685 -0
  250. package/dist/cdn/themes/rose-pine-dark.tokens.json +472 -0
  251. package/dist/cdn/themes/rose-pine.tokens.json +608 -0
  252. package/dist/cdn/themes/rough-dark.tokens.json +515 -0
  253. package/dist/cdn/themes/rough.css +1 -1
  254. package/dist/cdn/themes/rough.tokens.json +650 -0
  255. package/dist/cdn/themes/solarized-dark.tokens.json +397 -0
  256. package/dist/cdn/themes/solarized.tokens.json +532 -0
  257. package/dist/cdn/themes/starbucks.css +2 -0
  258. package/dist/cdn/themes/starbucks.tokens.json +593 -0
  259. package/dist/cdn/themes/startup-dark.tokens.json +522 -0
  260. package/dist/cdn/themes/startup.css +1 -1
  261. package/dist/cdn/themes/startup.tokens.json +607 -0
  262. package/dist/cdn/themes/super2026-dark.tokens.json +667 -0
  263. package/dist/cdn/themes/super2026.tokens.json +863 -0
  264. package/dist/cdn/themes/swiss-dark.tokens.json +390 -0
  265. package/dist/cdn/themes/swiss.tokens.json +750 -0
  266. package/dist/cdn/themes/terminal.css +1 -1
  267. package/dist/cdn/themes/terminal.tokens.json +689 -0
  268. package/dist/cdn/themes/tokyo-night-dark.tokens.json +472 -0
  269. package/dist/cdn/themes/tokyo-night.tokens.json +608 -0
  270. package/dist/cdn/themes/vaporwave-dark.tokens.json +413 -0
  271. package/dist/cdn/themes/vaporwave.tokens.json +549 -0
  272. package/dist/cdn/themes/win9x-dark.tokens.json +563 -0
  273. package/dist/cdn/themes/win9x.tokens.json +700 -0
  274. package/dist/cdn/vanilla-breeze-charts.css +1 -1
  275. package/dist/cdn/vanilla-breeze-charts.js +58 -36
  276. package/dist/cdn/vanilla-breeze-core.css +1 -1
  277. package/dist/cdn/vanilla-breeze-core.js +246 -51
  278. package/dist/cdn/vanilla-breeze-dev.js +1 -1
  279. package/dist/cdn/vanilla-breeze-extras.js +90 -80
  280. package/dist/cdn/vanilla-breeze.css +1 -1
  281. package/dist/cdn/vanilla-breeze.js +1370 -405
  282. package/package.json +12 -4
@@ -1,2 +1,2 @@
1
- var a=class extends HTMLElement{#e=[];connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&(this.setAttribute("data-upgraded",""),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,o,n){t.addEventListener(e,o,n),this.#e.push(()=>t.removeEventListener(e,o,n))}setup(){}teardown(){}};var b=window.matchMedia("(prefers-reduced-motion: reduce)");var c=new Map;function d(r,t,e={}){let o=e.priority??10,n={impl:t,bundle:e.bundle,contract:e.contract,priority:o},i=c.get(r);if(customElements.get(r)){if(!i||i.priority>=o){i&&i.priority===o&&i.impl!==t&&console.warn(`[VB Bundle] Tag <${r}> already registered by "${i.bundle}" (priority ${i.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${r}> defined by "${i.bundle}" cannot be replaced (customElements.define is permanent). "${e.bundle}" has higher priority but arrived late.`);return}if(i&&i.priority>=o){i.priority===o&&console.warn(`[VB Bundle] Tag <${r}> already registered by "${i.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}c.set(r,n),customElements.define(r,t)}var u=CSS.supports("anchor-name","--test"),f=new Set(["BUTTON","A","AREA"]);function p(r){return document.documentElement.hasAttribute("data-interest-polyfill")?!0:"interestForElement"in HTMLButtonElement.prototype?f.has(r.tagName):!1}var l=class extends a{#e;#t;#r;#s;#a=!u;#i=!1;#o=!1;#h;setup(){this.#i=this.getAttribute("variant")==="card",this.#i?this.#b():this.#m()}#m(){if(this.#e=this.querySelector(":scope > :not(template)"),!this.#e)return;this.#o=p(this.#e);let t=this.querySelector(":scope > template[data-tooltip]"),e=this.getAttribute("content"),o=this.#e.getAttribute("title");if(!t&&!e&&!o)return;o&&(this.#h=o,this.#e.removeAttribute("title")),this.#t=document.createElement("div"),this.#t.className="tooltip",this.#t.setAttribute("role","tooltip"),this.#t.setAttribute("popover","hint"),t?this.#t.innerHTML=t.innerHTML:this.#t.textContent=e||o,this.#t.id=`tooltip-${crypto.randomUUID().slice(0,8)}`;let n=this.getAttribute("position")||"top";this.#t.dataset.tooltipPosition=n;let i=document.createElement("span");if(i.className="tooltip-arrow",i.setAttribute("aria-hidden","true"),this.#t.appendChild(i),this.appendChild(this.#t),u){let s=`--tooltip-anchor-${this.#t.id}`;this.#e.style.anchorName=s,this.#t.style.positionAnchor=s,this.#t.setAttribute("data-anchor","")}this.#o?(this.#e.setAttribute("interestfor",this.#t.id),this.#e.hasAttribute("aria-describedby")||this.#e.setAttribute("aria-describedby",this.#t.id),this.#a&&this.listen(this.#t,"toggle",this.#l)):(this.#e.setAttribute("aria-describedby",this.#t.id),this.listen(this.#e,"mouseenter",this.#c),this.listen(this.#e,"mouseleave",this.#n),this.listen(this.#e,"focus",this.#d),this.listen(this.#e,"blur",this.#g),this.listen(this.#t,"mouseenter",this.#u),this.listen(this.#t,"mouseleave",this.#n))}#b(){this.#e=this.querySelector(":scope > [data-trigger]");let t=this.querySelector(":scope > [data-content]");!this.#e||!t||(this.#o=p(this.#e),this.#t=document.createElement("div"),this.#t.className="hover-card",this.#t.setAttribute("popover","manual"),this.#t.id=`hc-${crypto.randomUUID().slice(0,8)}`,this.#t.appendChild(t),t.removeAttribute("data-content"),t.hidden=!1,this.appendChild(this.#t),this.#o?(this.#e.setAttribute("interestfor",this.#t.id),this.listen(this.#t,"toggle",this.#l)):(this.listen(this.#e,"mouseenter",this.#c),this.listen(this.#e,"mouseleave",this.#n),this.listen(this.#e,"focus",this.#d),this.listen(this.#e,"blur",this.#n),this.listen(this.#t,"mouseenter",this.#u),this.listen(this.#t,"mouseleave",this.#n),this.listen(document,"keydown",this.#w)))}teardown(){this.#e&&(this.#o&&this.#e.removeAttribute("interestfor"),this.#h&&(this.#e.setAttribute("title",this.#h),this.#h=void 0)),this.#t&&(this.#t.remove(),this.#t=null),clearTimeout(this.#r),clearTimeout(this.#s)}#l=t=>{t.newState==="open"?(this.#i?this.#f():this.#a&&this.#p(),this.dispatchEvent(new CustomEvent("tool-tip:show",{bubbles:!0}))):this.dispatchEvent(new CustomEvent("tool-tip:hide",{bubbles:!0}))};#c=()=>{clearTimeout(this.#s);let t=this.#i?300:200,e=parseInt(this.getAttribute("delay")||String(t),10);this.#r=setTimeout(()=>this.show(),e)};#n=()=>{clearTimeout(this.#r);let t=this.#i?200:100;this.#s=setTimeout(()=>this.hide(),t)};#d=()=>{clearTimeout(this.#s),this.show()};#g=()=>{clearTimeout(this.#r),this.hide()};#u=()=>{clearTimeout(this.#s)};#w=t=>{t.key==="Escape"&&this.isVisible&&this.hide()};show(){!this.#t||this.isVisible||(this.#t.showPopover(),this.#i?this.#f():this.#a&&this.#p(),this.dispatchEvent(new CustomEvent("tool-tip:show",{bubbles:!0})))}hide(){!this.#t||!this.isVisible||(this.#t.hidePopover(),this.dispatchEvent(new CustomEvent("tool-tip:hide",{bubbles:!0})))}#p(){if(!this.#e||!this.#t)return;let t=this.#e.getBoundingClientRect(),e=this.#t.getBoundingClientRect(),o=this.getAttribute("position")||"top",n=8,i,s;switch(o){case"bottom":i=t.bottom+n,s=t.left+(t.width-e.width)/2;break;case"left":i=t.top+(t.height-e.height)/2,s=t.left-e.width-n;break;case"right":i=t.top+(t.height-e.height)/2,s=t.right+n;break;default:i=t.top-e.height-n,s=t.left+(t.width-e.width)/2;break}let h=8;s=Math.max(h,Math.min(s,window.innerWidth-e.width-h)),i=Math.max(h,Math.min(i,window.innerHeight-e.height-h)),this.#t.style.top=`${i}px`,this.#t.style.left=`${s}px`}#f(){if(!this.#e||!this.#t)return;let t=this.#e.getBoundingClientRect(),e=this.#t.getBoundingClientRect(),o=this.getAttribute("position")||"bottom",n=8,i=8,s,h;h=t.left+(t.width-e.width)/2,h=Math.max(i,Math.min(h,window.innerWidth-e.width-i)),o==="top"?(s=t.top-e.height-n,s<i&&(s=t.bottom+n)):(s=t.bottom+n,s+e.height>window.innerHeight-i&&(s=t.top-e.height-n)),this.#t.style.position="fixed",this.#t.style.top=`${s}px`,this.#t.style.left=`${h}px`}get isVisible(){return this.#t?.matches(":popover-open")??!1}};d("tool-tip",l);export{l as ToolTip};
1
+ var r=class extends HTMLElement{#t=[];#e;connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&(this.setAttribute("data-upgraded",""),queueMicrotask(()=>{this.dispatchEvent(new CustomEvent(`${this.localName}:upgraded`,{bubbles:!0}))}))}disconnectedCallback(){for(let t of this.#t)t();this.#t=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,e,i,o){t.addEventListener(e,i,o),this.#t.push(()=>t.removeEventListener(e,i,o))}setup(){}teardown(){}setState(t,e){this.#e||(this.#e=this.attachInternals());let i=this.#e.states;try{e?i.add(t):i.delete(t)}catch{let o=`--${t}`;e?i.add(o):i.delete(o)}}_adoptInternals(t){this.#e||(this.#e=t)}};var w=window.matchMedia("(prefers-reduced-motion: reduce)");var u=new Map;function a(n,t,e={}){let i=e.priority??10,o={impl:t,bundle:e.bundle,contract:e.contract,priority:i},s=u.get(n);if(customElements.get(n)){if(!s||s.priority>=i){s&&s.priority===i&&s.impl!==t&&console.warn(`[VB Bundle] Tag <${n}> already registered by "${s.bundle}" (priority ${s.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${n}> 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 <${n}> already registered by "${s.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}u.set(n,o),customElements.define(n,t)}var c=CSS.supports("anchor-name","--x"),b=CSS.supports("position-area","bottom"),v=0,d=class extends r{#t=null;#e=null;#i=null;#s=null;setup(){this.id||(this.id=`pop-over-${++v}`);let t=this.dataset.mode||"auto";this.hasAttribute("popover")||this.setAttribute("popover",t),this.#n(),this.#o(),this.#i=e=>{let i=e.newState==="open"?"show":"hide";this.dispatchEvent(new CustomEvent(`pop-over:${i}`,{detail:{state:e.newState},bubbles:!0,composed:!0})),!c&&e.newState==="open"&&this.#t&&this.#a()},this.listen(this,"beforetoggle",this.#i),c||(this.#s=()=>{this.matches(":popover-open")&&this.#t&&this.#a()},this.listen(window,"resize",this.#s),this.listen(window,"scroll",this.#s,{capture:!0,passive:!0}))}show(){this.matches(":popover-open")||this.showPopover()}hide(){this.matches(":popover-open")&&this.hidePopover()}toggle(){this.matches(":popover-open")?this.hide():this.show()}get open(){return this.matches(":popover-open")}#n(){let t=this.dataset.anchor;t?this.#t=document.getElementById(t)||document.querySelector(t):this.#t=document.querySelector(`[popovertarget="${CSS.escape(this.id)}"]`)}#o(){if(!(!this.#t||!c)&&(this.#e=`--pop-over-anchor-${this.id}`,this.#t.style.setProperty("anchor-name",this.#e),this.style.setProperty("position-anchor",this.#e),this.setAttribute("data-anchor-name",this.#e||""),!b)){let t=this.dataset.position||"bottom";this.#r(t)}}#r(t){let e="var(--_pop-over-offset, var(--size-xs))",i={top:{bottom:`calc(anchor(top) + ${e})`,left:"anchor(left)"},bottom:{top:`calc(anchor(bottom) + ${e})`,left:"anchor(left)"},left:{right:`calc(anchor(left) + ${e})`,top:"anchor(top)"},right:{left:`calc(anchor(right) + ${e})`,top:"anchor(top)"}},o=t.split("-")[0],s=i[o]||i.bottom;Object.entries(s).forEach(([h,m])=>this.style.setProperty(h,m))}#a(){if(!this.#t)return;let t=this.#t.getBoundingClientRect(),e=this.dataset.position||"bottom",i=this.#l(),o,s;switch(e.split("-")[0]){case"top":o=t.top-this.offsetHeight-i,s=t.left;break;case"left":o=t.top,s=t.left-this.offsetWidth-i;break;case"right":o=t.top,s=t.right+i;break;default:o=t.bottom+i,s=t.left;break}e.endsWith("-end")&&(e.startsWith("top")||e.startsWith("bottom")?s=t.right-this.offsetWidth:o=t.bottom-this.offsetHeight),this.style.position="fixed",this.style.top=`${Math.round(o)}px`,this.style.left=`${Math.round(s)}px`,this.style.margin="0"}#l(){let t={none:0,xs:4,s:8,m:16,l:24};return t[this.dataset.offset]??t.xs}};a("pop-over",d);var y=new Set(["BUTTON","A","AREA"]);function f(n){return document.documentElement.hasAttribute("data-interest-polyfill")?!0:"interestForElement"in HTMLButtonElement.prototype?y.has(n.tagName):!1}var l=0,p=class extends r{#t=null;#e=null;#i;#s;#n=!1;#o=!1;#r;setup(){this.#n=this.getAttribute("variant")==="card",this.#n?this.#l():this.#a()}#a(){if(this.#t=this.querySelector(":scope > :not(template)"),!this.#t)return;this.#o=f(this.#t);let t=this.querySelector(":scope > template[data-tooltip]"),e=this.getAttribute("content"),i=this.#t.getAttribute("title");if(!t&&!e&&!i)return;i&&(this.#r=i,this.#t.removeAttribute("title"));let o=this.getAttribute("position")||"top";this.#t.id||(this.#t.id=`tooltip-trigger-${++l}`);let s=document.createElement("pop-over");s.className="tooltip",s.setAttribute("role","tooltip"),s.dataset.mode="hint",s.dataset.anchor=this.#t.id,s.dataset.tooltipPosition=o,s.id=`tooltip-${++l}`,t?s.innerHTML=t.innerHTML:s.textContent=e||i;let h=document.createElement("span");h.className="tooltip-arrow",h.setAttribute("aria-hidden","true"),s.appendChild(h),this.appendChild(s),this.#e=s,this.#o?(this.#t.setAttribute("interestfor",s.id),this.#t.hasAttribute("aria-describedby")||this.#t.setAttribute("aria-describedby",s.id)):(this.#t.setAttribute("aria-describedby",s.id),this.listen(this.#t,"mouseenter",this.#c),this.listen(this.#t,"mouseleave",this.#h),this.listen(this.#t,"focus",this.#d),this.listen(this.#t,"blur",this.#u),this.listen(s,"mouseenter",this.#p),this.listen(s,"mouseleave",this.#h)),this.listen(s,"pop-over:show",()=>{this.dispatchEvent(new CustomEvent("tool-tip:show",{bubbles:!0}))}),this.listen(s,"pop-over:hide",()=>{this.dispatchEvent(new CustomEvent("tool-tip:hide",{bubbles:!0}))})}#l(){this.#t=this.querySelector(":scope > [data-trigger]");let t=this.querySelector(":scope > [data-content]");if(!this.#t||!t)return;this.#o=f(this.#t),this.#t.id||(this.#t.id=`tooltip-trigger-${++l}`);let e=document.createElement("pop-over");e.className="hover-card",e.dataset.mode="manual",e.dataset.anchor=this.#t.id,e.dataset.position=this.getAttribute("position")||"bottom",e.id=`hc-${++l}`,e.appendChild(t),t.removeAttribute("data-content"),t.hidden=!1,this.appendChild(e),this.#e=e,this.#o?this.#t.setAttribute("interestfor",e.id):(this.listen(this.#t,"mouseenter",this.#c),this.listen(this.#t,"mouseleave",this.#h),this.listen(this.#t,"focus",this.#d),this.listen(this.#t,"blur",this.#h),this.listen(e,"mouseenter",this.#p),this.listen(e,"mouseleave",this.#h),this.listen(document,"keydown",this.#f)),this.listen(e,"pop-over:show",()=>{this.dispatchEvent(new CustomEvent("tool-tip:show",{bubbles:!0}))}),this.listen(e,"pop-over:hide",()=>{this.dispatchEvent(new CustomEvent("tool-tip:hide",{bubbles:!0}))})}teardown(){this.#t&&(this.#o&&this.#t.removeAttribute("interestfor"),this.#r&&(this.#t.setAttribute("title",this.#r),this.#r=void 0)),this.#e&&(this.#e.remove(),this.#e=null),clearTimeout(this.#i),clearTimeout(this.#s)}#c=()=>{clearTimeout(this.#s);let t=this.#n?300:200,e=parseInt(this.getAttribute("delay")||String(t),10);this.setState("show-pending",!0),this.#i=setTimeout(()=>{this.setState("show-pending",!1),this.show()},e)};#h=()=>{clearTimeout(this.#i),this.setState("show-pending",!1);let t=this.#n?200:100;this.#s=setTimeout(()=>this.hide(),t)};#d=()=>{clearTimeout(this.#s),this.show()};#u=()=>{clearTimeout(this.#i),this.setState("show-pending",!1),this.hide()};#p=()=>{clearTimeout(this.#s)};#f=t=>{t.key==="Escape"&&this.isVisible&&this.hide()};show(){!this.#e||this.isVisible||(typeof this.#e.show=="function"?this.#e.show():this.#e.showPopover())}hide(){!this.#e||!this.isVisible||(typeof this.#e.hide=="function"?this.#e.hide():this.#e.hidePopover())}get isVisible(){return this.#e?.matches(":popover-open")??!1}};a("tool-tip",p);export{p as ToolTip};
2
2
  //# sourceMappingURL=tool-tip.js.map
@@ -1,4 +1,4 @@
1
- var N=window.matchMedia("(prefers-reduced-motion: reduce)");var L=new Map;function v(a,s,e={}){let n=e.priority??10,c={impl:s,bundle:e.bundle,contract:e.contract,priority:n},o=L.get(a);if(customElements.get(a)){if(!o||o.priority>=n){o&&o.priority===n&&o.impl!==s&&console.warn(`[VB Bundle] Tag <${a}> already registered by "${o.bundle}" (priority ${o.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${a}> 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 <${a}> already registered by "${o.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}L.set(a,c),customElements.define(a,s)}var A=class extends HTMLElement{#t=[];connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&(this.setAttribute("data-upgraded",""),this.dispatchEvent(new CustomEvent(`${this.localName}:upgraded`,{bubbles:!0})))}disconnectedCallback(){for(let s of this.#t)s();this.#t=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(s,e,n,c){s.addEventListener(e,n,c),this.#t.push(()=>s.removeEventListener(e,n,c))}setup(){}teardown(){}};var S=class extends A{setup(){let s=this.getAttribute("data-lens-src")||this.getAttribute("src"),e=this.getAttribute("data-vocabulary-src")||"/vocabulary.json";s?this.#t(s,e).catch(()=>{}):this.#n()}async#t(s,e){let[n,c]=await Promise.all([this.#e(s),this.#e(e)]);if(n.error){this.#o(`Could not load ${s}: ${n.error}`);return}if(c.error){this.#o(`Could not load ${e}: ${c.error}`);return}let o=Array.isArray(n.data)?n.data:n.data.pages||[],u=c.data;this.#r(o,u),this.#n()}async#e(s){try{let e=await fetch(s);if(!e.ok)throw new Error(`status ${e.status}`);return{data:await e.json()}}catch(e){return{error:e.message}}}#r(s,e){let n=Array.isArray(e?.concepts)?e.concepts:[],c=Array.isArray(e?.["skos:hasTopConcept"])?e["skos:hasTopConcept"]:[],o=new Map;for(let t of n)t&&t["@id"]&&o.set(t["@id"],t);let u=new Map,p=new Map;function w(t,r){!t||!r||!o.has(t)||!o.has(r)||(u.has(t)||u.set(t,new Set),u.get(t).add(r),p.has(r)||p.set(r,new Set),p.get(r).add(t))}for(let t of n){let r=t["@id"],y=T(t["skos:broader"]);for(let $ of y)w($,r);let d=T(t["skos:narrower"]);for(let $ of d)w(r,$)}let h=new Map,m=[];for(let t of s){let r=Array.isArray(t.concepts)?t.concepts:[];if(r.length===0){m.push(t);continue}let y=!1;for(let d of r)o.has(d)&&(h.has(d)||h.set(d,[]),h.get(d).push(t),y=!0);y||m.push(t)}let b=new Map,g=new Set;function k(t){if(b.has(t))return b.get(t);if(g.has(t))return 0;g.add(t);let r=(h.get(t)||[]).length,y=0,d=u.get(t);if(d)for(let x of d)y+=k(x);g.delete(t);let $=r+y;return b.set(t,$),$}let i=c.filter(t=>o.has(t));i.length===0&&(i=n.map(t=>t["@id"]).filter(t=>t&&!p.has(t)));let f=this.hasAttribute("expand-all"),l=[`<h2 class="topic-map-heading">Topics <small>(${s.length} pages)</small></h2>`];for(let t of i)l.push(this.#s(t,o,u,h,k,f,0));if(m.length){let t=f?" open":"";l.push(`<details${t} data-topic-node="__uncategorized">`),l.push(`<summary><span class="topic-name">Uncategorized</span> <span class="topic-count">${m.length}</span></summary>`),l.push('<ul class="topic-pages">');for(let r of m)l.push(`<li><a href="${M(r.url)}">${C(r.title||r.url)}</a></li>`);l.push("</ul>"),l.push("</details>")}this.innerHTML=l.join(`
2
- `)}#s(s,e,n,c,o,u,p){let w=e.get(s);if(!w)return"";let h=w["skos:prefLabel"]||s,m=o(s),b=c.get(s)||[],g=n.get(s),k=u||p<1?" open":"",i=[];if(i.push(`<details${k} data-topic-node="${M(s)}">`),i.push(`<summary><a class="topic-name" href="/topics/${M(s)}/">${C(h)}</a> <span class="topic-count">${m}</span></summary>`),b.length){i.push('<ul class="topic-pages">');for(let f of b)i.push(`<li><a href="${M(f.url)}">${C(f.title||f.url)}</a></li>`);i.push("</ul>")}if(g&&g.size){let f=[...g].sort((E,l)=>{let t=(e.get(E)?.["skos:prefLabel"]||E).toLowerCase(),r=(e.get(l)?.["skos:prefLabel"]||l).toLowerCase();return t.localeCompare(r)});for(let E of f)i.push(this.#s(E,e,n,c,o,u,p+1))}return i.push("</details>"),i.join(`
3
- `)}#o(s){if(this.children.length>0)return;let e=document.createElement("p");e.setAttribute("data-topic-map-error",""),e.textContent=s,this.append(e)}#n(){}};function T(a){return a==null?[]:Array.isArray(a)?a:[a]}function C(a){return String(a??"").replace(/[&<>]/g,s=>({"&":"&amp;","<":"&lt;",">":"&gt;"})[s])}function M(a){return String(a??"").replace(/[&<>"]/g,s=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[s])}v("topic-map",S);export{S as TopicMap};
1
+ var _=window.matchMedia("(prefers-reduced-motion: reduce)");var L=new Map;function v(a,t,s={}){let o=s.priority??10,c={impl:t,bundle:s.bundle,contract:s.contract,priority:o},r=L.get(a);if(customElements.get(a)){if(!r||r.priority>=o){r&&r.priority===o&&r.impl!==t&&console.warn(`[VB Bundle] Tag <${a}> already registered by "${r.bundle}" (priority ${r.priority}). Skipping "${s.bundle}".`);return}console.warn(`[VB Bundle] Tag <${a}> defined by "${r.bundle}" cannot be replaced (customElements.define is permanent). "${s.bundle}" has higher priority but arrived late.`);return}if(r&&r.priority>=o){r.priority===o&&console.warn(`[VB Bundle] Tag <${a}> already registered by "${r.bundle}". Skipping "${s.bundle}" (first wins at equal priority).`);return}L.set(a,c),customElements.define(a,t)}var k=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,s,o,c){t.addEventListener(s,o,c),this.#e.push(()=>t.removeEventListener(s,o,c))}setup(){}teardown(){}setState(t,s){this.#t||(this.#t=this.attachInternals());let o=this.#t.states;try{s?o.add(t):o.delete(t)}catch{let c=`--${t}`;s?o.add(c):o.delete(c)}}_adoptInternals(t){this.#t||(this.#t=t)}};var S=class extends k{setup(){let t=this.getAttribute("data-lens-src")||this.getAttribute("src"),s=this.getAttribute("data-vocabulary-src")||"/vocabulary.json";t?this.#e(t,s).catch(()=>{}):this.#s()}get data(){return this.__data||null}set data(t){if(!t||typeof t!="object")return;let s=Array.isArray(t.pages)?t.pages:[],o=t.vocabulary||{};this.__data={pages:s,vocabulary:o},this.#o(s,o),this.#s(),this.dispatchEvent(new CustomEvent("topic-map:data-changed",{detail:{pages:s,vocabulary:o,source:"property"},bubbles:!0}))}async#e(t,s){let[o,c]=await Promise.all([this.#t(t),this.#t(s)]);if(o.error){this.#n(`Could not load ${t}: ${o.error}`);return}if(c.error){this.#n(`Could not load ${s}: ${c.error}`);return}let r=Array.isArray(o.data)?o.data:o.data.pages||[],u=c.data;this.#o(r,u),this.#s()}async#t(t){try{let s=await fetch(t);if(!s.ok)throw new Error(`status ${s.status}`);return{data:await s.json()}}catch(s){return{error:s.message}}}#o(t,s){let o=Array.isArray(s?.concepts)?s.concepts:[],c=Array.isArray(s?.["skos:hasTopConcept"])?s["skos:hasTopConcept"]:[],r=new Map;for(let e of o)e&&e["@id"]&&r.set(e["@id"],e);let u=new Map,f=new Map;function w(e,n){!e||!n||!r.has(e)||!r.has(n)||(u.has(e)||u.set(e,new Set),u.get(e).add(n),f.has(n)||f.set(n,new Set),f.get(n).add(e))}for(let e of o){let n=e["@id"],y=T(e["skos:broader"]);for(let $ of y)w($,n);let d=T(e["skos:narrower"]);for(let $ of d)w(n,$)}let h=new Map,m=[];for(let e of t){let n=Array.isArray(e.concepts)?e.concepts:[];if(n.length===0){m.push(e);continue}let y=!1;for(let d of n)r.has(d)&&(h.has(d)||h.set(d,[]),h.get(d).push(e),y=!0);y||m.push(e)}let b=new Map,g=new Set;function A(e){if(b.has(e))return b.get(e);if(g.has(e))return 0;g.add(e);let n=(h.get(e)||[]).length,y=0,d=u.get(e);if(d)for(let x of d)y+=A(x);g.delete(e);let $=n+y;return b.set(e,$),$}let i=c.filter(e=>r.has(e));i.length===0&&(i=o.map(e=>e["@id"]).filter(e=>e&&!f.has(e)));let p=this.hasAttribute("expand-all"),l=[`<h2 class="topic-map-heading">Topics <small>(${t.length} pages)</small></h2>`];for(let e of i)l.push(this.#r(e,r,u,h,A,p,0));if(m.length){let e=p?" open":"";l.push(`<details${e} data-topic-node="__uncategorized">`),l.push(`<summary><span class="topic-name">Uncategorized</span> <span class="topic-count">${m.length}</span></summary>`),l.push('<ul class="topic-pages">');for(let n of m)l.push(`<li><a href="${M(n.url)}">${C(n.title||n.url)}</a></li>`);l.push("</ul>"),l.push("</details>")}this.innerHTML=l.join(`
2
+ `)}#r(t,s,o,c,r,u,f){let w=s.get(t);if(!w)return"";let h=w["skos:prefLabel"]||t,m=r(t),b=c.get(t)||[],g=o.get(t),A=u||f<1?" open":"",i=[];if(i.push(`<details${A} data-topic-node="${M(t)}">`),i.push(`<summary><a class="topic-name" href="/topics/${M(t)}/">${C(h)}</a> <span class="topic-count">${m}</span></summary>`),b.length){i.push('<ul class="topic-pages">');for(let p of b)i.push(`<li><a href="${M(p.url)}">${C(p.title||p.url)}</a></li>`);i.push("</ul>")}if(g&&g.size){let p=[...g].sort((E,l)=>{let e=(s.get(E)?.["skos:prefLabel"]||E).toLowerCase(),n=(s.get(l)?.["skos:prefLabel"]||l).toLowerCase();return e.localeCompare(n)});for(let E of p)i.push(this.#r(E,s,o,c,r,u,f+1))}return i.push("</details>"),i.join(`
3
+ `)}#n(t){if(this.children.length>0)return;let s=document.createElement("p");s.setAttribute("data-topic-map-error",""),s.textContent=t,this.append(s)}#s(){}};function T(a){return a==null?[]:Array.isArray(a)?a:[a]}function C(a){return String(a??"").replace(/[&<>]/g,t=>({"&":"&amp;","<":"&lt;",">":"&gt;"})[t])}function M(a){return String(a??"").replace(/[&<>"]/g,t=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[t])}v("topic-map",S);export{S as TopicMap};
4
4
  //# sourceMappingURL=topic-map.js.map
@@ -0,0 +1,3 @@
1
+ var N=window.matchMedia("(prefers-reduced-motion: reduce)");var S=new Map;function q(s,t,n={}){let i=n.priority??10,o={impl:t,bundle:n.bundle,contract:n.contract,priority:i},r=S.get(s);if(customElements.get(s)){if(!r||r.priority>=i){r&&r.priority===i&&r.impl!==t&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${r.bundle}" (priority ${r.priority}). Skipping "${n.bundle}".`);return}console.warn(`[VB Bundle] Tag <${s}> defined by "${r.bundle}" cannot be replaced (customElements.define is permanent). "${n.bundle}" has higher priority but arrived late.`);return}if(r&&r.priority>=i){r.priority===i&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${r.bundle}". Skipping "${n.bundle}" (first wins at equal priority).`);return}S.set(s,o),customElements.define(s,t)}var b=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,n,i,o){t.addEventListener(n,i,o),this.#e.push(()=>t.removeEventListener(n,i,o))}setup(){}teardown(){}setState(t,n){this.#t||(this.#t=this.attachInternals());let i=this.#t.states;try{n?i.add(t):i.delete(t)}catch{let o=`--${t}`;n?i.add(o):i.delete(o)}}_adoptInternals(t){this.#t||(this.#t=t)}};var A=class s extends b{setup(){let t=this.getAttribute("rows"),n=this.getAttribute("cols"),i=this.getAttribute("link-attr");return!t||!n||!i?(console.warn("traceability-matrix: requires rows, cols, and link-attr attributes"),!1):(queueMicrotask(()=>this.#e(t,n,i)),!0)}#e(t,n,i){let o=[...document.querySelectorAll(t)].filter(e=>e!==this&&!this.contains(e)),r=[...document.querySelectorAll(n)].filter(e=>e!==this&&!this.contains(e));if(!o.length||!r.length){this.#l();return}let l=this.getAttribute("row-label")||"",c=this.getAttribute("cell-mark")||"\u2713",f=this.hasAttribute("flag-orphans"),k=[],g=new WeakMap,E=new WeakMap;for(let e of o){let a=s.#o(e.getAttribute(i));for(let h of a){let u=r.find(p=>p.id===h);u&&(k.push({rowEl:e,colEl:u}),g.set(e,(g.get(e)||0)+1),E.set(u,(E.get(u)||0)+1))}}let m=document.createElement("data-table"),w=document.createElement("table"),M=document.createElement("thead"),y=document.createElement("tr"),C=document.createElement("th");C.setAttribute("data-sort","string"),C.textContent=l,y.appendChild(C);for(let e of r){let a=document.createElement("th");a.setAttribute("data-sort","number"),a.textContent=s.#s(e),a.dataset.colId=e.id||"",f&&!E.get(e)&&(a.dataset.orphan=""),y.appendChild(a)}M.appendChild(y),w.appendChild(M);let v=document.createElement("tbody");for(let e of o){let a=document.createElement("tr");a.dataset.rowId=e.id||"",f&&!g.get(e)&&(a.dataset.orphan="");let h=document.createElement("th");h.scope="row",h.textContent=s.#s(e),a.appendChild(h);let u=s.#o(e.getAttribute(i));for(let p of r){let d=document.createElement("td"),$=u.includes(p.id);d.setAttribute("data-sort-value",$?"1":"0"),$?(d.dataset.linked="",d.textContent=c,d.setAttribute("aria-label","linked")):d.setAttribute("aria-label","not linked"),d.dataset.colId=p.id||"",a.appendChild(d)}v.appendChild(a)}w.appendChild(v),m.appendChild(w),[...this.children].forEach(e=>{e.tagName!=="TEMPLATE"&&e.remove()});let x=this.getAttribute("label");if(x){let e=document.createElement("header");e.className="tm-label",e.textContent=x,this.appendChild(e)}this.appendChild(m),this.#n=m,this.#i=new Map(o.map(e=>[e.id,e])),this.#r=new Map(r.map(e=>[e.id,e])),this.listen(m,"click",this.#t),queueMicrotask(()=>{this.dispatchEvent(new CustomEvent("traceability-matrix:ready",{bubbles:!0,detail:{rowCount:o.length,colCount:r.length,linkCount:k.length}}))})}#t=t=>{let n=t.target.closest('td, th[scope="row"]');if(!n)return;let i=n.closest("tr");if(!i)return;let o=i.dataset.rowId,r=n.dataset.colId,l=o?this.#i.get(o):null,c=r?this.#r.get(r):null,f=n.hasAttribute("data-state-highlighted");if(this.#a(),f){this.dispatchEvent(new CustomEvent("traceability-matrix:highlight",{bubbles:!0,detail:{rowEl:l,colEl:c,on:!1}}));return}n.setAttribute("data-state-highlighted",""),l&&l.setAttribute("data-state-highlighted",""),c&&c!==l&&c.setAttribute("data-state-highlighted",""),i.setAttribute("data-state-highlighted",""),this.dispatchEvent(new CustomEvent("traceability-matrix:highlight",{bubbles:!0,detail:{rowEl:l,colEl:c,on:!0}}))};#a(){this.#n&&(this.#n.querySelectorAll("[data-state-highlighted]").forEach(t=>t.removeAttribute("data-state-highlighted")),document.querySelectorAll("[data-state-highlighted]").forEach(t=>{(this.#i.has(t.id)||this.#r.has(t.id))&&t.removeAttribute("data-state-highlighted")}))}#l(){[...this.children].forEach(n=>{n.tagName!=="TEMPLATE"&&n.remove()});let t=document.createElement("p");t.className="tm-empty",t.textContent="No matching elements found for this matrix.",this.appendChild(t)}static#o(t){return t?t.split(",").map(n=>n.trim()).filter(Boolean):[]}static#s(t){return t.getAttribute("data-matrix-label")||t.id||(t.textContent||"").trim().split(`
2
+ `)[0].slice(0,60)||"(unnamed)"}#n=null;#i=new Map;#r=new Map};q("traceability-matrix",A);export{A as TraceabilityMatrix};
3
+ //# sourceMappingURL=traceability-matrix.js.map
@@ -1,4 +1,4 @@
1
- var m=window.matchMedia("(prefers-reduced-motion: reduce)");var d=new Map;function f(r,n,e={}){let t=e.priority??10,o={impl:n,bundle:e.bundle,contract:e.contract,priority:t},s=d.get(r);if(customElements.get(r)){if(!s||s.priority>=t){s&&s.priority===t&&s.impl!==n&&console.warn(`[VB Bundle] Tag <${r}> already registered by "${s.bundle}" (priority ${s.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${r}> defined by "${s.bundle}" cannot be replaced (customElements.define is permanent). "${e.bundle}" has higher priority but arrived late.`);return}if(s&&s.priority>=t){s.priority===t&&console.warn(`[VB Bundle] Tag <${r}> already registered by "${s.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}d.set(r,o),customElements.define(r,n)}var l=class extends HTMLElement{#t=[];connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&(this.setAttribute("data-upgraded",""),this.dispatchEvent(new CustomEvent(`${this.localName}:upgraded`,{bubbles:!0})))}disconnectedCallback(){for(let n of this.#t)n();this.#t=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(n,e,t,o){n.addEventListener(e,t,o),this.#t.push(()=>n.removeEventListener(e,t,o))}setup(){}teardown(){}};var u=class extends l{#t=[];#e={provenance:new Set,review:new Set,status:new Set,signed:new Set};setup(){let n=this.getAttribute("data-lens-src")||this.getAttribute("src");if(!n){this.#r("No data source \u2014 set data-lens-src or src to a pages.json URL.");return}this.#o(n).catch(()=>{})}async#o(n){let e;try{let t=await fetch(n);if(!t.ok)throw new Error(`status ${t.status}`);e=await t.json()}catch(t){this.#r(`Could not load ${n}: ${t.message}`);return}this.#t=Array.isArray(e)?e:e.pages||[],this.#i(),this.#n()}#i(){let n=[{key:"provenance",label:"How was it made",values:this.#s("provenance")},{key:"review",label:"Review",values:this.#s("review")},{key:"status",label:"Status",values:this.#s("status")},{key:"signed",label:"Signed",values:["yes","no"]}],e=['<form data-trust-filter-controls aria-label="Filter pages">'];for(let t of n)if(t.values.length!==0){e.push(`<fieldset data-dim="${t.key}"><legend>${a(t.label)}</legend>`);for(let o of t.values){let s=`tf-${t.key}-${h(o)}`;e.push(`<label for="${s}"><input type="checkbox" id="${s}" data-dim="${c(t.key)}" value="${c(o)}"> <span>${a(p(o))}</span></label>`)}e.push("</fieldset>")}e.push('<button type="reset" class="ghost">Clear all</button>'),e.push("</form>"),e.push('<output data-trust-filter-results aria-live="polite"></output>'),this.innerHTML=e.join(`
2
- `),this.querySelector("form").addEventListener("change",t=>{if(t.target.matches('input[type="checkbox"]')){let o=t.target.getAttribute("data-dim"),s=t.target.value,i=this.#e[o];t.target.checked?i.add(s):i.delete(s),this.#n()}}),this.querySelector("form").addEventListener("reset",()=>{for(let t of Object.values(this.#e))t.clear();setTimeout(()=>this.#n(),0)})}#s(n){let e=new Set;for(let t of this.#t){let o=t[n];if(o)if(n==="provenance")for(let s of String(o).split(/\s+/).filter(Boolean))e.add(s);else e.add(o)}return[...e].sort()}#a(n){if(this.#e.provenance.size&&!(n.provenance||"").split(/\s+/).filter(Boolean).some(t=>this.#e.provenance.has(t))||this.#e.review.size&&!this.#e.review.has(n.review)||this.#e.status.size&&!this.#e.status.has(n.status))return!1;if(this.#e.signed.size){let e=this.#e.signed,t=!!n.signed;if(e.has("yes")&&!t||e.has("no")&&t)return!1;e.has("yes")&&e.has("no")}return!0}#n(){let n=this.querySelector("[data-trust-filter-results]");if(!n)return;let e=this.#t.filter(s=>this.#a(s)),t=[];if(t.push(`<p class="trust-filter-count">${e.length} of ${this.#t.length} pages</p>`),e.length){t.push('<ul class="trust-filter-list">');for(let s of e){let i=[s.provenance?`<span class="trust-filter-prov" data-provenance="${c(s.provenance)}">${a(s.provenance)}</span>`:"",s.review&&s.review!=="unreviewed"?`<span>${a(s.review)}</span>`:"",s.status&&s.status!=="published"?`<span>${a(s.status)}</span>`:"",s.signed?'<span class="trust-filter-signed">signed</span>':""].filter(Boolean).join(" \xB7 ");t.push(`<li><a href="${c(s.url)}">${a(s.title||s.url)}</a>${i?`<small>${i}</small>`:""}</li>`)}t.push("</ul>")}n.innerHTML=t.join(`
3
- `);let o={};for(let[s,i]of Object.entries(this.#e))o[s]=[...i];this.dispatchEvent(new CustomEvent("trust-filter:change",{detail:{selected:o,count:e.length},bubbles:!0}))}#r(n){let e=document.createElement("p");e.setAttribute("data-trust-filter-error",""),e.textContent=n,this.innerHTML="",this.append(e)}};function a(r){return String(r??"").replace(/[&<>]/g,n=>({"&":"&amp;","<":"&lt;",">":"&gt;"})[n])}function c(r){return String(r??"").replace(/[&<>"]/g,n=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[n])}function h(r){return String(r).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function p(r){return String(r).replace(/-/g," ").replace(/\b\w/g,n=>n.toUpperCase())}f("trust-filter",u);export{u as TrustFilter};
1
+ var g=window.matchMedia("(prefers-reduced-motion: reduce)");var h=new Map;function p(i,s,e={}){let n=e.priority??10,r={impl:s,bundle:e.bundle,contract:e.contract,priority:n},t=h.get(i);if(customElements.get(i)){if(!t||t.priority>=n){t&&t.priority===n&&t.impl!==s&&console.warn(`[VB Bundle] Tag <${i}> already registered by "${t.bundle}" (priority ${t.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${i}> defined by "${t.bundle}" cannot be replaced (customElements.define is permanent). "${e.bundle}" has higher priority but arrived late.`);return}if(t&&t.priority>=n){t.priority===n&&console.warn(`[VB Bundle] Tag <${i}> already registered by "${t.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}h.set(i,r),customElements.define(i,s)}var l=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 s of this.#t)s();this.#t=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(s,e,n,r){s.addEventListener(e,n,r),this.#t.push(()=>s.removeEventListener(e,n,r))}setup(){}teardown(){}setState(s,e){this.#e||(this.#e=this.attachInternals());let n=this.#e.states;try{e?n.add(s):n.delete(s)}catch{let r=`--${s}`;e?n.add(r):n.delete(r)}}_adoptInternals(s){this.#e||(this.#e=s)}};var d=class extends l{#t=[];#e={provenance:new Set,review:new Set,status:new Set,signed:new Set};setup(){let s=this.getAttribute("data-lens-src")||this.getAttribute("src");if(!s){this.#r("No data source \u2014 set data-lens-src or src to a pages.json URL.");return}this.#i(s).catch(()=>{})}async#i(s){let e;try{let n=await fetch(s);if(!n.ok)throw new Error(`status ${n.status}`);e=await n.json()}catch(n){this.#r(`Could not load ${s}: ${n.message}`);return}this.#t=Array.isArray(e)?e:e.pages||[],this.#o(),this.#n()}#o(){let s=[{key:"provenance",label:"How was it made",values:this.#s("provenance")},{key:"review",label:"Review",values:this.#s("review")},{key:"status",label:"Status",values:this.#s("status")},{key:"signed",label:"Signed",values:["yes","no"]}],e=['<form data-trust-filter-controls aria-label="Filter pages">'];for(let r of s)if(r.values.length!==0){e.push(`<fieldset data-dim="${r.key}"><legend>${a(r.label)}</legend>`);for(let t of r.values){let o=`tf-${r.key}-${m(t)}`;e.push(`<label for="${o}"><input type="checkbox" id="${o}" data-dim="${c(r.key)}" value="${c(t)}"> <span>${a(b(t))}</span></label>`)}e.push("</fieldset>")}e.push('<button type="reset" class="ghost">Clear all</button>'),e.push("</form>"),e.push('<output data-trust-filter-results aria-live="polite"></output>'),this.innerHTML=e.join(`
2
+ `);let n=this.querySelector("form");n.addEventListener("change",r=>{let t=r.target;if(t&&t.matches('input[type="checkbox"]')){let o=t.getAttribute("data-dim"),f=t.value,u=o?this.#e[o]:null;if(!u)return;t.checked?u.add(f):u.delete(f),this.#n()}}),n.addEventListener("reset",()=>{for(let r of Object.values(this.#e))r.clear();setTimeout(()=>this.#n(),0)})}#s(s){let e=new Set;for(let n of this.#t){let r=n[s];if(r)if(s==="provenance")for(let t of String(r).split(/\s+/).filter(Boolean))e.add(t);else e.add(r)}return[...e].sort()}#a(s){if(this.#e.provenance.size&&!(s.provenance||"").split(/\s+/).filter(Boolean).some(n=>this.#e.provenance.has(n))||this.#e.review.size&&!this.#e.review.has(s.review)||this.#e.status.size&&!this.#e.status.has(s.status))return!1;if(this.#e.signed.size){let e=this.#e.signed,n=!!s.signed;if(e.has("yes")&&!n||e.has("no")&&n)return!1;e.has("yes")&&e.has("no")}return!0}#n(){let s=this.querySelector("[data-trust-filter-results]");if(!s)return;let e=this.#t.filter(t=>this.#a(t)),n=[];if(n.push(`<p class="trust-filter-count">${e.length} of ${this.#t.length} pages</p>`),e.length){n.push('<ul class="trust-filter-list">');for(let t of e){let o=[t.provenance?`<span class="trust-filter-prov" data-provenance="${c(t.provenance)}">${a(t.provenance)}</span>`:"",t.review&&t.review!=="unreviewed"?`<span>${a(t.review)}</span>`:"",t.status&&t.status!=="published"?`<span>${a(t.status)}</span>`:"",t.signed?'<span class="trust-filter-signed">signed</span>':""].filter(Boolean).join(" \xB7 ");n.push(`<li><a href="${c(t.url)}">${a(t.title||t.url)}</a>${o?`<small>${o}</small>`:""}</li>`)}n.push("</ul>")}s.innerHTML=n.join(`
3
+ `);let r={};for(let[t,o]of Object.entries(this.#e))r[t]=[...o];this.dispatchEvent(new CustomEvent("trust-filter:change",{detail:{selected:r,count:e.length},bubbles:!0}))}#r(s){let e=document.createElement("p");e.setAttribute("data-trust-filter-error",""),e.textContent=s,this.innerHTML="",this.append(e)}};function a(i){return String(i??"").replace(/[&<>]/g,s=>({"&":"&amp;","<":"&lt;",">":"&gt;"})[s])}function c(i){return String(i??"").replace(/[&<>"]/g,s=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"})[s])}function m(i){return String(i).toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function b(i){return String(i).replace(/-/g," ").replace(/\b\w/g,s=>s.toUpperCase())}p("trust-filter",d);export{d as TrustFilter};
4
4
  //# sourceMappingURL=trust-filter.js.map
@@ -1,19 +1,19 @@
1
- var w=window.matchMedia("(prefers-reduced-motion: reduce)");var p=new Map;function u(r,e,s={}){let n=s.priority??10,o={impl:e,bundle:s.bundle,contract:s.contract,priority:n},i=p.get(r);if(customElements.get(r)){if(!i||i.priority>=n){i&&i.priority===n&&i.impl!==e&&console.warn(`[VB Bundle] Tag <${r}> already registered by "${i.bundle}" (priority ${i.priority}). Skipping "${s.bundle}".`);return}console.warn(`[VB Bundle] Tag <${r}> defined by "${i.bundle}" cannot be replaced (customElements.define is permanent). "${s.bundle}" has higher priority but arrived late.`);return}if(i&&i.priority>=n){i.priority===n&&console.warn(`[VB Bundle] Tag <${r}> already registered by "${i.bundle}". Skipping "${s.bundle}" (first wins at equal priority).`);return}p.set(r,o),customElements.define(r,e)}var l=class extends HTMLElement{#e=[];connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&(this.setAttribute("data-upgraded",""),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,s,n,o){e.addEventListener(s,n,o),this.#e.push(()=>e.removeEventListener(s,n,o))}setup(){}teardown(){}};var b=["system-ui","Georgia","Inter, sans-serif",'"JetBrains Mono", monospace',"Verdana","Cambria","ui-serif"],c=class extends l{static observedAttributes=["font-family","label","sample","show-scale","show-weights","show-characters","weights","editable","target","token"];setup(){this.#e(),this.#t()}attributeChangedCallback(){this.isConnected&&(this.#e(),this.#t())}#e(){let e=this.getAttribute("font-family")||"system-ui",s=this.getAttribute("label")||e.replace(/['"]/g,"").split(",")[0],n=this.getAttribute("sample")||"The quick brown fox jumps over the lazy dog",o=this.hasAttribute("show-scale"),i=this.hasAttribute("show-weights"),m=this.hasAttribute("show-characters"),f=(this.getAttribute("weights")||"300,400,500,600,700").split(",").map(t=>t.trim()),a="",h=this.hasAttribute("editable")?`<input type="text" class="specimen-font-input" value="${e.replace(/"/g,"&quot;")}" aria-label="Font family" style="font:inherit;padding:0.25rem 0.5rem;border:1px solid var(--color-border,#ccc);border-radius:var(--radius-s,0.25rem);min-inline-size:18rem;max-inline-size:100%;font-family:${e};font-size:var(--font-size-sm,0.875rem)">
1
+ var w=window.matchMedia("(prefers-reduced-motion: reduce)");var p=new Map;function u(r,e,s={}){let t=s.priority??10,a={impl:e,bundle:s.bundle,contract:s.contract,priority:t},n=p.get(r);if(customElements.get(r)){if(!n||n.priority>=t){n&&n.priority===t&&n.impl!==e&&console.warn(`[VB Bundle] Tag <${r}> already registered by "${n.bundle}" (priority ${n.priority}). Skipping "${s.bundle}".`);return}console.warn(`[VB Bundle] Tag <${r}> defined by "${n.bundle}" cannot be replaced (customElements.define is permanent). "${s.bundle}" has higher priority but arrived late.`);return}if(n&&n.priority>=t){n.priority===t&&console.warn(`[VB Bundle] Tag <${r}> already registered by "${n.bundle}". Skipping "${s.bundle}" (first wins at equal priority).`);return}p.set(r,a),customElements.define(r,e)}var l=class extends HTMLElement{#t=[];#e;connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&(this.setAttribute("data-upgraded",""),queueMicrotask(()=>{this.dispatchEvent(new CustomEvent(`${this.localName}:upgraded`,{bubbles:!0}))}))}disconnectedCallback(){for(let e of this.#t)e();this.#t=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(e,s,t,a){e.addEventListener(s,t,a),this.#t.push(()=>e.removeEventListener(s,t,a))}setup(){}teardown(){}setState(e,s){this.#e||(this.#e=this.attachInternals());let t=this.#e.states;try{s?t.add(e):t.delete(e)}catch{let a=`--${e}`;s?t.add(a):t.delete(a)}}_adoptInternals(e){this.#e||(this.#e=e)}};var b=["system-ui","Georgia","Inter, sans-serif",'"JetBrains Mono", monospace',"Verdana","Cambria","ui-serif"],c=class extends l{static observedAttributes=["font-family","label","sample","show-scale","show-weights","show-characters","weights","editable","target","token"];setup(){this.#t(),this.#e()}attributeChangedCallback(){this.isConnected&&(this.#t(),this.#e())}#t(){let e=this.getAttribute("font-family")||"system-ui",s=this.getAttribute("label")||e.replace(/['"]/g,"").split(",")[0],t=this.getAttribute("sample")||"The quick brown fox jumps over the lazy dog",a=this.hasAttribute("show-scale"),n=this.hasAttribute("show-weights"),m=this.hasAttribute("show-characters"),h=(this.getAttribute("weights")||"300,400,500,600,700").split(",").map(i=>i.trim()),o="",f=this.hasAttribute("editable")?`<input type="text" class="specimen-font-input" value="${e.replace(/"/g,"&quot;")}" aria-label="Font family" style="font:inherit;padding:0.25rem 0.5rem;border:1px solid var(--color-border,#ccc);border-radius:var(--radius-s,0.25rem);min-inline-size:18rem;max-inline-size:100%;font-family:${e};font-size:var(--font-size-sm,0.875rem)">
2
2
  <span class="specimen-quick" style="display:inline-flex;flex-wrap:wrap;gap:0.25rem;margin-inline-start:0.5rem">
3
- ${b.map(t=>`<button type="button" class="specimen-quick-btn" data-font="${t.replace(/"/g,"&quot;")}" style="font:inherit;font-size:var(--font-size-xs,0.75rem);padding:0.125rem 0.5rem;border:1px solid var(--color-border,#ccc);border-radius:999px;background:var(--color-surface,#fff);color:var(--color-text,#222);cursor:pointer">${t.split(",")[0].replace(/["']/g,"")}</button>`).join("")}
4
- </span>`:`<span class="specimen-label">${s}</span>`;if(a+=`<div class="specimen-header" style="font-family:${e}">
5
- ${h}
6
- <p class="specimen-sample" contenteditable="plaintext-only" spellcheck="false">${n}</p>
7
- </div>`,m&&(a+=`<div class="specimen-chars" style="font-family:${e}">
8
- <div class="char-row"><span class="char-label">Upper</span>${"ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("").map(t=>`<span>${t}</span>`).join("")}</div>
9
- <div class="char-row"><span class="char-label">Lower</span>${"abcdefghijklmnopqrstuvwxyz".split("").map(t=>`<span>${t}</span>`).join("")}</div>
10
- <div class="char-row"><span class="char-label">Digits</span>${"0123456789".split("").map(t=>`<span>${t}</span>`).join("")}</div>
11
- <div class="char-row"><span class="char-label">Punct</span>${"!@#$%^&*()_+-=[]{}|;:,.<>?".split("").map(t=>`<span>${t==="<"?"&lt;":t===">"?"&gt;":t==="&"?"&amp;":t}</span>`).join("")}</div>
12
- </div>`),i){a+='<div class="specimen-weights">';for(let t of f)a+=`<div class="weight-sample" style="font-family:${e};font-weight:${t}">
13
- <span class="weight-label">${t}</span>
3
+ ${b.map(i=>`<button type="button" class="specimen-quick-btn" data-font="${i.replace(/"/g,"&quot;")}" style="font:inherit;font-size:var(--font-size-xs,0.75rem);padding:0.125rem 0.5rem;border:1px solid var(--color-border,#ccc);border-radius:999px;background:var(--color-surface,#fff);color:var(--color-text,#222);cursor:pointer">${i.split(",")[0].replace(/["']/g,"")}</button>`).join("")}
4
+ </span>`:`<span class="specimen-label">${s}</span>`;if(o+=`<div class="specimen-header" style="font-family:${e}">
5
+ ${f}
6
+ <p class="specimen-sample" contenteditable="plaintext-only" spellcheck="false">${t}</p>
7
+ </div>`,m&&(o+=`<div class="specimen-chars" style="font-family:${e}">
8
+ <div class="char-row"><span class="char-label">Upper</span>${"ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("").map(i=>`<span>${i}</span>`).join("")}</div>
9
+ <div class="char-row"><span class="char-label">Lower</span>${"abcdefghijklmnopqrstuvwxyz".split("").map(i=>`<span>${i}</span>`).join("")}</div>
10
+ <div class="char-row"><span class="char-label">Digits</span>${"0123456789".split("").map(i=>`<span>${i}</span>`).join("")}</div>
11
+ <div class="char-row"><span class="char-label">Punct</span>${"!@#$%^&*()_+-=[]{}|;:,.<>?".split("").map(i=>`<span>${i==="<"?"&lt;":i===">"?"&gt;":i==="&"?"&amp;":i}</span>`).join("")}</div>
12
+ </div>`),n){o+='<div class="specimen-weights">';for(let i of h)o+=`<div class="weight-sample" style="font-family:${e};font-weight:${i}">
13
+ <span class="weight-label">${i}</span>
14
14
  <span class="weight-text">Aa</span>
15
- </div>`;a+="</div>"}if(o){let t=[{name:"xs",rem:.75},{name:"sm",rem:.875},{name:"md",rem:1},{name:"lg",rem:1.125},{name:"xl",rem:1.25},{name:"2xl",rem:1.5},{name:"3xl",rem:1.875},{name:"4xl",rem:2.25},{name:"5xl",rem:3}];a+='<div class="specimen-scale">';for(let d of t)a+=`<div class="scale-step" style="font-family:${e};font-size:${d.rem}rem">
15
+ </div>`;o+="</div>"}if(a){let i=[{name:"xs",rem:.75},{name:"sm",rem:.875},{name:"md",rem:1},{name:"lg",rem:1.125},{name:"xl",rem:1.25},{name:"2xl",rem:1.5},{name:"3xl",rem:1.875},{name:"4xl",rem:2.25},{name:"5xl",rem:3}];o+='<div class="specimen-scale">';for(let d of i)o+=`<div class="scale-step" style="font-family:${e};font-size:${d.rem}rem">
16
16
  <span class="scale-label">${d.name}</span>
17
- <span class="scale-text">${n.substring(0,30)}</span>
18
- </div>`;a+="</div>"}this.innerHTML=a}#t(){if(!this.hasAttribute("editable"))return;let e=this.querySelector(".specimen-font-input");e&&this.listen(e,"input",()=>this.#s(e.value)),this.querySelectorAll(".specimen-quick-btn").forEach(s=>{this.listen(s,"click",()=>{let n=s.getAttribute("data-font")||"";e&&(e.value=n),this.#s(n)})})}#s(e){let s=this.#n(),n=this.getAttribute("token")||"font-family-base";s&&s.style.setProperty(`--${n}`,e),this.setAttribute("font-family",e),this.dispatchEvent(new CustomEvent("type-specimen:change",{bubbles:!0,detail:{fontFamily:e,token:n,target:this.getAttribute("target")||":root"}}))}#n(){let e=this.getAttribute("target")||":root";try{return e===":root"?document.documentElement:document.querySelector(e)}catch{return document.documentElement}}};u("type-specimen",c);
17
+ <span class="scale-text">${t.substring(0,30)}</span>
18
+ </div>`;o+="</div>"}this.innerHTML=o}#e(){if(!this.hasAttribute("editable"))return;let e=this.querySelector(".specimen-font-input");e&&this.listen(e,"input",()=>this.#s(e.value)),this.querySelectorAll(".specimen-quick-btn").forEach(s=>{this.listen(s,"click",()=>{let t=s.getAttribute("data-font")||"";e&&(e.value=t),this.#s(t)})})}#s(e){let s=this.#i(),t=this.getAttribute("token")||"font-family-base";s&&s.style.setProperty(`--${t}`,e),this.setAttribute("font-family",e),this.dispatchEvent(new CustomEvent("type-specimen:change",{bubbles:!0,detail:{fontFamily:e,token:t,target:this.getAttribute("target")||":root"}}))}#i(){let e=this.getAttribute("target")||":root";try{return e===":root"?document.documentElement:document.querySelector(e)}catch{return document.documentElement}}};u("type-specimen",c);
19
19
  //# sourceMappingURL=type-specimen.js.map
@@ -6,13 +6,17 @@ var g=`
6
6
  color: var(--_text);
7
7
  container-type: inline-size;
8
8
 
9
- --_bg: var(--user-journey-bg, var(--color-surface-raised, #f8f9fa));
10
- --_card: var(--user-journey-card, var(--color-surface, #ffffff));
11
- --_border: var(--user-journey-border, var(--color-border, #e0e0e0));
12
- --_muted: var(--user-journey-muted, var(--color-text-muted, #666666));
13
- --_text: var(--user-journey-text, var(--color-text, #1a1a1a));
14
- --_curve-stroke: var(--user-journey-curve-stroke, #6366f1);
15
- --_radius: var(--user-journey-radius, var(--radius-l, 0.75rem));
9
+ --_bg: var(--user-journey-bg, var(--color-surface-raised, #f8f9fa));
10
+ --_card: var(--user-journey-card, var(--color-surface, #ffffff));
11
+ --_border: var(--user-journey-border, var(--color-border, #e0e0e0));
12
+ --_muted: var(--user-journey-muted, var(--color-text-muted, #666666));
13
+ --_text: var(--user-journey-text, var(--color-text, #1a1a1a));
14
+ --_inverted: var(--user-journey-text-inverted, var(--color-text-inverted, #ffffff));
15
+ --_primary: var(--user-journey-primary, var(--color-primary, var(--color-interactive, #6366f1)));
16
+ --_accent: var(--user-journey-accent, var(--color-accent, #8b5cf6));
17
+ --_link: var(--user-journey-link, var(--color-interactive, var(--color-primary, #6366f1)));
18
+ --_curve-stroke: var(--user-journey-curve-stroke, var(--_primary));
19
+ --_radius: var(--user-journey-radius, var(--radius-l, 0.75rem));
16
20
 
17
21
  --_font-sans: var(--user-journey-font, var(--font-sans, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif));
18
22
  --_font-mono: var(--user-journey-font-mono, var(--font-mono, ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, monospace));
@@ -25,6 +29,20 @@ var g=`
25
29
  --_space-s: var(--user-journey-space-s, var(--size-s, 0.75rem));
26
30
  --_space-m: var(--user-journey-space-m, var(--size-m, 1rem));
27
31
  --_space-l: var(--user-journey-space-l, var(--size-l, 1.5rem));
32
+
33
+ /* Semantic tints derived from theme tokens via color-mix.
34
+ Subtle backgrounds (10\u201314%) for body cells, header at 22%. */
35
+ --_tint-pos: color-mix(in oklch, var(--color-success, #22c55e) 14%, var(--_card));
36
+ --_tint-neu: color-mix(in oklch, var(--color-warning, #f59e0b) 12%, var(--_card));
37
+ --_tint-neg: color-mix(in oklch, var(--color-error, #ef4444) 12%, var(--_card));
38
+ --_tint-row-pain: color-mix(in oklch, var(--color-error, #ef4444) 8%, var(--_card));
39
+ --_tint-row-opp: color-mix(in oklch, var(--color-success, #22c55e) 8%, var(--_card));
40
+ --_chip-type-bg: color-mix(in oklch, var(--_accent) 18%, var(--_card));
41
+ --_chip-type-fg: var(--color-accent-text, var(--_accent));
42
+ --_chip-story-bg: color-mix(in oklch, var(--_link) 18%, var(--_card));
43
+ --_chip-story-bg-hover: color-mix(in oklch, var(--_link) 28%, var(--_card));
44
+ --_chip-story-fg: var(--_link);
45
+ --_grid-head-bg: color-mix(in oklch, var(--_primary) 85%, var(--color-text, #000));
28
46
  }
29
47
 
30
48
  *, *::before, *::after { box-sizing: border-box; margin: 0; }
@@ -51,7 +69,7 @@ var g=`
51
69
  inset-block: 0;
52
70
  inset-inline-start: 0;
53
71
  width: 4px;
54
- background: linear-gradient(135deg, #6366f1, #8b5cf6);
72
+ background: linear-gradient(135deg, var(--_primary), var(--_accent));
55
73
  }
56
74
 
57
75
  .journey__header-top {
@@ -83,22 +101,16 @@ var g=`
83
101
  }
84
102
 
85
103
  .chip--type {
86
- color: #6366f1;
87
- background: #ede9fe;
104
+ color: var(--_chip-type-fg);
105
+ background: var(--_chip-type-bg);
88
106
  }
89
107
 
90
108
  .chip--story {
91
- color: #0369a1;
92
- background: #e0f2fe;
109
+ color: var(--_chip-story-fg);
110
+ background: var(--_chip-story-bg);
93
111
  }
94
112
 
95
- .chip--story:hover { background: #bae6fd; }
96
-
97
- @media (prefers-color-scheme: dark) {
98
- .chip--type { color: #a78bfa; background: #2e1065; }
99
- .chip--story { color: #38bdf8; background: #082f49; }
100
- .chip--story:hover { background: #0c4a6e; }
101
- }
113
+ .chip--story:hover { background: var(--_chip-story-bg-hover); }
102
114
 
103
115
  /* Persona ref */
104
116
  .persona-ref {
@@ -112,7 +124,7 @@ var g=`
112
124
  white-space: nowrap;
113
125
  }
114
126
  .persona-ref svg { width: 14px; height: 14px; flex-shrink: 0; }
115
- a.persona-ref:hover { color: #6366f1; text-decoration: underline; }
127
+ a.persona-ref:hover { color: var(--_link); text-decoration: underline; }
116
128
 
117
129
  /* Title & summary (slotted content) */
118
130
  .journey__title-wrap {
@@ -161,16 +173,10 @@ var g=`
161
173
 
162
174
  .journey--compact .curve-svg { height: 54px; }
163
175
 
164
- .zone { opacity: 0.35; }
165
- .zone--pos { fill: #dcfce7; }
166
- .zone--neu { fill: #fef9c3; }
167
- .zone--neg { fill: #fee2e2; }
168
-
169
- @media (prefers-color-scheme: dark) {
170
- .zone--pos { fill: #14532d; }
171
- .zone--neu { fill: #713f12; }
172
- .zone--neg { fill: #7f1d1d; }
173
- }
176
+ .zone { opacity: 0.55; }
177
+ .zone--pos { fill: var(--_tint-pos); }
178
+ .zone--neu { fill: var(--_tint-neu); }
179
+ .zone--neg { fill: var(--_tint-neg); }
174
180
 
175
181
  .vline { stroke: var(--_border); stroke-width: 1; stroke-dasharray: 3 4; }
176
182
  .curve-line { stroke: var(--_curve-stroke); stroke-width: 2.5; stroke-linecap: round; }
@@ -187,12 +193,8 @@ var g=`
187
193
 
188
194
  /* Head row */
189
195
  .journey__grid thead tr {
190
- background: #1e1b4b;
191
- color: #fff;
192
- }
193
-
194
- @media (prefers-color-scheme: dark) {
195
- .journey__grid thead tr { background: #0f0d30; }
196
+ background: var(--_grid-head-bg);
197
+ color: var(--_inverted);
196
198
  }
197
199
 
198
200
  .corner {
@@ -207,19 +209,15 @@ var g=`
207
209
  min-width: 100px;
208
210
  position: sticky;
209
211
  left: 0;
210
- background: #1e1b4b;
212
+ background: var(--_grid-head-bg);
211
213
  z-index: 2;
212
214
  }
213
215
 
214
- @media (prefers-color-scheme: dark) {
215
- .corner { background: #0f0d30; }
216
- }
217
-
218
216
  .phase-head {
219
217
  padding: 10px 14px;
220
218
  text-align: left;
221
219
  vertical-align: top;
222
- border-inline-start: 1px solid rgba(255 255 255 / 0.12);
220
+ border-inline-start: 1px solid color-mix(in oklch, var(--_inverted) 12%, transparent);
223
221
  min-width: 160px;
224
222
  position: relative;
225
223
  }
@@ -231,7 +229,7 @@ var g=`
231
229
  inset-block-start: 0;
232
230
  inset-inline: 0;
233
231
  height: 3px;
234
- background: var(--ec, #6366f1);
232
+ background: var(--ec, var(--_primary));
235
233
  }
236
234
 
237
235
  .ph-num { display: block; font-size: 10px; opacity: 0.5; margin-block-end: 2px; }
@@ -271,13 +269,8 @@ var g=`
271
269
  .data-cell--empty { color: var(--_muted); opacity: 0.35; }
272
270
 
273
271
  /* Semantic row tints */
274
- .grid-row--painpoints .data-cell { background: #fff5f5; }
275
- .grid-row--opportunities .data-cell { background: #f0fdf4; }
276
-
277
- @media (prefers-color-scheme: dark) {
278
- .grid-row--painpoints .data-cell { background: #2d0a0a; }
279
- .grid-row--opportunities .data-cell { background: #052e16; }
280
- }
272
+ .grid-row--painpoints .data-cell { background: var(--_tint-row-pain); }
273
+ .grid-row--opportunities .data-cell { background: var(--_tint-row-opp); }
281
274
 
282
275
  /* Compact */
283
276
  .journey--compact .phase-head { min-width: 120px; padding: 8px 10px; }
@@ -286,7 +279,7 @@ var g=`
286
279
 
287
280
  /* Utility */
288
281
  .state-msg { padding: var(--_space-l); font-size: var(--_font-sm); color: var(--_muted); font-style: italic; }
289
- .state-msg--error { color: #dc2626; }
282
+ .state-msg--error { color: var(--color-error-text, var(--color-error, #dc2626)); }
290
283
  .journey__placeholder { padding: 20px 24px; font-size: var(--_font-sm); color: var(--_muted); }
291
284
  code { font-family: var(--_font-mono); font-size: 0.88em; }
292
285
 
@@ -303,7 +296,7 @@ var g=`
303
296
  .journey__grid-wrap { overflow: visible; }
304
297
  .row-label, .corner { position: relative; }
305
298
  }
306
- `;var E=window.matchMedia("(prefers-reduced-motion: reduce)");var $=new Map;function j(n,e,r={}){let a=r.priority??10,o={impl:e,bundle:r.bundle,contract:r.contract,priority:a},t=$.get(n);if(customElements.get(n)){if(!t||t.priority>=a){t&&t.priority===a&&t.impl!==e&&console.warn(`[VB Bundle] Tag <${n}> already registered by "${t.bundle}" (priority ${t.priority}). Skipping "${r.bundle}".`);return}console.warn(`[VB Bundle] Tag <${n}> defined by "${t.bundle}" cannot be replaced (customElements.define is permanent). "${r.bundle}" has higher priority but arrived late.`);return}if(t&&t.priority>=a){t.priority===a&&console.warn(`[VB Bundle] Tag <${n}> already registered by "${t.bundle}". Skipping "${r.bundle}" (first wins at equal priority).`);return}$.set(n,o),customElements.define(n,e)}function d(n){return String(n).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function x(n){return`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${n}</svg>`}var h={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"/>'},A={says:{label:"Says",icon:h.messageCircle,color:"#3b82f6"},thinks:{label:"Thinks",icon:h.lightbulb,color:"#8b5cf6"},does:{label:"Does",icon:h.wrench,color:"#f59e0b"},feels:{label:"Feels",icon:h.heart,color:"#ef4444"}},f={delighted:{emoji:"\u{1F604}",score:.95,color:"#16a34a"},satisfied:{emoji:"\u{1F60A}",score:.8,color:"#22c55e"},hopeful:{emoji:"\u{1F642}",score:.68,color:"#84cc16"},curious:{emoji:"\u{1F914}",score:.55,color:"#eab308"},neutral:{emoji:"\u{1F610}",score:.5,color:"#94a3b8"},uncertain:{emoji:"\u{1F615}",score:.4,color:"#f97316"},confused:{emoji:"\u{1F635}",score:.3,color:"#fb923c"},frustrated:{emoji:"\u{1F624}",score:.18,color:"#ef4444"},angry:{emoji:"\u{1F620}",score:.05,color:"#dc2626"}};var M=[{key:"actions",label:"Actions"},{key:"thoughts",label:"Thoughts"},{key:"touchpoints",label:"Touchpoints"},{key:"painPoints",label:"Pain Points"},{key:"opportunities",label:"Opportunities"}],_=class extends HTMLElement{static get observedAttributes(){return["src","persona","persona-id","story-ids","compact"]}#e=new Map;constructor(){super(),this.attachShadow({mode:"open"}),this.__phases=null}get phases(){return this.__phases}set phases(e){this.__phases=e,this.isConnected&&this._render()}#t(){for(let e of this.children){let r=e.getAttribute("slot");r&&this.#e.set(r,e.textContent.trim())}}_resolve(e){return this.getAttribute(e)||this.#e.get(e)||""}connectedCallback(){this.#t(),this.setAttribute("data-upgraded",""),this.hasAttribute("src")?this._loadSrc(this.getAttribute("src")):this._render()}disconnectedCallback(){this.removeAttribute("data-upgraded")}attributeChangedCallback(e){this.isConnected&&(e==="src"?this._loadSrc(this.getAttribute("src")):this._render())}async _loadSrc(e){if(e){this.shadowRoot.innerHTML=`<style>${g}</style><div class="state-msg">Loading\u2026</div>`;try{let r=await fetch(e);if(!r.ok)throw new Error(`HTTP ${r.status}`);let a=await r.json();if(a.persona&&this.setAttribute("persona",a.persona),a.personaId&&this.setAttribute("persona-id",a.personaId),a.title&&!this.querySelector('[slot="title"]')){let o=document.createElement("h2");o.slot="title",o.textContent=a.title,this.appendChild(o)}if(a.summary&&!this.querySelector('[slot="summary"]')){let o=document.createElement("p");o.slot="summary",o.textContent=a.summary,this.appendChild(o)}this.__phases=a.phases||[],this._render()}catch(r){this.shadowRoot.innerHTML=`<style>${g}</style><div class="state-msg state-msg--error">Could not load journey: ${d(r.message)}</div>`}}}_render(){let e=this._resolve("persona")||"",r=this._resolve("persona-id")||"",a=(this.getAttribute("story-ids")||"").split(",").map(i=>i.trim()).filter(Boolean),o=this.hasAttribute("compact"),t=this.__phases,p=!!this.querySelector('[slot="summary"]')||this.#e.has("summary");this.shadowRoot.innerHTML=`<style>${g}</style>
299
+ `;var A=window.matchMedia("(prefers-reduced-motion: reduce)");var $=new Map;function k(n,e,r={}){let a=r.priority??10,o={impl:e,bundle:r.bundle,contract:r.contract,priority:a},t=$.get(n);if(customElements.get(n)){if(!t||t.priority>=a){t&&t.priority===a&&t.impl!==e&&console.warn(`[VB Bundle] Tag <${n}> already registered by "${t.bundle}" (priority ${t.priority}). Skipping "${r.bundle}".`);return}console.warn(`[VB Bundle] Tag <${n}> defined by "${t.bundle}" cannot be replaced (customElements.define is permanent). "${r.bundle}" has higher priority but arrived late.`);return}if(t&&t.priority>=a){t.priority===a&&console.warn(`[VB Bundle] Tag <${n}> already registered by "${t.bundle}". Skipping "${r.bundle}" (first wins at equal priority).`);return}$.set(n,o),customElements.define(n,e)}var M=0;function C(n,e,r="vb-vt"){if(!n?.isConnected||typeof document>"u"||!("startViewTransition"in document)||matchMedia("(prefers-reduced-motion: reduce)").matches)return e(),null;let a=`${r}-${++M}`;n.style.viewTransitionName=a;let o=document.startViewTransition(e);return o.finished.finally(()=>{n.style.viewTransitionName===a&&(n.style.viewTransitionName="")}),o}function l(n){return String(n).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function b(n){return`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${n}</svg>`}var h={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"/>'},L={says:{label:"Says",icon:h.messageCircle,color:"#3b82f6"},thinks:{label:"Thinks",icon:h.lightbulb,color:"#8b5cf6"},does:{label:"Does",icon:h.wrench,color:"#f59e0b"},feels:{label:"Feels",icon:h.heart,color:"#ef4444"}},m={delighted:{emoji:"\u{1F604}",score:.95,color:"#16a34a"},satisfied:{emoji:"\u{1F60A}",score:.8,color:"#22c55e"},hopeful:{emoji:"\u{1F642}",score:.68,color:"#84cc16"},curious:{emoji:"\u{1F914}",score:.55,color:"#eab308"},neutral:{emoji:"\u{1F610}",score:.5,color:"#94a3b8"},uncertain:{emoji:"\u{1F615}",score:.4,color:"#f97316"},confused:{emoji:"\u{1F635}",score:.3,color:"#fb923c"},frustrated:{emoji:"\u{1F624}",score:.18,color:"#ef4444"},angry:{emoji:"\u{1F620}",score:.05,color:"#dc2626"}};var S=[{key:"actions",label:"Actions"},{key:"thoughts",label:"Thoughts"},{key:"touchpoints",label:"Touchpoints"},{key:"painPoints",label:"Pain Points"},{key:"opportunities",label:"Opportunities"}],w=class extends HTMLElement{static get observedAttributes(){return["src","persona","persona-id","story-ids","compact"]}#e=new Map;constructor(){super(),this.attachShadow({mode:"open"}),this.__phases=null}get phases(){return this.__phases}set phases(e){this.__phases!==e&&(this.__phases=e,this.isConnected&&this._render(),this.dispatchEvent(new CustomEvent("user-journey:phases-changed",{detail:{phases:e,source:"property"},bubbles:!0,composed:!0})))}get data(){return{persona:this.getAttribute("persona")||void 0,personaId:this.getAttribute("persona-id")||void 0,title:this.querySelector('[slot="title"]')?.textContent?.trim()||void 0,summary:this.querySelector('[slot="summary"]')?.textContent?.trim()||void 0,phases:this.__phases||void 0}}set data(e){if(!(!e||typeof e!="object")){if(e.persona&&this.setAttribute("persona",String(e.persona)),e.personaId&&this.setAttribute("persona-id",String(e.personaId)),e.title&&!this.querySelector('[slot="title"]')){let r=document.createElement("h2");r.slot="title",r.textContent=e.title,this.appendChild(r)}if(e.summary&&!this.querySelector('[slot="summary"]')){let r=document.createElement("p");r.slot="summary",r.textContent=e.summary,this.appendChild(r)}e.phases!=null&&(this.__phases=e.phases),this.isConnected&&this._render(),this.dispatchEvent(new CustomEvent("user-journey:data-changed",{detail:{data:this.data,source:"property"},bubbles:!0,composed:!0}))}}#t(){for(let e of this.children){let r=e.getAttribute("slot");r&&this.#e.set(r,e.textContent.trim())}}_resolve(e){return this.getAttribute(e)||this.#e.get(e)||""}connectedCallback(){this.#t(),this.setAttribute("data-upgraded",""),this.hasAttribute("src")?this._loadSrc(this.getAttribute("src")):this._render()}disconnectedCallback(){this.removeAttribute("data-upgraded")}attributeChangedCallback(e){this.isConnected&&(e==="src"?this._loadSrc(this.getAttribute("src")):this._render())}async _loadSrc(e){if(!e)return;let r=this.shadowRoot;r.innerHTML=`<style>${g}</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();if(o.persona&&this.setAttribute("persona",o.persona),o.personaId&&this.setAttribute("persona-id",o.personaId),o.title&&!this.querySelector('[slot="title"]')){let t=document.createElement("h2");t.slot="title",t.textContent=o.title,this.appendChild(t)}if(o.summary&&!this.querySelector('[slot="summary"]')){let t=document.createElement("p");t.slot="summary",t.textContent=o.summary,this.appendChild(t)}this.__phases=o.phases||[],this._render()}catch(a){r.innerHTML=`<style>${g}</style><div class="state-msg state-msg--error">Could not load journey: ${l(a.message)}</div>`}}_render(){let e=this._resolve("persona")||"",r=this._resolve("persona-id")||"",a=(this.getAttribute("story-ids")||"").split(",").map(i=>i.trim()).filter(Boolean),o=this.hasAttribute("compact"),t=this.__phases,d=!!this.querySelector('[slot="summary"]')||this.#e.has("summary"),p=this.querySelector('[slot="title"]')?.textContent?.trim()||this.#e.get("title")||"",c=`<style>${g}</style>
307
300
  <article class="journey${o?" journey--compact":""}">
308
301
 
309
302
  <header class="journey__header">
@@ -314,24 +307,24 @@ var g=`
314
307
  </div>
315
308
  ${e?`
316
309
  <div class="journey__persona">
317
- ${r?`<a class="persona-ref" href="#${r}">${x(h.user)} ${d(e)}</a>`:`<span class="persona-ref">${x(h.user)} ${d(e)}</span>`}
310
+ ${r?`<a class="persona-ref" href="#${r}">${b(h.user)} ${l(e)}</a>`:`<span class="persona-ref">${b(h.user)} ${l(e)}</span>`}
318
311
  </div>`:""}
319
312
  </div>
320
313
  <div class="journey__title-wrap">
321
314
  <slot name="title"><h2 class="journey__title">User Journey</h2></slot>
322
315
  </div>
323
- ${p?'<div class="journey__summary-wrap"><slot name="summary"></slot></div>':""}
316
+ ${d?'<div class="journey__summary-wrap"><slot name="summary"></slot></div>':""}
324
317
  </header>
325
318
 
326
319
  ${t&&t.length?this._curve(t)+this._grid(t):`<div class="journey__placeholder">
327
320
  <p>Add phase data via <code>src</code> (JSON) or set <code>.phases</code> programmatically.</p>
328
321
  </div>`}
329
322
 
330
- </article>`,this.dispatchEvent(new CustomEvent("journey-ready",{bubbles:!0,composed:!0,detail:{title,persona:e,phaseCount:t?t.length:0}}))}_curve(e){let l=e.length,b=s=>28+(l<2?944/2:s/(l-1)*944),k=s=>14+(1-(f[s.emotion]||f.neutral).score)*72,c=e.map((s,u)=>({x:b(u),y:k(s),ph:s})),v=`M ${c[0].x},${c[0].y}`;for(let s=1;s<c.length;s++){let u=c[s-1],m=c[s],y=(u.x+m.x)/2;v+=` C ${y},${u.y} ${y},${m.y} ${m.x},${m.y}`}let w=`uj-${Math.random().toString(36).slice(2,8)}`,z=c.at(-1);return`
323
+ </article>`,f=this.shadowRoot,v=()=>{f.innerHTML=c};f.querySelector("article")?C(this,v,"uj-vt"):v(),this.dispatchEvent(new CustomEvent("journey-ready",{bubbles:!0,composed:!0,detail:{title:p,persona:e,phaseCount:t?t.length:0}}))}_curve(e){let c=e.length,f=s=>28+(c<2?944/2:s/(c-1)*944),v=s=>14+(1-(m[s.emotion]||m.neutral).score)*72,i=e.map((s,u)=>({x:f(u),y:v(s),ph:s})),x=`M ${i[0].x},${i[0].y}`;for(let s=1;s<i.length;s++){let u=i[s-1],y=i[s],_=(u.x+y.x)/2;x+=` C ${_},${u.y} ${_},${y.y} ${y.x},${y.y}`}let j=`uj-${Math.random().toString(36).slice(2,8)}`,z=i.at(-1);return`
331
324
  <div class="journey__curve" aria-hidden="true">
332
325
  <svg viewBox="0 0 1000 100" preserveAspectRatio="none" class="curve-svg">
333
326
  <defs>
334
- <linearGradient id="${w}" x1="0" y1="0" x2="0" y2="1">
327
+ <linearGradient id="${j}" x1="0" y1="0" x2="0" y2="1">
335
328
  <stop offset="0%" stop-color="#6366f1" stop-opacity="0.22"/>
336
329
  <stop offset="100%" stop-color="#6366f1" stop-opacity="0"/>
337
330
  </linearGradient>
@@ -339,28 +332,28 @@ var g=`
339
332
  <rect x="0" y="0" width="1000" height="${100*.4}" class="zone zone--pos"/>
340
333
  <rect x="0" y="${100*.4}" width="1000" height="${100*.2}" class="zone zone--neu"/>
341
334
  <rect x="0" y="${100*.6}" width="1000" height="${100*.4}" class="zone zone--neg"/>
342
- ${c.map(({x:s})=>`<line x1="${s}" y1="0" x2="${s}" y2="100" class="vline"/>`).join("")}
343
- <path d="${v} L ${z.x},100 L ${c[0].x},100 Z" fill="url(#${w})"/>
344
- <path d="${v}" fill="none" class="curve-line"/>
345
- ${c.map(({x:s,y:u,ph:m})=>{let y=f[m.emotion]||f.neutral;return`<circle cx="${s}" cy="${u}" r="5" class="dot" style="fill:${y.color}"/>`}).join("")}
335
+ ${i.map(({x:s})=>`<line x1="${s}" y1="0" x2="${s}" y2="100" class="vline"/>`).join("")}
336
+ <path d="${x} L ${z.x},100 L ${i[0].x},100 Z" fill="url(#${j})"/>
337
+ <path d="${x}" fill="none" class="curve-line"/>
338
+ ${i.map(({x:s,y:u,ph:y})=>{let _=m[y.emotion]||m.neutral;return`<circle cx="${s}" cy="${u}" r="5" class="dot" style="fill:${_.color}"/>`}).join("")}
346
339
  </svg>
347
- </div>`}_grid(e){let r=e.map((o,t)=>{let p=f[o.emotion]||f.neutral,i=o.storyIds||[];return`
340
+ </div>`}_grid(e){let r=e.map((o,t)=>{let d=m[o.emotion]||m.neutral,p=o.storyIds||[];return`
348
341
  <th class="phase-head" data-emotion="${o.emotion||"neutral"}"
349
- style="--ec:${p.color}">
342
+ style="--ec:${d.color}">
350
343
  <span class="ph-num">${t+1}</span>
351
- <span class="ph-name">${d(o.name||"")}</span>
352
- <span class="ph-emoji" title="${o.emotion||"neutral"}"><span role="img" aria-label="${d(o.emotion||"neutral")}">${p.emoji}</span></span>
353
- ${i.length?`<div class="ph-stories">${i.map(l=>`<a class="chip chip--story" href="#${l}">${this._label(l)}</a>`).join("")}</div>`:""}
354
- </th>`}).join(""),a=M.map(({key:o,label:t})=>{let p=e.map(i=>{let l=i[o]||[];return l.length?`<td class="data-cell data-cell--${o.toLowerCase()}">
355
- ${l.map(b=>`<p>${d(b)}</p>`).join("")}
344
+ <span class="ph-name">${l(o.name||"")}</span>
345
+ <span class="ph-emoji" title="${o.emotion||"neutral"}"><span role="img" aria-label="${l(o.emotion||"neutral")}">${d.emoji}</span></span>
346
+ ${p.length?`<div class="ph-stories">${p.map(c=>`<a class="chip chip--story" href="#${c}">${this._label(c)}</a>`).join("")}</div>`:""}
347
+ </th>`}).join(""),a=S.map(({key:o,label:t})=>{let d=e.map(p=>{let c=p[o]||[];return c.length?`<td class="data-cell data-cell--${o.toLowerCase()}">
348
+ ${c.map(f=>`<p>${l(f)}</p>`).join("")}
356
349
  </td>`:'<td class="data-cell data-cell--empty">\u2014</td>'}).join("");return`
357
350
  <tr class="grid-row grid-row--${o.toLowerCase()}">
358
351
  <th class="row-label">${t}</th>
359
- ${p}
352
+ ${d}
360
353
  </tr>`}).join("");return`
361
354
  <div class="journey__grid-wrap">
362
355
  <table class="journey__grid"
363
- aria-label="${d(this.getAttribute("title")||"User Journey")} \u2014 phase breakdown">
356
+ aria-label="${l(this.getAttribute("title")||"User Journey")} \u2014 phase breakdown">
364
357
  <thead>
365
358
  <tr>
366
359
  <th class="corner">Stage</th>
@@ -369,5 +362,5 @@ var g=`
369
362
  </thead>
370
363
  <tbody>${a}</tbody>
371
364
  </table>
372
- </div>`}_label(e){return e.replace(/^(activity|persona|journey|story|user)-/,"").replace(/-/g," ").replace(/\b\w/g,r=>r.toUpperCase())}};j("user-journey",_);export{_ as UserJourney};
365
+ </div>`}_label(e){return e.replace(/^(activity|persona|journey|story|user)-/,"").replace(/-/g," ").replace(/\b\w/g,r=>r.toUpperCase())}};k("user-journey",w);export{w as UserJourney};
373
366
  //# sourceMappingURL=user-journey.js.map