@vielzeug/prism 26.10.14 → 26.10.16

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 (162) hide show
  1. package/dist/_dev.cjs.map +1 -1
  2. package/dist/_dev.js +6 -1
  3. package/dist/_dev.js.map +1 -1
  4. package/dist/_tappers.cjs.map +1 -1
  5. package/dist/_tappers.js +25 -1
  6. package/dist/_tappers.js.map +1 -1
  7. package/dist/animation/easing.cjs.map +1 -1
  8. package/dist/animation/easing.js +15 -1
  9. package/dist/animation/easing.js.map +1 -1
  10. package/dist/animation/motion.cjs.map +1 -1
  11. package/dist/animation/motion.js +15 -1
  12. package/dist/animation/motion.js.map +1 -1
  13. package/dist/animation/reveal.cjs.map +1 -1
  14. package/dist/animation/reveal.js +97 -1
  15. package/dist/animation/reveal.js.map +1 -1
  16. package/dist/animation/transition.cjs.map +1 -1
  17. package/dist/animation/transition.js +39 -1
  18. package/dist/animation/transition.js.map +1 -1
  19. package/dist/animation/tween.cjs.map +1 -1
  20. package/dist/animation/tween.js +7 -1
  21. package/dist/animation/tween.js.map +1 -1
  22. package/dist/axes/axis.cjs.map +1 -1
  23. package/dist/axes/axis.js +76 -1
  24. package/dist/axes/axis.js.map +1 -1
  25. package/dist/axes/grid.cjs.map +1 -1
  26. package/dist/axes/grid.js +29 -1
  27. package/dist/axes/grid.js.map +1 -1
  28. package/dist/axes/scale-utils.cjs.map +1 -1
  29. package/dist/axes/scale-utils.js +10 -1
  30. package/dist/axes/scale-utils.js.map +1 -1
  31. package/dist/charts/area/area-chart.cjs.map +1 -1
  32. package/dist/charts/area/area-chart.js +71 -1
  33. package/dist/charts/area/area-chart.js.map +1 -1
  34. package/dist/charts/area/area-renderer.cjs.map +1 -1
  35. package/dist/charts/area/area-renderer.js +128 -1
  36. package/dist/charts/area/area-renderer.js.map +1 -1
  37. package/dist/charts/bar/bar-chart.cjs.map +1 -1
  38. package/dist/charts/bar/bar-chart.js +228 -1
  39. package/dist/charts/bar/bar-chart.js.map +1 -1
  40. package/dist/charts/bar/bar-hit-test.cjs.map +1 -1
  41. package/dist/charts/bar/bar-hit-test.js +25 -1
  42. package/dist/charts/bar/bar-hit-test.js.map +1 -1
  43. package/dist/charts/bar/bar-renderer.cjs.map +1 -1
  44. package/dist/charts/bar/bar-renderer.js +139 -1
  45. package/dist/charts/bar/bar-renderer.js.map +1 -1
  46. package/dist/charts/line/line-chart.cjs.map +1 -1
  47. package/dist/charts/line/line-chart.js +93 -1
  48. package/dist/charts/line/line-chart.js.map +1 -1
  49. package/dist/charts/line/line-renderer.cjs.map +1 -1
  50. package/dist/charts/line/line-renderer.js +143 -1
  51. package/dist/charts/line/line-renderer.js.map +1 -1
  52. package/dist/charts/pie/pie-chart.cjs +1 -1
  53. package/dist/charts/pie/pie-chart.cjs.map +1 -1
  54. package/dist/charts/pie/pie-chart.js +207 -1
  55. package/dist/charts/pie/pie-chart.js.map +1 -1
  56. package/dist/charts/pie/pie-renderer.cjs.map +1 -1
  57. package/dist/charts/pie/pie-renderer.js +68 -1
  58. package/dist/charts/pie/pie-renderer.js.map +1 -1
  59. package/dist/charts/radar/radar-chart.cjs +1 -1
  60. package/dist/charts/radar/radar-chart.cjs.map +1 -1
  61. package/dist/charts/radar/radar-chart.js +281 -1
  62. package/dist/charts/radar/radar-chart.js.map +1 -1
  63. package/dist/charts/radar/radar-geometry.cjs.map +1 -1
  64. package/dist/charts/radar/radar-geometry.js +69 -1
  65. package/dist/charts/radar/radar-geometry.js.map +1 -1
  66. package/dist/charts/scatter/scatter-chart.cjs.map +1 -1
  67. package/dist/charts/scatter/scatter-chart.js +69 -1
  68. package/dist/charts/scatter/scatter-chart.js.map +1 -1
  69. package/dist/charts/scatter/scatter-renderer.cjs.map +1 -1
  70. package/dist/charts/scatter/scatter-renderer.js +57 -1
  71. package/dist/charts/scatter/scatter-renderer.js.map +1 -1
  72. package/dist/charts/sparkline/sparkline.cjs +1 -1
  73. package/dist/charts/sparkline/sparkline.cjs.map +1 -1
  74. package/dist/charts/sparkline/sparkline.js +251 -1
  75. package/dist/charts/sparkline/sparkline.js.map +1 -1
  76. package/dist/core/cartesian-model.cjs +1 -1
  77. package/dist/core/cartesian-model.cjs.map +1 -1
  78. package/dist/core/cartesian-model.js +26 -1
  79. package/dist/core/cartesian-model.js.map +1 -1
  80. package/dist/core/cartesian-scales.cjs.map +1 -1
  81. package/dist/core/cartesian-scales.js +38 -1
  82. package/dist/core/cartesian-scales.js.map +1 -1
  83. package/dist/core/chart-base.cjs.map +1 -1
  84. package/dist/core/chart-base.js +62 -1
  85. package/dist/core/chart-base.js.map +1 -1
  86. package/dist/core/chart-scaffold.cjs.map +1 -1
  87. package/dist/core/chart-scaffold.js +103 -1
  88. package/dist/core/chart-scaffold.js.map +1 -1
  89. package/dist/core/datum-style.cjs +1 -1
  90. package/dist/core/datum-style.cjs.map +1 -1
  91. package/dist/core/datum-style.js +22 -1
  92. package/dist/core/datum-style.js.map +1 -1
  93. package/dist/core/ids.cjs.map +1 -1
  94. package/dist/core/ids.js +8 -1
  95. package/dist/core/ids.js.map +1 -1
  96. package/dist/core/layout.cjs.map +1 -1
  97. package/dist/core/layout.js +22 -1
  98. package/dist/core/layout.js.map +1 -1
  99. package/dist/core/polar.cjs.map +1 -1
  100. package/dist/core/polar.js +13 -1
  101. package/dist/core/polar.js.map +1 -1
  102. package/dist/core/responsive.cjs.map +1 -1
  103. package/dist/core/responsive.js +20 -1
  104. package/dist/core/responsive.js.map +1 -1
  105. package/dist/core/series-id.cjs.map +1 -1
  106. package/dist/core/series-id.js +7 -1
  107. package/dist/core/series-id.js.map +1 -1
  108. package/dist/errors.cjs.map +1 -1
  109. package/dist/errors.js +9 -1
  110. package/dist/errors.js.map +1 -1
  111. package/dist/index.js +13 -1
  112. package/dist/interaction/announcer.cjs.map +1 -1
  113. package/dist/interaction/announcer.js +25 -1
  114. package/dist/interaction/announcer.js.map +1 -1
  115. package/dist/interaction/crosshair.cjs.map +1 -1
  116. package/dist/interaction/crosshair.js +37 -1
  117. package/dist/interaction/crosshair.js.map +1 -1
  118. package/dist/interaction/events.cjs.map +1 -1
  119. package/dist/interaction/events.js +11 -1
  120. package/dist/interaction/events.js.map +1 -1
  121. package/dist/interaction/legend.cjs.map +1 -1
  122. package/dist/interaction/legend.js +31 -1
  123. package/dist/interaction/legend.js.map +1 -1
  124. package/dist/interaction/scatter-interaction.cjs.map +1 -1
  125. package/dist/interaction/scatter-interaction.js +105 -1
  126. package/dist/interaction/scatter-interaction.js.map +1 -1
  127. package/dist/interaction/series-interaction.cjs.map +1 -1
  128. package/dist/interaction/series-interaction.js +163 -1
  129. package/dist/interaction/series-interaction.js.map +1 -1
  130. package/dist/interaction/tooltip.cjs +1 -1
  131. package/dist/interaction/tooltip.cjs.map +1 -1
  132. package/dist/interaction/tooltip.js +87 -1
  133. package/dist/interaction/tooltip.js.map +1 -1
  134. package/dist/prism.cjs +1 -1
  135. package/dist/prism.cjs.map +1 -1
  136. package/dist/prism.iife.js +1 -1
  137. package/dist/prism.iife.js.map +1 -1
  138. package/dist/prism.js +2930 -1
  139. package/dist/prism.js.map +1 -1
  140. package/dist/scales/band.cjs.map +1 -1
  141. package/dist/scales/band.js +39 -1
  142. package/dist/scales/band.js.map +1 -1
  143. package/dist/scales/linear.cjs.map +1 -1
  144. package/dist/scales/linear.js +43 -1
  145. package/dist/scales/linear.js.map +1 -1
  146. package/dist/scales/time.cjs.map +1 -1
  147. package/dist/scales/time.js +61 -1
  148. package/dist/scales/time.js.map +1 -1
  149. package/dist/svg/element.cjs +1 -1
  150. package/dist/svg/element.cjs.map +1 -1
  151. package/dist/svg/element.js +16 -1
  152. package/dist/svg/element.js.map +1 -1
  153. package/dist/svg/path.cjs.map +1 -1
  154. package/dist/svg/path.js +48 -1
  155. package/dist/svg/path.js.map +1 -1
  156. package/dist/svg/text.cjs.map +1 -1
  157. package/dist/svg/text.js +13 -1
  158. package/dist/svg/text.js.map +1 -1
  159. package/dist/theme/index.cjs.map +1 -1
  160. package/dist/theme/index.js +37 -1
  161. package/dist/theme/index.js.map +1 -1
  162. package/package.json +5 -5
