@vielzeug/prism 2.2.3 → 2.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/charts/bar/bar-hit-test.cjs +1 -1
- package/dist/charts/bar/bar-hit-test.cjs.map +1 -1
- package/dist/charts/bar/bar-hit-test.js +4 -5
- package/dist/charts/bar/bar-hit-test.js.map +1 -1
- package/dist/charts/pie/pie-chart.cjs +1 -1
- package/dist/charts/pie/pie-chart.cjs.map +1 -1
- package/dist/charts/pie/pie-chart.js +7 -9
- package/dist/charts/pie/pie-chart.js.map +1 -1
- package/dist/prism.cjs +1 -1
- package/dist/prism.cjs.map +1 -1
- package/dist/prism.iife.js +1 -1
- package/dist/prism.iife.js.map +1 -1
- package/dist/prism.js +1 -1
- package/dist/prism.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function e(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 t(e,t,n,r,i){if(r.stacked)
|
|
1
|
+
function e(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 t(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}else{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))}}function n(e,t,n,r,i){let a=i-1,o=r.stacked?r.stackedTops[a]?.[t]??0:Math.max(...Array.from({length:i},(e,r)=>n[r]?.[t]?.value??0)),s=r.valueScale.map(o);return r.horizontal?e.x>s:e.y<s}exports.findCatIdx=e,exports.findSeriesIdx=t,exports.isOutsideBars=n;
|
|
2
2
|
//# sourceMappingURL=bar-hit-test.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bar-hit-test.cjs","names":[],"sources":["../../../src/charts/bar/bar-hit-test.ts"],"sourcesContent":["import type { Datum } from '../../types';\nimport type { BarScaleContext } from './bar-scale-context';\n\nexport function findCatIdx(pos: number, categories: string[], sc: BarScaleContext): number {\n for (let i = 0; i < categories.length; i++) {\n const center = sc.bandCenter(categories[i]);\n const start = center - sc.bandwidth / 2;\n\n if (pos >= start && pos < start + sc.bandwidth) return i;\n }\n\n return -1;\n}\n\nexport function findSeriesIdx(\n pos: { x: number; y: number },\n catIdx: number,\n categories: string[],\n sc: BarScaleContext,\n seriesCount: number,\n): number {\n if (sc.stacked) {\n if (sc.horizontal) {\n for (let si = 0; si < seriesCount; si++) {\n const rightX = sc.valueScale.map(sc.stackedTops[si]?.[catIdx] ?? 0);\n\n if (rightX >= pos.x) return si;\n }\n\n return seriesCount - 1;\n } else {\n for (let si = 0; si < seriesCount; si++) {\n const topY = sc.valueScale.map(sc.stackedTops[si]?.[catIdx] ?? 0);\n\n if (topY <= pos.y) return si;\n }\n\n return seriesCount - 1;\n }\n } else {\n const subSize = sc.bandwidth / seriesCount;\n const bandStart = sc.bandCenter(categories[catIdx]) - sc.bandwidth / 2;\n const offset = sc.horizontal ? pos.y - bandStart : pos.x - bandStart;\n const subIdx = Math.floor(offset / subSize);\n\n return Math.max(0, Math.min(seriesCount - 1, subIdx));\n }\n}\n\nexport function isOutsideBars(\n pos: { x: number; y: number },\n catIdx: number,\n allData: (Datum | undefined)[][],\n sc: BarScaleContext,\n seriesCount: number,\n): boolean {\n const lastSi = seriesCount - 1;\n const maxVal = sc.stacked\n ? (sc.stackedTops[lastSi]?.[catIdx] ?? 0)\n : Math.max(...Array.from({ length: seriesCount }, (_, si) => allData[si]?.[catIdx]?.value ?? 0));\n const maxPx = sc.valueScale.map(maxVal);\n\n return sc.horizontal ? pos.x > maxPx : pos.y < maxPx;\n}\n"],"mappings":"AAGA,SAAgB,EAAW,EAAa,EAAsB,EAA6B,CACzF,IAAK,IAAI,EAAI,EAAG,EAAI,EAAW,OAAQ,IAAK,CAE1C,IAAM,EADS,EAAG,WAAW,EAAW,EAC1B,EAAS,EAAG,UAAY,EAEtC,GAAI,GAAO,GAAS,EAAM,EAAQ,EAAG,UAAW,OAAO,CACzD,CAEA,MAAO,EACT,CAEA,SAAgB,EACd,EACA,EACA,EACA,EACA,EACQ,CACR,GAAI,EAAG,
|
|
1
|
+
{"version":3,"file":"bar-hit-test.cjs","names":[],"sources":["../../../src/charts/bar/bar-hit-test.ts"],"sourcesContent":["import type { Datum } from '../../types';\nimport type { BarScaleContext } from './bar-scale-context';\n\nexport function findCatIdx(pos: number, categories: string[], sc: BarScaleContext): number {\n for (let i = 0; i < categories.length; i++) {\n const center = sc.bandCenter(categories[i]);\n const start = center - sc.bandwidth / 2;\n\n if (pos >= start && pos < start + sc.bandwidth) return i;\n }\n\n return -1;\n}\n\nexport function findSeriesIdx(\n pos: { x: number; y: number },\n catIdx: number,\n categories: string[],\n sc: BarScaleContext,\n seriesCount: number,\n): number {\n if (sc.stacked) {\n if (sc.horizontal) {\n for (let si = 0; si < seriesCount; si++) {\n const rightX = sc.valueScale.map(sc.stackedTops[si]?.[catIdx] ?? 0);\n\n if (rightX >= pos.x) return si;\n }\n\n return seriesCount - 1;\n } else {\n for (let si = 0; si < seriesCount; si++) {\n const topY = sc.valueScale.map(sc.stackedTops[si]?.[catIdx] ?? 0);\n\n if (topY <= pos.y) return si;\n }\n\n return seriesCount - 1;\n }\n } else {\n const subSize = sc.bandwidth / seriesCount;\n const bandStart = sc.bandCenter(categories[catIdx]) - sc.bandwidth / 2;\n const offset = sc.horizontal ? pos.y - bandStart : pos.x - bandStart;\n const subIdx = Math.floor(offset / subSize);\n\n return Math.max(0, Math.min(seriesCount - 1, subIdx));\n }\n}\n\nexport function isOutsideBars(\n pos: { x: number; y: number },\n catIdx: number,\n allData: (Datum | undefined)[][],\n sc: BarScaleContext,\n seriesCount: number,\n): boolean {\n const lastSi = seriesCount - 1;\n const maxVal = sc.stacked\n ? (sc.stackedTops[lastSi]?.[catIdx] ?? 0)\n : Math.max(...Array.from({ length: seriesCount }, (_, si) => allData[si]?.[catIdx]?.value ?? 0));\n const maxPx = sc.valueScale.map(maxVal);\n\n return sc.horizontal ? pos.x > maxPx : pos.y < maxPx;\n}\n"],"mappings":"AAGA,SAAgB,EAAW,EAAa,EAAsB,EAA6B,CACzF,IAAK,IAAI,EAAI,EAAG,EAAI,EAAW,OAAQ,IAAK,CAE1C,IAAM,EADS,EAAG,WAAW,EAAW,EAC1B,EAAS,EAAG,UAAY,EAEtC,GAAI,GAAO,GAAS,EAAM,EAAQ,EAAG,UAAW,OAAO,CACzD,CAEA,MAAO,EACT,CAEA,SAAgB,EACd,EACA,EACA,EACA,EACA,EACQ,CACR,GAAI,EAAG,QACL,GAAI,EAAG,WAAY,CACjB,IAAK,IAAI,EAAK,EAAG,EAAK,EAAa,IAGjC,GAFe,EAAG,WAAW,IAAI,EAAG,YAAY,EAAG,GAAG,IAAW,CAE7D,GAAU,EAAI,EAAG,OAAO,EAG9B,OAAO,EAAc,CACvB,KAAO,CACL,IAAK,IAAI,EAAK,EAAG,EAAK,EAAa,IAGjC,GAFa,EAAG,WAAW,IAAI,EAAG,YAAY,EAAG,GAAG,IAAW,CAE3D,GAAQ,EAAI,EAAG,OAAO,EAG5B,OAAO,EAAc,CACvB,CACK,CACL,IAAM,EAAU,EAAG,UAAY,EACzB,EAAY,EAAG,WAAW,EAAW,EAAO,EAAI,EAAG,UAAY,EAC/D,EAAS,EAAG,WAAa,EAAI,EAAI,EAAY,EAAI,EAAI,EACrD,EAAS,KAAK,MAAM,EAAS,CAAO,EAE1C,OAAO,KAAK,IAAI,EAAG,KAAK,IAAI,EAAc,EAAG,CAAM,CAAC,CACtD,CACF,CAEA,SAAgB,EACd,EACA,EACA,EACA,EACA,EACS,CACT,IAAM,EAAS,EAAc,EACvB,EAAS,EAAG,QACb,EAAG,YAAY,EAAO,GAAG,IAAW,EACrC,KAAK,IAAI,GAAG,MAAM,KAAK,CAAE,OAAQ,CAAY,GAAI,EAAG,IAAO,EAAQ,EAAG,GAAG,EAAO,EAAE,OAAS,CAAC,CAAC,EAC3F,EAAQ,EAAG,WAAW,IAAI,CAAM,EAEtC,OAAO,EAAG,WAAa,EAAI,EAAI,EAAQ,EAAI,EAAI,CACjD"}
|
|
@@ -7,11 +7,10 @@ function e(e, t, n) {
|
|
|
7
7
|
return -1;
|
|
8
8
|
}
|
|
9
9
|
function t(e, t, n, r, i) {
|
|
10
|
-
if (r.stacked) {
|
|
11
|
-
if (r.
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
10
|
+
if (r.stacked) if (r.horizontal) {
|
|
11
|
+
for (let n = 0; n < i; n++) if (r.valueScale.map(r.stackedTops[n]?.[t] ?? 0) >= e.x) return n;
|
|
12
|
+
return i - 1;
|
|
13
|
+
} else {
|
|
15
14
|
for (let n = 0; n < i; n++) if (r.valueScale.map(r.stackedTops[n]?.[t] ?? 0) <= e.y) return n;
|
|
16
15
|
return i - 1;
|
|
17
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bar-hit-test.js","names":[],"sources":["../../../src/charts/bar/bar-hit-test.ts"],"sourcesContent":["import type { Datum } from '../../types';\nimport type { BarScaleContext } from './bar-scale-context';\n\nexport function findCatIdx(pos: number, categories: string[], sc: BarScaleContext): number {\n for (let i = 0; i < categories.length; i++) {\n const center = sc.bandCenter(categories[i]);\n const start = center - sc.bandwidth / 2;\n\n if (pos >= start && pos < start + sc.bandwidth) return i;\n }\n\n return -1;\n}\n\nexport function findSeriesIdx(\n pos: { x: number; y: number },\n catIdx: number,\n categories: string[],\n sc: BarScaleContext,\n seriesCount: number,\n): number {\n if (sc.stacked) {\n if (sc.horizontal) {\n for (let si = 0; si < seriesCount; si++) {\n const rightX = sc.valueScale.map(sc.stackedTops[si]?.[catIdx] ?? 0);\n\n if (rightX >= pos.x) return si;\n }\n\n return seriesCount - 1;\n } else {\n for (let si = 0; si < seriesCount; si++) {\n const topY = sc.valueScale.map(sc.stackedTops[si]?.[catIdx] ?? 0);\n\n if (topY <= pos.y) return si;\n }\n\n return seriesCount - 1;\n }\n } else {\n const subSize = sc.bandwidth / seriesCount;\n const bandStart = sc.bandCenter(categories[catIdx]) - sc.bandwidth / 2;\n const offset = sc.horizontal ? pos.y - bandStart : pos.x - bandStart;\n const subIdx = Math.floor(offset / subSize);\n\n return Math.max(0, Math.min(seriesCount - 1, subIdx));\n }\n}\n\nexport function isOutsideBars(\n pos: { x: number; y: number },\n catIdx: number,\n allData: (Datum | undefined)[][],\n sc: BarScaleContext,\n seriesCount: number,\n): boolean {\n const lastSi = seriesCount - 1;\n const maxVal = sc.stacked\n ? (sc.stackedTops[lastSi]?.[catIdx] ?? 0)\n : Math.max(...Array.from({ length: seriesCount }, (_, si) => allData[si]?.[catIdx]?.value ?? 0));\n const maxPx = sc.valueScale.map(maxVal);\n\n return sc.horizontal ? pos.x > maxPx : pos.y < maxPx;\n}\n"],"mappings":";AAGA,SAAgB,EAAW,GAAa,GAAsB,GAA6B;CACzF,KAAK,IAAI,IAAI,GAAG,IAAI,EAAW,QAAQ,KAAK;EAE1C,IAAM,IADS,EAAG,WAAW,EAAW,EAC1B,IAAS,EAAG,YAAY;EAEtC,IAAI,KAAO,KAAS,IAAM,IAAQ,EAAG,WAAW,OAAO;CACzD;CAEA,OAAO;AACT;AAEA,SAAgB,EACd,GACA,GACA,GACA,GACA,GACQ;CACR,IAAI,EAAG,
|
|
1
|
+
{"version":3,"file":"bar-hit-test.js","names":[],"sources":["../../../src/charts/bar/bar-hit-test.ts"],"sourcesContent":["import type { Datum } from '../../types';\nimport type { BarScaleContext } from './bar-scale-context';\n\nexport function findCatIdx(pos: number, categories: string[], sc: BarScaleContext): number {\n for (let i = 0; i < categories.length; i++) {\n const center = sc.bandCenter(categories[i]);\n const start = center - sc.bandwidth / 2;\n\n if (pos >= start && pos < start + sc.bandwidth) return i;\n }\n\n return -1;\n}\n\nexport function findSeriesIdx(\n pos: { x: number; y: number },\n catIdx: number,\n categories: string[],\n sc: BarScaleContext,\n seriesCount: number,\n): number {\n if (sc.stacked) {\n if (sc.horizontal) {\n for (let si = 0; si < seriesCount; si++) {\n const rightX = sc.valueScale.map(sc.stackedTops[si]?.[catIdx] ?? 0);\n\n if (rightX >= pos.x) return si;\n }\n\n return seriesCount - 1;\n } else {\n for (let si = 0; si < seriesCount; si++) {\n const topY = sc.valueScale.map(sc.stackedTops[si]?.[catIdx] ?? 0);\n\n if (topY <= pos.y) return si;\n }\n\n return seriesCount - 1;\n }\n } else {\n const subSize = sc.bandwidth / seriesCount;\n const bandStart = sc.bandCenter(categories[catIdx]) - sc.bandwidth / 2;\n const offset = sc.horizontal ? pos.y - bandStart : pos.x - bandStart;\n const subIdx = Math.floor(offset / subSize);\n\n return Math.max(0, Math.min(seriesCount - 1, subIdx));\n }\n}\n\nexport function isOutsideBars(\n pos: { x: number; y: number },\n catIdx: number,\n allData: (Datum | undefined)[][],\n sc: BarScaleContext,\n seriesCount: number,\n): boolean {\n const lastSi = seriesCount - 1;\n const maxVal = sc.stacked\n ? (sc.stackedTops[lastSi]?.[catIdx] ?? 0)\n : Math.max(...Array.from({ length: seriesCount }, (_, si) => allData[si]?.[catIdx]?.value ?? 0));\n const maxPx = sc.valueScale.map(maxVal);\n\n return sc.horizontal ? pos.x > maxPx : pos.y < maxPx;\n}\n"],"mappings":";AAGA,SAAgB,EAAW,GAAa,GAAsB,GAA6B;CACzF,KAAK,IAAI,IAAI,GAAG,IAAI,EAAW,QAAQ,KAAK;EAE1C,IAAM,IADS,EAAG,WAAW,EAAW,EAC1B,IAAS,EAAG,YAAY;EAEtC,IAAI,KAAO,KAAS,IAAM,IAAQ,EAAG,WAAW,OAAO;CACzD;CAEA,OAAO;AACT;AAEA,SAAgB,EACd,GACA,GACA,GACA,GACA,GACQ;CACR,IAAI,EAAG,SACL,IAAI,EAAG,YAAY;EACjB,KAAK,IAAI,IAAK,GAAG,IAAK,GAAa,KAGjC,IAFe,EAAG,WAAW,IAAI,EAAG,YAAY,EAAG,GAAG,MAAW,CAE7D,KAAU,EAAI,GAAG,OAAO;EAG9B,OAAO,IAAc;CACvB,OAAO;EACL,KAAK,IAAI,IAAK,GAAG,IAAK,GAAa,KAGjC,IAFa,EAAG,WAAW,IAAI,EAAG,YAAY,EAAG,GAAG,MAAW,CAE3D,KAAQ,EAAI,GAAG,OAAO;EAG5B,OAAO,IAAc;CACvB;CACK;EACL,IAAM,IAAU,EAAG,YAAY,GACzB,IAAY,EAAG,WAAW,EAAW,EAAO,IAAI,EAAG,YAAY,GAC/D,IAAS,EAAG,aAAa,EAAI,IAAI,IAAY,EAAI,IAAI,GACrD,IAAS,KAAK,MAAM,IAAS,CAAO;EAE1C,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,IAAc,GAAG,CAAM,CAAC;CACtD;AACF;AAEA,SAAgB,EACd,GACA,GACA,GACA,GACA,GACS;CACT,IAAM,IAAS,IAAc,GACvB,IAAS,EAAG,UACb,EAAG,YAAY,EAAO,GAAG,MAAW,IACrC,KAAK,IAAI,GAAG,MAAM,KAAK,EAAE,QAAQ,EAAY,IAAI,GAAG,MAAO,EAAQ,EAAG,GAAG,EAAO,EAAE,SAAS,CAAC,CAAC,GAC3F,IAAQ,EAAG,WAAW,IAAI,CAAM;CAEtC,OAAO,EAAG,aAAa,EAAI,IAAI,IAAQ,EAAI,IAAI;AACjD"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("../../animation/easing.cjs"),t=require("../../animation/motion.cjs"),n=require("../../animation/tween.cjs"),r=require("../../svg/element.cjs"),i=require("../../core/chart-scaffold.cjs"),a=require("../../theme/index.cjs"),o=require("./pie-renderer.cjs");let s=require("@vielzeug/ripple");var c=2*Math.PI,l=-Math.PI/2,u=Math.PI/2;function d(e){return e===`semi`?{end:u,start:l}:{end:c,start:0}}function f(c,l){let u=l.variant??`pie`,f=l.padPixels??(u===`pie`?0:8),m=l.cornerRadius??(u===`pie`?0:8),h=r.createSvgElement(`circle`,{class:`prism-pie-bg`,"pointer-events":`none`}),g=r.createSvgElement(`g`,{class:`prism-pie-slices`,"shape-rendering":`geometricPrecision`}),_=r.createSvgElement(`g`,{class:`prism-pie-labels`,"pointer-events":`none`}),v=[],y=null;function b(e){for(;_.children.length>v.length;)_.removeChild(_.lastChild);for(let t=0;t<v.length;t++){let n=v[t],i=e[t];if(!i?.label)continue;let{x:a,y:s}=o.arcCentroid(n),c=_.children[t];c||(c=r.createSvgElement(`text`,{class:`prism-pie-label`}),_.appendChild(c)),r.setAttributes(c,{"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:a,y:s}),c.textContent=i.label}}let x=i.createRadialScaffold(c,{a11y:l.a11y,legend:l.legend,plugins:l.plugins,tooltip:l.tooltip},i=>{let{legend:x,svg:S,tooltip:C}=i;S.contains(h)||(S.appendChild(h),S.appendChild(g),S.appendChild(_));let{height:w,width:T}=i.dimensions.value,E=u===`semi`,D=T/2,O=E?w*.85:w/2,k=E?Math.min(D,O)-8:Math.min(T,w)/2-8,A=u===`pie`?0:Math.round(k*.55),j=l.innerRadius===void 0?A:l.innerRadius,M=Math.max(j+1,k),N=(0,s.isReactive)(l.data)?l.data.value:l.data,{end:P,start:F}=d(u);for(v=o.computeArcs(N,D,O,M,j,F,P,f,m,e=>a.seriesColor(e),!1),r.setAttributes(h,{cx:D,cy:O,r:j>0?j:0}),h.setAttribute(`style`,`fill:var(--prism-bg,#fff)`);g.children.length>v.length;)g.removeChild(g.lastChild);for(;_.children.length>v.length;)_.removeChild(_.lastChild);let I=t.resolveMotion(l.transition,0),L=I.duration,R=e.resolveEasing(I.easing);for(let e=0;e<v.length;e++){let t=v[e],n=g.children[e];n||(n=r.createSvgElement(`path`,{class:`prism-pie-slice`}),g.appendChild(n)),n.setAttribute(`fill`,t.color),n.setAttribute(`stroke`,`none`),n.style.cursor=l.onClick||l.onHover?`pointer`:``}if(y!==null&&(cancelAnimationFrame(y),y=null),L>0){let e=null,t=i=>{e===null&&(e=i);let a=R(Math.min(1,(i-e)/L)),s=n.tweenNumber(F,P,a);for(let e=0;e<v.length;e++){let t=v[e],n=g.children[e];if(n)
|
|
1
|
+
const e=require("../../animation/easing.cjs"),t=require("../../animation/motion.cjs"),n=require("../../animation/tween.cjs"),r=require("../../svg/element.cjs"),i=require("../../core/chart-scaffold.cjs"),a=require("../../theme/index.cjs"),o=require("./pie-renderer.cjs");let s=require("@vielzeug/ripple");var c=2*Math.PI,l=-Math.PI/2,u=Math.PI/2;function d(e){return e===`semi`?{end:u,start:l}:{end:c,start:0}}function f(c,l){let u=l.variant??`pie`,f=l.padPixels??(u===`pie`?0:8),m=l.cornerRadius??(u===`pie`?0:8),h=r.createSvgElement(`circle`,{class:`prism-pie-bg`,"pointer-events":`none`}),g=r.createSvgElement(`g`,{class:`prism-pie-slices`,"shape-rendering":`geometricPrecision`}),_=r.createSvgElement(`g`,{class:`prism-pie-labels`,"pointer-events":`none`}),v=[],y=null;function b(e){for(;_.children.length>v.length;)_.removeChild(_.lastChild);for(let t=0;t<v.length;t++){let n=v[t],i=e[t];if(!i?.label)continue;let{x:a,y:s}=o.arcCentroid(n),c=_.children[t];c||(c=r.createSvgElement(`text`,{class:`prism-pie-label`}),_.appendChild(c)),r.setAttributes(c,{"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:a,y:s}),c.textContent=i.label}}let x=i.createRadialScaffold(c,{a11y:l.a11y,legend:l.legend,plugins:l.plugins,tooltip:l.tooltip},i=>{let{legend:x,svg:S,tooltip:C}=i;S.contains(h)||(S.appendChild(h),S.appendChild(g),S.appendChild(_));let{height:w,width:T}=i.dimensions.value,E=u===`semi`,D=T/2,O=E?w*.85:w/2,k=E?Math.min(D,O)-8:Math.min(T,w)/2-8,A=u===`pie`?0:Math.round(k*.55),j=l.innerRadius===void 0?A:l.innerRadius,M=Math.max(j+1,k),N=(0,s.isReactive)(l.data)?l.data.value:l.data,{end:P,start:F}=d(u);for(v=o.computeArcs(N,D,O,M,j,F,P,f,m,e=>a.seriesColor(e),!1),r.setAttributes(h,{cx:D,cy:O,r:j>0?j:0}),h.setAttribute(`style`,`fill:var(--prism-bg,#fff)`);g.children.length>v.length;)g.removeChild(g.lastChild);for(;_.children.length>v.length;)_.removeChild(_.lastChild);let I=t.resolveMotion(l.transition,0),L=I.duration,R=e.resolveEasing(I.easing);for(let e=0;e<v.length;e++){let t=v[e],n=g.children[e];n||(n=r.createSvgElement(`path`,{class:`prism-pie-slice`}),g.appendChild(n)),n.setAttribute(`fill`,t.color),n.setAttribute(`stroke`,`none`),n.style.cursor=l.onClick||l.onHover?`pointer`:``}if(y!==null&&(cancelAnimationFrame(y),y=null),L>0){let e=null,t=i=>{e===null&&(e=i);let a=R(Math.min(1,(i-e)/L)),s=n.tweenNumber(F,P,a);for(let e=0;e<v.length;e++){let t=v[e],n=g.children[e];if(n)if(s<=t.startAngle)r.setAttributes(n,{d:``});else{let e=Math.min(t.endAngle,s);r.setAttributes(n,{d:o.arcPath({...t,endAngle:e})})}}a<1?y=requestAnimationFrame(t):(y=null,b(N))};y=requestAnimationFrame(t)}else{for(let e=0;e<v.length;e++){let t=v[e],n=g.children[e];n&&r.setAttributes(n,{d:o.arcPath(t)})}b(N)}return x?.update(v.map(e=>({color:e.color,name:e.slice.label??``}))),C?.hide(),{onClick:e=>{if(!l.onClick)return;let t=S.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top,i=p(v,n,r,u);i>=0&&l.onClick(v[i].slice,i)},onMouseLeave:()=>{l.onHover?.(null,null),C?.hide()},onMouseMove:e=>{let t=S.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top,i=p(v,n,r,u);if(i>=0){let e=v[i];l.onHover?.(e.slice,i);let{x:n,y:r}=o.arcCentroid(e),a=c.getBoundingClientRect();C?.show(n+(t.left-a.left),r+(t.top-a.top),{key:i,value:e.slice.value},{color:e.color,data:[],name:e.slice.label??``})}else l.onHover?.(null,null),C?.hide()}}});return{get disposalSignal(){return x.disposalSignal},dispose(){y!==null&&(cancelAnimationFrame(y),y=null),x.dispose()},get disposed(){return x.disposed},el:x.el,[Symbol.dispose](){this.dispose()}}}function p(e,t,n,r){for(let i=0;i<e.length;i++){let a=e[i],o=t-a.centerX,s=n-a.centerY,l=Math.sqrt(o*o+s*s);if(l<a.outerRadius&&l>=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+c:e;if(t>=a.startAngle-1e-9&&t<=a.endAngle+1e-9)return i}}}return-1}exports.createPieChart=f;
|
|
2
2
|
//# sourceMappingURL=pie-chart.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pie-chart.cjs","names":[],"sources":["../../../src/charts/pie/pie-chart.ts"],"sourcesContent":["import { isReactive } from '@vielzeug/ripple';\nimport { resolveEasing } from '../../animation/easing';\nimport { resolveMotion } from '../../animation/motion';\nimport { tweenNumber } from '../../animation/tween';\nimport type { ChartEventHandlers } from '../../core/chart-scaffold';\nimport { createRadialScaffold } from '../../core/chart-scaffold';\nimport { createSvgElement, setAttributes } from '../../svg/element';\nimport { seriesColor } from '../../theme';\nimport type { ChartHandle, PieChartConfig, PieSliceConfig } from '../../types';\nimport { type Arc, arcCentroid, arcPath, computeArcs } from './pie-renderer';\n\nconst TWO_PI = 2 * Math.PI;\n\nconst SEMI_START = -Math.PI / 2; // -90° = 9-o'clock (left)\nconst SEMI_END = Math.PI / 2; // +90° = 3-o'clock (right) → true 180° half-circle\n\nfunction semiAngles(variant: PieChartConfig['variant']): { end: number; start: number } {\n return variant === 'semi' ? { end: SEMI_END, start: SEMI_START } : { end: TWO_PI, start: 0 };\n}\n\nexport function createPieChart(container: HTMLElement, config: PieChartConfig): ChartHandle {\n const variant = config.variant ?? 'pie';\n const padPixels = config.padPixels ?? (variant === 'pie' ? 0 : 8);\n const cornerRadius = config.cornerRadius ?? (variant === 'pie' ? 0 : 8);\n\n // Pie SVG elements live directly on the SVG (not inside chartArea groups).\n // We create them once and reuse across renders.\n const bgCircle = createSvgElement('circle', { class: 'prism-pie-bg', 'pointer-events': 'none' });\n const pieGroup = createSvgElement('g', {\n class: 'prism-pie-slices',\n 'shape-rendering': 'geometricPrecision',\n });\n const labelGroup = createSvgElement('g', { class: 'prism-pie-labels', 'pointer-events': 'none' });\n\n // Current arcs shared between renderFn and event handlers via closure.\n let currentArcs: Arc[] = [];\n let activeRaf: number | null = null;\n\n function renderLabels(slices: PieSliceConfig[]): void {\n while (labelGroup.children.length > currentArcs.length) labelGroup.removeChild(labelGroup.lastChild!);\n\n for (let i = 0; i < currentArcs.length; i++) {\n const arc = currentArcs[i];\n const slice = slices[i];\n\n if (!slice?.label) continue;\n\n const { x, y } = arcCentroid(arc);\n let text = labelGroup.children[i] as SVGTextElement | undefined;\n\n if (!text) {\n text = createSvgElement('text', { class: 'prism-pie-label' });\n labelGroup.appendChild(text);\n }\n\n setAttributes(text, {\n 'dominant-baseline': 'middle',\n fill: 'var(--prism-pie-label-color, #fff)',\n 'font-family': 'var(--prism-font-family, system-ui)',\n 'font-size': 'var(--prism-pie-label-size, 12px)',\n 'text-anchor': 'middle',\n x,\n y,\n });\n\n text.textContent = slice.label;\n }\n }\n\n const handle = createRadialScaffold(\n container,\n {\n a11y: config.a11y,\n legend: config.legend,\n plugins: config.plugins,\n tooltip: config.tooltip,\n },\n (ctx): ChartEventHandlers => {\n const { legend, svg, tooltip } = ctx;\n\n // Append pie groups to SVG on first render (idempotent).\n if (!svg.contains(bgCircle)) {\n svg.appendChild(bgCircle);\n svg.appendChild(pieGroup);\n svg.appendChild(labelGroup);\n }\n\n const { height: h, width: w } = ctx.dimensions.value;\n const isSemi = variant === 'semi';\n const cx = w / 2;\n const cy = isSemi ? h * 0.85 : h / 2;\n const padding = 8;\n const outer = isSemi ? Math.min(cx, cy) - padding : Math.min(w, h) / 2 - padding;\n const defaultInner = variant === 'pie' ? 0 : Math.round(outer * 0.55);\n const inner = config.innerRadius !== undefined ? config.innerRadius : defaultInner;\n const outerR = Math.max(inner + 1, outer);\n\n const slices = isReactive(config.data) ? config.data.value : config.data;\n const { end, start } = semiAngles(variant);\n\n currentArcs = computeArcs(\n slices,\n cx,\n cy,\n outerR,\n inner,\n start,\n end,\n padPixels,\n cornerRadius,\n (i) => seriesColor(i),\n false,\n );\n\n setAttributes(bgCircle, { cx, cy, r: inner > 0 ? inner : 0 });\n bgCircle.setAttribute('style', 'fill:var(--prism-bg,#fff)');\n\n while (pieGroup.children.length > currentArcs.length) pieGroup.removeChild(pieGroup.lastChild!);\n\n while (labelGroup.children.length > currentArcs.length) labelGroup.removeChild(labelGroup.lastChild!);\n\n const motion = resolveMotion(config.transition, 0);\n const dur = motion.duration;\n const easing = resolveEasing(motion.easing);\n\n for (let i = 0; i < currentArcs.length; i++) {\n const arc = currentArcs[i];\n let path = pieGroup.children[i] as SVGPathElement | undefined;\n\n if (!path) {\n path = createSvgElement('path', { class: 'prism-pie-slice' });\n pieGroup.appendChild(path);\n }\n\n path.setAttribute('fill', arc.color);\n path.setAttribute('stroke', 'none');\n path.style.cursor = config.onClick || config.onHover ? 'pointer' : '';\n }\n\n if (activeRaf !== null) {\n cancelAnimationFrame(activeRaf);\n activeRaf = null;\n }\n\n if (dur > 0) {\n let rafStart: number | null = null;\n\n const frame = (ts: number) => {\n if (rafStart === null) rafStart = ts;\n\n const t = easing(Math.min(1, (ts - rafStart) / dur));\n const revealAngle = tweenNumber(start, end, t);\n\n for (let j = 0; j < currentArcs.length; j++) {\n const a = currentArcs[j];\n const el = pieGroup.children[j] as SVGPathElement | undefined;\n\n if (!el) continue;\n\n if (revealAngle <= a.startAngle) {\n setAttributes(el, { d: '' });\n } else {\n const visibleEnd = Math.min(a.endAngle, revealAngle);\n\n setAttributes(el, { d: arcPath({ ...a, endAngle: visibleEnd }) });\n }\n }\n\n if (t < 1) {\n activeRaf = requestAnimationFrame(frame);\n } else {\n activeRaf = null;\n renderLabels(slices);\n }\n };\n\n activeRaf = requestAnimationFrame(frame);\n } else {\n for (let j = 0; j < currentArcs.length; j++) {\n const a = currentArcs[j];\n const el = pieGroup.children[j] as SVGPathElement | undefined;\n\n if (el) setAttributes(el, { d: arcPath(a) });\n }\n\n renderLabels(slices);\n }\n\n legend?.update(currentArcs.map((arc) => ({ color: arc.color, name: arc.slice.label ?? '' })));\n tooltip?.hide();\n\n const onMouseMove = (e: MouseEvent): void => {\n const svgRect = svg.getBoundingClientRect();\n const mx = e.clientX - svgRect.left;\n const my = e.clientY - svgRect.top;\n const hit = hitTestArc(currentArcs, mx, my, variant);\n\n if (hit >= 0) {\n const arc = currentArcs[hit];\n\n config.onHover?.(arc.slice, hit);\n\n const { x, y } = arcCentroid(arc);\n const contR = container.getBoundingClientRect();\n\n tooltip?.show(\n x + (svgRect.left - contR.left),\n y + (svgRect.top - contR.top),\n { key: hit, value: arc.slice.value },\n { color: arc.color, data: [], name: arc.slice.label ?? '' },\n );\n } else {\n config.onHover?.(null, null);\n tooltip?.hide();\n }\n };\n\n const onMouseLeave = (): void => {\n config.onHover?.(null, null);\n tooltip?.hide();\n };\n\n const onClick = (e: MouseEvent): void => {\n if (!config.onClick) return;\n\n const svgRect = svg.getBoundingClientRect();\n const mx = e.clientX - svgRect.left;\n const my = e.clientY - svgRect.top;\n const hit = hitTestArc(currentArcs, mx, my, variant);\n\n if (hit >= 0) config.onClick(currentArcs[hit].slice, hit);\n };\n\n return { onClick, onMouseLeave, onMouseMove };\n },\n );\n\n return {\n get disposalSignal(): AbortSignal {\n return handle.disposalSignal;\n },\n\n dispose() {\n if (activeRaf !== null) {\n cancelAnimationFrame(activeRaf);\n activeRaf = null;\n }\n\n handle.dispose();\n },\n\n get disposed(): boolean {\n return handle.disposed;\n },\n\n el: handle.el,\n\n [Symbol.dispose]() {\n this.dispose();\n },\n };\n}\n\nfunction hitTestArc(arcs: Arc[], mx: number, my: number, variant: PieChartConfig['variant']): number {\n for (let i = 0; i < arcs.length; i++) {\n const arc = arcs[i];\n const dx = mx - arc.centerX;\n const dy = my - arc.centerY;\n const dist = Math.sqrt(dx * dx + dy * dy);\n\n if (dist < arc.outerRadius && dist >= arc.innerRadius) {\n const rawAngle = Math.atan2(dx, -dy);\n\n if (variant === 'semi') {\n if (rawAngle >= arc.startAngle - 1e-9 && rawAngle <= arc.endAngle + 1e-9) return i;\n } else {\n const angle = rawAngle < 0 ? rawAngle + TWO_PI : rawAngle;\n\n if (angle >= arc.startAngle - 1e-9 && angle <= arc.endAngle + 1e-9) return i;\n }\n }\n }\n\n return -1;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pie-chart.cjs","names":[],"sources":["../../../src/charts/pie/pie-chart.ts"],"sourcesContent":["import { isReactive } from '@vielzeug/ripple';\nimport { resolveEasing } from '../../animation/easing';\nimport { resolveMotion } from '../../animation/motion';\nimport { tweenNumber } from '../../animation/tween';\nimport type { ChartEventHandlers } from '../../core/chart-scaffold';\nimport { createRadialScaffold } from '../../core/chart-scaffold';\nimport { createSvgElement, setAttributes } from '../../svg/element';\nimport { seriesColor } from '../../theme';\nimport type { ChartHandle, PieChartConfig, PieSliceConfig } from '../../types';\nimport { type Arc, arcCentroid, arcPath, computeArcs } from './pie-renderer';\n\nconst TWO_PI = 2 * Math.PI;\n\nconst SEMI_START = -Math.PI / 2; // -90° = 9-o'clock (left)\nconst SEMI_END = Math.PI / 2; // +90° = 3-o'clock (right) → true 180° half-circle\n\nfunction semiAngles(variant: PieChartConfig['variant']): { end: number; start: number } {\n return variant === 'semi' ? { end: SEMI_END, start: SEMI_START } : { end: TWO_PI, start: 0 };\n}\n\nexport function createPieChart(container: HTMLElement, config: PieChartConfig): ChartHandle {\n const variant = config.variant ?? 'pie';\n const padPixels = config.padPixels ?? (variant === 'pie' ? 0 : 8);\n const cornerRadius = config.cornerRadius ?? (variant === 'pie' ? 0 : 8);\n\n // Pie SVG elements live directly on the SVG (not inside chartArea groups).\n // We create them once and reuse across renders.\n const bgCircle = createSvgElement('circle', { class: 'prism-pie-bg', 'pointer-events': 'none' });\n const pieGroup = createSvgElement('g', {\n class: 'prism-pie-slices',\n 'shape-rendering': 'geometricPrecision',\n });\n const labelGroup = createSvgElement('g', { class: 'prism-pie-labels', 'pointer-events': 'none' });\n\n // Current arcs shared between renderFn and event handlers via closure.\n let currentArcs: Arc[] = [];\n let activeRaf: number | null = null;\n\n function renderLabels(slices: PieSliceConfig[]): void {\n while (labelGroup.children.length > currentArcs.length) labelGroup.removeChild(labelGroup.lastChild!);\n\n for (let i = 0; i < currentArcs.length; i++) {\n const arc = currentArcs[i];\n const slice = slices[i];\n\n if (!slice?.label) continue;\n\n const { x, y } = arcCentroid(arc);\n let text = labelGroup.children[i] as SVGTextElement | undefined;\n\n if (!text) {\n text = createSvgElement('text', { class: 'prism-pie-label' });\n labelGroup.appendChild(text);\n }\n\n setAttributes(text, {\n 'dominant-baseline': 'middle',\n fill: 'var(--prism-pie-label-color, #fff)',\n 'font-family': 'var(--prism-font-family, system-ui)',\n 'font-size': 'var(--prism-pie-label-size, 12px)',\n 'text-anchor': 'middle',\n x,\n y,\n });\n\n text.textContent = slice.label;\n }\n }\n\n const handle = createRadialScaffold(\n container,\n {\n a11y: config.a11y,\n legend: config.legend,\n plugins: config.plugins,\n tooltip: config.tooltip,\n },\n (ctx): ChartEventHandlers => {\n const { legend, svg, tooltip } = ctx;\n\n // Append pie groups to SVG on first render (idempotent).\n if (!svg.contains(bgCircle)) {\n svg.appendChild(bgCircle);\n svg.appendChild(pieGroup);\n svg.appendChild(labelGroup);\n }\n\n const { height: h, width: w } = ctx.dimensions.value;\n const isSemi = variant === 'semi';\n const cx = w / 2;\n const cy = isSemi ? h * 0.85 : h / 2;\n const padding = 8;\n const outer = isSemi ? Math.min(cx, cy) - padding : Math.min(w, h) / 2 - padding;\n const defaultInner = variant === 'pie' ? 0 : Math.round(outer * 0.55);\n const inner = config.innerRadius !== undefined ? config.innerRadius : defaultInner;\n const outerR = Math.max(inner + 1, outer);\n\n const slices = isReactive(config.data) ? config.data.value : config.data;\n const { end, start } = semiAngles(variant);\n\n currentArcs = computeArcs(\n slices,\n cx,\n cy,\n outerR,\n inner,\n start,\n end,\n padPixels,\n cornerRadius,\n (i) => seriesColor(i),\n false,\n );\n\n setAttributes(bgCircle, { cx, cy, r: inner > 0 ? inner : 0 });\n bgCircle.setAttribute('style', 'fill:var(--prism-bg,#fff)');\n\n while (pieGroup.children.length > currentArcs.length) pieGroup.removeChild(pieGroup.lastChild!);\n\n while (labelGroup.children.length > currentArcs.length) labelGroup.removeChild(labelGroup.lastChild!);\n\n const motion = resolveMotion(config.transition, 0);\n const dur = motion.duration;\n const easing = resolveEasing(motion.easing);\n\n for (let i = 0; i < currentArcs.length; i++) {\n const arc = currentArcs[i];\n let path = pieGroup.children[i] as SVGPathElement | undefined;\n\n if (!path) {\n path = createSvgElement('path', { class: 'prism-pie-slice' });\n pieGroup.appendChild(path);\n }\n\n path.setAttribute('fill', arc.color);\n path.setAttribute('stroke', 'none');\n path.style.cursor = config.onClick || config.onHover ? 'pointer' : '';\n }\n\n if (activeRaf !== null) {\n cancelAnimationFrame(activeRaf);\n activeRaf = null;\n }\n\n if (dur > 0) {\n let rafStart: number | null = null;\n\n const frame = (ts: number) => {\n if (rafStart === null) rafStart = ts;\n\n const t = easing(Math.min(1, (ts - rafStart) / dur));\n const revealAngle = tweenNumber(start, end, t);\n\n for (let j = 0; j < currentArcs.length; j++) {\n const a = currentArcs[j];\n const el = pieGroup.children[j] as SVGPathElement | undefined;\n\n if (!el) continue;\n\n if (revealAngle <= a.startAngle) {\n setAttributes(el, { d: '' });\n } else {\n const visibleEnd = Math.min(a.endAngle, revealAngle);\n\n setAttributes(el, { d: arcPath({ ...a, endAngle: visibleEnd }) });\n }\n }\n\n if (t < 1) {\n activeRaf = requestAnimationFrame(frame);\n } else {\n activeRaf = null;\n renderLabels(slices);\n }\n };\n\n activeRaf = requestAnimationFrame(frame);\n } else {\n for (let j = 0; j < currentArcs.length; j++) {\n const a = currentArcs[j];\n const el = pieGroup.children[j] as SVGPathElement | undefined;\n\n if (el) setAttributes(el, { d: arcPath(a) });\n }\n\n renderLabels(slices);\n }\n\n legend?.update(currentArcs.map((arc) => ({ color: arc.color, name: arc.slice.label ?? '' })));\n tooltip?.hide();\n\n const onMouseMove = (e: MouseEvent): void => {\n const svgRect = svg.getBoundingClientRect();\n const mx = e.clientX - svgRect.left;\n const my = e.clientY - svgRect.top;\n const hit = hitTestArc(currentArcs, mx, my, variant);\n\n if (hit >= 0) {\n const arc = currentArcs[hit];\n\n config.onHover?.(arc.slice, hit);\n\n const { x, y } = arcCentroid(arc);\n const contR = container.getBoundingClientRect();\n\n tooltip?.show(\n x + (svgRect.left - contR.left),\n y + (svgRect.top - contR.top),\n { key: hit, value: arc.slice.value },\n { color: arc.color, data: [], name: arc.slice.label ?? '' },\n );\n } else {\n config.onHover?.(null, null);\n tooltip?.hide();\n }\n };\n\n const onMouseLeave = (): void => {\n config.onHover?.(null, null);\n tooltip?.hide();\n };\n\n const onClick = (e: MouseEvent): void => {\n if (!config.onClick) return;\n\n const svgRect = svg.getBoundingClientRect();\n const mx = e.clientX - svgRect.left;\n const my = e.clientY - svgRect.top;\n const hit = hitTestArc(currentArcs, mx, my, variant);\n\n if (hit >= 0) config.onClick(currentArcs[hit].slice, hit);\n };\n\n return { onClick, onMouseLeave, onMouseMove };\n },\n );\n\n return {\n get disposalSignal(): AbortSignal {\n return handle.disposalSignal;\n },\n\n dispose() {\n if (activeRaf !== null) {\n cancelAnimationFrame(activeRaf);\n activeRaf = null;\n }\n\n handle.dispose();\n },\n\n get disposed(): boolean {\n return handle.disposed;\n },\n\n el: handle.el,\n\n [Symbol.dispose]() {\n this.dispose();\n },\n };\n}\n\nfunction hitTestArc(arcs: Arc[], mx: number, my: number, variant: PieChartConfig['variant']): number {\n for (let i = 0; i < arcs.length; i++) {\n const arc = arcs[i];\n const dx = mx - arc.centerX;\n const dy = my - arc.centerY;\n const dist = Math.sqrt(dx * dx + dy * dy);\n\n if (dist < arc.outerRadius && dist >= arc.innerRadius) {\n const rawAngle = Math.atan2(dx, -dy);\n\n if (variant === 'semi') {\n if (rawAngle >= arc.startAngle - 1e-9 && rawAngle <= arc.endAngle + 1e-9) return i;\n } else {\n const angle = rawAngle < 0 ? rawAngle + TWO_PI : rawAngle;\n\n if (angle >= arc.startAngle - 1e-9 && angle <= arc.endAngle + 1e-9) return i;\n }\n }\n }\n\n return -1;\n}\n"],"mappings":"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"}
|
|
@@ -71,15 +71,13 @@ function h(d, f) {
|
|
|
71
71
|
let a = V(Math.min(1, (r - e) / B)), o = n(R, L, a);
|
|
72
72
|
for (let e = 0; e < x.length; e++) {
|
|
73
73
|
let t = x[e], n = y.children[e];
|
|
74
|
-
if (n) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
}) });
|
|
82
|
-
}
|
|
74
|
+
if (n) if (o <= t.startAngle) i(n, { d: "" });
|
|
75
|
+
else {
|
|
76
|
+
let e = Math.min(t.endAngle, o);
|
|
77
|
+
i(n, { d: c({
|
|
78
|
+
...t,
|
|
79
|
+
endAngle: e
|
|
80
|
+
}) });
|
|
83
81
|
}
|
|
84
82
|
}
|
|
85
83
|
a < 1 ? S = requestAnimationFrame(t) : (S = null, C(I));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pie-chart.js","names":[],"sources":["../../../src/charts/pie/pie-chart.ts"],"sourcesContent":["import { isReactive } from '@vielzeug/ripple';\nimport { resolveEasing } from '../../animation/easing';\nimport { resolveMotion } from '../../animation/motion';\nimport { tweenNumber } from '../../animation/tween';\nimport type { ChartEventHandlers } from '../../core/chart-scaffold';\nimport { createRadialScaffold } from '../../core/chart-scaffold';\nimport { createSvgElement, setAttributes } from '../../svg/element';\nimport { seriesColor } from '../../theme';\nimport type { ChartHandle, PieChartConfig, PieSliceConfig } from '../../types';\nimport { type Arc, arcCentroid, arcPath, computeArcs } from './pie-renderer';\n\nconst TWO_PI = 2 * Math.PI;\n\nconst SEMI_START = -Math.PI / 2; // -90° = 9-o'clock (left)\nconst SEMI_END = Math.PI / 2; // +90° = 3-o'clock (right) → true 180° half-circle\n\nfunction semiAngles(variant: PieChartConfig['variant']): { end: number; start: number } {\n return variant === 'semi' ? { end: SEMI_END, start: SEMI_START } : { end: TWO_PI, start: 0 };\n}\n\nexport function createPieChart(container: HTMLElement, config: PieChartConfig): ChartHandle {\n const variant = config.variant ?? 'pie';\n const padPixels = config.padPixels ?? (variant === 'pie' ? 0 : 8);\n const cornerRadius = config.cornerRadius ?? (variant === 'pie' ? 0 : 8);\n\n // Pie SVG elements live directly on the SVG (not inside chartArea groups).\n // We create them once and reuse across renders.\n const bgCircle = createSvgElement('circle', { class: 'prism-pie-bg', 'pointer-events': 'none' });\n const pieGroup = createSvgElement('g', {\n class: 'prism-pie-slices',\n 'shape-rendering': 'geometricPrecision',\n });\n const labelGroup = createSvgElement('g', { class: 'prism-pie-labels', 'pointer-events': 'none' });\n\n // Current arcs shared between renderFn and event handlers via closure.\n let currentArcs: Arc[] = [];\n let activeRaf: number | null = null;\n\n function renderLabels(slices: PieSliceConfig[]): void {\n while (labelGroup.children.length > currentArcs.length) labelGroup.removeChild(labelGroup.lastChild!);\n\n for (let i = 0; i < currentArcs.length; i++) {\n const arc = currentArcs[i];\n const slice = slices[i];\n\n if (!slice?.label) continue;\n\n const { x, y } = arcCentroid(arc);\n let text = labelGroup.children[i] as SVGTextElement | undefined;\n\n if (!text) {\n text = createSvgElement('text', { class: 'prism-pie-label' });\n labelGroup.appendChild(text);\n }\n\n setAttributes(text, {\n 'dominant-baseline': 'middle',\n fill: 'var(--prism-pie-label-color, #fff)',\n 'font-family': 'var(--prism-font-family, system-ui)',\n 'font-size': 'var(--prism-pie-label-size, 12px)',\n 'text-anchor': 'middle',\n x,\n y,\n });\n\n text.textContent = slice.label;\n }\n }\n\n const handle = createRadialScaffold(\n container,\n {\n a11y: config.a11y,\n legend: config.legend,\n plugins: config.plugins,\n tooltip: config.tooltip,\n },\n (ctx): ChartEventHandlers => {\n const { legend, svg, tooltip } = ctx;\n\n // Append pie groups to SVG on first render (idempotent).\n if (!svg.contains(bgCircle)) {\n svg.appendChild(bgCircle);\n svg.appendChild(pieGroup);\n svg.appendChild(labelGroup);\n }\n\n const { height: h, width: w } = ctx.dimensions.value;\n const isSemi = variant === 'semi';\n const cx = w / 2;\n const cy = isSemi ? h * 0.85 : h / 2;\n const padding = 8;\n const outer = isSemi ? Math.min(cx, cy) - padding : Math.min(w, h) / 2 - padding;\n const defaultInner = variant === 'pie' ? 0 : Math.round(outer * 0.55);\n const inner = config.innerRadius !== undefined ? config.innerRadius : defaultInner;\n const outerR = Math.max(inner + 1, outer);\n\n const slices = isReactive(config.data) ? config.data.value : config.data;\n const { end, start } = semiAngles(variant);\n\n currentArcs = computeArcs(\n slices,\n cx,\n cy,\n outerR,\n inner,\n start,\n end,\n padPixels,\n cornerRadius,\n (i) => seriesColor(i),\n false,\n );\n\n setAttributes(bgCircle, { cx, cy, r: inner > 0 ? inner : 0 });\n bgCircle.setAttribute('style', 'fill:var(--prism-bg,#fff)');\n\n while (pieGroup.children.length > currentArcs.length) pieGroup.removeChild(pieGroup.lastChild!);\n\n while (labelGroup.children.length > currentArcs.length) labelGroup.removeChild(labelGroup.lastChild!);\n\n const motion = resolveMotion(config.transition, 0);\n const dur = motion.duration;\n const easing = resolveEasing(motion.easing);\n\n for (let i = 0; i < currentArcs.length; i++) {\n const arc = currentArcs[i];\n let path = pieGroup.children[i] as SVGPathElement | undefined;\n\n if (!path) {\n path = createSvgElement('path', { class: 'prism-pie-slice' });\n pieGroup.appendChild(path);\n }\n\n path.setAttribute('fill', arc.color);\n path.setAttribute('stroke', 'none');\n path.style.cursor = config.onClick || config.onHover ? 'pointer' : '';\n }\n\n if (activeRaf !== null) {\n cancelAnimationFrame(activeRaf);\n activeRaf = null;\n }\n\n if (dur > 0) {\n let rafStart: number | null = null;\n\n const frame = (ts: number) => {\n if (rafStart === null) rafStart = ts;\n\n const t = easing(Math.min(1, (ts - rafStart) / dur));\n const revealAngle = tweenNumber(start, end, t);\n\n for (let j = 0; j < currentArcs.length; j++) {\n const a = currentArcs[j];\n const el = pieGroup.children[j] as SVGPathElement | undefined;\n\n if (!el) continue;\n\n if (revealAngle <= a.startAngle) {\n setAttributes(el, { d: '' });\n } else {\n const visibleEnd = Math.min(a.endAngle, revealAngle);\n\n setAttributes(el, { d: arcPath({ ...a, endAngle: visibleEnd }) });\n }\n }\n\n if (t < 1) {\n activeRaf = requestAnimationFrame(frame);\n } else {\n activeRaf = null;\n renderLabels(slices);\n }\n };\n\n activeRaf = requestAnimationFrame(frame);\n } else {\n for (let j = 0; j < currentArcs.length; j++) {\n const a = currentArcs[j];\n const el = pieGroup.children[j] as SVGPathElement | undefined;\n\n if (el) setAttributes(el, { d: arcPath(a) });\n }\n\n renderLabels(slices);\n }\n\n legend?.update(currentArcs.map((arc) => ({ color: arc.color, name: arc.slice.label ?? '' })));\n tooltip?.hide();\n\n const onMouseMove = (e: MouseEvent): void => {\n const svgRect = svg.getBoundingClientRect();\n const mx = e.clientX - svgRect.left;\n const my = e.clientY - svgRect.top;\n const hit = hitTestArc(currentArcs, mx, my, variant);\n\n if (hit >= 0) {\n const arc = currentArcs[hit];\n\n config.onHover?.(arc.slice, hit);\n\n const { x, y } = arcCentroid(arc);\n const contR = container.getBoundingClientRect();\n\n tooltip?.show(\n x + (svgRect.left - contR.left),\n y + (svgRect.top - contR.top),\n { key: hit, value: arc.slice.value },\n { color: arc.color, data: [], name: arc.slice.label ?? '' },\n );\n } else {\n config.onHover?.(null, null);\n tooltip?.hide();\n }\n };\n\n const onMouseLeave = (): void => {\n config.onHover?.(null, null);\n tooltip?.hide();\n };\n\n const onClick = (e: MouseEvent): void => {\n if (!config.onClick) return;\n\n const svgRect = svg.getBoundingClientRect();\n const mx = e.clientX - svgRect.left;\n const my = e.clientY - svgRect.top;\n const hit = hitTestArc(currentArcs, mx, my, variant);\n\n if (hit >= 0) config.onClick(currentArcs[hit].slice, hit);\n };\n\n return { onClick, onMouseLeave, onMouseMove };\n },\n );\n\n return {\n get disposalSignal(): AbortSignal {\n return handle.disposalSignal;\n },\n\n dispose() {\n if (activeRaf !== null) {\n cancelAnimationFrame(activeRaf);\n activeRaf = null;\n }\n\n handle.dispose();\n },\n\n get disposed(): boolean {\n return handle.disposed;\n },\n\n el: handle.el,\n\n [Symbol.dispose]() {\n this.dispose();\n },\n };\n}\n\nfunction hitTestArc(arcs: Arc[], mx: number, my: number, variant: PieChartConfig['variant']): number {\n for (let i = 0; i < arcs.length; i++) {\n const arc = arcs[i];\n const dx = mx - arc.centerX;\n const dy = my - arc.centerY;\n const dist = Math.sqrt(dx * dx + dy * dy);\n\n if (dist < arc.outerRadius && dist >= arc.innerRadius) {\n const rawAngle = Math.atan2(dx, -dy);\n\n if (variant === 'semi') {\n if (rawAngle >= arc.startAngle - 1e-9 && rawAngle <= arc.endAngle + 1e-9) return i;\n } else {\n const angle = rawAngle < 0 ? rawAngle + TWO_PI : rawAngle;\n\n if (angle >= arc.startAngle - 1e-9 && angle <= arc.endAngle + 1e-9) return i;\n }\n }\n }\n\n return -1;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pie-chart.js","names":[],"sources":["../../../src/charts/pie/pie-chart.ts"],"sourcesContent":["import { isReactive } from '@vielzeug/ripple';\nimport { resolveEasing } from '../../animation/easing';\nimport { resolveMotion } from '../../animation/motion';\nimport { tweenNumber } from '../../animation/tween';\nimport type { ChartEventHandlers } from '../../core/chart-scaffold';\nimport { createRadialScaffold } from '../../core/chart-scaffold';\nimport { createSvgElement, setAttributes } from '../../svg/element';\nimport { seriesColor } from '../../theme';\nimport type { ChartHandle, PieChartConfig, PieSliceConfig } from '../../types';\nimport { type Arc, arcCentroid, arcPath, computeArcs } from './pie-renderer';\n\nconst TWO_PI = 2 * Math.PI;\n\nconst SEMI_START = -Math.PI / 2; // -90° = 9-o'clock (left)\nconst SEMI_END = Math.PI / 2; // +90° = 3-o'clock (right) → true 180° half-circle\n\nfunction semiAngles(variant: PieChartConfig['variant']): { end: number; start: number } {\n return variant === 'semi' ? { end: SEMI_END, start: SEMI_START } : { end: TWO_PI, start: 0 };\n}\n\nexport function createPieChart(container: HTMLElement, config: PieChartConfig): ChartHandle {\n const variant = config.variant ?? 'pie';\n const padPixels = config.padPixels ?? (variant === 'pie' ? 0 : 8);\n const cornerRadius = config.cornerRadius ?? (variant === 'pie' ? 0 : 8);\n\n // Pie SVG elements live directly on the SVG (not inside chartArea groups).\n // We create them once and reuse across renders.\n const bgCircle = createSvgElement('circle', { class: 'prism-pie-bg', 'pointer-events': 'none' });\n const pieGroup = createSvgElement('g', {\n class: 'prism-pie-slices',\n 'shape-rendering': 'geometricPrecision',\n });\n const labelGroup = createSvgElement('g', { class: 'prism-pie-labels', 'pointer-events': 'none' });\n\n // Current arcs shared between renderFn and event handlers via closure.\n let currentArcs: Arc[] = [];\n let activeRaf: number | null = null;\n\n function renderLabels(slices: PieSliceConfig[]): void {\n while (labelGroup.children.length > currentArcs.length) labelGroup.removeChild(labelGroup.lastChild!);\n\n for (let i = 0; i < currentArcs.length; i++) {\n const arc = currentArcs[i];\n const slice = slices[i];\n\n if (!slice?.label) continue;\n\n const { x, y } = arcCentroid(arc);\n let text = labelGroup.children[i] as SVGTextElement | undefined;\n\n if (!text) {\n text = createSvgElement('text', { class: 'prism-pie-label' });\n labelGroup.appendChild(text);\n }\n\n setAttributes(text, {\n 'dominant-baseline': 'middle',\n fill: 'var(--prism-pie-label-color, #fff)',\n 'font-family': 'var(--prism-font-family, system-ui)',\n 'font-size': 'var(--prism-pie-label-size, 12px)',\n 'text-anchor': 'middle',\n x,\n y,\n });\n\n text.textContent = slice.label;\n }\n }\n\n const handle = createRadialScaffold(\n container,\n {\n a11y: config.a11y,\n legend: config.legend,\n plugins: config.plugins,\n tooltip: config.tooltip,\n },\n (ctx): ChartEventHandlers => {\n const { legend, svg, tooltip } = ctx;\n\n // Append pie groups to SVG on first render (idempotent).\n if (!svg.contains(bgCircle)) {\n svg.appendChild(bgCircle);\n svg.appendChild(pieGroup);\n svg.appendChild(labelGroup);\n }\n\n const { height: h, width: w } = ctx.dimensions.value;\n const isSemi = variant === 'semi';\n const cx = w / 2;\n const cy = isSemi ? h * 0.85 : h / 2;\n const padding = 8;\n const outer = isSemi ? Math.min(cx, cy) - padding : Math.min(w, h) / 2 - padding;\n const defaultInner = variant === 'pie' ? 0 : Math.round(outer * 0.55);\n const inner = config.innerRadius !== undefined ? config.innerRadius : defaultInner;\n const outerR = Math.max(inner + 1, outer);\n\n const slices = isReactive(config.data) ? config.data.value : config.data;\n const { end, start } = semiAngles(variant);\n\n currentArcs = computeArcs(\n slices,\n cx,\n cy,\n outerR,\n inner,\n start,\n end,\n padPixels,\n cornerRadius,\n (i) => seriesColor(i),\n false,\n );\n\n setAttributes(bgCircle, { cx, cy, r: inner > 0 ? inner : 0 });\n bgCircle.setAttribute('style', 'fill:var(--prism-bg,#fff)');\n\n while (pieGroup.children.length > currentArcs.length) pieGroup.removeChild(pieGroup.lastChild!);\n\n while (labelGroup.children.length > currentArcs.length) labelGroup.removeChild(labelGroup.lastChild!);\n\n const motion = resolveMotion(config.transition, 0);\n const dur = motion.duration;\n const easing = resolveEasing(motion.easing);\n\n for (let i = 0; i < currentArcs.length; i++) {\n const arc = currentArcs[i];\n let path = pieGroup.children[i] as SVGPathElement | undefined;\n\n if (!path) {\n path = createSvgElement('path', { class: 'prism-pie-slice' });\n pieGroup.appendChild(path);\n }\n\n path.setAttribute('fill', arc.color);\n path.setAttribute('stroke', 'none');\n path.style.cursor = config.onClick || config.onHover ? 'pointer' : '';\n }\n\n if (activeRaf !== null) {\n cancelAnimationFrame(activeRaf);\n activeRaf = null;\n }\n\n if (dur > 0) {\n let rafStart: number | null = null;\n\n const frame = (ts: number) => {\n if (rafStart === null) rafStart = ts;\n\n const t = easing(Math.min(1, (ts - rafStart) / dur));\n const revealAngle = tweenNumber(start, end, t);\n\n for (let j = 0; j < currentArcs.length; j++) {\n const a = currentArcs[j];\n const el = pieGroup.children[j] as SVGPathElement | undefined;\n\n if (!el) continue;\n\n if (revealAngle <= a.startAngle) {\n setAttributes(el, { d: '' });\n } else {\n const visibleEnd = Math.min(a.endAngle, revealAngle);\n\n setAttributes(el, { d: arcPath({ ...a, endAngle: visibleEnd }) });\n }\n }\n\n if (t < 1) {\n activeRaf = requestAnimationFrame(frame);\n } else {\n activeRaf = null;\n renderLabels(slices);\n }\n };\n\n activeRaf = requestAnimationFrame(frame);\n } else {\n for (let j = 0; j < currentArcs.length; j++) {\n const a = currentArcs[j];\n const el = pieGroup.children[j] as SVGPathElement | undefined;\n\n if (el) setAttributes(el, { d: arcPath(a) });\n }\n\n renderLabels(slices);\n }\n\n legend?.update(currentArcs.map((arc) => ({ color: arc.color, name: arc.slice.label ?? '' })));\n tooltip?.hide();\n\n const onMouseMove = (e: MouseEvent): void => {\n const svgRect = svg.getBoundingClientRect();\n const mx = e.clientX - svgRect.left;\n const my = e.clientY - svgRect.top;\n const hit = hitTestArc(currentArcs, mx, my, variant);\n\n if (hit >= 0) {\n const arc = currentArcs[hit];\n\n config.onHover?.(arc.slice, hit);\n\n const { x, y } = arcCentroid(arc);\n const contR = container.getBoundingClientRect();\n\n tooltip?.show(\n x + (svgRect.left - contR.left),\n y + (svgRect.top - contR.top),\n { key: hit, value: arc.slice.value },\n { color: arc.color, data: [], name: arc.slice.label ?? '' },\n );\n } else {\n config.onHover?.(null, null);\n tooltip?.hide();\n }\n };\n\n const onMouseLeave = (): void => {\n config.onHover?.(null, null);\n tooltip?.hide();\n };\n\n const onClick = (e: MouseEvent): void => {\n if (!config.onClick) return;\n\n const svgRect = svg.getBoundingClientRect();\n const mx = e.clientX - svgRect.left;\n const my = e.clientY - svgRect.top;\n const hit = hitTestArc(currentArcs, mx, my, variant);\n\n if (hit >= 0) config.onClick(currentArcs[hit].slice, hit);\n };\n\n return { onClick, onMouseLeave, onMouseMove };\n },\n );\n\n return {\n get disposalSignal(): AbortSignal {\n return handle.disposalSignal;\n },\n\n dispose() {\n if (activeRaf !== null) {\n cancelAnimationFrame(activeRaf);\n activeRaf = null;\n }\n\n handle.dispose();\n },\n\n get disposed(): boolean {\n return handle.disposed;\n },\n\n el: handle.el,\n\n [Symbol.dispose]() {\n this.dispose();\n },\n };\n}\n\nfunction hitTestArc(arcs: Arc[], mx: number, my: number, variant: PieChartConfig['variant']): number {\n for (let i = 0; i < arcs.length; i++) {\n const arc = arcs[i];\n const dx = mx - arc.centerX;\n const dy = my - arc.centerY;\n const dist = Math.sqrt(dx * dx + dy * dy);\n\n if (dist < arc.outerRadius && dist >= arc.innerRadius) {\n const rawAngle = Math.atan2(dx, -dy);\n\n if (variant === 'semi') {\n if (rawAngle >= arc.startAngle - 1e-9 && rawAngle <= arc.endAngle + 1e-9) return i;\n } else {\n const angle = rawAngle < 0 ? rawAngle + TWO_PI : rawAngle;\n\n if (angle >= arc.startAngle - 1e-9 && angle <= arc.endAngle + 1e-9) return i;\n }\n }\n }\n\n return -1;\n}\n"],"mappings":";;;;;;;;;AAWA,IAAM,IAAS,IAAI,KAAK,IAElB,IAAa,CAAC,KAAK,KAAK,GACxB,IAAW,KAAK,KAAK;AAE3B,SAAS,EAAW,GAAoE;CACtF,OAAO,MAAY,SAAS;EAAE,KAAK;EAAU,OAAO;CAAW,IAAI;EAAE,KAAK;EAAQ,OAAO;CAAE;AAC7F;AAEA,SAAgB,EAAe,GAAwB,GAAqC;CAC1F,IAAM,IAAU,EAAO,WAAW,OAC5B,IAAY,EAAO,cAAc,MAAY,QAAQ,IAAI,IACzD,IAAe,EAAO,iBAAiB,MAAY,QAAQ,IAAI,IAI/D,IAAW,EAAiB,UAAU;EAAE,OAAO;EAAgB,kBAAkB;CAAO,CAAC,GACzF,IAAW,EAAiB,KAAK;EACrC,OAAO;EACP,mBAAmB;CACrB,CAAC,GACK,IAAa,EAAiB,KAAK;EAAE,OAAO;EAAoB,kBAAkB;CAAO,CAAC,GAG5F,IAAqB,CAAC,GACtB,IAA2B;CAE/B,SAAS,EAAa,GAAgC;EACpD,OAAO,EAAW,SAAS,SAAS,EAAY,SAAQ,EAAW,YAAY,EAAW,SAAU;EAEpG,KAAK,IAAI,IAAI,GAAG,IAAI,EAAY,QAAQ,KAAK;GAC3C,IAAM,IAAM,EAAY,IAClB,IAAQ,EAAO;GAErB,IAAI,CAAC,GAAO,OAAO;GAEnB,IAAM,EAAE,MAAG,SAAM,EAAY,CAAG,GAC5B,IAAO,EAAW,SAAS;GAiB/B,AAfK,MACH,IAAO,EAAiB,QAAQ,EAAE,OAAO,kBAAkB,CAAC,GAC5D,EAAW,YAAY,CAAI,IAG7B,EAAc,GAAM;IAClB,qBAAqB;IACrB,MAAM;IACN,eAAe;IACf,aAAa;IACb,eAAe;IACf;IACA;GACF,CAAC,GAED,EAAK,cAAc,EAAM;EAC3B;CACF;CAEA,IAAM,IAAS,EACb,GACA;EACE,MAAM,EAAO;EACb,QAAQ,EAAO;EACf,SAAS,EAAO;EAChB,SAAS,EAAO;CAClB,IACC,MAA4B;EAC3B,IAAM,EAAE,WAAQ,QAAK,eAAY;EAGjC,AAAK,EAAI,SAAS,CAAQ,MACxB,EAAI,YAAY,CAAQ,GACxB,EAAI,YAAY,CAAQ,GACxB,EAAI,YAAY,CAAU;EAG5B,IAAM,EAAE,QAAQ,GAAG,OAAO,MAAM,EAAI,WAAW,OACzC,IAAS,MAAY,QACrB,IAAK,IAAI,GACT,IAAK,IAAS,IAAI,MAAO,IAAI,GAE7B,IAAQ,IAAS,KAAK,IAAI,GAAI,CAAE,IAAI,IAAU,KAAK,IAAI,GAAG,CAAC,IAAI,IAAI,GACnE,IAAe,MAAY,QAAQ,IAAI,KAAK,MAAM,IAAQ,GAAI,GAC9D,IAAQ,EAAO,gBAAgB,KAAA,IAAiC,IAArB,EAAO,aAClD,IAAS,KAAK,IAAI,IAAQ,GAAG,CAAK,GAElC,IAAS,EAAW,EAAO,IAAI,IAAI,EAAO,KAAK,QAAQ,EAAO,MAC9D,EAAE,QAAK,aAAU,EAAW,CAAO;EAmBzC,KAjBA,IAAc,EACZ,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACC,MAAM,EAAY,CAAC,GACpB,EACF,GAEA,EAAc,GAAU;GAAE;GAAI;GAAI,GAAG,IAAQ,IAAI,IAAQ;EAAE,CAAC,GAC5D,EAAS,aAAa,SAAS,2BAA2B,GAEnD,EAAS,SAAS,SAAS,EAAY,SAAQ,EAAS,YAAY,EAAS,SAAU;EAE9F,OAAO,EAAW,SAAS,SAAS,EAAY,SAAQ,EAAW,YAAY,EAAW,SAAU;EAEpG,IAAM,IAAS,EAAc,EAAO,YAAY,CAAC,GAC3C,IAAM,EAAO,UACb,IAAS,EAAc,EAAO,MAAM;EAE1C,KAAK,IAAI,IAAI,GAAG,IAAI,EAAY,QAAQ,KAAK;GAC3C,IAAM,IAAM,EAAY,IACpB,IAAO,EAAS,SAAS;GAS7B,AAPK,MACH,IAAO,EAAiB,QAAQ,EAAE,OAAO,kBAAkB,CAAC,GAC5D,EAAS,YAAY,CAAI,IAG3B,EAAK,aAAa,QAAQ,EAAI,KAAK,GACnC,EAAK,aAAa,UAAU,MAAM,GAClC,EAAK,MAAM,SAAS,EAAO,WAAW,EAAO,UAAU,YAAY;EACrE;EAOA,IALI,MAAc,SAChB,qBAAqB,CAAS,GAC9B,IAAY,OAGV,IAAM,GAAG;GACX,IAAI,IAA0B,MAExB,KAAS,MAAe;IAC5B,AAAI,MAAa,SAAM,IAAW;IAElC,IAAM,IAAI,EAAO,KAAK,IAAI,IAAI,IAAK,KAAY,CAAG,CAAC,GAC7C,IAAc,EAAY,GAAO,GAAK,CAAC;IAE7C,KAAK,IAAI,IAAI,GAAG,IAAI,EAAY,QAAQ,KAAK;KAC3C,IAAM,IAAI,EAAY,IAChB,IAAK,EAAS,SAAS;KAExB,OAEL,IAAI,KAAe,EAAE,YACnB,EAAc,GAAI,EAAE,GAAG,GAAG,CAAC;UACtB;MACL,IAAM,IAAa,KAAK,IAAI,EAAE,UAAU,CAAW;MAEnD,EAAc,GAAI,EAAE,GAAG,EAAQ;OAAE,GAAG;OAAG,UAAU;MAAW,CAAC,EAAE,CAAC;KAClE;IACF;IAEA,AAAI,IAAI,IACN,IAAY,sBAAsB,CAAK,KAEvC,IAAY,MACZ,EAAa,CAAM;GAEvB;GAEA,IAAY,sBAAsB,CAAK;EACzC,OAAO;GACL,KAAK,IAAI,IAAI,GAAG,IAAI,EAAY,QAAQ,KAAK;IAC3C,IAAM,IAAI,EAAY,IAChB,IAAK,EAAS,SAAS;IAE7B,AAAI,KAAI,EAAc,GAAI,EAAE,GAAG,EAAQ,CAAC,EAAE,CAAC;GAC7C;GAEA,EAAa,CAAM;EACrB;EA+CA,OA7CA,GAAQ,OAAO,EAAY,KAAK,OAAS;GAAE,OAAO,EAAI;GAAO,MAAM,EAAI,MAAM,SAAS;EAAG,EAAE,CAAC,GAC5F,GAAS,KAAK,GA4CP;GAAE,UAXQ,MAAwB;IACvC,IAAI,CAAC,EAAO,SAAS;IAErB,IAAM,IAAU,EAAI,sBAAsB,GACpC,IAAK,EAAE,UAAU,EAAQ,MACzB,IAAK,EAAE,UAAU,EAAQ,KACzB,IAAM,EAAW,GAAa,GAAI,GAAI,CAAO;IAEnD,AAAI,KAAO,KAAG,EAAO,QAAQ,EAAY,EAAI,CAAC,OAAO,CAAG;GAC1D;GAEkB,oBAhBe;IAE/B,AADA,EAAO,UAAU,MAAM,IAAI,GAC3B,GAAS,KAAK;GAChB;GAagC,cA1CX,MAAwB;IAC3C,IAAM,IAAU,EAAI,sBAAsB,GACpC,IAAK,EAAE,UAAU,EAAQ,MACzB,IAAK,EAAE,UAAU,EAAQ,KACzB,IAAM,EAAW,GAAa,GAAI,GAAI,CAAO;IAEnD,IAAI,KAAO,GAAG;KACZ,IAAM,IAAM,EAAY;KAExB,EAAO,UAAU,EAAI,OAAO,CAAG;KAE/B,IAAM,EAAE,MAAG,SAAM,EAAY,CAAG,GAC1B,IAAQ,EAAU,sBAAsB;KAE9C,GAAS,KACP,KAAK,EAAQ,OAAO,EAAM,OAC1B,KAAK,EAAQ,MAAM,EAAM,MACzB;MAAE,KAAK;MAAK,OAAO,EAAI,MAAM;KAAM,GACnC;MAAE,OAAO,EAAI;MAAO,MAAM,CAAC;MAAG,MAAM,EAAI,MAAM,SAAS;KAAG,CAC5D;IACF,OAEE,AADA,EAAO,UAAU,MAAM,IAAI,GAC3B,GAAS,KAAK;GAElB;EAkB4C;CAC9C,CACF;CAEA,OAAO;EACL,IAAI,iBAA8B;GAChC,OAAO,EAAO;EAChB;EAEA,UAAU;GAMR,AALI,MAAc,SAChB,qBAAqB,CAAS,GAC9B,IAAY,OAGd,EAAO,QAAQ;EACjB;EAEA,IAAI,WAAoB;GACtB,OAAO,EAAO;EAChB;EAEA,IAAI,EAAO;EAEX,CAAC,OAAO,WAAW;GACjB,KAAK,QAAQ;EACf;CACF;AACF;AAEA,SAAS,EAAW,GAAa,GAAY,GAAY,GAA4C;CACnG,KAAK,IAAI,IAAI,GAAG,IAAI,EAAK,QAAQ,KAAK;EACpC,IAAM,IAAM,EAAK,IACX,IAAK,IAAK,EAAI,SACd,IAAK,IAAK,EAAI,SACd,IAAO,KAAK,KAAK,IAAK,IAAK,IAAK,CAAE;EAExC,IAAI,IAAO,EAAI,eAAe,KAAQ,EAAI,aAAa;GACrD,IAAM,IAAW,KAAK,MAAM,GAAI,CAAC,CAAE;GAEnC,IAAI,MAAY,QACV;QAAA,KAAY,EAAI,aAAa,QAAQ,KAAY,EAAI,WAAW,MAAM,OAAO;GAAA,OAC5E;IACL,IAAM,IAAQ,IAAW,IAAI,IAAW,IAAS;IAEjD,IAAI,KAAS,EAAI,aAAa,QAAQ,KAAS,EAAI,WAAW,MAAM,OAAO;GAC7E;EACF;CACF;CAEA,OAAO;AACT"}
|
package/dist/prism.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@vielzeug/ripple"),t=require("@vielzeug/orbit");var n={"ease-in":e=>e*e,"ease-in-out":e=>e<.5?2*e*e:1-(-2*e+2)**2/2,"ease-out":e=>1-(1-e)*(1-e),linear:e=>e};function r(e){return typeof e==`function`?e:e!==void 0&&Object.hasOwn(n,e)?n[e]:n[`ease-out`]}function i(e,t=300){let n=e?.preference??`system`,r=typeof matchMedia<`u`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches,i=n===`never`||n===`system`&&r?0:e?.duration??t;return{...e,duration:i,stagger:Math.max(0,e?.stagger??0)}}function a(e,t,n){return e+(t-e)*n}function o(e,t,n,o){let s=i(t),c=s.duration,l=r(s.easing),u=s.stagger;if(c===0||e.length===0){for(let t of e)for(let[e,{to:n}]of Object.entries(t.attrs))t.el.setAttribute(e,String(n));return n?.(),()=>{}}let d=null,f=!1,p=Math.max(c,c+u*(e.length-1));function m(t){if(f||o?.aborted)return;d===null&&(d=t);let r=t-d;for(let t=0;t<e.length;t++){let n=e[t],i=u*t,o=Math.max(0,r-i),s=Math.min(1,o/c),d=l(s);for(let[e,{from:t,to:r}]of Object.entries(n.attrs))n.el.setAttribute(e,String(a(t,r,d)))}r<p?requestAnimationFrame(m):n?.()}return requestAnimationFrame(m),()=>{f=!0}}var s=`http://www.w3.org/2000/svg`;function c(e,t){let n=document.createElementNS(s,e);return t&&l(n,t),n}function l(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 u(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function d(e,t){let n=c(`text`,t);return n.textContent=e,n}function f(e){return typeof e.bandwidth==`function`}function p(e,t){return f(e)?e.map(t)+e.bandwidth()/2:e.map(t)}var m=e=>e instanceof Date?e.toLocaleDateString(void 0,{month:`short`,year:`numeric`}):String(e);function h(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 g(e,t,n,r,i=`bottom`){u(e);let a=n.position??i,o=a===`bottom`||a===`top`,s=a===`top`||a===`left`,f=s?-1:1,g=c(`line`,{"aria-hidden":`true`,class:`prism-axis-line`,x1:0,x2:o?r:0,y1:0,y2:o?0:r});e.appendChild(g);let _=t.ticks(h(n,r,i)),v=n.tickFormat??m;for(let n of _){let r=p(t,n),i=c(`line`,{"aria-hidden":`true`,class:`prism-axis-tick`,x1:o?r:0,x2:o?r:6*f,y1:o?0:r,y2:o?6*f:r});e.appendChild(i);let a=d(v(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*f*1.5,y:o?6*f*1.5:r});e.appendChild(a)}if(n.label){let t=d(n.label,{class:`prism-axis-title`,"dominant-baseline":`middle`,"text-anchor":`middle`});o?l(t,{x:r/2,y:6*f*3.5}):l(t,{transform:`translate(${6*f*4}, ${r/2}) rotate(-90)`}),e.appendChild(t)}}function _(e,t,n,r,i,a=10){u(e);let o=n!==!0&&n.color||void 0,s=n!==!0&&n.dash||void 0,l=t.ticks(a);for(let n of l){let a=p(t,n),l={class:`prism-grid-line`,stroke:o??`var(--prism-grid-color)`,"stroke-dasharray":s,"stroke-opacity":`var(--prism-grid-opacity)`};i===`vertical`?Object.assign(l,{x1:a,x2:a,y1:0,y2:r}):Object.assign(l,{x1:0,x2:r,y1:a,y2:a}),e.appendChild(c(`line`,l))}}function v(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 y(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=v(v(t-e,!1)/Math.max(1,n-1),!0);return[Math.floor(e/r)*r,Math.ceil(t/r)*r]}function b(e){let t=()=>e.nice===!1?e.domain:y(e.domain[0],e.domain[1],10),n=()=>e.range;return{get domain(){return t()},invert(e){let[r,i]=t(),[a,o]=n();return o===a?r:r+(e-a)/(o-a)*(i-r)},map(r){let[i,a]=t(),[o,s]=n();if(a===i)return o;let c=(r-i)/(a-i);return e.clamp&&(c=Math.max(0,Math.min(1,c))),o+c*(s-o)},get range(){return n()},ticks(e=10){if(e<=0)return[];let[n,r]=t();if(n===r||e===1)return[n];let i=Math.min(n,r),a=Math.max(n,r),o=v(v(a-i,!1)/(e-1),!0),s=Math.ceil(i/o)*o,c=Math.floor(a/o)*o,l=[];for(let e=s;e<=c+o*.5;e+=o)l.push(Math.round(e*0xe8d4a51000)/0xe8d4a51000);return l}}}var x=1e3,S=60*x,C=60*S,w=24*C,T=30*w,E=365*w,D=[x,5*x,15*x,30*x,S,5*S,15*S,30*S,C,3*C,6*C,12*C,w,7*w,T,3*T,6*T,E];function O(e,t){let n=Math.abs(e)/Math.max(1,t);for(let e of D)if(e>=n)return e;return E}function k(e,t){let[n,r]=e;n.getTime()>r.getTime()&&([n,r]=[r,n]);let i=O(r.getTime()-n.getTime(),t);return[new Date(Math.floor(n.getTime()/i)*i),new Date(Math.ceil(r.getTime()/i)*i)]}function A(e){let t=()=>e.nice===!1?e.domain:k(e.domain,10),n=()=>e.range;return{get domain(){return t()},invert(e){let[r,i]=t(),[a,o]=n();if(o===a)return r;let s=(e-a)/(o-a);return new Date(r.getTime()+s*(i.getTime()-r.getTime()))},map(e){let[r,i]=t(),[a,o]=n(),s=i.getTime()-r.getTime();return s===0?a:a+(e.getTime()-r.getTime())/s*(o-a)},get range(){return n()},ticks(e=10){let[n,r]=t(),i=O(r.getTime()-n.getTime(),e),a=Math.ceil(n.getTime()/i)*i,o=[];for(let e=a;e<=r.getTime();e+=i)o.push(new Date(e));return o}}}function j(e,t){if(e.length===0||e.some(e=>e==null)||e.some(e=>typeof e==`number`&&!Number.isFinite(e)))return b({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 A({domain:[new Date(r),new Date(r===i?i+1:i)],range:[0,t]})}let n=e,r=Math.min(...n),i=Math.max(...n);return b({domain:[r,r===i?i+1:i],nice:!1,range:[0,t]})}function M(e,t,n=!0){if(e.length===0||e.some(e=>e==null)||e.some(e=>!Number.isFinite(e)))return b({domain:[0,1],range:[t,0]});let r=Math.min(...e),i=n?Math.min(0,r):r,a=Math.max(...e);return b({domain:[i,i===a?a+1:a],range:[t,0]})}function N(e){return e===!0?`bottom`:e.position??`bottom`}function P(e,t){let n=N(t),r=document.createElement(`div`);r.className=`prism-legend prism-legend-${n}`,n===`top`?e.insertBefore(r,e.firstChild):e.appendChild(r);let i=()=>{r.remove()};return{dispose:i,el:r,[Symbol.dispose]:i,update(e){r.innerHTML=``;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 i=document.createElement(`span`);i.className=`prism-legend-label`,i.textContent=t.name,e.appendChild(n),e.appendChild(i),r.appendChild(e)}}}}function ee(e,n){getComputedStyle(e).position===`static`&&(e.style.position=`relative`);let r=document.createElement(`div`);r.className=`prism-tooltip`,r.style.position=`absolute`,r.style.pointerEvents=`none`,r.style.top=`0`,r.style.left=`0`,r.setAttribute(`role`,`status`),r.setAttribute(`aria-live`,`polite`),e.appendChild(r);let i=n!==!0&&n?.offset||8,a=n===!0?void 0:n?.render,o=n===!0?void 0:n?.sanitize,s=null,c=null,l=!1,u=()=>{c!==null&&(clearTimeout(c),c=null)},d=()=>{s!==null&&(cancelAnimationFrame(s),s=null)},f=()=>{d(),u(),r.remove()};return{dispose:f,el:r,hide(){d(),u(),l=!1,r.style.opacity=`0`,c=setTimeout(()=>{c=null,l||(r.textContent=``)},150)},show(n,c,d,f){if(!e.isConnected)return;if(u(),a){let e=a(d,f);o?r.innerHTML=o(e):r.textContent=e}else r.textContent=`${f.name}: ${d.value}`;let{x:p,y:m}=(0,t.computePosition)({getBoundingClientRect:()=>{let t=e.getBoundingClientRect();return{bottom:t.top+c,height:0,left:t.left+n,right:t.left+n,top:t.top+c,width:0,x:t.left+n,y:t.top+c}}},r,{containingBlock:e,middleware:[(0,t.offset)(i),(0,t.flip)(),(0,t.shift)({padding:8})],placement:`top`});if(r.style.left=`${p}px`,r.style.top=`${m}px`,l){s===null&&(r.style.opacity=`1`);return}l=!0,r.style.opacity=`0`,s=requestAnimationFrame(()=>{s=null,l&&(r.style.opacity=`1`)})},[Symbol.dispose]:f}}var te=class extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}},ne=class extends te{},F={bottom:40,left:50,right:20,top:20};function re(e){return{...F,...e}}function I(e,t,n){return{height:Math.max(0,t-n.top-n.bottom),width:Math.max(0,e-n.left-n.right)}}function ie(e,t){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 ae(t,n){if(!(typeof t==`object`&&t&&t.nodeType===1&&typeof t.appendChild==`function`&&typeof t.getBoundingClientRect==`function`)){let e=t;throw new ne(`Invalid chart configuration: \`container\` must be a DOM Element, received ${e===null?`null`:typeof e==`object`?e.constructor?.name??`object`:typeof e}.`)}let r=re(n.margin),i=n.a11y,a=c(`svg`,{...n.ariaHidden||i?.decorative?{"aria-hidden":`true`}:{...i?{"aria-label":i.ariaLabel,tabindex:`0`}:{},role:`img`},class:`prism-chart`,style:`display:block;width:100%;height:100%`}),o=c(`g`,{class:`prism-chart-area`,transform:`translate(${r.left},${r.top})`});a.appendChild(o);let s=t.getBoundingClientRect();s.width===0||s.height;let u=typeof getComputedStyle<`u`?getComputedStyle(t):null;u&&u.position;let d=(0,e.signal)({height:s.height||300,margin:r,width:s.width||600}),f=ie(t,(e,t)=>{d.value={height:t,margin:r,width:e},l(a,{height:t,viewBox:`0 0 ${e} ${t}`,width:e})}),p=s.width||600,m=s.height||300;return l(a,{height:m,viewBox:`0 0 ${p} ${m}`,width:p}),t.appendChild(a),{chartArea:o,dimensions:d,dispose(){f(),a.remove()},svg:a}}function L(e,t,n,r){u(e.series),u(e.grid),u(e.xAxis),u(e.yAxis),t?.update([]),n?.hide(),r?.hide()}function oe(t,n,r,i){let a=ae(t,{a11y:n.a11y,margin:n.margin}),o=n.tooltip?ee(t,n.tooltip):null,s=n.legend?P(t,n.legend):null,c=new AbortController,l=r(a,o,s,c.signal),u=!1,d=se(a.svg),f=(0,e.createScope)();f.run(()=>{(0,e.effect)(()=>{u||d.attach(i(l))},{scheduler:`microtask`})});let p=[];if(n.plugins){let e={container:t,dimensions:a.dimensions,disposalSignal:c.signal,svg:a.svg};for(let t of n.plugins)try{t.install(e),p.push(t)}catch{}}return{get disposalSignal(){return c.signal},dispose(){if(!u){u=!0,c.abort(),d.detach();for(let e of p)try{e.dispose()}catch{}o?.dispose(),s?.dispose(),f.dispose(),a.dispose()}},get disposed(){return u},el:a.svg,[Symbol.dispose](){this.dispose()}}}function se(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 R(e,t,n){return oe(e,t,(t,n,r,i)=>{let a={grid:c(`g`,{"aria-hidden":`true`,class:`prism-grid`}),series:c(`g`,{class:`prism-series`}),xAxis:c(`g`,{class:`prism-x-axis`}),yAxis:c(`g`,{class:`prism-y-axis`})};return t.chartArea.appendChild(a.grid),t.chartArea.appendChild(a.xAxis),t.chartArea.appendChild(a.yAxis),t.chartArea.appendChild(a.series),{chartArea:t.chartArea,container:e,dimensions:t.dimensions,disposalSignal:i,groups:a,legend:r,svg:t.svg,tooltip:n}},n)}function ce(e,t,n){return oe(e,t,(t,n,r,i)=>({container:e,dimensions:t.dimensions,disposalSignal:i,legend:r,svg:t.svg,tooltip:n}),n)}function le(e,t){let n=t===!0||t?.vertical!==!1,r=t!==!0&&t?.horizontal===!0,i=t===!0||t?.snap!==!1,a=c(`g`,{"aria-hidden":`true`,class:`prism-crosshair`,style:`display:none`}),o=n?c(`line`,{class:`prism-crosshair-v`,"stroke-dasharray":`var(--prism-crosshair-dash, 4 2)`}):null,s=r?c(`line`,{class:`prism-crosshair-h`,"stroke-dasharray":`var(--prism-crosshair-dash, 4 2)`}):null;o&&a.appendChild(o),s&&a.appendChild(s),e.appendChild(a);let u=c(`text`,{"aria-live":`polite`,class:`prism-crosshair-live`,role:`status`,x:-9999,y:-9999});return e.appendChild(u),{hide(){a.style.display=`none`,u.textContent=``},show(e,t,n,r,i){a.style.display=``,o&&l(o,{x1:e,x2:e,y1:0,y2:r}),s&&l(s,{x1:0,x2:n,y1:t,y2:t}),i!==void 0&&(u.textContent=i)},snap:i}}function z(e){return e instanceof Date?`date:${e.getTime()}`:`${typeof e}:${String(e)}`}function ue(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=z(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 B(e,t,n,r){let i=e.getBoundingClientRect();return{x:t.clientX-i.left-n,y:t.clientY-i.top-r}}function de(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 V(e,t,n,r){let i=z(n),a=null,o=1/0;for(let n=0;n<t.length;n++){let s=e[n]?.findIndex(e=>z(e.key)===i)??-1,c=s===-1?void 0:e[n]?.[s],l=s===-1?void 0:t[n]?.[s];if(!c||!l)continue;let u=Number.isFinite(r)?Math.abs(l.y-r):0;u<o&&(o=u,a={datum:c,point:l,seriesIndex:n})}return a}function fe(e){let t=0;return{onClick:t=>{if(!e.onClick)return;let n=e.getPoints();if(n.length===0||n[0].length===0)return;let r=e.dims(),i=B(e.svg,t,r.margin.left,r.margin.top),a=I(r.width,r.height,r.margin);if(i.x<0||i.x>a.width||i.y<0||i.y>a.height)return;let o=de(e.getData(),n,i.x);if(o===null)return;let s=V(e.getData(),n,o,i.y),c=s?e.getSeriesList()[s.seriesIndex]:void 0;s&&c&&e.onClick({datum:s.datum,originalEvent:t,series:c})},onKeyDown:n=>{let r=e.getData(),i=e.getPoints(),a=[...new Map(r.flat().map(e=>[z(e.key),e.key])).values()];if(a.length!==0){if(n.key===`ArrowLeft`||n.key===`ArrowRight`){n.preventDefault(),t=Math.max(0,Math.min(a.length-1,t+(n.key===`ArrowLeft`?-1:1)));let o=a[t],s=V(r,i,o,1/0),c=s?e.getSeriesList()[s.seriesIndex]:void 0;if(!s||!c)return;e.crosshair?.show(s.point.x,s.point.y,e.dims().width,e.dims().height,`${c.name}: ${s.datum.value}`),e.tooltip?.show(s.point.x+e.dims().margin.left,s.point.y+e.dims().margin.top,s.datum,c),e.onHover?.({datum:s.datum,originalEvent:n,series:c})}if((n.key===`Enter`||n.key===` `)&&e.onClick){n.preventDefault();let o=a[t],s=V(r,i,o,1/0),c=s?e.getSeriesList()[s.seriesIndex]:void 0;s&&c&&e.onClick({datum:s.datum,originalEvent:n,series:c})}n.key===`Escape`&&(e.crosshair?.hide(),e.tooltip?.hide(),e.onHover?.(null))}},onMouseLeave:()=>{e.crosshair?.hide(),e.tooltip?.hide(),e.onHover?.(null)},onMouseMove:t=>{let n=e.getPoints();if(n.length===0||n[0].length===0)return;let r=e.dims(),i=B(e.svg,t,r.margin.left,r.margin.top),a=I(r.width,r.height,r.margin);if(i.x<0||i.x>a.width||i.y<0||i.y>a.height){e.crosshair?.hide(),e.tooltip?.hide();return}let o=de(e.getData(),n,i.x);if(o===null)return;let s=V(e.getData(),n,o,i.y),c=s?e.getSeriesList()[s.seriesIndex]:void 0,l=e.crosshair?.snap===!1?i.x:s?.point.x??i.x,u=e.crosshair?.snap===!1?i.y:s?.point.y??i.y;e.crosshair?.show(l,u,a.width,a.height,c&&s?`${c.name}: ${s.datum.value}`:void 0),s&&c&&(e.tooltip?.show(s.point.x+r.margin.left,s.point.y+r.margin.top,s.datum,c),e.onHover?.({datum:s.datum,originalEvent:t,series:c}))}}}var H=8;function pe(e){let t=document.documentElement;if(e.colors)for(let n=0;n<H;n++){let r=e.colors[n];r?t.style.setProperty(`--prism-color-${n+1}`,r):t.style.removeProperty(`--prism-color-${n+1}`)}e.fontFamily&&t.style.setProperty(`--prism-font-family`,e.fontFamily),e.gridColor&&t.style.setProperty(`--prism-grid-color`,e.gridColor),e.gridOpacity!==void 0&&t.style.setProperty(`--prism-grid-opacity`,String(e.gridOpacity))}function me(){let e=document.documentElement;for(let t=1;t<=H;t++)e.style.removeProperty(`--prism-color-${t}`);e.style.removeProperty(`--prism-font-family`),e.style.removeProperty(`--prism-grid-color`),e.style.removeProperty(`--prism-grid-opacity`)}function U(e,t){return t??`var(--prism-color-${e%H+1})`}function W(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 G(e){if(e.length<3)return W(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 K(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 q(e,t,n=`linear`){if(e.length===0)return``;let r=n===`monotone`?G(e):n===`step`?K(e):W(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 J=new WeakMap,Y=new WeakMap;function he(e,t){return t===`monotone`?G(e):t===`step`?K(e):W(e)}function ge(e,t,n,o){let s=i(o.transition,0),u=s.duration,d=r(s.easing),f=e.querySelector(`.prism-area-fill`);f||(f=c(`path`,{class:`prism-area-fill`}),e.appendChild(f)),l(f,{fill:o.color,"fill-opacity":o.fillOpacity,stroke:`none`});let p=null;if(o.showLine?(p=e.querySelector(`.prism-area-line`),p||(p=c(`path`,{class:`prism-area-line`,fill:`none`}),e.appendChild(p)),l(p,{stroke:o.color,"stroke-width":2})):e.querySelector(`.prism-area-line`)?.remove(),u===0){let e=t.map(e=>({x:e.x,y:n}));l(f,{d:q(t,e,o.curve)}),p&&l(p,{d:he(t,o.curve)});return}if(J.get(e)?.(),!f.hasAttribute(`d`)){let r=t.map(e=>({x:e.x,y:n}));l(f,{d:q(t,r,o.curve)}),p&&l(p,{d:he(t,o.curve)}),Y.set(e,t);return}let m=Y.get(e)??t,h=t.map((e,n)=>m[n]??m[m.length-1]??t[n]),g=null;function _(r){if(o.disposalSignal?.aborted){J.delete(e);return}g===null&&(g=r);let i=Math.min(1,(r-g)/u),s=d(i),c=t.map((e,t)=>({x:a(h[t].x,e.x,s),y:a(h[t].y,e.y,s)})),m=c.map(e=>({x:e.x,y:n}));if(l(f,{d:q(c,m,o.curve)}),p&&l(p,{d:he(c,o.curve)}),i<1){let t=requestAnimationFrame(_);J.set(e,()=>cancelAnimationFrame(t))}else J.delete(e),Y.set(e,t)}Y.set(e,h);let v=requestAnimationFrame(_);J.set(e,()=>cancelAnimationFrame(v))}function _e(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 ve(t,n){let r=null;return R(t,n,t=>{let{groups:i,legend:a,tooltip:o}=t,s=t.dimensions.value,l=I(s.width,s.height,s.margin),u=(0,e.isReactive)(n.series)?n.series.value:n.series,d=u.map(t=>(0,e.isReactive)(t.data)?t.data.value:t.data),f=d.flat().map(e=>e.key),p=d.flat().map(e=>e.value);if(f.length===0){L(i,a,o,r);return}n.crosshair&&!r&&(r=le(t.chartArea,n.crosshair));let m=j(f,l.width),v=M(p,l.height),y=v.map(0);for(n.yAxis?.grid&&_(i.grid,v,n.yAxis.grid,l.width,`horizontal`,h(n.yAxis,l.height,`left`)),n.xAxis?.grid&&_(i.grid,m,n.xAxis.grid,l.height,`vertical`,h(n.xAxis,l.width,`bottom`)),n.xAxis&&(i.xAxis.setAttribute(`transform`,`translate(0,${l.height})`),g(i.xAxis,m,n.xAxis,l.width,`bottom`)),n.yAxis&&g(i.yAxis,v,n.yAxis,l.height,`left`);i.series.children.length>u.length;)i.series.removeChild(i.series.lastChild);let b=[];for(let e=0;e<u.length;e++){let r=u[e],a=i.series.children[e];a||(a=c(`g`,{class:`prism-area-series`}),i.series.appendChild(a));let o=_e(d[e],m,v);b.push(o),ge(a,o,y,{color:U(e,r.color),curve:r.curve??`linear`,disposalSignal:t.disposalSignal,fillOpacity:r.fillOpacity??.3,showLine:r.showLine!==!1,transition:n.transition})}return a?.update(u.map((e,t)=>({color:U(t,e.color),name:e.name}))),o?.hide(),fe({crosshair:r,dims:()=>t.dimensions.value,getData:()=>d,getPoints:()=>b,getSeriesList:()=>(0,e.isReactive)(n.series)?n.series.value:n.series,onClick:n.onClick,onHover:n.onHover,svg:t.svg,tooltip:o})})}function ye(e){let t=()=>e.domain,n=()=>e.range,r=()=>{let r=t().length;if(r===0)return 0;let[i,a]=n(),o=e.padding??.1;return(a-i)/(r+(r-1)*o+(e.paddingOuter??o)*2)};return{bandwidth:r,get domain(){return t()},gap(){let t=e.padding??.1;return r()*t},map(i){let a=t().indexOf(i);if(a===-1)return`${i}`,0;let[o]=n(),s=r(),c=e.padding??.1;return o+(e.paddingOuter??c)*s+a*(s+s*c)},get range(){return n()},ticks(e){let n=t();if(e===void 0||e>=n.length)return[...n];if(e<=0)return[];let r=Math.ceil(n.length/e);return n.filter((e,t)=>t%r===0)}}}function be(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 xe(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))}}function Se(e,t,n,r,i){let a=i-1,o=r.stacked?r.stackedTops[a]?.[t]??0:Math.max(...Array.from({length:i},(e,r)=>n[r]?.[t]?.value??0)),s=r.valueScale.map(o);return r.horizontal?e.x>s:e.y<s}var Ce=new WeakMap;function we(e,t,n,r,i,a){for(;e.children.length>t.length;){let t=e.lastElementChild;t&&e.removeChild(t)}let s=n.bandwidth(),u=a.stacked?s:s/a.seriesCount,d=a.stacked?0:u*a.seriesIndex,f=a.horizontal??!1,p=[],m=[];for(let o=0;o<t.length;o++){let s=t[o],h=n.map(s.key)+d,g=a.baselineYs?a.baselineYs[o]:i,_=r.map(s.y),v=e.children[o],y=!v;if(v||(v=c(`rect`,{class:`prism-bar`}),e.appendChild(v)),v.style.display=s.present?``:`none`,f){let e=Math.max(0,Math.abs(g-_)),t=Math.min(_,g);l(v,{fill:a.color,height:Math.max(0,u-1),rx:a.borderRadius,ry:a.borderRadius,y:h}),a.transition?y?(l(v,{width:0,x:g}),p.push({attrs:{width:{from:0,to:e},x:{from:g,to:t}},el:v})):m.push({attrs:{width:{from:Number(v.getAttribute(`width`)??e),to:e},x:{from:Number(v.getAttribute(`x`)??t),to:t}},el:v}):l(v,{width:e,x:t})}else{let e=Math.max(0,Math.abs(g-_)),t=Math.min(_,g);l(v,{fill:a.color,rx:a.borderRadius,ry:a.borderRadius,width:Math.max(0,u-1),x:h}),a.transition?y?(l(v,{height:0,y:g}),p.push({attrs:{height:{from:0,to:e},y:{from:g,to:t}},el:v})):m.push({attrs:{height:{from:Number(v.getAttribute(`height`)??e),to:e},y:{from:Number(v.getAttribute(`y`)??t),to:t}},el:v}):l(v,{height:e,y:t})}}if(a.transition){Ce.get(e)?.();let t=[];p.length>0&&t.push(o(p,a.transition,void 0,a.disposalSignal)),m.length>0&&t.push(o(m,{...a.transition,stagger:0},void 0,a.disposalSignal)),Ce.set(e,()=>{for(let e of t)e()})}}function Te(e){return{horizontal:e===`grouped-horizontal`||e===`stacked-horizontal`,stacked:e===`stacked`||e===`stacked-horizontal`}}function Ee(t,n){return R(t,n,t=>{let{groups:r,legend:i,tooltip:a}=t,o=t.dimensions.value,s=I(o.width,o.height,o.margin),l=(0,e.isReactive)(n.series)?n.series.value:n.series,u=ue(l,l.map(t=>(0,e.isReactive)(t.data)?t.data.value:t.data)),d=u.domain,f=u.series.map(({byKey:e})=>d.map(t=>e.get(t))),p=e=>{if(e)return{...e,tickFormat:t=>{let n=String(t),r=u.labels.get(n)??t;return e.tickFormat?e.tickFormat(r):String(r)}}};if(d.length===0){L(r,i,a);return}let{horizontal:m,stacked:v}=Te(n.variant??`grouped`),y,x;if(v){f.some(e=>e.some(e=>(e?.value??0)<0));let e=d.map((e,t)=>f.reduce((e,n)=>e+Math.max(0,n[t]?.value??0),0));y=Math.max(...e),x=0}else{let e=f.flatMap(e=>e.flatMap(e=>e?[e.value]:[]));y=Math.max(...e),x=Math.min(0,...e)}let S=ye(m?{domain:d,range:[0,s.height]}:{domain:d,range:[0,s.width]}),C=b(m?{domain:[x,y],range:[0,s.width]}:{domain:[x,y],range:[s.height,0]}),w=[],T=Object.create(null);for(let e of d)T[e]=0;let E={bandCenter:e=>S.map(e)+S.bandwidth()/2,bandwidth:S.bandwidth(),baselinePx:C.map(0),horizontal:m,stacked:v,stackedTops:w,valueScale:C};if(m){n.xAxis?.grid&&_(r.grid,C,n.xAxis.grid,s.height,`vertical`,h(n.xAxis,s.width,`bottom`));let e=p(n.yAxis);e&&g(r.yAxis,S,e,s.height,`left`),n.xAxis&&(r.xAxis.setAttribute(`transform`,`translate(0,${s.height})`),g(r.xAxis,C,n.xAxis,s.width,`bottom`))}else{n.yAxis?.grid&&_(r.grid,C,n.yAxis.grid,s.width,`horizontal`,h(n.yAxis,s.height,`left`));let e=p(n.xAxis);e&&(r.xAxis.setAttribute(`transform`,`translate(0,${s.height})`),g(r.xAxis,S,e,s.width,`bottom`)),n.yAxis&&g(r.yAxis,C,n.yAxis,s.height,`left`)}for(;r.series.children.length>l.length;){let e=r.series.lastElementChild;e&&r.series.removeChild(e)}for(let e=0;e<l.length;e++){let i=l[e],a=r.series.children[e];a||(a=c(`g`,{class:`prism-bar-series`}),r.series.appendChild(a));let o=d.map((t,n)=>{let r=f[e]?.[n];if(v){let e=T[t]??0,n=e+Math.max(0,r?.value??0);return T[t]=n,{base:e,key:t,present:r!==void 0,y:n}}return{base:0,key:t,present:r!==void 0,y:r?.value??0}});w[e]=o.map(e=>e.y);let s=v?o.map(e=>C.map(e.base)):void 0;we(a,o,S,C,E.baselinePx,{baselineYs:s,borderRadius:i.borderRadius??0,color:U(e,i.color),disposalSignal:t.disposalSignal,horizontal:m,seriesCount:l.length,seriesIndex:e,stacked:v,transition:n.transition})}return i?.update(l.map((e,t)=>({color:U(t,e.color),name:e.name}))),a?.hide(),{onClick:e=>{if(!n.onClick)return;let r=t.dimensions.value,i=B(t.svg,e,r.margin.left,r.margin.top),a=I(r.width,r.height,r.margin);if(i.x<0||i.x>a.width||i.y<0||i.y>a.height)return;let o=be(m?i.y:i.x,d,E);if(o===-1)return;let s=xe(i,o,d,E,l.length),c=f[s]?.[o];c&&n.onClick({datum:c,originalEvent:e,series:l[s]})},onMouseLeave:()=>{a?.hide(),n.onHover?.(null)},onMouseMove:e=>{let r=t.dimensions.value,i=B(t.svg,e,r.margin.left,r.margin.top),o=I(r.width,r.height,r.margin);if(i.x<0||i.x>o.width||i.y<0||i.y>o.height){a?.hide();return}let s=be(m?i.y:i.x,d,E);if(s===-1){a?.hide();return}if(Se(i,s,f,E,l.length)){a?.hide();return}let c=xe(i,s,d,E,l.length),u=f[c]?.[s];if(u){let t=E.bandCenter(d[s]),i=v?w[c]?.[s]??u.value:u.value,o=C.map(i),f=m?o+r.margin.left:t+r.margin.left,p=m?t+r.margin.top:o+r.margin.top;a?.show(f,p,u,l[c]),n.onHover?.({datum:u,originalEvent:e,series:l[c]})}}}})}var X=new WeakMap;function De(e,t){return t===`monotone`?G(e):t===`step`?K(e):W(e)}function Oe(e,t,n){let o=i(n.transition,0),s=o.duration,u=r(o.easing),d=e.querySelector(`.prism-line-path`);d||(d=c(`path`,{class:`prism-line-path`,fill:`none`}),e.appendChild(d)),l(d,{stroke:n.color,"stroke-width":n.strokeWidth});let f=e.querySelector(`.prism-line-dots`);if(n.showPoints?f||(f=c(`g`,{class:`prism-line-dots`}),e.appendChild(f)):f&&=(f.remove(),null),s===0){if(l(d,{d:De(t,n.curve)}),f){for(;f.children.length>t.length;)f.removeChild(f.lastChild);for(let e=0;e<t.length;e++){let r=f.children[e];r||(r=c(`circle`,{class:`prism-line-dot`}),f.appendChild(r)),l(r,{cx:t[e].x,cy:t[e].y,fill:n.color,r:n.pointRadius})}}return}X.get(e)?.();let p=!!d.getAttribute(`d`),m=[],h=null;if(f){let e=f.children.length;for(let t=0;t<e;t++){let e=f.children[t],n={x:Number(e.getAttribute(`cx`)),y:Number(e.getAttribute(`cy`))};m.push(n),h=n}for(;f.children.length>t.length;)f.removeChild(f.lastChild);for(let e=f.children.length;e<t.length;e++){let r=c(`circle`,{class:`prism-line-dot`});l(r,{cx:t[e].x,cy:t[e].y,fill:n.color,r:n.pointRadius}),f.appendChild(r)}}for(let e=m.length;e<t.length;e++)m.push(h??t[e]);let g=null;function _(r){if(n.disposalSignal?.aborted){X.delete(e);return}g===null&&(g=r);let i=Math.min(1,(r-g)/s),o=u(i),c=t.map((e,t)=>{let n=m[t]??e;return{x:a(n.x,e.x,o),y:a(n.y,e.y,o)}});if(l(d,{d:De(c,n.curve)}),f)for(let e=0;e<t.length;e++){let t=f.children[e];t&&l(t,{cx:c[e].x,cy:c[e].y})}if(i<1){let t=requestAnimationFrame(_);X.set(e,()=>cancelAnimationFrame(t))}else X.delete(e)}if(!p)l(d,{d:De(t,n.curve)});else{let t=requestAnimationFrame(_);X.set(e,()=>cancelAnimationFrame(t))}}function ke(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 Ae(t,n){let r=null;return R(t,n,t=>{let{groups:i,legend:a,tooltip:o}=t,s=t.dimensions.value,l=I(s.width,s.height,s.margin),u=(0,e.isReactive)(n.series)?n.series.value:n.series,d=u.map(t=>(0,e.isReactive)(t.data)?t.data.value:t.data),f=d.flat().map(e=>e.key),p=d.flat().map(e=>e.value);if(f.length===0){L(i,a,o,r);return}n.crosshair&&!r&&(r=le(t.chartArea,n.crosshair));let m=j(f,l.width),v=M(p,l.height);for(n.yAxis?.grid&&_(i.grid,v,n.yAxis.grid,l.width,`horizontal`,h(n.yAxis,l.height,`left`)),n.xAxis?.grid&&_(i.grid,m,n.xAxis.grid,l.height,`vertical`,h(n.xAxis,l.width,`bottom`)),n.xAxis&&(i.xAxis.setAttribute(`transform`,`translate(0,${l.height})`),g(i.xAxis,m,n.xAxis,l.width,`bottom`)),n.yAxis&&g(i.yAxis,v,n.yAxis,l.height,`left`);i.series.children.length>u.length;)i.series.removeChild(i.series.lastChild);let y=[];for(let e=0;e<u.length;e++){let r=u[e],a=i.series.children[e];a||(a=c(`g`,{class:`prism-line-series`}),i.series.appendChild(a));let o=ke(d[e],m,v);y.push(o),Oe(a,o,{color:U(e,r.color),curve:r.curve??`linear`,disposalSignal:t.disposalSignal,pointRadius:r.pointRadius??3,showPoints:r.showPoints??!1,strokeWidth:r.strokeWidth??2,transition:n.transition})}return a?.update(u.map((e,t)=>({color:U(t,e.color),name:e.name}))),o?.hide(),fe({crosshair:r,dims:()=>t.dimensions.value,getData:()=>d,getPoints:()=>y,getSeriesList:()=>(0,e.isReactive)(n.series)?n.series.value:n.series,onClick:n.onClick,onHover:n.onHover,svg:t.svg,tooltip:o})})}function je(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 Z(e,t,n,r){return`${e+n*Math.sin(r)},${t-n*Math.cos(r)}`}function Q(e,t,n){return e+t*Math.sin(n)}function $(e,t,n){return e-t*Math.cos(n)}function Me(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${Z(r,i,c,u)}A${c},${c},0,1,1,${Z(r,i,c,e)}A${c},${c},0,1,1,${Z(r,i,c,u)}Z`:[`M${Z(r,i,c,u)}`,`A${c},${c},0,1,1,${Z(r,i,c,e)}`,`A${c},${c},0,1,1,${Z(r,i,c,u)}`,`M${Z(r,i,s,u)}`,`A${s},${s},0,1,0,${Z(r,i,s,e)}`,`A${s},${s},0,1,0,${Z(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${Z(r,i,c,f)}A${c},${c},0,${e},1,${Z(r,i,c,p)}Z`:[`M${Z(r,i,c,f)}`,`A${c},${c},0,${e},1,${Z(r,i,c,p)}`,`L${Z(r,i,s,p)}`,`A${s},${s},0,${e},0,${Z(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=Q(r,c,f),E=$(i,c,f),D=Q(r,c,p),O=$(i,c,p),k=Q(r,s,f),A=$(i,s,f),j=Q(r,s,p),M=$(i,s,p),N=_/(c-s),P=`${T+(k-T)*N},${E+(A-E)*N}`,ee=`${D+(j-D)*N},${O+(M-O)*N}`,te=`${k+(T-k)*N},${A+(E-A)*N}`,ne=`${j+(D-j)*N},${M+(O-M)*N}`,F=[];return n?F.push(`M${Z(r,i,c,f)}`):(F.push(`M${P}`),F.push(`Q${T},${E},${Z(r,i,c,y)}`)),F.push(`A${c},${c},0,${C},1,${Z(r,i,c,b)}`),t?F.push(`A${v},${v},0,0,1,${Z(r,i,s,p)}`):(F.push(`Q${D},${O},${ee}`),F.push(`L${ne}`),F.push(`Q${j},${M},${Z(r,i,s,S)}`)),F.push(`A${s},${s},0,${w},0,${Z(r,i,s,x)}`),n?F.push(`A${v},${v},0,0,0,${Z(r,i,c,f)}`):F.push(`Q${k},${A},${te}`),F.push(`Z`),F.join(``)}function Ne(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 Pe=2*Math.PI,Fe=-Math.PI/2,Ie=Math.PI/2;function Le(e){return e===`semi`?{end:Ie,start:Fe}:{end:Pe,start:0}}function Re(t,n){let o=n.variant??`pie`,s=n.padPixels??(o===`pie`?0:8),u=n.cornerRadius??(o===`pie`?0:8),d=c(`circle`,{class:`prism-pie-bg`,"pointer-events":`none`}),f=c(`g`,{class:`prism-pie-slices`,"shape-rendering":`geometricPrecision`}),p=c(`g`,{class:`prism-pie-labels`,"pointer-events":`none`}),m=[],h=null;function g(e){for(;p.children.length>m.length;)p.removeChild(p.lastChild);for(let t=0;t<m.length;t++){let n=m[t],r=e[t];if(!r?.label)continue;let{x:i,y:a}=Ne(n),o=p.children[t];o||(o=c(`text`,{class:`prism-pie-label`}),p.appendChild(o)),l(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}}let _=ce(t,{a11y:n.a11y,legend:n.legend,plugins:n.plugins,tooltip:n.tooltip},_=>{let{legend:v,svg:y,tooltip:b}=_;y.contains(d)||(y.appendChild(d),y.appendChild(f),y.appendChild(p));let{height:x,width:S}=_.dimensions.value,C=o===`semi`,w=S/2,T=C?x*.85:x/2,E=C?Math.min(w,T)-8:Math.min(S,x)/2-8,D=o===`pie`?0:Math.round(E*.55),O=n.innerRadius===void 0?D:n.innerRadius,k=Math.max(O+1,E),A=(0,e.isReactive)(n.data)?n.data.value:n.data,{end:j,start:M}=Le(o);for(m=je(A,w,T,k,O,M,j,s,u,e=>U(e),!1),l(d,{cx:w,cy:T,r:O>0?O:0}),d.setAttribute(`style`,`fill:var(--prism-bg,#fff)`);f.children.length>m.length;)f.removeChild(f.lastChild);for(;p.children.length>m.length;)p.removeChild(p.lastChild);let N=i(n.transition,0),P=N.duration,ee=r(N.easing);for(let e=0;e<m.length;e++){let t=m[e],r=f.children[e];r||(r=c(`path`,{class:`prism-pie-slice`}),f.appendChild(r)),r.setAttribute(`fill`,t.color),r.setAttribute(`stroke`,`none`),r.style.cursor=n.onClick||n.onHover?`pointer`:``}if(h!==null&&(cancelAnimationFrame(h),h=null),P>0){let e=null,t=n=>{e===null&&(e=n);let r=ee(Math.min(1,(n-e)/P)),i=a(M,j,r);for(let e=0;e<m.length;e++){let t=m[e],n=f.children[e];if(n){if(i<=t.startAngle)l(n,{d:``});else{let e=Math.min(t.endAngle,i);l(n,{d:Me({...t,endAngle:e})})}}}r<1?h=requestAnimationFrame(t):(h=null,g(A))};h=requestAnimationFrame(t)}else{for(let e=0;e<m.length;e++){let t=m[e],n=f.children[e];n&&l(n,{d:Me(t)})}g(A)}return v?.update(m.map(e=>({color:e.color,name:e.slice.label??``}))),b?.hide(),{onClick:e=>{if(!n.onClick)return;let t=y.getBoundingClientRect(),r=e.clientX-t.left,i=e.clientY-t.top,a=ze(m,r,i,o);a>=0&&n.onClick(m[a].slice,a)},onMouseLeave:()=>{n.onHover?.(null,null),b?.hide()},onMouseMove:e=>{let r=y.getBoundingClientRect(),i=e.clientX-r.left,a=e.clientY-r.top,s=ze(m,i,a,o);if(s>=0){let e=m[s];n.onHover?.(e.slice,s);let{x:i,y:a}=Ne(e),o=t.getBoundingClientRect();b?.show(i+(r.left-o.left),a+(r.top-o.top),{key:s,value:e.slice.value},{color:e.color,data:[],name:e.slice.label??``})}else n.onHover?.(null,null),b?.hide()}}});return{get disposalSignal(){return _.disposalSignal},dispose(){h!==null&&(cancelAnimationFrame(h),h=null),_.dispose()},get disposed(){return _.disposed},el:_.el,[Symbol.dispose](){this.dispose()}}}function ze(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+Pe:e;if(t>=a.startAngle-1e-9&&t<=a.endAngle+1e-9)return i}}}return-1}function Be(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 Ve(e,t,n,r=`linear`){if(e.length===0)return``;let i=Be(e,t,n);return q(i,i.map(e=>({x:e.x,y:n})),r??`linear`)}function He(e,t,n,r){if(e.length===0)return``;let i=Be(e,t,n);return r===`monotone`?G(i):r===`step`?K(i):W(i)}function Ue(e,t,n,o,s,u,d){let f=t.length,p=Math.max(1,n/f-1),m=n/f,h=Math.min(0,...t),g=Math.max(...t)-h||1,_=i(u,0),v=_.duration,y=r(_.easing);for(;e.children.length>f;){let t=e.lastElementChild;t&&e.removeChild(t)}for(let n=0;n<f;n++){let r=Math.max(1,(t[n]-h)/g*o),i=o-r,u=e.children[n];if(u||(u=c(`rect`,{class:`prism-spark-bar`}),e.appendChild(u)),l(u,{fill:s,width:p,x:n*m}),v>0&&!u.hasAttribute(`data-init`)){u.setAttribute(`data-init`,`1`),l(u,{height:0,y:o});let e=null,t={h:0,y:o},n={h:r,y:i},s=r=>{if(d?.aborted)return;e===null&&(e=r);let i=y(Math.min(1,(r-e)/v));l(u,{height:a(t.h,n.h,i),y:a(t.y,n.y,i)}),i<1&&requestAnimationFrame(s)};requestAnimationFrame(s)}else u.setAttribute(`data-init`,`1`),l(u,{height:r,y:i})}}function We(e){return e.length>0&&e[0]!==null&&typeof e[0]==`object`}function Ge(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 Ke(e){return`var(--prism-color-${e%8+1})`}function qe(t,n){let r=n.variant??`line`,i=n.color??`var(--prism-color-1)`,a=n.curve??`linear`,o=n.strokeWidth??1.5,s=n.fillOpacity??.2,u=ae(t,{...n.a11y?{a11y:n.a11y}:{ariaHidden:!0},margin:{bottom:0,left:0,right:0,top:0}}),{svg:d}=u;d.classList.add(`prism-sparkline`);let f=c(`g`,{class:`prism-spark-inner`});d.appendChild(f);let p;function m(){let{height:t,width:d}=u.dimensions.value,p=(0,e.isReactive)(n.data)?n.data.value:n.data;for(;f.firstChild;)f.removeChild(f.firstChild);if(p.length!==0){if(r===`stack`&&We(p)){let e=c(`g`,{class:`prism-spark-stack`});f.appendChild(e);let r=n.cornerRadius??4,i=p,a=i.reduce((e,t)=>e+Math.max(0,t.value),0);if(a>0){let o=(n.padPixels??0)/2,s=0;i.forEach((n,u)=>{let f=Math.round(s);s+=Math.max(0,n.value)/a*d;let p=u===i.length-1?d:Math.round(s),m=u===0,h=u===i.length-1,g=Ge(f+(m?0:o),0,Math.max(0,p-f-(m?0:o)-(h?0:o)),t,r,m,h),_=c(`path`,{class:`prism-spark-stack-segment`});l(_,{d:g,fill:n.color??Ke(u)}),e.appendChild(_)})}}else if(r===`bar`){let e=c(`g`,{class:`prism-spark-bars`});f.appendChild(e),Ue(e,p,d,t,i,n.transition,g.signal)}else{if(r===`area`){let e=c(`path`,{class:`prism-spark-fill`});l(e,{d:Ve(p,d,t,a),fill:i,"fill-opacity":s,stroke:`none`}),f.appendChild(e)}let e=c(`path`,{class:`prism-spark-line`});l(e,{d:He(p,d,t,a),fill:`none`,stroke:i,"stroke-width":o}),f.appendChild(e)}We(p)||h(p)}}function h(e){if(p?.(),p=void 0,!n.onHover&&!n.onClick||e.length<=1)return;let{width:t}=u.dimensions.value;d.style.cursor=`crosshair`;let r=t/(e.length-1),i=t=>{let i=d.getBoundingClientRect(),a=t.clientX-i.left,o=Math.max(0,Math.min(e.length-1,Math.round(a/r)));n.onHover?.(o,e[o])},a=()=>n.onHover?.(null,null),o=t=>{if(!n.onClick)return;let i=d.getBoundingClientRect(),a=t.clientX-i.left,o=Math.max(0,Math.min(e.length-1,Math.round(a/r)));n.onClick(o,e[o])};d.addEventListener(`mousemove`,i),d.addEventListener(`mouseleave`,a),d.addEventListener(`click`,o),p=()=>{d.removeEventListener(`mousemove`,i),d.removeEventListener(`mouseleave`,a),d.removeEventListener(`click`,o)}}let g=new AbortController,_=(0,e.createScope)();_.run(()=>{(0,e.effect)(()=>{m()},{scheduler:`microtask`})});let v=!1;return{get disposalSignal(){return g.signal},dispose(){v||(v=!0,g.abort(),p?.(),_.dispose(),u.dispose())},get disposed(){return v},el:d,[Symbol.dispose](){this.dispose()}}}exports.PrismError=te,exports.PrismRenderError=ne,exports.animate=o,exports.bandScale=ye,exports.createAreaChart=ve,exports.createBarChart=Ee,exports.createLineChart=Ae,exports.createPieChart=Re,exports.createSparkline=qe,exports.linearScale=b,exports.resetTheme=me,exports.seriesColor=U,exports.setTheme=pe,exports.timeScale=A;
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@vielzeug/ripple"),t=require("@vielzeug/orbit");var n={"ease-in":e=>e*e,"ease-in-out":e=>e<.5?2*e*e:1-(-2*e+2)**2/2,"ease-out":e=>1-(1-e)*(1-e),linear:e=>e};function r(e){return typeof e==`function`?e:e!==void 0&&Object.hasOwn(n,e)?n[e]:n[`ease-out`]}function i(e,t=300){let n=e?.preference??`system`,r=typeof matchMedia<`u`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches,i=n===`never`||n===`system`&&r?0:e?.duration??t;return{...e,duration:i,stagger:Math.max(0,e?.stagger??0)}}function a(e,t,n){return e+(t-e)*n}function o(e,t,n,o){let s=i(t),c=s.duration,l=r(s.easing),u=s.stagger;if(c===0||e.length===0){for(let t of e)for(let[e,{to:n}]of Object.entries(t.attrs))t.el.setAttribute(e,String(n));return n?.(),()=>{}}let d=null,f=!1,p=Math.max(c,c+u*(e.length-1));function m(t){if(f||o?.aborted)return;d===null&&(d=t);let r=t-d;for(let t=0;t<e.length;t++){let n=e[t],i=u*t,o=Math.max(0,r-i),s=Math.min(1,o/c),d=l(s);for(let[e,{from:t,to:r}]of Object.entries(n.attrs))n.el.setAttribute(e,String(a(t,r,d)))}r<p?requestAnimationFrame(m):n?.()}return requestAnimationFrame(m),()=>{f=!0}}var s=`http://www.w3.org/2000/svg`;function c(e,t){let n=document.createElementNS(s,e);return t&&l(n,t),n}function l(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 u(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function d(e,t){let n=c(`text`,t);return n.textContent=e,n}function f(e){return typeof e.bandwidth==`function`}function p(e,t){return f(e)?e.map(t)+e.bandwidth()/2:e.map(t)}var m=e=>e instanceof Date?e.toLocaleDateString(void 0,{month:`short`,year:`numeric`}):String(e);function h(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 g(e,t,n,r,i=`bottom`){u(e);let a=n.position??i,o=a===`bottom`||a===`top`,s=a===`top`||a===`left`,f=s?-1:1,g=c(`line`,{"aria-hidden":`true`,class:`prism-axis-line`,x1:0,x2:o?r:0,y1:0,y2:o?0:r});e.appendChild(g);let _=t.ticks(h(n,r,i)),v=n.tickFormat??m;for(let n of _){let r=p(t,n),i=c(`line`,{"aria-hidden":`true`,class:`prism-axis-tick`,x1:o?r:0,x2:o?r:6*f,y1:o?0:r,y2:o?6*f:r});e.appendChild(i);let a=d(v(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*f*1.5,y:o?6*f*1.5:r});e.appendChild(a)}if(n.label){let t=d(n.label,{class:`prism-axis-title`,"dominant-baseline":`middle`,"text-anchor":`middle`});o?l(t,{x:r/2,y:6*f*3.5}):l(t,{transform:`translate(${6*f*4}, ${r/2}) rotate(-90)`}),e.appendChild(t)}}function _(e,t,n,r,i,a=10){u(e);let o=n!==!0&&n.color||void 0,s=n!==!0&&n.dash||void 0,l=t.ticks(a);for(let n of l){let a=p(t,n),l={class:`prism-grid-line`,stroke:o??`var(--prism-grid-color)`,"stroke-dasharray":s,"stroke-opacity":`var(--prism-grid-opacity)`};i===`vertical`?Object.assign(l,{x1:a,x2:a,y1:0,y2:r}):Object.assign(l,{x1:0,x2:r,y1:a,y2:a}),e.appendChild(c(`line`,l))}}function v(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 y(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=v(v(t-e,!1)/Math.max(1,n-1),!0);return[Math.floor(e/r)*r,Math.ceil(t/r)*r]}function b(e){let t=()=>e.nice===!1?e.domain:y(e.domain[0],e.domain[1],10),n=()=>e.range;return{get domain(){return t()},invert(e){let[r,i]=t(),[a,o]=n();return o===a?r:r+(e-a)/(o-a)*(i-r)},map(r){let[i,a]=t(),[o,s]=n();if(a===i)return o;let c=(r-i)/(a-i);return e.clamp&&(c=Math.max(0,Math.min(1,c))),o+c*(s-o)},get range(){return n()},ticks(e=10){if(e<=0)return[];let[n,r]=t();if(n===r||e===1)return[n];let i=Math.min(n,r),a=Math.max(n,r),o=v(v(a-i,!1)/(e-1),!0),s=Math.ceil(i/o)*o,c=Math.floor(a/o)*o,l=[];for(let e=s;e<=c+o*.5;e+=o)l.push(Math.round(e*0xe8d4a51000)/0xe8d4a51000);return l}}}var x=1e3,S=60*x,C=60*S,w=24*C,T=30*w,E=365*w,D=[x,5*x,15*x,30*x,S,5*S,15*S,30*S,C,3*C,6*C,12*C,w,7*w,T,3*T,6*T,E];function O(e,t){let n=Math.abs(e)/Math.max(1,t);for(let e of D)if(e>=n)return e;return E}function k(e,t){let[n,r]=e;n.getTime()>r.getTime()&&([n,r]=[r,n]);let i=O(r.getTime()-n.getTime(),t);return[new Date(Math.floor(n.getTime()/i)*i),new Date(Math.ceil(r.getTime()/i)*i)]}function A(e){let t=()=>e.nice===!1?e.domain:k(e.domain,10),n=()=>e.range;return{get domain(){return t()},invert(e){let[r,i]=t(),[a,o]=n();if(o===a)return r;let s=(e-a)/(o-a);return new Date(r.getTime()+s*(i.getTime()-r.getTime()))},map(e){let[r,i]=t(),[a,o]=n(),s=i.getTime()-r.getTime();return s===0?a:a+(e.getTime()-r.getTime())/s*(o-a)},get range(){return n()},ticks(e=10){let[n,r]=t(),i=O(r.getTime()-n.getTime(),e),a=Math.ceil(n.getTime()/i)*i,o=[];for(let e=a;e<=r.getTime();e+=i)o.push(new Date(e));return o}}}function j(e,t){if(e.length===0||e.some(e=>e==null)||e.some(e=>typeof e==`number`&&!Number.isFinite(e)))return b({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 A({domain:[new Date(r),new Date(r===i?i+1:i)],range:[0,t]})}let n=e,r=Math.min(...n),i=Math.max(...n);return b({domain:[r,r===i?i+1:i],nice:!1,range:[0,t]})}function M(e,t,n=!0){if(e.length===0||e.some(e=>e==null)||e.some(e=>!Number.isFinite(e)))return b({domain:[0,1],range:[t,0]});let r=Math.min(...e),i=n?Math.min(0,r):r,a=Math.max(...e);return b({domain:[i,i===a?a+1:a],range:[t,0]})}function N(e){return e===!0?`bottom`:e.position??`bottom`}function P(e,t){let n=N(t),r=document.createElement(`div`);r.className=`prism-legend prism-legend-${n}`,n===`top`?e.insertBefore(r,e.firstChild):e.appendChild(r);let i=()=>{r.remove()};return{dispose:i,el:r,[Symbol.dispose]:i,update(e){r.innerHTML=``;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 i=document.createElement(`span`);i.className=`prism-legend-label`,i.textContent=t.name,e.appendChild(n),e.appendChild(i),r.appendChild(e)}}}}function ee(e,n){getComputedStyle(e).position===`static`&&(e.style.position=`relative`);let r=document.createElement(`div`);r.className=`prism-tooltip`,r.style.position=`absolute`,r.style.pointerEvents=`none`,r.style.top=`0`,r.style.left=`0`,r.setAttribute(`role`,`status`),r.setAttribute(`aria-live`,`polite`),e.appendChild(r);let i=n!==!0&&n?.offset||8,a=n===!0?void 0:n?.render,o=n===!0?void 0:n?.sanitize,s=null,c=null,l=!1,u=()=>{c!==null&&(clearTimeout(c),c=null)},d=()=>{s!==null&&(cancelAnimationFrame(s),s=null)},f=()=>{d(),u(),r.remove()};return{dispose:f,el:r,hide(){d(),u(),l=!1,r.style.opacity=`0`,c=setTimeout(()=>{c=null,l||(r.textContent=``)},150)},show(n,c,d,f){if(!e.isConnected)return;if(u(),a){let e=a(d,f);o?r.innerHTML=o(e):r.textContent=e}else r.textContent=`${f.name}: ${d.value}`;let{x:p,y:m}=(0,t.computePosition)({getBoundingClientRect:()=>{let t=e.getBoundingClientRect();return{bottom:t.top+c,height:0,left:t.left+n,right:t.left+n,top:t.top+c,width:0,x:t.left+n,y:t.top+c}}},r,{containingBlock:e,middleware:[(0,t.offset)(i),(0,t.flip)(),(0,t.shift)({padding:8})],placement:`top`});if(r.style.left=`${p}px`,r.style.top=`${m}px`,l){s===null&&(r.style.opacity=`1`);return}l=!0,r.style.opacity=`0`,s=requestAnimationFrame(()=>{s=null,l&&(r.style.opacity=`1`)})},[Symbol.dispose]:f}}var te=class extends Error{constructor(e,t){super(e,t),this.name=new.target.name,Object.setPrototypeOf(this,new.target.prototype)}},ne=class extends te{},F={bottom:40,left:50,right:20,top:20};function re(e){return{...F,...e}}function I(e,t,n){return{height:Math.max(0,t-n.top-n.bottom),width:Math.max(0,e-n.left-n.right)}}function ie(e,t){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 ae(t,n){if(!(typeof t==`object`&&t&&t.nodeType===1&&typeof t.appendChild==`function`&&typeof t.getBoundingClientRect==`function`)){let e=t;throw new ne(`Invalid chart configuration: \`container\` must be a DOM Element, received ${e===null?`null`:typeof e==`object`?e.constructor?.name??`object`:typeof e}.`)}let r=re(n.margin),i=n.a11y,a=c(`svg`,{...n.ariaHidden||i?.decorative?{"aria-hidden":`true`}:{...i?{"aria-label":i.ariaLabel,tabindex:`0`}:{},role:`img`},class:`prism-chart`,style:`display:block;width:100%;height:100%`}),o=c(`g`,{class:`prism-chart-area`,transform:`translate(${r.left},${r.top})`});a.appendChild(o);let s=t.getBoundingClientRect();s.width===0||s.height;let u=typeof getComputedStyle<`u`?getComputedStyle(t):null;u&&u.position;let d=(0,e.signal)({height:s.height||300,margin:r,width:s.width||600}),f=ie(t,(e,t)=>{d.value={height:t,margin:r,width:e},l(a,{height:t,viewBox:`0 0 ${e} ${t}`,width:e})}),p=s.width||600,m=s.height||300;return l(a,{height:m,viewBox:`0 0 ${p} ${m}`,width:p}),t.appendChild(a),{chartArea:o,dimensions:d,dispose(){f(),a.remove()},svg:a}}function L(e,t,n,r){u(e.series),u(e.grid),u(e.xAxis),u(e.yAxis),t?.update([]),n?.hide(),r?.hide()}function oe(t,n,r,i){let a=ae(t,{a11y:n.a11y,margin:n.margin}),o=n.tooltip?ee(t,n.tooltip):null,s=n.legend?P(t,n.legend):null,c=new AbortController,l=r(a,o,s,c.signal),u=!1,d=se(a.svg),f=(0,e.createScope)();f.run(()=>{(0,e.effect)(()=>{u||d.attach(i(l))},{scheduler:`microtask`})});let p=[];if(n.plugins){let e={container:t,dimensions:a.dimensions,disposalSignal:c.signal,svg:a.svg};for(let t of n.plugins)try{t.install(e),p.push(t)}catch{}}return{get disposalSignal(){return c.signal},dispose(){if(!u){u=!0,c.abort(),d.detach();for(let e of p)try{e.dispose()}catch{}o?.dispose(),s?.dispose(),f.dispose(),a.dispose()}},get disposed(){return u},el:a.svg,[Symbol.dispose](){this.dispose()}}}function se(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 R(e,t,n){return oe(e,t,(t,n,r,i)=>{let a={grid:c(`g`,{"aria-hidden":`true`,class:`prism-grid`}),series:c(`g`,{class:`prism-series`}),xAxis:c(`g`,{class:`prism-x-axis`}),yAxis:c(`g`,{class:`prism-y-axis`})};return t.chartArea.appendChild(a.grid),t.chartArea.appendChild(a.xAxis),t.chartArea.appendChild(a.yAxis),t.chartArea.appendChild(a.series),{chartArea:t.chartArea,container:e,dimensions:t.dimensions,disposalSignal:i,groups:a,legend:r,svg:t.svg,tooltip:n}},n)}function ce(e,t,n){return oe(e,t,(t,n,r,i)=>({container:e,dimensions:t.dimensions,disposalSignal:i,legend:r,svg:t.svg,tooltip:n}),n)}function le(e,t){let n=t===!0||t?.vertical!==!1,r=t!==!0&&t?.horizontal===!0,i=t===!0||t?.snap!==!1,a=c(`g`,{"aria-hidden":`true`,class:`prism-crosshair`,style:`display:none`}),o=n?c(`line`,{class:`prism-crosshair-v`,"stroke-dasharray":`var(--prism-crosshair-dash, 4 2)`}):null,s=r?c(`line`,{class:`prism-crosshair-h`,"stroke-dasharray":`var(--prism-crosshair-dash, 4 2)`}):null;o&&a.appendChild(o),s&&a.appendChild(s),e.appendChild(a);let u=c(`text`,{"aria-live":`polite`,class:`prism-crosshair-live`,role:`status`,x:-9999,y:-9999});return e.appendChild(u),{hide(){a.style.display=`none`,u.textContent=``},show(e,t,n,r,i){a.style.display=``,o&&l(o,{x1:e,x2:e,y1:0,y2:r}),s&&l(s,{x1:0,x2:n,y1:t,y2:t}),i!==void 0&&(u.textContent=i)},snap:i}}function z(e){return e instanceof Date?`date:${e.getTime()}`:`${typeof e}:${String(e)}`}function ue(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=z(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 B(e,t,n,r){let i=e.getBoundingClientRect();return{x:t.clientX-i.left-n,y:t.clientY-i.top-r}}function de(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 V(e,t,n,r){let i=z(n),a=null,o=1/0;for(let n=0;n<t.length;n++){let s=e[n]?.findIndex(e=>z(e.key)===i)??-1,c=s===-1?void 0:e[n]?.[s],l=s===-1?void 0:t[n]?.[s];if(!c||!l)continue;let u=Number.isFinite(r)?Math.abs(l.y-r):0;u<o&&(o=u,a={datum:c,point:l,seriesIndex:n})}return a}function fe(e){let t=0;return{onClick:t=>{if(!e.onClick)return;let n=e.getPoints();if(n.length===0||n[0].length===0)return;let r=e.dims(),i=B(e.svg,t,r.margin.left,r.margin.top),a=I(r.width,r.height,r.margin);if(i.x<0||i.x>a.width||i.y<0||i.y>a.height)return;let o=de(e.getData(),n,i.x);if(o===null)return;let s=V(e.getData(),n,o,i.y),c=s?e.getSeriesList()[s.seriesIndex]:void 0;s&&c&&e.onClick({datum:s.datum,originalEvent:t,series:c})},onKeyDown:n=>{let r=e.getData(),i=e.getPoints(),a=[...new Map(r.flat().map(e=>[z(e.key),e.key])).values()];if(a.length!==0){if(n.key===`ArrowLeft`||n.key===`ArrowRight`){n.preventDefault(),t=Math.max(0,Math.min(a.length-1,t+(n.key===`ArrowLeft`?-1:1)));let o=a[t],s=V(r,i,o,1/0),c=s?e.getSeriesList()[s.seriesIndex]:void 0;if(!s||!c)return;e.crosshair?.show(s.point.x,s.point.y,e.dims().width,e.dims().height,`${c.name}: ${s.datum.value}`),e.tooltip?.show(s.point.x+e.dims().margin.left,s.point.y+e.dims().margin.top,s.datum,c),e.onHover?.({datum:s.datum,originalEvent:n,series:c})}if((n.key===`Enter`||n.key===` `)&&e.onClick){n.preventDefault();let o=a[t],s=V(r,i,o,1/0),c=s?e.getSeriesList()[s.seriesIndex]:void 0;s&&c&&e.onClick({datum:s.datum,originalEvent:n,series:c})}n.key===`Escape`&&(e.crosshair?.hide(),e.tooltip?.hide(),e.onHover?.(null))}},onMouseLeave:()=>{e.crosshair?.hide(),e.tooltip?.hide(),e.onHover?.(null)},onMouseMove:t=>{let n=e.getPoints();if(n.length===0||n[0].length===0)return;let r=e.dims(),i=B(e.svg,t,r.margin.left,r.margin.top),a=I(r.width,r.height,r.margin);if(i.x<0||i.x>a.width||i.y<0||i.y>a.height){e.crosshair?.hide(),e.tooltip?.hide();return}let o=de(e.getData(),n,i.x);if(o===null)return;let s=V(e.getData(),n,o,i.y),c=s?e.getSeriesList()[s.seriesIndex]:void 0,l=e.crosshair?.snap===!1?i.x:s?.point.x??i.x,u=e.crosshair?.snap===!1?i.y:s?.point.y??i.y;e.crosshair?.show(l,u,a.width,a.height,c&&s?`${c.name}: ${s.datum.value}`:void 0),s&&c&&(e.tooltip?.show(s.point.x+r.margin.left,s.point.y+r.margin.top,s.datum,c),e.onHover?.({datum:s.datum,originalEvent:t,series:c}))}}}var H=8;function pe(e){let t=document.documentElement;if(e.colors)for(let n=0;n<H;n++){let r=e.colors[n];r?t.style.setProperty(`--prism-color-${n+1}`,r):t.style.removeProperty(`--prism-color-${n+1}`)}e.fontFamily&&t.style.setProperty(`--prism-font-family`,e.fontFamily),e.gridColor&&t.style.setProperty(`--prism-grid-color`,e.gridColor),e.gridOpacity!==void 0&&t.style.setProperty(`--prism-grid-opacity`,String(e.gridOpacity))}function me(){let e=document.documentElement;for(let t=1;t<=H;t++)e.style.removeProperty(`--prism-color-${t}`);e.style.removeProperty(`--prism-font-family`),e.style.removeProperty(`--prism-grid-color`),e.style.removeProperty(`--prism-grid-opacity`)}function U(e,t){return t??`var(--prism-color-${e%H+1})`}function W(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 G(e){if(e.length<3)return W(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 K(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 q(e,t,n=`linear`){if(e.length===0)return``;let r=n===`monotone`?G(e):n===`step`?K(e):W(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 J=new WeakMap,Y=new WeakMap;function he(e,t){return t===`monotone`?G(e):t===`step`?K(e):W(e)}function ge(e,t,n,o){let s=i(o.transition,0),u=s.duration,d=r(s.easing),f=e.querySelector(`.prism-area-fill`);f||(f=c(`path`,{class:`prism-area-fill`}),e.appendChild(f)),l(f,{fill:o.color,"fill-opacity":o.fillOpacity,stroke:`none`});let p=null;if(o.showLine?(p=e.querySelector(`.prism-area-line`),p||(p=c(`path`,{class:`prism-area-line`,fill:`none`}),e.appendChild(p)),l(p,{stroke:o.color,"stroke-width":2})):e.querySelector(`.prism-area-line`)?.remove(),u===0){let e=t.map(e=>({x:e.x,y:n}));l(f,{d:q(t,e,o.curve)}),p&&l(p,{d:he(t,o.curve)});return}if(J.get(e)?.(),!f.hasAttribute(`d`)){let r=t.map(e=>({x:e.x,y:n}));l(f,{d:q(t,r,o.curve)}),p&&l(p,{d:he(t,o.curve)}),Y.set(e,t);return}let m=Y.get(e)??t,h=t.map((e,n)=>m[n]??m[m.length-1]??t[n]),g=null;function _(r){if(o.disposalSignal?.aborted){J.delete(e);return}g===null&&(g=r);let i=Math.min(1,(r-g)/u),s=d(i),c=t.map((e,t)=>({x:a(h[t].x,e.x,s),y:a(h[t].y,e.y,s)})),m=c.map(e=>({x:e.x,y:n}));if(l(f,{d:q(c,m,o.curve)}),p&&l(p,{d:he(c,o.curve)}),i<1){let t=requestAnimationFrame(_);J.set(e,()=>cancelAnimationFrame(t))}else J.delete(e),Y.set(e,t)}Y.set(e,h);let v=requestAnimationFrame(_);J.set(e,()=>cancelAnimationFrame(v))}function _e(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 ve(t,n){let r=null;return R(t,n,t=>{let{groups:i,legend:a,tooltip:o}=t,s=t.dimensions.value,l=I(s.width,s.height,s.margin),u=(0,e.isReactive)(n.series)?n.series.value:n.series,d=u.map(t=>(0,e.isReactive)(t.data)?t.data.value:t.data),f=d.flat().map(e=>e.key),p=d.flat().map(e=>e.value);if(f.length===0){L(i,a,o,r);return}n.crosshair&&!r&&(r=le(t.chartArea,n.crosshair));let m=j(f,l.width),v=M(p,l.height),y=v.map(0);for(n.yAxis?.grid&&_(i.grid,v,n.yAxis.grid,l.width,`horizontal`,h(n.yAxis,l.height,`left`)),n.xAxis?.grid&&_(i.grid,m,n.xAxis.grid,l.height,`vertical`,h(n.xAxis,l.width,`bottom`)),n.xAxis&&(i.xAxis.setAttribute(`transform`,`translate(0,${l.height})`),g(i.xAxis,m,n.xAxis,l.width,`bottom`)),n.yAxis&&g(i.yAxis,v,n.yAxis,l.height,`left`);i.series.children.length>u.length;)i.series.removeChild(i.series.lastChild);let b=[];for(let e=0;e<u.length;e++){let r=u[e],a=i.series.children[e];a||(a=c(`g`,{class:`prism-area-series`}),i.series.appendChild(a));let o=_e(d[e],m,v);b.push(o),ge(a,o,y,{color:U(e,r.color),curve:r.curve??`linear`,disposalSignal:t.disposalSignal,fillOpacity:r.fillOpacity??.3,showLine:r.showLine!==!1,transition:n.transition})}return a?.update(u.map((e,t)=>({color:U(t,e.color),name:e.name}))),o?.hide(),fe({crosshair:r,dims:()=>t.dimensions.value,getData:()=>d,getPoints:()=>b,getSeriesList:()=>(0,e.isReactive)(n.series)?n.series.value:n.series,onClick:n.onClick,onHover:n.onHover,svg:t.svg,tooltip:o})})}function ye(e){let t=()=>e.domain,n=()=>e.range,r=()=>{let r=t().length;if(r===0)return 0;let[i,a]=n(),o=e.padding??.1;return(a-i)/(r+(r-1)*o+(e.paddingOuter??o)*2)};return{bandwidth:r,get domain(){return t()},gap(){let t=e.padding??.1;return r()*t},map(i){let a=t().indexOf(i);if(a===-1)return`${i}`,0;let[o]=n(),s=r(),c=e.padding??.1;return o+(e.paddingOuter??c)*s+a*(s+s*c)},get range(){return n()},ticks(e){let n=t();if(e===void 0||e>=n.length)return[...n];if(e<=0)return[];let r=Math.ceil(n.length/e);return n.filter((e,t)=>t%r===0)}}}function be(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 xe(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}else{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))}}function Se(e,t,n,r,i){let a=i-1,o=r.stacked?r.stackedTops[a]?.[t]??0:Math.max(...Array.from({length:i},(e,r)=>n[r]?.[t]?.value??0)),s=r.valueScale.map(o);return r.horizontal?e.x>s:e.y<s}var Ce=new WeakMap;function we(e,t,n,r,i,a){for(;e.children.length>t.length;){let t=e.lastElementChild;t&&e.removeChild(t)}let s=n.bandwidth(),u=a.stacked?s:s/a.seriesCount,d=a.stacked?0:u*a.seriesIndex,f=a.horizontal??!1,p=[],m=[];for(let o=0;o<t.length;o++){let s=t[o],h=n.map(s.key)+d,g=a.baselineYs?a.baselineYs[o]:i,_=r.map(s.y),v=e.children[o],y=!v;if(v||(v=c(`rect`,{class:`prism-bar`}),e.appendChild(v)),v.style.display=s.present?``:`none`,f){let e=Math.max(0,Math.abs(g-_)),t=Math.min(_,g);l(v,{fill:a.color,height:Math.max(0,u-1),rx:a.borderRadius,ry:a.borderRadius,y:h}),a.transition?y?(l(v,{width:0,x:g}),p.push({attrs:{width:{from:0,to:e},x:{from:g,to:t}},el:v})):m.push({attrs:{width:{from:Number(v.getAttribute(`width`)??e),to:e},x:{from:Number(v.getAttribute(`x`)??t),to:t}},el:v}):l(v,{width:e,x:t})}else{let e=Math.max(0,Math.abs(g-_)),t=Math.min(_,g);l(v,{fill:a.color,rx:a.borderRadius,ry:a.borderRadius,width:Math.max(0,u-1),x:h}),a.transition?y?(l(v,{height:0,y:g}),p.push({attrs:{height:{from:0,to:e},y:{from:g,to:t}},el:v})):m.push({attrs:{height:{from:Number(v.getAttribute(`height`)??e),to:e},y:{from:Number(v.getAttribute(`y`)??t),to:t}},el:v}):l(v,{height:e,y:t})}}if(a.transition){Ce.get(e)?.();let t=[];p.length>0&&t.push(o(p,a.transition,void 0,a.disposalSignal)),m.length>0&&t.push(o(m,{...a.transition,stagger:0},void 0,a.disposalSignal)),Ce.set(e,()=>{for(let e of t)e()})}}function Te(e){return{horizontal:e===`grouped-horizontal`||e===`stacked-horizontal`,stacked:e===`stacked`||e===`stacked-horizontal`}}function Ee(t,n){return R(t,n,t=>{let{groups:r,legend:i,tooltip:a}=t,o=t.dimensions.value,s=I(o.width,o.height,o.margin),l=(0,e.isReactive)(n.series)?n.series.value:n.series,u=ue(l,l.map(t=>(0,e.isReactive)(t.data)?t.data.value:t.data)),d=u.domain,f=u.series.map(({byKey:e})=>d.map(t=>e.get(t))),p=e=>{if(e)return{...e,tickFormat:t=>{let n=String(t),r=u.labels.get(n)??t;return e.tickFormat?e.tickFormat(r):String(r)}}};if(d.length===0){L(r,i,a);return}let{horizontal:m,stacked:v}=Te(n.variant??`grouped`),y,x;if(v){f.some(e=>e.some(e=>(e?.value??0)<0));let e=d.map((e,t)=>f.reduce((e,n)=>e+Math.max(0,n[t]?.value??0),0));y=Math.max(...e),x=0}else{let e=f.flatMap(e=>e.flatMap(e=>e?[e.value]:[]));y=Math.max(...e),x=Math.min(0,...e)}let S=ye(m?{domain:d,range:[0,s.height]}:{domain:d,range:[0,s.width]}),C=b(m?{domain:[x,y],range:[0,s.width]}:{domain:[x,y],range:[s.height,0]}),w=[],T=Object.create(null);for(let e of d)T[e]=0;let E={bandCenter:e=>S.map(e)+S.bandwidth()/2,bandwidth:S.bandwidth(),baselinePx:C.map(0),horizontal:m,stacked:v,stackedTops:w,valueScale:C};if(m){n.xAxis?.grid&&_(r.grid,C,n.xAxis.grid,s.height,`vertical`,h(n.xAxis,s.width,`bottom`));let e=p(n.yAxis);e&&g(r.yAxis,S,e,s.height,`left`),n.xAxis&&(r.xAxis.setAttribute(`transform`,`translate(0,${s.height})`),g(r.xAxis,C,n.xAxis,s.width,`bottom`))}else{n.yAxis?.grid&&_(r.grid,C,n.yAxis.grid,s.width,`horizontal`,h(n.yAxis,s.height,`left`));let e=p(n.xAxis);e&&(r.xAxis.setAttribute(`transform`,`translate(0,${s.height})`),g(r.xAxis,S,e,s.width,`bottom`)),n.yAxis&&g(r.yAxis,C,n.yAxis,s.height,`left`)}for(;r.series.children.length>l.length;){let e=r.series.lastElementChild;e&&r.series.removeChild(e)}for(let e=0;e<l.length;e++){let i=l[e],a=r.series.children[e];a||(a=c(`g`,{class:`prism-bar-series`}),r.series.appendChild(a));let o=d.map((t,n)=>{let r=f[e]?.[n];if(v){let e=T[t]??0,n=e+Math.max(0,r?.value??0);return T[t]=n,{base:e,key:t,present:r!==void 0,y:n}}return{base:0,key:t,present:r!==void 0,y:r?.value??0}});w[e]=o.map(e=>e.y);let s=v?o.map(e=>C.map(e.base)):void 0;we(a,o,S,C,E.baselinePx,{baselineYs:s,borderRadius:i.borderRadius??0,color:U(e,i.color),disposalSignal:t.disposalSignal,horizontal:m,seriesCount:l.length,seriesIndex:e,stacked:v,transition:n.transition})}return i?.update(l.map((e,t)=>({color:U(t,e.color),name:e.name}))),a?.hide(),{onClick:e=>{if(!n.onClick)return;let r=t.dimensions.value,i=B(t.svg,e,r.margin.left,r.margin.top),a=I(r.width,r.height,r.margin);if(i.x<0||i.x>a.width||i.y<0||i.y>a.height)return;let o=be(m?i.y:i.x,d,E);if(o===-1)return;let s=xe(i,o,d,E,l.length),c=f[s]?.[o];c&&n.onClick({datum:c,originalEvent:e,series:l[s]})},onMouseLeave:()=>{a?.hide(),n.onHover?.(null)},onMouseMove:e=>{let r=t.dimensions.value,i=B(t.svg,e,r.margin.left,r.margin.top),o=I(r.width,r.height,r.margin);if(i.x<0||i.x>o.width||i.y<0||i.y>o.height){a?.hide();return}let s=be(m?i.y:i.x,d,E);if(s===-1){a?.hide();return}if(Se(i,s,f,E,l.length)){a?.hide();return}let c=xe(i,s,d,E,l.length),u=f[c]?.[s];if(u){let t=E.bandCenter(d[s]),i=v?w[c]?.[s]??u.value:u.value,o=C.map(i),f=m?o+r.margin.left:t+r.margin.left,p=m?t+r.margin.top:o+r.margin.top;a?.show(f,p,u,l[c]),n.onHover?.({datum:u,originalEvent:e,series:l[c]})}}}})}var X=new WeakMap;function De(e,t){return t===`monotone`?G(e):t===`step`?K(e):W(e)}function Oe(e,t,n){let o=i(n.transition,0),s=o.duration,u=r(o.easing),d=e.querySelector(`.prism-line-path`);d||(d=c(`path`,{class:`prism-line-path`,fill:`none`}),e.appendChild(d)),l(d,{stroke:n.color,"stroke-width":n.strokeWidth});let f=e.querySelector(`.prism-line-dots`);if(n.showPoints?f||(f=c(`g`,{class:`prism-line-dots`}),e.appendChild(f)):f&&=(f.remove(),null),s===0){if(l(d,{d:De(t,n.curve)}),f){for(;f.children.length>t.length;)f.removeChild(f.lastChild);for(let e=0;e<t.length;e++){let r=f.children[e];r||(r=c(`circle`,{class:`prism-line-dot`}),f.appendChild(r)),l(r,{cx:t[e].x,cy:t[e].y,fill:n.color,r:n.pointRadius})}}return}X.get(e)?.();let p=!!d.getAttribute(`d`),m=[],h=null;if(f){let e=f.children.length;for(let t=0;t<e;t++){let e=f.children[t],n={x:Number(e.getAttribute(`cx`)),y:Number(e.getAttribute(`cy`))};m.push(n),h=n}for(;f.children.length>t.length;)f.removeChild(f.lastChild);for(let e=f.children.length;e<t.length;e++){let r=c(`circle`,{class:`prism-line-dot`});l(r,{cx:t[e].x,cy:t[e].y,fill:n.color,r:n.pointRadius}),f.appendChild(r)}}for(let e=m.length;e<t.length;e++)m.push(h??t[e]);let g=null;function _(r){if(n.disposalSignal?.aborted){X.delete(e);return}g===null&&(g=r);let i=Math.min(1,(r-g)/s),o=u(i),c=t.map((e,t)=>{let n=m[t]??e;return{x:a(n.x,e.x,o),y:a(n.y,e.y,o)}});if(l(d,{d:De(c,n.curve)}),f)for(let e=0;e<t.length;e++){let t=f.children[e];t&&l(t,{cx:c[e].x,cy:c[e].y})}if(i<1){let t=requestAnimationFrame(_);X.set(e,()=>cancelAnimationFrame(t))}else X.delete(e)}if(!p)l(d,{d:De(t,n.curve)});else{let t=requestAnimationFrame(_);X.set(e,()=>cancelAnimationFrame(t))}}function ke(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 Ae(t,n){let r=null;return R(t,n,t=>{let{groups:i,legend:a,tooltip:o}=t,s=t.dimensions.value,l=I(s.width,s.height,s.margin),u=(0,e.isReactive)(n.series)?n.series.value:n.series,d=u.map(t=>(0,e.isReactive)(t.data)?t.data.value:t.data),f=d.flat().map(e=>e.key),p=d.flat().map(e=>e.value);if(f.length===0){L(i,a,o,r);return}n.crosshair&&!r&&(r=le(t.chartArea,n.crosshair));let m=j(f,l.width),v=M(p,l.height);for(n.yAxis?.grid&&_(i.grid,v,n.yAxis.grid,l.width,`horizontal`,h(n.yAxis,l.height,`left`)),n.xAxis?.grid&&_(i.grid,m,n.xAxis.grid,l.height,`vertical`,h(n.xAxis,l.width,`bottom`)),n.xAxis&&(i.xAxis.setAttribute(`transform`,`translate(0,${l.height})`),g(i.xAxis,m,n.xAxis,l.width,`bottom`)),n.yAxis&&g(i.yAxis,v,n.yAxis,l.height,`left`);i.series.children.length>u.length;)i.series.removeChild(i.series.lastChild);let y=[];for(let e=0;e<u.length;e++){let r=u[e],a=i.series.children[e];a||(a=c(`g`,{class:`prism-line-series`}),i.series.appendChild(a));let o=ke(d[e],m,v);y.push(o),Oe(a,o,{color:U(e,r.color),curve:r.curve??`linear`,disposalSignal:t.disposalSignal,pointRadius:r.pointRadius??3,showPoints:r.showPoints??!1,strokeWidth:r.strokeWidth??2,transition:n.transition})}return a?.update(u.map((e,t)=>({color:U(t,e.color),name:e.name}))),o?.hide(),fe({crosshair:r,dims:()=>t.dimensions.value,getData:()=>d,getPoints:()=>y,getSeriesList:()=>(0,e.isReactive)(n.series)?n.series.value:n.series,onClick:n.onClick,onHover:n.onHover,svg:t.svg,tooltip:o})})}function je(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 Z(e,t,n,r){return`${e+n*Math.sin(r)},${t-n*Math.cos(r)}`}function Q(e,t,n){return e+t*Math.sin(n)}function $(e,t,n){return e-t*Math.cos(n)}function Me(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${Z(r,i,c,u)}A${c},${c},0,1,1,${Z(r,i,c,e)}A${c},${c},0,1,1,${Z(r,i,c,u)}Z`:[`M${Z(r,i,c,u)}`,`A${c},${c},0,1,1,${Z(r,i,c,e)}`,`A${c},${c},0,1,1,${Z(r,i,c,u)}`,`M${Z(r,i,s,u)}`,`A${s},${s},0,1,0,${Z(r,i,s,e)}`,`A${s},${s},0,1,0,${Z(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${Z(r,i,c,f)}A${c},${c},0,${e},1,${Z(r,i,c,p)}Z`:[`M${Z(r,i,c,f)}`,`A${c},${c},0,${e},1,${Z(r,i,c,p)}`,`L${Z(r,i,s,p)}`,`A${s},${s},0,${e},0,${Z(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=Q(r,c,f),E=$(i,c,f),D=Q(r,c,p),O=$(i,c,p),k=Q(r,s,f),A=$(i,s,f),j=Q(r,s,p),M=$(i,s,p),N=_/(c-s),P=`${T+(k-T)*N},${E+(A-E)*N}`,ee=`${D+(j-D)*N},${O+(M-O)*N}`,te=`${k+(T-k)*N},${A+(E-A)*N}`,ne=`${j+(D-j)*N},${M+(O-M)*N}`,F=[];return n?F.push(`M${Z(r,i,c,f)}`):(F.push(`M${P}`),F.push(`Q${T},${E},${Z(r,i,c,y)}`)),F.push(`A${c},${c},0,${C},1,${Z(r,i,c,b)}`),t?F.push(`A${v},${v},0,0,1,${Z(r,i,s,p)}`):(F.push(`Q${D},${O},${ee}`),F.push(`L${ne}`),F.push(`Q${j},${M},${Z(r,i,s,S)}`)),F.push(`A${s},${s},0,${w},0,${Z(r,i,s,x)}`),n?F.push(`A${v},${v},0,0,0,${Z(r,i,c,f)}`):F.push(`Q${k},${A},${te}`),F.push(`Z`),F.join(``)}function Ne(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 Pe=2*Math.PI,Fe=-Math.PI/2,Ie=Math.PI/2;function Le(e){return e===`semi`?{end:Ie,start:Fe}:{end:Pe,start:0}}function Re(t,n){let o=n.variant??`pie`,s=n.padPixels??(o===`pie`?0:8),u=n.cornerRadius??(o===`pie`?0:8),d=c(`circle`,{class:`prism-pie-bg`,"pointer-events":`none`}),f=c(`g`,{class:`prism-pie-slices`,"shape-rendering":`geometricPrecision`}),p=c(`g`,{class:`prism-pie-labels`,"pointer-events":`none`}),m=[],h=null;function g(e){for(;p.children.length>m.length;)p.removeChild(p.lastChild);for(let t=0;t<m.length;t++){let n=m[t],r=e[t];if(!r?.label)continue;let{x:i,y:a}=Ne(n),o=p.children[t];o||(o=c(`text`,{class:`prism-pie-label`}),p.appendChild(o)),l(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}}let _=ce(t,{a11y:n.a11y,legend:n.legend,plugins:n.plugins,tooltip:n.tooltip},_=>{let{legend:v,svg:y,tooltip:b}=_;y.contains(d)||(y.appendChild(d),y.appendChild(f),y.appendChild(p));let{height:x,width:S}=_.dimensions.value,C=o===`semi`,w=S/2,T=C?x*.85:x/2,E=C?Math.min(w,T)-8:Math.min(S,x)/2-8,D=o===`pie`?0:Math.round(E*.55),O=n.innerRadius===void 0?D:n.innerRadius,k=Math.max(O+1,E),A=(0,e.isReactive)(n.data)?n.data.value:n.data,{end:j,start:M}=Le(o);for(m=je(A,w,T,k,O,M,j,s,u,e=>U(e),!1),l(d,{cx:w,cy:T,r:O>0?O:0}),d.setAttribute(`style`,`fill:var(--prism-bg,#fff)`);f.children.length>m.length;)f.removeChild(f.lastChild);for(;p.children.length>m.length;)p.removeChild(p.lastChild);let N=i(n.transition,0),P=N.duration,ee=r(N.easing);for(let e=0;e<m.length;e++){let t=m[e],r=f.children[e];r||(r=c(`path`,{class:`prism-pie-slice`}),f.appendChild(r)),r.setAttribute(`fill`,t.color),r.setAttribute(`stroke`,`none`),r.style.cursor=n.onClick||n.onHover?`pointer`:``}if(h!==null&&(cancelAnimationFrame(h),h=null),P>0){let e=null,t=n=>{e===null&&(e=n);let r=ee(Math.min(1,(n-e)/P)),i=a(M,j,r);for(let e=0;e<m.length;e++){let t=m[e],n=f.children[e];if(n)if(i<=t.startAngle)l(n,{d:``});else{let e=Math.min(t.endAngle,i);l(n,{d:Me({...t,endAngle:e})})}}r<1?h=requestAnimationFrame(t):(h=null,g(A))};h=requestAnimationFrame(t)}else{for(let e=0;e<m.length;e++){let t=m[e],n=f.children[e];n&&l(n,{d:Me(t)})}g(A)}return v?.update(m.map(e=>({color:e.color,name:e.slice.label??``}))),b?.hide(),{onClick:e=>{if(!n.onClick)return;let t=y.getBoundingClientRect(),r=e.clientX-t.left,i=e.clientY-t.top,a=ze(m,r,i,o);a>=0&&n.onClick(m[a].slice,a)},onMouseLeave:()=>{n.onHover?.(null,null),b?.hide()},onMouseMove:e=>{let r=y.getBoundingClientRect(),i=e.clientX-r.left,a=e.clientY-r.top,s=ze(m,i,a,o);if(s>=0){let e=m[s];n.onHover?.(e.slice,s);let{x:i,y:a}=Ne(e),o=t.getBoundingClientRect();b?.show(i+(r.left-o.left),a+(r.top-o.top),{key:s,value:e.slice.value},{color:e.color,data:[],name:e.slice.label??``})}else n.onHover?.(null,null),b?.hide()}}});return{get disposalSignal(){return _.disposalSignal},dispose(){h!==null&&(cancelAnimationFrame(h),h=null),_.dispose()},get disposed(){return _.disposed},el:_.el,[Symbol.dispose](){this.dispose()}}}function ze(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+Pe:e;if(t>=a.startAngle-1e-9&&t<=a.endAngle+1e-9)return i}}}return-1}function Be(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 Ve(e,t,n,r=`linear`){if(e.length===0)return``;let i=Be(e,t,n);return q(i,i.map(e=>({x:e.x,y:n})),r??`linear`)}function He(e,t,n,r){if(e.length===0)return``;let i=Be(e,t,n);return r===`monotone`?G(i):r===`step`?K(i):W(i)}function Ue(e,t,n,o,s,u,d){let f=t.length,p=Math.max(1,n/f-1),m=n/f,h=Math.min(0,...t),g=Math.max(...t)-h||1,_=i(u,0),v=_.duration,y=r(_.easing);for(;e.children.length>f;){let t=e.lastElementChild;t&&e.removeChild(t)}for(let n=0;n<f;n++){let r=Math.max(1,(t[n]-h)/g*o),i=o-r,u=e.children[n];if(u||(u=c(`rect`,{class:`prism-spark-bar`}),e.appendChild(u)),l(u,{fill:s,width:p,x:n*m}),v>0&&!u.hasAttribute(`data-init`)){u.setAttribute(`data-init`,`1`),l(u,{height:0,y:o});let e=null,t={h:0,y:o},n={h:r,y:i},s=r=>{if(d?.aborted)return;e===null&&(e=r);let i=y(Math.min(1,(r-e)/v));l(u,{height:a(t.h,n.h,i),y:a(t.y,n.y,i)}),i<1&&requestAnimationFrame(s)};requestAnimationFrame(s)}else u.setAttribute(`data-init`,`1`),l(u,{height:r,y:i})}}function We(e){return e.length>0&&e[0]!==null&&typeof e[0]==`object`}function Ge(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 Ke(e){return`var(--prism-color-${e%8+1})`}function qe(t,n){let r=n.variant??`line`,i=n.color??`var(--prism-color-1)`,a=n.curve??`linear`,o=n.strokeWidth??1.5,s=n.fillOpacity??.2,u=ae(t,{...n.a11y?{a11y:n.a11y}:{ariaHidden:!0},margin:{bottom:0,left:0,right:0,top:0}}),{svg:d}=u;d.classList.add(`prism-sparkline`);let f=c(`g`,{class:`prism-spark-inner`});d.appendChild(f);let p;function m(){let{height:t,width:d}=u.dimensions.value,p=(0,e.isReactive)(n.data)?n.data.value:n.data;for(;f.firstChild;)f.removeChild(f.firstChild);if(p.length!==0){if(r===`stack`&&We(p)){let e=c(`g`,{class:`prism-spark-stack`});f.appendChild(e);let r=n.cornerRadius??4,i=p,a=i.reduce((e,t)=>e+Math.max(0,t.value),0);if(a>0){let o=(n.padPixels??0)/2,s=0;i.forEach((n,u)=>{let f=Math.round(s);s+=Math.max(0,n.value)/a*d;let p=u===i.length-1?d:Math.round(s),m=u===0,h=u===i.length-1,g=Ge(f+(m?0:o),0,Math.max(0,p-f-(m?0:o)-(h?0:o)),t,r,m,h),_=c(`path`,{class:`prism-spark-stack-segment`});l(_,{d:g,fill:n.color??Ke(u)}),e.appendChild(_)})}}else if(r===`bar`){let e=c(`g`,{class:`prism-spark-bars`});f.appendChild(e),Ue(e,p,d,t,i,n.transition,g.signal)}else{if(r===`area`){let e=c(`path`,{class:`prism-spark-fill`});l(e,{d:Ve(p,d,t,a),fill:i,"fill-opacity":s,stroke:`none`}),f.appendChild(e)}let e=c(`path`,{class:`prism-spark-line`});l(e,{d:He(p,d,t,a),fill:`none`,stroke:i,"stroke-width":o}),f.appendChild(e)}We(p)||h(p)}}function h(e){if(p?.(),p=void 0,!n.onHover&&!n.onClick||e.length<=1)return;let{width:t}=u.dimensions.value;d.style.cursor=`crosshair`;let r=t/(e.length-1),i=t=>{let i=d.getBoundingClientRect(),a=t.clientX-i.left,o=Math.max(0,Math.min(e.length-1,Math.round(a/r)));n.onHover?.(o,e[o])},a=()=>n.onHover?.(null,null),o=t=>{if(!n.onClick)return;let i=d.getBoundingClientRect(),a=t.clientX-i.left,o=Math.max(0,Math.min(e.length-1,Math.round(a/r)));n.onClick(o,e[o])};d.addEventListener(`mousemove`,i),d.addEventListener(`mouseleave`,a),d.addEventListener(`click`,o),p=()=>{d.removeEventListener(`mousemove`,i),d.removeEventListener(`mouseleave`,a),d.removeEventListener(`click`,o)}}let g=new AbortController,_=(0,e.createScope)();_.run(()=>{(0,e.effect)(()=>{m()},{scheduler:`microtask`})});let v=!1;return{get disposalSignal(){return g.signal},dispose(){v||(v=!0,g.abort(),p?.(),_.dispose(),u.dispose())},get disposed(){return v},el:d,[Symbol.dispose](){this.dispose()}}}exports.PrismError=te,exports.PrismRenderError=ne,exports.animate=o,exports.bandScale=ye,exports.createAreaChart=ve,exports.createBarChart=Ee,exports.createLineChart=Ae,exports.createPieChart=Re,exports.createSparkline=qe,exports.linearScale=b,exports.resetTheme=me,exports.seriesColor=U,exports.setTheme=pe,exports.timeScale=A;
|
|
2
2
|
//# sourceMappingURL=prism.cjs.map
|