vanilla-breeze 0.3.0 → 0.4.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 (224) hide show
  1. package/README.md +33 -4
  2. package/dist/cdn/components/activity-feed.js +1 -1
  3. package/dist/cdn/components/audio-player.js +2 -2
  4. package/dist/cdn/components/carousel-wc.js +1 -1
  5. package/dist/cdn/components/comment-box.js +16 -16
  6. package/dist/cdn/components/comment-thread.js +20 -20
  7. package/dist/cdn/components/comment-wc.js +1 -1
  8. package/dist/cdn/components/content-lens.js +1 -1
  9. package/dist/cdn/components/context-menu.js +1 -1
  10. package/dist/cdn/components/diagram-wc.js +1 -1
  11. package/dist/cdn/components/drop-down.js +1 -1
  12. package/dist/cdn/components/image-gallery.js +1 -1
  13. package/dist/cdn/components/manifest.json +44 -20
  14. package/dist/cdn/components/reaction-bar.js +1 -1
  15. package/dist/cdn/components/score-card.js +2 -2
  16. package/dist/cdn/components/settings-panel.js +15 -15
  17. package/dist/cdn/components/site-search.js +1 -1
  18. package/dist/cdn/components/social-embed.js +1 -1
  19. package/dist/cdn/components/tab-set.js +1 -1
  20. package/dist/cdn/components/theme-picker.js +45 -45
  21. package/dist/cdn/components/time-index.js +2 -2
  22. package/dist/cdn/components/time-picker.js +1 -1
  23. package/dist/cdn/components/version-switcher.js +1 -1
  24. package/dist/cdn/packs/effects.full.js +1 -1
  25. package/dist/cdn/packs/journal.effects.css +1 -1
  26. package/dist/cdn/packs/journal.full.css +1 -1
  27. package/dist/cdn/packs/kawaii.effects.css +1 -1
  28. package/dist/cdn/packs/kawaii.full.css +2 -2
  29. package/dist/cdn/packs/kawaii.full.js +4 -4
  30. package/dist/cdn/packs/kawaii.theme.css +1 -1
  31. package/dist/cdn/packs/manifest.json +11 -11
  32. package/dist/cdn/packs/memphis.full.css +1 -1
  33. package/dist/cdn/packs/memphis.theme.css +1 -1
  34. package/dist/cdn/packs/ui.full.css +1 -1
  35. package/dist/cdn/packs/ui.full.js +52 -52
  36. package/dist/cdn/themes/8bit.css +1 -1
  37. package/dist/cdn/themes/8bit.tokens.json +4 -4
  38. package/dist/cdn/themes/alpha1999-dark.tokens.json +4 -4
  39. package/dist/cdn/themes/alpha1999.css +1 -1
  40. package/dist/cdn/themes/alpha1999.tokens.json +4 -4
  41. package/dist/cdn/themes/anthropic.css +1 -1
  42. package/dist/cdn/themes/anthropic.tokens.json +4 -4
  43. package/dist/cdn/themes/art-deco-dark.tokens.json +4 -4
  44. package/dist/cdn/themes/art-deco.css +1 -1
  45. package/dist/cdn/themes/art-deco.tokens.json +4 -4
  46. package/dist/cdn/themes/bauhaus-dark.tokens.json +1 -1
  47. package/dist/cdn/themes/bauhaus.css +1 -1
  48. package/dist/cdn/themes/bauhaus.tokens.json +4 -4
  49. package/dist/cdn/themes/brutalist-dark.tokens.json +4 -4
  50. package/dist/cdn/themes/brutalist.css +1 -1
  51. package/dist/cdn/themes/brutalist.tokens.json +4 -4
  52. package/dist/cdn/themes/catalog/atlassian.tokens.json +2 -2
  53. package/dist/cdn/themes/catalog/bootstrap.tokens.json +2 -2
  54. package/dist/cdn/themes/catalog/carbon.tokens.json +2 -2
  55. package/dist/cdn/themes/catalog/catppuccin-mocha.tokens.json +2 -2
  56. package/dist/cdn/themes/catalog/govuk.tokens.json +2 -2
  57. package/dist/cdn/themes/catalog/manifest.json +1 -1
  58. package/dist/cdn/themes/catalog/material.tokens.json +2 -2
  59. package/dist/cdn/themes/catalog/salesforce.tokens.json +2 -2
  60. package/dist/cdn/themes/catalog/tailwind.tokens.json +2 -2
  61. package/dist/cdn/themes/catppuccin-frappe.css +1 -1
  62. package/dist/cdn/themes/catppuccin-frappe.tokens.json +4 -4
  63. package/dist/cdn/themes/catppuccin-latte-dark.tokens.json +4 -4
  64. package/dist/cdn/themes/catppuccin-latte.css +1 -1
  65. package/dist/cdn/themes/catppuccin-latte.tokens.json +4 -4
  66. package/dist/cdn/themes/catppuccin-macchiato.css +1 -1
  67. package/dist/cdn/themes/catppuccin-macchiato.tokens.json +4 -4
  68. package/dist/cdn/themes/catppuccin-mocha.css +1 -1
  69. package/dist/cdn/themes/catppuccin-mocha.tokens.json +4 -4
  70. package/dist/cdn/themes/classic-dark.tokens.json +4 -4
  71. package/dist/cdn/themes/classic.css +1 -1
  72. package/dist/cdn/themes/classic.tokens.json +4 -4
  73. package/dist/cdn/themes/claymorphism-dark.tokens.json +10 -10
  74. package/dist/cdn/themes/claymorphism.css +1 -1
  75. package/dist/cdn/themes/claymorphism.tokens.json +10 -10
  76. package/dist/cdn/themes/clinical-dark.tokens.json +4 -4
  77. package/dist/cdn/themes/clinical.css +1 -1
  78. package/dist/cdn/themes/clinical.tokens.json +4 -4
  79. package/dist/cdn/themes/cottagecore-dark.tokens.json +4 -4
  80. package/dist/cdn/themes/cottagecore.css +1 -1
  81. package/dist/cdn/themes/cottagecore.tokens.json +4 -4
  82. package/dist/cdn/themes/cyber.css +1 -1
  83. package/dist/cdn/themes/cyber.tokens.json +4 -5
  84. package/dist/cdn/themes/dawn-dark.tokens.json +4 -4
  85. package/dist/cdn/themes/dawn.css +1 -1
  86. package/dist/cdn/themes/dawn.tokens.json +4 -4
  87. package/dist/cdn/themes/dracula.css +1 -1
  88. package/dist/cdn/themes/dracula.tokens.json +4 -4
  89. package/dist/cdn/themes/dusk.css +1 -1
  90. package/dist/cdn/themes/dusk.tokens.json +4 -4
  91. package/dist/cdn/themes/editorial-dark.tokens.json +3 -3
  92. package/dist/cdn/themes/editorial.css +1 -1
  93. package/dist/cdn/themes/editorial.tokens.json +4 -4
  94. package/dist/cdn/themes/financial-dark.tokens.json +4 -4
  95. package/dist/cdn/themes/financial.css +1 -1
  96. package/dist/cdn/themes/financial.tokens.json +4 -4
  97. package/dist/cdn/themes/genai.css +1 -1
  98. package/dist/cdn/themes/genai.tokens.json +4 -4
  99. package/dist/cdn/themes/glassmorphism-dark.tokens.json +4 -4
  100. package/dist/cdn/themes/glassmorphism.css +1 -1
  101. package/dist/cdn/themes/glassmorphism.tokens.json +4 -4
  102. package/dist/cdn/themes/government-dark.tokens.json +4 -4
  103. package/dist/cdn/themes/government.css +1 -1
  104. package/dist/cdn/themes/government.tokens.json +4 -4
  105. package/dist/cdn/themes/gruvbox-dark.tokens.json +4 -4
  106. package/dist/cdn/themes/gruvbox.css +1 -1
  107. package/dist/cdn/themes/gruvbox.tokens.json +4 -4
  108. package/dist/cdn/themes/high-noon-dark.tokens.json +4 -4
  109. package/dist/cdn/themes/high-noon.css +1 -1
  110. package/dist/cdn/themes/high-noon.tokens.json +4 -4
  111. package/dist/cdn/themes/ibm.css +1 -1
  112. package/dist/cdn/themes/ibm.tokens.json +6 -6
  113. package/dist/cdn/themes/journal-dark.tokens.json +4 -4
  114. package/dist/cdn/themes/journal.css +1 -1
  115. package/dist/cdn/themes/journal.tokens.json +4 -4
  116. package/dist/cdn/themes/kawaii-dark.tokens.json +4 -4
  117. package/dist/cdn/themes/kawaii.css +1 -1
  118. package/dist/cdn/themes/kawaii.tokens.json +4 -4
  119. package/dist/cdn/themes/magna-dark.tokens.json +4 -4
  120. package/dist/cdn/themes/magna.css +1 -1
  121. package/dist/cdn/themes/magna.tokens.json +4 -4
  122. package/dist/cdn/themes/manifest.json +48 -48
  123. package/dist/cdn/themes/mcdonalds.css +1 -1
  124. package/dist/cdn/themes/mcdonalds.tokens.json +4 -4
  125. package/dist/cdn/themes/midnight.css +1 -1
  126. package/dist/cdn/themes/midnight.tokens.json +4 -4
  127. package/dist/cdn/themes/minimal-dark.tokens.json +4 -4
  128. package/dist/cdn/themes/minimal.css +1 -1
  129. package/dist/cdn/themes/minimal.tokens.json +4 -4
  130. package/dist/cdn/themes/modern-dark.tokens.json +4 -4
  131. package/dist/cdn/themes/modern.css +1 -1
  132. package/dist/cdn/themes/modern.tokens.json +4 -4
  133. package/dist/cdn/themes/nes-dark.tokens.json +4 -4
  134. package/dist/cdn/themes/nes.css +1 -1
  135. package/dist/cdn/themes/nes.tokens.json +4 -4
  136. package/dist/cdn/themes/neumorphism-dark.tokens.json +10 -10
  137. package/dist/cdn/themes/neumorphism.css +1 -1
  138. package/dist/cdn/themes/neumorphism.tokens.json +10 -10
  139. package/dist/cdn/themes/nord-dark.tokens.json +4 -4
  140. package/dist/cdn/themes/nord.css +1 -1
  141. package/dist/cdn/themes/nord.tokens.json +4 -4
  142. package/dist/cdn/themes/organic-dark.tokens.json +4 -4
  143. package/dist/cdn/themes/organic.css +1 -1
  144. package/dist/cdn/themes/organic.tokens.json +4 -4
  145. package/dist/cdn/themes/rose-pine-dark.tokens.json +4 -4
  146. package/dist/cdn/themes/rose-pine.css +1 -1
  147. package/dist/cdn/themes/rose-pine.tokens.json +4 -4
  148. package/dist/cdn/themes/rough-dark.tokens.json +4 -5
  149. package/dist/cdn/themes/rough.css +1 -1
  150. package/dist/cdn/themes/rough.tokens.json +5 -6
  151. package/dist/cdn/themes/solarized-dark.tokens.json +4 -4
  152. package/dist/cdn/themes/solarized.css +1 -1
  153. package/dist/cdn/themes/solarized.tokens.json +4 -4
  154. package/dist/cdn/themes/starbucks.css +1 -1
  155. package/dist/cdn/themes/starbucks.tokens.json +4 -4
  156. package/dist/cdn/themes/startup-dark.tokens.json +4 -4
  157. package/dist/cdn/themes/startup.css +1 -1
  158. package/dist/cdn/themes/startup.tokens.json +4 -4
  159. package/dist/cdn/themes/super2026-dark.tokens.json +4 -4
  160. package/dist/cdn/themes/super2026.css +1 -1
  161. package/dist/cdn/themes/super2026.tokens.json +4 -4
  162. package/dist/cdn/themes/swiss-dark.tokens.json +1 -1
  163. package/dist/cdn/themes/swiss.css +1 -1
  164. package/dist/cdn/themes/swiss.tokens.json +4 -4
  165. package/dist/cdn/themes/terminal.css +1 -1
  166. package/dist/cdn/themes/terminal.tokens.json +4 -4
  167. package/dist/cdn/themes/tokyo-night-dark.tokens.json +4 -4
  168. package/dist/cdn/themes/tokyo-night.css +1 -1
  169. package/dist/cdn/themes/tokyo-night.tokens.json +4 -4
  170. package/dist/cdn/themes/vaporwave-dark.tokens.json +4 -4
  171. package/dist/cdn/themes/vaporwave.css +1 -1
  172. package/dist/cdn/themes/vaporwave.tokens.json +4 -4
  173. package/dist/cdn/themes/win9x-dark.tokens.json +4 -4
  174. package/dist/cdn/themes/win9x.css +1 -1
  175. package/dist/cdn/themes/win9x.tokens.json +4 -4
  176. package/dist/cdn/vanilla-breeze-charts.css +1 -1
  177. package/dist/cdn/vanilla-breeze-core.css +1 -1
  178. package/dist/cdn/vanilla-breeze-core.js +62 -62
  179. package/dist/cdn/vanilla-breeze-dev.css +1 -1
  180. package/dist/cdn/vanilla-breeze-extras.js +19 -19
  181. package/dist/cdn/vanilla-breeze-labs.css +1 -1
  182. package/dist/cdn/vanilla-breeze.css +1 -1
  183. package/dist/cdn/vanilla-breeze.js +170 -170
  184. package/package.json +5 -8
  185. package/dist/cdn/components/accessibility-specimen.js +0 -11
  186. package/dist/cdn/components/adr-wc.js +0 -403
  187. package/dist/cdn/components/breakpoint-specimen.js +0 -26
  188. package/dist/cdn/components/burndown-chart.js +0 -2
  189. package/dist/cdn/components/capacity-plan.js +0 -25
  190. package/dist/cdn/components/color-palette.js +0 -16
  191. package/dist/cdn/components/component-sampler.js +0 -45
  192. package/dist/cdn/components/empathy-map.js +0 -582
  193. package/dist/cdn/components/font-pairer.js +0 -108
  194. package/dist/cdn/components/gantt-chart.js +0 -2
  195. package/dist/cdn/components/gradient-builder.js +0 -52
  196. package/dist/cdn/components/impact-effort.js +0 -2
  197. package/dist/cdn/components/iron-triangle.js +0 -2
  198. package/dist/cdn/components/kanban-board.js +0 -2
  199. package/dist/cdn/components/layout-specimen.js +0 -35
  200. package/dist/cdn/components/motion-specimen.js +0 -21
  201. package/dist/cdn/components/palette-generator.js +0 -15
  202. package/dist/cdn/components/product-roadmap.js +0 -3
  203. package/dist/cdn/components/quadrant-grid.js +0 -3
  204. package/dist/cdn/components/quality-target.js +0 -12
  205. package/dist/cdn/components/requirement-card.js +0 -122
  206. package/dist/cdn/components/review-surface.js +0 -535
  207. package/dist/cdn/components/risk-register.js +0 -25
  208. package/dist/cdn/components/semantic-palette.js +0 -30
  209. package/dist/cdn/components/spacing-specimen.js +0 -6
  210. package/dist/cdn/components/story-map.js +0 -2
  211. package/dist/cdn/components/theme-catalog.js +0 -28
  212. package/dist/cdn/components/theme-export.js +0 -26
  213. package/dist/cdn/components/theme-import.js +0 -44
  214. package/dist/cdn/components/token-specimen.js +0 -26
  215. package/dist/cdn/components/traceability-matrix.js +0 -3
  216. package/dist/cdn/components/type-specimen.js +0 -19
  217. package/dist/cdn/components/user-journey.js +0 -366
  218. package/dist/cdn/components/user-persona.js +0 -402
  219. package/dist/cdn/components/user-story.js +0 -411
  220. package/dist/cdn/components/work-item.js +0 -447
  221. package/dist/cdn/packs/design-system.full.css +0 -2
  222. package/dist/cdn/packs/design-system.full.js +0 -175
  223. package/dist/cdn/packs/ux-planning.full.css +0 -2
  224. package/dist/cdn/packs/ux-planning.full.js +0 -3160
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vanilla-breeze",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "A layered HTML component system extending HTML's native model",
5
5
  "type": "module",