package/dist/prism.js CHANGED
@@ -1,2 +1,2931 @@
1
- import{computePosition as e,flip as t,getClippingAncestorRect as n,offset as r,shift as i}from"@vielzeug/orbit";var a=`http://www.w3.org/2000/svg`;function createSvgElement(e,t){let n=document.createElementNS(a,e);return t&&setAttributes(n,t),n}function setAttributes(e,t){for(let[n,r]of Object.entries(t)){if(r===void 0){e.removeAttribute(n);continue}typeof r==`number`&&!Number.isFinite(r)&&`${n}${e.tagName}${r}`,e.setAttribute(n,String(r))}}function removeChildren(e){for(;e.firstChild;)e.removeChild(e.firstChild)}var o=.6;function estimateTextWidth(e,t){return e.length*t*o}function createTextElement(e,t){let n=createSvgElement(`text`,t);return n.textContent=e,n}function isBandScale(e){return typeof e.bandwidth==`function`}function mapTick(e,t){return isBandScale(e)?e.map(t)+e.bandwidth()/2:e.map(t)}var s=11,c=8,l=new Intl.NumberFormat(void 0,{maximumSignificantDigits:3,notation:`compact`}),defaultTickFormat=e=>e instanceof Date?e.toLocaleDateString(void 0,{month:`short`,year:`numeric`}):typeof e==`number`&&Math.abs(e)>=1e5?l.format(e):String(e);function resolveTicks(e,t,n){return t.tickValues?[...t.tickValues]:e.ticks(n)}function positionAxis(e,t,n,r){let i=t===`bottom`?`translate(0,${r})`:t===`right`?`translate(${n},0)`:void 0;i?e.setAttribute(`transform`,i):e.removeAttribute(`transform`)}function resolveTickCount(e,t,n){let r=e.position??n,i=r===`bottom`||r===`top`?Math.max(2,Math.floor(t/80)):Math.max(2,Math.floor(t/50));return e.tickCount??i}function categoryTickCount(e,t,n,r){if(e.length===0)return 0;let i=r?Math.max(...e.map(e=>estimateTextWidth(t(e),s))):s*1.3;return Math.max(1,Math.min(e.length,Math.floor(n/(i+c))))}function renderAxis(e,t,n,r,i=`bottom`){removeChildren(e);let a=n.position??i,o=a===`bottom`||a===`top`,s=a===`top`||a===`left`,c=s?-1:1,l=createSvgElement(`line`,{"aria-hidden":`true`,class:`prism-axis-line`,x1:0,x2:o?r:0,y1:0,y2:o?0:r});e.appendChild(l);let u=n.tickFormat??defaultTickFormat,d=resolveTicks(t,n,n.tickCount===void 0&&`bandwidth`in t?categoryTickCount(t.domain,u,r,o):resolveTickCount(n,r,i));n.tickValues&&n.tickValues;for(let n of d){let r=mapTick(t,n),i=createSvgElement(`line`,{"aria-hidden":`true`,class:`prism-axis-tick`,x1:o?r:0,x2:o?r:6*c,y1:o?0:r,y2:o?6*c:r});e.appendChild(i);let a=createTextElement(u(n),{"aria-hidden":`true`,class:`prism-axis-label`,"dominant-baseline":o?s?`auto`:`hanging`:`middle`,"text-anchor":o?`middle`:s?`end`:`start`,x:o?r:6*c*1.5,y:o?6*c*1.5:r});e.appendChild(a)}if(n.label){let t=createTextElement(n.label,{class:`prism-axis-title`,"dominant-baseline":`middle`,"text-anchor":`middle`});o?setAttributes(t,{x:r/2,y:6*c*6}):setAttributes(t,{transform:`translate(${6*c*7}, ${r/2}) rotate(-90)`}),e.appendChild(t)}}function renderGrid(e,t,n,r,i,a){removeChildren(e);let o=n!==!0&&n.color||void 0,s=n!==!0&&n.dash||void 0;for(let n of a){let a=mapTick(t,n),c={class:`prism-grid-line`,stroke:o??`var(--prism-grid-color)`,"stroke-dasharray":s,"stroke-opacity":`var(--prism-grid-opacity)`};i===`vertical`?Object.assign(c,{x1:a,x2:a,y1:0,y2:r}):Object.assign(c,{x1:0,x2:r,y1:a,y2:a}),e.appendChild(createSvgElement(`line`,c))}}function niceNumber(e,t){let n=Math.floor(Math.log10(e)),r=e/10**n,i;return i=t?r<1.5?1:r<3?2:r<7?5:10:r<=1?1:r<=2?2:r<=5?5:10,i*10**n}function niceRange(e,t,n){if(!Number.isFinite(e)||!Number.isFinite(t))return[0,1];if(e>t&&([e,t]=[t,e]),e===t)return[e-1,t+1];let r=niceNumber(niceNumber(t-e,!1)/Math.max(1,n-1),!0);return[Math.floor(e/r)*r,Math.ceil(t/r)*r]}function linearScale(e){let getDomain=()=>e.nice===!1?e.domain:niceRange(e.domain[0],e.domain[1],10),getRange=()=>e.range;return{get domain(){return getDomain()},invert(e){let[t,n]=getDomain(),[r,i]=getRange();return i===r?t:t+(e-r)/(i-r)*(n-t)},map(t){let[n,r]=getDomain(),[i,a]=getRange();if(r===n)return i;let o=(t-n)/(r-n);return e.clamp&&(o=Math.max(0,Math.min(1,o))),i+o*(a-i)},get range(){return getRange()},ticks(e=10){if(e<=0)return[];let[t,n]=getDomain();if(t===n||e===1)return[t];let r=Math.min(t,n),i=Math.max(t,n),a=niceNumber(niceNumber(i-r,!1)/(e-1),!0),o=Math.ceil(r/a)*a,s=Math.floor(i/a)*a,c=[];for(let e=o;e<=s+a*.5;e+=a)c.push(Math.round(e*0xe8d4a51000)/0xe8d4a51000);return c}}}var u=1e3,d=60*u,f=60*d,p=24*f,m=30*p,h=365*p,g=[u,5*u,15*u,30*u,d,5*d,15*d,30*d,f,3*f,6*f,12*f,p,7*p,m,3*m,6*m,h];function chooseInterval(e,t){let n=Math.abs(e)/Math.max(1,t);for(let e of g)if(e>=n)return e;return h}function niceDomain(e,t){let[n,r]=e;n.getTime()>r.getTime()&&([n,r]=[r,n]);let i=chooseInterval(r.getTime()-n.getTime(),t);return[new Date(Math.floor(n.getTime()/i)*i),new Date(Math.ceil(r.getTime()/i)*i)]}function timeScale(e){let getDomain=()=>e.nice===!1?e.domain:niceDomain(e.domain,10),getRange=()=>e.range;return{get domain(){return getDomain()},invert(e){let[t,n]=getDomain(),[r,i]=getRange();if(i===r)return t;let a=(e-r)/(i-r);return new Date(t.getTime()+a*(n.getTime()-t.getTime()))},map(e){let[t,n]=getDomain(),[r,i]=getRange(),a=n.getTime()-t.getTime();return a===0?r:r+(e.getTime()-t.getTime())/a*(i-r)},get range(){return getRange()},ticks(e=10){let[t,n]=getDomain(),r=chooseInterval(n.getTime()-t.getTime(),e),i=Math.ceil(t.getTime()/r)*r,a=[];for(let e=i;e<=n.getTime();e+=r)a.push(new Date(e));return a}}}function buildXScale(e,t){if(e.length===0||e.some(e=>e==null)||e.some(e=>typeof e==`number`&&!Number.isFinite(e)))return linearScale({domain:[0,1],range:[0,t]});if(e[0]instanceof Date){let n=e,r=Math.min(...n.map(Number)),i=Math.max(...n.map(Number));return timeScale({domain:[new Date(r),new Date(r===i?i+1:i)],nice:!1,range:[0,t]})}let n=e,r=Math.min(...n),i=Math.max(...n);return linearScale({domain:[r,r===i?i+1:i],nice:!1,range:[0,t]})}function buildYScale(e,t,n=!0){if(e.length===0||e.some(e=>e==null)||e.some(e=>!Number.isFinite(e)))return linearScale({domain:[0,1],range:[t,0]});let r=Math.min(...e),i=n?Math.min(0,r):r,a=Math.max(...e);return linearScale({domain:[i,i===a?a+1:a],range:[t,0]})}function createTappers(){let e=new Set,t=!1;return{emit(t){if(e.size!==0)for(let n of e)try{n(t)}catch{}},stop(){t=!0,e.clear()},tap(n,r){if(t||r?.signal?.aborted)return()=>{};e.add(n);let detach=()=>{e.delete(n)};return r?.signal?.addEventListener(`abort`,detach,{once:!0}),detach}}}var PrismError=class extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}},PrismRenderError=class extends PrismError{};function describeValues(e,t,n=String){return`${e}: ${t.map(({datum:e,series:t})=>`${t.name} ${e?n(e.value,e,t):`n/a`}`).join(`, `)}`}function createAnnouncer(e,t){let n=createSvgElement(`text`,{"aria-live":`polite`,class:t,role:`status`,x:-9999,y:-9999});return e.appendChild(n),{announce(e){n.textContent=e},clear(){n.textContent=``}}}function resolvePosition(e){return e===!0?`bottom`:e.position??`bottom`}function createLegend(e,t,n){let r=resolvePosition(t),i=document.createElement(`div`);i.className=`prism-legend prism-legend-${r}`,r===`top`?e.insertBefore(i,e.firstChild):e.appendChild(i);let disposeHandle=()=>{i.remove()};return{dispose:disposeHandle,el:i,[Symbol.dispose]:disposeHandle,update(e){i.replaceChildren();for(let t of e){let e=document.createElement(`div`);e.className=`prism-legend-item`;let n=document.createElement(`span`);n.className=`prism-legend-dot`,n.style.backgroundColor=t.color;let r=document.createElement(`span`);r.className=`prism-legend-label`,r.textContent=t.name,e.appendChild(n),e.appendChild(r),i.appendChild(e)}n?.()}}}var _=`position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap`;function shiftBoundary(e,t){let r=e.getBoundingClientRect(),i={height:r.height,width:r.width,x:r.x,y:r.y},a=n(t),o=Math.max(i.x,a.x),s=Math.max(i.y,a.y),c=Math.min(i.x+i.width,a.x+a.width),l=Math.min(i.y+i.height,a.y+a.height);return c<=o||l<=s?i:{height:l-s,width:c-o,x:o,y:s}}function comparisonContent(e,t,n,r){let i=e.createElement(`div`),a=e.createElement(`span`),o=e.createElement(`div`),s=e.createElement(`div`);i.className=`prism-tooltip-body`,a.className=`prism-tooltip-sr`,a.style.cssText=_,a.textContent=r,o.setAttribute(`aria-hidden`,`true`),s.className=`prism-tooltip-title`,s.textContent=t,o.appendChild(s);for(let t of n){let n=e.createElement(`div`),r=e.createElement(`span`),i=e.createElement(`span`),a=e.createElement(`span`);n.className=`prism-tooltip-row`,r.className=`prism-tooltip-swatch`,r.style.setProperty(`--prism-swatch`,t.color),i.className=`prism-tooltip-name`,i.textContent=t.name,a.className=`prism-tooltip-value`,a.textContent=t.value,n.append(r,i,a),o.appendChild(n)}return i.append(a,o),i}function createTooltip(n,a){let o=n.style.position,s=getComputedStyle(n).position===`static`;s&&(n.style.position=`relative`);let c=n.ownerDocument.createElement(`div`);c.className=`prism-tooltip`,c.style.position=`absolute`,c.style.pointerEvents=`none`,c.style.top=`0`,c.style.left=`0`,c.setAttribute(`role`,`status`),c.setAttribute(`aria-live`,`polite`),n.appendChild(c);let l=a!==!0&&a?.offset||8,u=a===!0?void 0:a?.render,setVisible=e=>{c.classList.toggle(`prism-tooltip--visible`,e),c.style.opacity=e?`1`:`0`},d=null,f=null,p=!1,cancelClear=()=>{f!==null&&(clearTimeout(f),f=null)},cancelReveal=()=>{d!==null&&(cancelAnimationFrame(d),d=null)},disposeHandle=()=>{cancelReveal(),cancelClear(),c.remove(),s&&n.style.position===`relative`&&(n.style.position=o)};return{dispose:disposeHandle,el:c,hide(){cancelReveal(),cancelClear(),p=!1,setVisible(!1),f=setTimeout(()=>{f=null,p||(c.textContent=``)},150)},show(a,o,s,f,m){if(!n.isConnected)return;cancelClear();let h=u?u(s,f):m??`${f.name}: ${s.value}`;typeof h==`string`?c.textContent=h:c.replaceChildren(h);let{x:g,y:_}=e({getBoundingClientRect:()=>{let e=n.getBoundingClientRect();return{bottom:e.top+o,height:0,left:e.left+a,right:e.left+a,top:e.top+o,width:0,x:e.left+a,y:e.top+o}}},c,{containingBlock:n,middleware:[r(l),t(),i({boundary:shiftBoundary(n,c),padding:8})],placement:`top`});if(c.style.left=`${g}px`,c.style.top=`${_}px`,p){d===null&&setVisible(!0);return}p=!0,setVisible(!1),d=requestAnimationFrame(()=>{d=null,p&&setVisible(!0)})},[Symbol.dispose]:disposeHandle}}var v={bottom:48,left:50,right:20,top:20};function resolveMargin(e){return{...v,...e}}function chartArea(e,t,n){return{height:Math.max(0,t-n.top-n.bottom),width:Math.max(0,e-n.left-n.right)}}function observeResize(e,t){if(typeof ResizeObserver>`u`)return()=>{};let n=null,r=new ResizeObserver(e=>{n!==null&&cancelAnimationFrame(n),n=requestAnimationFrame(()=>{n=null;let r=e[0];if(r){let{height:e,width:n}=r.contentRect;t(n,e)}})});return r.observe(e),()=>{n!==null&&cancelAnimationFrame(n),r.disconnect()}}function createChartBase(e,t,n){if(!(typeof e==`object`&&e&&e.nodeType===1&&typeof e.appendChild==`function`&&typeof e.getBoundingClientRect==`function`)){let t=e;throw new PrismRenderError(`Invalid chart configuration: \`container\` must be a DOM Element, received ${t===null?`null`:typeof t==`object`?t.constructor?.name??`object`:typeof t}.`)}let r=resolveMargin(t.margin),i=t.a11y,a=createSvgElement(`svg`,{...!i||i.decorative?{"aria-hidden":`true`}:{"aria-label":i.ariaLabel,role:`img`,tabindex:`0`},class:`prism-chart`,style:`display:block;max-width:100%`}),o=createSvgElement(`g`,{class:`prism-chart-area`,transform:`translate(${r.left},${r.top})`});a.appendChild(o);let s=e.getBoundingClientRect();s.width===0||s.height;let c=s.width||600,l=s.height||300,u={height:l,margin:r,width:c},d=c,f=l,p=l,syncChrome=()=>{let e=Math.max(0,p-(t.chrome?.()?.offsetHeight??0));f=e,u.height=e,setAttributes(a,{height:e,viewBox:`0 0 ${u.width} ${e}`})},m=observeResize(e,(e,r)=>{p=r;let i=t.chrome?.()?.offsetHeight??0,o=Math.max(0,r-i);(e!==d||o!==f)&&(d=e,f=o,u.height=o,u.width=e,setAttributes(a,{height:o,viewBox:`0 0 ${e} ${o}`,width:e}),n?.())});return setAttributes(a,{height:l,viewBox:`0 0 ${c} ${l}`,width:c}),e.appendChild(a),{chartArea:o,dimensions:u,dispose(){m(),a.remove()},svg:a,syncChrome}}function clearCartesianDom(e,t,n,r){removeChildren(e.series),removeChildren(e.grid),removeChildren(e.xAxis),removeChildren(e.yAxis),t?.update([]),n?.hide(),r?.hide()}function runScaffold(e,t,n,r,i){let render=e=>{},a=createTappers(),o=null,s=createChartBase(e,{a11y:t.a11y,chrome:()=>o?.el??null,margin:t.margin},()=>{a.emit({height:s.dimensions.height,type:`resize`,width:s.dimensions.width}),render(`resize`)}),c=t.tooltip?createTooltip(e,t.tooltip):null;o=t.legend?createLegend(e,t.legend,()=>s.syncChrome()):null;let l=new AbortController,u=n(s,c,o,l.signal,createAnnouncer(s.svg,`prism-live`)),d=!1,f=makeEventManager(s.svg);render=e=>{d||f.attach(r(u,e))};try{render(`mount`)}catch(e){throw d=!0,l.abort(),f.detach(),c?.dispose(),o?.dispose(),s.dispose(),e instanceof PrismRenderError?e:new PrismRenderError(`Failed to render chart.`,{cause:e})}return{get disposalSignal(){return l.signal},dispose(){d||(d=!0,a.emit({type:`dispose`}),a.stop(),l.abort(),f.detach(),c?.dispose(),o?.dispose(),s.dispose())},get disposed(){return d},el:s.svg,tap:a.tap,update(e){if(d)throw new PrismRenderError(`Cannot update a disposed chart.`);i(e),render(`update`)},[Symbol.dispose](){this.dispose()}}}function makeEventManager(e){let t=null;return{attach(n){t&&=(t.onMouseMove&&e.removeEventListener(`mousemove`,t.onMouseMove),t.onMouseLeave&&e.removeEventListener(`mouseleave`,t.onMouseLeave),t.onClick&&e.removeEventListener(`click`,t.onClick),t.onKeyDown&&e.removeEventListener(`keydown`,t.onKeyDown),null),n&&(t=n,n.onMouseMove&&e.addEventListener(`mousemove`,n.onMouseMove),n.onMouseLeave&&e.addEventListener(`mouseleave`,n.onMouseLeave),n.onClick&&e.addEventListener(`click`,n.onClick),n.onKeyDown&&e.addEventListener(`keydown`,n.onKeyDown))},detach(){this.attach(void 0)}}}function createChartScaffold(e,t,n,r){return runScaffold(e,t,(t,n,r,i,a)=>{let o={grid:createSvgElement(`g`,{"aria-hidden":`true`,class:`prism-grid`}),series:createSvgElement(`g`,{class:`prism-series`}),xAxis:createSvgElement(`g`,{class:`prism-x-axis`}),yAxis:createSvgElement(`g`,{class:`prism-y-axis`})};return t.chartArea.appendChild(o.grid),t.chartArea.appendChild(o.xAxis),t.chartArea.appendChild(o.yAxis),t.chartArea.appendChild(o.series),{announcer:a,chartArea:t.chartArea,container:e,dimensions:t.dimensions,disposalSignal:i,groups:o,legend:r,svg:t.svg,tooltip:n}},n,r)}function createRadialScaffold(e,t,n,r){return runScaffold(e,t,(t,n,r,i,a)=>({announcer:a,container:e,dimensions:t.dimensions,disposalSignal:i,legend:r,svg:t.svg,tooltip:n}),n,r)}function seriesDomId(e,t){return e?.id?e.id.replace(/[^A-Za-z0-9_-]/g,`-`):`series-${t}`}function createCrosshair(e,t){let n=t===!0||t?.vertical!==!1,r=t!==!0&&t?.horizontal===!0,i=t===!0||t?.snap!==!1,a=createSvgElement(`g`,{"aria-hidden":`true`,class:`prism-crosshair`,style:`display:none`}),o=n?createSvgElement(`line`,{class:`prism-crosshair-v`,"stroke-dasharray":`var(--prism-crosshair-dash, 4 2)`}):null,s=r?createSvgElement(`line`,{class:`prism-crosshair-h`,"stroke-dasharray":`var(--prism-crosshair-dash, 4 2)`}):null;return o&&a.appendChild(o),s&&a.appendChild(s),e.appendChild(a),{hide(){a.style.display=`none`},show(e,t,n,r){a.style.display=``,o&&(setAttributes(o,{x1:0,x2:0,y1:0,y2:r}),o.style.transform=`translateX(${e}px)`),s&&(setAttributes(s,{x1:0,x2:n,y1:0,y2:0}),s.style.transform=`translateY(${t}px)`)},snap:i}}function keyId(e){return e instanceof Date?`date:${e.getTime()}`:`${typeof e}:${String(e)}`}function normalizeCartesianSeries(e,t){let n=[],r=new Map;return{domain:n,labels:r,series:e.map((e,i)=>{let a=new Map;for(let o of t[i]??[]){let t=keyId(o.key);if(a.has(t)){`${String(o.key)}${e.name}`;continue}a.set(t,o),r.has(t)||(r.set(t,o.key),n.push(t))}return{byKey:a,config:e}})}}function getMousePosition(e,t,n,r){let i=e.getBoundingClientRect();return{x:t.clientX-i.left-n,y:t.clientY-i.top-r}}var keyOrder=e=>e instanceof Date?e.getTime():Number(e);function keyLabel(e){return e instanceof Date?e.toLocaleDateString():String(e)}function findNearestKey(e,t,n){let r=null,i=1/0;for(let a=0;a<t.length;a++)for(let o=0;o<(t[a]?.length??0);o++){let s=e[a]?.[o],c=t[a]?.[o];if(!s||!c)continue;let l=Math.abs(c.x-n);l<i&&(i=l,r=s.key)}return r}function createSeriesInteraction(e){let t=-1,n=!1,renderedHit=t=>{let n=t.target;if(!(n instanceof SVGElement)||n.tagName.toLowerCase()!==`circle`||!e.seriesGroup.contains(n)||!n.parentElement)return null;let r=n.parentElement;for(;r&&r.parentNode!==e.seriesGroup;)r=r.parentElement;if(!r)return null;let i=[...e.seriesGroup.children].indexOf(r),a=[...n.parentElement.children].indexOf(n),o=e.getData()[i]?.[a],s=e.getPoints()[i]?.[a];return o&&s?{datum:o,point:s,seriesIndex:i}:null},entriesAt=t=>{let n=keyId(t),r=e.getPoints();return e.getData().map((e,t)=>{let i=e.findIndex(e=>keyId(e.key)===n);return i===-1?{datum:void 0,point:void 0}:{datum:e[i],point:r[t]?.[i]}})},nearestIndex=(e,t)=>{let n=-1,r=1/0;return e.forEach(({point:e},i)=>{if(!e)return;let a=Number.isFinite(t)?Math.abs(e.y-t):0;a<r&&(r=a,n=i)}),n},highlight=(t,n)=>{let r=e.colors();e.markers.replaceChildren(),t.forEach(({point:t},n)=>{t&&e.markers.appendChild(createSvgElement(`circle`,{class:`prism-active-point`,cx:t.x,cy:t.y,fill:r[n],r:4}))});let i=[...e.seriesGroup.children];e.seriesGroup.classList.toggle(`prism-series-focused`,n>=0&&i.length>1);for(let[e,t]of i.entries())t.classList.toggle(`prism-series-active`,e===n)},clear=()=>{e.crosshair?.hide(),e.tooltip?.hide(),e.announcer.clear(),highlight([],-1),n=!1,e.onHover?.(null)},eventFor=(t,n,r)=>{let i=entriesAt(t),a=renderedHit(r),o=a?.seriesIndex??nearestIndex(i,n);a&&(i[o]={datum:a.datum,point:a.point});let s=e.getSeriesList(),c=i[o]?.datum;if(o<0||!c)return null;let l=i.map((e,t)=>({datum:e.datum,series:s[t]}));return{entries:i,event:{datum:c,originalEvent:r,series:s[o],values:l},index:o}},focus=(t,r,i)=>{let a=eventFor(t,r?.y??NaN,i);if(!a)return;let{entries:o,event:s,index:c}=a,l=o[c].point,u=e.dims(),d=chartArea(u.width,u.height,e.margin),f=e.crosshair?.snap===!1&&r,p=e.tooltipFormat?.titleFormat?e.tooltipFormat.titleFormat(t):keyLabel(t),m=s.values??[],h=e.colors(),g=e.tooltipFormat?.valueFormat;e.crosshair?.show(f?r.x:l.x,f?r.y:l.y,d.width,d.height),highlight(o,c);let _=describeValues(p,m,g??String);if(e.tooltip){let t=m.flatMap(({datum:e,series:t},n)=>e?[{color:h[n],name:t.name,value:g?g(e.value,e,t):String(e.value)}]:[]);e.tooltip.show(l.x+e.margin.left,l.y+e.margin.top,s.datum,s.series,comparisonContent(e.svg.ownerDocument,p,t,_))}else e.announcer.announce(_);n=!0,e.onHover?.(s)},pointerKey=t=>{let n=renderedHit(t);if(n)return{key:n.datum.key,pos:n.point};let r=e.getPoints();if(r.every(e=>e.length===0))return null;let i=e.dims(),a=getMousePosition(e.svg,t,e.margin.left,e.margin.top),o=chartArea(i.width,i.height,e.margin);if(a.x<0||a.x>o.width||a.y<0||a.y>o.height)return null;let s=findNearestKey(e.getData(),r,a.x);return s===null?null:{key:s,pos:a}},sortedKeys=()=>[...new Map(e.getData().flat().map(e=>[keyId(e.key),e.key])).values()].sort((e,t)=>keyOrder(e)-keyOrder(t)),onMouseMove=e=>{let t=pointerKey(e);t?focus(t.key,t.pos,e):n&&clear()},onClick=t=>{if(!e.onClick)return;let n=pointerKey(t),r=n&&eventFor(n.key,n.pos.y,t);r&&e.onClick(r.event)},onKeyDown=n=>{let r=sortedKeys();if(r.length===0)return;let i=r.length-1,a={ArrowLeft:t<0?i:Math.max(0,t-1),ArrowRight:t<0?0:Math.min(i,t+1),End:i,Home:0};if(n.key in a)n.preventDefault(),t=a[n.key],focus(r[t],null,n);else if((n.key===`Enter`||n.key===` `)&&t>=0&&e.onClick){n.preventDefault();let i=eventFor(r[t],NaN,n);i&&e.onClick(i.event)}else n.key===`Escape`&&(t=-1,clear())};return{onClick,onKeyDown,onMouseLeave:clear,onMouseMove}}function ensureMarkerGroup(e,t){if(t&&e.contains(t))return t;let n=createSvgElement(`g`,{"aria-hidden":`true`,class:`prism-active-points`,"pointer-events":`none`});return e.appendChild(n),n}var y=8,b={axisColor:`--prism-axis-color`,fontFamily:`--prism-font-family`,gridColor:`--prism-grid-color`,gridOpacity:`--prism-grid-opacity`,textColor:`--prism-text-color`,textColorSecondary:`--prism-text-color-secondary`,tooltipBg:`--prism-tooltip-bg`,tooltipBorder:`--prism-tooltip-border`,tooltipColor:`--prism-tooltip-color`};function target(e){return e?.scope??document.documentElement}function setTheme(e,t){let n=target(t);if(e.colors)for(let t=0;t<y;t++){let r=e.colors[t];r?n.style.setProperty(`--prism-color-${t+1}`,r):n.style.removeProperty(`--prism-color-${t+1}`)}for(let[t,r]of Object.entries(b)){let i=e[t];i!==void 0&&n.style.setProperty(r,String(i))}}function resetTheme(e){let t=target(e);for(let e=1;e<=y;e++)t.style.removeProperty(`--prism-color-${e}`);for(let e of Object.values(b))t.style.removeProperty(e)}function seriesColor(e,t){return t??`var(--prism-color-${e%y+1})`}var x=1.70158,S={"back-out":e=>1+2.70158*(e-1)**3+x*(e-1)**2,"ease-in":e=>e*e*e,"ease-in-out":e=>e<.5?4*e*e*e:1-(-2*e+2)**3/2,"ease-out":e=>1-(1-e)**3,"expo-out":e=>e>=1?1:1-2**(-10*e),linear:e=>e};function resolveEasing(e){return typeof e==`function`?e:e!==void 0&&Object.hasOwn(S,e)?S[e]:S[`ease-out`]}function resolveMotion(e,t){if(e===!1)return{duration:0,stagger:0};let n=e===!0?void 0:e,r=n?.preference??`system`,i=typeof matchMedia<`u`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches,a=r===`never`||r===`system`&&i?0:n?.duration??t?.defaultDuration??300;return{...n,duration:a,stagger:Math.max(0,n?.stagger??t?.defaultStagger??0)}}function tweenNumber(e,t,n){return e+(t-e)*n}function startTween(e){let{count:t,duration:n,easing:r,stagger:i=0,signal:a,onFrame:o,onComplete:s}=e;if(a?.aborted)return()=>{};if(n<=0)return o(()=>1),s?.(),()=>{};if(t===0)return s?.(),()=>{};let c=n+i*(t-1),l=null,u=null,d=!1,cancel=()=>{d=!0,u!==null&&(cancelAnimationFrame(u),u=null),a?.removeEventListener(`abort`,cancel)},frame=e=>{if(d||a?.aborted)return;l===null&&(l=e);let t=e-l;o(e=>r(Math.max(0,Math.min(1,(t-e*i)/n)))),t<c?u=requestAnimationFrame(frame):(u=null,a?.removeEventListener(`abort`,cancel),s?.())};return a?.addEventListener(`abort`,cancel,{once:!0}),u=requestAnimationFrame(frame),cancel}function animate(e,t,n,r){let i=resolveMotion(t);return startTween({count:e.length,duration:i.duration,easing:resolveEasing(i.easing),onComplete:n,onFrame:t=>{for(let[n,r]of e.entries()){let e=t(n);for(let[t,{from:n,to:i}]of Object.entries(r.attrs))r.el.setAttribute(t,String(tweenNumber(n,i,e)))}},signal:r,stagger:i.stagger})}function hasStyledRuns(e){return e?.some(e=>e&&(e.dash!==void 0||e.opacity!==void 0))??!1}function computeStyleRuns(e,t){let n=Math.max(0,t-1);if(n===0)return[];let r=[];for(let t=0;t<n;t++){let n=e[t]??{},i=r[r.length-1];if(i&&i.dash===n.dash&&i.opacity===n.opacity){i.end=t+1;continue}r.push({dash:n.dash,end:t+1,opacity:n.opacity,start:t})}return r}var C=0;function uniqueId(e){return C+=1,`${e}-${C}`}function linePath(e){if(e.length===0)return``;let t=`M${e[0].x},${e[0].y}`;for(let n=1;n<e.length;n++)t+=`L${e[n].x},${e[n].y}`;return t}function monotonePath(e){if(e.length<3)return linePath(e);let t=e.length,n=[];for(let r=0;r<t;r++)r===0?n.push({x:e[1].x-e[0].x,y:e[1].y-e[0].y}):r===t-1?n.push({x:e[t-1].x-e[t-2].x,y:e[t-1].y-e[t-2].y}):n.push({x:(e[r+1].x-e[r-1].x)/2,y:(e[r+1].y-e[r-1].y)/2});let r=`M${e[0].x},${e[0].y}`;for(let i=0;i<t-1;i++){let t=e[i],a=e[i+1],o=n[i],s=n[i+1],c=(a.x-t.x)/3;r+=`C${t.x+c},${t.y+o.y/3},${a.x-c},${a.y-s.y/3},${a.x},${a.y}`}return r}function stepPath(e){if(e.length===0)return``;let t=`M${e[0].x},${e[0].y}`;for(let n=1;n<e.length;n++){let r=(e[n-1].x+e[n].x)/2;t+=`H${r}V${e[n].y}H${e[n].x}`}return t}function areaPath(e,t,n=`linear`){if(e.length===0)return``;let r=n===`monotone`?monotonePath(e):n===`step`?stepPath(e):linePath(e),i=[...t].reverse();if(i.length>0){r+=`L${i[0].x},${i[0].y}`;for(let e=1;e<i.length;e++)r+=`L${i[e].x},${i[e].y}`}return r+=`Z`,r}var w=new WeakMap,T=new WeakMap;function buildLinePath(e,t){return t===`monotone`?monotonePath(e):t===`step`?stepPath(e):linePath(e)}function applyAreaFill(e,t,n){let r=e.querySelector(`linearGradient`);if(n.fill===`gradient`){if(!r){let t=createSvgElement(`defs`);r=createSvgElement(`linearGradient`,{id:uniqueId(`prism-area-fill`),x1:0,x2:0,y1:0,y2:1}),r.append(createSvgElement(`stop`,{class:`prism-area-stop-top`,offset:0}),createSvgElement(`stop`,{class:`prism-area-stop-bottom`,offset:1})),t.appendChild(r),e.insertBefore(t,e.firstChild)}for(let e of r.querySelectorAll(`stop`))e.setAttribute(`stop-color`,n.color),e.style.stopColor=n.color;setAttributes(t,{fill:`url(#${r.id})`})}else r?.parentElement?.remove(),setAttributes(t,{fill:n.color});setAttributes(t,{class:`prism-area-fill prism-area-fill--${n.fill}`,stroke:`none`}),t.style.fillOpacity=n.fillOpacity===void 0?``:String(n.fillOpacity)}function renderArea(e,t,n,r){let i=resolveMotion(r.transition),a=i.duration,o=resolveEasing(i.easing),s=e.querySelector(`.prism-area-fill`);s||(s=createSvgElement(`path`,{class:`prism-area-fill`}),e.appendChild(s)),applyAreaFill(e,s,r);let c=null,l=[],u=[],d=hasStyledRuns(r.marks),f=r.marks??[];if(r.showLine){if(d){l=computeStyleRuns(f,t.length);let n=[...e.querySelectorAll(`.prism-area-line`)];for(let e of n.slice(l.length))e.remove();u=l.map((t,r)=>{let i=n[r];if(i)return i;let a=createSvgElement(`path`,{class:`prism-area-line`,fill:`none`});return e.appendChild(a),a});for(let[e,t]of l.entries())setAttributes(u[e],{opacity:t.opacity,stroke:r.color,"stroke-dasharray":t.dash,"stroke-width":2});c=null}else{let t=[...e.querySelectorAll(`.prism-area-line`)];for(let e of t.slice(1))e.remove();c=t[0]??null,c||(c=createSvgElement(`path`,{class:`prism-area-line`,fill:`none`}),e.appendChild(c)),setAttributes(c,{opacity:void 0,stroke:r.color,"stroke-dasharray":void 0,"stroke-width":2})}}else for(let t of e.querySelectorAll(`.prism-area-line`))t.remove();let drawLine=e=>{if(r.showLine){if(d)for(let[t,n]of l.entries())setAttributes(u[t],{d:buildLinePath(e.slice(n.start,n.end+1),r.curve)});else c&&setAttributes(c,{d:buildLinePath(e,r.curve)})}};if(a===0){let i=t.map(e=>({x:e.x,y:n}));setAttributes(s,{d:areaPath(t,i,r.curve)}),drawLine(t),T.set(e,t);return}w.get(e)?.();let p=T.has(e)?T.get(e)??t:t.map(e=>({x:e.x,y:n})),m=t.map((e,n)=>p[n]??p[p.length-1]??t[n]),paintFrame=i=>{let a=t.map((e,t)=>({x:tweenNumber(m[t].x,e.x,i),y:tweenNumber(m[t].y,e.y,i)})),o=a.map(e=>({x:e.x,y:n}));T.set(e,a),setAttributes(s,{d:areaPath(a,o,r.curve)}),drawLine(a)};paintFrame(0),w.set(e,startTween({count:1,duration:a,easing:o,onComplete:()=>{w.delete(e),T.set(e,t)},onFrame:e=>paintFrame(e(0)),signal:r.disposalSignal}))}function computeAreaPoints(e,t,n){return e.some(e=>e.key==null)||e.some(e=>typeof e.key==`string`),e.map(e=>({x:t.map(e.key),y:n.map(e.value)}))}function createAreaChart(e,t){let n=null,r=null,i=t.series;return createChartScaffold(e,t,e=>{let{groups:a,legend:o,tooltip:s}=e;o?.update(i.map((e,t)=>({color:seriesColor(t,e.color),name:e.name})));let c=e.dimensions,l=chartArea(c.width,c.height,c.margin),u=i.map(e=>e.data),d=u.flat().map(e=>e.key),f=u.flat().map(e=>e.value);if(d.length===0){clearCartesianDom(a,o,s,n),r?.replaceChildren();return}t.crosshair&&!n&&(n=createCrosshair(e.chartArea,t.crosshair));let p=buildXScale(d,l.width),m=buildYScale(f,l.height),h=m.map(0),g=t.xAxis===!1?!1:t.xAxis??{},_=t.yAxis!==!1&&{grid:!0,...t.yAxis};for(_&&_.grid&&renderGrid(a.grid,m,_.grid,l.width,`horizontal`,resolveTicks(m,_,resolveTickCount(_,l.height,`left`))),g&&g.grid&&renderGrid(a.grid,p,g.grid,l.height,`vertical`,resolveTicks(p,g,resolveTickCount(g,l.width,`bottom`))),g?(positionAxis(a.xAxis,g.position??`bottom`,l.width,l.height),renderAxis(a.xAxis,p,g,l.width,`bottom`)):a.xAxis.replaceChildren(),_?(positionAxis(a.yAxis,_.position??`left`,l.width,l.height),renderAxis(a.yAxis,m,_,l.height,`left`)):a.yAxis.replaceChildren();a.series.children.length>i.length;)a.series.removeChild(a.series.lastChild);let v=[];for(let n=0;n<i.length;n++){let r=i[n],o=a.series.children[n];o||(o=createSvgElement(`g`,{class:`prism-area-series`}),a.series.appendChild(o)),o.setAttribute(`data-series-id`,seriesDomId(r,n));let s=computeAreaPoints(u[n],p,m);v.push(s),renderArea(o,s,h,{color:seriesColor(n,r.color),curve:r.curve??`linear`,disposalSignal:e.disposalSignal,fill:r.fill??`gradient`,fillOpacity:r.fillOpacity,marks:r.data,showLine:r.showLine!==!1,transition:t.transition})}return s?.hide(),r=ensureMarkerGroup(e.chartArea,r),createSeriesInteraction({announcer:e.announcer,colors:()=>i.map((e,t)=>seriesColor(t,e.color)),crosshair:n,dims:()=>e.dimensions,getData:()=>u,getPoints:()=>v,getSeriesList:()=>i,margin:e.dimensions.margin,markers:r,onClick:t.onClick,onHover:t.onHover,seriesGroup:a.series,svg:e.svg,tooltip:s,tooltipFormat:typeof t.tooltip==`object`?t.tooltip:void 0})},e=>{i=e})}function bandScale(e){let getDomain=()=>e.domain,getRange=()=>e.range,getBandwidth=()=>{let t=getDomain().length;if(t===0)return 0;let[n,r]=getRange(),i=e.padding??.1;return(r-n)/(t+(t-1)*i+(e.paddingOuter??i)*2)};return{bandwidth:getBandwidth,get domain(){return getDomain()},gap(){let t=e.padding??.1;return getBandwidth()*t},map(t){let n=getDomain().indexOf(t);if(n===-1)return`${t}`,0;let[r]=getRange(),i=getBandwidth(),a=e.padding??.1;return r+(e.paddingOuter??a)*i+n*(i+i*a)},get range(){return getRange()},ticks(e){let t=getDomain();if(e===void 0||e>=t.length)return[...t];if(e<=0)return[];let n=Math.ceil(t.length/e);return t.filter((e,t)=>t%n===0)}}}function findCatIdx(e,t,n){for(let r=0;r<t.length;r++){let i=n.bandCenter(t[r])-n.bandwidth/2;if(e>=i&&e<i+n.bandwidth)return r}return-1}function findSeriesIdx(e,t,n,r,i){if(r.stacked){if(r.horizontal){for(let n=0;n<i;n++)if(r.valueScale.map(r.stackedTops[n]?.[t]??0)>=e.x)return n;return i-1}for(let n=0;n<i;n++)if(r.valueScale.map(r.stackedTops[n]?.[t]??0)<=e.y)return n;return i-1}{let a=r.bandwidth/i,o=r.bandCenter(n[t])-r.bandwidth/2,s=r.horizontal?e.y-o:e.x-o,c=Math.floor(s/a);return Math.max(0,Math.min(i-1,c))}}var E=new WeakMap;function cancelReveal(e){E.get(e)?.()}function playTraceReveal(e,t,n,r,i,a){if(cancelReveal(e),i.duration<=0||a?.aborted)return()=>{};let o=uniqueId(`prism-trace`),s=createSvgElement(`defs`),c=r/2,l=createSvgElement(`mask`,{height:t.height+r,id:o,maskContentUnits:`userSpaceOnUse`,maskUnits:`userSpaceOnUse`,width:t.width+r,x:-c,y:-c}),u=n.map(({d:e})=>{let t=createSvgElement(`path`,{d:e,fill:`none`,pathLength:1,stroke:`white`,"stroke-dasharray":`1 1`,"stroke-dashoffset":1,"stroke-width":r});return l.appendChild(t),t});s.appendChild(l),e.insertBefore(s,e.firstChild),e.setAttribute(`mask`,`url(#${o})`);let cancelTween=()=>{},finish=()=>{E.delete(e),e.removeAttribute(`mask`),s.remove(),a?.removeEventListener(`abort`,finish),cancelTween()};return E.set(e,finish),a?.addEventListener(`abort`,finish,{once:!0}),cancelTween=startTween({count:1,duration:i.duration,easing:resolveEasing(i.easing),onComplete:finish,onFrame:e=>{let t=e(0);for(let[e,r]of u.entries()){let{start:i,end:a}=n[e],o=Math.max(0,Math.min(1,(t-i)/(a-i)));r.setAttribute(`stroke-dashoffset`,String(1-o))}},signal:a}),finish}function playGrowReveal(e,t,n,r,i){if(cancelReveal(e),n(),r.duration<=0||t.length===0||i.signal?.aborted)return()=>{};let a=uniqueId(`prism-reveal`),o=createSvgElement(`defs`),s=createSvgElement(`clipPath`,{id:a}),c=t.map(e=>{let t=createSvgElement(`rect`,{height:0,width:0,x:e.x,y:e.y});return s.appendChild(t),t});o.appendChild(s),e.insertBefore(o,e.firstChild),e.setAttribute(`clip-path`,`url(#${a})`);let cancelTween=()=>{},finish=()=>{E.delete(e),e.removeAttribute(`clip-path`),o.remove(),i.signal?.removeEventListener(`abort`,finish),cancelTween()};return E.set(e,finish),i.signal?.addEventListener(`abort`,finish,{once:!0}),cancelTween=startTween({count:t.length,duration:r.duration,easing:resolveEasing(r.easing),onComplete:finish,onFrame:e=>{for(let[n,r]of c.entries()){let a=t[n],o=Math.max(0,Math.min(1,e(n)));if(i.axis===`y`){let e=a.anchor+(a.y-a.anchor)*o,t=a.anchor+(a.y+a.height-a.anchor)*o;setAttributes(r,{height:Math.max(0,t-e),width:a.width,y:e})}else{let e=a.anchor+(a.x-a.anchor)*o,t=a.anchor+(a.x+a.width-a.anchor)*o;setAttributes(r,{height:a.height,width:Math.max(0,t-e),x:e})}}},signal:i.signal,stagger:i.stagger}),finish}var D=20,O=400,k=new WeakMap;function barsOf(e){return[...e.children].filter(e=>e.classList.contains(`prism-bar`))}function renderBars(e,t,n,r,i,a){k.get(e)?.(),k.delete(e);let o=barsOf(e);for(let e of o.slice(t.length))e.remove();let s=n.bandwidth(),c=a.stacked?s:s/a.seriesCount,l=Math.max(0,c-1),u=a.stacked?0:c*a.seriesIndex,d=a.horizontal??!1,f=o.length===0,p=[],m=[],h=[],g=resolveMotion(a.transition,{defaultStagger:f?0:D}),_=g.duration>0,v=Math.min(g.stagger,O/Math.max(1,t.length));for(let s=0;s<t.length;s++){let c=t[s],g=n.map(c.key)+u,v=a.baselineYs?a.baselineYs[s]:i,y=r.map(c.y),b=o[s],x=!b;if(b||(b=createSvgElement(`rect`,{class:`prism-bar`}),e.appendChild(b)),b.style.display=c.present?``:`none`,setAttributes(b,{opacity:c.opacity,stroke:c.dash?a.color:void 0,"stroke-dasharray":c.dash,"stroke-width":c.dash?1:void 0}),d){let e=Math.max(0,Math.abs(v-y)),t=Math.min(y,v);setAttributes(b,{fill:a.color,height:l,rx:a.borderRadius,ry:a.borderRadius,y:g}),f?(setAttributes(b,{width:e,x:t}),_&&h.push({anchor:v,height:l,width:e,x:t,y:g})):_?x?(setAttributes(b,{width:0,x:v}),p.push({attrs:{width:{from:0,to:e},x:{from:v,to:t}},el:b})):m.push({attrs:{width:{from:Number(b.getAttribute(`width`)??e),to:e},x:{from:Number(b.getAttribute(`x`)??t),to:t}},el:b}):setAttributes(b,{width:e,x:t})}else{let e=Math.max(0,Math.abs(v-y)),t=Math.min(y,v);setAttributes(b,{fill:a.color,rx:a.borderRadius,ry:a.borderRadius,width:l,x:g}),f?(setAttributes(b,{height:e,y:t}),_&&h.push({anchor:v,height:e,width:l,x:g,y:t})):_?x?(setAttributes(b,{height:0,y:v}),p.push({attrs:{height:{from:0,to:e},y:{from:v,to:t}},el:b})):m.push({attrs:{height:{from:Number(b.getAttribute(`height`)??e),to:e},y:{from:Number(b.getAttribute(`y`)??t),to:t}},el:b}):setAttributes(b,{height:e,y:t})}}if(_){let t=[];f&&h.length>0&&t.push(playGrowReveal(e,h,()=>{},g,{axis:d?`x`:`y`,signal:a.disposalSignal,stagger:v})),p.length>0&&t.push(animate(p,{...g,stagger:v},void 0,a.disposalSignal)),m.length>0&&t.push(animate(m,{...g,stagger:0},void 0,a.disposalSignal)),k.set(e,()=>{for(let e of t)e()})}}function variantFlags(e){return{horizontal:e===`grouped-horizontal`||e===`stacked-horizontal`,stacked:e===`stacked`||e===`stacked-horizontal`}}function createBarChart(e,t){let n=t.series,r=null;return createChartScaffold(e,t,(e,i)=>{let{groups:a,legend:o,tooltip:s}=e;o?.update(n.map((e,t)=>({color:seriesColor(t,e.color),name:e.name})));let c=e.dimensions,l=chartArea(c.width,c.height,c.margin),u=n.map(e=>e.data),d=normalizeCartesianSeries(n,u),f=d.domain,p=d.series.map(({byKey:e})=>f.map(t=>e.get(t))),categoryAxis=e=>({...e,tickFormat:t=>{let n=String(t),r=d.labels.get(n)??t;return e.tickFormat?e.tickFormat(r):String(r)}});if(f.length===0){clearCartesianDom(a,o,s),r?.remove(),r=null;return}let{horizontal:m,stacked:h}=variantFlags(t.variant??`grouped`),g=t.xAxis===!1?!1:m?{grid:!0,...t.xAxis}:t.xAxis??{},_=t.yAxis===!1?!1:m?t.yAxis??{}:{grid:!0,...t.yAxis},v,y;if(h){p.some(e=>e.some(e=>(e?.value??0)<0));let e=f.map((e,t)=>p.reduce((e,n)=>e+Math.max(0,n[t]?.value??0),0));v=Math.max(...e),y=0}else{let e=p.flatMap(e=>e.flatMap(e=>e?[e.value]:[]));v=Math.max(...e),y=Math.min(0,...e)}let b=bandScale(m?{domain:f,range:[0,l.height]}:{domain:f,range:[0,l.width]}),x=linearScale(m?{domain:[y,v],range:[0,l.width]}:{domain:[y,v],range:[l.height,0]}),S=[],C=Object.create(null);for(let e of f)C[e]=0;let w={bandCenter:e=>b.map(e)+b.bandwidth()/2,bandwidth:b.bandwidth(),baselinePx:x.map(0),horizontal:m,stacked:h,stackedTops:S,valueScale:x};if(m){if(g&&g.grid&&renderGrid(a.grid,x,g.grid,l.height,`vertical`,resolveTicks(x,g,resolveTickCount(g,l.width,`bottom`))),_!==!1){let e=categoryAxis(_);positionAxis(a.yAxis,e.position??`left`,l.width,l.height),renderAxis(a.yAxis,b,e,l.height,`left`)}g&&(positionAxis(a.xAxis,g.position??`bottom`,l.width,l.height),renderAxis(a.xAxis,x,g,l.width,`bottom`))}else{if(_&&_.grid&&renderGrid(a.grid,x,_.grid,l.width,`horizontal`,resolveTicks(x,_,resolveTickCount(_,l.height,`left`))),g!==!1){let e=categoryAxis(g);positionAxis(a.xAxis,e.position??`bottom`,l.width,l.height),renderAxis(a.xAxis,b,e,l.width,`bottom`)}_&&(positionAxis(a.yAxis,_.position??`left`,l.width,l.height),renderAxis(a.yAxis,x,_,l.height,`left`))}let T=h?0:Number.parseFloat(getComputedStyle(e.svg).getPropertyValue(`--prism-bar-radius`))||0;for(;a.series.children.length>n.length;){let e=a.series.lastElementChild;e&&a.series.removeChild(e)}for(let r=0;r<n.length;r++){let o=n[r],s=a.series.children[r];s||(s=createSvgElement(`g`,{class:`prism-bar-series`}),a.series.appendChild(s)),s.setAttribute(`data-series-id`,seriesDomId(o,r));let c=f.map((e,t)=>{let n=p[r]?.[t];if(h){let t=C[e]??0,r=t+Math.max(0,n?.value??0);return C[e]=r,{base:t,dash:n?.dash,key:e,opacity:n?.opacity,present:n!==void 0,y:r}}return{base:0,dash:n?.dash,key:e,opacity:n?.opacity,present:n!==void 0,y:n?.value??0}});S[r]=c.map(e=>e.y);let l=h?c.map(e=>x.map(e.base)):void 0;renderBars(s,c,b,x,w.baselinePx,{baselineYs:l,borderRadius:o.borderRadius??T,color:seriesColor(r,o.color),disposalSignal:e.disposalSignal,horizontal:m,seriesCount:n.length,seriesIndex:r,stacked:h,transition:i!==`resize`&&t.transition})}s?.hide(),a.series.classList.toggle(`prism-bars-stacked`,h),(!r||!e.chartArea.contains(r))&&(r=createSvgElement(`rect`,{"aria-hidden":`true`,class:`prism-bar-band`,"pointer-events":`none`}),e.chartArea.insertBefore(r,a.series)),r.style.display=`none`;let E=n.map((e,t)=>seriesColor(t,e.color)),labelOf=e=>String(d.labels.get(f[e])??f[e]),D=typeof t.tooltip==`object`?t.tooltip:void 0,keyOf=e=>d.labels.get(f[e])??f[e],titleOf=e=>D?.titleFormat?D.titleFormat(keyOf(e)):labelOf(e),O=D?.valueFormat??String,k=-1,valuesAt=e=>n.map((t,n)=>({datum:p[n]?.[e],series:t})),eventAt=(e,t,r)=>{let i=valuesAt(e),a=i[t]?.datum?t:i.findIndex(e=>e.datum),o=i[a]?.datum;return o?{datum:o,originalEvent:r,series:n[a],values:i}:null},setActive=t=>{k=t,a.series.classList.toggle(`prism-bars-focused`,t>=0);for(let e of a.series.children)for(let[n,r]of[...e.children].entries())r.classList.toggle(`prism-bar--active`,n===t);if(!r||(r.style.display=t<0?`none`:``,t<0))return;let n=w.bandCenter(f[t])-b.bandwidth()/2-b.gap()/2,i=b.bandwidth()+b.gap(),o=chartArea(e.dimensions.width,e.dimensions.height,e.dimensions.margin);setAttributes(r,m?{height:i,width:o.width,x:0,y:n}:{height:o.height,width:i,x:n,y:0})},activate=(n,r,i)=>{let a=eventAt(n,r,i);if(!a)return;setActive(n);let o=a.values??[],c=describeValues(titleOf(n),o,O);if(s){let t=o.map((e,t)=>h?S[t]?.[n]??0:Math.max(0,e.datum?.value??0)),r=x.map(Math.max(...t)),i=w.bandCenter(f[n]),{margin:l}=e.dimensions,u=o.flatMap((e,t)=>e.datum?[{color:E[t],name:e.series.name,value:O(e.datum.value,e.datum,e.series)}]:[]);s.show((m?r:i)+l.left,(m?i:r)+l.top,a.datum,a.series,comparisonContent(e.svg.ownerDocument,titleOf(n),u,c))}else e.announcer.announce(c);t.onHover?.(a)},deactivate=()=>{setActive(-1),s?.hide(),e.announcer.clear(),t.onHover?.(null)},hit=t=>{let r=e.dimensions,i=getMousePosition(e.svg,t,r.margin.left,r.margin.top),a=chartArea(r.width,r.height,r.margin);if(i.x<0||i.x>a.width||i.y<0||i.y>a.height)return null;let o=findCatIdx(m?i.y:i.x,f,w);return o===-1?null:{catIdx:o,seriesIdx:findSeriesIdx(i,o,f,w,n.length)}},onMouseMove=e=>{let t=hit(e);t?activate(t.catIdx,t.seriesIdx,e):k>=0&&deactivate()},onClick=e=>{let n=t.onClick&&hit(e),r=n&&eventAt(n.catIdx,n.seriesIdx,e);r&&t.onClick?.(r)},onKeyDown=e=>{let n=f.length-1,r=k<0?n:Math.max(0,k-1),i=k<0?0:Math.min(n,k+1),a={ArrowDown:i,ArrowLeft:r,ArrowRight:i,ArrowUp:r,End:n,Home:0};if(e.key in a)e.preventDefault(),activate(a[e.key],0,e);else if((e.key===`Enter`||e.key===` `)&&k>=0&&t.onClick){e.preventDefault();let n=eventAt(k,0,e);n&&t.onClick(n)}else e.key===`Escape`&&deactivate()};return{onClick,onKeyDown,onMouseLeave:deactivate,onMouseMove}},e=>{n=e})}var A=new WeakMap,j=new WeakMap;function buildPath(e,t){return t===`monotone`?monotonePath(e):t===`step`?stepPath(e):linePath(e)}function renderLine(e,t,n){let r=hasStyledRuns(n.marks),i=n.marks??[],a=resolveMotion(n.transition),o=a.duration,s=resolveEasing(a.easing),c=null,l=[],u=[];if(r){l=computeStyleRuns(i,t.length);let r=[...e.querySelectorAll(`.prism-line-path`)];for(let e of r.slice(l.length))e.remove();u=l.map((t,n)=>{let i=r[n];if(i)return i;let a=createSvgElement(`path`,{class:`prism-line-path`,fill:`none`});return e.appendChild(a),a});for(let[e,t]of l.entries())setAttributes(u[e],{opacity:t.opacity,stroke:n.color,"stroke-dasharray":t.dash,"stroke-width":n.strokeWidth??2}),u[e].style.strokeWidth=n.strokeWidth===void 0?``:String(n.strokeWidth)}else{let t=[...e.querySelectorAll(`.prism-line-path`)];c=t[0]??null;for(let e of t.slice(1))e.remove();c||(c=createSvgElement(`path`,{class:`prism-line-path`,fill:`none`}),e.appendChild(c)),setAttributes(c,{opacity:void 0,stroke:n.color,"stroke-dasharray":void 0,"stroke-width":n.strokeWidth??2}),c.style.strokeWidth=n.strokeWidth===void 0?``:String(n.strokeWidth)}let draw=e=>{if(r)for(let[t,r]of l.entries())setAttributes(u[t],{d:buildPath(e.slice(r.start,r.end+1),n.curve)});else setAttributes(c,{d:buildPath(e,n.curve)})},d=e.querySelector(`.prism-line-dots`);if(n.showPoints?d||(d=createSvgElement(`g`,{class:`prism-line-dots`}),e.appendChild(d)):d&&=(d.remove(),null),o===0){if(A.get(e)?.(),cancelReveal(e),draw(t),j.set(e,t),d){for(;d.children.length>t.length;)d.removeChild(d.lastChild);for(let e=0;e<t.length;e++){let r=d.children[e];r||(r=createSvgElement(`circle`,{class:`prism-line-dot`}),d.appendChild(r)),setAttributes(r,{cx:t[e].x,cy:t[e].y,fill:n.color,opacity:i[e]?.opacity,r:n.pointRadius})}}return}A.get(e)?.(),cancelReveal(e);let f=!j.has(e);if(d){for(;d.children.length>t.length;)d.removeChild(d.lastChild);for(let e=d.children.length;e<t.length;e++){let t=createSvgElement(`circle`,{class:`prism-line-dot`});setAttributes(t,{fill:n.color,opacity:i[e]?.opacity,r:n.pointRadius}),d.appendChild(t)}for(let e=0;e<d.children.length;e++)setAttributes(d.children[e],{opacity:i[e]?.opacity})}if(f){if(draw(t),j.set(e,t),d)for(let[e,n]of t.entries()){let t=d.children[e];t&&setAttributes(t,{cx:n.x,cy:n.y})}if(t.length>1){let i=c??u[0],a=n.strokeWidth??(Number.parseFloat(getComputedStyle(i).strokeWidth)||2),o=r?l.map((e,n)=>({d:u[n].getAttribute(`d`),end:e.end/(t.length-1),start:e.start/(t.length-1)})):[{d:c.getAttribute(`d`),end:1,start:0}];playTraceReveal(e,n.bounds,o,Math.max(a,n.showPoints?n.pointRadius*2:0)+2,resolveMotion(n.transition,{defaultDuration:420}),n.disposalSignal)}return}let p=[],m=j.get(e)??t;for(let[e,n]of t.entries())p.push(m[e]??m.at(-1)??n);let paintFrame=n=>{let r=t.map((e,t)=>{let r=p[t]??e;return{x:tweenNumber(r.x,e.x,n),y:tweenNumber(r.y,e.y,n)}});if(j.set(e,r),draw(r),d)for(let e=0;e<t.length;e++){let t=d.children[e];t&&setAttributes(t,{cx:r[e].x,cy:r[e].y})}};paintFrame(0),A.set(e,startTween({count:1,duration:o,easing:s,onComplete:()=>{A.delete(e),j.set(e,t)},onFrame:e=>paintFrame(e(0)),signal:n.disposalSignal}))}function computePoints(e,t,n){return e.some(e=>e.key==null)||e.some(e=>typeof e.key==`string`),e.map(e=>({x:t.map(e.key),y:n.map(e.value)}))}function createLineChart(e,t){let n=null,r=null,i=null,a=t.series;return createChartScaffold(e,t,(e,o)=>{let{groups:s,legend:c,tooltip:l}=e;c?.update(a.map((e,t)=>({color:seriesColor(t,e.color),name:e.name})));let u=e.dimensions,d=a.some(e=>e.yAxis===`right`),f=a.some(e=>e.yAxis!==`right`&&e.data.length>0),p={...resolveMargin(t.margin),right:t.margin?.right??(d?t.rightYAxis?.label?72:50:resolveMargin(t.margin).right)},m=chartArea(u.width,u.height,p),h=a.map(e=>e.data),g=h.flat().map(e=>e.key),_=a.filter(e=>e.yAxis!==`right`).flatMap(e=>e.data.map(e=>e.value)),v=a.filter(e=>e.yAxis===`right`).flatMap(e=>e.data.map(e=>e.value));if(g.length===0){clearCartesianDom(s,c,l,n),r?.replaceChildren(),i?.replaceChildren();return}t.crosshair&&!n&&(n=createCrosshair(e.chartArea,t.crosshair));let y=buildXScale(g,m.width),b=buildYScale(_,m.height),x=buildYScale(v,m.height),S=t.xAxis===!1?!1:t.xAxis??{},C=t.yAxis!==!1&&{grid:!0,...t.yAxis};if(C&&C.grid&&(!d||f)?renderGrid(s.grid,b,C.grid,m.width,`horizontal`,resolveTicks(b,C,resolveTickCount(C,m.height,`left`))):s.grid.replaceChildren(),S&&S.grid&&renderGrid(s.grid,y,S.grid,m.height,`vertical`,resolveTicks(y,S,resolveTickCount(S,m.width,`bottom`))),S?(positionAxis(s.xAxis,S.position??`bottom`,m.width,m.height),renderAxis(s.xAxis,y,S,m.width,`bottom`)):s.xAxis.replaceChildren(),C&&(!d||f)){let e={...C,position:d?`left`:C.position??`left`};positionAxis(s.yAxis,e.position,m.width,m.height),renderAxis(s.yAxis,b,e,m.height,`left`)}else s.yAxis.replaceChildren();if(d){i||(i=createSvgElement(`g`,{class:`prism-y-axis-right`}),e.chartArea.appendChild(i));let n={...t.rightYAxis,position:`right`};positionAxis(i,`right`,m.width,m.height),renderAxis(i,x,n,m.height,`right`)}else i?.replaceChildren();for(;s.series.children.length>a.length;)s.series.removeChild(s.series.lastChild);let w=[];for(let n=0;n<a.length;n++){let r=a[n],i=s.series.children[n];i||(i=createSvgElement(`g`,{class:`prism-line-series`}),s.series.appendChild(i)),i.setAttribute(`data-series-id`,seriesDomId(r,n));let c=r.yAxis===`right`?x:b,l=computePoints(h[n],y,c);w.push(l),renderLine(i,l,{bounds:{height:m.height,width:m.width},color:seriesColor(n,r.color),curve:r.curve??`linear`,disposalSignal:e.disposalSignal,marks:r.data,pointRadius:r.pointRadius??3,showPoints:r.showPoints??!1,strokeWidth:r.strokeWidth,transition:o!==`resize`&&t.transition})}return l?.hide(),r=ensureMarkerGroup(e.chartArea,r),createSeriesInteraction({announcer:e.announcer,colors:()=>a.map((e,t)=>seriesColor(t,e.color)),crosshair:n,dims:()=>e.dimensions,getData:()=>h,getPoints:()=>w,getSeriesList:()=>a,margin:p,markers:r,onClick:t.onClick,onHover:t.onHover,seriesGroup:s.series,svg:e.svg,tooltip:l,tooltipFormat:typeof t.tooltip==`object`?t.tooltip:void 0})},e=>{a=e})}function polarX(e,t,n){return e+t*Math.sin(n)}function polarY(e,t,n){return e-t*Math.cos(n)}function polarPoint(e,t,n,r){return`${polarX(e,n,r)},${polarY(t,n,r)}`}function computeArcs(e,t,n,r,i,a,o,s,c,l,u=!1){let d=e.reduce((e,t)=>e+Math.max(0,t.value),0);if(d===0)return[];let f=o-a,p=r>0?Math.asin(Math.min(1,s/2/r)):0,m=a,h=e.length;return e.map((e,a)=>{let o=Math.max(0,e.value)/d*f,s=m,g=m+o;m+=o;let _=Math.min(p,o/2);return{capEnd:u&&a===h-1,capStart:u&&a===0,centerX:t,centerY:n,color:e.color??l(a),cornerRadius:c,endAngle:g,index:a,innerRadius:i,outerRadius:r,padAngle:_,slice:e,startAngle:s}})}function arcPath(e){let{capEnd:t,capStart:n,centerX:r,centerY:i,cornerRadius:a,endAngle:o,innerRadius:s,outerRadius:c,padAngle:l,startAngle:u}=e,d=o-u;if(d<=0)return``;if(d>=2*Math.PI-1e-6){let e=u+Math.PI;return s<=0?`M${polarPoint(r,i,c,u)}A${c},${c},0,1,1,${polarPoint(r,i,c,e)}A${c},${c},0,1,1,${polarPoint(r,i,c,u)}Z`:[`M${polarPoint(r,i,c,u)}`,`A${c},${c},0,1,1,${polarPoint(r,i,c,e)}`,`A${c},${c},0,1,1,${polarPoint(r,i,c,u)}`,`M${polarPoint(r,i,s,u)}`,`A${s},${s},0,1,0,${polarPoint(r,i,s,e)}`,`A${s},${s},0,1,0,${polarPoint(r,i,s,u)}`,`Z`].join(``)}let f=n?u:u+l,p=t?o:o-l;if(p<=f)return``;let m=p-f;if(a<=0){let e=+(m>Math.PI);return s<=0?`M${r},${i}L${polarPoint(r,i,c,f)}A${c},${c},0,${e},1,${polarPoint(r,i,c,p)}Z`:[`M${polarPoint(r,i,c,f)}`,`A${c},${c},0,${e},1,${polarPoint(r,i,c,p)}`,`L${polarPoint(r,i,s,p)}`,`A${s},${s},0,${e},0,${polarPoint(r,i,s,f)}`,`Z`].join(``)}let h=Math.min(a/c,m/2),g=Math.min(a/s,m/2),_=Math.min(a,(c-s)/2),v=(c-s)/2,y=f+(n?0:h),b=p-(t?0:h),x=f+(n?0:g),S=p-(t?0:g),C=+(b-y>Math.PI),w=+(S-x>Math.PI),T=polarX(r,c,f),E=polarY(i,c,f),D=polarX(r,c,p),O=polarY(i,c,p),k=polarX(r,s,f),A=polarY(i,s,f),j=polarX(r,s,p),M=polarY(i,s,p),N=_/(c-s),P=`${T+(k-T)*N},${E+(A-E)*N}`,F=`${D+(j-D)*N},${O+(M-O)*N}`,I=`${k+(T-k)*N},${A+(E-A)*N}`,L=`${j+(D-j)*N},${M+(O-M)*N}`,R=[];return n?R.push(`M${polarPoint(r,i,c,f)}`):(R.push(`M${P}`),R.push(`Q${T},${E},${polarPoint(r,i,c,y)}`)),R.push(`A${c},${c},0,${C},1,${polarPoint(r,i,c,b)}`),t?R.push(`A${v},${v},0,0,1,${polarPoint(r,i,s,p)}`):(R.push(`Q${D},${O},${F}`),R.push(`L${L}`),R.push(`Q${j},${M},${polarPoint(r,i,s,S)}`)),R.push(`A${s},${s},0,${w},0,${polarPoint(r,i,s,x)}`),n?R.push(`A${v},${v},0,0,0,${polarPoint(r,i,c,f)}`):R.push(`Q${k},${A},${I}`),R.push(`Z`),R.join(``)}function arcCentroid(e){let t=(e.startAngle+e.endAngle)/2,n=(e.outerRadius+e.innerRadius)/2;return{x:e.centerX+n*Math.sin(t),y:e.centerY-n*Math.cos(t)}}var M=2*Math.PI,N=12;function labelFits(e,t){let n=e.outerRadius-e.innerRadius,r=(e.outerRadius+e.innerRadius)/2,i=(e.endAngle-e.startAngle-2*e.padAngle)*r;return n>=N*1.4&&i>=estimateTextWidth(t,N)+8}var P=-Math.PI/2,F=Math.PI/2;function semiAngles(e){return e===`semi`?{end:F,start:P}:{end:M,start:0}}function createPieChart(e,t){let n=t.variant??`pie`,r=t.padPixels??(n===`pie`?0:8),i=t.cornerRadius??(n===`pie`?0:8),a=t.data,o=createSvgElement(`circle`,{class:`prism-pie-bg`,"pointer-events":`none`}),s=createSvgElement(`g`,{class:`prism-pie-slices`,"shape-rendering":`geometricPrecision`}),c=createSvgElement(`g`,{class:`prism-pie-labels`,"pointer-events":`none`}),l=[],u=[],d=null;function renderLabels(e){c.replaceChildren();for(let t=0;t<l.length;t++){let n=l[t],r=e[t];if(!r?.label||!labelFits(n,r.label))continue;let{x:i,y:a}=arcCentroid(n),o=createSvgElement(`text`,{class:`prism-pie-label`});setAttributes(o,{"dominant-baseline":`middle`,fill:`var(--prism-pie-label-color, #fff)`,"font-family":`var(--prism-font-family, system-ui)`,"font-size":`var(--prism-pie-label-size, 12px)`,"text-anchor":`middle`,x:i,y:a}),o.textContent=r.label,c.appendChild(o)}}return createRadialScaffold(e,{a11y:t.a11y,legend:t.legend,tooltip:t.tooltip},f=>{let{legend:p,svg:m,tooltip:h}=f,g=a.some(e=>e.value>0);p?.update(g?a.map((e,t)=>({color:e.color??seriesColor(t),name:e.label??``})):[]),m.contains(o)||(m.appendChild(o),m.appendChild(s),m.appendChild(c));let{height:_,width:v}=f.dimensions,y=n===`semi`,b=v/2,x=y?_*.85:_/2,S=y?Math.min(b,x)-8:Math.min(v,_)/2-8,C=n===`pie`?0:Math.round(S*.55),w=t.innerRadius===void 0?C:t.innerRadius,T=Math.max(w+1,S),E=a,{end:D,start:O}=semiAngles(n);for(l=computeArcs(E,b,x,T,w,O,D,r,i,e=>seriesColor(e),!1),setAttributes(o,{cx:b,cy:x,r:w>0?w:0}),o.setAttribute(`style`,`fill:var(--prism-bg,#fff)`);s.children.length>l.length;)s.removeChild(s.lastChild);c.replaceChildren();let k=resolveMotion(t.transition),A=k.duration,j=resolveEasing(k.easing);for(let e=0;e<l.length;e++){let n=l[e],r=s.children[e];r||(r=createSvgElement(`path`,{class:`prism-pie-slice`}),s.appendChild(r)),r.setAttribute(`fill`,n.color),r.setAttribute(`stroke`,`none`),r.style.cursor=t.onClick||t.onHover?`pointer`:``}d?.();let M=u.length===0,N=u;d=startTween({count:1,duration:A,easing:j,onComplete:()=>renderLabels(E),onFrame:e=>{let t=e(0);if(M){let e=tweenNumber(O,D,t);u=l.map((t,n)=>{let r=s.children[n];if(!r)return t;if(e<=t.startAngle)return setAttributes(r,{d:``}),{...t,endAngle:t.startAngle};let i=Math.min(t.endAngle,e);return setAttributes(r,{d:arcPath({...t,endAngle:i})}),{...t,endAngle:i}});return}u=l.map((e,n)=>{let r=s.children[n],i=N.at(-1),a=N[n]??{...e,endAngle:i?.endAngle??O,startAngle:i?.endAngle??O},o={...e,endAngle:tweenNumber(a.endAngle,e.endAngle,t),innerRadius:tweenNumber(a.innerRadius,e.innerRadius,t),outerRadius:tweenNumber(a.outerRadius,e.outerRadius,t),padAngle:tweenNumber(a.padAngle,e.padAngle,t),startAngle:tweenNumber(a.startAngle,e.startAngle,t)};return r&&setAttributes(r,{d:o.endAngle-o.startAngle<=1e-6?``:arcPath(o)}),o})},signal:f.disposalSignal}),h?.hide();let P=l.reduce((e,t)=>e+Math.max(0,t.slice.value),0),F=-1,describe=e=>{let t=P>0?Math.round(Math.max(0,e.slice.value)/P*1e3)/10:0;return`${e.slice.label??`Slice ${e.index+1}`}: ${e.slice.value} (${t}%)`},setActive=e=>{F=e,s.classList.toggle(`prism-pie-focused`,e>=0);for(let[t,n]of[...s.children].entries())n.classList.toggle(`prism-pie-slice--active`,t===e)},activate=(n,r)=>{let i=l[n];if(!i)return;setActive(n),t.onHover?.({index:n,originalEvent:r,slice:i.slice});let a=describe(i);if(!h){f.announcer.announce(a);return}let{x:o,y:s}=arcCentroid(i),c=m.getBoundingClientRect(),u=e.getBoundingClientRect();h.show(o+(c.left-u.left),s+(c.top-u.top),{key:n,value:i.slice.value},{color:i.color,data:[],name:i.slice.label??``},a)},deactivate=()=>{setActive(-1),h?.hide(),f.announcer.clear(),t.onHover?.(null)},hitAt=e=>{let t=m.getBoundingClientRect();return hitTestArc(l,e.clientX-t.left,e.clientY-t.top,n)},onMouseMove=e=>{let t=hitAt(e);t>=0?t!==F&&activate(t,e):F>=0&&deactivate()},onClick=e=>{if(!t.onClick)return;let n=hitAt(e);n>=0&&t.onClick({index:n,originalEvent:e,slice:l[n].slice})},onKeyDown=e=>{let n=l.length;if(n===0)return;let r={ArrowDown:1,ArrowLeft:-1,ArrowRight:1,ArrowUp:-1};e.key in r?(e.preventDefault(),activate(F<0?r[e.key]>0?0:n-1:(F+r[e.key]+n)%n,e)):e.key===`Home`||e.key===`End`?(e.preventDefault(),activate(e.key===`Home`?0:n-1,e)):(e.key===`Enter`||e.key===` `)&&F>=0&&t.onClick?(e.preventDefault(),t.onClick({index:F,originalEvent:e,slice:l[F].slice})):e.key===`Escape`&&deactivate()};return{onClick,onKeyDown,onMouseLeave:deactivate,onMouseMove}},e=>{a=e})}function hitTestArc(e,t,n,r){for(let i=0;i<e.length;i++){let a=e[i],o=t-a.centerX,s=n-a.centerY,c=Math.sqrt(o*o+s*s);if(c<a.outerRadius&&c>=a.innerRadius){let e=Math.atan2(o,-s);if(r===`semi`){if(e>=a.startAngle-1e-9&&e<=a.endAngle+1e-9)return i}else{let t=e<0?e+M:e;if(t>=a.startAngle-1e-9&&t<=a.endAngle+1e-9)return i}}}return-1}var I=2*Math.PI;function toRadians(e){return e*Math.PI/180}function axisAngles(e,t=0){return Array.from({length:e},(n,r)=>t+r*I/e)}function resolveAxisDomains(e,t,n){let r=n;if(!r){let e=t.flatMap(e=>e.data.map(e=>e.value)).filter(Number.isFinite),n=Math.min(0,...e),i=e.length?Math.max(...e):1;r=linearScale({domain:[n,i>n?i:n+1],range:[0,1]}).domain}return e.map(e=>[e.min??r[0],e.max??r[1]])}function normalize(e,[t,n]){return n===t?0:Math.max(0,Math.min(1,(e-t)/(n-t)))}function radarPoints(e,t,n,r,i){return e.map((e,a)=>({x:polarX(t,r*e,i[a]),y:polarY(n,r*e,i[a])}))}function closedPath(e,t=`linear`){let n=e.length;if(n===0)return``;let[r]=e;if(t===`linear`||n<3)return`M${r.x},${r.y}${e.slice(1).map(e=>`L${e.x},${e.y}`).join(``)}Z`;let i=`M${r.x},${r.y}`;for(let t=0;t<n;t++){let r=e[(t-1+n)%n],a=e[t],o=e[(t+1)%n],s=e[(t+2)%n];i+=`C${a.x+(o.x-r.x)/6},${a.y+(o.y-r.y)/6} ${o.x-(s.x-a.x)/6},${o.y-(s.y-a.y)/6} ${o.x},${o.y}`}return`${i}Z`}function ringPath(e,t,n,r,i){return r<=0?``:e===`circle`?`M${t},${n-r}A${r},${r} 0 1 1 ${t},${n+r}A${r},${r} 0 1 1 ${t},${n-r}Z`:closedPath(radarPoints(i.map(()=>1),t,n,r,i))}function labelPlacement(e){let t=Math.sin(e),n=Math.cos(e);return{anchor:Math.abs(t)<.1?`middle`:t>0?`start`:`end`,baseline:n>.9?`auto`:n<-.9?`hanging`:`middle`}}function fitRadius(e,t,n,r,i,a){let o=0;n.forEach((e,t)=>{labelPlacement(r[t]).anchor!==`middle`&&(o=Math.max(o,estimateTextWidth(e,i)))});let s=i*1.3;return Math.max(8,Math.min(e/2-a-o,t/2-a-s))}function nearestAxis(e,t,n,r=0){if(n===0)return-1;let i=I/n,a=((Math.atan2(e,-t)-r)%I+I)%I;return Math.round(a/i)%n}var L=11,R=12,z=10,B={ArrowDown:1,ArrowLeft:-1,ArrowRight:1,ArrowUp:-1};function resolveGrid(e){return e===!1?null:{bands:!0,labels:!1,levels:4,shape:`polygon`,...typeof e==`object`?e:{}}}function createRadarChart(e,t){let{axes:n}=t,r=t.curve??`linear`,i=t.fill??`solid`,a=t.showPoints??!0,o=resolveGrid(t.grid),s=toRadians(t.startAngle??0),c=axisAngles(n.length,s),l=R+(t.showValues?z:0),u=uniqueId(`prism-radar`),d=t.series,f=createSvgElement(`g`,{class:`prism-radar`}),p=createSvgElement(`defs`),m=createSvgElement(`g`,{"aria-hidden":`true`,class:`prism-radar-grid`}),h=createSvgElement(`g`,{class:`prism-radar-series-group`}),g=createSvgElement(`g`,{"aria-hidden":`true`,class:`prism-radar-labels`});f.append(p,m,h,g);let _=[],v=null,y=-1,b={cx:0,cy:0,radius:0},datumAt=(e,t)=>e.data.find(e=>e.key===n[t].key),valuesAt=e=>d.map(t=>({datum:datumAt(t,e),series:t})),formatValue=(e,t)=>n[e].format?.(t)??String(t),describe=e=>describeValues(n[e].label,valuesAt(e),t=>formatValue(e,t));function draw(e){let{cx:t,cy:n,radius:i}=b;e.forEach((e,a)=>{let o=h.children[a];if(!o)return;let s=radarPoints(e,t,n,i,c);o.querySelector(`.prism-radar-area`)?.setAttribute(`d`,closedPath(s,r)),o.querySelectorAll(`.prism-radar-point`).forEach((e,t)=>{setAttributes(e,{cx:s[t].x,cy:s[t].y})}),o.querySelectorAll(`.prism-radar-value`).forEach((r,a)=>{let o=i*e[a]+z;setAttributes(r,{x:polarX(t,o,c[a]),y:polarY(n,o,c[a])})})})}function renderGrid(e){if(m.replaceChildren(),!o)return;let{cx:t,cy:n,radius:r}=b,i=Math.max(1,Math.round(o.levels)),a=Array.from({length:i},(e,a)=>ringPath(o.shape,t,n,r*(a+1)/i,c));if(o.bands)for(let e=i-1;e>=0;e-=2)m.appendChild(createSvgElement(`path`,{class:`prism-radar-band`,d:`${a[e]}${a[e-1]??``}`,"fill-rule":`evenodd`}));for(let e of a)m.appendChild(createSvgElement(`path`,{class:`prism-radar-ring`,d:e,fill:`none`}));c.forEach((e,i)=>{m.appendChild(createSvgElement(`line`,{class:`prism-radar-spoke`,"data-axis":i,x1:t,x2:polarX(t,r,e),y1:n,y2:polarY(n,r,e)}))});let[s,l]=e[0],u=e.every(([e,t])=>e===s&&t===l);if(!o.labels||!u)return;let d=c[0]+Math.PI/c.length;for(let e=1;e<=i;e++){let a=r*e/i,o=createSvgElement(`text`,{class:`prism-radar-level`,"dominant-baseline":`middle`,"text-anchor":`middle`,x:polarX(t,a,d),y:polarY(n,a,d)});o.textContent=formatValue(0,Math.round((s+(l-s)*e/i)*100)/100),m.appendChild(o)}}function renderLabels(){g.replaceChildren();let{cx:e,cy:t,radius:r}=b;n.forEach((n,i)=>{let{anchor:a,baseline:o}=labelPlacement(c[i]),s=createSvgElement(`text`,{class:`prism-radar-axis-label`,"dominant-baseline":o,"text-anchor":a,x:polarX(e,r+l,c[i]),y:polarY(t,r+l,c[i])});s.textContent=n.label,g.appendChild(s)})}function renderSeries(){let{cx:e,cy:r,radius:o}=b;for(p.replaceChildren();h.children.length>d.length;)h.lastChild?.remove();d.forEach((s,l)=>{let d=s.color??seriesColor(l),f=h.children[l];f||(f=createSvgElement(`g`,{class:`prism-radar-series`}),h.appendChild(f)),f.setAttribute(`data-series-id`,seriesDomId(s,l)),f.replaceChildren();let m=createSvgElement(`path`,{class:`prism-radar-area prism-radar-area--${i}`,stroke:d,"stroke-linejoin":`round`,"stroke-width":2});if(i===`gradient`){let t=`${u}-fill-${l}`,n=createSvgElement(`radialGradient`,{cx:e,cy:r,gradientUnits:`userSpaceOnUse`,id:t,r:o});for(let[e,t]of[[0,.08],[1,.55]])n.appendChild(createSvgElement(`stop`,{offset:e,"stop-color":d,"stop-opacity":t,style:`stop-color:${d}`}));p.appendChild(n),setAttributes(m,{fill:`url(#${t})`})}else setAttributes(m,{fill:i===`none`?`none`:d,"fill-opacity":.25});f.appendChild(m),a&&n.forEach((e,t)=>{let n=!Number.isFinite(datumAt(s,t)?.value);f.appendChild(createSvgElement(`circle`,{class:`prism-radar-point${n?` prism-radar-point--missing`:``}`,"data-axis":t,fill:n?`none`:d,r:3,stroke:d}))}),t.showValues&&n.forEach((e,t)=>{let n=datumAt(s,t),{anchor:r,baseline:i}=labelPlacement(c[t]),a=createSvgElement(`text`,{"aria-hidden":`true`,class:`prism-radar-value`,"dominant-baseline":i,"text-anchor":r});a.textContent=n&&Number.isFinite(n.value)?formatValue(t,n.value):``,f.appendChild(a)})})}function setActive(e){y=e;for(let t of f.querySelectorAll(`[data-axis]`)){let n=Number(t.getAttribute(`data-axis`))===e;t.classList.toggle(t.tagName===`line`?`prism-radar-spoke--active`:`prism-radar-point--active`,n)}}function animateTo(e,n){v?.();let r=e.map((e,t)=>e.map((e,n)=>_[t]?.[n]??0)),i=resolveMotion(t.transition,{defaultDuration:400}),a=resolveEasing(i.easing??`ease-out`),o=r.every((t,n)=>t.every((t,r)=>t===e[n][r]));if(i.duration===0||o){_=e,draw(e);return}v=startTween({count:e.length,duration:i.duration,easing:a,onFrame:t=>{_=e.map((e,n)=>{let i=t(n);return e.map((e,t)=>tweenNumber(r[n][t],e,i))}),draw(_)},signal:n,stagger:i.stagger})}return createRadialScaffold(e,{a11y:t.a11y,legend:t.legend,tooltip:t.tooltip},r=>{let{legend:i,svg:a,tooltip:o}=r;if(a.contains(f)||a.appendChild(f),o?.hide(),i?.update(d.map((e,t)=>({color:e.color??seriesColor(t),name:e.name}))),n.length<3){for(let e of[p,m,h,g])e.replaceChildren();_=[];return}let{height:u,width:v}=r.dimensions,x=fitRadius(v,u,n.map(e=>e.label),c,L,l);b={cx:v/2,cy:u/2,radius:x};let S=resolveAxisDomains(n,d,t.domain);renderGrid(S),renderLabels(),renderSeries(),animateTo(d.map(e=>n.map((t,n)=>{let r=datumAt(e,n)?.value;return r!==void 0&&Number.isFinite(r)?normalize(r,S[n]):0})),r.disposalSignal),setActive(y);let eventFor=(e,t)=>({axis:n[e],index:e,originalEvent:t,values:valuesAt(e)}),activate=(i,s)=>{setActive(i),t.onHover?.(eventFor(i,s));let l=describe(i);if(!o){r.announcer.announce(l);return}let u=Math.max(0,..._.map(e=>e[i]??0)),f=a.getBoundingClientRect(),p=e.getBoundingClientRect(),m=valuesAt(i),h=m.find(e=>e.datum)?.datum,g=m.flatMap(({datum:e,series:t})=>e?[{color:t.color??seriesColor(d.indexOf(t)),name:t.name,value:formatValue(i,e.value)}]:[]);o.show(polarX(b.cx,b.radius*u,c[i])+(f.left-p.left),polarY(b.cy,b.radius*u,c[i])+(f.top-p.top),{key:n[i].key,meta:{axis:n[i],text:l,values:m},value:h?.value??0},{color:d[0]?.color??seriesColor(0),data:[],name:n[i].label},comparisonContent(a.ownerDocument,n[i].label,g,l))},deactivate=()=>{setActive(-1),t.onHover?.(null),o?.hide(),r.announcer.clear()},hitIndex=e=>{let t=a.getBoundingClientRect(),r=e.clientX-t.left-b.cx,i=e.clientY-t.top-b.cy;return Math.hypot(r,i)>b.radius+l+22?-1:nearestAxis(r,i,n.length,s)};return{onClick(e){let n=hitIndex(e);n>=0&&t.onClick?.(eventFor(n,e))},onKeyDown(e){let r=B[e.key];r===void 0?(e.key===`Enter`||e.key===` `)&&y>=0&&t.onClick?(e.preventDefault(),t.onClick(eventFor(y,e))):e.key===`Escape`&&deactivate():(e.preventDefault(),activate(y<0?0:(y+r+n.length)%n.length,e))},onMouseLeave:deactivate,onMouseMove(e){let t=hitIndex(e);t<0?y>=0&&deactivate():t!==y&&activate(t,e)}}},e=>{d=e})}function createScatterInteraction(e){let t=-1,n=!1,hitAt=(t,n)=>{let r=e.getData()[t]?.[n],i=e.getPoints()[t]?.[n];return r&&i?{datum:r,point:i,seriesIndex:t}:null},renderedHit=t=>{let n=t.target;return!(n instanceof SVGElement)||!n.classList.contains(`prism-scatter-point`)||!n.parentElement||n.parentElement.parentNode!==e.seriesGroup?null:hitAt([...e.seriesGroup.children].indexOf(n.parentElement),[...n.parentElement.children].indexOf(n))},nearestHit=t=>{let n=null,r=1/0;for(let[i,a]of e.getPoints().entries())for(let e of a.keys()){let a=hitAt(i,e);if(!a)continue;let o=Math.hypot(a.point.x-t.x,a.point.y-t.y);o<r&&(r=o,n=a)}return n},orderedHits=()=>{let t=[];for(let[n,r]of e.getData().entries())for(let e of r.keys()){let r=hitAt(n,e);r&&t.push(r)}return t.sort((e,t)=>e.point.x-t.point.x||e.point.y-t.point.y||e.seriesIndex-t.seriesIndex)},eventFor=(t,n)=>({datum:t.datum,originalEvent:n,series:e.getSeriesList()[t.seriesIndex]}),highlight=t=>{let n=[...e.seriesGroup.children];e.markers.replaceChildren(),t&&e.markers.appendChild(createSvgElement(`circle`,{class:`prism-active-point`,cx:t.point.x,cy:t.point.y,fill:e.colors()[t.seriesIndex],r:4})),e.seriesGroup.classList.toggle(`prism-series-focused`,t!==null&&n.length>1);for(let[e,r]of n.entries())r.classList.toggle(`prism-series-active`,e===t?.seriesIndex)},clear=()=>{e.crosshair?.hide(),e.tooltip?.hide(),e.announcer.clear(),highlight(null),n=!1,e.onHover?.(null)},focus=(t,r,i)=>{let a=e.dims(),o=chartArea(a.width,a.height,e.margin),s=e.crosshair?.snap===!1&&r,c=eventFor(t,i),{datum:l,series:u}=c,d=e.tooltipFormat?.titleFormat?e.tooltipFormat.titleFormat(l.key):keyLabel(l.key),f=e.tooltipFormat?.valueFormat,p=describeValues(d,[{datum:l,series:u}],f??String);if(e.crosshair?.show(s?r.x:t.point.x,s?r.y:t.point.y,o.width,o.height),highlight(t),e.tooltip){let n={color:e.colors()[t.seriesIndex],name:u.name,value:f?f(l.value,l,u):String(l.value)};e.tooltip.show(t.point.x+e.margin.left,t.point.y+e.margin.top,l,u,comparisonContent(e.svg.ownerDocument,d,[n],p))}else e.announcer.announce(p);n=!0,e.onHover?.(c)},pointerHit=t=>{let n=renderedHit(t);if(n)return{hit:n,raw:n.point};let r=e.dims(),i=getMousePosition(e.svg,t,e.margin.left,e.margin.top),a=chartArea(r.width,r.height,e.margin);if(i.x<0||i.x>a.width||i.y<0||i.y>a.height)return null;let o=nearestHit(i);return o?{hit:o,raw:i}:null},onMouseMove=e=>{let t=pointerHit(e);t?focus(t.hit,t.raw,e):n&&clear()},onClick=t=>{if(!e.onClick)return;let n=pointerHit(t);n&&e.onClick(eventFor(n.hit,t))},onKeyDown=n=>{let r=orderedHits();if(r.length===0)return;let i=r.length-1,a={ArrowLeft:t<0?i:Math.max(0,t-1),ArrowRight:t<0?0:Math.min(i,t+1),End:i,Home:0};n.key in a?(n.preventDefault(),t=a[n.key],focus(r[t],null,n)):(n.key===`Enter`||n.key===` `)&&t>=0&&e.onClick?(n.preventDefault(),e.onClick(eventFor(r[t],n))):n.key===`Escape`&&(t=-1,clear())};return{onClick,onKeyDown,onMouseLeave:clear,onMouseMove}}var V=400,H=new WeakMap,U=new WeakMap;function computeScatterPoints(e,t,n){return e.some(e=>e.key==null)||e.some(e=>typeof e.key==`string`),e.map(e=>({x:t.map(e.key),y:n.map(e.value)}))}function renderScatterPoints(e,t,n){let r=resolveMotion(n.transition),i=n.marks??[],a=n.pointRadius;for(H.get(e)?.(),H.delete(e);e.children.length>t.length;)e.lastChild.remove();let o=U.get(e)??[],s=[],c=t.map((t,r)=>{let a=e.children[r];return a?s.push(Number(a.getAttribute(`r`))||0):(a=createSvgElement(`circle`,{class:`prism-scatter-point`}),e.appendChild(a),s.push(0)),setAttributes(a,{fill:n.color,opacity:i[r]?.opacity}),a}),paint=(t,n)=>{for(let[e,r]of c.entries())setAttributes(r,{cx:t[e].x,cy:t[e].y,r:n(e)});U.set(e,t)};if(r.duration===0){paint(t,()=>a);return}let l=t.map((e,t)=>o[t]??e),u=t.map((e,t)=>t).filter(e=>e>=o.length),d=new Map([...u].sort((e,n)=>t[e].x-t[n].x).map((e,t)=>[e,t])),f=Math.min(r.stagger,V/Math.max(1,u.length)),paintFrame=e=>{let n=t.map((t,n)=>e(d.get(n)??0));paint(t.map((e,t)=>({x:tweenNumber(l[t].x,e.x,n[t]),y:tweenNumber(l[t].y,e.y,n[t])})),e=>tweenNumber(s[e],a,n[e]))};paintFrame(()=>0),H.set(e,startTween({count:Math.max(1,u.length),duration:r.duration,easing:resolveEasing(r.easing),onComplete:()=>{H.delete(e),paint(t,()=>a)},onFrame:paintFrame,signal:n.disposalSignal,stagger:f}))}function createScatterChart(e,t){let n=null,r=null,i=t.series;return createChartScaffold(e,t,(e,a)=>{let{groups:o,legend:s,tooltip:c}=e;s?.update(i.map((e,t)=>({color:seriesColor(t,e.color),name:e.name})));let l=e.dimensions,u=chartArea(l.width,l.height,l.margin),d=i.map(e=>e.data),f=d.flat().map(e=>e.key),p=d.flat().map(e=>e.value);if(f.length===0){clearCartesianDom(o,s,c,n),r?.replaceChildren();return}t.crosshair&&!n&&(n=createCrosshair(e.chartArea,t.crosshair));let m=buildXScale(f,u.width),h=buildYScale(p,u.height,!1),g=t.xAxis===!1?!1:t.xAxis??{},_=t.yAxis!==!1&&{grid:!0,...t.yAxis};for(_&&_.grid?renderGrid(o.grid,h,_.grid,u.width,`horizontal`,resolveTicks(h,_,resolveTickCount(_,u.height,`left`))):o.grid.replaceChildren(),g&&g.grid&&renderGrid(o.grid,m,g.grid,u.height,`vertical`,resolveTicks(m,g,resolveTickCount(g,u.width,`bottom`))),g?(positionAxis(o.xAxis,g.position??`bottom`,u.width,u.height),renderAxis(o.xAxis,m,g,u.width,`bottom`)):o.xAxis.replaceChildren(),_?(positionAxis(o.yAxis,_.position??`left`,u.width,u.height),renderAxis(o.yAxis,h,_,u.height,`left`)):o.yAxis.replaceChildren();o.series.children.length>i.length;)o.series.removeChild(o.series.lastChild);let v=[];for(let[n,r]of i.entries()){let i=o.series.children[n];i||(i=createSvgElement(`g`,{class:`prism-scatter-series`}),o.series.appendChild(i)),i.setAttribute(`data-series-id`,seriesDomId(r,n));let s=computeScatterPoints(r.data,m,h);v.push(s),renderScatterPoints(i,s,{color:seriesColor(n,r.color),disposalSignal:e.disposalSignal,marks:r.data,pointRadius:r.pointRadius??3,transition:a!==`resize`&&t.transition})}return c?.hide(),r=ensureMarkerGroup(e.chartArea,r),createScatterInteraction({announcer:e.announcer,colors:()=>i.map((e,t)=>seriesColor(t,e.color)),crosshair:n,dims:()=>e.dimensions,getData:()=>d,getPoints:()=>v,getSeriesList:()=>i,margin:l.margin,markers:r,onClick:t.onClick,onHover:t.onHover,seriesGroup:o.series,svg:e.svg,tooltip:c,tooltipFormat:typeof t.tooltip==`object`?t.tooltip:void 0})},e=>{i=e})}var W=5;function buildTopPoints(e,t,n){if(e.length===0)return[];let r=t/Math.max(1,e.length-1),i=Math.min(...e),a=Math.max(...e)-i||1;return e.map((e,t)=>({x:t*r,y:n-(e-i)/a*n}))}function buildAreaPathFromPoints(e,t,n){return e.length===0?``:areaPath(e,e.map(e=>({x:e.x,y:t})),n??`linear`)}function buildPathFromPoints(e,t){return e.length===0?``:t===`monotone`?monotonePath(e):t===`step`?stepPath(e):linePath(e)}function isStackData(e){return e.length>0&&e[0]!==null&&typeof e[0]==`object`}function buildRoundedStackRect(e,t,n,r,i,a,o){let s=Math.min(i,n/2,r/2),c=a?s:0,l=a?s:0,u=o?s:0,d=o?s:0;return[`M${e+c},${t}`,`H${e+n-u}`,u?`Q${e+n},${t} ${e+n},${t+u}`:``,`V${t+r-d}`,d?`Q${e+n},${t+r} ${e+n-d},${t+r}`:``,`H${e+l}`,l?`Q${e},${t+r} ${e},${t+r-l}`:``,`V${t+c}`,c?`Q${e},${t} ${e+c},${t}`:``,`Z`].filter(Boolean).join(``)}function defaultStackColor(e){return`var(--prism-color-${e%8+1})`}function createSparkline(e,t){let n=t.variant??`line`,r=t.color??`var(--prism-color-1)`,i=t.curve??`linear`,a=t.strokeWidth??1.5,o=t.fillOpacity,s=t.showEndPoint??!0,c=uniqueId(`prism-spark-fill`),l=createTappers(),u=resolveMotion(t.transition),d=resolveEasing(u.easing),f=t.data,p=null,m=null,h=createChartBase(e,{a11y:t.a11y,margin:{bottom:0,left:0,right:0,top:0}},()=>{l.emit({height:h.dimensions.height,type:`resize`,width:h.dimensions.width}),renderAll()}),{svg:g}=h;g.classList.add(`prism-sparkline`);let _=createSvgElement(`g`,{class:`prism-spark-inner`});g.appendChild(_);let cleanupInteraction;function plotArea(){let{height:e,width:t}=h.dimensions,r=n===`line`||n===`area`?W:0;return{h:Math.max(1,e-r*2),inset:r,w:Math.max(1,t-r*2)}}function animateValues(e,t,n){m?.();let r=p?.length===e.length?p:e.map(()=>t);if(r.every((t,n)=>t===e[n])||u.duration===0){p=e,n(e);return}m=startTween({count:1,duration:u.duration,easing:d,onFrame:t=>{let i=t(0),a=e.map((e,t)=>tweenNumber(r[t],e,i));p=a,n(a)},signal:v.signal}),p=r,n(r)}function renderAll(){let{height:e,width:l}=h.dimensions,u=plotArea();for(;_.firstChild;)_.removeChild(_.firstChild);if(_.setAttribute(`transform`,`translate(${u.inset},${u.inset})`),f.length===0){p=null;return}if(!isStackData(f)&&f.some(e=>!Number.isFinite(e)),n===`stack`&&isStackData(f)){let n=createSvgElement(`g`,{class:`prism-spark-stack`});_.appendChild(n);let r=t.cornerRadius??4,i=f,a=i.reduce((e,t)=>e+Math.max(0,t.value),0),o=i.map((e,t)=>{let r=createSvgElement(`path`,{class:`prism-spark-stack-segment`});return setAttributes(r,{fill:e.color??defaultStackColor(t)}),n.appendChild(r),r});a>0?animateValues(i.map(e=>Math.max(0,e.value)),0,n=>{let i=n.reduce((e,t)=>e+t,0)||1,a=(t.padPixels??0)/2,s=0;n.forEach((t,c)=>{let u=Math.round(s);s+=t/i*l;let d=c===n.length-1?l:Math.round(s),f=c===0,p=c===n.length-1,m=u+(f?0:a),h=Math.max(0,d-u-(f?0:a)-(p?0:a));o[c]?.setAttribute(`d`,buildRoundedStackRect(m,0,h,e,r,f,p))})}):(m?.(),p=null)}else if(n===`bar`){let t=createSvgElement(`g`,{class:`prism-spark-bars`});_.appendChild(t);let n=f,i=Math.min(0,...n),a=Math.max(...n)-i||1,o=Math.max(1,l/n.length-1),s=l/n.length,c=n.map(()=>{let e=createSvgElement(`rect`,{class:`prism-spark-bar`,fill:r});return t.appendChild(e),e});animateValues(n,i,t=>{for(let[n,r]of c.entries()){let c=Math.max(1,(t[n]-i)/a*e);setAttributes(r,{height:c,width:o,x:n*s,y:e-c})}})}else{let e=f,t=Math.min(...e),l=Math.max(...e)-t||1,d=u.w/Math.max(1,e.length-1),pointsFromValues=e=>e.map((e,n)=>({x:n*d,y:u.h-(e-t)/l*u.h})),p=null;if(n===`area`){let e=createSvgElement(`defs`),t=createSvgElement(`linearGradient`,{id:c,x1:0,x2:0,y1:0,y2:1});for(let[e,n]of[[0,`prism-spark-stop-top`],[1,`prism-spark-stop-bottom`]]){let i=createSvgElement(`stop`,{class:n,offset:e,"stop-color":r});i.style.stopColor=r,t.appendChild(i)}e.appendChild(t),_.appendChild(e),p=createSvgElement(`path`,{class:`prism-spark-fill`}),setAttributes(p,{fill:`url(#${c})`,stroke:`none`}),p.style.fillOpacity=o===void 0?``:String(o),_.appendChild(p)}let m=createSvgElement(`path`,{class:`prism-spark-line`});setAttributes(m,{fill:`none`,stroke:r,"stroke-width":a}),_.appendChild(m);let h=s&&e.length>0?createSvgElement(`circle`,{class:`prism-spark-end`,fill:r,r:2.5}):null;h&&_.appendChild(h),animateValues(e,t,e=>{let t=pointsFromValues(e);setAttributes(m,{d:buildPathFromPoints(t,i)}),p&&setAttributes(p,{d:buildAreaPathFromPoints(t,u.h,i)});let n=t.at(-1);h&&n&&setAttributes(h,{cx:n.x,cy:n.y})})}isStackData(f)||attachInteraction(f)}function attachInteraction(e){if(cleanupInteraction?.(),cleanupInteraction=void 0,!t.onHover&&!t.onClick||e.length<=1)return;let{h:i,inset:a,w:o}=plotArea();g.style.cursor=`crosshair`;let s=o/(e.length-1),c=n===`bar`?[]:buildTopPoints(e,o,i),l=createSvgElement(`circle`,{class:`prism-spark-marker`,fill:r,r:3.5}),indexAt=t=>Math.max(0,Math.min(e.length-1,Math.round((t-g.getBoundingClientRect().left-a)/s)));l.style.display=`none`,_.appendChild(l);let handleMove=n=>{let r=indexAt(n.clientX),i=c[r];i&&(setAttributes(l,{cx:i.x,cy:i.y}),l.style.display=``),t.onHover?.({index:r,originalEvent:n,value:e[r]})},handleLeave=()=>{l.style.display=`none`,t.onHover?.(null)},handleClick=n=>{if(!t.onClick)return;let r=indexAt(n.clientX);t.onClick({index:r,originalEvent:n,value:e[r]})};g.addEventListener(`mousemove`,handleMove),g.addEventListener(`mouseleave`,handleLeave),g.addEventListener(`click`,handleClick),cleanupInteraction=()=>{g.removeEventListener(`mousemove`,handleMove),g.removeEventListener(`mouseleave`,handleLeave),g.removeEventListener(`click`,handleClick)}}let v=new AbortController,y=!1;try{return renderAll(),{get disposalSignal(){return v.signal},dispose(){y||(y=!0,l.emit({type:`dispose`}),l.stop(),v.abort(),cleanupInteraction?.(),h.dispose())},get disposed(){return y},el:g,tap:l.tap,update(e){if(y)throw new PrismRenderError(`Cannot update a disposed chart.`);f=e,renderAll()},[Symbol.dispose](){this.dispose()}}}catch(e){throw v.abort(),cleanupInteraction?.(),h.dispose(),e instanceof PrismRenderError?e:new PrismRenderError(`Failed to render chart.`,{cause:e})}}export{PrismError,PrismRenderError,bandScale,createAreaChart,createBarChart,createLineChart,createPieChart,createRadarChart,createScatterChart,createSparkline,linearScale,resetTheme,seriesColor,setTheme,timeScale};
1
+ import { computePosition as e, flip as t, getClippingAncestorRect as n, offset as r, shift as i } from "@vielzeug/orbit";
2
+ //#endregion
3
+ //#region src/svg/element.ts
4
+ var a = "http://www.w3.org/2000/svg";
5
+ function createSvgElement(e, t) {
6
+ let n = document.createElementNS(a, e);
7
+ return t && setAttributes(n, t), n;
8
+ }
9
+ function setAttributes(e, t) {
10
+ for (let [n, r] of Object.entries(t)) r === void 0 ? e.removeAttribute(n) : (typeof r == "number" && !Number.isFinite(r) && `${n}${e.tagName}${r}`, e.setAttribute(n, String(r)));
11
+ }
12
+ function removeChildren(e) {
13
+ for (; e.firstChild;) e.removeChild(e.firstChild);
14
+ }
15
+ //#endregion
16
+ //#region src/svg/text.ts
17
+ var o = .6;
18
+ function estimateTextWidth(e, t) {
19
+ return e.length * t * o;
20
+ }
21
+ function createTextElement(e, t) {
22
+ let n = createSvgElement("text", t);
23
+ return n.textContent = e, n;
24
+ }
25
+ //#endregion
26
+ //#region src/axes/scale-utils.ts
27
+ function isBandScale(e) {
28
+ return typeof e.bandwidth == "function";
29
+ }
30
+ function mapTick(e, t) {
31
+ return isBandScale(e) ? e.map(t) + e.bandwidth() / 2 : e.map(t);
32
+ }
33
+ //#endregion
34
+ //#region src/axes/axis.ts
35
+ var s = 11, c = 8, l = new Intl.NumberFormat(void 0, {
36
+ maximumSignificantDigits: 3,
37
+ notation: "compact"
38
+ }), defaultTickFormat = (e) => e instanceof Date ? e.toLocaleDateString(void 0, {
39
+ month: "short",
40
+ year: "numeric"
41
+ }) : typeof e == "number" && Math.abs(e) >= 1e5 ? l.format(e) : String(e);
42
+ function resolveTicks(e, t, n) {
43
+ return t.tickValues ? [...t.tickValues] : e.ticks(n);
44
+ }
45
+ function positionAxis(e, t, n, r) {
46
+ let i = t === "bottom" ? `translate(0,${r})` : t === "right" ? `translate(${n},0)` : void 0;
47
+ i ? e.setAttribute("transform", i) : e.removeAttribute("transform");
48
+ }
49
+ function resolveTickCount(e, t, n) {
50
+ let r = e.position ?? n, i = r === "bottom" || r === "top" ? Math.max(2, Math.floor(t / 80)) : Math.max(2, Math.floor(t / 50));
51
+ return e.tickCount ?? i;
52
+ }
53
+ function categoryTickCount(e, t, n, r) {
54
+ if (e.length === 0) return 0;
55
+ let i = r ? Math.max(...e.map((e) => estimateTextWidth(t(e), s))) : s * 1.3;
56
+ return Math.max(1, Math.min(e.length, Math.floor(n / (i + c))));
57
+ }
58
+ function renderAxis(e, t, n, r, i = "bottom") {
59
+ removeChildren(e);
60
+ let a = n.position ?? i, o = a === "bottom" || a === "top", s = a === "top" || a === "left", c = s ? -1 : 1, l = createSvgElement("line", {
61
+ "aria-hidden": "true",
62
+ class: "prism-axis-line",
63
+ x1: 0,
64
+ x2: o ? r : 0,
65
+ y1: 0,
66
+ y2: o ? 0 : r
67
+ });
68
+ e.appendChild(l);
69
+ let u = n.tickFormat ?? defaultTickFormat, d = resolveTicks(t, n, n.tickCount === void 0 && "bandwidth" in t ? categoryTickCount(t.domain, u, r, o) : resolveTickCount(n, r, i));
70
+ n.tickValues && n.tickValues;
71
+ for (let n of d) {
72
+ let r = mapTick(t, n), i = createSvgElement("line", {
73
+ "aria-hidden": "true",
74
+ class: "prism-axis-tick",
75
+ x1: o ? r : 0,
76
+ x2: o ? r : 6 * c,
77
+ y1: o ? 0 : r,
78
+ y2: o ? 6 * c : r
79
+ });
80
+ e.appendChild(i);
81
+ let a = createTextElement(u(n), {
82
+ "aria-hidden": "true",
83
+ class: "prism-axis-label",
84
+ "dominant-baseline": o ? s ? "auto" : "hanging" : "middle",
85
+ "text-anchor": o ? "middle" : s ? "end" : "start",
86
+ x: o ? r : 6 * c * 1.5,
87
+ y: o ? 6 * c * 1.5 : r
88
+ });
89
+ e.appendChild(a);
90
+ }
91
+ if (n.label) {
92
+ let t = createTextElement(n.label, {
93
+ class: "prism-axis-title",
94
+ "dominant-baseline": "middle",
95
+ "text-anchor": "middle"
96
+ });
97
+ o ? setAttributes(t, {
98
+ x: r / 2,
99
+ y: 6 * c * 6
100
+ }) : setAttributes(t, { transform: `translate(${6 * c * 7}, ${r / 2}) rotate(-90)` }), e.appendChild(t);
101
+ }
102
+ }
103
+ //#endregion
104
+ //#region src/axes/grid.ts
105
+ function renderGrid(e, t, n, r, i, a) {
106
+ removeChildren(e);
107
+ let o = n !== !0 && n.color || void 0, s = n !== !0 && n.dash || void 0;
108
+ for (let n of a) {
109
+ let a = mapTick(t, n), c = {
110
+ class: "prism-grid-line",
111
+ stroke: o ?? "var(--prism-grid-color)",
112
+ "stroke-dasharray": s,
113
+ "stroke-opacity": "var(--prism-grid-opacity)"
114
+ };
115
+ i === "vertical" ? Object.assign(c, {
116
+ x1: a,
117
+ x2: a,
118
+ y1: 0,
119
+ y2: r
120
+ }) : Object.assign(c, {
121
+ x1: 0,
122
+ x2: r,
123
+ y1: a,
124
+ y2: a
125
+ }), e.appendChild(createSvgElement("line", c));
126
+ }
127
+ }
128
+ //#endregion
129
+ //#region src/scales/linear.ts
130
+ function niceNumber(e, t) {
131
+ let n = Math.floor(Math.log10(e)), r = e / 10 ** n, i;
132
+ return i = t ? r < 1.5 ? 1 : r < 3 ? 2 : r < 7 ? 5 : 10 : r <= 1 ? 1 : r <= 2 ? 2 : r <= 5 ? 5 : 10, i * 10 ** n;
133
+ }
134
+ function niceRange(e, t, n) {
135
+ if (!Number.isFinite(e) || !Number.isFinite(t)) return [0, 1];
136
+ if (e > t && ([e, t] = [t, e]), e === t) return [e - 1, t + 1];
137
+ let r = niceNumber(niceNumber(t - e, !1) / Math.max(1, n - 1), !0);
138
+ return [Math.floor(e / r) * r, Math.ceil(t / r) * r];
139
+ }
140
+ function linearScale(e) {
141
+ let getDomain = () => e.nice === !1 ? e.domain : niceRange(e.domain[0], e.domain[1], 10), getRange = () => e.range;
142
+ return {
143
+ get domain() {
144
+ return getDomain();
145
+ },
146
+ invert(e) {
147
+ let [t, n] = getDomain(), [r, i] = getRange();
148
+ return i === r ? t : t + (e - r) / (i - r) * (n - t);
149
+ },
150
+ map(t) {
151
+ let [n, r] = getDomain(), [i, a] = getRange();
152
+ if (r === n) return i;
153
+ let o = (t - n) / (r - n);
154
+ return e.clamp && (o = Math.max(0, Math.min(1, o))), i + o * (a - i);
155
+ },
156
+ get range() {
157
+ return getRange();
158
+ },
159
+ ticks(e = 10) {
160
+ if (e <= 0) return [];
161
+ let [t, n] = getDomain();
162
+ if (t === n || e === 1) return [t];
163
+ let r = Math.min(t, n), i = Math.max(t, n), a = niceNumber(niceNumber(i - r, !1) / (e - 1), !0), o = Math.ceil(r / a) * a, s = Math.floor(i / a) * a, c = [];
164
+ for (let e = o; e <= s + a * .5; e += a) c.push(Math.round(e * 0xe8d4a51000) / 0xe8d4a51000);
165
+ return c;
166
+ }
167
+ };
168
+ }
169
+ //#endregion
170
+ //#region src/scales/time.ts
171
+ var u = 1e3, d = 60 * u, f = 60 * d, p = 24 * f, m = 30 * p, h = 365 * p, g = [
172
+ u,
173
+ 5 * u,
174
+ 15 * u,
175
+ 30 * u,
176
+ d,
177
+ 5 * d,
178
+ 15 * d,
179
+ 30 * d,
180
+ f,
181
+ 3 * f,
182
+ 6 * f,
183
+ 12 * f,
184
+ p,
185
+ 7 * p,
186
+ m,
187
+ 3 * m,
188
+ 6 * m,
189
+ h
190
+ ];
191
+ function chooseInterval(e, t) {
192
+ let n = Math.abs(e) / Math.max(1, t);
193
+ for (let e of g) if (e >= n) return e;
194
+ return h;
195
+ }
196
+ function niceDomain(e, t) {
197
+ let [n, r] = e;
198
+ n.getTime() > r.getTime() && ([n, r] = [r, n]);
199
+ let i = chooseInterval(r.getTime() - n.getTime(), t);
200
+ return [new Date(Math.floor(n.getTime() / i) * i), new Date(Math.ceil(r.getTime() / i) * i)];
201
+ }
202
+ function timeScale(e) {
203
+ let getDomain = () => e.nice === !1 ? e.domain : niceDomain(e.domain, 10), getRange = () => e.range;
204
+ return {
205
+ get domain() {
206
+ return getDomain();
207
+ },
208
+ invert(e) {
209
+ let [t, n] = getDomain(), [r, i] = getRange();
210
+ if (i === r) return t;
211
+ let a = (e - r) / (i - r);
212
+ return new Date(t.getTime() + a * (n.getTime() - t.getTime()));
213
+ },
214
+ map(e) {
215
+ let [t, n] = getDomain(), [r, i] = getRange(), a = n.getTime() - t.getTime();
216
+ return a === 0 ? r : r + (e.getTime() - t.getTime()) / a * (i - r);
217
+ },
218
+ get range() {
219
+ return getRange();
220
+ },
221
+ ticks(e = 10) {
222
+ let [t, n] = getDomain(), r = chooseInterval(n.getTime() - t.getTime(), e), i = Math.ceil(t.getTime() / r) * r, a = [];
223
+ for (let e = i; e <= n.getTime(); e += r) a.push(new Date(e));
224
+ return a;
225
+ }
226
+ };
227
+ }
228
+ //#endregion
229
+ //#region src/core/cartesian-scales.ts
230
+ function buildXScale(e, t) {
231
+ if (e.length === 0 || e.some((e) => e == null) || e.some((e) => typeof e == "number" && !Number.isFinite(e))) return linearScale({
232
+ domain: [0, 1],
233
+ range: [0, t]
234
+ });
235
+ if (e[0] instanceof Date) {
236
+ let n = e, r = Math.min(...n.map(Number)), i = Math.max(...n.map(Number));
237
+ return timeScale({
238
+ domain: [new Date(r), new Date(r === i ? i + 1 : i)],
239
+ nice: !1,
240
+ range: [0, t]
241
+ });
242
+ }
243
+ let n = e, r = Math.min(...n), i = Math.max(...n);
244
+ return linearScale({
245
+ domain: [r, r === i ? i + 1 : i],
246
+ nice: !1,
247
+ range: [0, t]
248
+ });
249
+ }
250
+ function buildYScale(e, t, n = !0) {
251
+ if (e.length === 0 || e.some((e) => e == null) || e.some((e) => !Number.isFinite(e))) return linearScale({
252
+ domain: [0, 1],
253
+ range: [t, 0]
254
+ });
255
+ let r = Math.min(...e), i = n ? Math.min(0, r) : r, a = Math.max(...e);
256
+ return linearScale({
257
+ domain: [i, i === a ? a + 1 : a],
258
+ range: [t, 0]
259
+ });
260
+ }
261
+ //#endregion
262
+ //#region src/_tappers.ts
263
+ function createTappers() {
264
+ let e = /* @__PURE__ */ new Set(), t = !1;
265
+ return {
266
+ emit(t) {
267
+ if (e.size !== 0) for (let n of e) try {
268
+ n(t);
269
+ } catch {}
270
+ },
271
+ stop() {
272
+ t = !0, e.clear();
273
+ },
274
+ tap(n, r) {
275
+ if (t || r?.signal?.aborted) return () => {};
276
+ e.add(n);
277
+ let detach = () => {
278
+ e.delete(n);
279
+ };
280
+ return r?.signal?.addEventListener("abort", detach, { once: !0 }), detach;
281
+ }
282
+ };
283
+ }
284
+ //#endregion
285
+ //#region src/errors.ts
286
+ var PrismError = class extends Error {
287
+ constructor(e, t) {
288
+ super(e, t), this.name = new.target.name, Object.setPrototypeOf(this, new.target.prototype);
289
+ }
290
+ }, PrismRenderError = class extends PrismError {};
291
+ //#endregion
292
+ //#region src/interaction/announcer.ts
293
+ function describeValues(e, t, n = String) {
294
+ return `${e}: ${t.map(({ datum: e, series: t }) => `${t.name} ${e ? n(e.value, e, t) : "n/a"}`).join(", ")}`;
295
+ }
296
+ function createAnnouncer(e, t) {
297
+ let n = createSvgElement("text", {
298
+ "aria-live": "polite",
299
+ class: t,
300
+ role: "status",
301
+ x: -9999,
302
+ y: -9999
303
+ });
304
+ return e.appendChild(n), {
305
+ announce(e) {
306
+ n.textContent = e;
307
+ },
308
+ clear() {
309
+ n.textContent = "";
310
+ }
311
+ };
312
+ }
313
+ //#endregion
314
+ //#region src/interaction/legend.ts
315
+ function resolvePosition(e) {
316
+ return e === !0 ? "bottom" : e.position ?? "bottom";
317
+ }
318
+ function createLegend(e, t, n) {
319
+ let r = resolvePosition(t), i = document.createElement("div");
320
+ i.className = `prism-legend prism-legend-${r}`, r === "top" ? e.insertBefore(i, e.firstChild) : e.appendChild(i);
321
+ let disposeHandle = () => {
322
+ i.remove();
323
+ };
324
+ return {
325
+ dispose: disposeHandle,
326
+ el: i,
327
+ [Symbol.dispose]: disposeHandle,
328
+ update(e) {
329
+ i.replaceChildren();
330
+ for (let t of e) {
331
+ let e = document.createElement("div");
332
+ e.className = "prism-legend-item";
333
+ let n = document.createElement("span");
334
+ n.className = "prism-legend-dot", n.style.backgroundColor = t.color;
335
+ let r = document.createElement("span");
336
+ r.className = "prism-legend-label", r.textContent = t.name, e.appendChild(n), e.appendChild(r), i.appendChild(e);
337
+ }
338
+ n?.();
339
+ }
340
+ };
341
+ }
342
+ //#endregion
343
+ //#region src/interaction/tooltip.ts
344
+ var _ = "position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap";
345
+ function shiftBoundary(e, t) {
346
+ let r = e.getBoundingClientRect(), i = {
347
+ height: r.height,
348
+ width: r.width,
349
+ x: r.x,
350
+ y: r.y
351
+ }, a = n(t), o = Math.max(i.x, a.x), s = Math.max(i.y, a.y), c = Math.min(i.x + i.width, a.x + a.width), l = Math.min(i.y + i.height, a.y + a.height);
352
+ return c <= o || l <= s ? i : {
353
+ height: l - s,
354
+ width: c - o,
355
+ x: o,
356
+ y: s
357
+ };
358
+ }
359
+ function comparisonContent(e, t, n, r) {
360
+ let i = e.createElement("div"), a = e.createElement("span"), o = e.createElement("div"), s = e.createElement("div");
361
+ i.className = "prism-tooltip-body", a.className = "prism-tooltip-sr", a.style.cssText = _, a.textContent = r, o.setAttribute("aria-hidden", "true"), s.className = "prism-tooltip-title", s.textContent = t, o.appendChild(s);
362
+ for (let t of n) {
363
+ let n = e.createElement("div"), r = e.createElement("span"), i = e.createElement("span"), a = e.createElement("span");
364
+ n.className = "prism-tooltip-row", r.className = "prism-tooltip-swatch", r.style.setProperty("--prism-swatch", t.color), i.className = "prism-tooltip-name", i.textContent = t.name, a.className = "prism-tooltip-value", a.textContent = t.value, n.append(r, i, a), o.appendChild(n);
365
+ }
366
+ return i.append(a, o), i;
367
+ }
368
+ function createTooltip(n, a) {
369
+ let o = n.style.position, s = getComputedStyle(n).position === "static";
370
+ s && (n.style.position = "relative");
371
+ let c = n.ownerDocument.createElement("div");
372
+ c.className = "prism-tooltip", c.style.position = "absolute", c.style.pointerEvents = "none", c.style.top = "0", c.style.left = "0", c.setAttribute("role", "status"), c.setAttribute("aria-live", "polite"), n.appendChild(c);
373
+ let l = a !== !0 && a?.offset || 8, u = a === !0 ? void 0 : a?.render, setVisible = (e) => {
374
+ c.classList.toggle("prism-tooltip--visible", e), c.style.opacity = e ? "1" : "0";
375
+ }, d = null, f = null, p = !1, cancelClear = () => {
376
+ f !== null && (clearTimeout(f), f = null);
377
+ }, cancelReveal = () => {
378
+ d !== null && (cancelAnimationFrame(d), d = null);
379
+ }, disposeHandle = () => {
380
+ cancelReveal(), cancelClear(), c.remove(), s && n.style.position === "relative" && (n.style.position = o);
381
+ };
382
+ return {
383
+ dispose: disposeHandle,
384
+ el: c,
385
+ hide() {
386
+ cancelReveal(), cancelClear(), p = !1, setVisible(!1), f = setTimeout(() => {
387
+ f = null, p || (c.textContent = "");
388
+ }, 150);
389
+ },
390
+ show(a, o, s, f, m) {
391
+ if (!n.isConnected) return;
392
+ cancelClear();
393
+ let h = u ? u(s, f) : m ?? `${f.name}: ${s.value}`;
394
+ typeof h == "string" ? c.textContent = h : c.replaceChildren(h);
395
+ let { x: g, y: _ } = e({ getBoundingClientRect: () => {
396
+ let e = n.getBoundingClientRect();
397
+ return {
398
+ bottom: e.top + o,
399
+ height: 0,
400
+ left: e.left + a,
401
+ right: e.left + a,
402
+ top: e.top + o,
403
+ width: 0,
404
+ x: e.left + a,
405
+ y: e.top + o
406
+ };
407
+ } }, c, {
408
+ containingBlock: n,
409
+ middleware: [
410
+ r(l),
411
+ t(),
412
+ i({
413
+ boundary: shiftBoundary(n, c),
414
+ padding: 8
415
+ })
416
+ ],
417
+ placement: "top"
418
+ });
419
+ c.style.left = `${g}px`, c.style.top = `${_}px`, p ? d === null && setVisible(!0) : (p = !0, setVisible(!1), d = requestAnimationFrame(() => {
420
+ d = null, p && setVisible(!0);
421
+ }));
422
+ },
423
+ [Symbol.dispose]: disposeHandle
424
+ };
425
+ }
426
+ //#endregion
427
+ //#region src/core/layout.ts
428
+ var v = {
429
+ bottom: 48,
430
+ left: 50,
431
+ right: 20,
432
+ top: 20
433
+ };
434
+ function resolveMargin(e) {
435
+ return {
436
+ ...v,
437
+ ...e
438
+ };
439
+ }
440
+ function chartArea(e, t, n) {
441
+ return {
442
+ height: Math.max(0, t - n.top - n.bottom),
443
+ width: Math.max(0, e - n.left - n.right)
444
+ };
445
+ }
446
+ //#endregion
447
+ //#region src/core/responsive.ts
448
+ function observeResize(e, t) {
449
+ if (typeof ResizeObserver > "u") return () => {};
450
+ let n = null, r = new ResizeObserver((e) => {
451
+ n !== null && cancelAnimationFrame(n), n = requestAnimationFrame(() => {
452
+ n = null;
453
+ let r = e[0];
454
+ if (r) {
455
+ let { height: e, width: n } = r.contentRect;
456
+ t(n, e);
457
+ }
458
+ });
459
+ });
460
+ return r.observe(e), () => {
461
+ n !== null && cancelAnimationFrame(n), r.disconnect();
462
+ };
463
+ }
464
+ //#endregion
465
+ //#region src/core/chart-base.ts
466
+ function createChartBase(e, t, n) {
467
+ if (!(typeof e == "object" && e && e.nodeType === 1 && typeof e.appendChild == "function" && typeof e.getBoundingClientRect == "function")) {
468
+ let t = e;
469
+ throw new PrismRenderError(`Invalid chart configuration: \`container\` must be a DOM Element, received ${t === null ? "null" : typeof t == "object" ? t.constructor?.name ?? "object" : typeof t}.`);
470
+ }
471
+ let r = resolveMargin(t.margin), i = t.a11y, a = createSvgElement("svg", {
472
+ ...!i || i.decorative ? { "aria-hidden": "true" } : {
473
+ "aria-label": i.ariaLabel,
474
+ role: "img",
475
+ tabindex: "0"
476
+ },
477
+ class: "prism-chart",
478
+ style: "display:block;max-width:100%"
479
+ }), o = createSvgElement("g", {
480
+ class: "prism-chart-area",
481
+ transform: `translate(${r.left},${r.top})`
482
+ });
483
+ a.appendChild(o);
484
+ let s = e.getBoundingClientRect();
485
+ s.width === 0 || s.height;
486
+ let c = s.width || 600, l = s.height || 300, u = {
487
+ height: l,
488
+ margin: r,
489
+ width: c
490
+ }, d = c, f = l, p = l, syncChrome = () => {
491
+ let e = Math.max(0, p - (t.chrome?.()?.offsetHeight ?? 0));
492
+ f = e, u.height = e, setAttributes(a, {
493
+ height: e,
494
+ viewBox: `0 0 ${u.width} ${e}`
495
+ });
496
+ }, m = observeResize(e, (e, r) => {
497
+ p = r;
498
+ let i = t.chrome?.()?.offsetHeight ?? 0, o = Math.max(0, r - i);
499
+ (e !== d || o !== f) && (d = e, f = o, u.height = o, u.width = e, setAttributes(a, {
500
+ height: o,
501
+ viewBox: `0 0 ${e} ${o}`,
502
+ width: e
503
+ }), n?.());
504
+ });
505
+ return setAttributes(a, {
506
+ height: l,
507
+ viewBox: `0 0 ${c} ${l}`,
508
+ width: c
509
+ }), e.appendChild(a), {
510
+ chartArea: o,
511
+ dimensions: u,
512
+ dispose() {
513
+ m(), a.remove();
514
+ },
515
+ svg: a,
516
+ syncChrome
517
+ };
518
+ }
519
+ //#endregion
520
+ //#region src/core/chart-scaffold.ts
521
+ function clearCartesianDom(e, t, n, r) {
522
+ removeChildren(e.series), removeChildren(e.grid), removeChildren(e.xAxis), removeChildren(e.yAxis), t?.update([]), n?.hide(), r?.hide();
523
+ }
524
+ function runScaffold(e, t, n, r, i) {
525
+ let render = (e) => {}, a = createTappers(), o = null, s = createChartBase(e, {
526
+ a11y: t.a11y,
527
+ chrome: () => o?.el ?? null,
528
+ margin: t.margin
529
+ }, () => {
530
+ a.emit({
531
+ height: s.dimensions.height,
532
+ type: "resize",
533
+ width: s.dimensions.width
534
+ }), render("resize");
535
+ }), c = t.tooltip ? createTooltip(e, t.tooltip) : null;
536
+ o = t.legend ? createLegend(e, t.legend, () => s.syncChrome()) : null;
537
+ let l = new AbortController(), u = n(s, c, o, l.signal, createAnnouncer(s.svg, "prism-live")), d = !1, f = makeEventManager(s.svg);
538
+ render = (e) => {
539
+ d || f.attach(r(u, e));
540
+ };
541
+ try {
542
+ render("mount");
543
+ } catch (e) {
544
+ throw d = !0, l.abort(), f.detach(), c?.dispose(), o?.dispose(), s.dispose(), e instanceof PrismRenderError ? e : new PrismRenderError("Failed to render chart.", { cause: e });
545
+ }
546
+ return {
547
+ get disposalSignal() {
548
+ return l.signal;
549
+ },
550
+ dispose() {
551
+ d || (d = !0, a.emit({ type: "dispose" }), a.stop(), l.abort(), f.detach(), c?.dispose(), o?.dispose(), s.dispose());
552
+ },
553
+ get disposed() {
554
+ return d;
555
+ },
556
+ el: s.svg,
557
+ tap: a.tap,
558
+ update(e) {
559
+ if (d) throw new PrismRenderError("Cannot update a disposed chart.");
560
+ i(e), render("update");
561
+ },
562
+ [Symbol.dispose]() {
563
+ this.dispose();
564
+ }
565
+ };
566
+ }
567
+ function makeEventManager(e) {
568
+ let t = null;
569
+ return {
570
+ attach(n) {
571
+ t &&= (t.onMouseMove && e.removeEventListener("mousemove", t.onMouseMove), t.onMouseLeave && e.removeEventListener("mouseleave", t.onMouseLeave), t.onClick && e.removeEventListener("click", t.onClick), t.onKeyDown && e.removeEventListener("keydown", t.onKeyDown), null), n && (t = n, n.onMouseMove && e.addEventListener("mousemove", n.onMouseMove), n.onMouseLeave && e.addEventListener("mouseleave", n.onMouseLeave), n.onClick && e.addEventListener("click", n.onClick), n.onKeyDown && e.addEventListener("keydown", n.onKeyDown));
572
+ },
573
+ detach() {
574
+ this.attach(void 0);
575
+ }
576
+ };
577
+ }
578
+ function createChartScaffold(e, t, n, r) {
579
+ return runScaffold(e, t, (t, n, r, i, a) => {
580
+ let o = {
581
+ grid: createSvgElement("g", {
582
+ "aria-hidden": "true",
583
+ class: "prism-grid"
584
+ }),
585
+ series: createSvgElement("g", { class: "prism-series" }),
586
+ xAxis: createSvgElement("g", { class: "prism-x-axis" }),
587
+ yAxis: createSvgElement("g", { class: "prism-y-axis" })
588
+ };
589
+ return t.chartArea.appendChild(o.grid), t.chartArea.appendChild(o.xAxis), t.chartArea.appendChild(o.yAxis), t.chartArea.appendChild(o.series), {
590
+ announcer: a,
591
+ chartArea: t.chartArea,
592
+ container: e,
593
+ dimensions: t.dimensions,
594
+ disposalSignal: i,
595
+ groups: o,
596
+ legend: r,
597
+ svg: t.svg,
598
+ tooltip: n
599
+ };
600
+ }, n, r);
601
+ }
602
+ function createRadialScaffold(e, t, n, r) {
603
+ return runScaffold(e, t, (t, n, r, i, a) => ({
604
+ announcer: a,
605
+ container: e,
606
+ dimensions: t.dimensions,
607
+ disposalSignal: i,
608
+ legend: r,
609
+ svg: t.svg,
610
+ tooltip: n
611
+ }), n, r);
612
+ }
613
+ //#endregion
614
+ //#region src/core/series-id.ts
615
+ function seriesDomId(e, t) {
616
+ return e?.id ? e.id.replace(/[^A-Za-z0-9_-]/g, "-") : `series-${t}`;
617
+ }
618
+ //#endregion
619
+ //#region src/interaction/crosshair.ts
620
+ function createCrosshair(e, t) {
621
+ let n = t === !0 || t?.vertical !== !1, r = t !== !0 && t?.horizontal === !0, i = t === !0 || t?.snap !== !1, a = createSvgElement("g", {
622
+ "aria-hidden": "true",
623
+ class: "prism-crosshair",
624
+ style: "display:none"
625
+ }), o = n ? createSvgElement("line", {
626
+ class: "prism-crosshair-v",
627
+ "stroke-dasharray": "var(--prism-crosshair-dash, 4 2)"
628
+ }) : null, s = r ? createSvgElement("line", {
629
+ class: "prism-crosshair-h",
630
+ "stroke-dasharray": "var(--prism-crosshair-dash, 4 2)"
631
+ }) : null;
632
+ return o && a.appendChild(o), s && a.appendChild(s), e.appendChild(a), {
633
+ hide() {
634
+ a.style.display = "none";
635
+ },
636
+ show(e, t, n, r) {
637
+ a.style.display = "", o && (setAttributes(o, {
638
+ x1: 0,
639
+ x2: 0,
640
+ y1: 0,
641
+ y2: r
642
+ }), o.style.transform = `translateX(${e}px)`), s && (setAttributes(s, {
643
+ x1: 0,
644
+ x2: n,
645
+ y1: 0,
646
+ y2: 0
647
+ }), s.style.transform = `translateY(${t}px)`);
648
+ },
649
+ snap: i
650
+ };
651
+ }
652
+ //#endregion
653
+ //#region src/core/cartesian-model.ts
654
+ function keyId(e) {
655
+ return e instanceof Date ? `date:${e.getTime()}` : `${typeof e}:${String(e)}`;
656
+ }
657
+ function normalizeCartesianSeries(e, t) {
658
+ let n = [], r = /* @__PURE__ */ new Map();
659
+ return {
660
+ domain: n,
661
+ labels: r,
662
+ series: e.map((e, i) => {
663
+ let a = /* @__PURE__ */ new Map();
664
+ for (let o of t[i] ?? []) {
665
+ let t = keyId(o.key);
666
+ a.has(t) ? `${String(o.key)}${e.name}` : (a.set(t, o), r.has(t) || (r.set(t, o.key), n.push(t)));
667
+ }
668
+ return {
669
+ byKey: a,
670
+ config: e
671
+ };
672
+ })
673
+ };
674
+ }
675
+ //#endregion
676
+ //#region src/interaction/events.ts
677
+ function getMousePosition(e, t, n, r) {
678
+ let i = e.getBoundingClientRect();
679
+ return {
680
+ x: t.clientX - i.left - n,
681
+ y: t.clientY - i.top - r
682
+ };
683
+ }
684
+ //#endregion
685
+ //#region src/interaction/series-interaction.ts
686
+ var keyOrder = (e) => e instanceof Date ? e.getTime() : Number(e);
687
+ function keyLabel(e) {
688
+ return e instanceof Date ? e.toLocaleDateString() : String(e);
689
+ }
690
+ function findNearestKey(e, t, n) {
691
+ let r = null, i = Infinity;
692
+ for (let a = 0; a < t.length; a++) for (let o = 0; o < (t[a]?.length ?? 0); o++) {
693
+ let s = e[a]?.[o], c = t[a]?.[o];
694
+ if (!s || !c) continue;
695
+ let l = Math.abs(c.x - n);
696
+ l < i && (i = l, r = s.key);
697
+ }
698
+ return r;
699
+ }
700
+ function createSeriesInteraction(e) {
701
+ let t = -1, n = !1, renderedHit = (t) => {
702
+ let n = t.target;
703
+ if (!(n instanceof SVGElement) || n.tagName.toLowerCase() !== "circle" || !e.seriesGroup.contains(n) || !n.parentElement) return null;
704
+ let r = n.parentElement;
705
+ for (; r && r.parentNode !== e.seriesGroup;) r = r.parentElement;
706
+ if (!r) return null;
707
+ let i = [...e.seriesGroup.children].indexOf(r), a = [...n.parentElement.children].indexOf(n), o = e.getData()[i]?.[a], s = e.getPoints()[i]?.[a];
708
+ return o && s ? {
709
+ datum: o,
710
+ point: s,
711
+ seriesIndex: i
712
+ } : null;
713
+ }, entriesAt = (t) => {
714
+ let n = keyId(t), r = e.getPoints();
715
+ return e.getData().map((e, t) => {
716
+ let i = e.findIndex((e) => keyId(e.key) === n);
717
+ return i === -1 ? {
718
+ datum: void 0,
719
+ point: void 0
720
+ } : {
721
+ datum: e[i],
722
+ point: r[t]?.[i]
723
+ };
724
+ });
725
+ }, nearestIndex = (e, t) => {
726
+ let n = -1, r = Infinity;
727
+ return e.forEach(({ point: e }, i) => {
728
+ if (!e) return;
729
+ let a = Number.isFinite(t) ? Math.abs(e.y - t) : 0;
730
+ a < r && (r = a, n = i);
731
+ }), n;
732
+ }, highlight = (t, n) => {
733
+ let r = e.colors();
734
+ e.markers.replaceChildren(), t.forEach(({ point: t }, n) => {
735
+ t && e.markers.appendChild(createSvgElement("circle", {
736
+ class: "prism-active-point",
737
+ cx: t.x,
738
+ cy: t.y,
739
+ fill: r[n],
740
+ r: 4
741
+ }));
742
+ });
743
+ let i = [...e.seriesGroup.children];
744
+ e.seriesGroup.classList.toggle("prism-series-focused", n >= 0 && i.length > 1);
745
+ for (let [e, t] of i.entries()) t.classList.toggle("prism-series-active", e === n);
746
+ }, clear = () => {
747
+ e.crosshair?.hide(), e.tooltip?.hide(), e.announcer.clear(), highlight([], -1), n = !1, e.onHover?.(null);
748
+ }, eventFor = (t, n, r) => {
749
+ let i = entriesAt(t), a = renderedHit(r), o = a?.seriesIndex ?? nearestIndex(i, n);
750
+ a && (i[o] = {
751
+ datum: a.datum,
752
+ point: a.point
753
+ });
754
+ let s = e.getSeriesList(), c = i[o]?.datum;
755
+ if (o < 0 || !c) return null;
756
+ let l = i.map((e, t) => ({
757
+ datum: e.datum,
758
+ series: s[t]
759
+ }));
760
+ return {
761
+ entries: i,
762
+ event: {
763
+ datum: c,
764
+ originalEvent: r,
765
+ series: s[o],
766
+ values: l
767
+ },
768
+ index: o
769
+ };
770
+ }, focus = (t, r, i) => {
771
+ let a = eventFor(t, r?.y ?? NaN, i);
772
+ if (!a) return;
773
+ let { entries: o, event: s, index: c } = a, l = o[c].point, u = e.dims(), d = chartArea(u.width, u.height, e.margin), f = e.crosshair?.snap === !1 && r, p = e.tooltipFormat?.titleFormat ? e.tooltipFormat.titleFormat(t) : keyLabel(t), m = s.values ?? [], h = e.colors(), g = e.tooltipFormat?.valueFormat;
774
+ e.crosshair?.show(f ? r.x : l.x, f ? r.y : l.y, d.width, d.height), highlight(o, c);
775
+ let _ = describeValues(p, m, g ?? String);
776
+ if (e.tooltip) {
777
+ let t = m.flatMap(({ datum: e, series: t }, n) => e ? [{
778
+ color: h[n],
779
+ name: t.name,
780
+ value: g ? g(e.value, e, t) : String(e.value)
781
+ }] : []);
782
+ e.tooltip.show(l.x + e.margin.left, l.y + e.margin.top, s.datum, s.series, comparisonContent(e.svg.ownerDocument, p, t, _));
783
+ } else e.announcer.announce(_);
784
+ n = !0, e.onHover?.(s);
785
+ }, pointerKey = (t) => {
786
+ let n = renderedHit(t);
787
+ if (n) return {
788
+ key: n.datum.key,
789
+ pos: n.point
790
+ };
791
+ let r = e.getPoints();
792
+ if (r.every((e) => e.length === 0)) return null;
793
+ let i = e.dims(), a = getMousePosition(e.svg, t, e.margin.left, e.margin.top), o = chartArea(i.width, i.height, e.margin);
794
+ if (a.x < 0 || a.x > o.width || a.y < 0 || a.y > o.height) return null;
795
+ let s = findNearestKey(e.getData(), r, a.x);
796
+ return s === null ? null : {
797
+ key: s,
798
+ pos: a
799
+ };
800
+ }, sortedKeys = () => [...new Map(e.getData().flat().map((e) => [keyId(e.key), e.key])).values()].sort((e, t) => keyOrder(e) - keyOrder(t)), onMouseMove = (e) => {
801
+ let t = pointerKey(e);
802
+ t ? focus(t.key, t.pos, e) : n && clear();
803
+ }, onClick = (t) => {
804
+ if (!e.onClick) return;
805
+ let n = pointerKey(t), r = n && eventFor(n.key, n.pos.y, t);
806
+ r && e.onClick(r.event);
807
+ }, onKeyDown = (n) => {
808
+ let r = sortedKeys();
809
+ if (r.length === 0) return;
810
+ let i = r.length - 1, a = {
811
+ ArrowLeft: t < 0 ? i : Math.max(0, t - 1),
812
+ ArrowRight: t < 0 ? 0 : Math.min(i, t + 1),
813
+ End: i,
814
+ Home: 0
815
+ };
816
+ if (n.key in a) n.preventDefault(), t = a[n.key], focus(r[t], null, n);
817
+ else if ((n.key === "Enter" || n.key === " ") && t >= 0 && e.onClick) {
818
+ n.preventDefault();
819
+ let i = eventFor(r[t], NaN, n);
820
+ i && e.onClick(i.event);
821
+ } else n.key === "Escape" && (t = -1, clear());
822
+ };
823
+ return {
824
+ onClick,
825
+ onKeyDown,
826
+ onMouseLeave: clear,
827
+ onMouseMove
828
+ };
829
+ }
830
+ function ensureMarkerGroup(e, t) {
831
+ if (t && e.contains(t)) return t;
832
+ let n = createSvgElement("g", {
833
+ "aria-hidden": "true",
834
+ class: "prism-active-points",
835
+ "pointer-events": "none"
836
+ });
837
+ return e.appendChild(n), n;
838
+ }
839
+ //#endregion
840
+ //#region src/theme/index.ts
841
+ var y = 8, b = {
842
+ axisColor: "--prism-axis-color",
843
+ fontFamily: "--prism-font-family",
844
+ gridColor: "--prism-grid-color",
845
+ gridOpacity: "--prism-grid-opacity",
846
+ textColor: "--prism-text-color",
847
+ textColorSecondary: "--prism-text-color-secondary",
848
+ tooltipBg: "--prism-tooltip-bg",
849
+ tooltipBorder: "--prism-tooltip-border",
850
+ tooltipColor: "--prism-tooltip-color"
851
+ };
852
+ function target(e) {
853
+ return e?.scope ?? document.documentElement;
854
+ }
855
+ function setTheme(e, t) {
856
+ let n = target(t);
857
+ if (e.colors) for (let t = 0; t < y; t++) {
858
+ let r = e.colors[t];
859
+ r ? n.style.setProperty(`--prism-color-${t + 1}`, r) : n.style.removeProperty(`--prism-color-${t + 1}`);
860
+ }
861
+ for (let [t, r] of Object.entries(b)) {
862
+ let i = e[t];
863
+ i !== void 0 && n.style.setProperty(r, String(i));
864
+ }
865
+ }
866
+ function resetTheme(e) {
867
+ let t = target(e);
868
+ for (let e = 1; e <= y; e++) t.style.removeProperty(`--prism-color-${e}`);
869
+ for (let e of Object.values(b)) t.style.removeProperty(e);
870
+ }
871
+ function seriesColor(e, t) {
872
+ return t ?? `var(--prism-color-${e % y + 1})`;
873
+ }
874
+ //#endregion
875
+ //#region src/animation/easing.ts
876
+ var x = 1.70158, S = {
877
+ "back-out": (e) => 1 + 2.70158 * (e - 1) ** 3 + x * (e - 1) ** 2,
878
+ "ease-in": (e) => e * e * e,
879
+ "ease-in-out": (e) => e < .5 ? 4 * e * e * e : 1 - (-2 * e + 2) ** 3 / 2,
880
+ "ease-out": (e) => 1 - (1 - e) ** 3,
881
+ "expo-out": (e) => e >= 1 ? 1 : 1 - 2 ** (-10 * e),
882
+ linear: (e) => e
883
+ };
884
+ function resolveEasing(e) {
885
+ return typeof e == "function" ? e : e !== void 0 && Object.hasOwn(S, e) ? S[e] : S["ease-out"];
886
+ }
887
+ function resolveMotion(e, t) {
888
+ if (e === !1) return {
889
+ duration: 0,
890
+ stagger: 0
891
+ };
892
+ let n = e === !0 ? void 0 : e, r = n?.preference ?? "system", i = typeof matchMedia < "u" && matchMedia("(prefers-reduced-motion: reduce)").matches, a = r === "never" || r === "system" && i ? 0 : n?.duration ?? t?.defaultDuration ?? 300;
893
+ return {
894
+ ...n,
895
+ duration: a,
896
+ stagger: Math.max(0, n?.stagger ?? t?.defaultStagger ?? 0)
897
+ };
898
+ }
899
+ //#endregion
900
+ //#region src/animation/tween.ts
901
+ function tweenNumber(e, t, n) {
902
+ return e + (t - e) * n;
903
+ }
904
+ //#endregion
905
+ //#region src/animation/transition.ts
906
+ function startTween(e) {
907
+ let { count: t, duration: n, easing: r, stagger: i = 0, signal: a, onFrame: o, onComplete: s } = e;
908
+ if (a?.aborted) return () => {};
909
+ if (n <= 0) return o(() => 1), s?.(), () => {};
910
+ if (t === 0) return s?.(), () => {};
911
+ let c = n + i * (t - 1), l = null, u = null, d = !1, cancel = () => {
912
+ d = !0, u !== null && (cancelAnimationFrame(u), u = null), a?.removeEventListener("abort", cancel);
913
+ }, frame = (e) => {
914
+ if (d || a?.aborted) return;
915
+ l === null && (l = e);
916
+ let t = e - l;
917
+ o((e) => r(Math.max(0, Math.min(1, (t - e * i) / n)))), t < c ? u = requestAnimationFrame(frame) : (u = null, a?.removeEventListener("abort", cancel), s?.());
918
+ };
919
+ return a?.addEventListener("abort", cancel, { once: !0 }), u = requestAnimationFrame(frame), cancel;
920
+ }
921
+ function animate(e, t, n, r) {
922
+ let i = resolveMotion(t);
923
+ return startTween({
924
+ count: e.length,
925
+ duration: i.duration,
926
+ easing: resolveEasing(i.easing),
927
+ onComplete: n,
928
+ onFrame: (t) => {
929
+ for (let [n, r] of e.entries()) {
930
+ let e = t(n);
931
+ for (let [t, { from: n, to: i }] of Object.entries(r.attrs)) r.el.setAttribute(t, String(tweenNumber(n, i, e)));
932
+ }
933
+ },
934
+ signal: r,
935
+ stagger: i.stagger
936
+ });
937
+ }
938
+ //#endregion
939
+ //#region src/core/datum-style.ts
940
+ function hasStyledRuns(e) {
941
+ return e?.some((e) => e && (e.dash !== void 0 || e.opacity !== void 0)) ?? !1;
942
+ }
943
+ function computeStyleRuns(e, t) {
944
+ let n = Math.max(0, t - 1);
945
+ if (n === 0) return [];
946
+ let r = [];
947
+ for (let t = 0; t < n; t++) {
948
+ let n = e[t] ?? {}, i = r[r.length - 1];
949
+ i && i.dash === n.dash && i.opacity === n.opacity ? i.end = t + 1 : r.push({
950
+ dash: n.dash,
951
+ end: t + 1,
952
+ opacity: n.opacity,
953
+ start: t
954
+ });
955
+ }
956
+ return r;
957
+ }
958
+ //#endregion
959
+ //#region src/core/ids.ts
960
+ var C = 0;
961
+ function uniqueId(e) {
962
+ return C += 1, `${e}-${C}`;
963
+ }
964
+ //#endregion
965
+ //#region src/svg/path.ts
966
+ function linePath(e) {
967
+ if (e.length === 0) return "";
968
+ let t = `M${e[0].x},${e[0].y}`;
969
+ for (let n = 1; n < e.length; n++) t += `L${e[n].x},${e[n].y}`;
970
+ return t;
971
+ }
972
+ function monotonePath(e) {
973
+ if (e.length < 3) return linePath(e);
974
+ let t = e.length, n = [];
975
+ for (let r = 0; r < t; r++) r === 0 ? n.push({
976
+ x: e[1].x - e[0].x,
977
+ y: e[1].y - e[0].y
978
+ }) : r === t - 1 ? n.push({
979
+ x: e[t - 1].x - e[t - 2].x,
980
+ y: e[t - 1].y - e[t - 2].y
981
+ }) : n.push({
982
+ x: (e[r + 1].x - e[r - 1].x) / 2,
983
+ y: (e[r + 1].y - e[r - 1].y) / 2
984
+ });
985
+ let r = `M${e[0].x},${e[0].y}`;
986
+ for (let i = 0; i < t - 1; i++) {
987
+ let t = e[i], a = e[i + 1], o = n[i], s = n[i + 1], c = (a.x - t.x) / 3;
988
+ r += `C${t.x + c},${t.y + o.y / 3},${a.x - c},${a.y - s.y / 3},${a.x},${a.y}`;
989
+ }
990
+ return r;
991
+ }
992
+ function stepPath(e) {
993
+ if (e.length === 0) return "";
994
+ let t = `M${e[0].x},${e[0].y}`;
995
+ for (let n = 1; n < e.length; n++) {
996
+ let r = (e[n - 1].x + e[n].x) / 2;
997
+ t += `H${r}V${e[n].y}H${e[n].x}`;
998
+ }
999
+ return t;
1000
+ }
1001
+ function areaPath(e, t, n = "linear") {
1002
+ if (e.length === 0) return "";
1003
+ let r = n === "monotone" ? monotonePath(e) : n === "step" ? stepPath(e) : linePath(e), i = [...t].reverse();
1004
+ if (i.length > 0) {
1005
+ r += `L${i[0].x},${i[0].y}`;
1006
+ for (let e = 1; e < i.length; e++) r += `L${i[e].x},${i[e].y}`;
1007
+ }
1008
+ return r += "Z", r;
1009
+ }
1010
+ //#endregion
1011
+ //#region src/charts/area/area-renderer.ts
1012
+ var w = /* @__PURE__ */ new WeakMap(), T = /* @__PURE__ */ new WeakMap();
1013
+ function buildLinePath(e, t) {
1014
+ return t === "monotone" ? monotonePath(e) : t === "step" ? stepPath(e) : linePath(e);
1015
+ }
1016
+ function applyAreaFill(e, t, n) {
1017
+ let r = e.querySelector("linearGradient");
1018
+ if (n.fill === "gradient") {
1019
+ if (!r) {
1020
+ let t = createSvgElement("defs");
1021
+ r = createSvgElement("linearGradient", {
1022
+ id: uniqueId("prism-area-fill"),
1023
+ x1: 0,
1024
+ x2: 0,
1025
+ y1: 0,
1026
+ y2: 1
1027
+ }), r.append(createSvgElement("stop", {
1028
+ class: "prism-area-stop-top",
1029
+ offset: 0
1030
+ }), createSvgElement("stop", {
1031
+ class: "prism-area-stop-bottom",
1032
+ offset: 1
1033
+ })), t.appendChild(r), e.insertBefore(t, e.firstChild);
1034
+ }
1035
+ for (let e of r.querySelectorAll("stop")) e.setAttribute("stop-color", n.color), e.style.stopColor = n.color;
1036
+ setAttributes(t, { fill: `url(#${r.id})` });
1037
+ } else r?.parentElement?.remove(), setAttributes(t, { fill: n.color });
1038
+ setAttributes(t, {
1039
+ class: `prism-area-fill prism-area-fill--${n.fill}`,
1040
+ stroke: "none"
1041
+ }), t.style.fillOpacity = n.fillOpacity === void 0 ? "" : String(n.fillOpacity);
1042
+ }
1043
+ function renderArea(e, t, n, r) {
1044
+ let i = resolveMotion(r.transition), a = i.duration, o = resolveEasing(i.easing), s = e.querySelector(".prism-area-fill");
1045
+ s || (s = createSvgElement("path", { class: "prism-area-fill" }), e.appendChild(s)), applyAreaFill(e, s, r);
1046
+ let c = null, l = [], u = [], d = hasStyledRuns(r.marks), f = r.marks ?? [];
1047
+ if (r.showLine) {
1048
+ if (d) {
1049
+ l = computeStyleRuns(f, t.length);
1050
+ let n = [...e.querySelectorAll(".prism-area-line")];
1051
+ for (let e of n.slice(l.length)) e.remove();
1052
+ u = l.map((t, r) => {
1053
+ let i = n[r];
1054
+ if (i) return i;
1055
+ let a = createSvgElement("path", {
1056
+ class: "prism-area-line",
1057
+ fill: "none"
1058
+ });
1059
+ return e.appendChild(a), a;
1060
+ });
1061
+ for (let [e, t] of l.entries()) setAttributes(u[e], {
1062
+ opacity: t.opacity,
1063
+ stroke: r.color,
1064
+ "stroke-dasharray": t.dash,
1065
+ "stroke-width": 2
1066
+ });
1067
+ c = null;
1068
+ } else {
1069
+ let t = [...e.querySelectorAll(".prism-area-line")];
1070
+ for (let e of t.slice(1)) e.remove();
1071
+ c = t[0] ?? null, c || (c = createSvgElement("path", {
1072
+ class: "prism-area-line",
1073
+ fill: "none"
1074
+ }), e.appendChild(c)), setAttributes(c, {
1075
+ opacity: void 0,
1076
+ stroke: r.color,
1077
+ "stroke-dasharray": void 0,
1078
+ "stroke-width": 2
1079
+ });
1080
+ }
1081
+ } else for (let t of e.querySelectorAll(".prism-area-line")) t.remove();
1082
+ let drawLine = (e) => {
1083
+ if (r.showLine) {
1084
+ if (d) for (let [t, n] of l.entries()) setAttributes(u[t], { d: buildLinePath(e.slice(n.start, n.end + 1), r.curve) });
1085
+ else c && setAttributes(c, { d: buildLinePath(e, r.curve) });
1086
+ }
1087
+ };
1088
+ if (a === 0) {
1089
+ let i = t.map((e) => ({
1090
+ x: e.x,
1091
+ y: n
1092
+ }));
1093
+ setAttributes(s, { d: areaPath(t, i, r.curve) }), drawLine(t), T.set(e, t);
1094
+ return;
1095
+ }
1096
+ w.get(e)?.();
1097
+ let p = T.has(e) ? T.get(e) ?? t : t.map((e) => ({
1098
+ x: e.x,
1099
+ y: n
1100
+ })), m = t.map((e, n) => p[n] ?? p[p.length - 1] ?? t[n]), paintFrame = (i) => {
1101
+ let a = t.map((e, t) => ({
1102
+ x: tweenNumber(m[t].x, e.x, i),
1103
+ y: tweenNumber(m[t].y, e.y, i)
1104
+ })), o = a.map((e) => ({
1105
+ x: e.x,
1106
+ y: n
1107
+ }));
1108
+ T.set(e, a), setAttributes(s, { d: areaPath(a, o, r.curve) }), drawLine(a);
1109
+ };
1110
+ paintFrame(0), w.set(e, startTween({
1111
+ count: 1,
1112
+ duration: a,
1113
+ easing: o,
1114
+ onComplete: () => {
1115
+ w.delete(e), T.set(e, t);
1116
+ },
1117
+ onFrame: (e) => paintFrame(e(0)),
1118
+ signal: r.disposalSignal
1119
+ }));
1120
+ }
1121
+ function computeAreaPoints(e, t, n) {
1122
+ return e.some((e) => e.key == null) || e.some((e) => typeof e.key == "string"), e.map((e) => ({
1123
+ x: t.map(e.key),
1124
+ y: n.map(e.value)
1125
+ }));
1126
+ }
1127
+ //#endregion
1128
+ //#region src/charts/area/area-chart.ts
1129
+ function createAreaChart(e, t) {
1130
+ let n = null, r = null, i = t.series;
1131
+ return createChartScaffold(e, t, (e) => {
1132
+ let { groups: a, legend: o, tooltip: s } = e;
1133
+ o?.update(i.map((e, t) => ({
1134
+ color: seriesColor(t, e.color),
1135
+ name: e.name
1136
+ })));
1137
+ let c = e.dimensions, l = chartArea(c.width, c.height, c.margin), u = i.map((e) => e.data), d = u.flat().map((e) => e.key), f = u.flat().map((e) => e.value);
1138
+ if (d.length === 0) {
1139
+ clearCartesianDom(a, o, s, n), r?.replaceChildren();
1140
+ return;
1141
+ }
1142
+ t.crosshair && !n && (n = createCrosshair(e.chartArea, t.crosshair));
1143
+ let p = buildXScale(d, l.width), m = buildYScale(f, l.height), h = m.map(0), g = t.xAxis === !1 ? !1 : t.xAxis ?? {}, _ = t.yAxis !== !1 && {
1144
+ grid: !0,
1145
+ ...t.yAxis
1146
+ };
1147
+ for (_ && _.grid && renderGrid(a.grid, m, _.grid, l.width, "horizontal", resolveTicks(m, _, resolveTickCount(_, l.height, "left"))), g && g.grid && renderGrid(a.grid, p, g.grid, l.height, "vertical", resolveTicks(p, g, resolveTickCount(g, l.width, "bottom"))), g ? (positionAxis(a.xAxis, g.position ?? "bottom", l.width, l.height), renderAxis(a.xAxis, p, g, l.width, "bottom")) : a.xAxis.replaceChildren(), _ ? (positionAxis(a.yAxis, _.position ?? "left", l.width, l.height), renderAxis(a.yAxis, m, _, l.height, "left")) : a.yAxis.replaceChildren(); a.series.children.length > i.length;) a.series.removeChild(a.series.lastChild);
1148
+ let v = [];
1149
+ for (let n = 0; n < i.length; n++) {
1150
+ let r = i[n], o = a.series.children[n];
1151
+ o || (o = createSvgElement("g", { class: "prism-area-series" }), a.series.appendChild(o)), o.setAttribute("data-series-id", seriesDomId(r, n));
1152
+ let s = computeAreaPoints(u[n], p, m);
1153
+ v.push(s), renderArea(o, s, h, {
1154
+ color: seriesColor(n, r.color),
1155
+ curve: r.curve ?? "linear",
1156
+ disposalSignal: e.disposalSignal,
1157
+ fill: r.fill ?? "gradient",
1158
+ fillOpacity: r.fillOpacity,
1159
+ marks: r.data,
1160
+ showLine: r.showLine !== !1,
1161
+ transition: t.transition
1162
+ });
1163
+ }
1164
+ return s?.hide(), r = ensureMarkerGroup(e.chartArea, r), createSeriesInteraction({
1165
+ announcer: e.announcer,
1166
+ colors: () => i.map((e, t) => seriesColor(t, e.color)),
1167
+ crosshair: n,
1168
+ dims: () => e.dimensions,
1169
+ getData: () => u,
1170
+ getPoints: () => v,
1171
+ getSeriesList: () => i,
1172
+ margin: e.dimensions.margin,
1173
+ markers: r,
1174
+ onClick: t.onClick,
1175
+ onHover: t.onHover,
1176
+ seriesGroup: a.series,
1177
+ svg: e.svg,
1178
+ tooltip: s,
1179
+ tooltipFormat: typeof t.tooltip == "object" ? t.tooltip : void 0
1180
+ });
1181
+ }, (e) => {
1182
+ i = e;
1183
+ });
1184
+ }
1185
+ //#endregion
1186
+ //#region src/scales/band.ts
1187
+ function bandScale(e) {
1188
+ let getDomain = () => e.domain, getRange = () => e.range, getBandwidth = () => {
1189
+ let t = getDomain().length;
1190
+ if (t === 0) return 0;
1191
+ let [n, r] = getRange(), i = e.padding ?? .1;
1192
+ return (r - n) / (t + (t - 1) * i + (e.paddingOuter ?? i) * 2);
1193
+ };
1194
+ return {
1195
+ bandwidth: getBandwidth,
1196
+ get domain() {
1197
+ return getDomain();
1198
+ },
1199
+ gap() {
1200
+ let t = e.padding ?? .1;
1201
+ return getBandwidth() * t;
1202
+ },
1203
+ map(t) {
1204
+ let n = getDomain().indexOf(t);
1205
+ if (n === -1) return `${t}`, 0;
1206
+ let [r] = getRange(), i = getBandwidth(), a = e.padding ?? .1;
1207
+ return r + (e.paddingOuter ?? a) * i + n * (i + i * a);
1208
+ },
1209
+ get range() {
1210
+ return getRange();
1211
+ },
1212
+ ticks(e) {
1213
+ let t = getDomain();
1214
+ if (e === void 0 || e >= t.length) return [...t];
1215
+ if (e <= 0) return [];
1216
+ let n = Math.ceil(t.length / e);
1217
+ return t.filter((e, t) => t % n === 0);
1218
+ }
1219
+ };
1220
+ }
1221
+ //#endregion
1222
+ //#region src/charts/bar/bar-hit-test.ts
1223
+ function findCatIdx(e, t, n) {
1224
+ for (let r = 0; r < t.length; r++) {
1225
+ let i = n.bandCenter(t[r]) - n.bandwidth / 2;
1226
+ if (e >= i && e < i + n.bandwidth) return r;
1227
+ }
1228
+ return -1;
1229
+ }
1230
+ function findSeriesIdx(e, t, n, r, i) {
1231
+ if (r.stacked) {
1232
+ if (r.horizontal) {
1233
+ for (let n = 0; n < i; n++) if (r.valueScale.map(r.stackedTops[n]?.[t] ?? 0) >= e.x) return n;
1234
+ return i - 1;
1235
+ }
1236
+ for (let n = 0; n < i; n++) if (r.valueScale.map(r.stackedTops[n]?.[t] ?? 0) <= e.y) return n;
1237
+ return i - 1;
1238
+ }
1239
+ {
1240
+ let a = r.bandwidth / i, o = r.bandCenter(n[t]) - r.bandwidth / 2, s = r.horizontal ? e.y - o : e.x - o, c = Math.floor(s / a);
1241
+ return Math.max(0, Math.min(i - 1, c));
1242
+ }
1243
+ }
1244
+ //#endregion
1245
+ //#region src/animation/reveal.ts
1246
+ var E = /* @__PURE__ */ new WeakMap();
1247
+ function cancelReveal(e) {
1248
+ E.get(e)?.();
1249
+ }
1250
+ function playTraceReveal(e, t, n, r, i, a) {
1251
+ if (cancelReveal(e), i.duration <= 0 || a?.aborted) return () => {};
1252
+ let o = uniqueId("prism-trace"), s = createSvgElement("defs"), c = r / 2, l = createSvgElement("mask", {
1253
+ height: t.height + r,
1254
+ id: o,
1255
+ maskContentUnits: "userSpaceOnUse",
1256
+ maskUnits: "userSpaceOnUse",
1257
+ width: t.width + r,
1258
+ x: -c,
1259
+ y: -c
1260
+ }), u = n.map(({ d: e }) => {
1261
+ let t = createSvgElement("path", {
1262
+ d: e,
1263
+ fill: "none",
1264
+ pathLength: 1,
1265
+ stroke: "white",
1266
+ "stroke-dasharray": "1 1",
1267
+ "stroke-dashoffset": 1,
1268
+ "stroke-width": r
1269
+ });
1270
+ return l.appendChild(t), t;
1271
+ });
1272
+ s.appendChild(l), e.insertBefore(s, e.firstChild), e.setAttribute("mask", `url(#${o})`);
1273
+ let cancelTween = () => {}, finish = () => {
1274
+ E.delete(e), e.removeAttribute("mask"), s.remove(), a?.removeEventListener("abort", finish), cancelTween();
1275
+ };
1276
+ return E.set(e, finish), a?.addEventListener("abort", finish, { once: !0 }), cancelTween = startTween({
1277
+ count: 1,
1278
+ duration: i.duration,
1279
+ easing: resolveEasing(i.easing),
1280
+ onComplete: finish,
1281
+ onFrame: (e) => {
1282
+ let t = e(0);
1283
+ for (let [e, r] of u.entries()) {
1284
+ let { start: i, end: a } = n[e], o = Math.max(0, Math.min(1, (t - i) / (a - i)));
1285
+ r.setAttribute("stroke-dashoffset", String(1 - o));
1286
+ }
1287
+ },
1288
+ signal: a
1289
+ }), finish;
1290
+ }
1291
+ function playGrowReveal(e, t, n, r, i) {
1292
+ if (cancelReveal(e), n(), r.duration <= 0 || t.length === 0 || i.signal?.aborted) return () => {};
1293
+ let a = uniqueId("prism-reveal"), o = createSvgElement("defs"), s = createSvgElement("clipPath", { id: a }), c = t.map((e) => {
1294
+ let t = createSvgElement("rect", {
1295
+ height: 0,
1296
+ width: 0,
1297
+ x: e.x,
1298
+ y: e.y
1299
+ });
1300
+ return s.appendChild(t), t;
1301
+ });
1302
+ o.appendChild(s), e.insertBefore(o, e.firstChild), e.setAttribute("clip-path", `url(#${a})`);
1303
+ let cancelTween = () => {}, finish = () => {
1304
+ E.delete(e), e.removeAttribute("clip-path"), o.remove(), i.signal?.removeEventListener("abort", finish), cancelTween();
1305
+ };
1306
+ return E.set(e, finish), i.signal?.addEventListener("abort", finish, { once: !0 }), cancelTween = startTween({
1307
+ count: t.length,
1308
+ duration: r.duration,
1309
+ easing: resolveEasing(r.easing),
1310
+ onComplete: finish,
1311
+ onFrame: (e) => {
1312
+ for (let [n, r] of c.entries()) {
1313
+ let a = t[n], o = Math.max(0, Math.min(1, e(n)));
1314
+ if (i.axis === "y") {
1315
+ let e = a.anchor + (a.y - a.anchor) * o, t = a.anchor + (a.y + a.height - a.anchor) * o;
1316
+ setAttributes(r, {
1317
+ height: Math.max(0, t - e),
1318
+ width: a.width,
1319
+ y: e
1320
+ });
1321
+ } else {
1322
+ let e = a.anchor + (a.x - a.anchor) * o, t = a.anchor + (a.x + a.width - a.anchor) * o;
1323
+ setAttributes(r, {
1324
+ height: a.height,
1325
+ width: Math.max(0, t - e),
1326
+ x: e
1327
+ });
1328
+ }
1329
+ }
1330
+ },
1331
+ signal: i.signal,
1332
+ stagger: i.stagger
1333
+ }), finish;
1334
+ }
1335
+ //#endregion
1336
+ //#region src/charts/bar/bar-renderer.ts
1337
+ var D = 20, O = 400, k = /* @__PURE__ */ new WeakMap();
1338
+ function barsOf(e) {
1339
+ return [...e.children].filter((e) => e.classList.contains("prism-bar"));
1340
+ }
1341
+ function renderBars(e, t, n, r, i, a) {
1342
+ k.get(e)?.(), k.delete(e);
1343
+ let o = barsOf(e);
1344
+ for (let e of o.slice(t.length)) e.remove();
1345
+ let s = n.bandwidth(), c = a.stacked ? s : s / a.seriesCount, l = Math.max(0, c - 1), u = a.stacked ? 0 : c * a.seriesIndex, d = a.horizontal ?? !1, f = o.length === 0, p = [], m = [], h = [], g = resolveMotion(a.transition, { defaultStagger: f ? 0 : D }), _ = g.duration > 0, v = Math.min(g.stagger, O / Math.max(1, t.length));
1346
+ for (let s = 0; s < t.length; s++) {
1347
+ let c = t[s], g = n.map(c.key) + u, v = a.baselineYs ? a.baselineYs[s] : i, y = r.map(c.y), b = o[s], x = !b;
1348
+ if (b || (b = createSvgElement("rect", { class: "prism-bar" }), e.appendChild(b)), b.style.display = c.present ? "" : "none", setAttributes(b, {
1349
+ opacity: c.opacity,
1350
+ stroke: c.dash ? a.color : void 0,
1351
+ "stroke-dasharray": c.dash,
1352
+ "stroke-width": c.dash ? 1 : void 0
1353
+ }), d) {
1354
+ let e = Math.max(0, Math.abs(v - y)), t = Math.min(y, v);
1355
+ setAttributes(b, {
1356
+ fill: a.color,
1357
+ height: l,
1358
+ rx: a.borderRadius,
1359
+ ry: a.borderRadius,
1360
+ y: g
1361
+ }), f ? (setAttributes(b, {
1362
+ width: e,
1363
+ x: t
1364
+ }), _ && h.push({
1365
+ anchor: v,
1366
+ height: l,
1367
+ width: e,
1368
+ x: t,
1369
+ y: g
1370
+ })) : _ ? x ? (setAttributes(b, {
1371
+ width: 0,
1372
+ x: v
1373
+ }), p.push({
1374
+ attrs: {
1375
+ width: {
1376
+ from: 0,
1377
+ to: e
1378
+ },
1379
+ x: {
1380
+ from: v,
1381
+ to: t
1382
+ }
1383
+ },
1384
+ el: b
1385
+ })) : m.push({
1386
+ attrs: {
1387
+ width: {
1388
+ from: Number(b.getAttribute("width") ?? e),
1389
+ to: e
1390
+ },
1391
+ x: {
1392
+ from: Number(b.getAttribute("x") ?? t),
1393
+ to: t
1394
+ }
1395
+ },
1396
+ el: b
1397
+ }) : setAttributes(b, {
1398
+ width: e,
1399
+ x: t
1400
+ });
1401
+ } else {
1402
+ let e = Math.max(0, Math.abs(v - y)), t = Math.min(y, v);
1403
+ setAttributes(b, {
1404
+ fill: a.color,
1405
+ rx: a.borderRadius,
1406
+ ry: a.borderRadius,
1407
+ width: l,
1408
+ x: g
1409
+ }), f ? (setAttributes(b, {
1410
+ height: e,
1411
+ y: t
1412
+ }), _ && h.push({
1413
+ anchor: v,
1414
+ height: e,
1415
+ width: l,
1416
+ x: g,
1417
+ y: t
1418
+ })) : _ ? x ? (setAttributes(b, {
1419
+ height: 0,
1420
+ y: v
1421
+ }), p.push({
1422
+ attrs: {
1423
+ height: {
1424
+ from: 0,
1425
+ to: e
1426
+ },
1427
+ y: {
1428
+ from: v,
1429
+ to: t
1430
+ }
1431
+ },
1432
+ el: b
1433
+ })) : m.push({
1434
+ attrs: {
1435
+ height: {
1436
+ from: Number(b.getAttribute("height") ?? e),
1437
+ to: e
1438
+ },
1439
+ y: {
1440
+ from: Number(b.getAttribute("y") ?? t),
1441
+ to: t
1442
+ }
1443
+ },
1444
+ el: b
1445
+ }) : setAttributes(b, {
1446
+ height: e,
1447
+ y: t
1448
+ });
1449
+ }
1450
+ }
1451
+ if (_) {
1452
+ let t = [];
1453
+ f && h.length > 0 && t.push(playGrowReveal(e, h, () => {}, g, {
1454
+ axis: d ? "x" : "y",
1455
+ signal: a.disposalSignal,
1456
+ stagger: v
1457
+ })), p.length > 0 && t.push(animate(p, {
1458
+ ...g,
1459
+ stagger: v
1460
+ }, void 0, a.disposalSignal)), m.length > 0 && t.push(animate(m, {
1461
+ ...g,
1462
+ stagger: 0
1463
+ }, void 0, a.disposalSignal)), k.set(e, () => {
1464
+ for (let e of t) e();
1465
+ });
1466
+ }
1467
+ }
1468
+ //#endregion
1469
+ //#region src/charts/bar/bar-chart.ts
1470
+ function variantFlags(e) {
1471
+ return {
1472
+ horizontal: e === "grouped-horizontal" || e === "stacked-horizontal",
1473
+ stacked: e === "stacked" || e === "stacked-horizontal"
1474
+ };
1475
+ }
1476
+ function createBarChart(e, t) {
1477
+ let n = t.series, r = null;
1478
+ return createChartScaffold(e, t, (e, i) => {
1479
+ let { groups: a, legend: o, tooltip: s } = e;
1480
+ o?.update(n.map((e, t) => ({
1481
+ color: seriesColor(t, e.color),
1482
+ name: e.name
1483
+ })));
1484
+ let c = e.dimensions, l = chartArea(c.width, c.height, c.margin), u = n.map((e) => e.data), d = normalizeCartesianSeries(n, u), f = d.domain, p = d.series.map(({ byKey: e }) => f.map((t) => e.get(t))), categoryAxis = (e) => ({
1485
+ ...e,
1486
+ tickFormat: (t) => {
1487
+ let n = String(t), r = d.labels.get(n) ?? t;
1488
+ return e.tickFormat ? e.tickFormat(r) : String(r);
1489
+ }
1490
+ });
1491
+ if (f.length === 0) {
1492
+ clearCartesianDom(a, o, s), r?.remove(), r = null;
1493
+ return;
1494
+ }
1495
+ let { horizontal: m, stacked: h } = variantFlags(t.variant ?? "grouped"), g = t.xAxis === !1 ? !1 : m ? {
1496
+ grid: !0,
1497
+ ...t.xAxis
1498
+ } : t.xAxis ?? {}, _ = t.yAxis === !1 ? !1 : m ? t.yAxis ?? {} : {
1499
+ grid: !0,
1500
+ ...t.yAxis
1501
+ }, v, y;
1502
+ if (h) {
1503
+ p.some((e) => e.some((e) => (e?.value ?? 0) < 0));
1504
+ let e = f.map((e, t) => p.reduce((e, n) => e + Math.max(0, n[t]?.value ?? 0), 0));
1505
+ v = Math.max(...e), y = 0;
1506
+ } else {
1507
+ let e = p.flatMap((e) => e.flatMap((e) => e ? [e.value] : []));
1508
+ v = Math.max(...e), y = Math.min(0, ...e);
1509
+ }
1510
+ let b = bandScale(m ? {
1511
+ domain: f,
1512
+ range: [0, l.height]
1513
+ } : {
1514
+ domain: f,
1515
+ range: [0, l.width]
1516
+ }), x = linearScale(m ? {
1517
+ domain: [y, v],
1518
+ range: [0, l.width]
1519
+ } : {
1520
+ domain: [y, v],
1521
+ range: [l.height, 0]
1522
+ }), S = [], C = Object.create(null);
1523
+ for (let e of f) C[e] = 0;
1524
+ let w = {
1525
+ bandCenter: (e) => b.map(e) + b.bandwidth() / 2,
1526
+ bandwidth: b.bandwidth(),
1527
+ baselinePx: x.map(0),
1528
+ horizontal: m,
1529
+ stacked: h,
1530
+ stackedTops: S,
1531
+ valueScale: x
1532
+ };
1533
+ if (m) {
1534
+ if (g && g.grid && renderGrid(a.grid, x, g.grid, l.height, "vertical", resolveTicks(x, g, resolveTickCount(g, l.width, "bottom"))), _ !== !1) {
1535
+ let e = categoryAxis(_);
1536
+ positionAxis(a.yAxis, e.position ?? "left", l.width, l.height), renderAxis(a.yAxis, b, e, l.height, "left");
1537
+ }
1538
+ g && (positionAxis(a.xAxis, g.position ?? "bottom", l.width, l.height), renderAxis(a.xAxis, x, g, l.width, "bottom"));
1539
+ } else {
1540
+ if (_ && _.grid && renderGrid(a.grid, x, _.grid, l.width, "horizontal", resolveTicks(x, _, resolveTickCount(_, l.height, "left"))), g !== !1) {
1541
+ let e = categoryAxis(g);
1542
+ positionAxis(a.xAxis, e.position ?? "bottom", l.width, l.height), renderAxis(a.xAxis, b, e, l.width, "bottom");
1543
+ }
1544
+ _ && (positionAxis(a.yAxis, _.position ?? "left", l.width, l.height), renderAxis(a.yAxis, x, _, l.height, "left"));
1545
+ }
1546
+ let T = h ? 0 : Number.parseFloat(getComputedStyle(e.svg).getPropertyValue("--prism-bar-radius")) || 0;
1547
+ for (; a.series.children.length > n.length;) {
1548
+ let e = a.series.lastElementChild;
1549
+ e && a.series.removeChild(e);
1550
+ }
1551
+ for (let r = 0; r < n.length; r++) {
1552
+ let o = n[r], s = a.series.children[r];
1553
+ s || (s = createSvgElement("g", { class: "prism-bar-series" }), a.series.appendChild(s)), s.setAttribute("data-series-id", seriesDomId(o, r));
1554
+ let c = f.map((e, t) => {
1555
+ let n = p[r]?.[t];
1556
+ if (h) {
1557
+ let t = C[e] ?? 0, r = t + Math.max(0, n?.value ?? 0);
1558
+ return C[e] = r, {
1559
+ base: t,
1560
+ dash: n?.dash,
1561
+ key: e,
1562
+ opacity: n?.opacity,
1563
+ present: n !== void 0,
1564
+ y: r
1565
+ };
1566
+ }
1567
+ return {
1568
+ base: 0,
1569
+ dash: n?.dash,
1570
+ key: e,
1571
+ opacity: n?.opacity,
1572
+ present: n !== void 0,
1573
+ y: n?.value ?? 0
1574
+ };
1575
+ });
1576
+ S[r] = c.map((e) => e.y);
1577
+ let l = h ? c.map((e) => x.map(e.base)) : void 0;
1578
+ renderBars(s, c, b, x, w.baselinePx, {
1579
+ baselineYs: l,
1580
+ borderRadius: o.borderRadius ?? T,
1581
+ color: seriesColor(r, o.color),
1582
+ disposalSignal: e.disposalSignal,
1583
+ horizontal: m,
1584
+ seriesCount: n.length,
1585
+ seriesIndex: r,
1586
+ stacked: h,
1587
+ transition: i !== "resize" && t.transition
1588
+ });
1589
+ }
1590
+ s?.hide(), a.series.classList.toggle("prism-bars-stacked", h), (!r || !e.chartArea.contains(r)) && (r = createSvgElement("rect", {
1591
+ "aria-hidden": "true",
1592
+ class: "prism-bar-band",
1593
+ "pointer-events": "none"
1594
+ }), e.chartArea.insertBefore(r, a.series)), r.style.display = "none";
1595
+ let E = n.map((e, t) => seriesColor(t, e.color)), labelOf = (e) => String(d.labels.get(f[e]) ?? f[e]), D = typeof t.tooltip == "object" ? t.tooltip : void 0, keyOf = (e) => d.labels.get(f[e]) ?? f[e], titleOf = (e) => D?.titleFormat ? D.titleFormat(keyOf(e)) : labelOf(e), O = D?.valueFormat ?? String, k = -1, valuesAt = (e) => n.map((t, n) => ({
1596
+ datum: p[n]?.[e],
1597
+ series: t
1598
+ })), eventAt = (e, t, r) => {
1599
+ let i = valuesAt(e), a = i[t]?.datum ? t : i.findIndex((e) => e.datum), o = i[a]?.datum;
1600
+ return o ? {
1601
+ datum: o,
1602
+ originalEvent: r,
1603
+ series: n[a],
1604
+ values: i
1605
+ } : null;
1606
+ }, setActive = (t) => {
1607
+ k = t, a.series.classList.toggle("prism-bars-focused", t >= 0);
1608
+ for (let e of a.series.children) for (let [n, r] of [...e.children].entries()) r.classList.toggle("prism-bar--active", n === t);
1609
+ if (!r || (r.style.display = t < 0 ? "none" : "", t < 0)) return;
1610
+ let n = w.bandCenter(f[t]) - b.bandwidth() / 2 - b.gap() / 2, i = b.bandwidth() + b.gap(), o = chartArea(e.dimensions.width, e.dimensions.height, e.dimensions.margin);
1611
+ setAttributes(r, m ? {
1612
+ height: i,
1613
+ width: o.width,
1614
+ x: 0,
1615
+ y: n
1616
+ } : {
1617
+ height: o.height,
1618
+ width: i,
1619
+ x: n,
1620
+ y: 0
1621
+ });
1622
+ }, activate = (n, r, i) => {
1623
+ let a = eventAt(n, r, i);
1624
+ if (!a) return;
1625
+ setActive(n);
1626
+ let o = a.values ?? [], c = describeValues(titleOf(n), o, O);
1627
+ if (s) {
1628
+ let t = o.map((e, t) => h ? S[t]?.[n] ?? 0 : Math.max(0, e.datum?.value ?? 0)), r = x.map(Math.max(...t)), i = w.bandCenter(f[n]), { margin: l } = e.dimensions, u = o.flatMap((e, t) => e.datum ? [{
1629
+ color: E[t],
1630
+ name: e.series.name,
1631
+ value: O(e.datum.value, e.datum, e.series)
1632
+ }] : []);
1633
+ s.show((m ? r : i) + l.left, (m ? i : r) + l.top, a.datum, a.series, comparisonContent(e.svg.ownerDocument, titleOf(n), u, c));
1634
+ } else e.announcer.announce(c);
1635
+ t.onHover?.(a);
1636
+ }, deactivate = () => {
1637
+ setActive(-1), s?.hide(), e.announcer.clear(), t.onHover?.(null);
1638
+ }, hit = (t) => {
1639
+ let r = e.dimensions, i = getMousePosition(e.svg, t, r.margin.left, r.margin.top), a = chartArea(r.width, r.height, r.margin);
1640
+ if (i.x < 0 || i.x > a.width || i.y < 0 || i.y > a.height) return null;
1641
+ let o = findCatIdx(m ? i.y : i.x, f, w);
1642
+ return o === -1 ? null : {
1643
+ catIdx: o,
1644
+ seriesIdx: findSeriesIdx(i, o, f, w, n.length)
1645
+ };
1646
+ }, onMouseMove = (e) => {
1647
+ let t = hit(e);
1648
+ t ? activate(t.catIdx, t.seriesIdx, e) : k >= 0 && deactivate();
1649
+ }, onClick = (e) => {
1650
+ let n = t.onClick && hit(e), r = n && eventAt(n.catIdx, n.seriesIdx, e);
1651
+ r && t.onClick?.(r);
1652
+ }, onKeyDown = (e) => {
1653
+ let n = f.length - 1, r = k < 0 ? n : Math.max(0, k - 1), i = k < 0 ? 0 : Math.min(n, k + 1), a = {
1654
+ ArrowDown: i,
1655
+ ArrowLeft: r,
1656
+ ArrowRight: i,
1657
+ ArrowUp: r,
1658
+ End: n,
1659
+ Home: 0
1660
+ };
1661
+ if (e.key in a) e.preventDefault(), activate(a[e.key], 0, e);
1662
+ else if ((e.key === "Enter" || e.key === " ") && k >= 0 && t.onClick) {
1663
+ e.preventDefault();
1664
+ let n = eventAt(k, 0, e);
1665
+ n && t.onClick(n);
1666
+ } else e.key === "Escape" && deactivate();
1667
+ };
1668
+ return {
1669
+ onClick,
1670
+ onKeyDown,
1671
+ onMouseLeave: deactivate,
1672
+ onMouseMove
1673
+ };
1674
+ }, (e) => {
1675
+ n = e;
1676
+ });
1677
+ }
1678
+ //#endregion
1679
+ //#region src/charts/line/line-renderer.ts
1680
+ var A = /* @__PURE__ */ new WeakMap(), j = /* @__PURE__ */ new WeakMap();
1681
+ function buildPath(e, t) {
1682
+ return t === "monotone" ? monotonePath(e) : t === "step" ? stepPath(e) : linePath(e);
1683
+ }
1684
+ function renderLine(e, t, n) {
1685
+ let r = hasStyledRuns(n.marks), i = n.marks ?? [], a = resolveMotion(n.transition), o = a.duration, s = resolveEasing(a.easing), c = null, l = [], u = [];
1686
+ if (r) {
1687
+ l = computeStyleRuns(i, t.length);
1688
+ let r = [...e.querySelectorAll(".prism-line-path")];
1689
+ for (let e of r.slice(l.length)) e.remove();
1690
+ u = l.map((t, n) => {
1691
+ let i = r[n];
1692
+ if (i) return i;
1693
+ let a = createSvgElement("path", {
1694
+ class: "prism-line-path",
1695
+ fill: "none"
1696
+ });
1697
+ return e.appendChild(a), a;
1698
+ });
1699
+ for (let [e, t] of l.entries()) setAttributes(u[e], {
1700
+ opacity: t.opacity,
1701
+ stroke: n.color,
1702
+ "stroke-dasharray": t.dash,
1703
+ "stroke-width": n.strokeWidth ?? 2
1704
+ }), u[e].style.strokeWidth = n.strokeWidth === void 0 ? "" : String(n.strokeWidth);
1705
+ } else {
1706
+ let t = [...e.querySelectorAll(".prism-line-path")];
1707
+ c = t[0] ?? null;
1708
+ for (let e of t.slice(1)) e.remove();
1709
+ c || (c = createSvgElement("path", {
1710
+ class: "prism-line-path",
1711
+ fill: "none"
1712
+ }), e.appendChild(c)), setAttributes(c, {
1713
+ opacity: void 0,
1714
+ stroke: n.color,
1715
+ "stroke-dasharray": void 0,
1716
+ "stroke-width": n.strokeWidth ?? 2
1717
+ }), c.style.strokeWidth = n.strokeWidth === void 0 ? "" : String(n.strokeWidth);
1718
+ }
1719
+ let draw = (e) => {
1720
+ if (r) for (let [t, r] of l.entries()) setAttributes(u[t], { d: buildPath(e.slice(r.start, r.end + 1), n.curve) });
1721
+ else setAttributes(c, { d: buildPath(e, n.curve) });
1722
+ }, d = e.querySelector(".prism-line-dots");
1723
+ if (n.showPoints ? d || (d = createSvgElement("g", { class: "prism-line-dots" }), e.appendChild(d)) : d &&= (d.remove(), null), o === 0) {
1724
+ if (A.get(e)?.(), cancelReveal(e), draw(t), j.set(e, t), d) {
1725
+ for (; d.children.length > t.length;) d.removeChild(d.lastChild);
1726
+ for (let e = 0; e < t.length; e++) {
1727
+ let r = d.children[e];
1728
+ r || (r = createSvgElement("circle", { class: "prism-line-dot" }), d.appendChild(r)), setAttributes(r, {
1729
+ cx: t[e].x,
1730
+ cy: t[e].y,
1731
+ fill: n.color,
1732
+ opacity: i[e]?.opacity,
1733
+ r: n.pointRadius
1734
+ });
1735
+ }
1736
+ }
1737
+ return;
1738
+ }
1739
+ A.get(e)?.(), cancelReveal(e);
1740
+ let f = !j.has(e);
1741
+ if (d) {
1742
+ for (; d.children.length > t.length;) d.removeChild(d.lastChild);
1743
+ for (let e = d.children.length; e < t.length; e++) {
1744
+ let t = createSvgElement("circle", { class: "prism-line-dot" });
1745
+ setAttributes(t, {
1746
+ fill: n.color,
1747
+ opacity: i[e]?.opacity,
1748
+ r: n.pointRadius
1749
+ }), d.appendChild(t);
1750
+ }
1751
+ for (let e = 0; e < d.children.length; e++) setAttributes(d.children[e], { opacity: i[e]?.opacity });
1752
+ }
1753
+ if (f) {
1754
+ if (draw(t), j.set(e, t), d) for (let [e, n] of t.entries()) {
1755
+ let t = d.children[e];
1756
+ t && setAttributes(t, {
1757
+ cx: n.x,
1758
+ cy: n.y
1759
+ });
1760
+ }
1761
+ if (t.length > 1) {
1762
+ let i = c ?? u[0], a = n.strokeWidth ?? (Number.parseFloat(getComputedStyle(i).strokeWidth) || 2), o = r ? l.map((e, n) => ({
1763
+ d: u[n].getAttribute("d"),
1764
+ end: e.end / (t.length - 1),
1765
+ start: e.start / (t.length - 1)
1766
+ })) : [{
1767
+ d: c.getAttribute("d"),
1768
+ end: 1,
1769
+ start: 0
1770
+ }];
1771
+ playTraceReveal(e, n.bounds, o, Math.max(a, n.showPoints ? n.pointRadius * 2 : 0) + 2, resolveMotion(n.transition, { defaultDuration: 420 }), n.disposalSignal);
1772
+ }
1773
+ return;
1774
+ }
1775
+ let p = [], m = j.get(e) ?? t;
1776
+ for (let [e, n] of t.entries()) p.push(m[e] ?? m.at(-1) ?? n);
1777
+ let paintFrame = (n) => {
1778
+ let r = t.map((e, t) => {
1779
+ let r = p[t] ?? e;
1780
+ return {
1781
+ x: tweenNumber(r.x, e.x, n),
1782
+ y: tweenNumber(r.y, e.y, n)
1783
+ };
1784
+ });
1785
+ if (j.set(e, r), draw(r), d) for (let e = 0; e < t.length; e++) {
1786
+ let t = d.children[e];
1787
+ t && setAttributes(t, {
1788
+ cx: r[e].x,
1789
+ cy: r[e].y
1790
+ });
1791
+ }
1792
+ };
1793
+ paintFrame(0), A.set(e, startTween({
1794
+ count: 1,
1795
+ duration: o,
1796
+ easing: s,
1797
+ onComplete: () => {
1798
+ A.delete(e), j.set(e, t);
1799
+ },
1800
+ onFrame: (e) => paintFrame(e(0)),
1801
+ signal: n.disposalSignal
1802
+ }));
1803
+ }
1804
+ function computePoints(e, t, n) {
1805
+ return e.some((e) => e.key == null) || e.some((e) => typeof e.key == "string"), e.map((e) => ({
1806
+ x: t.map(e.key),
1807
+ y: n.map(e.value)
1808
+ }));
1809
+ }
1810
+ //#endregion
1811
+ //#region src/charts/line/line-chart.ts
1812
+ function createLineChart(e, t) {
1813
+ let n = null, r = null, i = null, a = t.series;
1814
+ return createChartScaffold(e, t, (e, o) => {
1815
+ let { groups: s, legend: c, tooltip: l } = e;
1816
+ c?.update(a.map((e, t) => ({
1817
+ color: seriesColor(t, e.color),
1818
+ name: e.name
1819
+ })));
1820
+ let u = e.dimensions, d = a.some((e) => e.yAxis === "right"), f = a.some((e) => e.yAxis !== "right" && e.data.length > 0), p = {
1821
+ ...resolveMargin(t.margin),
1822
+ right: t.margin?.right ?? (d ? t.rightYAxis?.label ? 72 : 50 : resolveMargin(t.margin).right)
1823
+ }, m = chartArea(u.width, u.height, p), h = a.map((e) => e.data), g = h.flat().map((e) => e.key), _ = a.filter((e) => e.yAxis !== "right").flatMap((e) => e.data.map((e) => e.value)), v = a.filter((e) => e.yAxis === "right").flatMap((e) => e.data.map((e) => e.value));
1824
+ if (g.length === 0) {
1825
+ clearCartesianDom(s, c, l, n), r?.replaceChildren(), i?.replaceChildren();
1826
+ return;
1827
+ }
1828
+ t.crosshair && !n && (n = createCrosshair(e.chartArea, t.crosshair));
1829
+ let y = buildXScale(g, m.width), b = buildYScale(_, m.height), x = buildYScale(v, m.height), S = t.xAxis === !1 ? !1 : t.xAxis ?? {}, C = t.yAxis !== !1 && {
1830
+ grid: !0,
1831
+ ...t.yAxis
1832
+ };
1833
+ if (C && C.grid && (!d || f) ? renderGrid(s.grid, b, C.grid, m.width, "horizontal", resolveTicks(b, C, resolveTickCount(C, m.height, "left"))) : s.grid.replaceChildren(), S && S.grid && renderGrid(s.grid, y, S.grid, m.height, "vertical", resolveTicks(y, S, resolveTickCount(S, m.width, "bottom"))), S ? (positionAxis(s.xAxis, S.position ?? "bottom", m.width, m.height), renderAxis(s.xAxis, y, S, m.width, "bottom")) : s.xAxis.replaceChildren(), C && (!d || f)) {
1834
+ let e = {
1835
+ ...C,
1836
+ position: d ? "left" : C.position ?? "left"
1837
+ };
1838
+ positionAxis(s.yAxis, e.position, m.width, m.height), renderAxis(s.yAxis, b, e, m.height, "left");
1839
+ } else s.yAxis.replaceChildren();
1840
+ if (d) {
1841
+ i || (i = createSvgElement("g", { class: "prism-y-axis-right" }), e.chartArea.appendChild(i));
1842
+ let n = {
1843
+ ...t.rightYAxis,
1844
+ position: "right"
1845
+ };
1846
+ positionAxis(i, "right", m.width, m.height), renderAxis(i, x, n, m.height, "right");
1847
+ } else i?.replaceChildren();
1848
+ for (; s.series.children.length > a.length;) s.series.removeChild(s.series.lastChild);
1849
+ let w = [];
1850
+ for (let n = 0; n < a.length; n++) {
1851
+ let r = a[n], i = s.series.children[n];
1852
+ i || (i = createSvgElement("g", { class: "prism-line-series" }), s.series.appendChild(i)), i.setAttribute("data-series-id", seriesDomId(r, n));
1853
+ let c = r.yAxis === "right" ? x : b, l = computePoints(h[n], y, c);
1854
+ w.push(l), renderLine(i, l, {
1855
+ bounds: {
1856
+ height: m.height,
1857
+ width: m.width
1858
+ },
1859
+ color: seriesColor(n, r.color),
1860
+ curve: r.curve ?? "linear",
1861
+ disposalSignal: e.disposalSignal,
1862
+ marks: r.data,
1863
+ pointRadius: r.pointRadius ?? 3,
1864
+ showPoints: r.showPoints ?? !1,
1865
+ strokeWidth: r.strokeWidth,
1866
+ transition: o !== "resize" && t.transition
1867
+ });
1868
+ }
1869
+ return l?.hide(), r = ensureMarkerGroup(e.chartArea, r), createSeriesInteraction({
1870
+ announcer: e.announcer,
1871
+ colors: () => a.map((e, t) => seriesColor(t, e.color)),
1872
+ crosshair: n,
1873
+ dims: () => e.dimensions,
1874
+ getData: () => h,
1875
+ getPoints: () => w,
1876
+ getSeriesList: () => a,
1877
+ margin: p,
1878
+ markers: r,
1879
+ onClick: t.onClick,
1880
+ onHover: t.onHover,
1881
+ seriesGroup: s.series,
1882
+ svg: e.svg,
1883
+ tooltip: l,
1884
+ tooltipFormat: typeof t.tooltip == "object" ? t.tooltip : void 0
1885
+ });
1886
+ }, (e) => {
1887
+ a = e;
1888
+ });
1889
+ }
1890
+ //#endregion
1891
+ //#region src/core/polar.ts
1892
+ function polarX(e, t, n) {
1893
+ return e + t * Math.sin(n);
1894
+ }
1895
+ function polarY(e, t, n) {
1896
+ return e - t * Math.cos(n);
1897
+ }
1898
+ function polarPoint(e, t, n, r) {
1899
+ return `${polarX(e, n, r)},${polarY(t, n, r)}`;
1900
+ }
1901
+ //#endregion
1902
+ //#region src/charts/pie/pie-renderer.ts
1903
+ function computeArcs(e, t, n, r, i, a, o, s, c, l, u = !1) {
1904
+ let d = e.reduce((e, t) => e + Math.max(0, t.value), 0);
1905
+ if (d === 0) return [];
1906
+ let f = o - a, p = r > 0 ? Math.asin(Math.min(1, s / 2 / r)) : 0, m = a, h = e.length;
1907
+ return e.map((e, a) => {
1908
+ let o = Math.max(0, e.value) / d * f, s = m, g = m + o;
1909
+ m += o;
1910
+ let _ = Math.min(p, o / 2);
1911
+ return {
1912
+ capEnd: u && a === h - 1,
1913
+ capStart: u && a === 0,
1914
+ centerX: t,
1915
+ centerY: n,
1916
+ color: e.color ?? l(a),
1917
+ cornerRadius: c,
1918
+ endAngle: g,
1919
+ index: a,
1920
+ innerRadius: i,
1921
+ outerRadius: r,
1922
+ padAngle: _,
1923
+ slice: e,
1924
+ startAngle: s
1925
+ };
1926
+ });
1927
+ }
1928
+ function arcPath(e) {
1929
+ let { capEnd: t, capStart: n, centerX: r, centerY: i, cornerRadius: a, endAngle: o, innerRadius: s, outerRadius: c, padAngle: l, startAngle: u } = e, d = o - u;
1930
+ if (d <= 0) return "";
1931
+ if (d >= 2 * Math.PI - 1e-6) {
1932
+ let e = u + Math.PI;
1933
+ return s <= 0 ? `M${polarPoint(r, i, c, u)}A${c},${c},0,1,1,${polarPoint(r, i, c, e)}A${c},${c},0,1,1,${polarPoint(r, i, c, u)}Z` : [
1934
+ `M${polarPoint(r, i, c, u)}`,
1935
+ `A${c},${c},0,1,1,${polarPoint(r, i, c, e)}`,
1936
+ `A${c},${c},0,1,1,${polarPoint(r, i, c, u)}`,
1937
+ `M${polarPoint(r, i, s, u)}`,
1938
+ `A${s},${s},0,1,0,${polarPoint(r, i, s, e)}`,
1939
+ `A${s},${s},0,1,0,${polarPoint(r, i, s, u)}`,
1940
+ "Z"
1941
+ ].join("");
1942
+ }
1943
+ let f = n ? u : u + l, p = t ? o : o - l;
1944
+ if (p <= f) return "";
1945
+ let m = p - f;
1946
+ if (a <= 0) {
1947
+ let e = +(m > Math.PI);
1948
+ return s <= 0 ? `M${r},${i}L${polarPoint(r, i, c, f)}A${c},${c},0,${e},1,${polarPoint(r, i, c, p)}Z` : [
1949
+ `M${polarPoint(r, i, c, f)}`,
1950
+ `A${c},${c},0,${e},1,${polarPoint(r, i, c, p)}`,
1951
+ `L${polarPoint(r, i, s, p)}`,
1952
+ `A${s},${s},0,${e},0,${polarPoint(r, i, s, f)}`,
1953
+ "Z"
1954
+ ].join("");
1955
+ }
1956
+ let h = Math.min(a / c, m / 2), g = Math.min(a / s, m / 2), _ = Math.min(a, (c - s) / 2), v = (c - s) / 2, y = f + (n ? 0 : h), b = p - (t ? 0 : h), x = f + (n ? 0 : g), S = p - (t ? 0 : g), C = +(b - y > Math.PI), w = +(S - x > Math.PI), T = polarX(r, c, f), E = polarY(i, c, f), D = polarX(r, c, p), O = polarY(i, c, p), k = polarX(r, s, f), A = polarY(i, s, f), j = polarX(r, s, p), M = polarY(i, s, p), N = _ / (c - s), P = `${T + (k - T) * N},${E + (A - E) * N}`, F = `${D + (j - D) * N},${O + (M - O) * N}`, I = `${k + (T - k) * N},${A + (E - A) * N}`, L = `${j + (D - j) * N},${M + (O - M) * N}`, R = [];
1957
+ return n ? R.push(`M${polarPoint(r, i, c, f)}`) : (R.push(`M${P}`), R.push(`Q${T},${E},${polarPoint(r, i, c, y)}`)), R.push(`A${c},${c},0,${C},1,${polarPoint(r, i, c, b)}`), t ? R.push(`A${v},${v},0,0,1,${polarPoint(r, i, s, p)}`) : (R.push(`Q${D},${O},${F}`), R.push(`L${L}`), R.push(`Q${j},${M},${polarPoint(r, i, s, S)}`)), R.push(`A${s},${s},0,${w},0,${polarPoint(r, i, s, x)}`), n ? R.push(`A${v},${v},0,0,0,${polarPoint(r, i, c, f)}`) : R.push(`Q${k},${A},${I}`), R.push("Z"), R.join("");
1958
+ }
1959
+ function arcCentroid(e) {
1960
+ let t = (e.startAngle + e.endAngle) / 2, n = (e.outerRadius + e.innerRadius) / 2;
1961
+ return {
1962
+ x: e.centerX + n * Math.sin(t),
1963
+ y: e.centerY - n * Math.cos(t)
1964
+ };
1965
+ }
1966
+ //#endregion
1967
+ //#region src/charts/pie/pie-chart.ts
1968
+ var M = 2 * Math.PI, N = 12;
1969
+ function labelFits(e, t) {
1970
+ let n = e.outerRadius - e.innerRadius, r = (e.outerRadius + e.innerRadius) / 2, i = (e.endAngle - e.startAngle - 2 * e.padAngle) * r;
1971
+ return n >= N * 1.4 && i >= estimateTextWidth(t, N) + 8;
1972
+ }
1973
+ var P = -Math.PI / 2, F = Math.PI / 2;
1974
+ function semiAngles(e) {
1975
+ return e === "semi" ? {
1976
+ end: F,
1977
+ start: P
1978
+ } : {
1979
+ end: M,
1980
+ start: 0
1981
+ };
1982
+ }
1983
+ function createPieChart(e, t) {
1984
+ let n = t.variant ?? "pie", r = t.padPixels ?? (n === "pie" ? 0 : 8), i = t.cornerRadius ?? (n === "pie" ? 0 : 8), a = t.data, o = createSvgElement("circle", {
1985
+ class: "prism-pie-bg",
1986
+ "pointer-events": "none"
1987
+ }), s = createSvgElement("g", {
1988
+ class: "prism-pie-slices",
1989
+ "shape-rendering": "geometricPrecision"
1990
+ }), c = createSvgElement("g", {
1991
+ class: "prism-pie-labels",
1992
+ "pointer-events": "none"
1993
+ }), l = [], u = [], d = null;
1994
+ function renderLabels(e) {
1995
+ c.replaceChildren();
1996
+ for (let t = 0; t < l.length; t++) {
1997
+ let n = l[t], r = e[t];
1998
+ if (!r?.label || !labelFits(n, r.label)) continue;
1999
+ let { x: i, y: a } = arcCentroid(n), o = createSvgElement("text", { class: "prism-pie-label" });
2000
+ setAttributes(o, {
2001
+ "dominant-baseline": "middle",
2002
+ fill: "var(--prism-pie-label-color, #fff)",
2003
+ "font-family": "var(--prism-font-family, system-ui)",
2004
+ "font-size": "var(--prism-pie-label-size, 12px)",
2005
+ "text-anchor": "middle",
2006
+ x: i,
2007
+ y: a
2008
+ }), o.textContent = r.label, c.appendChild(o);
2009
+ }
2010
+ }
2011
+ return createRadialScaffold(e, {
2012
+ a11y: t.a11y,
2013
+ legend: t.legend,
2014
+ tooltip: t.tooltip
2015
+ }, (f) => {
2016
+ let { legend: p, svg: m, tooltip: h } = f, g = a.some((e) => e.value > 0);
2017
+ p?.update(g ? a.map((e, t) => ({
2018
+ color: e.color ?? seriesColor(t),
2019
+ name: e.label ?? ""
2020
+ })) : []), m.contains(o) || (m.appendChild(o), m.appendChild(s), m.appendChild(c));
2021
+ let { height: _, width: v } = f.dimensions, y = n === "semi", b = v / 2, x = y ? _ * .85 : _ / 2, S = y ? Math.min(b, x) - 8 : Math.min(v, _) / 2 - 8, C = n === "pie" ? 0 : Math.round(S * .55), w = t.innerRadius === void 0 ? C : t.innerRadius, T = Math.max(w + 1, S), E = a, { end: D, start: O } = semiAngles(n);
2022
+ for (l = computeArcs(E, b, x, T, w, O, D, r, i, (e) => seriesColor(e), !1), setAttributes(o, {
2023
+ cx: b,
2024
+ cy: x,
2025
+ r: w > 0 ? w : 0
2026
+ }), o.setAttribute("style", "fill:var(--prism-bg,#fff)"); s.children.length > l.length;) s.removeChild(s.lastChild);
2027
+ c.replaceChildren();
2028
+ let k = resolveMotion(t.transition), A = k.duration, j = resolveEasing(k.easing);
2029
+ for (let e = 0; e < l.length; e++) {
2030
+ let n = l[e], r = s.children[e];
2031
+ r || (r = createSvgElement("path", { class: "prism-pie-slice" }), s.appendChild(r)), r.setAttribute("fill", n.color), r.setAttribute("stroke", "none"), r.style.cursor = t.onClick || t.onHover ? "pointer" : "";
2032
+ }
2033
+ d?.();
2034
+ let M = u.length === 0, N = u;
2035
+ d = startTween({
2036
+ count: 1,
2037
+ duration: A,
2038
+ easing: j,
2039
+ onComplete: () => renderLabels(E),
2040
+ onFrame: (e) => {
2041
+ let t = e(0);
2042
+ if (M) {
2043
+ let e = tweenNumber(O, D, t);
2044
+ u = l.map((t, n) => {
2045
+ let r = s.children[n];
2046
+ if (!r) return t;
2047
+ if (e <= t.startAngle) return setAttributes(r, { d: "" }), {
2048
+ ...t,
2049
+ endAngle: t.startAngle
2050
+ };
2051
+ let i = Math.min(t.endAngle, e);
2052
+ return setAttributes(r, { d: arcPath({
2053
+ ...t,
2054
+ endAngle: i
2055
+ }) }), {
2056
+ ...t,
2057
+ endAngle: i
2058
+ };
2059
+ });
2060
+ } else u = l.map((e, n) => {
2061
+ let r = s.children[n], i = N.at(-1), a = N[n] ?? {
2062
+ ...e,
2063
+ endAngle: i?.endAngle ?? O,
2064
+ startAngle: i?.endAngle ?? O
2065
+ }, o = {
2066
+ ...e,
2067
+ endAngle: tweenNumber(a.endAngle, e.endAngle, t),
2068
+ innerRadius: tweenNumber(a.innerRadius, e.innerRadius, t),
2069
+ outerRadius: tweenNumber(a.outerRadius, e.outerRadius, t),
2070
+ padAngle: tweenNumber(a.padAngle, e.padAngle, t),
2071
+ startAngle: tweenNumber(a.startAngle, e.startAngle, t)
2072
+ };
2073
+ return r && setAttributes(r, { d: o.endAngle - o.startAngle <= 1e-6 ? "" : arcPath(o) }), o;
2074
+ });
2075
+ },
2076
+ signal: f.disposalSignal
2077
+ }), h?.hide();
2078
+ let P = l.reduce((e, t) => e + Math.max(0, t.slice.value), 0), F = -1, describe = (e) => {
2079
+ let t = P > 0 ? Math.round(Math.max(0, e.slice.value) / P * 1e3) / 10 : 0;
2080
+ return `${e.slice.label ?? `Slice ${e.index + 1}`}: ${e.slice.value} (${t}%)`;
2081
+ }, setActive = (e) => {
2082
+ F = e, s.classList.toggle("prism-pie-focused", e >= 0);
2083
+ for (let [t, n] of [...s.children].entries()) n.classList.toggle("prism-pie-slice--active", t === e);
2084
+ }, activate = (n, r) => {
2085
+ let i = l[n];
2086
+ if (!i) return;
2087
+ setActive(n), t.onHover?.({
2088
+ index: n,
2089
+ originalEvent: r,
2090
+ slice: i.slice
2091
+ });
2092
+ let a = describe(i);
2093
+ if (!h) {
2094
+ f.announcer.announce(a);
2095
+ return;
2096
+ }
2097
+ let { x: o, y: s } = arcCentroid(i), c = m.getBoundingClientRect(), u = e.getBoundingClientRect();
2098
+ h.show(o + (c.left - u.left), s + (c.top - u.top), {
2099
+ key: n,
2100
+ value: i.slice.value
2101
+ }, {
2102
+ color: i.color,
2103
+ data: [],
2104
+ name: i.slice.label ?? ""
2105
+ }, a);
2106
+ }, deactivate = () => {
2107
+ setActive(-1), h?.hide(), f.announcer.clear(), t.onHover?.(null);
2108
+ }, hitAt = (e) => {
2109
+ let t = m.getBoundingClientRect();
2110
+ return hitTestArc(l, e.clientX - t.left, e.clientY - t.top, n);
2111
+ }, onMouseMove = (e) => {
2112
+ let t = hitAt(e);
2113
+ t >= 0 ? t !== F && activate(t, e) : F >= 0 && deactivate();
2114
+ }, onClick = (e) => {
2115
+ if (!t.onClick) return;
2116
+ let n = hitAt(e);
2117
+ n >= 0 && t.onClick({
2118
+ index: n,
2119
+ originalEvent: e,
2120
+ slice: l[n].slice
2121
+ });
2122
+ }, onKeyDown = (e) => {
2123
+ let n = l.length;
2124
+ if (n === 0) return;
2125
+ let r = {
2126
+ ArrowDown: 1,
2127
+ ArrowLeft: -1,
2128
+ ArrowRight: 1,
2129
+ ArrowUp: -1
2130
+ };
2131
+ e.key in r ? (e.preventDefault(), activate(F < 0 ? r[e.key] > 0 ? 0 : n - 1 : (F + r[e.key] + n) % n, e)) : e.key === "Home" || e.key === "End" ? (e.preventDefault(), activate(e.key === "Home" ? 0 : n - 1, e)) : (e.key === "Enter" || e.key === " ") && F >= 0 && t.onClick ? (e.preventDefault(), t.onClick({
2132
+ index: F,
2133
+ originalEvent: e,
2134
+ slice: l[F].slice
2135
+ })) : e.key === "Escape" && deactivate();
2136
+ };
2137
+ return {
2138
+ onClick,
2139
+ onKeyDown,
2140
+ onMouseLeave: deactivate,
2141
+ onMouseMove
2142
+ };
2143
+ }, (e) => {
2144
+ a = e;
2145
+ });
2146
+ }
2147
+ function hitTestArc(e, t, n, r) {
2148
+ for (let i = 0; i < e.length; i++) {
2149
+ let a = e[i], o = t - a.centerX, s = n - a.centerY, c = Math.sqrt(o * o + s * s);
2150
+ if (c < a.outerRadius && c >= a.innerRadius) {
2151
+ let e = Math.atan2(o, -s);
2152
+ if (r === "semi") {
2153
+ if (e >= a.startAngle - 1e-9 && e <= a.endAngle + 1e-9) return i;
2154
+ } else {
2155
+ let t = e < 0 ? e + M : e;
2156
+ if (t >= a.startAngle - 1e-9 && t <= a.endAngle + 1e-9) return i;
2157
+ }
2158
+ }
2159
+ }
2160
+ return -1;
2161
+ }
2162
+ //#endregion
2163
+ //#region src/charts/radar/radar-geometry.ts
2164
+ var I = 2 * Math.PI;
2165
+ function toRadians(e) {
2166
+ return e * Math.PI / 180;
2167
+ }
2168
+ function axisAngles(e, t = 0) {
2169
+ return Array.from({ length: e }, (n, r) => t + r * I / e);
2170
+ }
2171
+ function resolveAxisDomains(e, t, n) {
2172
+ let r = n;
2173
+ if (!r) {
2174
+ let e = t.flatMap((e) => e.data.map((e) => e.value)).filter(Number.isFinite), n = Math.min(0, ...e), i = e.length ? Math.max(...e) : 1;
2175
+ r = linearScale({
2176
+ domain: [n, i > n ? i : n + 1],
2177
+ range: [0, 1]
2178
+ }).domain;
2179
+ }
2180
+ return e.map((e) => [e.min ?? r[0], e.max ?? r[1]]);
2181
+ }
2182
+ function normalize(e, [t, n]) {
2183
+ return n === t ? 0 : Math.max(0, Math.min(1, (e - t) / (n - t)));
2184
+ }
2185
+ function radarPoints(e, t, n, r, i) {
2186
+ return e.map((e, a) => ({
2187
+ x: polarX(t, r * e, i[a]),
2188
+ y: polarY(n, r * e, i[a])
2189
+ }));
2190
+ }
2191
+ function closedPath(e, t = "linear") {
2192
+ let n = e.length;
2193
+ if (n === 0) return "";
2194
+ let [r] = e;
2195
+ if (t === "linear" || n < 3) return `M${r.x},${r.y}${e.slice(1).map((e) => `L${e.x},${e.y}`).join("")}Z`;
2196
+ let i = `M${r.x},${r.y}`;
2197
+ for (let t = 0; t < n; t++) {
2198
+ let r = e[(t - 1 + n) % n], a = e[t], o = e[(t + 1) % n], s = e[(t + 2) % n];
2199
+ i += `C${a.x + (o.x - r.x) / 6},${a.y + (o.y - r.y) / 6} ${o.x - (s.x - a.x) / 6},${o.y - (s.y - a.y) / 6} ${o.x},${o.y}`;
2200
+ }
2201
+ return `${i}Z`;
2202
+ }
2203
+ function ringPath(e, t, n, r, i) {
2204
+ return r <= 0 ? "" : e === "circle" ? `M${t},${n - r}A${r},${r} 0 1 1 ${t},${n + r}A${r},${r} 0 1 1 ${t},${n - r}Z` : closedPath(radarPoints(i.map(() => 1), t, n, r, i));
2205
+ }
2206
+ function labelPlacement(e) {
2207
+ let t = Math.sin(e), n = Math.cos(e);
2208
+ return {
2209
+ anchor: Math.abs(t) < .1 ? "middle" : t > 0 ? "start" : "end",
2210
+ baseline: n > .9 ? "auto" : n < -.9 ? "hanging" : "middle"
2211
+ };
2212
+ }
2213
+ function fitRadius(e, t, n, r, i, a) {
2214
+ let o = 0;
2215
+ n.forEach((e, t) => {
2216
+ labelPlacement(r[t]).anchor !== "middle" && (o = Math.max(o, estimateTextWidth(e, i)));
2217
+ });
2218
+ let s = i * 1.3;
2219
+ return Math.max(8, Math.min(e / 2 - a - o, t / 2 - a - s));
2220
+ }
2221
+ function nearestAxis(e, t, n, r = 0) {
2222
+ if (n === 0) return -1;
2223
+ let i = I / n, a = ((Math.atan2(e, -t) - r) % I + I) % I;
2224
+ return Math.round(a / i) % n;
2225
+ }
2226
+ //#endregion
2227
+ //#region src/charts/radar/radar-chart.ts
2228
+ var L = 11, R = 12, z = 10, B = {
2229
+ ArrowDown: 1,
2230
+ ArrowLeft: -1,
2231
+ ArrowRight: 1,
2232
+ ArrowUp: -1
2233
+ };
2234
+ function resolveGrid(e) {
2235
+ return e === !1 ? null : {
2236
+ bands: !0,
2237
+ labels: !1,
2238
+ levels: 4,
2239
+ shape: "polygon",
2240
+ ...typeof e == "object" ? e : {}
2241
+ };
2242
+ }
2243
+ function createRadarChart(e, t) {
2244
+ let { axes: n } = t, r = t.curve ?? "linear", i = t.fill ?? "solid", a = t.showPoints ?? !0, o = resolveGrid(t.grid), s = toRadians(t.startAngle ?? 0), c = axisAngles(n.length, s), l = R + (t.showValues ? z : 0), u = uniqueId("prism-radar"), d = t.series, f = createSvgElement("g", { class: "prism-radar" }), p = createSvgElement("defs"), m = createSvgElement("g", {
2245
+ "aria-hidden": "true",
2246
+ class: "prism-radar-grid"
2247
+ }), h = createSvgElement("g", { class: "prism-radar-series-group" }), g = createSvgElement("g", {
2248
+ "aria-hidden": "true",
2249
+ class: "prism-radar-labels"
2250
+ });
2251
+ f.append(p, m, h, g);
2252
+ let _ = [], v = null, y = -1, b = {
2253
+ cx: 0,
2254
+ cy: 0,
2255
+ radius: 0
2256
+ }, datumAt = (e, t) => e.data.find((e) => e.key === n[t].key), valuesAt = (e) => d.map((t) => ({
2257
+ datum: datumAt(t, e),
2258
+ series: t
2259
+ })), formatValue = (e, t) => n[e].format?.(t) ?? String(t), describe = (e) => describeValues(n[e].label, valuesAt(e), (t) => formatValue(e, t));
2260
+ function draw(e) {
2261
+ let { cx: t, cy: n, radius: i } = b;
2262
+ e.forEach((e, a) => {
2263
+ let o = h.children[a];
2264
+ if (!o) return;
2265
+ let s = radarPoints(e, t, n, i, c);
2266
+ o.querySelector(".prism-radar-area")?.setAttribute("d", closedPath(s, r)), o.querySelectorAll(".prism-radar-point").forEach((e, t) => {
2267
+ setAttributes(e, {
2268
+ cx: s[t].x,
2269
+ cy: s[t].y
2270
+ });
2271
+ }), o.querySelectorAll(".prism-radar-value").forEach((r, a) => {
2272
+ let o = i * e[a] + z;
2273
+ setAttributes(r, {
2274
+ x: polarX(t, o, c[a]),
2275
+ y: polarY(n, o, c[a])
2276
+ });
2277
+ });
2278
+ });
2279
+ }
2280
+ function renderGrid(e) {
2281
+ if (m.replaceChildren(), !o) return;
2282
+ let { cx: t, cy: n, radius: r } = b, i = Math.max(1, Math.round(o.levels)), a = Array.from({ length: i }, (e, a) => ringPath(o.shape, t, n, r * (a + 1) / i, c));
2283
+ if (o.bands) for (let e = i - 1; e >= 0; e -= 2) m.appendChild(createSvgElement("path", {
2284
+ class: "prism-radar-band",
2285
+ d: `${a[e]}${a[e - 1] ?? ""}`,
2286
+ "fill-rule": "evenodd"
2287
+ }));
2288
+ for (let e of a) m.appendChild(createSvgElement("path", {
2289
+ class: "prism-radar-ring",
2290
+ d: e,
2291
+ fill: "none"
2292
+ }));
2293
+ c.forEach((e, i) => {
2294
+ m.appendChild(createSvgElement("line", {
2295
+ class: "prism-radar-spoke",
2296
+ "data-axis": i,
2297
+ x1: t,
2298
+ x2: polarX(t, r, e),
2299
+ y1: n,
2300
+ y2: polarY(n, r, e)
2301
+ }));
2302
+ });
2303
+ let [s, l] = e[0], u = e.every(([e, t]) => e === s && t === l);
2304
+ if (!o.labels || !u) return;
2305
+ let d = c[0] + Math.PI / c.length;
2306
+ for (let e = 1; e <= i; e++) {
2307
+ let a = r * e / i, o = createSvgElement("text", {
2308
+ class: "prism-radar-level",
2309
+ "dominant-baseline": "middle",
2310
+ "text-anchor": "middle",
2311
+ x: polarX(t, a, d),
2312
+ y: polarY(n, a, d)
2313
+ });
2314
+ o.textContent = formatValue(0, Math.round((s + (l - s) * e / i) * 100) / 100), m.appendChild(o);
2315
+ }
2316
+ }
2317
+ function renderLabels() {
2318
+ g.replaceChildren();
2319
+ let { cx: e, cy: t, radius: r } = b;
2320
+ n.forEach((n, i) => {
2321
+ let { anchor: a, baseline: o } = labelPlacement(c[i]), s = createSvgElement("text", {
2322
+ class: "prism-radar-axis-label",
2323
+ "dominant-baseline": o,
2324
+ "text-anchor": a,
2325
+ x: polarX(e, r + l, c[i]),
2326
+ y: polarY(t, r + l, c[i])
2327
+ });
2328
+ s.textContent = n.label, g.appendChild(s);
2329
+ });
2330
+ }
2331
+ function renderSeries() {
2332
+ let { cx: e, cy: r, radius: o } = b;
2333
+ for (p.replaceChildren(); h.children.length > d.length;) h.lastChild?.remove();
2334
+ d.forEach((s, l) => {
2335
+ let d = s.color ?? seriesColor(l), f = h.children[l];
2336
+ f || (f = createSvgElement("g", { class: "prism-radar-series" }), h.appendChild(f)), f.setAttribute("data-series-id", seriesDomId(s, l)), f.replaceChildren();
2337
+ let m = createSvgElement("path", {
2338
+ class: `prism-radar-area prism-radar-area--${i}`,
2339
+ stroke: d,
2340
+ "stroke-linejoin": "round",
2341
+ "stroke-width": 2
2342
+ });
2343
+ if (i === "gradient") {
2344
+ let t = `${u}-fill-${l}`, n = createSvgElement("radialGradient", {
2345
+ cx: e,
2346
+ cy: r,
2347
+ gradientUnits: "userSpaceOnUse",
2348
+ id: t,
2349
+ r: o
2350
+ });
2351
+ for (let [e, t] of [[0, .08], [1, .55]]) n.appendChild(createSvgElement("stop", {
2352
+ offset: e,
2353
+ "stop-color": d,
2354
+ "stop-opacity": t,
2355
+ style: `stop-color:${d}`
2356
+ }));
2357
+ p.appendChild(n), setAttributes(m, { fill: `url(#${t})` });
2358
+ } else setAttributes(m, {
2359
+ fill: i === "none" ? "none" : d,
2360
+ "fill-opacity": .25
2361
+ });
2362
+ f.appendChild(m), a && n.forEach((e, t) => {
2363
+ let n = !Number.isFinite(datumAt(s, t)?.value);
2364
+ f.appendChild(createSvgElement("circle", {
2365
+ class: `prism-radar-point${n ? " prism-radar-point--missing" : ""}`,
2366
+ "data-axis": t,
2367
+ fill: n ? "none" : d,
2368
+ r: 3,
2369
+ stroke: d
2370
+ }));
2371
+ }), t.showValues && n.forEach((e, t) => {
2372
+ let n = datumAt(s, t), { anchor: r, baseline: i } = labelPlacement(c[t]), a = createSvgElement("text", {
2373
+ "aria-hidden": "true",
2374
+ class: "prism-radar-value",
2375
+ "dominant-baseline": i,
2376
+ "text-anchor": r
2377
+ });
2378
+ a.textContent = n && Number.isFinite(n.value) ? formatValue(t, n.value) : "", f.appendChild(a);
2379
+ });
2380
+ });
2381
+ }
2382
+ function setActive(e) {
2383
+ y = e;
2384
+ for (let t of f.querySelectorAll("[data-axis]")) {
2385
+ let n = Number(t.getAttribute("data-axis")) === e;
2386
+ t.classList.toggle(t.tagName === "line" ? "prism-radar-spoke--active" : "prism-radar-point--active", n);
2387
+ }
2388
+ }
2389
+ function animateTo(e, n) {
2390
+ v?.();
2391
+ let r = e.map((e, t) => e.map((e, n) => _[t]?.[n] ?? 0)), i = resolveMotion(t.transition, { defaultDuration: 400 }), a = resolveEasing(i.easing ?? "ease-out"), o = r.every((t, n) => t.every((t, r) => t === e[n][r]));
2392
+ i.duration === 0 || o ? (_ = e, draw(e)) : v = startTween({
2393
+ count: e.length,
2394
+ duration: i.duration,
2395
+ easing: a,
2396
+ onFrame: (t) => {
2397
+ _ = e.map((e, n) => {
2398
+ let i = t(n);
2399
+ return e.map((e, t) => tweenNumber(r[n][t], e, i));
2400
+ }), draw(_);
2401
+ },
2402
+ signal: n,
2403
+ stagger: i.stagger
2404
+ });
2405
+ }
2406
+ return createRadialScaffold(e, {
2407
+ a11y: t.a11y,
2408
+ legend: t.legend,
2409
+ tooltip: t.tooltip
2410
+ }, (r) => {
2411
+ let { legend: i, svg: a, tooltip: o } = r;
2412
+ if (a.contains(f) || a.appendChild(f), o?.hide(), i?.update(d.map((e, t) => ({
2413
+ color: e.color ?? seriesColor(t),
2414
+ name: e.name
2415
+ }))), n.length < 3) {
2416
+ for (let e of [
2417
+ p,
2418
+ m,
2419
+ h,
2420
+ g
2421
+ ]) e.replaceChildren();
2422
+ _ = [];
2423
+ return;
2424
+ }
2425
+ let { height: u, width: v } = r.dimensions, x = fitRadius(v, u, n.map((e) => e.label), c, L, l);
2426
+ b = {
2427
+ cx: v / 2,
2428
+ cy: u / 2,
2429
+ radius: x
2430
+ };
2431
+ let S = resolveAxisDomains(n, d, t.domain);
2432
+ renderGrid(S), renderLabels(), renderSeries(), animateTo(d.map((e) => n.map((t, n) => {
2433
+ let r = datumAt(e, n)?.value;
2434
+ return r !== void 0 && Number.isFinite(r) ? normalize(r, S[n]) : 0;
2435
+ })), r.disposalSignal), setActive(y);
2436
+ let eventFor = (e, t) => ({
2437
+ axis: n[e],
2438
+ index: e,
2439
+ originalEvent: t,
2440
+ values: valuesAt(e)
2441
+ }), activate = (i, s) => {
2442
+ setActive(i), t.onHover?.(eventFor(i, s));
2443
+ let l = describe(i);
2444
+ if (!o) {
2445
+ r.announcer.announce(l);
2446
+ return;
2447
+ }
2448
+ let u = Math.max(0, ..._.map((e) => e[i] ?? 0)), f = a.getBoundingClientRect(), p = e.getBoundingClientRect(), m = valuesAt(i), h = m.find((e) => e.datum)?.datum, g = m.flatMap(({ datum: e, series: t }) => e ? [{
2449
+ color: t.color ?? seriesColor(d.indexOf(t)),
2450
+ name: t.name,
2451
+ value: formatValue(i, e.value)
2452
+ }] : []);
2453
+ o.show(polarX(b.cx, b.radius * u, c[i]) + (f.left - p.left), polarY(b.cy, b.radius * u, c[i]) + (f.top - p.top), {
2454
+ key: n[i].key,
2455
+ meta: {
2456
+ axis: n[i],
2457
+ text: l,
2458
+ values: m
2459
+ },
2460
+ value: h?.value ?? 0
2461
+ }, {
2462
+ color: d[0]?.color ?? seriesColor(0),
2463
+ data: [],
2464
+ name: n[i].label
2465
+ }, comparisonContent(a.ownerDocument, n[i].label, g, l));
2466
+ }, deactivate = () => {
2467
+ setActive(-1), t.onHover?.(null), o?.hide(), r.announcer.clear();
2468
+ }, hitIndex = (e) => {
2469
+ let t = a.getBoundingClientRect(), r = e.clientX - t.left - b.cx, i = e.clientY - t.top - b.cy;
2470
+ return Math.hypot(r, i) > b.radius + l + 22 ? -1 : nearestAxis(r, i, n.length, s);
2471
+ };
2472
+ return {
2473
+ onClick(e) {
2474
+ let n = hitIndex(e);
2475
+ n >= 0 && t.onClick?.(eventFor(n, e));
2476
+ },
2477
+ onKeyDown(e) {
2478
+ let r = B[e.key];
2479
+ r === void 0 ? (e.key === "Enter" || e.key === " ") && y >= 0 && t.onClick ? (e.preventDefault(), t.onClick(eventFor(y, e))) : e.key === "Escape" && deactivate() : (e.preventDefault(), activate(y < 0 ? 0 : (y + r + n.length) % n.length, e));
2480
+ },
2481
+ onMouseLeave: deactivate,
2482
+ onMouseMove(e) {
2483
+ let t = hitIndex(e);
2484
+ t < 0 ? y >= 0 && deactivate() : t !== y && activate(t, e);
2485
+ }
2486
+ };
2487
+ }, (e) => {
2488
+ d = e;
2489
+ });
2490
+ }
2491
+ //#endregion
2492
+ //#region src/interaction/scatter-interaction.ts
2493
+ function createScatterInteraction(e) {
2494
+ let t = -1, n = !1, hitAt = (t, n) => {
2495
+ let r = e.getData()[t]?.[n], i = e.getPoints()[t]?.[n];
2496
+ return r && i ? {
2497
+ datum: r,
2498
+ point: i,
2499
+ seriesIndex: t
2500
+ } : null;
2501
+ }, renderedHit = (t) => {
2502
+ let n = t.target;
2503
+ return !(n instanceof SVGElement) || !n.classList.contains("prism-scatter-point") || !n.parentElement || n.parentElement.parentNode !== e.seriesGroup ? null : hitAt([...e.seriesGroup.children].indexOf(n.parentElement), [...n.parentElement.children].indexOf(n));
2504
+ }, nearestHit = (t) => {
2505
+ let n = null, r = Infinity;
2506
+ for (let [i, a] of e.getPoints().entries()) for (let e of a.keys()) {
2507
+ let a = hitAt(i, e);
2508
+ if (!a) continue;
2509
+ let o = Math.hypot(a.point.x - t.x, a.point.y - t.y);
2510
+ o < r && (r = o, n = a);
2511
+ }
2512
+ return n;
2513
+ }, orderedHits = () => {
2514
+ let t = [];
2515
+ for (let [n, r] of e.getData().entries()) for (let e of r.keys()) {
2516
+ let r = hitAt(n, e);
2517
+ r && t.push(r);
2518
+ }
2519
+ return t.sort((e, t) => e.point.x - t.point.x || e.point.y - t.point.y || e.seriesIndex - t.seriesIndex);
2520
+ }, eventFor = (t, n) => ({
2521
+ datum: t.datum,
2522
+ originalEvent: n,
2523
+ series: e.getSeriesList()[t.seriesIndex]
2524
+ }), highlight = (t) => {
2525
+ let n = [...e.seriesGroup.children];
2526
+ e.markers.replaceChildren(), t && e.markers.appendChild(createSvgElement("circle", {
2527
+ class: "prism-active-point",
2528
+ cx: t.point.x,
2529
+ cy: t.point.y,
2530
+ fill: e.colors()[t.seriesIndex],
2531
+ r: 4
2532
+ })), e.seriesGroup.classList.toggle("prism-series-focused", t !== null && n.length > 1);
2533
+ for (let [e, r] of n.entries()) r.classList.toggle("prism-series-active", e === t?.seriesIndex);
2534
+ }, clear = () => {
2535
+ e.crosshair?.hide(), e.tooltip?.hide(), e.announcer.clear(), highlight(null), n = !1, e.onHover?.(null);
2536
+ }, focus = (t, r, i) => {
2537
+ let a = e.dims(), o = chartArea(a.width, a.height, e.margin), s = e.crosshair?.snap === !1 && r, c = eventFor(t, i), { datum: l, series: u } = c, d = e.tooltipFormat?.titleFormat ? e.tooltipFormat.titleFormat(l.key) : keyLabel(l.key), f = e.tooltipFormat?.valueFormat, p = describeValues(d, [{
2538
+ datum: l,
2539
+ series: u
2540
+ }], f ?? String);
2541
+ if (e.crosshair?.show(s ? r.x : t.point.x, s ? r.y : t.point.y, o.width, o.height), highlight(t), e.tooltip) {
2542
+ let n = {
2543
+ color: e.colors()[t.seriesIndex],
2544
+ name: u.name,
2545
+ value: f ? f(l.value, l, u) : String(l.value)
2546
+ };
2547
+ e.tooltip.show(t.point.x + e.margin.left, t.point.y + e.margin.top, l, u, comparisonContent(e.svg.ownerDocument, d, [n], p));
2548
+ } else e.announcer.announce(p);
2549
+ n = !0, e.onHover?.(c);
2550
+ }, pointerHit = (t) => {
2551
+ let n = renderedHit(t);
2552
+ if (n) return {
2553
+ hit: n,
2554
+ raw: n.point
2555
+ };
2556
+ let r = e.dims(), i = getMousePosition(e.svg, t, e.margin.left, e.margin.top), a = chartArea(r.width, r.height, e.margin);
2557
+ if (i.x < 0 || i.x > a.width || i.y < 0 || i.y > a.height) return null;
2558
+ let o = nearestHit(i);
2559
+ return o ? {
2560
+ hit: o,
2561
+ raw: i
2562
+ } : null;
2563
+ }, onMouseMove = (e) => {
2564
+ let t = pointerHit(e);
2565
+ t ? focus(t.hit, t.raw, e) : n && clear();
2566
+ }, onClick = (t) => {
2567
+ if (!e.onClick) return;
2568
+ let n = pointerHit(t);
2569
+ n && e.onClick(eventFor(n.hit, t));
2570
+ }, onKeyDown = (n) => {
2571
+ let r = orderedHits();
2572
+ if (r.length === 0) return;
2573
+ let i = r.length - 1, a = {
2574
+ ArrowLeft: t < 0 ? i : Math.max(0, t - 1),
2575
+ ArrowRight: t < 0 ? 0 : Math.min(i, t + 1),
2576
+ End: i,
2577
+ Home: 0
2578
+ };
2579
+ n.key in a ? (n.preventDefault(), t = a[n.key], focus(r[t], null, n)) : (n.key === "Enter" || n.key === " ") && t >= 0 && e.onClick ? (n.preventDefault(), e.onClick(eventFor(r[t], n))) : n.key === "Escape" && (t = -1, clear());
2580
+ };
2581
+ return {
2582
+ onClick,
2583
+ onKeyDown,
2584
+ onMouseLeave: clear,
2585
+ onMouseMove
2586
+ };
2587
+ }
2588
+ //#endregion
2589
+ //#region src/charts/scatter/scatter-renderer.ts
2590
+ var V = 400, H = /* @__PURE__ */ new WeakMap(), U = /* @__PURE__ */ new WeakMap();
2591
+ function computeScatterPoints(e, t, n) {
2592
+ return e.some((e) => e.key == null) || e.some((e) => typeof e.key == "string"), e.map((e) => ({
2593
+ x: t.map(e.key),
2594
+ y: n.map(e.value)
2595
+ }));
2596
+ }
2597
+ function renderScatterPoints(e, t, n) {
2598
+ let r = resolveMotion(n.transition), i = n.marks ?? [], a = n.pointRadius;
2599
+ for (H.get(e)?.(), H.delete(e); e.children.length > t.length;) e.lastChild.remove();
2600
+ let o = U.get(e) ?? [], s = [], c = t.map((t, r) => {
2601
+ let a = e.children[r];
2602
+ return a ? s.push(Number(a.getAttribute("r")) || 0) : (a = createSvgElement("circle", { class: "prism-scatter-point" }), e.appendChild(a), s.push(0)), setAttributes(a, {
2603
+ fill: n.color,
2604
+ opacity: i[r]?.opacity
2605
+ }), a;
2606
+ }), paint = (t, n) => {
2607
+ for (let [e, r] of c.entries()) setAttributes(r, {
2608
+ cx: t[e].x,
2609
+ cy: t[e].y,
2610
+ r: n(e)
2611
+ });
2612
+ U.set(e, t);
2613
+ };
2614
+ if (r.duration === 0) {
2615
+ paint(t, () => a);
2616
+ return;
2617
+ }
2618
+ let l = t.map((e, t) => o[t] ?? e), u = t.map((e, t) => t).filter((e) => e >= o.length), d = new Map([...u].sort((e, n) => t[e].x - t[n].x).map((e, t) => [e, t])), f = Math.min(r.stagger, V / Math.max(1, u.length)), paintFrame = (e) => {
2619
+ let n = t.map((t, n) => e(d.get(n) ?? 0));
2620
+ paint(t.map((e, t) => ({
2621
+ x: tweenNumber(l[t].x, e.x, n[t]),
2622
+ y: tweenNumber(l[t].y, e.y, n[t])
2623
+ })), (e) => tweenNumber(s[e], a, n[e]));
2624
+ };
2625
+ paintFrame(() => 0), H.set(e, startTween({
2626
+ count: Math.max(1, u.length),
2627
+ duration: r.duration,
2628
+ easing: resolveEasing(r.easing),
2629
+ onComplete: () => {
2630
+ H.delete(e), paint(t, () => a);
2631
+ },
2632
+ onFrame: paintFrame,
2633
+ signal: n.disposalSignal,
2634
+ stagger: f
2635
+ }));
2636
+ }
2637
+ //#endregion
2638
+ //#region src/charts/scatter/scatter-chart.ts
2639
+ function createScatterChart(e, t) {
2640
+ let n = null, r = null, i = t.series;
2641
+ return createChartScaffold(e, t, (e, a) => {
2642
+ let { groups: o, legend: s, tooltip: c } = e;
2643
+ s?.update(i.map((e, t) => ({
2644
+ color: seriesColor(t, e.color),
2645
+ name: e.name
2646
+ })));
2647
+ let l = e.dimensions, u = chartArea(l.width, l.height, l.margin), d = i.map((e) => e.data), f = d.flat().map((e) => e.key), p = d.flat().map((e) => e.value);
2648
+ if (f.length === 0) {
2649
+ clearCartesianDom(o, s, c, n), r?.replaceChildren();
2650
+ return;
2651
+ }
2652
+ t.crosshair && !n && (n = createCrosshair(e.chartArea, t.crosshair));
2653
+ let m = buildXScale(f, u.width), h = buildYScale(p, u.height, !1), g = t.xAxis === !1 ? !1 : t.xAxis ?? {}, _ = t.yAxis !== !1 && {
2654
+ grid: !0,
2655
+ ...t.yAxis
2656
+ };
2657
+ for (_ && _.grid ? renderGrid(o.grid, h, _.grid, u.width, "horizontal", resolveTicks(h, _, resolveTickCount(_, u.height, "left"))) : o.grid.replaceChildren(), g && g.grid && renderGrid(o.grid, m, g.grid, u.height, "vertical", resolveTicks(m, g, resolveTickCount(g, u.width, "bottom"))), g ? (positionAxis(o.xAxis, g.position ?? "bottom", u.width, u.height), renderAxis(o.xAxis, m, g, u.width, "bottom")) : o.xAxis.replaceChildren(), _ ? (positionAxis(o.yAxis, _.position ?? "left", u.width, u.height), renderAxis(o.yAxis, h, _, u.height, "left")) : o.yAxis.replaceChildren(); o.series.children.length > i.length;) o.series.removeChild(o.series.lastChild);
2658
+ let v = [];
2659
+ for (let [n, r] of i.entries()) {
2660
+ let i = o.series.children[n];
2661
+ i || (i = createSvgElement("g", { class: "prism-scatter-series" }), o.series.appendChild(i)), i.setAttribute("data-series-id", seriesDomId(r, n));
2662
+ let s = computeScatterPoints(r.data, m, h);
2663
+ v.push(s), renderScatterPoints(i, s, {
2664
+ color: seriesColor(n, r.color),
2665
+ disposalSignal: e.disposalSignal,
2666
+ marks: r.data,
2667
+ pointRadius: r.pointRadius ?? 3,
2668
+ transition: a !== "resize" && t.transition
2669
+ });
2670
+ }
2671
+ return c?.hide(), r = ensureMarkerGroup(e.chartArea, r), createScatterInteraction({
2672
+ announcer: e.announcer,
2673
+ colors: () => i.map((e, t) => seriesColor(t, e.color)),
2674
+ crosshair: n,
2675
+ dims: () => e.dimensions,
2676
+ getData: () => d,
2677
+ getPoints: () => v,
2678
+ getSeriesList: () => i,
2679
+ margin: l.margin,
2680
+ markers: r,
2681
+ onClick: t.onClick,
2682
+ onHover: t.onHover,
2683
+ seriesGroup: o.series,
2684
+ svg: e.svg,
2685
+ tooltip: c,
2686
+ tooltipFormat: typeof t.tooltip == "object" ? t.tooltip : void 0
2687
+ });
2688
+ }, (e) => {
2689
+ i = e;
2690
+ });
2691
+ }
2692
+ //#endregion
2693
+ //#region src/charts/sparkline/sparkline.ts
2694
+ var W = 5;
2695
+ function buildTopPoints(e, t, n) {
2696
+ if (e.length === 0) return [];
2697
+ let r = t / Math.max(1, e.length - 1), i = Math.min(...e), a = Math.max(...e) - i || 1;
2698
+ return e.map((e, t) => ({
2699
+ x: t * r,
2700
+ y: n - (e - i) / a * n
2701
+ }));
2702
+ }
2703
+ function buildAreaPathFromPoints(e, t, n) {
2704
+ return e.length === 0 ? "" : areaPath(e, e.map((e) => ({
2705
+ x: e.x,
2706
+ y: t
2707
+ })), n ?? "linear");
2708
+ }
2709
+ function buildPathFromPoints(e, t) {
2710
+ return e.length === 0 ? "" : t === "monotone" ? monotonePath(e) : t === "step" ? stepPath(e) : linePath(e);
2711
+ }
2712
+ function isStackData(e) {
2713
+ return e.length > 0 && e[0] !== null && typeof e[0] == "object";
2714
+ }
2715
+ function buildRoundedStackRect(e, t, n, r, i, a, o) {
2716
+ let s = Math.min(i, n / 2, r / 2), c = a ? s : 0, l = a ? s : 0, u = o ? s : 0, d = o ? s : 0;
2717
+ return [
2718
+ `M${e + c},${t}`,
2719
+ `H${e + n - u}`,
2720
+ u ? `Q${e + n},${t} ${e + n},${t + u}` : "",
2721
+ `V${t + r - d}`,
2722
+ d ? `Q${e + n},${t + r} ${e + n - d},${t + r}` : "",
2723
+ `H${e + l}`,
2724
+ l ? `Q${e},${t + r} ${e},${t + r - l}` : "",
2725
+ `V${t + c}`,
2726
+ c ? `Q${e},${t} ${e + c},${t}` : "",
2727
+ "Z"
2728
+ ].filter(Boolean).join("");
2729
+ }
2730
+ function defaultStackColor(e) {
2731
+ return `var(--prism-color-${e % 8 + 1})`;
2732
+ }
2733
+ function createSparkline(e, t) {
2734
+ let n = t.variant ?? "line", r = t.color ?? "var(--prism-color-1)", i = t.curve ?? "linear", a = t.strokeWidth ?? 1.5, o = t.fillOpacity, s = t.showEndPoint ?? !0, c = uniqueId("prism-spark-fill"), l = createTappers(), u = resolveMotion(t.transition), d = resolveEasing(u.easing), f = t.data, p = null, m = null, h = createChartBase(e, {
2735
+ a11y: t.a11y,
2736
+ margin: {
2737
+ bottom: 0,
2738
+ left: 0,
2739
+ right: 0,
2740
+ top: 0
2741
+ }
2742
+ }, () => {
2743
+ l.emit({
2744
+ height: h.dimensions.height,
2745
+ type: "resize",
2746
+ width: h.dimensions.width
2747
+ }), renderAll();
2748
+ }), { svg: g } = h;
2749
+ g.classList.add("prism-sparkline");
2750
+ let _ = createSvgElement("g", { class: "prism-spark-inner" });
2751
+ g.appendChild(_);
2752
+ let cleanupInteraction;
2753
+ function plotArea() {
2754
+ let { height: e, width: t } = h.dimensions, r = n === "line" || n === "area" ? W : 0;
2755
+ return {
2756
+ h: Math.max(1, e - r * 2),
2757
+ inset: r,
2758
+ w: Math.max(1, t - r * 2)
2759
+ };
2760
+ }
2761
+ function animateValues(e, t, n) {
2762
+ m?.();
2763
+ let r = p?.length === e.length ? p : e.map(() => t);
2764
+ r.every((t, n) => t === e[n]) || u.duration === 0 ? (p = e, n(e)) : (m = startTween({
2765
+ count: 1,
2766
+ duration: u.duration,
2767
+ easing: d,
2768
+ onFrame: (t) => {
2769
+ let i = t(0), a = e.map((e, t) => tweenNumber(r[t], e, i));
2770
+ p = a, n(a);
2771
+ },
2772
+ signal: v.signal
2773
+ }), p = r, n(r));
2774
+ }
2775
+ function renderAll() {
2776
+ let { height: e, width: l } = h.dimensions, u = plotArea();
2777
+ for (; _.firstChild;) _.removeChild(_.firstChild);
2778
+ if (_.setAttribute("transform", `translate(${u.inset},${u.inset})`), f.length === 0) p = null;
2779
+ else {
2780
+ if (!isStackData(f) && f.some((e) => !Number.isFinite(e)), n === "stack" && isStackData(f)) {
2781
+ let n = createSvgElement("g", { class: "prism-spark-stack" });
2782
+ _.appendChild(n);
2783
+ let r = t.cornerRadius ?? 4, i = f, a = i.reduce((e, t) => e + Math.max(0, t.value), 0), o = i.map((e, t) => {
2784
+ let r = createSvgElement("path", { class: "prism-spark-stack-segment" });
2785
+ return setAttributes(r, { fill: e.color ?? defaultStackColor(t) }), n.appendChild(r), r;
2786
+ });
2787
+ a > 0 ? animateValues(i.map((e) => Math.max(0, e.value)), 0, (n) => {
2788
+ let i = n.reduce((e, t) => e + t, 0) || 1, a = (t.padPixels ?? 0) / 2, s = 0;
2789
+ n.forEach((t, c) => {
2790
+ let u = Math.round(s);
2791
+ s += t / i * l;
2792
+ let d = c === n.length - 1 ? l : Math.round(s), f = c === 0, p = c === n.length - 1, m = u + (f ? 0 : a), h = Math.max(0, d - u - (f ? 0 : a) - (p ? 0 : a));
2793
+ o[c]?.setAttribute("d", buildRoundedStackRect(m, 0, h, e, r, f, p));
2794
+ });
2795
+ }) : (m?.(), p = null);
2796
+ } else if (n === "bar") {
2797
+ let t = createSvgElement("g", { class: "prism-spark-bars" });
2798
+ _.appendChild(t);
2799
+ let n = f, i = Math.min(0, ...n), a = Math.max(...n) - i || 1, o = Math.max(1, l / n.length - 1), s = l / n.length, c = n.map(() => {
2800
+ let e = createSvgElement("rect", {
2801
+ class: "prism-spark-bar",
2802
+ fill: r
2803
+ });
2804
+ return t.appendChild(e), e;
2805
+ });
2806
+ animateValues(n, i, (t) => {
2807
+ for (let [n, r] of c.entries()) {
2808
+ let c = Math.max(1, (t[n] - i) / a * e);
2809
+ setAttributes(r, {
2810
+ height: c,
2811
+ width: o,
2812
+ x: n * s,
2813
+ y: e - c
2814
+ });
2815
+ }
2816
+ });
2817
+ } else {
2818
+ let e = f, t = Math.min(...e), l = Math.max(...e) - t || 1, d = u.w / Math.max(1, e.length - 1), pointsFromValues = (e) => e.map((e, n) => ({
2819
+ x: n * d,
2820
+ y: u.h - (e - t) / l * u.h
2821
+ })), p = null;
2822
+ if (n === "area") {
2823
+ let e = createSvgElement("defs"), t = createSvgElement("linearGradient", {
2824
+ id: c,
2825
+ x1: 0,
2826
+ x2: 0,
2827
+ y1: 0,
2828
+ y2: 1
2829
+ });
2830
+ for (let [e, n] of [[0, "prism-spark-stop-top"], [1, "prism-spark-stop-bottom"]]) {
2831
+ let i = createSvgElement("stop", {
2832
+ class: n,
2833
+ offset: e,
2834
+ "stop-color": r
2835
+ });
2836
+ i.style.stopColor = r, t.appendChild(i);
2837
+ }
2838
+ e.appendChild(t), _.appendChild(e), p = createSvgElement("path", { class: "prism-spark-fill" }), setAttributes(p, {
2839
+ fill: `url(#${c})`,
2840
+ stroke: "none"
2841
+ }), p.style.fillOpacity = o === void 0 ? "" : String(o), _.appendChild(p);
2842
+ }
2843
+ let m = createSvgElement("path", { class: "prism-spark-line" });
2844
+ setAttributes(m, {
2845
+ fill: "none",
2846
+ stroke: r,
2847
+ "stroke-width": a
2848
+ }), _.appendChild(m);
2849
+ let h = s && e.length > 0 ? createSvgElement("circle", {
2850
+ class: "prism-spark-end",
2851
+ fill: r,
2852
+ r: 2.5
2853
+ }) : null;
2854
+ h && _.appendChild(h), animateValues(e, t, (e) => {
2855
+ let t = pointsFromValues(e);
2856
+ setAttributes(m, { d: buildPathFromPoints(t, i) }), p && setAttributes(p, { d: buildAreaPathFromPoints(t, u.h, i) });
2857
+ let n = t.at(-1);
2858
+ h && n && setAttributes(h, {
2859
+ cx: n.x,
2860
+ cy: n.y
2861
+ });
2862
+ });
2863
+ }
2864
+ isStackData(f) || attachInteraction(f);
2865
+ }
2866
+ }
2867
+ function attachInteraction(e) {
2868
+ if (cleanupInteraction?.(), cleanupInteraction = void 0, !t.onHover && !t.onClick || e.length <= 1) return;
2869
+ let { h: i, inset: a, w: o } = plotArea();
2870
+ g.style.cursor = "crosshair";
2871
+ let s = o / (e.length - 1), c = n === "bar" ? [] : buildTopPoints(e, o, i), l = createSvgElement("circle", {
2872
+ class: "prism-spark-marker",
2873
+ fill: r,
2874
+ r: 3.5
2875
+ }), indexAt = (t) => Math.max(0, Math.min(e.length - 1, Math.round((t - g.getBoundingClientRect().left - a) / s)));
2876
+ l.style.display = "none", _.appendChild(l);
2877
+ let handleMove = (n) => {
2878
+ let r = indexAt(n.clientX), i = c[r];
2879
+ i && (setAttributes(l, {
2880
+ cx: i.x,
2881
+ cy: i.y
2882
+ }), l.style.display = ""), t.onHover?.({
2883
+ index: r,
2884
+ originalEvent: n,
2885
+ value: e[r]
2886
+ });
2887
+ }, handleLeave = () => {
2888
+ l.style.display = "none", t.onHover?.(null);
2889
+ }, handleClick = (n) => {
2890
+ if (!t.onClick) return;
2891
+ let r = indexAt(n.clientX);
2892
+ t.onClick({
2893
+ index: r,
2894
+ originalEvent: n,
2895
+ value: e[r]
2896
+ });
2897
+ };
2898
+ g.addEventListener("mousemove", handleMove), g.addEventListener("mouseleave", handleLeave), g.addEventListener("click", handleClick), cleanupInteraction = () => {
2899
+ g.removeEventListener("mousemove", handleMove), g.removeEventListener("mouseleave", handleLeave), g.removeEventListener("click", handleClick);
2900
+ };
2901
+ }
2902
+ let v = new AbortController(), y = !1;
2903
+ try {
2904
+ return renderAll(), {
2905
+ get disposalSignal() {
2906
+ return v.signal;
2907
+ },
2908
+ dispose() {
2909
+ y || (y = !0, l.emit({ type: "dispose" }), l.stop(), v.abort(), cleanupInteraction?.(), h.dispose());
2910
+ },
2911
+ get disposed() {
2912
+ return y;
2913
+ },
2914
+ el: g,
2915
+ tap: l.tap,
2916
+ update(e) {
2917
+ if (y) throw new PrismRenderError("Cannot update a disposed chart.");
2918
+ f = e, renderAll();
2919
+ },
2920
+ [Symbol.dispose]() {
2921
+ this.dispose();
2922
+ }
2923
+ };
2924
+ } catch (e) {
2925
+ throw v.abort(), cleanupInteraction?.(), h.dispose(), e instanceof PrismRenderError ? e : new PrismRenderError("Failed to render chart.", { cause: e });
2926
+ }
2927
+ }
2928
+ //#endregion
2929
+ export { PrismError, PrismRenderError, bandScale, createAreaChart, createBarChart, createLineChart, createPieChart, createRadarChart, createScatterChart, createSparkline, linearScale, resetTheme, seriesColor, setTheme, timeScale };
2930
+
2
2931
  //# sourceMappingURL=prism.js.map