6
6
  "main": "./dist/cdn/vanilla-breeze.js",
@@ -35,9 +35,7 @@
35
35
  "./kawaii-js": "./dist/cdn/packs/kawaii.full.js",
36
36
  "./memphis-css": "./dist/cdn/packs/memphis.full.css",
37
37
  "./memphis-js": "./dist/cdn/packs/memphis.full.js",
38
- "./journal-css": "./dist/cdn/packs/journal.full.css",
39
- "./ux-planning-css": "./dist/cdn/packs/ux-planning.full.css",
40
- "./ux-planning-js": "./dist/cdn/packs/ux-planning.full.js"
38
+ "./journal-css": "./dist/cdn/packs/journal.full.css"
41
39
  },
42
40
  "files": [
43
41
  "dist/cdn/",
@@ -60,7 +58,7 @@
60
58
  "type": "git",
61
59
  "url": "https://github.com/profpowell/vanilla-breeze.git"
62
60
  },
63
- "homepage": "https://profpowell.github.io/vanilla-breeze/",
61
+ "homepage": "https://vanilla-breeze.com/",
64
62
  "scripts": {
65
63
  "clean": "rm -rf site/dist",
66
64
  "prebuild": "npm run clean",
@@ -80,11 +78,11 @@
80
78
  "sync:tokens": "node scripts/sync-tokens-catalog.js",
81
79
  "build:cem": "custom-elements-manifest analyze",
82
80
  "build:copy-icons": "mkdir -p dist/src && cp -r src/icons dist/src/icons",
83
- "build:fix-paths": "node scripts/fix-paths.js",
84
81
  "search:index": "cd site && pagefind",
85
82
  "preview": "cd site && npm run preview",
86
83
  "lint:html": "html-validate 'demos/**/*.html'",
87
- "lint:js": "eslint --config .claude/eslint.config.js --ignore-pattern 'src/htmlvalidate/' 'src/**/*.js'",
84
+ "vendor:marked": "cp node_modules/marked/lib/marked.esm.js src/vendor/marked/marked.esm.js && cp node_modules/marked/lib/marked.d.ts src/vendor/marked/marked.esm.d.ts",
85
+ "lint:js": "eslint --config .claude/eslint.config.js --ignore-pattern 'src/htmlvalidate/' --ignore-pattern 'src/vendor/' 'src/**/*.js'",
88
86
  "lint:theme-tokens": "node scripts/quality/theme-token-coverage.js",
89
87
  "lint": "npm run lint:html",
90
88
  "test": "node --test 'tests/unit/**/*.test.js'",
@@ -102,7 +100,6 @@
102
100
  "test:visual": "npx playwright test tests/visual/",
103
101
  "test:visual:update": "npx playwright test tests/visual/ --update-snapshots",
104
102
  "test:visual:report": "npx playwright show-report",
105
- "test:surfaces": "npx playwright test tests/visual/theme-surfaces.spec.js",
106
103
  "test:components": "npx playwright test tests/components/",
107
104
  "compendium:validate": "node tests/element-visual/compendium/validate.js",
108
105
  "fixtures:generate": "node tests/element-visual/fixtures/generate-fixtures.js",
@@ -1,11 +0,0 @@
1
- var k=window.matchMedia("(prefers-reduced-motion: reduce)");var b=new Map;function y(s,t,n={}){let e=n.priority??10,r={impl:t,bundle:n.bundle,contract:n.contract,priority:e},a=b.get(s);if(customElements.get(s)){if(!a||a.priority>=e){a&&a.priority===e&&a.impl!==t&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${a.bundle}" (priority ${a.priority}). Skipping "${n.bundle}".`);return}console.warn(`[VB Bundle] Tag <${s}> defined by "${a.bundle}" cannot be replaced (customElements.define is permanent). "${n.bundle}" has higher priority but arrived late.`);return}if(a&&a.priority>=e){a.priority===e&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${a.bundle}". Skipping "${n.bundle}" (first wins at equal priority).`);return}b.set(s,r),customElements.define(s,t)}var u=class extends HTMLElement{#t=[];#e;connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&(this.setAttribute("data-upgraded",""),queueMicrotask(()=>{this.dispatchEvent(new CustomEvent(`${this.localName}:upgraded`,{bubbles:!0}))}))}disconnectedCallback(){for(let t of this.#t)t();this.#t=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,n,e,r){t.addEventListener(n,e,r),this.#t.push(()=>t.removeEventListener(n,e,r))}setup(){}teardown(){}setState(t,n){this.#e||(this.#e=this.attachInternals());let e=this.#e.states;try{n?e.add(t):e.delete(t)}catch{let r=`--${t}`;n?e.add(r):e.delete(r)}}_adoptInternals(t){this.#e||(this.#e=t)}};function g(s){let t=String(s||"").trim();if(!t)return null;let n=t.match(/^#([0-9a-f]{3,8})$/i);if(n){let e=n[1];if(e.length===3)return[parseInt(e[0]+e[0],16),parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16)];if(e.length===4)return[parseInt(e[0]+e[0],16),parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16)];if(e.length===6)return[parseInt(e.slice(0,2),16),parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16)];if(e.length===8)return[parseInt(e.slice(0,2),16),parseInt(e.slice(2,4),16),parseInt(e.slice(4,6),16)]}if(n=t.match(/^rgba?\s*\(\s*([0-9.]+)[\s,]+([0-9.]+)[\s,]+([0-9.]+)/i),n)return[Math.round(+n[1]),Math.round(+n[2]),Math.round(+n[3])];if(typeof document<"u"){let e=document.createElement("span");e.style.color=t,e.style.display="none",document.body.appendChild(e);let r=getComputedStyle(e).color;e.remove();let a=r.match(/^rgba?\s*\(\s*([0-9.]+)[\s,]+([0-9.]+)[\s,]+([0-9.]+)/i);if(a)return[Math.round(+a[1]),Math.round(+a[2]),Math.round(+a[3])]}return null}function f(s){let t=s/255;return t<=.03928?t/12.92:Math.pow((t+.055)/1.055,2.4)}function E([s,t,n]){return .2126*f(s)+.7152*f(t)+.0722*f(n)}function $(s,t){let n=g(s),e=g(t);if(!n||!e)return null;let r=E(n),a=E(e),o=Math.max(r,a),c=Math.min(r,a);return(o+.05)/(c+.05)}function M(s){return s==null?{aaNormal:!1,aaLarge:!1,aaaNormal:!1,aaaLarge:!1}:{aaNormal:s>=4.5,aaLarge:s>=3,aaaNormal:s>=7,aaaLarge:s>=4.5}}var m=class extends u{static observedAttributes=["type"];setup(){(this.getAttribute("type")||"contrast")==="checklist"?this.#n():this.#t()}attributeChangedCallback(t,n,e){!this.isConnected||n===e||this.setup()}#t(){let t=[...this.querySelectorAll(":scope > button[data-fg][data-bg]")].map(a=>({fg:a.dataset.fg,bg:a.dataset.bg,label:a.dataset.label||a.textContent.trim()||`${a.dataset.fg} on ${a.dataset.bg}`})),n=document.createElement("table");n.className="as-contrast-table";let e=document.createElement("thead");e.innerHTML=`
2
- <tr>
3
- <th scope="col">Pair</th>
4
- <th scope="col">Sample</th>
5
- <th scope="col">Ratio</th>
6
- <th scope="col">AA</th>
7
- <th scope="col">AA Large</th>
8
- <th scope="col">AAA</th>
9
- <th scope="col">AAA Large</th>
10
- </tr>`,n.appendChild(e);let r=document.createElement("tbody");if(t.length===0){let a=document.createElement("tr"),o=document.createElement("td");o.colSpan=7,o.className="as-empty",o.textContent='No color pairs authored. Add <button data-fg="\u2026" data-bg="\u2026">Label</button> children.',a.appendChild(o),r.appendChild(a)}else for(let a of t)r.appendChild(this.#e(a));n.appendChild(r),this.replaceChildren(n)}#e({fg:t,bg:n,label:e}){let r=$(t,n),a=M(r),o=r==null?"?":`${r.toFixed(2)}:1`,c=document.createElement("tr"),i=document.createElement("th");i.scope="row",i.className="as-pair-label",i.innerHTML=`<span class="as-swatch" style="background:${n};border-color:${t}"></span><span>${N(e)}</span>`,c.appendChild(i);let l=document.createElement("td");l.className="as-pair-sample",l.style.background=n,l.style.color=t,l.textContent="Aa Bb 123",c.appendChild(l);let p=document.createElement("td");p.className="as-pair-ratio",p.textContent=o,c.appendChild(p);for(let C of["aaNormal","aaLarge","aaaNormal","aaaLarge"]){let d=document.createElement("td"),h=a[C];d.className=`as-badge ${h?"as-pass":"as-fail"}`,d.textContent=h?"\u2713":"\u2717",d.setAttribute("aria-label",h?"Pass":"Fail"),c.appendChild(d)}return c}#n(){let t=this.querySelector(":scope > ul, :scope > ol");if(t){t.classList.add("as-checklist");for(let n of t.querySelectorAll(":scope > li"))this.#a(n)}}#a(t){if(t.dataset.decorated==="")return;t.dataset.decorated="";let n=t.dataset.status||"na";t.classList.add(`as-status-${n}`);let e=document.createElement("span");e.className="as-checklist-icon",e.setAttribute("aria-hidden","true"),e.textContent={pass:"\u2713",fail:"\u2717",warn:"!",na:"\u2013"}[n]||"\u2013";let r={pass:"Pass",fail:"Fail",warn:"Warning",na:"Not applicable"}[n]||"Not applicable",a=document.createElement("span");a.className="as-sr-only",a.textContent=`${r}: `,t.prepend(e,a)}};function N(s){return String(s).replace(/[&<>"']/g,t=>({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"})[t])}y("accessibility-specimen",m);export{m as AccessibilitySpecimen};
11
- //# sourceMappingURL=accessibility-specimen.js.map
@@ -1,403 +0,0 @@
1
- var l=`
2
- :host {
3
- --_bg: var(--adr-wc-bg, var(--color-surface, #ffffff));
4
- --_text: var(--adr-wc-text, var(--color-text, #1a1a1a));
5
- --_muted: var(--adr-wc-muted, var(--color-text-muted, #666));
6
- --_border: var(--adr-wc-border, var(--color-border, #e0e0e0));
7
- --_accent: var(--adr-wc-accent, var(--color-interactive, #0066cc));
8
- --_card-bg: var(--adr-wc-card-bg, var(--color-surface-raised, #f8f9fa));
9
- --_highlight: var(--adr-wc-highlight, color-mix(in srgb, var(--_accent) 8%, transparent));
10
- --_radius: var(--adr-wc-radius, var(--radius-l, 0.75rem));
11
- --_shadow: var(--adr-wc-shadow, var(--shadow-sm));
12
- --_shadow-hover: var(--adr-wc-shadow-hover, var(--shadow-md));
13
- --_duration: var(--adr-wc-duration, var(--duration-normal, 200ms));
14
- --_ease: var(--adr-wc-ease, var(--ease-default, ease));
15
- --_space-2xs: var(--adr-wc-space-2xs, var(--size-2xs, 0.25rem));
16
- --_space-xs: var(--adr-wc-space-xs, var(--size-xs, 0.5rem));
17
- --_space-s: var(--adr-wc-space-s, var(--size-s, 0.75rem));
18
- --_space-m: var(--adr-wc-space-m, var(--size-m, 1rem));
19
- --_font-xs: var(--adr-wc-font-xs, var(--font-size-xs, 0.75rem));
20
- --_font-sm: var(--adr-wc-font-sm, var(--font-size-sm, 0.875rem));
21
- --_font-md: var(--adr-wc-font-md, var(--font-size-md, 1rem));
22
- --_font-lg: var(--adr-wc-font-lg, var(--font-size-lg, 1.125rem));
23
- --_font-mono: var(--adr-wc-font-mono, var(--font-mono, ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, monospace));
24
- --_radius-s: var(--adr-wc-radius-s, var(--radius-s, 0.25rem));
25
- --_radius-full: var(--adr-wc-radius-full, var(--radius-full, 9999px));
26
-
27
- display: block;
28
- font-family: var(--adr-wc-font, var(--font-sans, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif));
29
- }
30
-
31
- *, *::before, *::after { box-sizing: border-box; margin: 0; }
32
-
33
- /* \u2500\u2500 Card \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
34
- .adr-card {
35
- background: var(--_bg);
36
- border: 1px solid var(--_border);
37
- border-radius: var(--_radius);
38
- overflow: hidden;
39
- box-shadow: var(--_shadow);
40
- transition: box-shadow var(--_duration) var(--_ease);
41
- }
42
-
43
- .adr-card:hover {
44
- box-shadow: var(--_shadow-hover);
45
- }
46
-
47
- /* \u2500\u2500 Header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
48
- .adr-header {
49
- display: flex;
50
- align-items: center;
51
- justify-content: space-between;
52
- padding: var(--_space-s) var(--_space-m);
53
- background: var(--_card-bg);
54
- border-block-end: 1px solid var(--_border);
55
- gap: var(--_space-s);
56
- flex-wrap: wrap;
57
- }
58
-
59
- .adr-meta {
60
- display: flex;
61
- align-items: center;
62
- gap: var(--_space-xs);
63
- flex-wrap: wrap;
64
- min-width: 0;
65
- }
66
-
67
- .adr-id {
68
- font-size: var(--_font-xs);
69
- font-weight: 600;
70
- color: var(--_muted);
71
- font-family: var(--_font-mono);
72
- }
73
-
74
- /* \u2500\u2500 Status badge \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
75
- .adr-badges {
76
- display: flex;
77
- align-items: center;
78
- gap: var(--_space-xs);
79
- }
80
-
81
- .adr-status {
82
- font-size: 11px;
83
- padding: 4px 10px;
84
- border-radius: var(--_radius-full);
85
- font-weight: 600;
86
- text-transform: uppercase;
87
- letter-spacing: 0.3px;
88
- }
89
-
90
- /* \u2500\u2500 Date (slotted <time>) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
91
- .adr-date-wrap {
92
- display: inline-flex;
93
- align-items: center;
94
- gap: 4px;
95
- font-size: var(--_font-xs);
96
- color: var(--_muted);
97
- }
98
-
99
- .adr-date-wrap svg {
100
- width: 12px;
101
- height: 12px;
102
- flex-shrink: 0;
103
- }
104
-
105
- ::slotted([slot="date"]) {
106
- font-size: var(--_font-xs);
107
- font-family: var(--_font-mono);
108
- color: var(--_muted);
109
- }
110
-
111
- /* \u2500\u2500 Body \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
112
- .adr-body {
113
- padding: 16px 20px;
114
- }
115
-
116
- /* \u2500\u2500 Title (slotted heading) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
117
- .adr-title-wrap {
118
- margin-block-end: 0;
119
- }
120
-
121
- ::slotted([slot="title"]) {
122
- font-size: var(--_font-lg) !important;
123
- font-weight: 700 !important;
124
- color: var(--_text) !important;
125
- line-height: 1.4 !important;
126
- margin: 0 !important;
127
- }
128
-
129
- /* Fallback title when no slot content */
130
- .adr-title-fallback {
131
- font-size: var(--_font-lg);
132
- font-weight: 700;
133
- color: var(--_text);
134
- line-height: 1.4;
135
- }
136
-
137
- /* \u2500\u2500 Supersedes / Superseded-by links \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
138
- .adr-links {
139
- display: flex;
140
- flex-wrap: wrap;
141
- gap: 4px;
142
- margin-block-start: var(--_space-s);
143
- }
144
-
145
- .adr-links-label {
146
- font-size: 11px;
147
- font-weight: 600;
148
- color: var(--_muted);
149
- text-transform: uppercase;
150
- letter-spacing: 0.3px;
151
- margin-inline-end: var(--_space-2xs);
152
- align-self: center;
153
- }
154
-
155
- .adr-link {
156
- display: inline-flex;
157
- align-items: center;
158
- gap: 3px;
159
- font-size: 11px;
160
- font-weight: 500;
161
- padding: 2px 8px;
162
- border-radius: var(--_radius-s);
163
- background: var(--_highlight);
164
- color: var(--_accent);
165
- text-decoration: none;
166
- }
167
-
168
- .adr-link:hover {
169
- text-decoration: underline;
170
- }
171
-
172
- .adr-link svg {
173
- width: 11px;
174
- height: 11px;
175
- }
176
-
177
- /* \u2500\u2500 Sections \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
178
- .adr-sections {
179
- border-block-start: 1px solid var(--_border);
180
- }
181
-
182
- .adr-section {
183
- padding: 14px 20px;
184
- border-block-end: 1px solid var(--_border);
185
- }
186
-
187
- .adr-section:last-child {
188
- border-block-end: none;
189
- }
190
-
191
- .adr-section-header {
192
- display: flex;
193
- align-items: center;
194
- gap: var(--_space-xs);
195
- margin-block-end: var(--_space-s);
196
- }
197
-
198
- .adr-section-icon {
199
- width: 22px;
200
- height: 22px;
201
- border-radius: 5px;
202
- display: flex;
203
- align-items: center;
204
- justify-content: center;
205
- }
206
-
207
- .adr-section-icon svg {
208
- width: 13px;
209
- height: 13px;
210
- fill: var(--color-text-inverted, #fff);
211
- }
212
-
213
- .adr-section-icon.context { background: var(--color-accent, #8b5cf6); }
214
- .adr-section-icon.decision { background: var(--color-success, #22c55e); }
215
- .adr-section-icon.consequences { background: var(--color-warning, #f59e0b); }
216
-
217
- .adr-section-title {
218
- font-size: var(--_font-xs);
219
- font-weight: 600;
220
- color: var(--_muted);
221
- text-transform: uppercase;
222
- letter-spacing: 0.5px;
223
- }
224
-
225
- .adr-section-content {
226
- color: var(--_text);
227
- font-size: var(--_font-sm);
228
- line-height: 1.6;
229
- }
230
-
231
- .adr-section-content ::slotted(ul),
232
- .adr-section-content ::slotted(ol) {
233
- margin: 0;
234
- padding-inline-start: 20px;
235
- }
236
-
237
- .adr-section-content ::slotted(p) {
238
- margin: 0;
239
- }
240
-
241
- .slot-fallback {
242
- color: var(--_muted);
243
- font-style: italic;
244
- }
245
-
246
- /* \u2500\u2500 Minimal detail \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
247
- .adr-card--minimal {
248
- padding: var(--_space-xs);
249
- cursor: pointer;
250
- }
251
-
252
- .adr-card--minimal:hover {
253
- box-shadow: var(--_shadow-hover);
254
- }
255
-
256
- .adr-card--minimal:focus-visible {
257
- outline: 2px solid var(--_accent);
258
- outline-offset: 2px;
259
- }
260
-
261
- .adr-card--minimal .adr-header { display: none; }
262
- .adr-card--minimal .adr-sections { display: none; }
263
- .adr-card--minimal .adr-links { display: none; }
264
- .adr-card--minimal .adr-date-wrap { display: none; }
265
-
266
- .adr-card--minimal .adr-body {
267
- padding: var(--_space-xs) var(--_space-s);
268
- }
269
-
270
- .adr-card--minimal .adr-title-fallback,
271
- .adr-card--minimal ::slotted([slot="title"]) {
272
- font-size: var(--_font-sm) !important;
273
- font-weight: 600 !important;
274
- }
275
-
276
- .adr-card--minimal .adr-id {
277
- display: block;
278
- margin-block-end: var(--_space-2xs);
279
- }
280
-
281
- .adr-card--minimal .adr-status {
282
- font-size: 10px;
283
- padding: 2px 6px;
284
- }
285
-
286
- /* \u2500\u2500 Compact detail \u2014 hide empty sections \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
287
- .adr-card--compact .adr-section[data-empty] {
288
- display: none;
289
- }
290
-
291
- .adr-card--compact .slot-fallback {
292
- display: none;
293
- }
294
-
295
- .adr-card--compact .adr-body {
296
- padding: var(--_space-s) var(--_space-m);
297
- }
298
-
299
- /* \u2500\u2500 Responsive \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */
300
- @media (max-width: 480px) {
301
- .adr-header {
302
- flex-direction: column;
303
- align-items: flex-start;
304
- }
305
-
306
- .adr-badges {
307
- width: 100%;
308
- justify-content: flex-start;
309
- }
310
- }
311
-
312
- @media (prefers-reduced-motion: reduce) {
313
- .adr-card {
314
- transition: none;
315
- }
316
- }
317
-
318
- @media print {
319
- .adr-card {
320
- box-shadow: none;
321
- break-inside: avoid;
322
- }
323
- }
324
-
325
- .state-msg { padding: var(--_space-m); font-size: var(--_font-sm); color: var(--_muted); font-style: italic; }
326
- .state-msg--error { color: var(--color-error-text, var(--color-error, #dc2626)); }
327
- `;var b=window.matchMedia("(prefers-reduced-motion: reduce)");var m=new Map;function f(s,e,t={}){let a=t.priority??10,o={impl:e,bundle:t.bundle,contract:t.contract,priority:a},r=m.get(s);if(customElements.get(s)){if(!r||r.priority>=a){r&&r.priority===a&&r.impl!==e&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${r.bundle}" (priority ${r.priority}). Skipping "${t.bundle}".`);return}console.warn(`[VB Bundle] Tag <${s}> defined by "${r.bundle}" cannot be replaced (customElements.define is permanent). "${t.bundle}" has higher priority but arrived late.`);return}if(r&&r.priority>=a){r.priority===a&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${r.bundle}". Skipping "${t.bundle}" (first wins at equal priority).`);return}m.set(s,o),customElements.define(s,e)}function i(s){return String(s).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function n(s){return`<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${s}</svg>`}var p={user:'<path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"/><circle cx="12" cy="7" r="4"/>',pencil:'<path d="M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z"/><path d="m15 5 4 4"/>',check:'<path d="M20 6 9 17l-5-5"/>',target:'<circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="6"/><circle cx="12" cy="12" r="2"/>',alertTriangle:'<path d="m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3"/><path d="M12 9v4"/><path d="M12 17h.01"/>',messageCircle:'<path d="M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719"/>',lightbulb:'<path d="M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5"/><path d="M9 18h6"/><path d="M10 22h4"/>',wrench:'<path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z"/>',heart:'<path d="M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5"/>',mapPin:'<path d="M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0"/><circle cx="12" cy="10" r="3"/>',checkCircle:'<path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><path d="m9 11 3 3L22 4"/>',x:'<path d="M18 6 6 18"/><path d="m6 6 12 12"/>',download:'<path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" x2="12" y1="15" y2="3"/>',send:'<path d="M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z"/><path d="m21.854 2.147-10.94 10.939"/>'},y={says:{label:"Says",icon:p.messageCircle,color:"#3b82f6"},thinks:{label:"Thinks",icon:p.lightbulb,color:"#8b5cf6"},does:{label:"Does",icon:p.wrench,color:"#f59e0b"},feels:{label:"Feels",icon:p.heart,color:"#ef4444"}};var v={proposed:{label:"Proposed",color:"#3b82f6",bg:"rgba(59, 130, 246, 0.1)"},accepted:{label:"Accepted",color:"#22c55e",bg:"rgba(34, 197, 94, 0.1)"},deprecated:{label:"Deprecated",color:"#f59e0b",bg:"rgba(245, 158, 11, 0.1)"},superseded:{label:"Superseded",color:"#6b7280",bg:"rgba(107, 114, 128, 0.1)"}},c={calendar:'<rect width="18" height="18" x="3" y="4" rx="2" ry="2"/><line x1="16" x2="16" y1="2" y2="6"/><line x1="8" x2="8" y1="2" y2="6"/><line x1="3" x2="21" y1="10" y2="10"/>',context:'<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" x2="8" y1="13" y2="13"/><line x1="16" x2="8" y1="17" y2="17"/><line x1="10" x2="8" y1="9" y2="9"/>',decision:'<path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/><path d="m9 11 3 3L22 4"/>',consequences:'<path d="m16 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z"/><path d="m2 16 3-8 3 8c-.87.65-1.92 1-3 1s-2.13-.35-3-1Z"/><path d="M7 21h10"/><path d="M12 3v18"/><path d="M3 7h2c2 0 5-1 7-2 2 1 5 2 7 2h2"/>',arrowRight:'<path d="M5 12h14"/><path d="m12 5 7 7-7 7"/>'},u=class extends HTMLElement{static get observedAttributes(){return["adr-id","status","supersedes","superseded-by","detail","compact","src"]}#e=new Map;constructor(){super(),this.attachShadow({mode:"open"})}#a(){for(let e of[...this.children]){let t=e.getAttribute("slot");t&&this.#e.set(t,e.textContent.trim())}}connectedCallback(){this.#a(),this.adrId&&!this.id&&(this.id=this.adrId),this.hasAttribute("src")&&this._loadSrc(this.getAttribute("src")),this.#t(),this.setAttribute("data-upgraded","")}disconnectedCallback(){this.removeAttribute("data-upgraded")}attributeChangedCallback(e,t,a){t!==a&&this.shadowRoot&&(e==="src"&&this.isConnected?this._loadSrc(a):this.#t())}get adrId(){return this.getAttribute("adr-id")||""}get status(){return this.getAttribute("status")||"proposed"}get adrTitle(){return this.querySelector('[slot="title"]')?.textContent?.trim()||this.#e.get("title")||""}get adrDate(){let e=this.querySelector('[slot="date"]');return e?.getAttribute("datetime")||e?.textContent?.trim()||this.#e.get("date")||""}get supersedes(){let e=this.getAttribute("supersedes")||"";return e?e.split(",").map(t=>t.trim()).filter(Boolean):[]}get supersededBy(){let e=this.getAttribute("superseded-by")||"";return e?e.split(",").map(t=>t.trim()).filter(Boolean):[]}get _detailLevel(){return this.getAttribute("detail")?this.getAttribute("detail"):this.hasAttribute("compact")?"compact":"full"}get _minimalLabel(){return this.adrTitle||this.adrId||"ADR"}get data(){return{adrId:this.adrId||void 0,status:this.status,detail:this.getAttribute("detail")||void 0,supersedes:this.supersedes.length?this.supersedes:void 0,supersededBy:this.supersededBy.length?this.supersededBy:void 0,title:this.adrTitle||void 0,date:this.adrDate||void 0}}set data(e){!e||typeof e!="object"||(this._applyData(e),this.#a(),this.shadowRoot&&this.#t(),this.dispatchEvent(new CustomEvent("adr-wc:data-changed",{detail:{data:this.data,source:"property"},bubbles:!0,composed:!0})))}_applyData(e){if(e.adrId!=null&&this.setAttribute("adr-id",String(e.adrId)),e.status!=null&&this.setAttribute("status",String(e.status)),e.detail!=null&&this.setAttribute("detail",String(e.detail)),e.supersedes&&this.setAttribute("supersedes",Array.isArray(e.supersedes)?e.supersedes.join(","):String(e.supersedes)),e.supersededBy&&this.setAttribute("superseded-by",Array.isArray(e.supersededBy)?e.supersededBy.join(","):String(e.supersededBy)),e.title&&!this.querySelector('[slot="title"]')){let t=document.createElement("h3");t.slot="title",t.textContent=String(e.title),this.appendChild(t)}if(e.date&&!this.querySelector('[slot="date"]')){let t=document.createElement("time");t.slot="date",t.setAttribute("datetime",String(e.date)),t.textContent=new Date(String(e.date)).toLocaleDateString(void 0,{year:"numeric",month:"long",day:"numeric"}),this.appendChild(t)}for(let t of["context","decision"])if(e[t]&&!this.querySelector(`[slot="${t}"]`)){let a=document.createElement("p");a.slot=t,a.textContent=String(e[t]),this.appendChild(a)}if(e.consequences&&!this.querySelector('[slot="consequences"]')){let t=document.createElement("ul");t.slot="consequences";let a=Array.isArray(e.consequences)?e.consequences:[e.consequences];for(let o of a){let r=document.createElement("li");r.textContent=String(o),t.appendChild(r)}this.appendChild(t)}}async _loadSrc(e){if(!e)return;let t=this.shadowRoot;t.innerHTML=`<style>${l}</style><div class="state-msg">Loading\u2026</div>`;try{let a=await fetch(e);if(!a.ok)throw new Error(`HTTP ${a.status}`);let o=await a.json();this._applyData(o),this.#a(),this.#t()}catch(a){t.innerHTML=`<style>${l}</style><div class="state-msg state-msg--error">Could not load: ${i(a.message)}</div>`}}#t(){let e=this.shadowRoot,t=v[this.status]||v.proposed,a=this._detailLevel,o=this.adrId?`ADR: ${i(this.adrId)}`:"Architectural Decision Record",r=!!this.querySelector('[slot="date"]')||this.#e.has("date");if(a==="minimal"){e.innerHTML=`<style>${l}</style>
328
- <article class="adr-card adr-card--minimal" role="article" aria-label="${o}"
329
- tabindex="0">
330
- <div class="adr-body">
331
- <div class="adr-meta">
332
- ${this.adrId?`<span class="adr-id">${i(this.adrId)}</span>`:""}
333
- <span class="adr-status" style="color:${t.color};background:${t.bg}">${i(t.label)}</span>
334
- </div>
335
- <div class="adr-title-wrap">
336
- <slot name="title"><span class="adr-title-fallback">${i(this._minimalLabel)}</span></slot>
337
- </div>
338
- </div>
339
- </article>`;return}if(e.innerHTML=`<style>${l}</style>
340
- <article class="adr-card adr-card--${a}" role="article" aria-label="${o}">
341
-
342
- <header class="adr-header">
343
- <div class="adr-meta">
344
- ${this.adrId?`<span class="adr-id">${i(this.adrId)}</span>`:""}
345
- ${r?`<span class="adr-date-wrap">${n(c.calendar)} <slot name="date"></slot></span>`:""}
346
- </div>
347
- <div class="adr-badges">
348
- <span class="adr-status" style="color:${t.color};background:${t.bg}">${i(t.label)}</span>
349
- </div>
350
- </header>
351
-
352
- <div class="adr-body">
353
- <div class="adr-title-wrap">
354
- <slot name="title"><span class="adr-title-fallback">[Untitled ADR]</span></slot>
355
- </div>
356
-
357
- ${this.supersedes.length?`
358
- <div class="adr-links">
359
- <span class="adr-links-label">Supersedes</span>
360
- ${this.supersedes.map(d=>`<a class="adr-link" href="#${i(d)}">${n(c.arrowRight)} ${i(d)}</a>`).join("")}
361
- </div>`:""}
362
-
363
- ${this.supersededBy.length?`
364
- <div class="adr-links">
365
- <span class="adr-links-label">Superseded by</span>
366
- ${this.supersededBy.map(d=>`<a class="adr-link" href="#${i(d)}">${n(c.arrowRight)} ${i(d)}</a>`).join("")}
367
- </div>`:""}
368
- </div>
369
-
370
- <div class="adr-sections">
371
- <div class="adr-section">
372
- <div class="adr-section-header">
373
- <div class="adr-section-icon context">${n(c.context)}</div>
374
- <span class="adr-section-title">Context</span>
375
- </div>
376
- <div class="adr-section-content">
377
- <slot name="context"><em class="slot-fallback">No context provided.</em></slot>
378
- </div>
379
- </div>
380
-
381
- <div class="adr-section">
382
- <div class="adr-section-header">
383
- <div class="adr-section-icon decision">${n(c.decision)}</div>
384
- <span class="adr-section-title">Decision</span>
385
- </div>
386
- <div class="adr-section-content">
387
- <slot name="decision"><em class="slot-fallback">No decision recorded.</em></slot>
388
- </div>
389
- </div>
390
-
391
- <div class="adr-section">
392
- <div class="adr-section-header">
393
- <div class="adr-section-icon consequences">${n(c.consequences)}</div>
394
- <span class="adr-section-title">Consequences</span>
395
- </div>
396
- <div class="adr-section-content">
397
- <slot name="consequences"><em class="slot-fallback">No consequences documented.</em></slot>
398
- </div>
399
- </div>
400
- </div>
401
-
402
- </article>`,a==="compact")for(let d of e.querySelectorAll(".adr-section")){let h=d.querySelector("slot");h&&h.assignedNodes().length===0&&d.setAttribute("data-empty","")}this.dispatchEvent(new CustomEvent("adr-wc:ready",{detail:{adrId:this.adrId,title:this.adrTitle,status:this.status},bubbles:!0,composed:!0}))}};f("adr-wc",u);export{u as AdrWc};
403
- //# sourceMappingURL=adr-wc.js.map
@@ -1,26 +0,0 @@
1
- var $=window.matchMedia("(prefers-reduced-motion: reduce)");var u=new Map;function p(o,s,t={}){let e=t.priority??10,i={impl:s,bundle:t.bundle,contract:t.contract,priority:e},r=u.get(o);if(customElements.get(o)){if(!r||r.priority>=e){r&&r.priority===e&&r.impl!==s&&console.warn(`[VB Bundle] Tag <${o}> already registered by "${r.bundle}" (priority ${r.priority}). Skipping "${t.bundle}".`);return}console.warn(`[VB Bundle] Tag <${o}> defined by "${r.bundle}" cannot be replaced (customElements.define is permanent). "${t.bundle}" has higher priority but arrived late.`);return}if(r&&r.priority>=e){r.priority===e&&console.warn(`[VB Bundle] Tag <${o}> already registered by "${r.bundle}". Skipping "${t.bundle}" (first wins at equal priority).`);return}u.set(o,i),customElements.define(o,s)}var l=class extends HTMLElement{#e=[];#t;connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&(this.setAttribute("data-upgraded",""),queueMicrotask(()=>{this.dispatchEvent(new CustomEvent(`${this.localName}:upgraded`,{bubbles:!0}))}))}disconnectedCallback(){for(let s of this.#e)s();this.#e=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(s,t,e,i){s.addEventListener(t,e,i),this.#e.push(()=>s.removeEventListener(t,e,i))}setup(){}teardown(){}setState(s,t){this.#t||(this.#t=this.attachInternals());let e=this.#t.states;try{t?e.add(s):e.delete(s)}catch{let i=`--${s}`;t?e.add(i):e.delete(i)}}_adoptInternals(s){this.#t||(this.#t=s)}};var d=class extends l{static observedAttributes=["tokens","prefix","label","data-observe"];setup(){this.#e(),this.#t()}attributeChangedCallback(){this.isConnected&&(this.#c(),this.#e(),this.#t())}teardown(){this.#c()}#e(){let s=this.getAttribute("tokens")||"sm,md,lg,xl",t=this.getAttribute("prefix")||"--bp-",e=this.getAttribute("label")||"",i=s.split(",").map(n=>n.trim()).filter(Boolean),r=getComputedStyle(document.documentElement),a=i.map(n=>{let c=r.getPropertyValue(`${t}${n}`).trim(),y=this.#u(c);return{name:n,raw:c,px:y}}).filter(n=>n.px>0).sort((n,c)=>n.px-c.px);this.#l=a,this.#i=a.length?a[a.length-1].px*1.15:1;let h=e?`<header class="bps-label">${e}</header>`:"",f=`
2
- <output class="bps-readout" aria-live="polite">
3
- <span class="bps-width">\u2014</span>
4
- <span class="bps-active" data-active="">\u2014</span>
5
- </output>
6
- `,b=`
7
- <figure class="bps-ruler" aria-hidden="true">
8
- <span class="bps-cursor" data-cursor></span>
9
- ${a.map(n=>`
10
- <span class="bps-stop" style="--bps-pos:${n.px/this.#i*100}%" data-bp="${n.name}">
11
- <span class="bps-tick"></span>
12
- <span class="bps-stop-label">${n.name}<br><small>${Math.round(n.px)}px</small></span>
13
- </span>
14
- `).join("")}
15
- </figure>
16
- `,m=`
17
- <dl class="bps-list">
18
- ${a.map(n=>`
19
- <div class="bps-row" data-bp="${n.name}">
20
- <dt>${n.name}</dt>
21
- <dd><code>${n.raw}</code> \u2014 ${Math.round(n.px)}px and up</dd>
22
- </div>
23
- `).join("")}
24
- </dl>
25
- `;this.innerHTML=`${h}${f}${b}${m}`,this.#o=this.querySelector(".bps-width"),this.#n=this.querySelector(".bps-active"),this.#a=this.querySelector("[data-cursor]")}#t(){let s=this.getAttribute("data-observe");if(s){let e=document.querySelector(s);if(!e)return;this.#s=new ResizeObserver(()=>this.#r(e.clientWidth)),this.#s.observe(e),this.#r(e.clientWidth);return}let t=()=>this.#r(window.innerWidth);t(),this.listen(window,"resize",t,{passive:!0})}#c(){this.#s&&(this.#s.disconnect(),this.#s=null)}#r(s){if(!this.#o||!this.#n)return;this.#o.textContent=`${Math.round(s)}px`;let t=this.#d(s);if(this.#n.textContent=t?t.name:"base",this.#n.dataset.active=t?t.name:"",this.#a){let e=Math.min(100,s/this.#i*100);this.#a.style.setProperty("--bps-pos",`${e}%`)}this.querySelectorAll("[data-bp]").forEach(e=>{let i=t&&e.getAttribute("data-bp")===t.name;e.toggleAttribute("data-current",!!i)})}#d(s){let t=null;for(let e of this.#l)s>=e.px&&(t=e);return t}#u(s){if(!s)return 0;let t=parseFloat(s);if(Number.isNaN(t))return 0;if(s.endsWith("rem")||s.endsWith("em")){let e=parseFloat(getComputedStyle(document.documentElement).fontSize)||16;return t*e}return t}#l=[];#i=1;#s=null;#o=null;#n=null;#a=null};p("breakpoint-specimen",d);export{d as BreakpointSpecimen};
26
- //# sourceMappingURL=breakpoint-specimen.js.map
@@ -1,2 +0,0 @@
1
- var S=window.matchMedia("(prefers-reduced-motion: reduce)");var y=new Map;function E(i,e,t={}){let n=t.priority??10,r={impl:e,bundle:t.bundle,contract:t.contract,priority:n},s=y.get(i);if(customElements.get(i)){if(!s||s.priority>=n){s&&s.priority===n&&s.impl!==e&&console.warn(`[VB Bundle] Tag <${i}> already registered by "${s.bundle}" (priority ${s.priority}). Skipping "${t.bundle}".`);return}console.warn(`[VB Bundle] Tag <${i}> defined by "${s.bundle}" cannot be replaced (customElements.define is permanent). "${t.bundle}" has higher priority but arrived late.`);return}if(s&&s.priority>=n){s.priority===n&&console.warn(`[VB Bundle] Tag <${i}> already registered by "${s.bundle}". Skipping "${t.bundle}" (first wins at equal priority).`);return}y.set(i,r),customElements.define(i,e)}var b=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,t,n,r){e.addEventListener(t,n,r),this.#t.push(()=>e.removeEventListener(t,n,r))}setup(){}teardown(){}setState(e,t){this.#e||(this.#e=this.attachInternals());let n=this.#e.states;try{t?n.add(e):n.delete(e)}catch{let r=`--${e}`;t?n.add(r):n.delete(r)}}_adoptInternals(e){this.#e||(this.#e=e)}};var $=864e5,g=class i extends b{setup(){let e=this.getAttribute("start"),t=this.getAttribute("end"),n=parseFloat(this.getAttribute("total")||"");if(!e||!t||!Number.isFinite(n))return console.warn("burndown-chart: requires start, end, and total attributes"),!1;let r=i.#n(e),s=i.#n(t);if(!r||!s||s<r)return console.warn("burndown-chart: start/end dates invalid",e,t),!1;let d=(this.getAttribute("weekends")||"include")!=="exclude",c=this.getAttribute("unit")||"points",u=this.getAttribute("label")||"",h=this.querySelector(":scope > template"),a=h?i.#e(h):[],o=a.filter(p=>p.delta!==0),l=i.#s(r,s),m=i.#o(l,n,d),f=i.#a(l,a);return this.#t({label:u,unit:c,dayLabels:l,actual:f,ideal:m,scopeChanges:o}),queueMicrotask(()=>{this.dispatchEvent(new CustomEvent("burndown-chart:ready",{bubbles:!0,detail:{dayCount:l.length,total:n,scopeChanges:o.length}}))}),!0}#t({label:e,unit:t,dayLabels:n,actual:r,ideal:s,scopeChanges:d}){if([...this.children].forEach(o=>{o.tagName!=="TEMPLATE"&&o.remove()}),e){let o=document.createElement("header");o.className="bdc-label",o.textContent=e,this.appendChild(o)}let c=document.createElement("chart-wc");c.setAttribute("data-type","line"),c.setAttribute("data-legend",""),c.setAttribute("data-tooltip",""),c.setAttribute("data-label-x","Day"),c.setAttribute("data-label-y",t);let u={},h={};n.forEach((o,l)=>{u[o]=s[l],r[l]!==null&&(h[o]=r[l])});let a=[{name:"Actual",values:h},{name:"Ideal",values:u}];if(c.setAttribute("data-values",JSON.stringify(a)),this.appendChild(c),d.length){let o=document.createElement("aside");o.className="bdc-scope-changes";let l=document.createElement("h4");l.textContent="Scope changes",o.appendChild(l);let m=document.createElement("ul");for(let f of d){let p=document.createElement("li"),w=f.delta>0?"+":"";p.innerHTML=`<time datetime="${f.date}">${f.date}</time>: <strong>${w}${f.delta} ${t}</strong>`,m.appendChild(p)}o.appendChild(m),this.appendChild(o)}}static#e(e){let t=[],n=e.content.querySelectorAll("tr");for(let r of n){let s=[...r.children],d=s[0]?.textContent?.trim(),c=parseFloat(s[1]?.textContent??""),u=parseFloat(s[2]?.textContent??"0")||0;!d||!Number.isFinite(c)||t.push({date:d,remaining:c,delta:u})}return t}static#n(e){let t=String(e).match(/^(\d{4})-(\d{2})-(\d{2})/);return t?new Date(Number(t[1]),Number(t[2])-1,Number(t[3])):null}static#r(e){let t=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0");return`${e.getFullYear()}-${t}-${n}`}static#s(e,t){let n=[];for(let r=e.getTime();r<=t.getTime();r+=$)n.push(i.#r(new Date(r)));return n}static#o(e,t,n){let r=a=>{let o=i.#n(a);if(!o)return!1;let l=o.getDay();return l===0||l===6},s=e.map((a,o)=>({d:a,i:o,weekend:r(a)})).filter(a=>n||!a.weekend),d=s.length>1?t/(s.length-1):0,c=new Array(e.length).fill(null),u=t,h=0;for(let a=0;a<e.length;a++){let o=r(e[a]);n||!o?(c[a]=Math.max(0,t-d*h),h++,u=c[a]):c[a]=u}return c}static#a(e,t){let n=new Map(t.map(r=>[r.date,r.remaining]));return e.map(r=>n.has(r)?n.get(r):null)}};E("burndown-chart",g);export{g as BurndownChart};
2
- //# sourceMappingURL=burndown-chart.js.map
@@ -1,25 +0,0 @@
1
- var n=class extends HTMLElement{#e=[];#t;connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&(this.setAttribute("data-upgraded",""),queueMicrotask(()=>{this.dispatchEvent(new CustomEvent(`${this.localName}:upgraded`,{bubbles:!0}))}))}disconnectedCallback(){for(let t of this.#e)t();this.#e=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,e,r,i){t.addEventListener(e,r,i),this.#e.push(()=>t.removeEventListener(e,r,i))}setup(){}teardown(){}setState(t,e){this.#t||(this.#t=this.attachInternals());let r=this.#t.states;try{e?r.add(t):r.delete(t)}catch{let i=`--${t}`;e?r.add(i):r.delete(i)}}_adoptInternals(t){this.#t||(this.#t=t)}};var k=window.matchMedia("(prefers-reduced-motion: reduce)");var u=new Map;function f(s,t,e={}){let r=e.priority??10,i={impl:t,bundle:e.bundle,contract:e.contract,priority:r},a=u.get(s);if(customElements.get(s)){if(!a||a.priority>=r){a&&a.priority===r&&a.impl!==t&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${a.bundle}" (priority ${a.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${s}> defined by "${a.bundle}" cannot be replaced (customElements.define is permanent). "${e.bundle}" has higher priority but arrived late.`);return}if(a&&a.priority>=r){a.priority===r&&console.warn(`[VB Bundle] Tag <${s}> already registered by "${a.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}u.set(s,i),customElements.define(s,t)}function m(s){if(!s)return 0;let t=s.dataset?.capacityCost??s.getAttribute?.("data-capacity-cost"),e=Number(t);return Number.isFinite(e)&&e>0?e:0}function h(s){let t=0;for(let e of s||[])t+=m(e);return t}function l({capacityPoints:s,qualitySum:t,featureSum:e}){let r=Number.isFinite(s)?s:1/0,i=Math.max(0,Number(t)||0),a=Math.max(0,Number(e)||0),o=Number.isFinite(r)?r-i-a:1/0;return{capacity:r,quality:i,features:a,slack:o}}function p({capacity:s,quality:t,features:e}){if(!Number.isFinite(s)||s<=0){let a=t+e;return a<=0?{quality:0,features:0,slack:100}:{quality:t/a*100,features:e/a*100,slack:0}}let r=t+e,i=Math.max(s,r);return{quality:t/i*100,features:e/i*100,slack:Math.max(0,(s-r)/i*100)}}var c=class extends n{static get observedAttributes(){return["data-bind-triangle","data-bind-quality"]}#e=null;#t=null;#r=null;#i=null;#l=!1;setup(){this.#c(),this.#d(),this.#u(),this.#s()}teardown(){this.#e?.(),this.#t?.(),this.#r?.disconnect(),this.#e=null,this.#t=null,this.#r=null}attributeChangedCallback(t){this.isConnected&&(t==="data-bind-triangle"?(this.#c(),this.#s()):t==="data-bind-quality"&&(this.#d(),this.#s()))}get capacityPoints(){return this.#n()}get qualitySum(){return this.#o()}get featureSum(){return this.#i!=null?this.#i:h(this.querySelectorAll("[data-capacity-cost]"))}set featureSum(t){this.#i=Number.isFinite(+t)?+t:null,this.#s()}get slack(){return l({capacityPoints:this.#n(),qualitySum:this.#o(),featureSum:this.featureSum}).slack}#a(t){if(!t)return null;let e=this.getRootNode();return e.getElementById?e.getElementById(t):document.getElementById(t)}#c(){this.#e?.(),this.#e=null;let t=this.#a(this.dataset.bindTriangle);if(!t||t.localName!=="iron-triangle")return;let e=()=>this.#s();t.addEventListener("iron-triangle:change",e),this.#e=()=>t.removeEventListener("iron-triangle:change",e)}#d(){this.#t?.(),this.#t=null;let t=this.#a(this.dataset.bindQuality);if(!t||t.localName!=="quality-target")return;let e=()=>this.#s();t.addEventListener("quality-target:change",e),this.#t=()=>t.removeEventListener("quality-target:change",e)}#u(){this.#r||(this.#r=new MutationObserver(t=>{t.some(r=>!r.target.closest?.("[data-capacity-table]"))&&this.#s()}),this.#r.observe(this,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-capacity-cost"]}))}#n(){let t=this.#a(this.dataset.bindTriangle);if(!t||t.localName!=="iron-triangle")return 1/0;let e=t.capacityPoints;return Number.isFinite(e)&&e>0?e:1/0}#o(){let t=this.#a(this.dataset.bindQuality);return!t||t.localName!=="quality-target"?0:Number(t.criticalSum)||0}#s(){let t=l({capacityPoints:this.#n(),qualitySum:this.#o(),featureSum:this.featureSum}),e=p(t),r=this.querySelector(":scope > [data-capacity-table]");r||(r=document.createElement("section"),r.dataset.capacityTable="",this.prepend(r));let i=y(t.capacity),a=t.quality>0?`\u2212${t.quality} pts`:"0 pts",o=t.features>0?`\u2212${t.features} pts`:"0 pts",b=g(t.slack);r.innerHTML=`
2
- <dl data-layout="grid" class="capacity-ledger" aria-label="Capacity ledger">
3
- <div data-row="capacity">
4
- <dt>Capacity</dt>
5
- <dd class="num">${i}</dd>
6
- <dd class="bar"><span class="bar-track"><span class="bar-fill bar-capacity" style="--w:100%"></span></span></dd>
7
- </div>
8
- <div data-row="quality">
9
- <dt>Quality</dt>
10
- <dd class="num">${a}</dd>
11
- <dd class="bar"><span class="bar-track"><span class="bar-fill bar-quality" style="--w:${e.quality.toFixed(1)}%"></span></span></dd>
12
- </div>
13
- <div data-row="features">
14
- <dt>Features</dt>
15
- <dd class="num">${o}</dd>
16
- <dd class="bar"><span class="bar-track"><span class="bar-fill bar-features" style="--w:${e.features.toFixed(1)}%"></span></span></dd>
17
- </div>
18
- <div data-row="slack" data-state="${t.slack<0?"over":"under"}">
19
- <dt>Slack</dt>
20
- <dd class="num">${b}</dd>
21
- <dd class="bar"><span class="bar-track"><span class="bar-fill bar-slack" style="--w:${e.slack.toFixed(1)}%"></span></span></dd>
22
- </div>
23
- </dl>
24
- `,this.setState("overdrawn",t.slack<0);let d=t.slack<0;d!==this.#l&&(this.dispatchEvent(new CustomEvent("capacity-plan:overdrawn",{bubbles:!0,composed:!0,detail:{ledger:t,source:"render"}})),this.#l=d)}};function y(s){return Number.isFinite(s)?`${s} pts`:"\u221E"}function g(s){return Number.isFinite(s)?s===0?"0 pts":s>0?`+${s} pts`:`${s} pts`:"\u221E"}f("capacity-plan",c);export{c as CapacityPlan};
25
- //# sourceMappingURL=capacity-plan.js.map
@@ -1,16 +0,0 @@
1
- var U=window.matchMedia("(prefers-reduced-motion: reduce)");var C=new Map;function A(o,t,e={}){let s=e.priority??10,i={impl:t,bundle:e.bundle,contract:e.contract,priority:s},n=C.get(o);if(customElements.get(o)){if(!n||n.priority>=s){n&&n.priority===s&&n.impl!==t&&console.warn(`[VB Bundle] Tag <${o}> already registered by "${n.bundle}" (priority ${n.priority}). Skipping "${e.bundle}".`);return}console.warn(`[VB Bundle] Tag <${o}> defined by "${n.bundle}" cannot be replaced (customElements.define is permanent). "${e.bundle}" has higher priority but arrived late.`);return}if(n&&n.priority>=s){n.priority===s&&console.warn(`[VB Bundle] Tag <${o}> already registered by "${n.bundle}". Skipping "${e.bundle}" (first wins at equal priority).`);return}C.set(o,i),customElements.define(o,t)}var f=class extends HTMLElement{#e=[];#t;connectedCallback(){this.hasAttribute("data-upgraded")||this.setup()!==!1&&(this.setAttribute("data-upgraded",""),queueMicrotask(()=>{this.dispatchEvent(new CustomEvent(`${this.localName}:upgraded`,{bubbles:!0}))}))}disconnectedCallback(){for(let t of this.#e)t();this.#e=[],this.removeAttribute("data-upgraded"),this.teardown()}listen(t,e,s,i){t.addEventListener(e,s,i),this.#e.push(()=>t.removeEventListener(e,s,i))}setup(){}teardown(){}setState(t,e){this.#t||(this.#t=this.attachInternals());let s=this.#t.states;try{e?s.add(t):s.delete(t)}catch{let i=`--${t}`;e?s.add(i):s.delete(i)}}_adoptInternals(t){this.#t||(this.#t=t)}};var b="[data-copy], [data-copy-target], [data-paste-target]",L="Copied to clipboard",O="Pasted from clipboard",y=new WeakMap;async function v(o,t={}){if(o==null||o==="")return!1;let{button:e,announceMessage:s=L,duration:i=1500}=t;try{await navigator.clipboard.writeText(o)}catch{return!1}return k({button:e,duration:i,announceMessage:s,eventDetail:{text:o}}),!0}function k({button:o,duration:t,announceMessage:e,eventDetail:s,state:i="copied",eventName:n="copy"}){if(o){o.dataset.state=i;let r=y.get(o);r&&clearTimeout(r),y.set(o,setTimeout(()=>{delete o.dataset.state,y.delete(o)},t)),o.dispatchEvent(new CustomEvent(n,{bubbles:!0,detail:s}))}q(e,o??document.body)}async function z(o,t={}){let{button:e,announceMessage:s=O,duration:i=1500}=t,n;try{n=await navigator.clipboard.readText()}catch{return null}return o&&("value"in o&&(o instanceof HTMLInputElement||o instanceof HTMLTextAreaElement||o instanceof HTMLSelectElement)?o.value=n:o.textContent=n,o.dispatchEvent(new Event("input",{bubbles:!0}))),k({button:e,duration:i,announceMessage:s,eventDetail:{text:n},state:"pasted",eventName:"paste"}),n}function T(o=document){o.querySelectorAll(b).forEach(x)}function x(o){o.hasAttribute("data-copy-init")||(o.setAttribute("data-copy-init",""),o.addEventListener("click",()=>{if(o.dataset.pasteTarget){let e=document.querySelector(o.dataset.pasteTarget);if(!e)return;z(e,{button:o});return}let t=D(o);t&&v(t,{button:o})}))}function D(o){if(o.dataset.copy)return o.dataset.copy;if(o.dataset.copyTarget){let t=document.querySelector(o.dataset.copyTarget);if(!t)return"";let e=o.dataset.copyAttr;return e?t.getAttribute(e)??"":t.textContent??""}return""}function q(o,t){let e=document.createElement("div");e.setAttribute("role","status"),e.setAttribute("aria-live","polite"),e.className="visually-hidden",e.textContent=o,t.appendChild(e),setTimeout(()=>e.remove(),1e3)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>T()):T();var I=new MutationObserver(o=>{for(let t of o)for(let e of t.addedNodes){if(e.nodeType!==Node.ELEMENT_NODE)continue;let s=e;s.matches(b)&&x(s),s.querySelectorAll(b).forEach(i=>x(i))}});I.observe(document.documentElement,{childList:!0,subtree:!0});var g=class extends f{static observedAttributes=["colors","names","layout","show-values","show-names","size","editable"];#e=[];setup(){this.#t()}attributeChangedCallback(){this.isConnected&&this.#t()}#t(){let t=this.getAttribute("colors")||"",e=this.getAttribute("names")||"",s=this.getAttribute("layout")||"inline",i=this.getAttribute("size")||"md",n=this.hasAttribute("show-values"),r=this.hasAttribute("show-names")||e.length>0,a=this.hasAttribute("editable"),c=this.#c(t);this.#e=c.slice();let u=e?e.split(",").map(d=>d.trim()):[],h={sm:48,md:80,lg:120}[i]||80,m="display:flex;flex-wrap:wrap;gap:var(--size-xs,0.5rem)";s==="grid"?m=`display:grid;grid-template-columns:repeat(auto-fill,minmax(${h}px,1fr));gap:var(--size-xs,0.5rem)`:s==="list"&&(m="display:flex;flex-direction:column;gap:var(--size-xs,0.5rem)");let N=c.map((d,p)=>{let l=u[p]||"",S=this.#n(d),E=s==="list"?"display:flex;flex-direction:row;align-items:center;gap:0.75rem":`display:flex;flex-direction:column;align-items:center;gap:0.25rem;max-inline-size:${h}px`,$=s==="list"?36:h,w=`background:${d};color:${S};width:${$}px;height:${$}px;border:1px solid oklch(0% 0 0/0.15);border-radius:var(--radius-s,0.25rem);cursor:pointer;display:flex;align-items:center;justify-content:center;padding:0;font-family:var(--font-mono,monospace);position:relative;overflow:hidden;flex-shrink:0`;if(a){let M=this.#l(d);return`<div class="swatch-wrap" role="listitem" style="${E}">
2
- <label class="color-box color-box-edit" style="${w};cursor:pointer" data-index="${p}" title="Click to edit${l?": "+l:""}" aria-label="${l||"Color "+(p+1)}: ${d}. Click to edit.">
3
- <input type="color" class="color-input" value="${M}" data-index="${p}" style="position:absolute;inset:0;opacity:0;cursor:pointer;inline-size:100%;block-size:100%" aria-label="${l||"Color "+(p+1)} picker">
4
- <span class="color-value" style="font-size:0.625rem;line-height:1.2;opacity:${n?"1":"0"};text-align:center;padding:2px 4px;word-break:break-all;transition:opacity 0.15s ease;pointer-events:none">${this.#s(d)}</span>
5
- </label>
6
- ${r&&l?`<span style="font-size:var(--font-size-xs,0.75rem);color:var(--color-text-muted,#666);text-align:center;max-inline-size:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">${l}</span>`:""}
7
- </div>`}return`<div class="swatch-wrap" role="listitem" style="${E}">
8
- <button type="button" class="color-box" data-index="${p}"
9
- style="${w}"
10
- title="Click to copy${l?": "+l:""}"
11
- aria-label="${l||"Color "+(p+1)}: ${d}">
12
- <span class="color-value" style="font-size:0.625rem;line-height:1.2;opacity:${n?"1":"0"};text-align:center;padding:2px 4px;word-break:break-all;transition:opacity 0.15s ease">${this.#s(d)}</span>
13
- </button>
14
- ${r&&l?`<span style="font-size:var(--font-size-xs,0.75rem);color:var(--color-text-muted,#666);text-align:center;max-inline-size:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap">${l}</span>`:""}
15
- </div>`}).join("");this.innerHTML=`<div class="palette ${s}" role="list" aria-label="Color palette" style="${m}">${N}</div>`,a?this.#r(u):(this.#a(c,u),this.#i(c,u,n))}#i(t,e,s){this.querySelectorAll(".color-box").forEach(i=>{let n=i;s||(n.addEventListener("pointerenter",()=>{let r=n.querySelector(".color-value");r&&(r.style.opacity="1")}),n.addEventListener("pointerleave",()=>{let r=n.querySelector(".color-value");r&&(r.style.opacity="0")})),n.addEventListener("click",()=>{let r=Number(n.dataset.index),a=t[r],c=e[r]||"";v(a,{button:n,announceMessage:"Color copied"}),this.dispatchEvent(new CustomEvent("color-palette:select",{bubbles:!0,detail:{color:a,name:c,index:r}})),n.style.outline="3px solid currentColor",n.style.outlineOffset="2px",setTimeout(()=>{n.style.outline="",n.style.outlineOffset=""},600)})})}#r(t){this.querySelectorAll(".color-input").forEach(e=>{e.addEventListener("input",()=>{let s=Number(e.dataset.index),i=e.value;this.#e[s]=i;let n=e.parentElement;if(n){n.style.background=i,n.style.color=this.#n(i);let r=n.querySelector(".color-value");r&&(r.textContent=this.#s(i)),n.title=`Click to edit${t[s]?": "+t[s]:""} (${i})`,n.setAttribute("aria-label",`${t[s]||"Color "+(s+1)}: ${i}. Click to edit.`)}this.setAttribute("colors",this.#e.join(",")),this.dispatchEvent(new CustomEvent("color-palette:change",{bubbles:!0,detail:{color:i,name:t[s]||"",index:s,colors:this.#e.slice()}}))})})}get colors(){return this.#e.slice()}#a(t,e){this.querySelectorAll(".color-box").forEach(s=>{let i=Number(s.dataset.index),n=t[i];if(!n||!n.includes("var("))return;let r=getComputedStyle(s).backgroundColor,a=this.#o(r)||r;t[i]=a,this.#e[i]=a;let c=s.querySelector(".color-value");c&&(c.textContent=a),s.style.color=this.#n(a);let u=e[i]||"";s.title=`Click to copy${u?": "+u:""} (${a})`,s.setAttribute("aria-label",`${u||"Color "+(i+1)}: ${a}`)})}#o(t){let e=t.match(/rgba?\(\s*([\d.]+),?\s*([\d.]+),?\s*([\d.]+)/);if(!e)return null;let[,s,i,n]=e,r=a=>Math.round(Number(a)).toString(16).padStart(2,"0");return`#${r(s)}${r(i)}${r(n)}`}#l(t){if(/^#[0-9a-f]{6}$/i.test(t))return t.toLowerCase();if(/^#[0-9a-f]{3}$/i.test(t))return("#"+t.slice(1).split("").map(i=>i+i).join("")).toLowerCase();if(typeof document>"u")return"#000000";let e=document.createElement("span");e.style.color=t,e.style.display="none",document.body.appendChild(e);let s=getComputedStyle(e).color;return e.remove(),this.#o(s)||"#000000"}#s(t){if(t.startsWith("#"))return t;let e=t.match(/oklch\(\s*([\d.]+)%?\s+([\d.]+)\s+([\d.]+)/);return e?`${e[1]}% .${e[2].replace("0.","")}`:t.length>12?t.slice(0,12)+"\u2026":t}#c(t){if(!t)return[];let e=[],s=0,i="";for(let n of t)n==="("?s++:n===")"&&s--,n===","&&s===0?(e.push(i.trim()),i=""):i+=n;return i.trim()&&e.push(i.trim()),e}#n(t){let e=t.match(/oklch\(\s*([\d.]+)%?\s/);if(e){let s=parseFloat(e[1]);return(s>1?s/100:s)>.6?"#000":"#fff"}if(t.startsWith("#")){let s=t.replace("#",""),i=parseInt(s.substring(0,2),16)/255,n=parseInt(s.substring(2,4),16)/255,r=parseInt(s.substring(4,6),16)/255;return .2126*i+.7152*n+.0722*r>.4?"#000":"#fff"}return"#000"}};A("color-palette",g);export{g as ColorPalette};
16
- //# sourceMappingURL=color-palette.js.map