@silverpoint/core 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +14 -0
  2. package/dist/catalog.d.ts +2 -2
  3. package/dist/catalog.js +4 -2
  4. package/dist/catalog.js.map +1 -1
  5. package/dist/{chunk-OLYKR5PS.js → chunk-46QELMCG.js} +8 -213
  6. package/dist/chunk-46QELMCG.js.map +1 -0
  7. package/dist/chunk-5MP3BLZK.js +48 -0
  8. package/dist/chunk-5MP3BLZK.js.map +1 -0
  9. package/dist/chunk-6YFO7OP3.js +84 -0
  10. package/dist/chunk-6YFO7OP3.js.map +1 -0
  11. package/dist/chunk-ANJSW5JX.js +93 -0
  12. package/dist/chunk-ANJSW5JX.js.map +1 -0
  13. package/dist/{chunk-PD4MD7JU.js → chunk-E5CC2NNQ.js} +5 -3
  14. package/dist/chunk-E5CC2NNQ.js.map +1 -0
  15. package/dist/chunk-G7N4X5XD.js +12 -0
  16. package/dist/chunk-G7N4X5XD.js.map +1 -0
  17. package/dist/chunk-NI7B6UEO.js +24 -0
  18. package/dist/chunk-NI7B6UEO.js.map +1 -0
  19. package/dist/chunk-WYFRHI4S.js +179 -0
  20. package/dist/chunk-WYFRHI4S.js.map +1 -0
  21. package/dist/contrast-siWF_R5o.d.ts +30 -0
  22. package/dist/dashboard-demos.d.ts +2 -2
  23. package/dist/index.d.ts +13 -10
  24. package/dist/index.js +20 -9
  25. package/dist/index.js.map +1 -1
  26. package/dist/{model-CLhtoG75.d.ts → model-DVVt59AB.d.ts} +1 -1
  27. package/dist/palettes.d.ts +29 -0
  28. package/dist/palettes.js +79 -0
  29. package/dist/palettes.js.map +1 -0
  30. package/dist/{props-Dq8FC8GG.d.ts → props-BZ9CcrGv.d.ts} +53 -1
  31. package/dist/timeline.d.ts +90 -0
  32. package/dist/timeline.js +125 -0
  33. package/dist/timeline.js.map +1 -0
  34. package/dist/{types-B81k-s9_.d.ts → types-BT3Xm7fP.d.ts} +3 -1
  35. package/dist/types-D5ys35fF.d.ts +576 -0
  36. package/dist/types-DHBJ0PzV.d.ts +57 -0
  37. package/dist/ui-demos.d.ts +14 -3
  38. package/dist/ui-demos.js +163 -1
  39. package/dist/ui-demos.js.map +1 -1
  40. package/dist/ui.d.ts +346 -325
  41. package/dist/ui.js +932 -118
  42. package/dist/ui.js.map +1 -1
  43. package/dist/view-DteS9glE.d.ts +82 -0
  44. package/package.json +13 -1
  45. package/dist/chunk-OLYKR5PS.js.map +0 -1
  46. package/dist/chunk-PD4MD7JU.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/render/serialize.ts","../src/render/heighten.ts","../src/render/view.ts","../src/diagnostics/typeface.ts","../src/ink/null-inker.ts","../src/ink/registry.ts","../src/charts/line-chart/demo.ts","../src/charts/line-chart/line-chart.ts","../src/interaction/hit-test.ts","../src/interaction/reduce.ts","../src/charts/bullet-chart/demo.ts","../src/charts/bullet-chart/bullet-chart.ts","../src/charts/pyramid-chart/demo.ts","../src/charts/pyramid-chart/pyramid-chart.ts","../src/charts/heatmap-chart/demo.ts","../src/charts/heatmap-chart/heatmap-chart.ts","../src/charts/treemap-chart/demo.ts","../src/charts/treemap-chart/treemap-chart.ts","../src/charts/sankey-chart/demo.ts","../src/charts/sankey-chart/sankey-chart.ts","../src/charts/activity-grid/demo.ts","../src/charts/activity-grid/activity-grid.ts","../src/charts/step-chart/demo.ts","../src/charts/step-chart/step-chart.ts","../src/charts/shared/curves.ts","../src/charts/sparkline-rows/demo.ts","../src/charts/sparkline-rows/sparkline-rows.ts","../src/charts/kpi-card/demo.ts","../src/charts/kpi-card/kpi-card.ts","../src/charts/bar-chart/demo.ts","../src/charts/bar-chart/bar-chart.ts","../src/charts/stacked-bar-chart/demo.ts","../src/charts/stacked-bar-chart/stacked-bar-chart.ts","../src/charts/composed-chart/demo.ts","../src/charts/composed-chart/composed-chart.ts","../src/charts/waterfall-chart/demo.ts","../src/charts/waterfall-chart/waterfall-chart.ts","../src/charts/funnel-chart/demo.ts","../src/charts/funnel-chart/funnel-chart.ts","../src/charts/donut-chart/demo.ts","../src/charts/donut-chart/donut-chart.ts","../src/charts/radar-chart/demo.ts","../src/charts/radar-chart/radar-chart.ts","../src/charts/polar-bar-chart/demo.ts","../src/charts/polar-bar-chart/polar-bar-chart.ts","../src/charts/coxcomb-chart/demo.ts","../src/charts/coxcomb-chart/coxcomb-chart.ts","../src/charts/shared/tracks.ts","../src/charts/radial-arc-group/demo.ts","../src/charts/radial-arc-group/radial-arc-group.ts","../src/charts/radial-rings/demo.ts","../src/charts/radial-rings/radial-rings.ts","../src/charts/shared/scalar.ts","../src/charts/gauge-arc/gauge-arc.ts","../src/charts/meter-chart/meter-chart.ts","../src/charts/wind-rose/demo.ts","../src/charts/wind-rose/wind-rose.ts","../src/charts/chord-ring/demo.ts","../src/charts/chord-ring/chord-ring.ts","../src/charts/orbit-chart/demo.ts","../src/charts/orbit-chart/orbit-chart.ts","../src/charts/volvelle-chart/demo.ts","../src/charts/volvelle-chart/volvelle-chart.ts","../src/charts/candlestick-chart/demo.ts","../src/charts/candlestick-chart/candlestick-chart.ts","../src/charts/area-chart/demo.ts","../src/charts/area-chart/area-chart.ts","../src/charts/range-band-chart/demo.ts","../src/charts/range-band-chart/range-band-chart.ts","../src/charts/stream-chart/demo.ts","../src/charts/stream-chart/stream-chart.ts","../src/charts/shared/points.ts","../src/charts/scatter-chart/demo.ts","../src/charts/scatter-chart/scatter-chart.ts","../src/charts/bubble-chart/demo.ts","../src/charts/bubble-chart/bubble-chart.ts","../src/dashboard/defaults.ts","../src/dashboard/resolve.ts","../src/dashboard/view.ts","../src/dashboard/link.ts"],"names":["area","row","along","CHART","PLOT_INSET","LABEL_COLUMN","HEIGHTEN_RADIUS","curveStepAfter","line","CURVES","curveMonotoneX","curveLinear","curveNatural","top","bottom","BAR_FILL","VALUE_COLUMN","HOLE","LEGEND_GAP","FAMILY","START","SPAN","LEGEND_ASPECT","BAND","CHAR","low","high","key","x","y","size"],"mappings":"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A;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAC9H,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IACtH,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAC/H,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,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AAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IACpH,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAC3H,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAC3H,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IACjI,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAC3H,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAChI,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAC/H,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAC/H,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAC7H,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAC/H,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IACvH,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IACvH,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAC1G,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IACxH,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IACvH,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IACvH,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,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G,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IACjI,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAC/H,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAC/H,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,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","file":"index.js","sourcesContent":["import type { Geometry } from '../types';\n\n/** Serialises a geometry to JSON. Geometry holds no functions and no DOM nodes (REQ-011). */\nexport function serializeGeometry(geometry: Geometry): string {\n return JSON.stringify(geometry);\n}\n\n/** Inverse of `serializeGeometry`. */\nexport function parseGeometry(json: string): Geometry {\n return JSON.parse(json) as Geometry;\n}\n\n/** Bytes of path data a geometry carries, tiles included (NFR §7). */\nexport function pathBytes(geometry: Geometry): number {\n let bytes = 0;\n for (const stroke of geometry.strokes) bytes += stroke.d.length;\n for (const tile of geometry.defs) {\n for (const stroke of tile.strokes) bytes += stroke.d.length;\n }\n return bytes;\n}\n\n/** Path data budget per chart (API Spec §12). */\nexport const PATH_BYTE_BUDGET = 40_000;\n","import { diagnose } from '../diagnostics/diagnose';\nimport type { Geometry, Stroke } from '../types';\n\nfunction isOutlineOf(candidate: Stroke, heightened: Stroke): boolean {\n return (\n candidate.part === 'ink' &&\n (candidate.paint ?? 'stroke') === 'stroke' &&\n candidate.d === heightened.d\n );\n}\n\n/**\n * Holds the heightening rules on a geometry:\n * - a single heightened element per chart (REQ-024); a second one throws SP005 in development\n * and is dropped in production (REQ-025);\n * - every heightened element carries an outline in the main ink (REQ-031), which is added\n * when the recipe did not draw it.\n */\nexport function enforceHeightening(geometry: Geometry, chart: string): Geometry {\n const heightened = geometry.strokes.filter((stroke) => stroke.part === 'heighten');\n if (heightened.length === 0) return geometry;\n if (heightened.length > 1 && process.env.NODE_ENV !== 'production') {\n diagnose('SP005', chart, {\n property: 'heighten',\n message: `${heightened.length} heightened elements were declared.`,\n });\n }\n const [kept] = heightened as [Stroke, ...Stroke[]];\n const strokes: Stroke[] = [];\n for (const stroke of geometry.strokes) {\n if (stroke.part === 'heighten' && stroke !== kept) continue;\n strokes.push(stroke);\n if (stroke === kept && !geometry.strokes.some((other) => isOutlineOf(other, kept))) {\n strokes.push({ d: kept.d, role: kept.role, part: 'ink', paint: 'stroke' });\n }\n }\n return { ...geometry, strokes };\n}\n","import type { ChartModel, InkMode, Stroke, StrokePaint, TextLabel } from '../types';\n\n/**\n * The SVG a chart renders, as flat element descriptors with every attribute value already a\n * string. Each adapter's template writes these fields to the same attribute names, one to one,\n * and computes nothing (Art. 2); `svgString` writes them too, and its output is the canonical\n * render every adapter is compared against (Art. 3, DD-004).\n *\n * Colour never appears here: the stylesheet paints by `part` (REQ-042).\n */\nexport interface SvgView {\n readonly svg: Readonly<{\n viewBox: string;\n width: string;\n height: string;\n /** `class` attribute. */\n class: string;\n /** `data-substrate` attribute. */\n substrate: string;\n /** `data-mode` attribute. */\n mode: InkMode;\n role: 'img';\n /** `aria-labelledby` attribute. */\n labelledby: string;\n }>;\n readonly title: Readonly<{ id: string; text: string }>;\n readonly desc: Readonly<{ id: string; text: string }>;\n /** `<pattern>` elements inside `<defs>`; `<defs>` is omitted when there are none. */\n readonly patterns: readonly PatternView[];\n readonly paths: readonly PathView[];\n readonly texts: readonly TextView[];\n}\n\nexport interface PatternView {\n readonly id: string;\n readonly width: string;\n readonly height: string;\n /** `patternTransform` attribute. */\n readonly transform: string;\n readonly paths: readonly PathView[];\n}\n\nexport interface PathView {\n readonly d: string;\n /** `part` attribute: `sp-<part>`. */\n readonly part: string;\n /** `data-role` attribute. */\n readonly role: Stroke['role'];\n /** `data-paint` attribute. */\n readonly paint: StrokePaint;\n /** `data-dash` attribute, omitted when `null`. */\n readonly dash: string | null;\n /** `data-weight` attribute: a `weight` ground's tonal level (REQ-028), omitted when `null`. */\n readonly weight: string | null;\n /** `fill` attribute — only ever a `url(#tile)` reference, omitted when `null`. */\n readonly fill: string | null;\n}\n\nexport interface TextView {\n readonly x: string;\n readonly y: string;\n /** `part` attribute: `sp-text` or `sp-axis`. */\n readonly part: string;\n /** `data-kind` attribute. */\n readonly kind: TextLabel['kind'];\n /** `text-anchor` attribute. */\n readonly anchor: TextLabel['anchor'];\n readonly text: string;\n}\n\nexport interface ViewStyle {\n readonly ground: string;\n readonly substrate: string;\n readonly mode: InkMode;\n}\n\nfunction pathView(stroke: Stroke): PathView {\n const paint = stroke.paint ?? 'stroke';\n return {\n d: stroke.d,\n part: `sp-${stroke.part}`,\n role: stroke.role,\n paint,\n dash: stroke.dash ?? null,\n weight: stroke.tonalWeight === undefined ? null : String(stroke.tonalWeight),\n fill: paint === 'tile' && stroke.tile ? `url(#${stroke.tile})` : null,\n };\n}\n\n/** Builds the element descriptors of a chart model (API Spec §10). */\nexport function toSvgView(model: ChartModel, style: ViewStyle): SvgView {\n const { geometry, ids } = model;\n const { viewBox } = geometry;\n return {\n svg: {\n viewBox: `${viewBox.x} ${viewBox.y} ${viewBox.width} ${viewBox.height}`,\n width: String(viewBox.width),\n height: String(viewBox.height),\n class: `sp-chart sp-ground-${style.ground}`,\n substrate: style.substrate,\n mode: style.mode,\n role: 'img',\n labelledby: `${ids.title} ${ids.desc}`,\n },\n title: { id: ids.title, text: model.name },\n desc: { id: ids.desc, text: model.description },\n patterns: geometry.defs.map((tile) => ({\n id: tile.id,\n width: String(tile.width),\n height: String(tile.height),\n transform: `rotate(${tile.angle})`,\n paths: tile.strokes.map(pathView),\n })),\n paths: geometry.strokes.map(pathView),\n texts: geometry.labels.map((label) => ({\n x: String(label.x),\n y: String(label.y),\n part: `sp-${label.part}`,\n kind: label.kind,\n anchor: label.anchor,\n text: label.text,\n })),\n };\n}\n\nconst ESCAPES: Readonly<Record<string, string>> = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' };\n\nfunction escape(value: string): string {\n return value.replace(/[&<>\"]/g, (char) => ESCAPES[char] ?? char);\n}\n\nfunction attributes(pairs: readonly (readonly [string, string | null])[]): string {\n return pairs\n .filter((pair): pair is readonly [string, string] => pair[1] !== null)\n .map(([name, value]) => ` ${name}=\"${escape(value)}\"`)\n .join('');\n}\n\nfunction pathString(path: PathView): string {\n return `<path${attributes([\n ['d', path.d],\n ['part', path.part],\n ['data-role', path.role],\n ['data-paint', path.paint],\n ['data-dash', path.dash],\n ['data-weight', path.weight],\n ['fill', path.fill],\n ])}></path>`;\n}\n\n/**\n * Serialises a view to SVG markup. This is the canonical render stored with each fixture;\n * user text is always escaped, never interpolated as markup (TD §6).\n */\nexport function svgString(view: SvgView): string {\n const { svg } = view;\n const open = `<svg${attributes([\n ['xmlns', 'http://www.w3.org/2000/svg'],\n ['viewBox', svg.viewBox],\n ['width', svg.width],\n ['height', svg.height],\n ['class', svg.class],\n ['data-substrate', svg.substrate],\n ['data-mode', svg.mode],\n ['role', svg.role],\n ['aria-labelledby', svg.labelledby],\n ])}>`;\n const title = `<title id=\"${escape(view.title.id)}\">${escape(view.title.text)}</title>`;\n const desc = `<desc id=\"${escape(view.desc.id)}\">${escape(view.desc.text)}</desc>`;\n const defs =\n view.patterns.length === 0\n ? ''\n : `<defs>${view.patterns\n .map(\n (pattern) =>\n `<pattern${attributes([\n ['id', pattern.id],\n ['width', pattern.width],\n ['height', pattern.height],\n ['patternUnits', 'userSpaceOnUse'],\n ['patternTransform', pattern.transform],\n ])}>${pattern.paths.map(pathString).join('')}</pattern>`,\n )\n .join('')}</defs>`;\n const paths = view.paths.map(pathString).join('');\n const texts = view.texts\n .map(\n (text) =>\n `<text${attributes([\n ['x', text.x],\n ['y', text.y],\n ['part', text.part],\n ['data-kind', text.kind],\n ['text-anchor', text.anchor],\n ])}>${escape(text.text)}</text>`,\n )\n .join('');\n return `${open}${title}${desc}${defs}${paths}${texts}</svg>`;\n}\n","import { diagnose } from './diagnose';\n\n/** The subset of `FontFaceSet` the check needs; injected so the core stays DOM-free. */\nexport interface FontFaceSetLike {\n load(font: string): Promise<readonly unknown[]>;\n check(font: string): boolean;\n}\n\n/** Font shorthand used to probe the display face. */\nexport const DISPLAY_FACE_PROBE = '16px \"EB Garamond\"';\n\n/**\n * Checks that the display typeface loaded. On failure it reports SP013 and resolves `false`;\n * it never throws and never blocks the render (REQ-032).\n */\nexport async function checkTypeface(\n fonts: FontFaceSetLike,\n chart: string,\n face: string = DISPLAY_FACE_PROBE,\n): Promise<boolean> {\n let loaded: boolean;\n try {\n const faces = await fonts.load(face);\n loaded = faces.length > 0 && fonts.check(face);\n } catch {\n loaded = false;\n }\n if (!loaded && process.env.NODE_ENV !== 'production') {\n diagnose('SP013', chart, { property: 'font-family', message: `Probe: ${face}.` });\n }\n return loaded;\n}\n","import type { Geometry, Inker, InkOptions } from '../types';\n\n/** Returns the geometry untouched and uncopied. `precision` mode is exactly this (REQ-021). */\nexport const NullInker: Inker = Object.freeze({\n name: 'null',\n ink(geometry: Geometry, _options: InkOptions): Geometry {\n return geometry;\n },\n});\n","import { diagnose } from '../diagnostics/diagnose';\nimport type { Inker } from '../types';\nimport { NullInker } from './null-inker';\n\nconst registry = new Map<string, Inker>([[NullInker.name, NullInker]]);\n\n/** Registers an inker under its `name`, replacing any previous one with that name. */\nexport function registerInker(inker: Inker): void {\n registry.set(inker.name, inker);\n}\n\n/**\n * Resolves an inker by name among the registered ones and `builtins`. An unknown name falls\n * back to `NullInker` and emits SP006; the render continues (REQ-026).\n */\nexport function resolveInker(name: string, chart: string, builtins: readonly Inker[] = []): Inker {\n const found = registry.get(name) ?? builtins.find((inker) => inker.name === name);\n if (found) return found;\n if (process.env.NODE_ENV !== 'production') {\n diagnose('SP006', chart, { property: 'inker', message: `Inker \"${name}\" is not registered.` });\n }\n return NullInker;\n}\n","import type { Datum } from '../../types';\n\n/**\n * Demo dataset of `LineChart` (REQ-093). Frozen, and part of the stable surface: changing it\n * alters the SVG of anyone who renders without data, so it is never a patch (Data Model §4).\n */\nexport const LINE_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { hour: '00', hits: 18, baseline: 22 },\n { hour: '02', hits: 14, baseline: 18 },\n { hour: '04', hits: 11, baseline: 15 },\n { hour: '06', hits: 16, baseline: 17 },\n { hour: '08', hits: 34, baseline: 30 },\n { hour: '10', hits: 58, baseline: 48 },\n { hour: '12', hits: 71, baseline: 60 },\n { hour: '14', hits: 66, baseline: 62 },\n { hour: '16', hits: 74, baseline: 64 },\n { hour: '18', hits: 88, baseline: 70 },\n { hour: '20', hits: 62, baseline: 55 },\n { hour: '22', hits: 41, baseline: 40 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const LINE_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n xKey: 'hour',\n valueKey: 'hits',\n secondaryKey: 'baseline',\n} as const);\n","import {\n curveLinear,\n curveMonotoneX,\n curveNatural,\n curveStepAfter,\n line,\n type CurveFactory,\n} from 'd3-shape';\nimport { diagnose } from '../../diagnostics/diagnose';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, HitArea, LineChartProps, LineCurve, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, categoryAxis, checkVolume, categoryLabels, readSeries, seriesValues, valueAxis, type Series, type SeriesPoint } from '../shared/cartesian';\nimport { accessorName, circlePath, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { LINE_CHART_DEMO, LINE_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'LineChart';\nconst HEIGHTEN_RADIUS = 3.5;\n\nconst CURVES: Record<LineCurve, CurveFactory> = {\n monotone: curveMonotoneX,\n linear: curveLinear,\n natural: curveNatural,\n step: curveStepAfter,\n};\n\nfunction buildLineChart(props: LineChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? LINE_CHART_DEMO;\n const xKey = usesDemo ? LINE_CHART_DEMO_KEYS.xKey : (props.xKey ?? 'x');\n const valueKey = usesDemo ? LINE_CHART_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n const secondaryKey = usesDemo ? LINE_CHART_DEMO_KEYS.secondaryKey : props.secondaryKey;\n const chrome = props.chrome ?? 'card';\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n const primary = readSeries(data, valueKey, 'value');\n const secondary =\n secondaryKey !== undefined && (props.series ?? 'all') === 'all'\n ? readSeries(data, secondaryKey, 'secondary')\n : undefined;\n const series = secondary ? [primary, secondary] : [primary];\n checkVolume(CHART, series);\n\n const xName = accessorName(xKey, 'x');\n const xValues = data.map((datum, index) => read(xKey, datum, index));\n const xLabels = xValues.map((value) => formatCategory(value, locale));\n\n const base = modelBase(CHART, props, context, 'Line chart', {\n columns: [xName, ...series.map((s) => s.key)],\n rows: data.map((_, index) => [\n xLabels[index] ?? '',\n ...series.map((s) => formatValue(s.points[index]?.value, locale, numberFormat)),\n ]),\n });\n const { name } = base;\n\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const { width } = size;\n\n const card = cardLayout(props, { width, areaHeight: size.height, chrome, locale });\n const { area } = card;\n const plot = cartesianPlot(area);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n for (const s of series) {\n if (s.missing > 0 && data.length > 0 && process.env.NODE_ENV !== 'production') {\n diagnose('SP002', CHART, {\n property: s.key,\n message: `${s.missing} of ${data.length} values were omitted from the stroke; set \\`connectNulls\\` to bridge the gap.`,\n });\n }\n }\n\n const valueExtent = extent(seriesValues(series));\n\n if (data.length === 0 || valueExtent === undefined) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const axis = valueAxis(plot, valueExtent, { chart: CHART, property: primary.key, padding: context.domainPadding, locale, numberFormat });\n const y = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const xAt = categoryAxis(xValues, plot, { chart: CHART, property: xName, padding: context.domainPadding }).at;\n\n const curve = CURVES[props.curve ?? 'monotone'];\n const connectNulls = props.connectNulls ?? false;\n const pathFor = (s: Series): string => {\n const generator = line<SeriesPoint>()\n .x((p) => xAt(p.index))\n .y((p) => y(p.value ?? 0))\n .curve(curve);\n const points = connectNulls ? s.points.filter((p) => p.value !== undefined) : s.points;\n if (!connectNulls) generator.defined((p) => p.value !== undefined);\n return generator(points) ?? '';\n };\n\n // The secondary series is drawn first so the primary one reads on top of it.\n const ordered = secondary ? [secondary, primary] : [primary];\n for (const s of ordered) {\n const d = pathFor(s);\n if (d === '') continue;\n strokes.push(\n s === primary\n ? { d, role: 'encoding', part: 'ink' }\n : { d, role: 'encoding', part: 'ink-secondary', dash: 'dotted' },\n );\n }\n\n for (const s of series) {\n for (const p of s.points) {\n if (p.value === undefined) continue;\n hitAreas.push({\n seriesKey: s.key,\n index: p.index,\n datum: p.datum,\n value: p.value,\n x: xAt(p.index),\n y: y(p.value),\n });\n }\n }\n\n const live = [...primary.points].reverse().find((p) => p.value !== undefined);\n if (live?.value !== undefined) {\n const d = circlePath(xAt(live.index), y(live.value), HEIGHTEN_RADIUS);\n strokes.push({ d, role: 'encoding', part: 'heighten', paint: 'fill' });\n strokes.push({ d, role: 'encoding', part: 'ink', paint: 'stroke' });\n }\n\n const count = data.length;\n labels.push(...categoryLabels(xLabels, xAt, area, plot));\n\n const ranges = series.map((s) => {\n const seriesExtent = extent(s.points.flatMap((p) => (p.value === undefined ? [] : [p.value])));\n return seriesExtent\n ? `${s.key} ranges from ${formatNumber(seriesExtent[0], locale, numberFormat)} to ${formatNumber(seriesExtent[1], locale, numberFormat)}`\n : `${s.key} has no values`;\n });\n const description =\n props.description ??\n `${name}. Line chart of ${count} ${xName} values${secondary ? ' in 2 series' : ''}; ${ranges.join('; ')}.`;\n\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `LineChart` recipe (REQ-060): props plus scales produce exact geometry. */\nexport const lineChart: ChartRecipe<LineChartProps> = /* @__PURE__ */ Object.freeze({\n name: CHART,\n build: buildLineChart,\n});\n","import { round2 } from '../render/round';\nimport type { ActiveItem, Geometry, HitArea, Rect, Stroke } from '../types';\nimport { circlePath } from '../charts/shared/format';\n\nexport type PointerKind = 'mouse' | 'pen' | 'touch';\n\n/** Minimum touch target, in px (REQ-144). */\nexport const MIN_TOUCH_TARGET = 24;\n\n/** The active item a hit area stands for. @internal */\nexport function toActiveItem(hit: HitArea): ActiveItem {\n return {\n seriesKey: hit.seriesKey,\n index: hit.index,\n datum: hit.datum,\n value: hit.value,\n point: { x: hit.x, y: hit.y },\n };\n}\n\nfunction inside(rect: Rect, x: number, y: number): boolean {\n return x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height;\n}\n\n/** Smallest horizontal distance between neighbouring hit areas of the same series. */\nfunction spacing(hitAreas: readonly HitArea[]): number {\n let smallest = Number.POSITIVE_INFINITY;\n for (let i = 1; i < hitAreas.length; i += 1) {\n const previous = hitAreas[i - 1] as HitArea;\n const current = hitAreas[i] as HitArea;\n if (previous.seriesKey !== current.seriesKey) continue;\n const gap = Math.abs(current.x - previous.x);\n if (gap > 0 && gap < smallest) smallest = gap;\n }\n return smallest;\n}\n\n/**\n * Resolves the active item as a pure function of a pointer position, in SVG space, and the\n * geometry — no DOM involved (REQ-140).\n *\n * A pointer inside an item's box resolves to that item. Otherwise a mouse or pen resolves to the\n * item nearest along x, then along y. Touch resolves by\n * proximity and only within a target at least 24 px wide (REQ-144). A point outside the\n * drawing area resolves to `null`.\n */\nexport function resolveActive(\n geometry: Geometry,\n pointer: Readonly<{ x: number; y: number }>,\n kind: PointerKind = 'mouse',\n): ActiveItem | null {\n if (!Number.isFinite(pointer.x) || !Number.isFinite(pointer.y)) return null;\n if (!inside(geometry.plot, pointer.x, pointer.y)) return null;\n // An item with an area wins when the pointer is inside it; of nested areas, the smallest.\n let boxed: HitArea | undefined;\n for (const hit of geometry.hitAreas) {\n if (!hit.box || !inside(hit.box, pointer.x, pointer.y)) continue;\n if (!boxed?.box || hit.box.width * hit.box.height < boxed.box.width * boxed.box.height) boxed = hit;\n }\n if (boxed) return toActiveItem(boxed);\n let best: HitArea | undefined;\n let bestDx = Number.POSITIVE_INFINITY;\n let bestDy = Number.POSITIVE_INFINITY;\n for (const hit of geometry.hitAreas) {\n const dx = Math.abs(hit.x - pointer.x);\n const dy = Math.abs(hit.y - pointer.y);\n if (dx < bestDx || (dx === bestDx && dy < bestDy)) {\n best = hit;\n bestDx = dx;\n bestDy = dy;\n }\n }\n if (!best) return null;\n if (kind === 'touch') {\n const reach = Math.max(MIN_TOUCH_TARGET / 2, spacing(geometry.hitAreas) / 2);\n if (bestDx > reach) return null;\n }\n return toActiveItem(best);\n}\n\n/**\n * Converts a client-space pointer position into SVG space, given the rendered bounding box of\n * the `<svg>` element. Adapters pass numbers; the arithmetic stays here (Art. 2).\n */\nexport function toSvgPoint(\n client: Readonly<{ x: number; y: number }>,\n box: Readonly<{ left: number; top: number; width: number; height: number }>,\n viewBox: Rect,\n): { x: number; y: number } {\n if (box.width <= 0 || box.height <= 0) return { x: Number.NaN, y: Number.NaN };\n return {\n x: viewBox.x + ((client.x - box.left) * viewBox.width) / box.width,\n y: viewBox.y + ((client.y - box.top) * viewBox.height) / box.height,\n };\n}\n\n/** Keys that move the active item (REQ-122). */\nexport const NAVIGATION_KEYS: readonly string[] = ['ArrowRight', 'ArrowDown', 'ArrowLeft', 'ArrowUp', 'Home', 'End', 'Escape'];\n\n/**\n * Keyboard traversal of the data points, as a pure function (REQ-122). Right and down move to\n * the next point of the series, left and up to the previous one, Home and End to its ends,\n * Escape clears. On a grid — every item carries a `cell` — the arrows move by column and row\n * instead. A chart with its own model — a hierarchy — gives every item its `moves`, and the keys\n * follow them. Returns `undefined` for a key that is not a navigation key.\n */\nexport function stepActive(\n geometry: Geometry,\n current: ActiveItem | null,\n key: string,\n): ActiveItem | null | undefined {\n if (!NAVIGATION_KEYS.includes(key)) return undefined;\n if (key === 'Escape') return null;\n const hits = geometry.hitAreas;\n if (hits[0]?.moves) {\n // The moves are the chart's own (a tree's, interaction/tree.ts); here they are only followed.\n const here = current ? hits.findIndex((hit) => hit.seriesKey === current.seriesKey && hit.index === current.index) : -1;\n const to = here < 0 ? hits[0].moves[key === 'End' ? 'End' : 'Home'] : hits[here]?.moves?.[key];\n return toActiveItem(hits[to ?? Math.max(here, 0)] as HitArea);\n }\n const grid = geometry.hitAreas.length > 0 && geometry.hitAreas.every((hit) => hit.cell !== undefined);\n if (grid) return stepGrid(geometry.hitAreas, current, key);\n const seriesKey = current?.seriesKey ?? geometry.hitAreas[0]?.seriesKey;\n const points = geometry.hitAreas.filter((hit) => hit.seriesKey === seriesKey);\n if (points.length === 0) return null;\n const position = current ? points.findIndex((hit) => hit.index === current.index) : -1;\n let next: number;\n switch (key) {\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = points.length - 1;\n break;\n case 'ArrowRight':\n case 'ArrowDown':\n next = position < 0 ? 0 : Math.min(position + 1, points.length - 1);\n break;\n default:\n next = position < 0 ? 0 : Math.max(position - 1, 0);\n }\n return toActiveItem(points[next] as HitArea);\n}\n\n/**\n * Grid traversal. Home and End reach the start and end of the current row, as in a spreadsheet;\n * with nothing active they reach the first and last cell in reading order.\n */\nfunction stepGrid(hits: readonly HitArea[], current: ActiveItem | null, key: string): ActiveItem | null {\n const order = [...hits].sort((a, b) => (a.cell?.row ?? 0) - (b.cell?.row ?? 0) || (a.cell?.column ?? 0) - (b.cell?.column ?? 0));\n const here = current ? hits.find((hit) => hit.seriesKey === current.seriesKey && hit.index === current.index) : undefined;\n if (!here?.cell) return toActiveItem((key === 'End' ? order.at(-1) : order[0]) as HitArea);\n if (key === 'Home' || key === 'End') {\n const row = order.filter((hit) => hit.cell?.row === here.cell?.row);\n return toActiveItem((key === 'End' ? row.at(-1) : row[0]) as HitArea);\n }\n // An arrow moves to the nearest cell in its direction along the same row or column, so a\n // missing value is stepped over rather than walling off the items behind it (REQ-122).\n const horizontal = key === 'ArrowRight' || key === 'ArrowLeft';\n const sign = key === 'ArrowRight' || key === 'ArrowDown' ? 1 : -1;\n const { column, row } = here.cell;\n let next: HitArea | undefined;\n for (const hit of hits) {\n if (!hit.cell) continue;\n const along = horizontal ? hit.cell.column - column : hit.cell.row - row;\n const across = horizontal ? hit.cell.row - row : hit.cell.column - column;\n if (across !== 0 || along * sign <= 0) continue;\n const best = next?.cell ? Math.abs(horizontal ? next.cell.column - column : next.cell.row - row) : Number.POSITIVE_INFINITY;\n if (Math.abs(along) < best) next = hit;\n }\n return toActiveItem(next ?? here);\n}\n\n/** Readout of an active item, positioned as percentages of the viewBox (REQ-141). */\nexport interface Readout {\n readonly heading: string;\n readonly text: string;\n readonly left: string;\n readonly top: string;\n /** Sentence announced to assistive technology (REQ-122). */\n readonly announcement: string;\n /** Marker drawn over the active point. */\n readonly marker: Stroke;\n}\n\n/**\n * Builds the readout of an active item from the chart's own tabular alternative, so the\n * readout, the table and the announcement always say the same.\n */\nexport function readout(\n model: { readonly geometry: Geometry; readonly table: { readonly columns: readonly string[]; readonly rows: readonly (readonly string[])[] } },\n active: ActiveItem,\n): Readout {\n const { geometry, table } = model;\n const column = Math.max(table.columns.indexOf(active.seriesKey), 1);\n const row = table.rows[active.index] ?? [];\n const heading = row[0] ?? '';\n const value = row[column] ?? String(active.value);\n const { viewBox } = geometry;\n const percent = (part: number, whole: number) => `${whole > 0 ? round2((part / whole) * 100) : 0}%`;\n return {\n heading,\n text: `${active.seriesKey}: ${value}`,\n left: percent(active.point.x - viewBox.x, viewBox.width),\n top: percent(active.point.y - viewBox.y, viewBox.height),\n announcement: `${table.columns[0] ?? ''} ${heading}, ${active.seriesKey} ${value}`,\n marker: { d: circlePath(active.point.x, active.point.y, 6), role: 'ornament', part: 'ink', paint: 'stroke' },\n };\n}\n","import type { ActiveItem, Geometry } from '../types';\nimport { resolveActive, stepActive, toSvgPoint, type PointerKind } from './hit-test';\n\ntype Point = Readonly<{ x: number; y: number }>;\ntype Box = Readonly<{ left: number; top: number; width: number; height: number }>;\n\n/** A DOM event, reduced to the numbers the interaction engine needs. */\nexport type InteractionEvent =\n | { readonly type: 'pointer' | 'click'; readonly client: Point; readonly box: Box; readonly kind: PointerKind }\n | { readonly type: 'leave' | 'focus' | 'blur' }\n | { readonly type: 'key'; readonly key: string };\n\nexport interface InteractionResult {\n readonly active: ActiveItem | null;\n /** The active item differs from the current one: emit `activeChange` (REQ-141, REQ-143). */\n readonly changed: boolean;\n /** An item was chosen: emit `select` (API Spec §9). */\n readonly selected?: ActiveItem;\n /** The event was consumed; a key event should not scroll the page. */\n readonly handled: boolean;\n}\n\n/** Same item: same series and index. */\nexport function sameActive(a: ActiveItem | null, b: ActiveItem | null): boolean {\n return a === b || (a !== null && b !== null && a.seriesKey === b.seriesKey && a.index === b.index);\n}\n\nconst SELECT_KEYS = ['Enter', ' '];\n\n/**\n * The whole interaction of a chart as one pure function (REQ-140): current item plus event gives\n * the next item. Adapters wire DOM events to it and keep the result; they decide nothing.\n */\nexport function reduceInteraction(\n geometry: Geometry,\n current: ActiveItem | null,\n event: InteractionEvent,\n): InteractionResult {\n const settle = (active: ActiveItem | null, extra: Partial<InteractionResult> = {}): InteractionResult => ({\n active,\n changed: !sameActive(current, active),\n handled: true,\n ...extra,\n });\n\n switch (event.type) {\n case 'pointer':\n case 'click': {\n const active = resolveActive(geometry, toSvgPoint(event.client, event.box, geometry.viewBox), event.kind);\n return event.type === 'click' && active ? settle(active, { selected: active }) : settle(active);\n }\n case 'leave':\n case 'blur':\n return settle(null);\n case 'focus':\n return settle(current ?? stepActive(geometry, null, 'Home') ?? null);\n case 'key': {\n if (SELECT_KEYS.includes(event.key)) {\n return current ? settle(current, { selected: current }) : { active: null, changed: false, handled: false };\n }\n const next = stepActive(geometry, current, event.key);\n return next === undefined ? { active: current, changed: false, handled: false } : settle(next);\n }\n }\n}\n","import type { Datum } from '../../types';\n\n/**\n * Demo dataset of `BulletChart` (REQ-093), in the default field names of Data Model §2.9.\n * Frozen and part of the stable surface (Data Model §4).\n */\nexport const BULLET_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { title: 'Revenue', actual: 72, target: 80 },\n { title: 'Profit', actual: 58, target: 65 },\n { title: 'New users', actual: 86, target: 75 },\n { title: 'Retention', actual: 41, target: 60 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { BulletChartProps, ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { finite, inset, rectPath, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { BULLET_CHART_DEMO } from './demo';\n\nconst CHART = 'BulletChart';\nconst PLOT_INSET = 6;\nconst MAX_BAR = 12;\n/** How far the target marker reaches past the bar, above and below. */\nconst MARKER_REACH = 3;\n\n/** Holds a value to the 0-100 track, warning when it had to (Data Model §2.9). */\nfunction clampPercent(value: number, property: string, row: number): number {\n if (value >= 0 && value <= 100) return value;\n warnValue(CHART, property, `Row ${row} is ${value}; it is drawn at the nearest end of 0-100.`);\n return Math.min(Math.max(value, 0), 100);\n}\n\nfunction buildBulletChart(props: BulletChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? BULLET_CHART_DEMO;\n const titleKey = usesDemo ? 'title' : (props.titleKey ?? 'title');\n const actualKey = usesDemo ? 'actual' : (props.actualKey ?? 'actual');\n const targetKey = usesDemo ? 'target' : (props.targetKey ?? 'target');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n const rows = data.map((datum, index) => ({\n index,\n datum,\n title: formatCategory(read(titleKey, datum, index), locale),\n actual: finite(read(actualKey, datum, index)),\n target: finite(read(targetKey, datum, index)),\n }));\n const actualName = accessorName(actualKey, 'actual');\n const targetName = accessorName(targetKey, 'target');\n\n const base = modelBase(CHART, props, context, 'Bullet chart', {\n columns: [accessorName(titleKey, 'title'), actualName, targetName],\n rows: rows.map((r) => [r.title, formatValue(r.actual, locale, numberFormat), formatValue(r.target, locale, numberFormat)]),\n });\n\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = inset(card.area, PLOT_INSET);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (rows.length === 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, true);\n }\n\n const rowHeight = plot.height / rows.length;\n const barHeight = Math.min(MAX_BAR, rowHeight * 0.35);\n const at = (percent: number) => plot.x + (percent / 100) * plot.width;\n let met = 0;\n\n for (const row of rows) {\n const top = plot.y + row.index * rowHeight;\n const barY = top + rowHeight - barHeight - Math.min(MARKER_REACH + 1, rowHeight * 0.1);\n const baseline = barY - 5;\n labels.push({ x: plot.x, y: baseline, text: row.title, kind: 'tick', part: 'text', anchor: 'start' });\n strokes.push({ d: rectPath({ x: plot.x, y: barY, width: plot.width, height: barHeight }), role: 'ornament', part: 'rule' });\n\n if (row.actual === undefined) {\n warnValue(CHART, actualName, `Row ${row.index} has no finite value; its bar is omitted.`);\n } else {\n const actual = clampPercent(row.actual, actualName, row.index);\n const bar = { x: plot.x, y: barY, width: at(actual) - plot.x, height: barHeight };\n if (bar.width > 0) strokes.push({ d: rectPath(bar), role: 'encoding', part: 'ink', tone: 2 });\n labels.push({ x: plot.x + plot.width, y: baseline, text: formatNumber(row.actual, locale, numberFormat), kind: 'tick', part: 'axis', anchor: 'end' });\n hitAreas.push({ seriesKey: actualName, index: row.index, datum: row.datum, value: row.actual, x: at(actual), y: barY + barHeight / 2, box: bar });\n if (row.target !== undefined && row.actual >= row.target) met += 1;\n }\n\n if (row.target === undefined) {\n warnValue(CHART, targetName, `Row ${row.index} has no finite target; its marker is omitted.`);\n } else {\n const x = at(clampPercent(row.target, targetName, row.index));\n strokes.push({ d: `M${x},${barY - MARKER_REACH}V${barY + barHeight + MARKER_REACH}`, role: 'encoding', part: 'ink', weight: 2 });\n }\n }\n\n const description =\n props.description ?? `${base.name}. Bullet chart of ${rows.length} targets on a 0 to 100 scale; ${met} of ${rows.length} reach their target.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `BulletChart` recipe (REQ-069): a bar to the actual value and a marker at the target, on 0-100. */\nexport const bulletChart: ChartRecipe<BulletChartProps> = /* @__PURE__ */ Object.freeze({\n name: CHART,\n build: buildBulletChart,\n});\n","import type { Datum } from '../../types';\n\n/**\n * Demo dataset of `PyramidChart` (REQ-093), in the default field names of Data Model §2.9.\n * Frozen and part of the stable surface (Data Model §4).\n */\nexport const PYRAMID_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { label: 'Leads', width: 18 },\n { label: 'Managers', width: 42 },\n { label: 'Specialists', width: 70 },\n { label: 'Staff', width: 100 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, HitArea, PyramidChartProps, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { finite, inset, rectPath, toneLevel, toneOf, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { PYRAMID_CHART_DEMO } from './demo';\n\nconst CHART = 'PyramidChart';\nconst PLOT_INSET = 6;\n/** Room at the left for the tier labels and at the right for the values. */\nconst LABEL_COLUMN = 72;\nconst VALUE_COLUMN = 48;\nconst TIER_GAP = 2;\n\nfunction buildPyramidChart(props: PyramidChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? PYRAMID_CHART_DEMO;\n const labelKey = usesDemo ? 'label' : (props.labelKey ?? 'label');\n const widthKey = usesDemo ? 'width' : (props.widthKey ?? 'width');\n const toneKey = usesDemo ? undefined : props.toneKey;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const widthName = accessorName(widthKey, 'width');\n const toneName = toneKey === undefined ? undefined : accessorName(toneKey, 'tone');\n\n const rows = data.map((datum, index) => ({\n index,\n datum,\n label: formatCategory(read(labelKey, datum, index), locale),\n width: finite(read(widthKey, datum, index)),\n tone: toneKey === undefined ? undefined : finite(read(toneKey, datum, index)),\n }));\n\n const base = modelBase(CHART, props, context, 'Pyramid chart', {\n columns: [accessorName(labelKey, 'label'), widthName, ...(toneName ? [toneName] : [])],\n rows: rows.map((r) => [\n r.label,\n formatValue(r.width, locale, numberFormat),\n ...(toneName ? [formatValue(r.tone, locale, undefined)] : []),\n ]),\n });\n\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = inset(card.area, PLOT_INSET);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (rows.length === 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, true);\n }\n\n const track = { x: plot.x + LABEL_COLUMN, width: Math.max(plot.width - LABEL_COLUMN - VALUE_COLUMN, 1) };\n const centre = track.x + track.width / 2;\n const tierHeight = plot.height / rows.length;\n let previous = Number.NEGATIVE_INFINITY;\n let monotonic = true;\n\n for (const row of rows) {\n const top = plot.y + row.index * tierHeight;\n const baseline = top + tierHeight / 2 + 4;\n labels.push({ x: plot.x, y: baseline, text: row.label, kind: 'tick', part: 'text', anchor: 'start' });\n if (row.width === undefined) {\n warnValue(CHART, widthName, `Tier ${row.index} has no finite width; it is omitted.`);\n continue;\n }\n if (row.width < previous) monotonic = false;\n previous = row.width;\n const percent = Math.min(Math.max(row.width, 0), 100);\n if (percent !== row.width) warnValue(CHART, widthName, `Tier ${row.index} is ${row.width}; it is drawn at the nearest end of 0-100.`);\n\n const width = (percent / 100) * track.width;\n const tier = { x: centre - width / 2, y: top + TIER_GAP / 2, width, height: Math.max(tierHeight - TIER_GAP, 0) };\n // Without a toneKey the tone repeats the width, which the tier's length and label already say.\n const tone = row.tone === undefined ? toneOf(percent / 100) : toneLevel(row.tone);\n if (row.tone !== undefined && tone !== row.tone) {\n warnValue(CHART, toneName ?? 'tone', `Tier ${row.index} has tone ${row.tone}; it is drawn at level ${tone}.`);\n }\n if (width > 0) strokes.push({ d: rectPath(tier), role: 'encoding', part: 'ink', ...(tone > 0 ? { tone } : {}) });\n const right = plot.x + plot.width;\n labels.push({ x: right, y: baseline, text: formatNumber(row.width, locale, numberFormat), kind: 'tick', part: 'axis', anchor: 'end' });\n // A consumer tone is information of its own, so it is printed as well as hatched (REQ-124).\n if (row.tone !== undefined) {\n labels.push({ x: right, y: baseline + 11, text: `tone ${tone}`, kind: 'tick', part: 'axis', anchor: 'end' });\n }\n hitAreas.push({ seriesKey: widthName, index: row.index, datum: row.datum, value: row.width, x: centre, y: tier.y + tier.height / 2, box: tier });\n }\n\n if (!monotonic) warnValue(CHART, widthName, 'The widths do not increase from the top tier down; the pyramid is drawn as given.');\n\n const description =\n props.description ?? `${base.name}. Pyramid of ${rows.length} tiers, from ${rows[0]?.label} at the top to ${rows[rows.length - 1]?.label} at the base; width on a 0 to 100 scale.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `PyramidChart` recipe (REQ-070): stacked, centred tiers whose width encodes the value. */\nexport const pyramidChart: ChartRecipe<PyramidChartProps> = /* @__PURE__ */ Object.freeze({\n name: CHART,\n build: buildPyramidChart,\n});\n","import type { Datum } from '../../types';\n\n/**\n * Demo dataset of `HeatmapChart` (REQ-093), in the default field names of Data Model §2.4.\n * Frozen and part of the stable surface (Data Model §4).\n */\nexport const HEATMAP_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { label: 'Mon', values: Object.freeze([12, 34, 58, 71, 66, 40]) },\n { label: 'Tue', values: Object.freeze([18, 42, 77, 88, 70, 35]) },\n { label: 'Wed', values: Object.freeze([9, 38, 64, 93, 81, 47]) },\n { label: 'Thu', values: Object.freeze([15, 29, 55, 68, 59, 31]) },\n { label: 'Fri', values: Object.freeze([6, 21, 43, 49, 37, 14]) },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, HeatmapChartProps, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { TONE_SCALE, finite, inset, rectPath, toneOf, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { HEATMAP_CHART_DEMO } from './demo';\n\nconst CHART = 'HeatmapChart';\nconst PLOT_INSET = 6;\n/** Room at the left for the row labels. */\nconst LABEL_COLUMN = 40;\nconst CELL_GAP = 2;\n/** Room above the cells for the column labels, when there are any. */\nconst HEADER_BAND = 14;\n/** Advance of one tabular digit at the 9.5 px tick size, with room to spare. */\nconst DIGIT_WIDTH = 5.5;\nconst LINE_HEIGHT = 12;\n\nfunction buildHeatmapChart(props: HeatmapChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? HEATMAP_CHART_DEMO;\n const labelKey = usesDemo ? 'label' : (props.labelKey ?? 'label');\n const valuesKey = usesDemo ? 'values' : (props.valuesKey ?? 'values');\n const scaleMax = props.scaleMax !== undefined && props.scaleMax > 0 ? props.scaleMax : 100;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n const rows = data.map((datum, index) => {\n const raw = read(valuesKey, datum, index);\n return {\n index,\n datum,\n label: formatCategory(read(labelKey, datum, index), locale),\n values: Array.isArray(raw) ? (raw as readonly unknown[]).map(finite) : undefined,\n };\n });\n // A row without an array of values is drawn blank and warned; it does not set the width.\n const lengths = rows.flatMap((r) => (r.values ? [r.values.length] : []));\n // Rows of unequal length use the shortest (Data Model §2.4).\n const columnCount = lengths.length > 0 ? lengths.reduce((a, b) => Math.min(a, b)) : 0;\n const named = props.columnLabels ?? [];\n const columns = Array.from({ length: columnCount }, (_, i) => named[i] ?? `#${i + 1}`);\n\n const base = modelBase(CHART, props, context, 'Heatmap', {\n columns: [accessorName(labelKey, 'label'), ...columns],\n rows: rows.map((r) => [r.label, ...columns.map((_, c) => formatValue(r.values?.[c], locale, numberFormat))]),\n });\n\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = inset(card.area, PLOT_INSET);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const valuesName = accessorName(valuesKey, 'values');\n for (const row of rows) {\n if (!row.values) warnValue(CHART, valuesName, `Row ${row.index} has no array of values; it is left blank.`);\n }\n if (lengths.some((length) => length !== columnCount)) {\n warnValue(CHART, valuesName, `Rows have ${columnCount} to ${lengths.reduce((a, b) => Math.max(a, b))} values; the first ${columnCount} of each are drawn.`);\n }\n if (named.length > columnCount && columnCount > 0) {\n warnValue(CHART, 'columnLabels', `${named.length} column labels for ${columnCount} columns; the extra ones are ignored.`);\n }\n const drawable = rows.some((r) => r.values?.slice(0, columnCount).some((v) => v !== undefined));\n if (!drawable) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, rows.length === 0);\n }\n\n // Named columns get a header band above the cells (delta-006); unnamed ones draw none.\n const header = named.length > 0 ? HEADER_BAND : 0;\n const cellWidth = (plot.width - LABEL_COLUMN) / columnCount;\n const cellHeight = (plot.height - header) / rows.length;\n if (header > 0) {\n columns.forEach((name, c) => {\n labels.push({ x: plot.x + LABEL_COLUMN + (c + 0.5) * cellWidth, y: plot.y + 10, text: name, kind: 'tick', part: 'axis', anchor: 'middle' });\n });\n }\n // When the widest value cannot be printed inside a cell, the value is carried by the cell's\n // size instead, as the activity grid carries its level, so it never overprints and still\n // survives `precision` mode (REQ-124).\n let widest = 0;\n for (const r of rows) for (const v of r.values ?? []) if (v !== undefined) widest = Math.max(widest, formatNumber(v, locale, numberFormat).length);\n const printed = widest * DIGIT_WIDTH <= cellWidth - CELL_GAP - 2 && cellHeight >= LINE_HEIGHT;\n let omitted = 0;\n\n for (const row of rows) {\n const top = plot.y + header + row.index * cellHeight;\n labels.push({ x: plot.x, y: top + cellHeight / 2 + 4, text: row.label, kind: 'tick', part: 'text', anchor: 'start' });\n for (let c = 0; c < columnCount; c += 1) {\n const value = row.values?.[c];\n const cell = inset({ x: plot.x + LABEL_COLUMN + c * cellWidth, y: top, width: cellWidth, height: cellHeight }, CELL_GAP / 2);\n const cx = cell.x + cell.width / 2;\n const cy = cell.y + cell.height / 2;\n if (value === undefined) {\n omitted += 1;\n if (printed) labels.push({ x: cx, y: cy + 4, text: '—', kind: 'tick', part: 'axis', anchor: 'middle' });\n continue;\n }\n const tone = toneOf(value / scaleMax);\n const scale = printed ? 1 : TONE_SCALE[tone];\n const drawn = { x: cx - (cell.width * scale) / 2, y: cy - (cell.height * scale) / 2, width: cell.width * scale, height: cell.height * scale };\n strokes.push({ d: rectPath(drawn), role: 'encoding', part: 'ink', ...(tone > 0 ? { tone } : {}) });\n // The tone is quantised; the printed value, or the cell's size, carries it too (REQ-124).\n if (printed) labels.push({ x: cx, y: cy + 4, text: formatNumber(value, locale, numberFormat), kind: 'tick', part: 'text', anchor: 'middle' });\n hitAreas.push({ seriesKey: columns[c] as string, index: row.index, datum: row.datum, value, x: cx, y: cy, box: cell, cell: { column: c, row: row.index } });\n }\n }\n if (omitted > 0) warnValue(CHART, valuesName, `${omitted} cells have no finite value and are left blank.`);\n\n let low = Number.POSITIVE_INFINITY;\n let high = Number.NEGATIVE_INFINITY;\n for (const h of hitAreas) {\n low = Math.min(low, h.value);\n high = Math.max(high, h.value);\n }\n const description =\n props.description ??\n `${base.name}. Heatmap of ${rows.length} rows by ${columnCount} columns, toned against ${formatNumber(scaleMax, locale, numberFormat)}; values range from ${formatNumber(low, locale, numberFormat)} to ${formatNumber(high, locale, numberFormat)}${printed ? '' : '; values are shown by cell size'}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `HeatmapChart` recipe (REQ-084): labelled rows of cells, toned by value and printed. */\nexport const heatmapChart: ChartRecipe<HeatmapChartProps> = /* @__PURE__ */ Object.freeze({\n name: CHART,\n build: buildHeatmapChart,\n});\n","import type { Datum } from '../../types';\n\n/**\n * Demo dataset of `TreemapChart` (REQ-093), in the field names of Data Model §2.5; it fills\n * the default 6 × 4 grid exactly. Frozen and part of the stable surface (Data Model §4).\n */\nexport const TREEMAP_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { label: 'Search', share: 48, cols: 3, rows: 4 },\n { label: 'Direct', share: 26, cols: 3, rows: 2 },\n { label: 'Social', share: 17, cols: 2, rows: 2 },\n { label: 'Email', share: 9, cols: 1, rows: 2 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke, TextLabel, TreemapChartProps } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { finite, inset, rectPath, toneLevel, toneOf, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { TREEMAP_CHART_DEMO } from './demo';\n\nconst CHART = 'TreemapChart';\nconst PLOT_INSET = 6;\nconst TILE_GAP = 3;\nconst TEXT_INSET = 6;\nconst LINE = 13;\n/** The grid a treemap declares when `columns` and `rows` are not given. */\nconst DEFAULT_COLUMNS = 6;\nconst DEFAULT_ROWS = 4;\n\nconst wholeCount = (raw: unknown): number | undefined => {\n const value = finite(raw);\n return value !== undefined && Number.isInteger(value) && value > 0 ? value : undefined;\n};\n\n/**\n * First-fit, row-major placement (Data Model §2.5): each tile takes the first cell, reading\n * the grid left to right and top to bottom, where its `cols × rows` block is free.\n */\nfunction place(taken: boolean[][], cols: number, rows: number): { column: number; row: number } | undefined {\n const gridRows = taken.length;\n const gridColumns = taken[0]?.length ?? 0;\n for (let row = 0; row + rows <= gridRows; row += 1) {\n for (let column = 0; column + cols <= gridColumns; column += 1) {\n let free = true;\n for (let r = row; r < row + rows && free; r += 1) {\n for (let c = column; c < column + cols && free; c += 1) free = !taken[r]?.[c];\n }\n if (!free) continue;\n for (let r = row; r < row + rows; r += 1) for (let c = column; c < column + cols; c += 1) (taken[r] as boolean[])[c] = true;\n return { column, row };\n }\n }\n return undefined;\n}\n\nfunction buildTreemapChart(props: TreemapChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? TREEMAP_CHART_DEMO;\n const labelKey = usesDemo ? 'label' : (props.labelKey ?? 'label');\n const shareKey = usesDemo ? 'share' : (props.shareKey ?? 'share');\n const gridColumns = wholeCount(props.columns) ?? DEFAULT_COLUMNS;\n const gridRows = wholeCount(props.rows) ?? DEFAULT_ROWS;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const shareName = accessorName(shareKey, 'share');\n\n const tiles = data.map((datum, index) => ({\n index,\n datum,\n label: formatCategory(read(labelKey, datum, index), locale),\n share: finite(read(shareKey, datum, index)),\n cols: wholeCount(datum.cols),\n rows: wholeCount(datum.rows),\n tone: finite(datum.tone),\n }));\n const shareText = (share: number | undefined) => (share === undefined ? '—' : `${formatNumber(share, locale, numberFormat)}%`);\n\n const base = modelBase(CHART, props, context, 'Treemap', {\n columns: [accessorName(labelKey, 'label'), shareName],\n rows: tiles.map((t) => [t.label, shareText(t.share)]),\n });\n\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = inset(card.area, PLOT_INSET);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const taken = Array.from({ length: gridRows }, () => Array<boolean>(gridColumns).fill(false));\n const cellWidth = plot.width / gridColumns;\n const cellHeight = plot.height / gridRows;\n const placed: (typeof tiles)[number][] = [];\n\n for (const tile of tiles) {\n if (tile.cols === undefined || tile.rows === undefined) {\n warnValue(CHART, 'cols', `Tile ${tile.index} needs whole, positive cols and rows; it is omitted.`);\n continue;\n }\n const spot = place(taken, tile.cols, tile.rows);\n if (!spot) {\n warnValue(CHART, 'cols', `Tile ${tile.index} (${tile.cols} × ${tile.rows}) no longer fits the ${gridColumns} × ${gridRows} grid; it is omitted.`);\n continue;\n }\n // The pointer answers anywhere in the tile's block; the drawn tile leaves a gap around it.\n const box = { x: plot.x + spot.column * cellWidth, y: plot.y + spot.row * cellHeight, width: tile.cols * cellWidth, height: tile.rows * cellHeight };\n const drawn = inset(box, TILE_GAP / 2);\n // Without a tone of its own a tile repeats its share, which it also prints.\n const tone = tile.tone === undefined ? toneOf((tile.share ?? 0) / 100) : toneLevel(tile.tone);\n strokes.push({ d: rectPath(drawn), role: 'encoding', part: 'ink', ...(tone > 0 ? { tone } : {}) });\n const x = drawn.x + TEXT_INSET;\n labels.push({ x, y: drawn.y + LINE, text: tile.label, kind: 'tick', part: 'text', anchor: 'start' });\n labels.push({ x, y: drawn.y + 2 * LINE, text: shareText(tile.share), kind: 'tick', part: 'axis', anchor: 'start' });\n // A consumer tone is information of its own, so it is printed as well as hatched (REQ-124).\n if (tile.tone !== undefined) labels.push({ x, y: drawn.y + 3 * LINE, text: `tone ${tone}`, kind: 'tick', part: 'axis', anchor: 'start' });\n placed.push(tile);\n hitAreas.push({ seriesKey: shareName, index: tile.index, datum: tile.datum, value: tile.share ?? 0, x: box.x + box.width / 2, y: box.y + box.height / 2, box });\n }\n\n if (hitAreas.length === 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, tiles.length === 0);\n }\n\n const description =\n props.description ??\n `${base.name}. Treemap of ${hitAreas.length} tiles in a ${gridColumns} by ${gridRows} grid; ${placed.map((t) => `${t.label} ${shareText(t.share)}`).join(', ')}${\n placed.length < tiles.length ? `; ${tiles.length - placed.length} omitted` : ''\n }.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `TreemapChart` recipe (REQ-085): tiles placed first-fit in a declared grid, each labelled with its share. */\nexport const treemapChart: ChartRecipe<TreemapChartProps> = /* @__PURE__ */ Object.freeze({\n name: CHART,\n build: buildTreemapChart,\n});\n","import type { Datum } from '../../types';\n\n/**\n * Demo dataset of `SankeyChart` (REQ-093), in the default field names of Data Model §2.7.\n * Frozen and part of the stable surface (Data Model §4).\n */\nexport const SANKEY_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { source: 'Search', target: 'Visit', value: 48 },\n { source: 'Social', target: 'Visit', value: 27 },\n { source: 'Email', target: 'Visit', value: 15 },\n { source: 'Visit', target: 'Signup', value: 42 },\n { source: 'Visit', target: 'Bounce', value: 48 },\n { source: 'Signup', target: 'Paid', value: 18 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, Datum, HitArea, RecipeContext, SankeyChartProps, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { finite, inset, rectPath, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { SANKEY_CHART_DEMO } from './demo';\n\nconst CHART = 'SankeyChart';\nconst PLOT_INSET = 6;\nconst NODE_WIDTH = 8;\nconst NODE_GAP = 10;\n/** The largest share of the height the gaps of one layer may take. */\nconst MAX_GAP_SHARE = 0.5;\nconst LABEL_GAP = 4;\n\ninterface Flow {\n readonly index: number;\n readonly datum: Datum;\n readonly source: string;\n readonly target: string;\n readonly value: number;\n}\n\ninterface Node {\n readonly name: string;\n layer: number;\n inflow: number;\n outflow: number;\n x: number;\n y: number;\n height: number;\n /** Where the next outgoing and incoming band attach. */\n outCursor: number;\n inCursor: number;\n}\n\n/** True when `to` can already be reached from `from` along the kept flows. */\nfunction reaches(edges: ReadonlyMap<string, readonly string[]>, from: string, to: string): boolean {\n const stack = [from];\n const seen = new Set<string>();\n while (stack.length > 0) {\n const name = stack.pop() as string;\n if (name === to) return true;\n if (seen.has(name)) continue;\n seen.add(name);\n stack.push(...(edges.get(name) ?? []));\n }\n return false;\n}\n\nfunction buildSankeyChart(props: SankeyChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? SANKEY_CHART_DEMO;\n const sourceKey = usesDemo ? 'source' : (props.sourceKey ?? 'source');\n const targetKey = usesDemo ? 'target' : (props.targetKey ?? 'target');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n\n // Flows that cannot be drawn — non-positive, or closing a cycle — are dropped and warned\n // (Data Model §2.7): a band of negative width, or a loop, has no layered drawing.\n const flows: Flow[] = [];\n const edges = new Map<string, string[]>();\n data.forEach((datum, index) => {\n const rawSource = read(sourceKey, datum, index);\n const rawTarget = read(targetKey, datum, index);\n // A flow needs both ends: a missing one (often a mistyped key) is dropped, not named \"—\".\n const missing = rawSource === null || rawSource === undefined ? 'source' : rawTarget === null || rawTarget === undefined ? 'target' : undefined;\n if (missing) {\n warnValue(CHART, accessorName(missing === 'source' ? sourceKey : targetKey, missing), `Flow ${index} has no ${missing}; it is omitted.`);\n return;\n }\n const source = formatCategory(rawSource, locale);\n const target = formatCategory(rawTarget, locale);\n const value = finite(read(valueKey, datum, index));\n if (value === undefined || value <= 0) {\n warnValue(CHART, valueName, `Flow ${index} (${source} → ${target}) is ${String(value ?? 'not finite')}; flows must be positive, so it is omitted.`);\n return;\n }\n if (reaches(edges, target, source)) {\n warnValue(CHART, accessorName(targetKey, 'target'), `Flow ${index} (${source} → ${target}) would close a cycle; it is omitted.`);\n return;\n }\n edges.set(source, [...(edges.get(source) ?? []), target]);\n flows.push({ index, datum, source, target, value });\n });\n\n const base = modelBase(CHART, props, context, 'Sankey diagram', {\n columns: ['flow', valueName],\n rows: flows.map((f) => [`${f.source} → ${f.target}`, formatNumber(f.value, locale, numberFormat)]),\n });\n\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = inset(card.area, PLOT_INSET);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (flows.length === 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n // Nodes in order of first appearance; each sits one layer past its furthest source.\n const nodes = new Map<string, Node>();\n const node = (name: string): Node => {\n let found = nodes.get(name);\n if (!found) {\n found = { name, layer: 0, inflow: 0, outflow: 0, x: 0, y: 0, height: 0, outCursor: 0, inCursor: 0 };\n nodes.set(name, found);\n }\n return found;\n };\n for (const flow of flows) {\n node(flow.source).outflow += flow.value;\n node(flow.target).inflow += flow.value;\n }\n // The graph is acyclic, so relaxing every flow once per node settles the longest paths.\n for (let pass = 0; pass < nodes.size; pass += 1) {\n for (const flow of flows) {\n const target = node(flow.target);\n target.layer = Math.max(target.layer, node(flow.source).layer + 1);\n }\n }\n\n const layers: Node[][] = [];\n for (const n of nodes.values()) (layers[n.layer] ??= []).push(n);\n const throughput = (n: Node) => Math.max(n.inflow, n.outflow);\n // Gaps between nodes take at most half the height, so a crowded layer still leaves room for\n // its flows; one scale for every layer then lets the fullest layer fill the height.\n const gapOf = (count: number) => (count > 1 ? Math.min(NODE_GAP, (plot.height * MAX_GAP_SHARE) / (count - 1)) : 0);\n // A one-node layer has no gap to narrow, so it is never crowded.\n const crowded = layers.filter((layer) => layer.length > 1 && gapOf(layer.length) < NODE_GAP);\n if (crowded.length > 0) {\n warnValue(CHART, accessorName(targetKey, 'target'), `A layer of ${Math.max(...crowded.map((l) => l.length))} nodes is crowded; its gaps are narrowed to fit.`);\n }\n const scale = layers.reduce(\n (smallest, layer) => Math.min(smallest, (plot.height - (layer.length - 1) * gapOf(layer.length)) / layer.reduce((sum, n) => sum + throughput(n), 0)),\n Number.POSITIVE_INFINITY,\n );\n const step = layers.length > 1 ? (plot.width - NODE_WIDTH) / (layers.length - 1) : 0;\n layers.forEach((layer, index) => {\n const gap = gapOf(layer.length);\n const height = layer.reduce((sum, n) => sum + throughput(n) * scale, 0) + (layer.length - 1) * gap;\n let y = plot.y + (plot.height - height) / 2;\n for (const n of layer) {\n n.x = plot.x + index * step;\n n.y = y;\n n.height = throughput(n) * scale;\n n.outCursor = y;\n n.inCursor = y;\n y += n.height + gap;\n }\n });\n\n flows.forEach((flow, row) => {\n const source = node(flow.source);\n const target = node(flow.target);\n const width = flow.value * scale;\n const x0 = source.x + NODE_WIDTH;\n const x1 = target.x;\n const y0 = source.outCursor;\n const y1 = target.inCursor;\n source.outCursor += width;\n target.inCursor += width;\n const mx = (x0 + x1) / 2;\n const d = `M${x0},${y0}C${mx},${y0},${mx},${y1},${x1},${y1}V${y1 + width}C${mx},${y1 + width},${mx},${y0 + width},${x0},${y0 + width}Z`;\n strokes.push({ d, role: 'encoding', part: 'ink-secondary', tone: 1 });\n hitAreas.push({ seriesKey: valueName, index: row, datum: flow.datum, value: flow.value, x: mx, y: (y0 + y1) / 2 + width / 2 });\n });\n\n const last = layers.length - 1;\n for (const n of nodes.values()) {\n strokes.push({ d: rectPath({ x: n.x, y: n.y, width: NODE_WIDTH, height: n.height }), role: 'encoding', part: 'ink', tone: 3 });\n const end = n.layer === last && last > 0;\n labels.push({\n x: end ? n.x - LABEL_GAP : n.x + NODE_WIDTH + LABEL_GAP,\n y: n.y + n.height / 2 + 4,\n text: `${n.name} ${formatNumber(throughput(n), locale, numberFormat)}`,\n kind: 'tick',\n part: 'text',\n anchor: end ? 'end' : 'start',\n });\n }\n\n // REQ-097: the flow total is not a prop; it is derived as the flow leaving the nodes that\n // receive none, which is everything that enters the diagram.\n const total = [...nodes.values()].filter((n) => n.inflow === 0).reduce((sum, n) => sum + n.outflow, 0);\n const description =\n props.description ??\n `${base.name}. Sankey diagram of ${flows.length} flows between ${nodes.size} nodes in ${layers.length} layers; total flow of ${formatNumber(total, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `SankeyChart` recipe (REQ-086): flow bands between nodes layered by longest path. */\nexport const sankeyChart: ChartRecipe<SankeyChartProps> = /* @__PURE__ */ Object.freeze({\n name: CHART,\n build: buildSankeyChart,\n});\n","import { createPrng } from '../../render/prng';\nimport type { Datum } from '../../types';\nimport { isoDate, parseIsoDate, weekday } from '../shared/dates';\n\n/** The demo's pinned end date: never `today`, so server and client agree (Data Model §4). */\nexport const ACTIVITY_GRID_DEMO_END = '2026-06-30';\n/** The demo's fixed seed, which pins the counts. */\nexport const ACTIVITY_GRID_DEMO_SEED = 1592;\nconst DAYS = 26 * 7;\n\n/**\n * Demo dataset of `ActivityGrid` (REQ-093), the only generated one: 26 weeks ending on\n * {@link ACTIVITY_GRID_DEMO_END}, counts drawn from {@link ACTIVITY_GRID_DEMO_SEED}. It is\n * generated once, at module load, and frozen; the level is quantised here, as a consumer would,\n * because the library never derives it from the count (Data Model §2.8).\n */\nexport const ACTIVITY_GRID_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ (() => {\n const next = createPrng(ACTIVITY_GRID_DEMO_SEED);\n const first = parseIsoDate(ACTIVITY_GRID_DEMO_END) - (DAYS - 1);\n return Array.from({ length: DAYS }, (_, i) => {\n const day = first + i;\n const weekend = weekday(day) === 0 || weekday(day) === 6;\n const r = next();\n const count = Math.floor(r * r * (weekend ? 5 : 14));\n const level = count === 0 ? 0 : count <= 2 ? 1 : count <= 5 ? 2 : count <= 9 ? 3 : 4;\n return Object.freeze({ date: isoDate(day), count, level });\n });\n })(),\n);\n","import type { ActivityGridProps, ChartModel, ChartRecipe, Datum, HitArea, RecipeContext, Stroke, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { finite, inset, rectPath, toneLevel, warnValue } from '../shared/cells';\nimport { isoDate, parseIsoDate } from '../shared/dates';\nimport { accessorName, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { ACTIVITY_GRID_DEMO } from './demo';\n\nconst CHART = 'ActivityGrid';\nconst PLOT_INSET = 6;\n/** Room above the grid for the month labels. */\nconst MONTH_BAND = 14;\nconst DEFAULT_WEEKS = 26;\nconst DAY_MS = 86_400_000;\n/**\n * The side of a cell, as a share of its slot, for each level: the level is carried by size as\n * well as by tone, so it survives `precision` mode, which draws no hatching (REQ-124).\n */\nconst CELL_SCALE: Readonly<Record<ToneLevel, number>> = { 0: 0.4, 1: 0.55, 2: 0.7, 3: 0.85, 4: 1 };\nconst CELL_FILL = 0.86;\n/** Fewest columns between two month labels. */\nconst MONTH_GAP = 3;\n\ninterface Day {\n readonly datum: Datum;\n readonly day: number;\n readonly count: number | undefined;\n readonly level: ToneLevel;\n}\n\nfunction buildActivityGrid(props: ActivityGridProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? ACTIVITY_GRID_DEMO;\n const dateKey = usesDemo ? 'date' : (props.dateKey ?? 'date');\n const countKey = usesDemo ? 'count' : (props.countKey ?? 'count');\n const levelKey = usesDemo ? 'level' : (props.levelKey ?? 'level');\n const weeks = props.weeks !== undefined && Number.isInteger(props.weeks) && props.weeks > 0 ? props.weeks : DEFAULT_WEEKS;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const countName = accessorName(countKey, 'count');\n const levelName = accessorName(levelKey, 'level');\n\n const parsed: Day[] = [];\n data.forEach((datum, index) => {\n const iso = String(read(dateKey, datum, index));\n const day = parseIsoDate(iso);\n // A date that does not exist (2026-02-31) would roll over onto a real one: it is rejected.\n if (Number.isNaN(day) || isoDate(day) !== iso) {\n warnValue(CHART, accessorName(dateKey, 'date'), `Row ${index} (${iso}) is not a calendar date in ISO form; it is omitted.`);\n return;\n }\n const raw = finite(read(levelKey, datum, index));\n const level = raw === undefined ? 0 : toneLevel(raw);\n if (raw !== level) warnValue(CHART, levelName, `Row ${index} has level ${String(raw)}; it is drawn at level ${level}.`);\n parsed.push({ datum, day, count: finite(read(countKey, datum, index)), level });\n });\n // The grid runs forward in time whatever order the rows came in.\n let days = [...parsed].sort((a, b) => a.day - b.day);\n // One cell per day: a repeated date keeps its first row.\n const unique = days.filter((d, i) => i === 0 || d.day !== days[i - 1]?.day);\n if (unique.length < days.length) {\n warnValue(CHART, accessorName(dateKey, 'date'), `${days.length - unique.length} rows repeat a date; the first row of each day is kept.`);\n days = unique;\n }\n // Whole weeks only (Data Model §2.8): the oldest days of a partial week are trimmed.\n const partial = days.length % 7;\n if (partial > 0) {\n warnValue(CHART, 'data', `${days.length} days are not whole weeks; the oldest ${partial} are omitted.`);\n days = days.slice(partial);\n }\n days = days.slice(-weeks * 7);\n // Cells are placed by position, so a missing day shifts every later one off its weekday.\n if (days.some((d, i) => i > 0 && d.day !== (days[i - 1]?.day ?? 0) + 1)) {\n warnValue(CHART, accessorName(dateKey, 'date'), 'The dates are not consecutive; cells are placed by position, one per row.');\n }\n\n const base = modelBase(CHART, props, context, 'Activity grid', {\n columns: [accessorName(dateKey, 'date'), countName, levelName],\n rows: days.map((d) => [isoDate(d.day), formatValue(d.count, locale, numberFormat), String(d.level)]),\n });\n\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = inset(card.area, PLOT_INSET);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (days.length === 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const columns = days.length / 7;\n const slot = Math.min(plot.width / columns, (plot.height - MONTH_BAND) / 7);\n const top = plot.y + MONTH_BAND;\n const month = new Intl.DateTimeFormat(locale, { month: 'short', timeZone: 'UTC' });\n // A month label names the first column that starts in it; two closer than MONTH_GAP columns\n // would collide, so a leading partial month gives way to the next, and any other newcomer waits.\n const months: { column: number; name: string }[] = [];\n\n days.forEach((d, index) => {\n const column = Math.floor(index / 7);\n const row = index % 7;\n if (row === 0) {\n const name = month.format(new Date(d.day * DAY_MS));\n const last = months.at(-1);\n if (name !== last?.name) {\n if (last && column - last.column < MONTH_GAP) {\n if (months.length === 1) months[0] = { column, name };\n } else {\n months.push({ column, name });\n }\n }\n }\n const side = slot * CELL_FILL * CELL_SCALE[d.level];\n const cx = plot.x + column * slot + slot / 2;\n const cy = top + row * slot + slot / 2;\n const cell = { x: cx - side / 2, y: cy - side / 2, width: side, height: side };\n strokes.push({ d: rectPath(cell), role: 'encoding', part: 'ink', ...(d.level > 0 ? { tone: d.level } : {}) });\n hitAreas.push({ seriesKey: countName, index, datum: d.datum, value: d.count ?? 0, x: cx, y: cy, box: cell, cell: { column, row } });\n });\n\n for (const { column, name } of months) {\n labels.push({ x: plot.x + column * slot, y: plot.y + 10, text: name, kind: 'tick', part: 'axis', anchor: 'start' });\n }\n\n const total = days.reduce((sum, d) => sum + (d.count ?? 0), 0);\n const active = days.filter((d) => d.level > 0).length;\n const description =\n props.description ??\n `${base.name}. Activity grid of ${columns} weeks, ${isoDate(days[0]!.day)} to ${isoDate(days[days.length - 1]!.day)}; ${formatNumber(total, locale, numberFormat)} in total, active on ${active} of ${days.length} days.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `ActivityGrid` recipe (REQ-087): one cell per day, a column per week, sized and toned by level. */\nexport const activityGrid: ChartRecipe<ActivityGridProps> = /* @__PURE__ */ Object.freeze({\n name: CHART,\n build: buildActivityGrid,\n});\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `StepChart` (REQ-093): a price tier over the year. Frozen (Data Model §4). */\nexport const STEP_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 'Jan', value: 12 },\n { x: 'Feb', value: 12 },\n { x: 'Mar', value: 18 },\n { x: 'Apr', value: 18 },\n { x: 'May', value: 15 },\n { x: 'Jun', value: 24 },\n { x: 'Jul', value: 24 },\n { x: 'Aug', value: 30 },\n ].map((row) => Object.freeze(row)),\n);\n","import { curveStep, curveStepAfter, curveStepBefore, line, type CurveFactory } from 'd3-shape';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, HitArea, RecipeContext, StepChartProps, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, categoryAxis, categoryLabels, checkVolume, readSeries, seriesValues, valueAxis, type SeriesPoint } from '../shared/cartesian';\nimport { warnValue } from '../shared/cells';\nimport { accessorName, circlePath, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { STEP_CHART_DEMO } from './demo';\n\nconst CHART = 'StepChart';\nconst HEIGHTEN_RADIUS = 3.5;\nconst STEPS: Readonly<Record<NonNullable<StepChartProps['step']>, CurveFactory>> = {\n after: curveStepAfter,\n before: curveStepBefore,\n middle: curveStep,\n};\n\nfunction buildStepChart(props: StepChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? STEP_CHART_DEMO;\n const xKey = usesDemo ? 'x' : (props.xKey ?? 'x');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n const series = readSeries(data, valueKey, 'value');\n checkVolume(CHART, [series]);\n const xName = accessorName(xKey, 'x');\n const xValues = data.map((datum, index) => read(xKey, datum, index));\n const xLabels = xValues.map((value) => formatCategory(value, locale));\n\n const base = modelBase(CHART, props, context, 'Step chart', {\n columns: [xName, series.key],\n rows: data.map((_, i) => [xLabels[i] ?? '', formatValue(series.points[i]?.value, locale, numberFormat)]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = cartesianPlot(card.area);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (series.missing > 0 && data.length > 0) warnValue(CHART, series.key, `${series.missing} of ${data.length} values are not finite; the steps skip them.`);\n const range = extent(seriesValues([series]));\n if (data.length === 0 || range === undefined) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const axis = valueAxis(plot, range, { chart: CHART, property: series.key, padding: context.domainPadding, locale, numberFormat });\n const y = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const xAt = categoryAxis(xValues, plot, { chart: CHART, property: xName, padding: context.domainPadding }).at;\n\n const d = line<SeriesPoint>()\n .defined((p) => p.value !== undefined)\n .x((p) => xAt(p.index))\n .y((p) => y(p.value ?? 0))\n .curve(STEPS[props.step ?? 'after'])(series.points);\n if (d) strokes.push({ d, role: 'encoding', part: 'ink' });\n\n for (const p of series.points) {\n if (p.value === undefined) continue;\n hitAreas.push({ seriesKey: series.key, index: p.index, datum: p.datum, value: p.value, x: xAt(p.index), y: y(p.value) });\n }\n const live = hitAreas.at(-1);\n if (live) {\n const mark = circlePath(live.x, live.y, HEIGHTEN_RADIUS);\n strokes.push({ d: mark, role: 'encoding', part: 'heighten', paint: 'fill' });\n strokes.push({ d: mark, role: 'encoding', part: 'ink', paint: 'stroke' });\n }\n labels.push(...categoryLabels(xLabels, xAt, card.area, plot));\n\n const description =\n props.description ??\n `${base.name}. Step chart of ${data.length} ${xName} values, stepping ${props.step ?? 'after'} each point; ${series.key} ranges from ${formatNumber(range[0], locale, numberFormat)} to ${formatNumber(range[1], locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `StepChart` recipe (REQ-061): a series drawn as exact steps. */\nexport const stepChart: ChartRecipe<StepChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildStepChart });\n","import { curveLinear, curveMonotoneX, curveNatural, curveStepAfter, type CurveFactory } from 'd3-shape';\nimport type { LineCurve } from '../../types';\n\n/** The curves a line or an area may take (API Spec §5.1: `monotone` by default). */\nexport const CURVES: Readonly<Record<LineCurve, CurveFactory>> = {\n monotone: curveMonotoneX,\n linear: curveLinear,\n natural: curveNatural,\n step: curveStepAfter,\n};\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `SparklineRows` (REQ-093): service health, one row each (delta-008). Frozen. */\nexport const SPARKLINE_ROWS_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { name: 'API', readout: '99.9%', points: Object.freeze([98, 99, 99, 97, 99, 100, 99, 100]) },\n { name: 'Queue', points: Object.freeze([12, 18, 15, 22, 19, 25, 21, 17]) },\n { name: 'Cache', readout: '84%', points: Object.freeze([70, 72, 78, 75, 80, 83, 81, 84]) },\n { name: 'Search', points: Object.freeze([240, 220, 260, 210, 190, 205, 180, 170]) },\n ].map((row) => Object.freeze(row)),\n);\n","import { line } from 'd3-shape';\nimport type { ChartModel, ChartRecipe, Datum, HitArea, RecipeContext, SparklineRowsProps, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { checkCount } from '../shared/cartesian';\nimport { finite, inset, warnValue } from '../shared/cells';\nimport { CURVES } from '../shared/curves';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { SPARKLINE_ROWS_DEMO } from './demo';\n\nconst CHART = 'SparklineRows';\nconst PLOT_INSET = 6;\nconst NAME_COLUMN = 64;\nconst READOUT_COLUMN = 52;\n/** Room above and below each sparkline inside its row. */\nconst ROW_PAD = 4;\n\n/** A point's value: through `pointKey`, else the point itself when a number, else its `value`. */\nfunction pointValue(point: unknown, index: number, pointKey: SparklineRowsProps['pointKey']): number | undefined {\n if (pointKey !== undefined) return typeof point === 'object' && point !== null ? finite(read(pointKey, point as Datum, index)) : undefined;\n if (typeof point === 'number') return finite(point);\n return typeof point === 'object' && point !== null ? finite((point as Datum).value) : undefined;\n}\n\nfunction buildSparklineRows(props: SparklineRowsProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const all = props.data ?? SPARKLINE_ROWS_DEMO;\n const data = props.rows !== undefined && Number.isInteger(props.rows) && props.rows >= 0 ? all.slice(0, props.rows) : all;\n if (props.rows !== undefined && !(Number.isInteger(props.rows) && props.rows >= 0)) warnValue(CHART, 'rows', `${String(props.rows)} is not a whole number of rows ≥ 0; every row is shown.`);\n const nameKey = usesDemo ? 'name' : (props.nameKey ?? 'name');\n const readoutKey = usesDemo ? 'readout' : (props.readoutKey ?? 'readout');\n const seriesKey = usesDemo ? 'points' : (props.seriesKey ?? 'points');\n const pointKey = usesDemo ? undefined : props.pointKey;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const readoutName = accessorName(readoutKey, 'readout');\n\n const rows = data.map((datum, index) => {\n const raw = read(seriesKey, datum, index);\n const points = Array.isArray(raw) ? (raw as readonly unknown[]).map((p, i) => pointValue(p, i, pointKey)) : [];\n const values = points.flatMap((v) => (v === undefined ? [] : [v]));\n const given = read(readoutKey, datum, index);\n const last = [...points].reverse().find((v) => v !== undefined);\n return {\n index,\n datum,\n name: formatCategory(read(nameKey, datum, index), locale),\n points,\n values,\n last,\n readout: given !== undefined && given !== null ? formatValue(given, locale, numberFormat) : last === undefined ? '—' : formatNumber(last, locale, numberFormat),\n };\n });\n for (const row of rows) checkCount(CHART, row.name, row.points.length);\n\n const base = modelBase(CHART, props, context, 'Sparkline rows', {\n columns: [accessorName(nameKey, 'name'), readoutName],\n rows: rows.map((r) => [r.name, r.readout]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = inset(card.area, PLOT_INSET);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (rows.length === 0 || rows.every((r) => r.values.length === 0)) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, rows.length === 0);\n }\n\n const rowHeight = plot.height / rows.length;\n const longest = Math.max(...rows.map((r) => r.points.length));\n const lineX = plot.x + NAME_COLUMN;\n const lineWidth = Math.max(plot.width - NAME_COLUMN - READOUT_COLUMN, 1);\n const xAt = (i: number) => (longest > 1 ? lineX + (i / (longest - 1)) * lineWidth : lineX + lineWidth / 2);\n\n for (const row of rows) {\n const band = { x: plot.x, y: plot.y + row.index * rowHeight, width: plot.width, height: rowHeight };\n const baseline = band.y + rowHeight / 2 + 4;\n // The name and the readout are printed; the sparkline is the shape of the series (REQ-124).\n labels.push({ x: plot.x, y: baseline, text: row.name, kind: 'tick', part: 'text', anchor: 'start' });\n labels.push({ x: plot.x + plot.width, y: baseline, text: row.readout, kind: 'tick', part: 'text', anchor: 'end' });\n if (row.values.length === 0) {\n warnValue(CHART, accessorName(seriesKey, 'points'), `Row ${row.index} (${row.name}) has no finite points; its sparkline is omitted.`);\n continue;\n }\n // Each row scales to its own range: the sparkline shows shape, the readout the value.\n const low = Math.min(...row.values);\n const high = Math.max(...row.values);\n const top = band.y + ROW_PAD;\n const span = Math.max(rowHeight - 2 * ROW_PAD, 1);\n const yAt = (v: number) => (high === low ? top + span / 2 : top + span - ((v - low) / (high - low)) * span);\n const indexed = row.points.map((value, i) => ({ value, i }));\n const d = line<(typeof indexed)[number]>().defined((p) => p.value !== undefined).x((p) => xAt(p.i)).y((p) => yAt(p.value ?? 0)).curve(CURVES.monotone)(indexed);\n if (d) strokes.push({ d, role: 'encoding', part: 'ink' });\n const lastIndex = row.points.lastIndexOf(row.last);\n hitAreas.push({ seriesKey: readoutName, index: row.index, datum: row.datum as Datum, value: row.last ?? 0, x: xAt(lastIndex), y: yAt(row.last ?? 0), box: band });\n }\n\n const description = props.description ?? `${base.name}. ${rows.length} rows: ${rows.map((r) => `${r.name} ${r.readout}`).join(', ')}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `SparklineRows` recipe (REQ-062): one row per series — name, sparkline, printed readout. */\nexport const sparklineRows: ChartRecipe<SparklineRowsProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildSparklineRows });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `KpiCard` (REQ-093): daily orders over two weeks. Frozen (Data Model §4). */\nexport const KPI_CARD_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [118, 124, 121, 132, 140, 136, 129, 142, 151, 147, 155, 162, 158, 171].map((value) => Object.freeze({ value })),\n);\n\nexport const KPI_CARD_DEMO_PROPS = /* @__PURE__ */ Object.freeze({ metric: 'orders per day', delta: 8.2 } as const);\n","import { area, line } from 'd3-shape';\nimport { linearScale } from '../../scales/scales';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, HitArea, KpiCardProps, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { checkVolume, readSeries, seriesValues, type SeriesPoint } from '../shared/cartesian';\nimport { inset, warnValue } from '../shared/cells';\nimport { CURVES } from '../shared/curves';\nimport { accessorName, formatNumber, formatValue } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { KPI_CARD_DEMO, KPI_CARD_DEMO_PROPS } from './demo';\n\nconst CHART = 'KpiCard';\nconst PLOT_INSET = 6;\n/** The row at the top of the drawing area that carries the delta. */\nconst DELTA_BAND = 18;\nconst MARK = 7;\nconst CHAR = 5.6;\n\nfunction buildKpiCard(props: KpiCardProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? KPI_CARD_DEMO;\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const metric = usesDemo ? (props.metric ?? KPI_CARD_DEMO_PROPS.metric) : props.metric;\n const delta = usesDemo ? (props.delta ?? KPI_CARD_DEMO_PROPS.delta) : props.delta;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n const series = readSeries(data, valueKey, 'value');\n checkVolume(CHART, [series]);\n const last = [...series.points].reverse().find((p) => p.value !== undefined)?.value;\n\n const base = modelBase(CHART, props, context, metric ?? 'KPI', {\n columns: ['point', series.key],\n rows: series.points.map((p) => [String(p.index + 1), formatValue(p.value, locale, numberFormat)]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n // The figure is the card's own value line: the prop, else the latest value; the metric names it.\n const card = cardLayout({ ...props, value: props.value ?? last, unit: props.unit ?? metric }, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const drawing = inset(card.area, PLOT_INSET);\n const plot = { x: drawing.x, y: drawing.y + DELTA_BAND, width: drawing.width, height: Math.max(drawing.height - DELTA_BAND, 1) };\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n // One text for the delta, printed and described alike (REQ-120).\n const deltaText =\n delta !== undefined && Number.isFinite(delta) ? formatNumber(delta, locale, { ...(numberFormat ?? { maximumFractionDigits: 2 }), signDisplay: 'always' }) : undefined;\n if (delta !== undefined && deltaText !== undefined) {\n // The delta is printed with its sign, and a mark points its way: never tone alone (REQ-124).\n const text = deltaText;\n const right = drawing.x + drawing.width;\n labels.push({ x: right, y: drawing.y + 11, text, kind: 'tick', part: 'text', anchor: 'end' });\n const tone = props.deltaTone ?? (delta > 0 ? 'up' : delta < 0 ? 'down' : 'flat');\n const x0 = right - text.length * CHAR - MARK - 6;\n const top = drawing.y + 3;\n const bottom = top + MARK;\n const d =\n tone === 'up'\n ? `M${x0},${bottom}L${x0 + MARK / 2},${top}L${x0 + MARK},${bottom}Z`\n : tone === 'down'\n ? `M${x0},${top}L${x0 + MARK / 2},${bottom}L${x0 + MARK},${top}Z`\n : `M${x0},${top}L${x0 + MARK},${(top + bottom) / 2}L${x0},${bottom}Z`;\n strokes.push({ d, role: 'encoding', part: 'ink', paint: 'fill' });\n }\n\n if (series.missing > 0 && data.length > 0) warnValue(CHART, series.key, `${series.missing} of ${data.length} values are not finite; the sparkline breaks there.`);\n const range = extent(seriesValues([series]));\n if (data.length === 0 || range === undefined) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const bottom = plot.y + plot.height;\n const y = linearScale(range, [bottom, plot.y], { chart: CHART, property: series.key, padding: context.domainPadding });\n const xAt = (i: number) => (data.length > 1 ? plot.x + (i / (data.length - 1)) * plot.width : plot.x + plot.width / 2);\n const defined = (p: SeriesPoint) => p.value !== undefined;\n const shape = area<SeriesPoint>().defined(defined).x((p) => xAt(p.index)).y0(bottom).y1((p) => y(p.value ?? 0)).curve(CURVES.monotone)(series.points);\n if (shape) strokes.push({ d: shape, role: 'encoding', part: 'ink', paint: 'stroke', tone: 1 });\n const top = line<SeriesPoint>().defined(defined).x((p) => xAt(p.index)).y((p) => y(p.value ?? 0)).curve(CURVES.monotone)(series.points);\n if (top) strokes.push({ d: top, role: 'encoding', part: 'ink' });\n for (const p of series.points) {\n if (p.value === undefined) continue;\n hitAreas.push({ seriesKey: series.key, index: p.index, datum: p.datum, value: p.value, x: xAt(p.index), y: y(p.value) });\n }\n\n const description =\n props.description ??\n `${base.name}. ${metric ?? accessorName(valueKey, 'value')} at ${formatValue(props.value ?? last, locale, numberFormat)}${\n deltaText !== undefined ? `, change ${deltaText}` : ''\n }; ${data.length} points from ${formatNumber(range[0], locale, numberFormat)} to ${formatNumber(range[1], locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `KpiCard` recipe (REQ-063): the figure, its signed delta with a direction mark, and an area sparkline. */\nexport const kpiCard: ChartRecipe<KpiCardProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildKpiCard });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `BarChart` (REQ-093): orders per quarter against last year. Frozen (Data Model §4). */\nexport const BAR_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 'Q1', value: 42, previous: 35 },\n { x: 'Q2', value: 58, previous: 44 },\n { x: 'Q3', value: 51, previous: 49 },\n { x: 'Q4', value: 73, previous: 60 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const BAR_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({ xKey: 'x', valueKey: 'value', secondaryKey: 'previous' } as const);\n","import { extent } from '../../scales/util';\nimport type { BarChartProps, ChartModel, ChartRecipe, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport {\n AXIS_BAND,\n PLOT_INSET,\n cartesianPlot,\n categoryAxis,\n categoryLabels,\n checkVolume,\n horizontalValueAxis,\n legend,\n pillPath,\n readSeries,\n seriesValues,\n valueAxis,\n} from '../shared/cartesian';\nimport { warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { BAR_CHART_DEMO, BAR_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'BarChart';\n/** Room at the left for the category labels when bars run in rows. */\nconst ROW_LABELS = 56;\n/** Share of a category's band the bars fill, together. */\nconst BAR_FILL = 0.7;\n\nfunction buildBarChart(props: BarChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? BAR_CHART_DEMO;\n const xKey = usesDemo ? BAR_CHART_DEMO_KEYS.xKey : (props.xKey ?? 'x');\n const valueKey = usesDemo ? BAR_CHART_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n const secondaryKey = usesDemo ? BAR_CHART_DEMO_KEYS.secondaryKey : props.secondaryKey;\n const rows = props.orientation === 'rows';\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n const series = [readSeries(data, valueKey, 'value'), ...(secondaryKey === undefined ? [] : [readSeries(data, secondaryKey, 'secondary')])];\n checkVolume(CHART, series);\n const xName = accessorName(xKey, 'x');\n const xValues = data.map((datum, index) => read(xKey, datum, index));\n const xLabels = xValues.map((value) => formatCategory(value, locale));\n\n const base = modelBase(CHART, props, context, 'Bar chart', {\n columns: [xName, ...series.map((s) => s.key)],\n rows: data.map((_, i) => [xLabels[i] ?? '', ...series.map((s) => formatValue(s.points[i]?.value, locale, numberFormat))]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const paired = series.length > 1;\n const key = paired\n ? legend(card.area, series.map((s, i) => (i === 0 ? { name: s.key, part: 'ink' as const, tone: 2 as const } : { name: s.key, part: 'ink-secondary' as const, tone: 1 as const, dash: 'dotted' as const })))\n : { area: card.area, strokes: [], labels: [] };\n const area = key.area;\n const plot: Rect = rows\n ? { x: area.x + ROW_LABELS, y: area.y + PLOT_INSET, width: Math.max(area.width - ROW_LABELS - PLOT_INSET, 1), height: Math.max(area.height - AXIS_BAND - PLOT_INSET, 1) }\n : cartesianPlot(area);\n const strokes: Stroke[] = [...card.strokes, ...key.strokes];\n const labels: TextLabel[] = [...card.labels, ...key.labels];\n const hitAreas: HitArea[] = [];\n\n for (const s of series) if (s.missing > 0 && data.length > 0) warnValue(CHART, s.key, `${s.missing} of ${data.length} values are not finite; their bars are omitted.`);\n const range = extent(seriesValues(series));\n if (data.length === 0 || range === undefined) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const axisOptions = { chart: CHART, property: series[0]?.key ?? 'value', padding: context.domainPadding, locale, numberFormat };\n const axis = rows ? horizontalValueAxis(plot, area, range, axisOptions) : valueAxis(plot, range, axisOptions);\n const v = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n // Categories run along x as columns, or down y as rows; either way a band per category.\n const along = rows ? { x: plot.y, y: plot.x, width: plot.height, height: plot.width } : plot;\n const categories = categoryAxis(xValues, along, { chart: CHART, property: xName, padding: context.domainPadding, numeric: false, paddingInner: 0.3, paddingOuter: 0.15 });\n const thickness = (categories.bandwidth * BAR_FILL) / series.length;\n\n series.forEach((s, k) => {\n for (const p of s.points) {\n if (p.value === undefined) continue;\n const centre = categories.at(p.index) - (categories.bandwidth * BAR_FILL) / 2 + thickness * (k + 0.5);\n const from = v(Math.min(0, p.value));\n const to = v(Math.max(0, p.value));\n const bar: Rect = rows\n ? { x: from, y: centre - thickness / 2, width: to - from, height: thickness }\n : { x: centre - thickness / 2, y: to, width: thickness, height: from - to };\n strokes.push({ d: pillPath(bar), role: 'encoding', part: k === 0 ? 'ink' : 'ink-secondary', tone: k === 0 ? 2 : 1, ...(k === 0 ? {} : { dash: 'dotted' as const }) });\n const end = v(p.value);\n hitAreas.push({\n seriesKey: s.key,\n index: p.index,\n datum: p.datum,\n value: p.value,\n x: rows ? end : centre,\n y: rows ? centre : end,\n box: bar,\n ...(paired ? { cell: rows ? { column: k, row: p.index } : { column: p.index, row: k } } : {}),\n });\n }\n });\n\n if (rows) {\n xLabels.forEach((text, i) => labels.push({ x: area.x + PLOT_INSET, y: categories.at(i) + 4, text, kind: 'tick', part: 'axis', anchor: 'start' }));\n } else {\n labels.push(...categoryLabels(xLabels, categories.at, area, plot));\n }\n\n const ranges = series.map((s) => {\n const r = extent(seriesValues([s]));\n return r ? `${s.key} from ${formatNumber(r[0], locale, numberFormat)} to ${formatNumber(r[1], locale, numberFormat)}` : `${s.key} has no values`;\n });\n const description =\n props.description ?? `${base.name}. Bar chart in ${rows ? 'rows' : 'columns'} of ${data.length} ${xName} values; ${ranges.join('; ')}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `BarChart` recipe (REQ-064): pill bars, columns or rows, with an optional second series. */\nexport const barChart: ChartRecipe<BarChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildBarChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `StackedBarChart` (REQ-093): signups by plan per month. Frozen (Data Model §4). */\nexport const STACKED_BAR_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 'Jan', free: 40, pro: 18, team: 6 },\n { x: 'Feb', free: 46, pro: 21, team: 9 },\n { x: 'Mar', free: 38, pro: 26, team: 11 },\n { x: 'Apr', free: 52, pro: 24, team: 14 },\n { x: 'May', free: 49, pro: 31, team: 15 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const STACKED_BAR_CHART_DEMO_KEYS: readonly string[] = /* @__PURE__ */ Object.freeze(['free', 'pro', 'team']);\n","import type { ChartModel, ChartRecipe, HitArea, Rect, RecipeContext, StackedBarChartProps, Stroke, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, categoryAxis, categoryLabels, checkVolume, legend, readSeries, valueAxis } from '../shared/cartesian';\nimport { rectPath, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { STACKED_BAR_CHART_DEMO, STACKED_BAR_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'StackedBarChart';\n/** Tones of the stacked keys, bottom to top; a fifth key starts over. */\nconst TONES: readonly ToneLevel[] = [1, 2, 3, 4];\n\nfunction buildStackedBarChart(props: StackedBarChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? STACKED_BAR_CHART_DEMO;\n const xKey = usesDemo ? 'x' : (props.xKey ?? 'x');\n const keys = usesDemo ? STACKED_BAR_CHART_DEMO_KEYS : (props.keys ?? STACKED_BAR_CHART_DEMO_KEYS);\n const names = keys.map((k, i) => (usesDemo ? undefined : props.names?.[i]) ?? k);\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n // A series is known by its display name everywhere a reader meets it: legend, table, readout.\n const series = keys.map((k, i) => ({ ...readSeries(data, k, k), key: names[i] ?? k }));\n checkVolume(CHART, series);\n const xName = accessorName(xKey, 'x');\n const xValues = data.map((datum, index) => read(xKey, datum, index));\n const xLabels = xValues.map((value) => formatCategory(value, locale));\n\n const base = modelBase(CHART, props, context, 'Stacked bar chart', {\n columns: [xName, ...names],\n rows: data.map((_, i) => [xLabels[i] ?? '', ...series.map((s) => formatValue(s.points[i]?.value, locale, numberFormat))]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n // The legend lists the keys in stack order, bottom first: the name tells a key, not its tone (REQ-124).\n const key = legend(card.area, names.map((name, k) => ({ name, part: 'ink' as const, tone: TONES[k % TONES.length] })));\n const plot = cartesianPlot(key.area);\n const strokes: Stroke[] = [...card.strokes, ...key.strokes];\n const labels: TextLabel[] = [...card.labels, ...key.labels];\n const hitAreas: HitArea[] = [];\n\n let missing = 0;\n let negative = 0;\n const totals = data.map((_, i) =>\n series.reduce((sum, s) => {\n const value = s.points[i]?.value;\n if (value === undefined) {\n missing += 1;\n return sum;\n }\n if (value < 0) negative += 1;\n return sum + Math.max(value, 0);\n }, 0),\n );\n if (missing > 0 && data.length > 0) warnValue(CHART, keys[0] ?? 'keys', `${missing} values are not finite; their segments are omitted.`);\n if (negative > 0) warnValue(CHART, keys[0] ?? 'keys', `${negative} negative values cannot stack; they are drawn at zero.`);\n if (data.length === 0 || keys.length === 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const axis = valueAxis(plot, [0, Math.max(0, ...totals)], { chart: CHART, property: keys[0] ?? 'value', padding: context.domainPadding, locale, numberFormat });\n const y = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const categories = categoryAxis(xValues, plot, { chart: CHART, property: xName, padding: context.domainPadding, numeric: false, paddingInner: 0.35, paddingOuter: 0.2 });\n const width = categories.bandwidth;\n\n data.forEach((_, i) => {\n let below = 0;\n series.forEach((s, k) => {\n const p = s.points[i];\n if (p?.value === undefined) return;\n const height = Math.max(p.value, 0);\n const segment: Rect = { x: categories.at(i) - width / 2, y: y(below + height), width, height: y(below) - y(below + height) };\n if (segment.height > 0) strokes.push({ d: rectPath(segment), role: 'encoding', part: 'ink', tone: TONES[k % TONES.length] });\n hitAreas.push({ seriesKey: s.key, index: i, datum: p.datum, value: p.value, x: categories.at(i), y: segment.y, box: segment, cell: { column: i, row: k } });\n below += height;\n });\n });\n labels.push(...categoryLabels(xLabels, categories.at, key.area, plot));\n\n const largest = Math.max(...totals);\n const description =\n props.description ??\n `${base.name}. Stacked bars of ${keys.length} keys (${names.join(', ')}, bottom to top) over ${data.length} ${xName} values; the tallest stack totals ${formatNumber(largest, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `StackedBarChart` recipe (REQ-065): one segment per key, stacked from zero, named in a legend. */\nexport const stackedBarChart: ChartRecipe<StackedBarChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildStackedBarChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `ComposedChart` (REQ-093): revenue and margin per month. Frozen (Data Model §4). */\nexport const COMPOSED_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 'Jan', revenue: 42, margin: 18 },\n { x: 'Feb', revenue: 48, margin: 21 },\n { x: 'Mar', revenue: 39, margin: 17 },\n { x: 'Apr', revenue: 55, margin: 26 },\n { x: 'May', revenue: 61, margin: 30 },\n { x: 'Jun', revenue: 58, margin: 27 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const COMPOSED_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({ xKey: 'x', barKey: 'revenue', lineKey: 'margin' } as const);\n","import { line } from 'd3-shape';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, ComposedChartProps, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, categoryAxis, categoryLabels, checkVolume, legend, readSeries, seriesValues, valueAxis, type SeriesPoint } from '../shared/cartesian';\nimport { rectPath, warnValue } from '../shared/cells';\nimport { CURVES } from '../shared/curves';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { COMPOSED_CHART_DEMO, COMPOSED_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'ComposedChart';\nconst BAR_FILL = 0.6;\n\nfunction buildComposedChart(props: ComposedChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? COMPOSED_CHART_DEMO;\n const xKey = usesDemo ? COMPOSED_CHART_DEMO_KEYS.xKey : (props.xKey ?? 'x');\n const barKey = usesDemo ? COMPOSED_CHART_DEMO_KEYS.barKey : (props.barKey ?? 'bar');\n const lineKey = usesDemo ? COMPOSED_CHART_DEMO_KEYS.lineKey : (props.lineKey ?? 'line');\n const showLine = props.showLine ?? true;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n const bars = readSeries(data, barKey, 'bar');\n const trend = readSeries(data, lineKey, 'line');\n const series = showLine ? [bars, trend] : [bars];\n checkVolume(CHART, series);\n const xName = accessorName(xKey, 'x');\n const xValues = data.map((datum, index) => read(xKey, datum, index));\n const xLabels = xValues.map((value) => formatCategory(value, locale));\n\n const base = modelBase(CHART, props, context, 'Composed chart', {\n columns: [xName, ...series.map((s) => s.key)],\n rows: data.map((_, i) => [xLabels[i] ?? '', ...series.map((s) => formatValue(s.points[i]?.value, locale, numberFormat))]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const key = legend(card.area, [\n { name: bars.key, part: 'ink', tone: 2 },\n ...(showLine ? [{ name: trend.key, part: 'ink-secondary' as const }] : []),\n ]);\n const plot = cartesianPlot(key.area);\n const strokes: Stroke[] = [...card.strokes, ...key.strokes];\n const labels: TextLabel[] = [...card.labels, ...key.labels];\n const hitAreas: HitArea[] = [];\n\n for (const s of series) if (s.missing > 0 && data.length > 0) warnValue(CHART, s.key, `${s.missing} of ${data.length} values are not finite; they are omitted.`);\n const range = extent(seriesValues(series));\n if (data.length === 0 || range === undefined) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const axis = valueAxis(plot, range, { chart: CHART, property: bars.key, padding: context.domainPadding, locale, numberFormat });\n const y = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const categories = categoryAxis(xValues, plot, { chart: CHART, property: xName, padding: context.domainPadding, numeric: false, paddingInner: 0.3, paddingOuter: 0.15 });\n const width = categories.bandwidth * BAR_FILL;\n\n for (const p of bars.points) {\n if (p.value === undefined) continue;\n const top = y(Math.max(0, p.value));\n const bottom = y(Math.min(0, p.value));\n const bar: Rect = { x: categories.at(p.index) - width / 2, y: top, width, height: bottom - top };\n if (bar.height > 0) strokes.push({ d: rectPath(bar), role: 'encoding', part: 'ink', tone: 2 });\n hitAreas.push({ seriesKey: bars.key, index: p.index, datum: p.datum, value: p.value, x: categories.at(p.index), y: y(p.value), box: bar, cell: { column: p.index, row: 0 } });\n }\n if (showLine) {\n const d = line<SeriesPoint>().defined((p) => p.value !== undefined).x((p) => categories.at(p.index)).y((p) => y(p.value ?? 0)).curve(CURVES.monotone)(trend.points);\n if (d) strokes.push({ d, role: 'encoding', part: 'ink-secondary' });\n for (const p of trend.points) {\n if (p.value === undefined) continue;\n hitAreas.push({ seriesKey: trend.key, index: p.index, datum: p.datum, value: p.value, x: categories.at(p.index), y: y(p.value), cell: { column: p.index, row: 1 } });\n }\n }\n labels.push(...categoryLabels(xLabels, categories.at, key.area, plot));\n\n const description =\n props.description ??\n `${base.name}. Columns of ${bars.key}${showLine ? ` with a line of ${trend.key}` : ''} over ${data.length} ${xName} values, on one scale from ${formatNumber(range[0], locale, numberFormat)} to ${formatNumber(range[1], locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `ComposedChart` recipe (REQ-066): columns and a spline on one value scale. */\nexport const composedChart: ChartRecipe<ComposedChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildComposedChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `WaterfallChart` (REQ-093): from opening to closing cash. Frozen (Data Model §4). */\nexport const WATERFALL_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { step: 'Opening', base: 120 },\n { step: 'Sales', delta: 64 },\n { step: 'Services', delta: 22 },\n { step: 'Payroll', delta: -58 },\n { step: 'Rent', delta: -24 },\n { step: 'Closing', base: 124 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, Datum, HitArea, Rect, RecipeContext, Stroke, TextLabel, WaterfallChartProps } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, categoryAxis, categoryLabels, checkCount, valueAxis } from '../shared/cartesian';\nimport { finite, rectPath, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { WATERFALL_CHART_DEMO } from './demo';\n\nconst CHART = 'WaterfallChart';\nconst BAR_FILL = 0.62;\n\ninterface Step {\n readonly index: number;\n readonly datum: Datum;\n readonly kind: 'total' | 'delta';\n readonly value: number;\n /** Running total before and after this step. */\n readonly from: number;\n readonly to: number;\n}\n\nfunction buildWaterfallChart(props: WaterfallChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? WATERFALL_CHART_DEMO;\n const stepKey = usesDemo ? 'step' : (props.stepKey ?? 'step');\n const baseKey = usesDemo ? 'base' : (props.baseKey ?? 'base');\n const deltaKey = usesDemo ? 'delta' : (props.deltaKey ?? 'delta');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const baseName = accessorName(baseKey, 'base');\n const deltaName = accessorName(deltaKey, 'delta');\n\n // A total starts at zero and resets the running total; a delta floats from it (API Spec §7).\n const steps: Step[] = [];\n let running = 0;\n let skipped = 0;\n data.forEach((datum, index) => {\n const total = finite(read(baseKey, datum, index));\n const delta = finite(read(deltaKey, datum, index));\n if (total !== undefined) {\n if (delta !== undefined) warnValue(CHART, deltaName, `Row ${index} has both a ${baseName} and a ${deltaName}; a total resets the running total, so its ${deltaName} is ignored.`);\n steps.push({ index, datum, kind: 'total', value: total, from: 0, to: total });\n running = total;\n } else if (delta !== undefined) {\n steps.push({ index, datum, kind: 'delta', value: delta, from: running, to: running + delta });\n running += delta;\n } else {\n skipped += 1;\n }\n });\n checkCount(CHART, deltaName, data.length);\n const stepName = accessorName(stepKey, 'step');\n const stepLabels = data.map((datum, index) => formatCategory(read(stepKey, datum, index), locale));\n const signed = (value: number) => formatNumber(value, locale, { ...(numberFormat ?? { maximumFractionDigits: 2 }), signDisplay: 'always' });\n\n const base = modelBase(CHART, props, context, 'Waterfall chart', {\n columns: [stepName, baseName, deltaName],\n rows: data.map((datum, index) => [\n stepLabels[index] ?? '',\n formatValue(finite(read(baseKey, datum, index)), locale, numberFormat),\n formatValue(finite(read(deltaKey, datum, index)), locale, numberFormat),\n ]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = cartesianPlot(card.area);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (skipped > 0 && data.length > 0) warnValue(CHART, deltaName, `${skipped} rows have neither a finite ${baseName} nor a finite ${deltaName}; they are omitted.`);\n if (steps.length === 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const levels = steps.flatMap((s) => [s.from, s.to]);\n const axis = valueAxis(plot, [Math.min(...levels), Math.max(...levels)], { chart: CHART, property: deltaName, padding: context.domainPadding, locale, numberFormat });\n const y = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const categories = categoryAxis(stepLabels, plot, { chart: CHART, property: stepName, padding: context.domainPadding, numeric: false, paddingInner: 0.3, paddingOuter: 0.15 });\n const width = categories.bandwidth * BAR_FILL;\n\n steps.forEach((step, n) => {\n const top = y(Math.max(step.from, step.to));\n const bar: Rect = { x: categories.at(step.index) - width / 2, y: top, width, height: y(Math.min(step.from, step.to)) - top };\n // Rises, falls and totals differ by tone, but also by their printed sign and their position (REQ-124).\n const tone = step.kind === 'total' ? 3 : step.value >= 0 ? 1 : 2;\n if (bar.height > 0) strokes.push({ d: rectPath(bar), role: 'encoding', part: 'ink', tone });\n const next = steps[n + 1];\n if (next?.kind === 'delta') {\n strokes.push({ d: `M${bar.x + width},${y(step.to)}H${categories.at(next.index) - width / 2}`, role: 'ornament', part: 'grid', dash: 'dotted' });\n }\n labels.push({\n x: categories.at(step.index),\n y: top - 3,\n text: step.kind === 'total' ? formatNumber(step.value, locale, numberFormat) : signed(step.value),\n kind: 'tick',\n part: 'text',\n anchor: 'middle',\n });\n hitAreas.push({\n seriesKey: step.kind === 'total' ? baseName : deltaName,\n index: step.index,\n datum: step.datum,\n value: step.value,\n x: categories.at(step.index),\n y: y(step.to),\n box: bar,\n cell: { column: n, row: 0 },\n });\n });\n labels.push(...categoryLabels(stepLabels, categories.at, card.area, plot));\n\n const description =\n props.description ?? `${base.name}. Waterfall of ${steps.length} steps, ending at ${formatNumber(running, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `WaterfallChart` recipe (REQ-067): totals from zero and signed deltas floating on the running total. */\nexport const waterfallChart: ChartRecipe<WaterfallChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildWaterfallChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `FunnelChart` (REQ-093): a checkout funnel. Frozen (Data Model §4). */\nexport const FUNNEL_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { stage: 'Visits', value: 12400 },\n { stage: 'Product', value: 6800 },\n { stage: 'Cart', value: 2900 },\n { stage: 'Checkout', value: 1500 },\n { stage: 'Paid', value: 980 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, FunnelChartProps, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { checkCount } from '../shared/cartesian';\nimport { finite, inset, rectPath, toneOf, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { FUNNEL_CHART_DEMO } from './demo';\n\nconst CHART = 'FunnelChart';\nconst PLOT_INSET = 6;\n/** Room at the left for the stage names and at the right for value and share. */\nconst LABEL_COLUMN = 64;\nconst VALUE_COLUMN = 64;\nconst STAGE_GAP = 3;\n\nfunction buildFunnelChart(props: FunnelChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? FUNNEL_CHART_DEMO;\n const stageKey = usesDemo ? 'stage' : (props.stageKey ?? 'stage');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n checkCount(CHART, valueName, data.length);\n\n const stages = data.map((datum, index) => ({\n index,\n datum,\n stage: formatCategory(read(stageKey, datum, index), locale),\n value: finite(read(valueKey, datum, index)),\n }));\n // Shares are of the first stage that has a positive value: the funnel's entry.\n const entry = stages.find((s) => s.value !== undefined && s.value > 0)?.value;\n const share = (value: number) => (entry ? `${formatNumber((value / entry) * 100, locale, { maximumFractionDigits: 0 })}%` : '—');\n\n const base = modelBase(CHART, props, context, 'Funnel chart', {\n columns: [accessorName(stageKey, 'stage'), valueName, 'share'],\n rows: stages.map((s) => [s.stage, formatValue(s.value, locale, numberFormat), s.value === undefined ? '—' : share(Math.max(s.value, 0))]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = inset(card.area, PLOT_INSET);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const largest = Math.max(0, ...stages.map((s) => s.value ?? 0));\n if (stages.length > 0 && largest <= 0) warnValue(CHART, valueName, `No stage has a ${valueName} above zero; there is no funnel to draw.`);\n if (stages.length === 0 || largest <= 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, stages.length === 0);\n }\n\n const track = { x: plot.x + LABEL_COLUMN, width: Math.max(plot.width - LABEL_COLUMN - VALUE_COLUMN, 1) };\n const centre = track.x + track.width / 2;\n const rowHeight = plot.height / stages.length;\n const right = plot.x + plot.width;\n\n for (const s of stages) {\n const top = plot.y + s.index * rowHeight;\n const baseline = top + rowHeight / 2 + 4;\n labels.push({ x: plot.x, y: baseline, text: s.stage, kind: 'tick', part: 'text', anchor: 'start' });\n if (s.value === undefined) {\n warnValue(CHART, valueName, `Stage ${s.index} has no finite value; it is omitted.`);\n continue;\n }\n const value = Math.max(s.value, 0);\n if (value !== s.value) warnValue(CHART, valueName, `Stage ${s.index} is ${s.value}; a funnel stage cannot be negative, so it is drawn at zero.`);\n const width = (value / largest) * track.width;\n const stage = { x: centre - width / 2, y: top + STAGE_GAP / 2, width, height: Math.max(rowHeight - STAGE_GAP, 0) };\n const tone = toneOf(value / largest);\n if (width > 0) strokes.push({ d: rectPath(stage), role: 'encoding', part: 'ink', ...(tone > 0 ? { tone } : {}) });\n // The width, the value and the share all say the same thing; the tone only repeats it (REQ-124).\n labels.push({ x: right, y: baseline - 6, text: formatNumber(s.value, locale, numberFormat), kind: 'tick', part: 'text', anchor: 'end' });\n labels.push({ x: right, y: baseline + 5, text: share(value), kind: 'tick', part: 'axis', anchor: 'end' });\n hitAreas.push({ seriesKey: valueName, index: s.index, datum: s.datum, value: s.value, x: centre, y: stage.y + stage.height / 2, box: stage });\n }\n\n const last = [...stages].reverse().find((s) => s.value !== undefined);\n const description =\n props.description ??\n `${base.name}. Funnel of ${stages.length} stages, from ${stages[0]?.stage} to ${last?.stage}; ${last?.value === undefined ? '' : `${share(Math.max(last.value, 0))} of the entry reach the last stage`}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `FunnelChart` recipe (REQ-068): centred stages, width ∝ value, value and share printed. */\nexport const funnelChart: ChartRecipe<FunnelChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildFunnelChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `DonutChart` (REQ-093): a household budget. Frozen (Data Model §4). */\nexport const DONUT_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { name: 'Rent', value: 38 },\n { name: 'Food', value: 22 },\n { name: 'Savings', value: 15 },\n { name: 'Transport', value: 14 },\n { name: 'Leisure', value: 11 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, DonutChartProps, HitArea, RecipeContext, Stroke, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { warnValue } from '../shared/cells';\nimport { accessorName, formatNumber, formatValue } from '../shared/format';\nimport { checkSectors, pointAt, polarFrame, readSectors, ringTones, sectorLegend, sectorPath } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { DONUT_CHART_DEMO } from './demo';\n\nconst CHART = 'DonutChart';\n/** Inner radius as a share of the outer: room for the central readout. */\nconst HOLE = 0.62;\n/** The legend sits beside the ring when the area is at least this much wider than tall. */\nconst LEGEND_ASPECT = 1.5;\nconst LEGEND_GAP = 14;\n\nfunction buildDonutChart(props: DonutChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? DONUT_CHART_DEMO;\n const nameKey = usesDemo ? 'name' : (props.nameKey ?? 'name');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n checkSectors(CHART, valueName, data.length);\n\n const sectors = readSectors(data, nameKey, valueKey, CHART, locale);\n const total = sectors.reduce((sum, s) => sum + s.value, 0);\n const share = (value: number) => (total > 0 ? `${formatNumber((value / total) * 100, locale, { maximumFractionDigits: 0 })}%` : '—');\n const byRow = new Map(sectors.map((s) => [s.index, s]));\n\n const base = modelBase(CHART, props, context, 'Donut chart', {\n columns: [accessorName(nameKey, 'name'), valueName, 'share'],\n rows: data.map((_, index) => {\n const s = byRow.get(index);\n return s ? [s.name, formatValue(s.value, locale, numberFormat), share(s.value)] : ['—', '—', '—'];\n }),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (sectors.length > 0 && total <= 0) warnValue(CHART, valueName, 'Every value is zero; a donut has nothing to divide.');\n if (sectors.length === 0 || total <= 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const withLegend = (props.legend ?? true) && plot.width >= plot.height * LEGEND_ASPECT;\n const ringArea = withLegend ? { x: plot.x, y: plot.y, width: plot.height, height: plot.height } : plot;\n const frame = polarFrame(ringArea);\n const inner = frame.radius * HOLE;\n\n const tones = ringTones(sectors.map((s) => s.value));\n let start = 0;\n sectors.forEach((s, k) => {\n const end = start + (s.value / total) * 2 * Math.PI;\n const tone = tones[k] as ToneLevel;\n const d = sectorPath(frame, { inner, outer: frame.radius, start, end });\n if (d) strokes.push({ d, role: 'encoding', part: 'ink', tone });\n const middle = pointAt(frame, (start + end) / 2, (inner + frame.radius) / 2);\n hitAreas.push({ seriesKey: valueName, index: s.index, datum: s.datum, value: s.value, x: middle.x, y: middle.y });\n start = end;\n });\n\n const centre = props.centerValue ?? formatNumber(total, locale, numberFormat);\n const hasLabel = props.centerLabel !== undefined && props.centerLabel !== '';\n labels.push({ x: frame.cx, y: frame.cy + (hasLabel ? 2 : 6), text: typeof centre === 'number' ? formatNumber(centre, locale, numberFormat) : centre, kind: 'value', part: 'text', anchor: 'middle' });\n if (hasLabel) labels.push({ x: frame.cx, y: frame.cy + 16, text: props.centerLabel as string, kind: 'tick', part: 'axis', anchor: 'middle' });\n\n if (withLegend) {\n const x = ringArea.x + ringArea.width + LEGEND_GAP;\n const key = sectorLegend(\n { x, y: plot.y, width: Math.max(plot.x + plot.width - x, 1), height: plot.height },\n sectors.map((s, k) => ({ name: s.name, share: share(s.value), tone: tones[k] as ToneLevel })),\n );\n strokes.push(...key.strokes);\n labels.push(...key.labels);\n }\n\n const largest = sectors.reduce((a, b) => (b.value > a.value ? b : a));\n const description =\n props.description ??\n `${base.name}. Donut of ${sectors.length} sectors totalling ${formatNumber(total, locale, numberFormat)}; the largest is ${largest.name} at ${share(largest.value)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `DonutChart` recipe (REQ-075): sectors ∝ value, a central readout, a legend with shares. */\nexport const donutChart: ChartRecipe<DonutChartProps> = /* @__PURE__ */ Object.freeze({ name: 'DonutChart', build: buildDonutChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `RadarChart` (REQ-093): a product scored on six criteria. Frozen (Data Model §4). */\nexport const RADAR_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { subject: 'Speed', value: 8 },\n { subject: 'Range', value: 6 },\n { subject: 'Comfort', value: 7 },\n { subject: 'Safety', value: 9 },\n { subject: 'Cost', value: 4 },\n { subject: 'Style', value: 6 },\n ].map((row) => Object.freeze(row)),\n);\n","import { linearScale } from '../../scales/scales';\nimport type { ChartModel, ChartRecipe, HitArea, RadarChartProps, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { warnValue } from '../shared/cells';\nimport { accessorName, formatNumber, formatValue } from '../shared/format';\nimport { checkSectors, pointAt, polarFrame, readSectors, RIM_LABELS, rimLabels } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { RADAR_CHART_DEMO } from './demo';\n\nconst CHART = 'RadarChart';\n\nconst validDomain = (d: readonly [number, number] | undefined): d is readonly [number, number] =>\n !!d && Number.isFinite(d[0]) && Number.isFinite(d[1]) && d[0] < d[1];\n\nfunction buildRadarChart(props: RadarChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? RADAR_CHART_DEMO;\n const subjectKey = usesDemo ? 'subject' : (props.subjectKey ?? 'subject');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n checkSectors(CHART, valueName, data.length);\n\n const subjects = readSectors(data, subjectKey, valueKey, CHART, locale);\n const byRow = new Map(subjects.map((s) => [s.index, s]));\n const base = modelBase(CHART, props, context, 'Radar chart', {\n columns: [accessorName(subjectKey, 'subject'), valueName],\n rows: data.map((_, index) => {\n const s = byRow.get(index);\n return s ? [s.name, formatValue(s.value, locale, numberFormat)] : ['—', '—'];\n }),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n const pinned = validDomain(props.domain) ? props.domain : undefined;\n if (subjects.length > 0 && subjects.length < 3) warnValue(CHART, accessorName(subjectKey, 'subject'), `${subjects.length} subjects cannot close a polygon; a radar needs at least three.`);\n const flat = !pinned && subjects.length > 0 && subjects.every((s) => s.value === 0);\n if (flat) warnValue(CHART, valueName, `Every ${valueName} is zero and no \\`domain\\` is given; there is no scale to draw on.`);\n if (subjects.length === 0 || flat) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const frame = polarFrame(plot, RIM_LABELS);\n const radius = linearScale(pinned ?? [0, Math.max(...subjects.map((s) => s.value))], [0, frame.radius], {\n chart: CHART,\n property: 'domain',\n padding: context.domainPadding,\n nice: !pinned,\n });\n const [low, high] = radius.domain;\n const slot = (2 * Math.PI) / subjects.length;\n const angleOf = (k: number) => k * slot;\n\n // Rings at the ticks and one spoke per subject: the grid carries no data (ornament).\n const ring = (r: number) => subjects.map((_, k) => pointAt(frame, angleOf(k), r)).map((p, k) => `${k === 0 ? 'M' : 'L'}${p.x},${p.y}`).join('') + 'Z';\n for (const tick of radius.ticks(4)) {\n const r = radius(tick);\n if (r <= 0) continue;\n strokes.push({ d: ring(r), role: 'ornament', part: 'grid' });\n // The outermost ring's value would sit under the name at 12 o'clock; the inner rings give the scale.\n if (r > frame.radius - RIM_LABELS) continue;\n labels.push({ x: frame.cx + 3, y: frame.cy - r - 2, text: formatNumber(tick, locale, numberFormat), kind: 'tick', part: 'axis', anchor: 'start' });\n }\n subjects.forEach((_, k) => {\n const end = pointAt(frame, angleOf(k), frame.radius);\n strokes.push({ d: `M${frame.cx},${frame.cy}L${end.x},${end.y}`, role: 'ornament', part: 'grid' });\n });\n\n let outside = 0;\n const vertices = subjects.map((s, k) => {\n const held = Math.min(Math.max(s.value, low), high);\n if (held !== s.value) outside += 1;\n return { s, point: pointAt(frame, angleOf(k), radius(held)) };\n });\n if (outside > 0) warnValue(CHART, valueName, `${outside} values fall outside the domain [${low}, ${high}]; they are held at its edge.`);\n strokes.push({ d: vertices.map((v, k) => `${k === 0 ? 'M' : 'L'}${v.point.x},${v.point.y}`).join('') + 'Z', role: 'encoding', part: 'ink', tone: 1 });\n for (const v of vertices) hitAreas.push({ seriesKey: valueName, index: v.s.index, datum: v.s.datum, value: v.s.value, x: v.point.x, y: v.point.y });\n labels.push(...rimLabels(frame, subjects.map((s, k) => ({ angle: angleOf(k), text: s.name }))));\n\n const top = subjects.reduce((a, b) => (b.value > a.value ? b : a));\n const bottom = subjects.reduce((a, b) => (b.value < a.value ? b : a));\n const description =\n props.description ??\n `${base.name}. Radar of ${subjects.length} subjects on a scale from ${formatNumber(low, locale, numberFormat)} to ${formatNumber(high, locale, numberFormat)}; highest ${top.name} at ${formatNumber(top.value, locale, numberFormat)}, lowest ${bottom.name} at ${formatNumber(bottom.value, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `RadarChart` recipe (REQ-076): one spoke per subject, a closed polygon of values. */\nexport const radarChart: ChartRecipe<RadarChartProps> = /* @__PURE__ */ Object.freeze({ name: 'RadarChart', build: buildRadarChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `PolarBarChart` (REQ-093): a year of monthly sales. Frozen (Data Model §4). */\nexport const POLAR_BAR_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { name: 'Jan', value: 32 },\n { name: 'Feb', value: 28 },\n { name: 'Mar', value: 41 },\n { name: 'Apr', value: 47 },\n { name: 'May', value: 55 },\n { name: 'Jun', value: 61 },\n { name: 'Jul', value: 66 },\n { name: 'Aug', value: 63 },\n { name: 'Sep', value: 52 },\n { name: 'Oct', value: 44 },\n { name: 'Nov', value: 37 },\n { name: 'Dec', value: 49 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, HitArea, PolarBarChartProps, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { warnValue } from '../shared/cells';\nimport { accessorName, formatNumber, formatValue } from '../shared/format';\nimport { arcPath, checkSectors, pointAt, polarFrame, readSectors, RIM_LABELS, rimLabels, sectorPath } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { POLAR_BAR_CHART_DEMO } from './demo';\n\nconst CHART = 'PolarBarChart';\n/** Radius of the hole the bars grow out from, as a share of the outer radius. */\nconst HOLE = 0.22;\n/** Share of each slot left empty between bars. */\nconst SLOT_GAP = 0.14;\n\nfunction buildPolarBarChart(props: PolarBarChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? POLAR_BAR_CHART_DEMO;\n const nameKey = usesDemo ? 'name' : (props.nameKey ?? 'name');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n checkSectors(CHART, valueName, data.length);\n\n const bars = readSectors(data, nameKey, valueKey, CHART, locale);\n const byRow = new Map(bars.map((s) => [s.index, s]));\n const base = modelBase(CHART, props, context, 'Polar bar chart', {\n columns: [accessorName(nameKey, 'name'), valueName],\n rows: data.map((_, index) => {\n const s = byRow.get(index);\n return s ? [s.name, formatValue(s.value, locale, numberFormat)] : ['—', '—'];\n }),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const largest = Math.max(0, ...bars.map((b) => b.value));\n if (bars.length > 0 && largest <= 0) warnValue(CHART, valueName, 'Every value is zero; no bar has a length.');\n if (bars.length === 0 || largest <= 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const frame = polarFrame(plot, RIM_LABELS);\n const hole = frame.radius * HOLE;\n const reach = frame.radius - hole;\n const slot = (2 * Math.PI) / bars.length;\n strokes.push({ d: arcPath(frame, hole, 0, 2 * Math.PI), role: 'ornament', part: 'rule' });\n\n bars.forEach((b, k) => {\n const start = k * slot + (slot * SLOT_GAP) / 2;\n const end = (k + 1) * slot - (slot * SLOT_GAP) / 2;\n // Length out from the hole is proportional to the value: a bar, bent around the circle.\n const tip = hole + (b.value / largest) * reach;\n const d = sectorPath(frame, { inner: hole, outer: tip, start, end });\n if (d && tip > hole) strokes.push({ d, role: 'encoding', part: 'ink', tone: 2 });\n const at = pointAt(frame, (start + end) / 2, tip);\n hitAreas.push({ seriesKey: valueName, index: b.index, datum: b.datum, value: b.value, x: at.x, y: at.y });\n });\n labels.push(...rimLabels(frame, bars.map((b, k) => ({ angle: (k + 0.5) * slot, text: b.name }))));\n\n const top = bars.reduce((a, b) => (b.value > a.value ? b : a));\n const description =\n props.description ?? `${base.name}. Polar bars for ${bars.length} categories around the circle; the longest is ${top.name} at ${formatNumber(top.value, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `PolarBarChart` recipe (REQ-077): equal slots around the turn, bar length ∝ value. */\nexport const polarBarChart: ChartRecipe<PolarBarChartProps> = /* @__PURE__ */ Object.freeze({ name: 'PolarBarChart', build: buildPolarBarChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `CoxcombChart` (REQ-093): support tickets by weekday. Frozen (Data Model §4). */\nexport const COXCOMB_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { name: 'Mon', value: 42 },\n { name: 'Tue', value: 35 },\n { name: 'Wed', value: 31 },\n { name: 'Thu', value: 38 },\n { name: 'Fri', value: 27 },\n { name: 'Sat', value: 12 },\n { name: 'Sun', value: 9 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, CoxcombChartProps, HitArea, RecipeContext, Stroke, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { warnValue } from '../shared/cells';\nimport { accessorName, formatNumber, formatValue } from '../shared/format';\nimport { arcPath, checkSectors, pointAt, polarFrame, readSectors, RIM_LABELS, rimLabels, ringTones, sectorPath } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { COXCOMB_CHART_DEMO } from './demo';\n\nconst CHART = 'CoxcombChart';\n\nfunction buildCoxcombChart(props: CoxcombChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? COXCOMB_CHART_DEMO;\n const nameKey = usesDemo ? 'name' : (props.nameKey ?? 'name');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n checkSectors(CHART, valueName, data.length);\n\n const sectors = readSectors(data, nameKey, valueKey, CHART, locale);\n const byRow = new Map(sectors.map((s) => [s.index, s]));\n const base = modelBase(CHART, props, context, 'Coxcomb chart', {\n columns: [accessorName(nameKey, 'name'), valueName],\n rows: data.map((_, index) => {\n const s = byRow.get(index);\n return s ? [s.name, formatValue(s.value, locale, numberFormat)] : ['—', '—'];\n }),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const largest = Math.max(0, ...sectors.map((s) => s.value));\n if (sectors.length > 0 && largest <= 0) warnValue(CHART, valueName, 'Every value is zero; no sector has an area.');\n if (sectors.length === 0 || largest <= 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const frame = polarFrame(plot, RIM_LABELS);\n const start = Number.isFinite(props.startAngle) ? ((props.startAngle as number) * Math.PI) / 180 : 0;\n const slot = (2 * Math.PI) / sectors.length;\n strokes.push({ d: arcPath(frame, frame.radius, 0, 2 * Math.PI), role: 'ornament', part: 'grid' });\n\n const tones = ringTones(sectors.map((s) => s.value));\n sectors.forEach((s, k) => {\n const from = start + k * slot;\n // Nightingale's rule: the AREA of a sector is proportional to its value, so its radius is ∝ √value.\n const r = frame.radius * Math.sqrt(s.value / largest);\n const d = sectorPath(frame, { inner: 0, outer: r, start: from, end: from + slot });\n if (d) strokes.push({ d, role: 'encoding', part: 'ink', tone: tones[k] as ToneLevel });\n const at = pointAt(frame, from + slot / 2, r * 0.6);\n hitAreas.push({ seriesKey: valueName, index: s.index, datum: s.datum, value: s.value, x: at.x, y: at.y });\n });\n labels.push(...rimLabels(frame, sectors.map((s, k) => ({ angle: start + (k + 0.5) * slot, text: s.name }))));\n\n const top = sectors.reduce((a, b) => (b.value > a.value ? b : a));\n const description =\n props.description ??\n `${base.name}. Coxcomb of ${sectors.length} equal-angle sectors whose area is proportional to the value; the largest is ${top.name} at ${formatNumber(top.value, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `CoxcombChart` recipe (REQ-088): Nightingale's polar area — equal angles, area ∝ value. */\nexport const coxcombChart: ChartRecipe<CoxcombChartProps> = /* @__PURE__ */ Object.freeze({ name: 'CoxcombChart', build: buildCoxcombChart });\n","import type { ChartModel, CommonChartProps, Datum, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from './card';\nimport { warnValue } from './cells';\nimport { accessorName, formatValue } from './format';\nimport type { Accessor } from '../../types';\nimport { arcPath, checkSectors, pointAt, readSectors, sectorLegend, sectorPath, type PolarFrame, type Sector } from './polar';\nimport { emptyModel, measure, modelBase, readyModel } from './shell';\nimport { PLOT_INSET } from './cartesian';\n\n/** Radius of the empty centre, as a share of the outer radius. */\nconst HOLE = 0.3;\n/** Share of each track's band that the value fills; the rest is the gap to the next track. */\nconst BAND_FILL = 0.72;\n/** Width kept for the legend column beside the tracks. */\nconst LEGEND_WIDTH = 110;\nconst LEGEND_GAP = 12;\n\nexport interface TrackFamily {\n readonly chart: string;\n readonly fallbackName: string;\n /** Where every track starts and how far a full value sweeps, in radians clockwise from 12. */\n readonly start: number;\n readonly span: number;\n /** Lays the tracks' circle out in the space left of the legend. */\n frameIn(area: Rect): PolarFrame;\n /** The share of the span a sector sweeps, before saturation. */\n shareOf(sector: Sector, sectors: readonly Sector[]): number;\n /** What the legend prints beside a track's name. */\n printed(sector: Sector, locale: string, numberFormat: Intl.NumberFormatOptions | undefined): string;\n readonly demo: readonly Datum[];\n}\n\ninterface TrackProps extends CommonChartProps {\n nameKey?: Accessor<string | number>;\n valueKey?: Accessor<number | null | undefined>;\n}\n\n/**\n * Concentric tracks, outermost first (REQ-078, REQ-079): a guide arc per item (ornament) and a\n * value band swept from the family's start. A legend beside them names each track with its value,\n * in the same order; the tracks share one tone, so order and print tell them apart (REQ-124).\n */\nexport function buildTracks(family: TrackFamily, props: TrackProps, context: RecipeContext): ChartModel {\n const { chart } = family;\n const usesDemo = props.data === undefined;\n const data = props.data ?? family.demo;\n const nameKey = usesDemo ? 'name' : (props.nameKey ?? 'name');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n checkSectors(chart, valueName, data.length);\n\n const sectors = readSectors(data, nameKey, valueKey, chart, locale);\n const byRow = new Map(sectors.map((s) => [s.index, s]));\n const base = modelBase(chart, props, context, family.fallbackName, {\n columns: [accessorName(nameKey, 'name'), valueName],\n rows: data.map((_, index) => {\n const s = byRow.get(index);\n return s ? [s.name, formatValue(s.value, locale, numberFormat)] : ['—', '—'];\n }),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n if (sectors.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const withLegend = plot.width >= LEGEND_WIDTH * 2;\n const drawing = withLegend ? { ...plot, width: plot.width - LEGEND_WIDTH - LEGEND_GAP } : plot;\n const frame = family.frameIn(drawing);\n const hole = frame.radius * HOLE;\n const band = (frame.radius - hole) / sectors.length;\n\n let saturated = 0;\n sectors.forEach((s, k) => {\n const outer = frame.radius - k * band;\n const inner = outer - band * BAND_FILL;\n const middle = (outer + inner) / 2;\n strokes.push({ d: arcPath(frame, middle, family.start, family.start + family.span), role: 'ornament', part: 'grid' });\n const raw = family.shareOf(s, sectors);\n const share = Math.min(Math.max(raw, 0), 1);\n if (share !== raw) saturated += 1;\n const end = family.start + share * family.span;\n const d = sectorPath(frame, { inner, outer, start: family.start, end });\n if (d) strokes.push({ d, role: 'encoding', part: 'ink', tone: 2 });\n const tip = pointAt(frame, end, middle);\n hitAreas.push({ seriesKey: valueName, index: s.index, datum: s.datum, value: s.value, x: tip.x, y: tip.y });\n });\n if (saturated > 0) warnValue(chart, valueName, `${saturated} values fall outside the track's range; they are drawn at its end.`);\n\n if (withLegend) {\n const x = drawing.x + drawing.width + LEGEND_GAP;\n const key = sectorLegend(\n { x, y: plot.y, width: plot.x + plot.width - x, height: plot.height },\n sectors.map((s) => ({ name: s.name, share: family.printed(s, locale, numberFormat), tone: 2 })),\n );\n strokes.push(...key.strokes);\n labels.push(...key.labels);\n }\n\n const description =\n props.description ??\n `${base.name}. ${sectors.length} concentric tracks, outermost first: ${sectors.map((s) => `${s.name} ${family.printed(s, locale, numberFormat)}`).join(', ')}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** A half circle standing on the bottom of the area, as wide as fits. */\nexport function halfCircleFrame(area: Rect, bottomRoom: number): PolarFrame {\n const radius = Math.max(Math.min(area.width / 2, area.height - bottomRoom) - PLOT_INSET, 1);\n return { cx: area.x + area.width / 2, cy: area.y + area.height - bottomRoom, radius };\n}\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `RadialArcGroup` (REQ-093): a sales pipeline by channel. Frozen (Data Model §4). */\nexport const RADIAL_ARC_GROUP_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { name: 'Direct', value: 84 },\n { name: 'Partners', value: 62 },\n { name: 'Online', value: 47 },\n { name: 'Events', value: 23 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartRecipe, RadialArcGroupProps, RecipeContext } from '../../types';\nimport { formatNumber } from '../shared/format';\nimport { buildTracks, halfCircleFrame, type TrackFamily } from '../shared/tracks';\nimport { RADIAL_ARC_GROUP_DEMO } from './demo';\n\nconst FAMILY: TrackFamily = {\n chart: 'RadialArcGroup',\n fallbackName: 'Radial arc group',\n // From 9 o'clock over the top to 3: a half turn.\n start: -Math.PI / 2,\n span: Math.PI,\n frameIn: (area) => halfCircleFrame(area, 8),\n // The largest value sweeps the whole half turn.\n shareOf: (s, all) => s.value / Math.max(...all.map((x) => x.value), Number.MIN_VALUE),\n printed: (s, locale, numberFormat) => formatNumber(s.value, locale, numberFormat),\n demo: RADIAL_ARC_GROUP_DEMO,\n};\n\n/** `RadialArcGroup` recipe (REQ-078): concentric 180° tracks, sweep ∝ value / the largest. */\nexport const radialArcGroup: ChartRecipe<RadialArcGroupProps> = /* @__PURE__ */ Object.freeze({\n name: 'RadialArcGroup',\n build: (props: RadialArcGroupProps, context: RecipeContext) => buildTracks(FAMILY, props, context),\n});\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `RadialRings` (REQ-093): daily goals, percent reached. Frozen (Data Model §4). */\nexport const RADIAL_RINGS_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { name: 'Move', value: 82 },\n { name: 'Exercise', value: 64 },\n { name: 'Stand', value: 100 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartRecipe, RadialRingsProps, RecipeContext } from '../../types';\nimport { formatNumber } from '../shared/format';\nimport { polarFrame } from '../shared/polar';\nimport { buildTracks, type TrackFamily } from '../shared/tracks';\nimport { RADIAL_RINGS_DEMO } from './demo';\n\nconst FAMILY: TrackFamily = {\n chart: 'RadialRings',\n fallbackName: 'Radial rings',\n // A full turn from 12 o'clock: a ring is progress towards 100.\n start: 0,\n span: 2 * Math.PI,\n frameIn: (area) => polarFrame(area),\n shareOf: (s) => s.value / 100,\n printed: (s, locale) => `${formatNumber(s.value, locale, { maximumFractionDigits: 1 })}%`,\n demo: RADIAL_RINGS_DEMO,\n};\n\n/** `RadialRings` recipe (REQ-079): concentric progress rings, sweep ∝ value in 0-100. */\nexport const radialRings: ChartRecipe<RadialRingsProps> = /* @__PURE__ */ Object.freeze({\n name: 'RadialRings',\n build: (props: RadialRingsProps, context: RecipeContext) => buildTracks(FAMILY, props, context),\n});\n","import type { ChartModel, CommonChartProps, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from './card';\nimport { warnValue } from './cells';\nimport { formatNumber } from './format';\nimport type { PolarFrame } from './polar';\nimport { measure, modelBase, readyModel } from './shell';\n\n/** The demo value of a meter (REQ-093). */\nexport const SCALAR_DEMO = 72;\n\ninterface ScalarProps extends CommonChartProps {\n percent?: number;\n caption?: string;\n readout?: string;\n}\n\nexport interface ScalarDrawing {\n readonly strokes: Stroke[];\n readonly labels: TextLabel[];\n /** Where the value points: the item's position. */\n readonly tip?: { readonly x: number; readonly y: number };\n}\n\nexport interface ScalarFamily {\n readonly chart: string;\n readonly fallbackName: string;\n frameIn(area: Rect): PolarFrame;\n /** Baselines of the readout and of the caption: clear of the value's marks. */\n readoutAt(frame: PolarFrame): { readonly value: number; readonly caption: number };\n /** Draws the track, and the value when there is one (0-100, already saturated). */\n draw(frame: PolarFrame, value: number | undefined): ScalarDrawing;\n}\n\n/**\n * A meter (Data Model §2.3): one percent, saturated at 0 and 100 with `SP002`; a non-finite one\n * draws the empty track. The readout — the percent, or `readout` — is printed under the drawing,\n * with the `caption` that names it (REQ-080, REQ-081).\n */\nexport function buildScalar(family: ScalarFamily, props: ScalarProps, context: RecipeContext): ChartModel {\n const { chart } = family;\n const { locale } = context;\n const raw = props.percent === undefined ? SCALAR_DEMO : props.percent;\n let value: number | undefined;\n if (typeof raw !== 'number' || !Number.isFinite(raw)) {\n warnValue(chart, 'percent', `The percent is ${String(raw)}; a meter needs a finite number, so none is drawn.`);\n } else {\n value = Math.min(Math.max(raw, 0), 100);\n if (value !== raw) warnValue(chart, 'percent', `The percent is ${raw}; it is drawn at ${value}, the end of the 0-100 range.`);\n }\n const printed = value === undefined ? '—' : (props.readout ?? `${formatNumber(value, locale, { maximumFractionDigits: 1 })}%`);\n const caption = props.caption && props.caption !== '' ? props.caption : undefined;\n\n const base = modelBase(chart, props, context, family.fallbackName, { columns: ['measure', 'value'], rows: [[caption ?? 'value', printed]] });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const frame = family.frameIn(plot);\n const drawing = family.draw(frame, value);\n const strokes: Stroke[] = [...card.strokes, ...drawing.strokes];\n const labels: TextLabel[] = [...card.labels, ...drawing.labels];\n const at = family.readoutAt(frame);\n labels.push({ x: frame.cx, y: at.value, text: printed, kind: 'value', part: 'text', anchor: 'middle' });\n if (caption) labels.push({ x: frame.cx, y: at.caption, text: caption, kind: 'tick', part: 'axis', anchor: 'middle' });\n const hitAreas: HitArea[] = [];\n if (value !== undefined && drawing.tip) {\n hitAreas.push({ seriesKey: 'value', index: 0, datum: { value }, value, x: drawing.tip.x, y: drawing.tip.y });\n }\n const description = props.description ?? `${base.name}. ${caption ?? 'The value'} at ${printed}${props.readout && value !== undefined ? ` (${formatNumber(value, locale, undefined)}% of the range)` : ' of the range'}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n","import type { ChartRecipe, GaugeArcProps, RecipeContext } from '../../types';\nimport { PLOT_INSET } from '../shared/cartesian';\nimport { arcPath, pointAt, sectorPath } from '../shared/polar';\nimport { buildScalar, type ScalarFamily } from '../shared/scalar';\n\n/** The gauge sweeps 240°, from 8 o'clock over the top to 4 o'clock. */\nconst START = (-2 * Math.PI) / 3;\nconst SPAN = (4 * Math.PI) / 3;\n/** Inner radius of the band, as a share of the outer. */\nconst BAND = 0.8;\n\nconst FAMILY: ScalarFamily = {\n chart: 'GaugeArc',\n fallbackName: 'Gauge',\n // A 240° arc reaches half a radius below the centre: it needs 1.5 radii of height.\n frameIn: (area) => {\n const radius = Math.max(Math.min(area.width / 2, area.height / 1.5) - PLOT_INSET, 1);\n return { cx: area.x + area.width / 2, cy: area.y + (area.height - 1.5 * radius) / 2 + radius, radius };\n },\n // Inside the ring, which the value never crosses.\n readoutAt: (frame) => ({ value: frame.cy + 2, caption: frame.cy + 16 }),\n draw: (frame, value) => {\n const inner = frame.radius * BAND;\n const middle = (inner + frame.radius) / 2;\n const strokes = [{ d: arcPath(frame, middle, START, START + SPAN), role: 'ornament' as const, part: 'grid' as const }];\n if (value === undefined) return { strokes, labels: [] };\n const end = START + (value / 100) * SPAN;\n const d = sectorPath(frame, { inner, outer: frame.radius, start: START, end });\n return { strokes: d ? [...strokes, { d, role: 'encoding' as const, part: 'ink' as const, tone: 2 as const }] : strokes, labels: [], tip: pointAt(frame, end, middle) };\n },\n};\n\n/** `GaugeArc` recipe (REQ-080): a 240° arc swept to a percent, the readout at its centre. */\nexport const gaugeArc: ChartRecipe<GaugeArcProps> = /* @__PURE__ */ Object.freeze({\n name: 'GaugeArc',\n build: (props: GaugeArcProps, context: RecipeContext) => buildScalar(FAMILY, props, context),\n});\n","import type { ChartRecipe, MeterChartProps, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { arcPath, pointAt } from '../shared/polar';\nimport { buildScalar, type ScalarFamily } from '../shared/scalar';\nimport { halfCircleFrame } from '../shared/tracks';\n\n/** The meter sweeps 180°, from 9 o'clock over the top to 3 o'clock. */\nconst START = -Math.PI / 2;\nconst SPAN = Math.PI;\nconst TICKS = [0, 25, 50, 75, 100];\n/** Needle length, as a share of the radius. */\nconst NEEDLE = 0.86;\n\nconst FAMILY: ScalarFamily = {\n chart: 'MeterChart',\n fallbackName: 'Meter',\n // Under the pivot, clear of the needle, which sweeps only the upper half: the 30 px readout\n // stands up to 22 px above its baseline, and the caption goes under it.\n frameIn: (area) => halfCircleFrame(area, 46),\n readoutAt: (frame) => ({ value: frame.cy + 29, caption: frame.cy + 42 }),\n draw: (frame, value) => {\n const strokes: Stroke[] = [{ d: arcPath(frame, frame.radius, START, START + SPAN), role: 'ornament', part: 'grid' }];\n const labels: TextLabel[] = [];\n for (const tick of TICKS) {\n const angle = START + (tick / 100) * SPAN;\n const a = pointAt(frame, angle, frame.radius * 0.9);\n const b = pointAt(frame, angle, frame.radius);\n strokes.push({ d: `M${a.x},${a.y}L${b.x},${b.y}`, role: 'ornament', part: 'rule' });\n }\n labels.push({ x: frame.cx - frame.radius, y: frame.cy + 11, text: '0', kind: 'tick', part: 'axis', anchor: 'middle' });\n labels.push({ x: frame.cx + frame.radius, y: frame.cy + 11, text: '100', kind: 'tick', part: 'axis', anchor: 'middle' });\n if (value === undefined) return { strokes, labels };\n // The needle is the encoding: a straight line from the pivot to the value.\n const tip = pointAt(frame, START + (value / 100) * SPAN, frame.radius * NEEDLE);\n strokes.push({ d: `M${frame.cx},${frame.cy}L${tip.x},${tip.y}`, role: 'encoding', part: 'ink' });\n return { strokes, labels, tip };\n },\n};\n\n/** `MeterChart` recipe (REQ-081): a semicircular meter whose needle points at a percent. */\nexport const meterChart: ChartRecipe<MeterChartProps> = /* @__PURE__ */ Object.freeze({\n name: 'MeterChart',\n build: (props: MeterChartProps, context: RecipeContext) => buildScalar(FAMILY, props, context),\n});\n","import type { Datum } from '../../types';\n\n/**\n * Demo dataset of `WindRose` (REQ-089, REQ-093) — a real record, never a synthetic one (Phase 3 Done\n * criterion): the 742 hourly METAR reports of wind at Des Moines International Airport (ASOS\n * station DSM, Iowa, USA) for March 2024, UTC, as `[bearing°, speed kt]`; `bearing` is where the\n * wind blows from, 0 = north, and a calm is reported as `[0, 0]`. The two reports with a missing\n * value are left out.\n *\n * Source: Iowa Environmental Mesonet, ASOS/AWOS archive, Iowa State University —\n * https://mesonet.agron.iastate.edu/request/download.phtml (station DSM, 2024-03-01 to 2024-04-01,\n * fields `drct` and `sknt`, routine reports only), retrieved 2026-09-24.\n */\nexport const WIND_ROSE_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n [180, 11], [170, 11], [180, 9], [180, 10], [170, 7], [180, 11], [180, 10], [180, 9], [160, 7], [150, 6], [140, 9], [150, 8],\n [160, 8], [180, 9], [190, 8], [200, 12], [190, 16], [210, 16], [170, 17], [180, 16], [190, 15], [190, 17], [190, 13], [180, 14],\n [170, 9], [170, 11], [160, 9], [150, 6], [150, 7], [150, 8], [160, 9], [160, 9], [140, 7], [150, 9], [150, 7], [140, 7],\n [140, 8], [150, 9], [160, 12], [170, 10], [170, 11], [140, 14], [150, 15], [150, 17], [140, 16], [140, 18], [150, 21], [140, 14],\n [140, 13], [130, 12], [140, 16], [150, 13], [160, 15], [160, 14], [160, 16], [160, 18], [170, 15], [170, 17], [170, 19], [170, 20],\n [170, 20], [180, 20], [180, 22], [190, 21], [180, 26], [190, 20], [200, 22], [210, 29], [210, 27], [250, 22], [270, 17], [300, 16],\n [320, 13], [330, 8], [350, 8], [30, 7], [20, 10], [110, 7], [100, 9], [80, 7], [90, 7], [70, 9], [40, 10], [20, 12],\n [50, 17], [30, 9], [50, 15], [50, 12], [30, 15], [30, 9], [30, 13], [40, 11], [20, 12], [10, 15], [20, 10], [20, 16],\n [40, 14], [30, 12], [10, 10], [360, 9], [10, 11], [360, 14], [10, 10], [10, 10], [20, 4], [20, 6], [350, 6], [350, 4],\n [360, 6], [30, 6], [40, 8], [10, 5], [0, 0], [320, 3], [0, 0], [0, 0], [310, 7], [310, 11], [330, 6], [350, 5],\n [350, 5], [20, 3], [10, 3], [0, 0], [80, 5], [0, 0], [0, 0], [0, 0], [0, 0], [280, 3], [0, 0], [0, 0],\n [70, 6], [110, 8], [130, 5], [90, 9], [110, 10], [130, 12], [120, 10], [110, 11], [110, 8], [110, 11], [100, 10], [110, 7],\n [100, 10], [140, 9], [70, 12], [120, 10], [100, 9], [100, 7], [100, 6], [100, 9], [100, 6], [80, 7], [80, 8], [70, 8],\n [80, 9], [80, 10], [100, 8], [80, 7], [80, 8], [60, 9], [90, 10], [90, 8], [90, 7], [90, 12], [80, 10], [80, 14],\n [80, 12], [50, 9], [30, 10], [40, 11], [40, 7], [30, 9], [30, 8], [30, 10], [20, 11], [360, 13], [360, 13], [360, 12],\n [350, 12], [350, 11], [340, 13], [350, 11], [330, 13], [330, 10], [330, 11], [330, 10], [330, 7], [310, 7], [340, 10], [340, 14],\n [340, 9], [340, 9], [340, 10], [330, 13], [340, 10], [320, 8], [310, 8], [310, 6], [310, 6], [310, 7], [310, 8], [290, 5],\n [310, 8], [320, 10], [330, 13], [320, 15], [320, 11], [290, 15], [310, 17], [310, 18], [300, 18], [320, 16], [330, 8], [320, 7],\n [330, 7], [350, 3], [350, 3], [310, 4], [300, 3], [300, 3], [280, 3], [270, 3], [240, 3], [300, 3], [270, 3], [0, 0],\n [0, 0], [0, 0], [150, 4], [170, 5], [220, 6], [230, 7], [180, 10], [190, 8], [200, 6], [200, 9], [170, 7], [150, 8],\n [150, 10], [150, 9], [160, 9], [150, 8], [160, 8], [180, 9], [190, 8], [200, 12], [190, 11], [200, 13], [200, 12], [210, 13],\n [220, 12], [220, 16], [230, 15], [210, 14], [220, 16], [210, 15], [220, 18], [200, 21], [220, 20], [220, 16], [210, 13], [200, 13],\n [200, 11], [190, 12], [200, 11], [200, 10], [200, 11], [200, 11], [200, 9], [200, 10], [210, 12], [220, 9], [210, 10], [210, 10],\n [210, 9], [220, 15], [240, 12], [270, 8], [240, 5], [280, 6], [200, 5], [180, 7], [220, 5], [0, 0], [0, 0], [0, 0],\n [20, 3], [30, 3], [10, 3], [70, 4], [0, 0], [150, 4], [0, 0], [0, 0], [80, 5], [60, 4], [70, 4], [50, 3],\n [90, 7], [100, 8], [150, 4], [170, 8], [140, 6], [90, 9], [100, 9], [80, 9], [100, 11], [90, 10], [100, 8], [90, 7],\n [90, 5], [80, 6], [40, 6], [70, 6], [100, 7], [100, 5], [100, 9], [180, 5], [80, 6], [40, 6], [50, 23], [70, 9],\n [360, 5], [350, 3], [360, 7], [20, 12], [20, 10], [20, 12], [40, 12], [30, 11], [40, 13], [30, 12], [20, 11], [40, 13],\n [10, 7], [360, 5], [20, 4], [30, 5], [330, 5], [320, 5], [330, 6], [340, 7], [350, 5], [320, 10], [320, 11], [330, 9],\n [340, 9], [320, 8], [300, 6], [300, 9], [320, 10], [310, 14], [280, 11], [320, 10], [290, 11], [290, 12], [300, 9], [290, 7],\n [280, 5], [210, 8], [220, 5], [260, 3], [230, 8], [240, 7], [230, 10], [230, 11], [250, 13], [250, 15], [250, 18], [260, 11],\n [270, 14], [300, 16], [310, 21], [310, 21], [310, 20], [310, 25], [290, 23], [300, 20], [300, 18], [310, 20], [300, 16], [300, 14],\n [310, 15], [320, 12], [320, 10], [320, 10], [310, 10], [310, 9], [310, 10], [310, 8], [330, 7], [330, 8], [300, 7], [320, 7],\n [360, 7], [320, 18], [330, 16], [310, 21], [340, 16], [320, 20], [330, 17], [320, 22], [320, 17], [330, 16], [320, 18], [340, 10],\n [330, 11], [320, 14], [330, 9], [320, 11], [320, 9], [320, 13], [320, 10], [320, 13], [320, 12], [320, 11], [320, 12], [310, 14],\n [320, 12], [310, 15], [320, 12], [320, 12], [320, 15], [280, 11], [300, 12], [270, 12], [280, 11], [260, 11], [250, 6], [240, 6],\n [220, 6], [210, 7], [210, 10], [210, 10], [210, 10], [220, 10], [210, 12], [220, 14], [220, 11], [230, 9], [250, 10], [260, 9],\n [270, 11], [310, 16], [330, 11], [310, 9], [340, 13], [320, 12], [320, 12], [310, 18], [340, 11], [320, 17], [300, 12], [310, 8],\n [300, 5], [360, 11], [10, 9], [350, 6], [10, 6], [10, 11], [350, 9], [330, 13], [350, 9], [330, 14], [340, 8], [350, 10],\n [360, 13], [360, 13], [20, 10], [350, 11], [350, 9], [360, 11], [350, 8], [40, 10], [30, 7], [10, 11], [340, 7], [10, 4],\n [10, 4], [30, 9], [40, 8], [50, 8], [60, 6], [60, 4], [60, 7], [70, 8], [70, 11], [60, 8], [80, 6], [70, 8],\n [100, 10], [120, 9], [70, 8], [120, 8], [80, 11], [120, 8], [120, 11], [90, 6], [120, 11], [100, 14], [100, 11], [110, 7],\n [110, 9], [100, 10], [110, 10], [120, 10], [130, 10], [90, 6], [20, 6], [60, 10], [50, 16], [20, 13], [50, 11], [90, 11],\n [50, 6], [30, 8], [360, 9], [360, 8], [350, 8], [350, 12], [360, 12], [360, 12], [10, 10], [360, 12], [360, 9], [10, 11],\n [360, 10], [360, 9], [350, 6], [360, 5], [360, 5], [10, 5], [360, 4], [360, 3], [360, 6], [360, 6], [20, 5], [20, 7],\n [30, 5], [70, 7], [70, 8], [80, 12], [90, 5], [120, 9], [120, 5], [110, 7], [100, 10], [110, 13], [110, 13], [120, 13],\n [100, 13], [110, 14], [100, 11], [110, 11], [110, 11], [100, 8], [90, 10], [90, 10], [90, 11], [90, 13], [100, 15], [110, 13],\n [100, 13], [100, 10], [90, 8], [90, 11], [100, 13], [100, 11], [110, 10], [120, 10], [130, 12], [140, 11], [110, 5], [120, 5],\n [80, 11], [100, 9], [90, 8], [120, 11], [120, 11], [130, 12], [140, 11], [130, 11], [130, 14], [130, 15], [130, 11], [130, 12],\n [160, 5], [160, 10], [150, 6], [160, 15], [180, 15], [180, 10], [150, 10], [160, 16], [150, 14], [130, 12], [130, 12], [150, 15],\n [150, 13], [150, 8], [200, 7], [200, 5], [320, 7], [310, 9], [300, 13], [340, 6], [310, 19], [310, 17], [310, 15], [300, 16],\n [310, 18], [300, 22], [320, 19], [300, 22], [300, 19], [300, 22], [290, 20], [290, 17], [300, 22], [280, 20], [300, 20], [310, 18],\n [310, 19], [290, 19], [300, 14], [300, 19], [300, 12], [280, 17], [300, 12], [300, 11], [300, 11], [280, 8], [290, 11], [290, 9],\n [290, 10], [270, 13], [290, 12], [280, 12], [310, 12], [290, 14], [290, 12], [270, 9], [240, 13], [210, 14], [240, 11], [240, 7],\n [230, 5], [220, 5], [180, 5], [180, 4], [170, 7], [180, 5], [170, 4], [70, 4], [140, 6], [30, 3], [60, 3], [90, 4],\n [0, 0], [100, 5], [110, 8], [90, 5], [50, 6], [60, 6], [0, 0], [0, 0], [20, 7], [40, 7], [60, 9], [60, 8],\n [70, 8], [80, 9], [80, 10], [80, 9], [90, 11], [100, 11], [90, 7], [90, 8], [100, 10], [100, 9], [100, 8], [110, 11],\n [100, 11], [110, 11], [100, 13], [100, 11], [190, 18], [160, 13], [180, 13], [160, 15], [180, 11], [120, 6], [70, 7], [70, 8],\n [80, 8], [70, 5], [330, 5], [10, 10], [350, 6], [280, 9], [300, 13], [320, 15], [320, 13], [310, 12], [310, 14], [330, 8],\n [330, 13], [340, 12], [330, 12], [350, 8], [340, 9], [360, 5], [30, 4], [10, 10], [360, 9], [350, 6], [360, 4], [10, 8],\n [10, 8], [30, 8], [20, 8], [30, 6], [20, 7], [30, 11], [20, 8], [30, 9], [40, 8], [30, 5], [30, 6], [50, 8],\n [60, 11], [50, 8], [90, 9], [50, 12], [80, 8], [70, 15], [80, 12], [90, 10], [80, 11], [70, 12],\n ].map(([bearing, speed]) => Object.freeze({ bearing, speed })),\n);\n","import { linearScale } from '../../scales/scales';\nimport type { ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke, TextLabel, ToneLevel, WindRoseProps } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { finite, warnValue } from '../shared/cells';\nimport { accessorName, formatNumber, read } from '../shared/format';\nimport { arcPath, pointAt, polarFrame, RIM_LABELS, rimLabels, sectorLegend, sectorPath } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { WIND_ROSE_DEMO } from './demo';\n\nconst CHART = 'WindRose';\nconst COUNTS = [4, 8, 16, 32];\nconst DEFAULT_SECTORS = 16;\nconst DEFAULT_BINS: readonly number[] = [5, 10, 15, 20];\nconst POINTS_16 = ['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW'];\nconst BIN_TONES: readonly ToneLevel[] = [1, 2, 3, 4];\n/** Share of each sector's angle left empty on either side. */\nconst SECTOR_GAP = 0.08;\nconst LEGEND_ASPECT = 1.5;\nconst LEGEND_GAP = 14;\n\n/** The compass name of sector `k` of `count`: the 16 points, or degrees for 32 sectors. */\nfunction compass(k: number, count: number, locale: string): string {\n if (count <= 16) return POINTS_16[(k * 16) / count] as string;\n return `${formatNumber((k * 360) / count, locale, { maximumFractionDigits: 2 })}°`;\n}\n\nconst validBins = (bins: readonly number[] | undefined): bins is readonly number[] =>\n !!bins && bins.length > 0 && bins.every((b, i) => Number.isFinite(b) && b > 0 && (i === 0 || b > (bins[i - 1] as number)));\n\nfunction buildWindRose(props: WindRoseProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? WIND_ROSE_DEMO;\n const bearingKey = usesDemo ? 'bearing' : (props.bearingKey ?? 'bearing');\n const valueKey = usesDemo ? 'speed' : (props.valueKey ?? 'speed');\n const { locale } = context;\n const bearingName = accessorName(bearingKey, 'bearing');\n const speedName = accessorName(valueKey, 'speed');\n\n const count = props.sectors === undefined || COUNTS.includes(props.sectors) ? (props.sectors ?? DEFAULT_SECTORS) : DEFAULT_SECTORS;\n if (count !== (props.sectors ?? DEFAULT_SECTORS)) warnValue(CHART, 'sectors', `${String(props.sectors)} sectors cannot divide a compass; ${DEFAULT_SECTORS} are drawn.`);\n const bins = props.bins === undefined ? DEFAULT_BINS : validBins(props.bins) ? props.bins : DEFAULT_BINS;\n if (bins !== (props.bins ?? DEFAULT_BINS)) warnValue(CHART, 'bins', 'The speed bins must be positive and ascending; the defaults are used.');\n const binLabels = [\n `< ${formatNumber(bins[0] as number, locale, undefined)}`,\n ...bins.slice(1).map((b, i) => `${formatNumber(bins[i] as number, locale, undefined)}–${formatNumber(b, locale, undefined)}`),\n `≥ ${formatNumber(bins.at(-1) as number, locale, undefined)}`,\n ];\n\n // Each observation: a sector by bearing and a bin by speed; a calm has neither.\n const width = (2 * Math.PI) / count;\n const tally = Array.from({ length: count }, () => new Array<number>(binLabels.length).fill(0));\n let calm = 0;\n let observed = 0;\n data.forEach((datum, index) => {\n const bearing = finite(read(bearingKey, datum, index));\n const speed = finite(read(valueKey, datum, index));\n if (bearing === undefined || speed === undefined || speed < 0) {\n warnValue(CHART, bearing === undefined ? bearingName : speedName, `Row ${index} lacks a finite bearing or a speed ≥ 0; it is omitted.`);\n return;\n }\n observed += 1;\n if (speed === 0) {\n calm += 1;\n return;\n }\n const k = Math.round((((bearing % 360) + 360) % 360) / (360 / count)) % count;\n const bin = bins.filter((b) => speed >= b).length;\n (tally[k] as number[])[bin] = ((tally[k] as number[])[bin] as number) + 1;\n });\n const pct = (n: number) => (observed > 0 ? (n / observed) * 100 : 0);\n const printed = (n: number) => `${formatNumber(pct(n), locale, { maximumFractionDigits: 0 })}%`;\n const totals = tally.map((row) => row.reduce((a, b) => a + b, 0));\n\n const base = modelBase(CHART, props, context, 'Wind rose', {\n columns: ['direction', 'share', ...binLabels],\n rows: tally.map((row, k) => [compass(k, count, locale), printed(totals[k] as number), ...row.map(printed)]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n if (observed === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const withLegend = plot.width >= plot.height * LEGEND_ASPECT;\n const roseArea = withLegend ? { x: plot.x, y: plot.y, width: plot.height, height: plot.height } : plot;\n const frame = polarFrame(roseArea, RIM_LABELS);\n const largest = Math.max(...totals.map(pct));\n const radius = linearScale([0, Math.max(largest, Number.MIN_VALUE)], [0, frame.radius], { chart: CHART, property: 'share', padding: 0, nice: true });\n\n // Rings at the share ticks (ornament), labelled between the first two sectors.\n for (const tick of radius.ticks(3)) {\n const r = radius(tick);\n if (r <= 0 || r > frame.radius + 0.01) continue;\n strokes.push({ d: arcPath(frame, r, 0, 2 * Math.PI), role: 'ornament', part: 'grid' });\n // The outermost ring's value would sit among the compass names; the inner rings give the scale.\n if (r > frame.radius - RIM_LABELS) continue;\n const at = pointAt(frame, width / 2, r);\n labels.push({ x: at.x + 2, y: at.y - 2, text: `${formatNumber(tick, locale, { maximumFractionDigits: 0 })}%`, kind: 'tick', part: 'axis', anchor: 'start' });\n }\n\n tally.forEach((row, k) => {\n const start = k * width - width / 2 + width * SECTOR_GAP;\n const end = (k + 1) * width - width / 2 - width * SECTOR_GAP;\n // Stacked outward from the calmest bin: a band's outer edge is the running share.\n let running = 0;\n row.forEach((n, bin) => {\n if (n === 0) return;\n const inner = radius(pct(running));\n running += n;\n const d = sectorPath(frame, { inner, outer: radius(pct(running)), start, end });\n if (d) strokes.push({ d, role: 'encoding', part: 'ink', tone: BIN_TONES[bin % BIN_TONES.length] as ToneLevel });\n });\n const tip = pointAt(frame, k * width, radius(pct(running)));\n const direction = compass(k, count, locale);\n hitAreas.push({ seriesKey: 'share', index: k, datum: { direction, share: pct(running) }, value: pct(running), x: tip.x, y: tip.y });\n });\n labels.push(...rimLabels(frame, tally.map((_, k) => ({ angle: k * width, text: compass(k, count, locale) })), 16));\n\n const calmText = `calm ${printed(calm)}`;\n if (withLegend) {\n const x = roseArea.x + roseArea.width + LEGEND_GAP;\n const area = { x, y: plot.y, width: Math.max(plot.x + plot.width - x, 1), height: plot.height - 16 };\n const binTotals = binLabels.map((_, bin) => tally.reduce((sum, row) => sum + (row[bin] as number), 0));\n const key = sectorLegend(area, binLabels.map((name, bin) => ({ name, share: printed(binTotals[bin] as number), tone: BIN_TONES[bin % BIN_TONES.length] as ToneLevel })));\n strokes.push(...key.strokes);\n labels.push(...key.labels);\n labels.push({ x: x + 14, y: plot.y + plot.height - 4, text: calmText, kind: 'tick', part: 'axis', anchor: 'start' });\n } else {\n labels.push({ x: plot.x, y: plot.y + plot.height - 4, text: calmText, kind: 'tick', part: 'axis', anchor: 'start' });\n }\n\n const prevailing = totals.indexOf(Math.max(...totals));\n const description =\n props.description ??\n `${base.name}. Wind rose of ${observed} observations in ${count} sectors; ${\n (totals[prevailing] as number) > 0 ? `most often from ${compass(prevailing, count, locale)} (${printed(totals[prevailing] as number)})` : 'no wind from any direction'\n }; calm ${printed(calm)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `WindRose` recipe (REQ-089): the share of observations per compass sector, stacked by speed. */\nexport const windRose: ChartRecipe<WindRoseProps> = /* @__PURE__ */ Object.freeze({ name: 'WindRose', build: buildWindRose });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `ChordRing` (REQ-093): visitors moving between five sections of a site. Frozen (Data Model §4). */\nexport const CHORD_RING_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { source: 'Home', target: 'Shop', value: 42 },\n { source: 'Home', target: 'Blog', value: 28 },\n { source: 'Blog', target: 'Shop', value: 16 },\n { source: 'Shop', target: 'Cart', value: 35 },\n { source: 'Cart', target: 'Shop', value: 12 },\n { source: 'Blog', target: 'Home', value: 9 },\n { source: 'Help', target: 'Cart', value: 7 },\n { source: 'Shop', target: 'Help', value: 11 },\n ].map((row) => Object.freeze(row)),\n);\n","import { chordDirected } from 'd3-chord';\nimport { diagnose } from '../../diagnostics/diagnose';\nimport type { ChartModel, ChartRecipe, ChordRingProps, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { finite, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { pointAt, polarFrame, RIM_LABELS, rimLabels, ringTone, sectorPath, type PolarFrame } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { CHORD_RING_DEMO } from './demo';\n\nconst CHART = 'ChordRing';\n/** The v1 ceiling: ribbons grow with the square of the categories (PRD NFR \"Data volume\"). */\nconst CEILING = 12;\nconst OTHER = 'Other';\n/** Width of the category band, as a share of the radius. */\nconst BAND = 0.08;\nconst PAD = 0.04;\n\n/** An arc command along radius `r` to angle `to`, clockwise, as the ribbon ends need. */\nfunction along(frame: PolarFrame, r: number, from: number, to: number): string {\n const p = pointAt(frame, to, r);\n return `A${r},${r},0,${to - from > Math.PI ? 1 : 0},1,${p.x},${p.y}`;\n}\n\n/**\n * A ribbon (DD-005): out along the source's span, a quadratic curve through the centre to the\n * target's span, along it, and back through the centre — d3's ribbon, written with the polar\n * frame's exact arcs so it is placed like every other polar path.\n */\nfunction ribbonPath(frame: PolarFrame, r: number, s0: number, s1: number, t0: number, t1: number): string {\n const start = pointAt(frame, s0, r);\n const target = pointAt(frame, t0, r);\n const c = `${frame.cx},${frame.cy}`;\n return `M${start.x},${start.y}${along(frame, r, s0, s1)}Q${c},${target.x},${target.y}${along(frame, r, t0, t1)}Q${c},${start.x},${start.y}Z`;\n}\n\nfunction buildChordRing(props: ChordRingProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? CHORD_RING_DEMO;\n const sourceKey = usesDemo ? 'source' : (props.sourceKey ?? 'source');\n const targetKey = usesDemo ? 'target' : (props.targetKey ?? 'target');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n const most = props.maxCategories !== undefined && Number.isInteger(props.maxCategories) && props.maxCategories >= 2 ? props.maxCategories : CEILING;\n\n // Data Model §2.7: a flow needs both ends and a value > 0.\n const flows: { index: number; source: string; target: string; value: number }[] = [];\n data.forEach((datum, index) => {\n const rawSource = read(sourceKey, datum, index);\n const rawTarget = read(targetKey, datum, index);\n const value = finite(read(valueKey, datum, index));\n if (rawSource === undefined || rawSource === null || rawSource === '' || rawTarget === undefined || rawTarget === null || rawTarget === '' || value === undefined || value <= 0) {\n warnValue(CHART, valueName, `Row ${index} lacks a source, a target or a ${valueName} > 0; it is omitted.`);\n return;\n }\n flows.push({ index, source: formatCategory(rawSource, locale), target: formatCategory(rawTarget, locale), value });\n });\n\n // The categories, in order of first appearance; past the ceiling the smallest merge into \"Other\".\n const throughput = new Map<string, number>();\n for (const f of flows) {\n throughput.set(f.source, (throughput.get(f.source) ?? 0) + f.value);\n throughput.set(f.target, (throughput.get(f.target) ?? 0) + f.value);\n }\n const all = [...throughput.keys()];\n // The merge bucket never takes the name of a real category.\n let other = OTHER;\n while (all.includes(other)) other = `${other} (merged)`;\n // A warning (API Spec §11): stripped from production builds like every other.\n if (process.env.NODE_ENV !== 'production' && (all.length > CEILING || all.length > most)) {\n diagnose('SP010', CHART, {\n property: 'maxCategories',\n message: `${all.length} categories${all.length > most ? `; the ${all.length - most + 1} smallest are merged into \"${other}\"` : ''}.`,\n });\n }\n const kept = new Set(all.length > most ? [...all].sort((a, b) => (throughput.get(b) ?? 0) - (throughput.get(a) ?? 0)).slice(0, most - 1) : all);\n const categories = [...all.filter((c) => kept.has(c)), ...(all.length > most ? [other] : [])];\n const slot = (name: string) => categories.indexOf(kept.has(name) ? name : other);\n\n // One ribbon per directed pair of categories, in order of its first row. Rows repeating a pair\n // are summed into one ribbon, and warned; flows merged into \"Other\" were warned by SP010.\n const pairs = new Map<string, { i: number; j: number; index: number; value: number }>();\n const seenPairs = new Map<string, number>();\n for (const f of flows) {\n const raw = `${f.source}\\u0000${f.target}`;\n const earlier = seenPairs.get(raw);\n if (earlier === undefined) seenPairs.set(raw, f.index);\n else warnValue(CHART, valueName, `Rows ${earlier} and ${f.index} both run ${f.source} → ${f.target}; their values are summed into one ribbon.`);\n const [i, j] = [slot(f.source), slot(f.target)];\n const pair = pairs.get(`${i}>${j}`);\n if (pair) pair.value += f.value;\n else pairs.set(`${i}>${j}`, { i, j, index: f.index, value: f.value });\n }\n const ribbonsInOrder = [...pairs.values()];\n\n // A ribbon is named by both its ends, as a sankey flow is, so the readout says where it goes.\n const base = modelBase(CHART, props, context, 'Chord ring', {\n columns: ['flow', valueName],\n rows: ribbonsInOrder.map((p) => [`${categories[p.i]} → ${categories[p.j]}`, formatValue(p.value, locale, numberFormat)]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n if (flows.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n // The square matrix is ours (DD-005); d3-chord allocates the angles, one chord per directed cell.\n const n = categories.length;\n const matrix = Array.from({ length: n }, () => new Array<number>(n).fill(0));\n for (const p of ribbonsInOrder) (matrix[p.i] as number[])[p.j] = p.value;\n // The gaps never take more than a quarter of the turn, so hundreds of categories keep an extent.\n const chords = chordDirected().padAngle(Math.min(PAD, (Math.PI / 2) / n))(matrix);\n\n const frame = polarFrame(plot, RIM_LABELS);\n const inner = frame.radius * (1 - BAND);\n chords.groups.forEach((g) => {\n const d = sectorPath(frame, { inner, outer: frame.radius, start: g.startAngle, end: g.endAngle });\n if (d) strokes.push({ d, role: 'encoding', part: 'ink', tone: ringTone(g.index, n) });\n });\n // Ribbons in the order of their first row, so drawing and keyboard follow the consumer's data.\n const order = (c: (typeof chords)[number]) => {\n const position = ribbonsInOrder.indexOf(pairs.get(`${c.source.index}>${c.target.index}`)!);\n return position < 0 ? Number.MAX_SAFE_INTEGER : position;\n };\n for (const c of [...chords].sort((x, y) => order(x) - order(y))) {\n // A ribbon is a surface: hatched in its source's tone, which ties it to the arc it leaves.\n strokes.push({ d: ribbonPath(frame, inner, c.source.startAngle, c.source.endAngle, c.target.startAngle, c.target.endAngle), role: 'encoding', part: 'ink', tone: ringTone(c.source.index, n) });\n const pair = pairs.get(`${c.source.index}>${c.target.index}`);\n if (!pair) continue;\n // The ribbon's midpoint: a quarter of each end and half the centre, on its quadratic curves.\n const a = pointAt(frame, (c.source.startAngle + c.source.endAngle) / 2, inner);\n const b = pointAt(frame, (c.target.startAngle + c.target.endAngle) / 2, inner);\n const datum = data[pair.index] ?? {};\n hitAreas.push({ seriesKey: valueName, index: ribbonsInOrder.indexOf(pair), datum, value: c.source.value, x: 0.25 * a.x + 0.5 * frame.cx + 0.25 * b.x, y: 0.25 * a.y + 0.5 * frame.cy + 0.25 * b.y });\n }\n labels.push(...rimLabels(frame, chords.groups.map((g) => ({ angle: (g.startAngle + g.endAngle) / 2, text: categories[g.index] as string }))));\n\n const busiest = chords.groups.reduce((x, y) => (y.value > x.value ? y : x));\n const description =\n props.description ??\n `${base.name}. Chord ring of ${flows.length} flows between ${n} categories; the busiest is ${categories[busiest.index]}, sending ${formatNumber(\n (matrix[busiest.index] as number[]).reduce((s, v) => s + v, 0),\n locale,\n numberFormat,\n )}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `ChordRing` recipe (REQ-091): directed flows between categories, ribbons over `d3-chord`. */\nexport const chordRing: ChartRecipe<ChordRingProps> = /* @__PURE__ */ Object.freeze({ name: 'ChordRing', build: buildChordRing });\n","import type { Datum } from '../../types';\n\n/**\n * Demo dataset of `OrbitChart` (REQ-093): three years of releases, one orbit per year from the\n * inside out, each release at its day of the year (0-1) and sized by the changes it shipped.\n * Frozen (Data Model §4).\n */\nexport const ORBIT_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { label: '2023', markers: Object.freeze([Object.freeze({ period: 0.08, value: 12 }), Object.freeze({ period: 0.33, value: 30 }), Object.freeze({ period: 0.61, value: 18 }), Object.freeze({ period: 0.9, value: 24 })]) },\n { label: '2024', markers: Object.freeze([Object.freeze({ period: 0.12, value: 20 }), Object.freeze({ period: 0.4, value: 42 }), Object.freeze({ period: 0.66, value: 15 }), Object.freeze({ period: 0.87, value: 33 })]) },\n { label: '2025', markers: Object.freeze([Object.freeze({ period: 0.05, value: 26 }), Object.freeze({ period: 0.29, value: 38 }), Object.freeze({ period: 0.55, value: 50 }), Object.freeze({ period: 0.81, value: 21 })]) },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, Datum, HitArea, OrbitChartProps, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { PLOT_INSET } from '../shared/cartesian';\nimport { finite, warnValue } from '../shared/cells';\nimport { accessorName, circlePath, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { ORBIT_CHART_DEMO } from './demo';\n\nconst CHART = 'OrbitChart';\n/** The orbits are seen at a tilt, as on an armillary sphere: height over width of each ellipse. */\nconst TILT = 0.42;\n/** The innermost orbit's width, as a share of the outermost's. */\nconst HOLE = 0.3;\n/** Radius of the largest marker. */\nconst MARKER = 6;\n\ninterface Marker {\n readonly flat: number;\n readonly orbit: number;\n readonly column: number;\n readonly datum: Datum;\n readonly period: number;\n readonly value: number;\n}\n\n/** A full ellipse as two half arcs, from its top clockwise: a closed path that survives inking. */\nfunction ellipsePath(cx: number, cy: number, a: number, b: number): string {\n return `M${cx},${cy - b}A${a},${b},0,1,1,${cx},${cy + b}A${a},${b},0,1,1,${cx},${cy - b}Z`;\n}\n\nfunction buildOrbitChart(props: OrbitChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const all = props.data ?? ORBIT_CHART_DEMO;\n const markerKey = usesDemo ? 'markers' : (props.markerKey ?? 'markers');\n const periodKey = usesDemo ? 'period' : (props.periodKey ?? 'period');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const shown = props.orbits !== undefined && Number.isInteger(props.orbits) && props.orbits > 0 ? Math.min(props.orbits, all.length) : all.length;\n const data = all.slice(0, shown);\n const periodName = accessorName(periodKey, 'period');\n\n // Every marker, flat, in orbit order: its place in the table is its index (delta-009).\n const rows: string[][] = [];\n const markers: Marker[] = [];\n data.forEach((datum, orbit) => {\n const label = formatCategory(datum.label, locale);\n const list = read(markerKey, datum, orbit);\n // A marker's keyboard column counts the kept markers only, so a dropped one leaves no gap that\n // the arrows cannot cross between orbits (REQ-122).\n let kept = 0;\n (Array.isArray(list) ? list : []).forEach((raw: unknown, column) => {\n const m = (typeof raw === 'object' && raw !== null ? raw : {}) as Datum;\n const period = finite(read(periodKey, m, column));\n const value = finite(m.value);\n rows.push([label, formatValue(period, locale, undefined), formatValue(value, locale, numberFormat)]);\n const flat = rows.length - 1;\n if (period === undefined || period < 0 || period > 1 || value === undefined || value < 0) {\n warnValue(CHART, periodName, `Marker ${column} of orbit \"${label}\" needs a period in 0-1 and a value ≥ 0; it is omitted.`);\n return;\n }\n markers.push({ flat, orbit, column: kept++, datum: { orbit: label, ...m }, period, value });\n });\n });\n\n const base = modelBase(CHART, props, context, 'Orbit chart', { columns: ['orbit', periodName, 'value'], rows });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n if (data.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, all.length === 0);\n\n const cx = plot.x + plot.width / 2;\n const cy = plot.y + plot.height / 2;\n const outer = Math.max(Math.min(plot.width / 2, plot.height / 2 / TILT) - PLOT_INSET - MARKER, 1);\n const hole = outer * HOLE;\n const widthOf = (orbit: number) => (data.length === 1 ? outer : hole + (orbit / (data.length - 1)) * (outer - hole));\n\n data.forEach((datum, orbit) => {\n const a = widthOf(orbit);\n // The orbit names the series; it carries no value, so it is an ornament.\n strokes.push({ d: ellipsePath(cx, cy, a, a * TILT), role: 'ornament', part: 'grid' });\n labels.push({ x: cx - a + 3, y: cy + 3, text: formatCategory(datum.label, locale), kind: 'tick', part: 'axis', anchor: 'start' });\n });\n\n // A marker's place along its orbit is its period; its AREA is its value.\n const largest = Math.max(0, ...markers.map((m) => m.value));\n for (const m of markers) {\n const a = widthOf(m.orbit);\n const angle = m.period * 2 * Math.PI;\n const x = cx + a * Math.sin(angle);\n const y = cy - a * TILT * Math.cos(angle);\n const r = largest > 0 ? MARKER * Math.sqrt(m.value / largest) : 0;\n if (r > 0) strokes.push({ d: circlePath(x, y, r), role: 'encoding', part: 'ink', paint: 'fill' });\n hitAreas.push({ seriesKey: 'value', index: m.flat, datum: m.datum, value: m.value, x, y, box: { x: x - r, y: y - r, width: 2 * r, height: 2 * r }, cell: { column: m.column, row: m.orbit } });\n }\n\n const description =\n props.description ??\n `${base.name}. ${data.length} orbits from the inside out (${data.map((d) => formatCategory(d.label, locale)).join(', ')}) with ${markers.length} markers placed by ${periodName} over the cycle; the largest is ${formatNumber(largest, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `OrbitChart` recipe (REQ-092): nested tilted orbits, markers along them by period, sized by value. */\nexport const orbitChart: ChartRecipe<OrbitChartProps> = /* @__PURE__ */ Object.freeze({ name: 'OrbitChart', build: buildOrbitChart });\n","import type { Datum } from '../../types';\n\n/**\n * Demo dataset of `VolvelleChart` (REQ-093): an on-call wheel — the day, the shift and the team\n * that covers it, read against one index as on a paper volvelle. Frozen (Data Model §4).\n */\nexport const VOLVELLE_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { label: 'Day', segments: Object.freeze(['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']) },\n { label: 'Shift', segments: Object.freeze(['Early', 'Late', 'Night']) },\n { label: 'Team', segments: Object.freeze(['Atlas', 'Borealis', 'Cygnus', 'Draco', 'Eridanus']) },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke, TextLabel, VolvelleChartProps } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { warnValue } from '../shared/cells';\nimport { formatCategory } from '../shared/format';\nimport { checkSectors, pointAt, polarFrame, polarLabel, RIM_LABELS, sectorPath, type PolarFrame } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { VOLVELLE_CHART_DEMO } from './demo';\n\nconst CHART = 'VolvelleChart';\n/** Radius of the empty hub, as a share of the outer radius. */\nconst HUB = 0.22;\n/** Room above the rings for the index pointer. */\nconst POINTER = 7;\n/** Advance of one character of a 9.5 px label, to decide whether a name fits its segment. */\nconst CHAR = 5.2;\n\ninterface Ring {\n readonly label: string;\n readonly segments: readonly string[];\n /** Its place in `data`, which `indexRing` counts, before invalid rings are left out. */\n readonly given: number;\n}\n\n/** Cap height of a 9.5 px label. */\nconst CAP = 7;\n/** Air kept between a name and its segment's edges. */\nconst AIR = 1;\n\n/**\n * Whether a name, centred on `at`, fits its segment: every corner of its box lies inside the ring\n * and between the segment's two edges. A horizontal name at 3 o'clock runs across the ring, at 12\n * along it, so both the radial and the angular room are checked; the table names every segment.\n */\nfunction fits(frame: PolarFrame, name: string, at: { x: number; y: number }, inner: number, outer: number, start: number, end: number): boolean {\n const width = name.length * CHAR;\n const corners = [\n [at.x - width / 2, at.y + 3 - CAP],\n [at.x + width / 2, at.y + 3 - CAP],\n [at.x - width / 2, at.y + 3],\n [at.x + width / 2, at.y + 3],\n ] as const;\n const middle = (start + end) / 2;\n return corners.every(([x, y]) => {\n const r = Math.hypot(x - frame.cx, y - frame.cy);\n // The corner's angle from 12 o'clock, measured from the segment's middle into (-π, π].\n let a = Math.atan2(x - frame.cx, frame.cy - y) - middle;\n a = Math.atan2(Math.sin(a), Math.cos(a));\n return r >= inner + AIR && r <= outer - AIR && Math.abs(a) <= (end - start) / 2 - AIR / Math.max(r, 1);\n });\n}\n\nfunction buildVolvelleChart(props: VolvelleChartProps, context: RecipeContext): ChartModel {\n const all = props.data ?? VOLVELLE_CHART_DEMO;\n const { locale } = context;\n const cap = props.rings !== undefined && Number.isInteger(props.rings) && props.rings > 0 ? props.rings : all.length;\n\n // Data (delta-010): rings from the inside out, each a label and a list of categories.\n const rings: Ring[] = [];\n all.slice(0, cap).forEach((datum, index) => {\n const segments = datum.segments;\n if (!Array.isArray(segments) || segments.length === 0) {\n warnValue(CHART, 'segments', `Ring ${index} has no list of segments; it is omitted.`);\n return;\n }\n checkSectors(CHART, 'segments', segments.length);\n rings.push({ label: formatCategory(datum.label, locale), segments: segments.map((s: unknown) => formatCategory(s, locale)), given: index });\n });\n\n // The index angle: the middle of `indexValue` on `indexRing`; every ring is read there. The demo's\n // rings are addressed like the consumer's: the index is a view prop (REQ-098).\n let ringIndex = props.indexRing === undefined ? 0 : rings.findIndex((r) => r.given === props.indexRing);\n if (ringIndex < 0) {\n if (rings.length > 0) warnValue(CHART, 'indexRing', `Ring ${String(props.indexRing)} does not exist or has no segments; the index reads the first ring.`);\n ringIndex = 0;\n }\n const turned = rings[ringIndex];\n let segment = turned && props.indexValue !== undefined ? turned.segments.indexOf(props.indexValue) : 0;\n if (segment < 0) {\n warnValue(CHART, 'indexValue', `\"${String(props.indexValue)}\" is not on ring \"${turned?.label}\"; the index reads its first segment.`);\n segment = 0;\n }\n const indexAngle = turned ? ((segment + 0.5) * 2 * Math.PI) / turned.segments.length : 0;\n // The segment of each ring holding the index angle, (segment + ½) / n of the turn, found in whole\n // numbers: a boundary shared by two rings (6 and 12 segments) is read exactly, never by rounding.\n const n = turned?.segments.length ?? 1;\n const underIndex = rings.map((r) => Math.floor(((2 * segment + 1) * r.segments.length) / (2 * n)));\n const combined = rings.map((r, k) => `${r.label} ${r.segments[underIndex[k] as number]}`).join(' · ');\n\n const base = modelBase(CHART, props, context, 'Volvelle', {\n columns: ['ring', 'segment', 'under the index'],\n rows: rings.flatMap((r, k) => r.segments.map((s, j) => [r.label, s, j === underIndex[k] ? 'yes' : 'no'])),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n if (rings.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, all.length === 0);\n\n // Room outside the rings for the outermost ring's names, which the pointer shares at 12 o'clock.\n const frame = polarFrame(plot, Math.max(POINTER, RIM_LABELS));\n const hub = frame.radius * HUB;\n const band = (frame.radius - hub) / rings.length;\n // The whole disc is turned so the index angle faces 12 o'clock.\n const turn = -indexAngle;\n let flat = 0;\n rings.forEach((r, k) => {\n const inner = hub + k * band;\n const outer = inner + band;\n const width = (2 * Math.PI) / r.segments.length;\n r.segments.forEach((name, j) => {\n const start = j * width + turn;\n const aligned = j === underIndex[k];\n const d = sectorPath(frame, { inner, outer, start, end: start + width });\n // The segments under the index are marked by tone and named in the readout (REQ-124).\n if (d) strokes.push({ d, role: 'encoding', part: 'ink', ...(aligned ? { tone: 3 as const } : {}) });\n const middle = pointAt(frame, start + width / 2, (inner + outer) / 2);\n if (fits(frame, name, middle, inner, outer, start, start + width)) {\n labels.push({ x: middle.x, y: middle.y + 3, text: name, kind: 'tick', part: 'text', anchor: 'middle' });\n } else if (k === rings.length - 1 && !aligned) {\n // The outermost ring is named around the rim; the segment under the pointer is in the readout.\n labels.push(polarLabel(frame, start + width / 2, outer + 8, name));\n }\n hitAreas.push({ seriesKey: 'segment', index: flat, datum: { ring: r.label, segment: name }, value: j, x: middle.x, y: middle.y, cell: { column: j, row: k } });\n flat += 1;\n });\n });\n\n // The fixed pointer above 12 o'clock, and the combined readout under the disc.\n const tip = frame.cy - frame.radius - 1;\n strokes.push({ d: `M${frame.cx - 4},${tip - POINTER + 1}L${frame.cx + 4},${tip - POINTER + 1}L${frame.cx},${tip}Z`, role: 'ornament', part: 'ink', paint: 'fill' });\n labels.push({ x: plot.x, y: plot.y + plot.height - 4, text: combined, kind: 'tick', part: 'text', anchor: 'start' });\n\n const description = props.description ?? `${base.name}. Volvelle of ${rings.length} rings from the inside out; under the index: ${combined}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `VolvelleChart` recipe (REQ-090): concentric categorical rings read against one index. */\nexport const volvelleChart: ChartRecipe<VolvelleChartProps> = /* @__PURE__ */ Object.freeze({ name: 'VolvelleChart', build: buildVolvelleChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `CandlestickChart` (REQ-093): ten sessions of a price. Frozen (Data Model §4). */\nexport const CANDLESTICK_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { time: 'Mon', open: 102, high: 108, low: 99, close: 106 },\n { time: 'Tue', open: 106, high: 109, low: 101, close: 103 },\n { time: 'Wed', open: 103, high: 105, low: 97, close: 99 },\n { time: 'Thu', open: 99, high: 104, low: 96, close: 103 },\n { time: 'Fri', open: 103, high: 111, low: 102, close: 110 },\n { time: 'Mon', open: 110, high: 114, low: 107, close: 108 },\n { time: 'Tue', open: 108, high: 110, low: 104, close: 109 },\n { time: 'Wed', open: 109, high: 116, low: 108, close: 115 },\n ].map((row) => Object.freeze(row)),\n);\n","import { diagnose } from '../../diagnostics/diagnose';\nimport type { CandlestickChartProps, ChartModel, ChartRecipe, Datum, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, categoryAxis, categoryLabels, checkCount, valueAxis } from '../shared/cartesian';\nimport { finite, rectPath, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { CANDLESTICK_CHART_DEMO } from './demo';\n\nconst CHART = 'CandlestickChart';\nconst BODY_FILL = 0.6;\n\ninterface Candle {\n readonly index: number;\n readonly datum: Datum;\n readonly open: number;\n readonly high: number;\n readonly low: number;\n readonly close: number;\n}\n\nfunction buildCandlestickChart(props: CandlestickChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? CANDLESTICK_CHART_DEMO;\n const timeKey = usesDemo ? 'time' : (props.timeKey ?? 'time');\n const keys = {\n open: usesDemo ? 'open' : (props.openKey ?? 'open'),\n high: usesDemo ? 'high' : (props.highKey ?? 'high'),\n low: usesDemo ? 'low' : (props.lowKey ?? 'low'),\n close: usesDemo ? 'close' : (props.closeKey ?? 'close'),\n };\n const names = { open: accessorName(keys.open, 'open'), high: accessorName(keys.high, 'high'), low: accessorName(keys.low, 'low'), close: accessorName(keys.close, 'close') };\n const { locale } = context;\n const numberFormat = props.numberFormat;\n checkCount(CHART, names.close, data.length);\n\n // Data Model §2.6: low ≤ min(open, close) and max(open, close) ≤ high, or the row is dropped.\n const candles: Candle[] = [];\n data.forEach((datum, index) => {\n const [open, high, low, close] = (['open', 'high', 'low', 'close'] as const).map((k) => finite(read(keys[k], datum, index)));\n if (open === undefined || high === undefined || low === undefined || close === undefined) {\n warnValue(CHART, names.close, `Row ${index} lacks a finite open, high, low or close; it is omitted.`);\n return;\n }\n if (!(low <= Math.min(open, close) && Math.max(open, close) <= high)) {\n warnValue(CHART, names.high, `Row ${index} breaks low ≤ min(open, close) ≤ max(open, close) ≤ high; it is omitted.`);\n return;\n }\n candles.push({ index, datum, open, high, low, close });\n });\n const timeName = accessorName(timeKey, 'time');\n const timeLabels = data.map((datum, index) => formatCategory(read(timeKey, datum, index), locale));\n\n const base = modelBase(CHART, props, context, 'Candlestick chart', {\n columns: [timeName, names.open, names.high, names.low, names.close],\n rows: data.map((datum, index) => [timeLabels[index] ?? '', ...(['open', 'high', 'low', 'close'] as const).map((k) => formatValue(finite(read(keys[k], datum, index)), locale, numberFormat))]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = cartesianPlot(card.area);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const pinned = props.bounds && Number.isFinite(props.bounds[0]) && Number.isFinite(props.bounds[1]) && props.bounds[0] < props.bounds[1] ? props.bounds : undefined;\n if (props.bounds !== undefined && !pinned) warnValue(CHART, 'bounds', `[${String(props.bounds)}] is not two finite prices, lowest first; the bounds are derived from the rows.`);\n if (data.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, true);\n if (candles.length === 0) {\n // REQ-097: with no valid row there is nothing to derive the price bounds from.\n if (!pinned) diagnose('SP009', CHART, { property: 'bounds', message: `None of the ${data.length} rows is a valid candle: open, high, low and close must be finite numbers with low ≤ min(open, close) ≤ max(open, close) ≤ high.` });\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, false);\n }\n\n // REQ-097: the price bounds are `bounds` when given, else the lowest low and the highest high.\n const bounds = pinned ?? [Math.min(...candles.map((c) => c.low)), Math.max(...candles.map((c) => c.high))];\n const axis = valueAxis(plot, bounds, { chart: CHART, property: 'bounds', padding: context.domainPadding, locale, numberFormat, zero: false, nice: !pinned });\n // Pinned bounds may cut a candle: it is drawn clamped to the plot, and the table keeps its prices.\n const [floor, ceiling] = bounds;\n const outside = candles.filter((c) => c.low < floor || c.high > ceiling).length;\n if (outside > 0) warnValue(CHART, 'bounds', `${outside} candles reach outside the pinned bounds; they are drawn clamped to them.`);\n const y = (price: number) => axis.scale(Math.min(Math.max(price, floor), ceiling));\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const slots = categoryAxis(timeLabels, plot, { chart: CHART, property: timeName, padding: context.domainPadding, numeric: false, paddingInner: 0.25, paddingOuter: 0.1 });\n const width = slots.bandwidth * BODY_FILL;\n\n for (const c of candles) {\n const x = slots.at(c.index);\n strokes.push({ d: `M${x},${y(c.high)}V${y(c.low)}`, role: 'encoding', part: 'ink' });\n const top = y(Math.max(c.open, c.close));\n const body = { x: x - width / 2, y: top, width, height: y(Math.min(c.open, c.close)) - top };\n // A rising candle is hollow and a falling one solid: the fill, not a hatch, tells them apart (REQ-124).\n if (body.height > 0) {\n strokes.push(c.close >= c.open ? { d: rectPath(body), role: 'encoding', part: 'ink' } : { d: rectPath(body), role: 'encoding', part: 'ink', paint: 'fill' });\n } else {\n strokes.push({ d: `M${body.x},${top}H${body.x + width}`, role: 'encoding', part: 'ink' });\n }\n hitAreas.push({\n seriesKey: names.close,\n index: c.index,\n datum: c.datum,\n value: c.close,\n x,\n y: y(c.close),\n box: { x: x - slots.bandwidth / 2, y: y(c.high), width: slots.bandwidth, height: y(c.low) - y(c.high) },\n });\n }\n labels.push(...categoryLabels(timeLabels, slots.at, card.area, plot));\n\n const rising = candles.filter((c) => c.close >= c.open).length;\n const description =\n props.description ??\n `${base.name}. Candlestick chart of ${candles.length} sessions, prices from ${formatNumber(bounds[0], locale, numberFormat)} to ${formatNumber(bounds[1], locale, numberFormat)}${\n pinned ? ' (pinned bounds)' : ', from the lowest low to the highest high'\n }; ${rising} rise and ${candles.length - rising} fall.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `CandlestickChart` recipe (REQ-071): OHLC bodies and wicks, bounds derived or pinned (REQ-097). */\nexport const candlestickChart: ChartRecipe<CandlestickChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildCandlestickChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `AreaChart` (REQ-093): sessions per weekday. Frozen (Data Model §4). */\nexport const AREA_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 'Mon', value: 32 },\n { x: 'Tue', value: 45 },\n { x: 'Wed', value: 41 },\n { x: 'Thu', value: 58 },\n { x: 'Fri', value: 66 },\n { x: 'Sat', value: 38 },\n { x: 'Sun', value: 29 },\n ].map((row) => Object.freeze(row)),\n);\n","import { area, line } from 'd3-shape';\nimport { extent } from '../../scales/util';\nimport type { AreaChartProps, ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, categoryAxis, categoryLabels, checkVolume, readSeries, seriesValues, valueAxis, type SeriesPoint } from '../shared/cartesian';\nimport { warnValue } from '../shared/cells';\nimport { CURVES } from '../shared/curves';\nimport { accessorName, circlePath, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { AREA_CHART_DEMO } from './demo';\n\nconst CHART = 'AreaChart';\nconst HEIGHTEN_RADIUS = 3.5;\n\nfunction buildAreaChart(props: AreaChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? AREA_CHART_DEMO;\n const xKey = usesDemo ? 'x' : (props.xKey ?? 'x');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n const series = readSeries(data, valueKey, 'value');\n checkVolume(CHART, [series]);\n const xName = accessorName(xKey, 'x');\n const xValues = data.map((datum, index) => read(xKey, datum, index));\n const xLabels = xValues.map((value) => formatCategory(value, locale));\n\n const base = modelBase(CHART, props, context, 'Area chart', {\n columns: [xName, series.key],\n rows: data.map((_, i) => [xLabels[i] ?? '', formatValue(series.points[i]?.value, locale, numberFormat)]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = cartesianPlot(card.area);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (series.missing > 0 && data.length > 0) warnValue(CHART, series.key, `${series.missing} of ${data.length} values are not finite; the area breaks there.`);\n const range = extent(seriesValues([series]));\n if (data.length === 0 || range === undefined) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const axis = valueAxis(plot, range, { chart: CHART, property: series.key, padding: context.domainPadding, locale, numberFormat });\n const y = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const xAt = categoryAxis(xValues, plot, { chart: CHART, property: xName, padding: context.domainPadding }).at;\n const curve = CURVES[props.curve ?? 'monotone'];\n const defined = (p: SeriesPoint) => p.value !== undefined;\n\n // The tone is the gradation; the line on top carries the values exactly (REQ-124).\n const shape = area<SeriesPoint>().defined(defined).x((p) => xAt(p.index)).y0(y(0)).y1((p) => y(p.value ?? 0)).curve(curve)(series.points);\n if (shape) strokes.push({ d: shape, role: 'encoding', part: 'ink', paint: 'stroke', tone: 2 });\n const top = line<SeriesPoint>().defined(defined).x((p) => xAt(p.index)).y((p) => y(p.value ?? 0)).curve(curve)(series.points);\n if (top) strokes.push({ d: top, role: 'encoding', part: 'ink' });\n\n for (const p of series.points) {\n if (p.value === undefined) continue;\n hitAreas.push({ seriesKey: series.key, index: p.index, datum: p.datum, value: p.value, x: xAt(p.index), y: y(p.value) });\n }\n const live = hitAreas.at(-1);\n if (live) {\n const mark = circlePath(live.x, live.y, HEIGHTEN_RADIUS);\n strokes.push({ d: mark, role: 'encoding', part: 'heighten', paint: 'fill' });\n strokes.push({ d: mark, role: 'encoding', part: 'ink', paint: 'stroke' });\n }\n labels.push(...categoryLabels(xLabels, xAt, card.area, plot));\n\n const description =\n props.description ??\n `${base.name}. Area chart of ${data.length} ${xName} values; ${series.key} ranges from ${formatNumber(range[0], locale, numberFormat)} to ${formatNumber(range[1], locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `AreaChart` recipe (REQ-072): a curved area, toned, under its exact line. */\nexport const areaChart: ChartRecipe<AreaChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildAreaChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `RangeBandChart` (REQ-093): daily temperature range. Frozen (Data Model §4). */\nexport const RANGE_BAND_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 'Mon', low: 11, high: 19 },\n { x: 'Tue', low: 12, high: 22 },\n { x: 'Wed', low: 14, high: 24 },\n { x: 'Thu', low: 13, high: 21 },\n { x: 'Fri', low: 10, high: 18 },\n { x: 'Sat', low: 9, high: 20 },\n { x: 'Sun', low: 12, high: 23 },\n ].map((row) => Object.freeze(row)),\n);\n","import { area, line } from 'd3-shape';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, Datum, HitArea, RangeBandChartProps, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, categoryAxis, categoryLabels, checkVolume, valueAxis, type Series } from '../shared/cartesian';\nimport { finite, warnValue } from '../shared/cells';\nimport { CURVES } from '../shared/curves';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { RANGE_BAND_CHART_DEMO } from './demo';\n\nconst CHART = 'RangeBandChart';\n\ninterface Span {\n readonly index: number;\n readonly datum: Datum;\n readonly low: number | undefined;\n readonly high: number | undefined;\n}\n\nfunction buildRangeBandChart(props: RangeBandChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? RANGE_BAND_CHART_DEMO;\n const xKey = usesDemo ? 'x' : (props.xKey ?? 'x');\n const lowKey = usesDemo ? 'low' : (props.lowKey ?? 'low');\n const highKey = usesDemo ? 'high' : (props.highKey ?? 'high');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const lowName = accessorName(lowKey, 'low');\n const highName = accessorName(highKey, 'high');\n\n let swapped = 0;\n let missing = 0;\n const spans: Span[] = data.map((datum, index) => {\n let low = finite(read(lowKey, datum, index));\n let high = finite(read(highKey, datum, index));\n if (low === undefined || high === undefined) {\n missing += 1;\n return { index, datum, low: undefined, high: undefined };\n }\n // Data Model §2.1: low ≤ high per row; a reversed row is swapped, and warned.\n if (low > high) {\n [low, high] = [high, low];\n swapped += 1;\n }\n return { index, datum, low, high };\n });\n const asSeries = (key: string, pick: (s: Span) => number | undefined): Series => ({\n key,\n points: spans.map((s) => ({ index: s.index, datum: s.datum, value: pick(s) })),\n missing,\n });\n checkVolume(CHART, [asSeries(lowName, (s) => s.low)]);\n const xName = accessorName(xKey, 'x');\n const xValues = data.map((datum, index) => read(xKey, datum, index));\n const xLabels = xValues.map((value) => formatCategory(value, locale));\n\n const base = modelBase(CHART, props, context, 'Range band', {\n columns: [xName, lowName, highName],\n rows: spans.map((s, i) => [xLabels[i] ?? '', formatValue(s.low, locale, numberFormat), formatValue(s.high, locale, numberFormat)]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = cartesianPlot(card.area);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (swapped > 0) warnValue(CHART, lowName, `${swapped} rows had ${lowName} above ${highName}; they are swapped.`);\n if (missing > 0 && data.length > 0) warnValue(CHART, lowName, `${missing} of ${data.length} rows lack a finite ${lowName} or ${highName}; the band breaks there.`);\n const range = extent(spans.flatMap((s) => (s.low === undefined || s.high === undefined ? [] : [s.low, s.high])));\n if (data.length === 0 || range === undefined) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const axis = valueAxis(plot, range, { chart: CHART, property: highName, padding: context.domainPadding, locale, numberFormat, zero: false });\n const y = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const xAt = categoryAxis(xValues, plot, { chart: CHART, property: xName, padding: context.domainPadding }).at;\n const curve = CURVES.monotone;\n const defined = (s: Span) => s.low !== undefined;\n\n const band = area<Span>().defined(defined).x((s) => xAt(s.index)).y0((s) => y(s.low ?? 0)).y1((s) => y(s.high ?? 0)).curve(curve)(spans);\n // The band is hatched only: its edges are the two lines below, and an outline would hide the dots.\n if (band) strokes.push({ d: band, role: 'encoding', part: 'ink-secondary', paint: 'none', tone: 1 });\n // Both edges are drawn exactly: the high one solid, the low one dotted (REQ-124).\n const edge = (pick: (s: Span) => number) => line<Span>().defined(defined).x((s) => xAt(s.index)).y((s) => y(pick(s))).curve(curve)(spans);\n const high = edge((s) => s.high ?? 0);\n const low = edge((s) => s.low ?? 0);\n if (high) strokes.push({ d: high, role: 'encoding', part: 'ink' });\n if (low) strokes.push({ d: low, role: 'encoding', part: 'ink', dash: 'dotted' });\n\n for (const [row, key, pick] of [[0, lowName, (s: Span) => s.low], [1, highName, (s: Span) => s.high]] as const) {\n for (const s of spans) {\n const value = pick(s);\n if (value === undefined) continue;\n hitAreas.push({ seriesKey: key, index: s.index, datum: s.datum, value, x: xAt(s.index), y: y(value), cell: { column: s.index, row } });\n }\n }\n labels.push(...categoryLabels(xLabels, xAt, card.area, plot));\n\n const description =\n props.description ??\n `${base.name}. Range band over ${data.length} ${xName} values, from a lowest ${lowName} of ${formatNumber(range[0], locale, numberFormat)} to a highest ${highName} of ${formatNumber(range[1], locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `RangeBandChart` recipe (REQ-073): the band between a low and a high series. */\nexport const rangeBandChart: ChartRecipe<RangeBandChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildRangeBandChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `StreamChart` (REQ-093): two traffic sources over a week. Frozen (Data Model §4). */\nexport const STREAM_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 'Mon', organic: 22, paid: 14 },\n { x: 'Tue', organic: 28, paid: 18 },\n { x: 'Wed', organic: 35, paid: 16 },\n { x: 'Thu', organic: 31, paid: 24 },\n { x: 'Fri', organic: 38, paid: 29 },\n { x: 'Sat', organic: 26, paid: 21 },\n { x: 'Sun', organic: 19, paid: 12 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const STREAM_CHART_DEMO_KEYS: readonly string[] = /* @__PURE__ */ Object.freeze(['organic', 'paid']);\n","import { area, line } from 'd3-shape';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke, StreamChartProps, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, categoryAxis, categoryLabels, checkVolume, legend, readSeries, valueAxis } from '../shared/cartesian';\nimport { warnValue } from '../shared/cells';\nimport { CURVES } from '../shared/curves';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { STREAM_CHART_DEMO, STREAM_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'StreamChart';\n/** A stream has two waves; the second is told apart by its dash (REQ-124). */\nconst WAVES = 2;\n\ninterface Wave {\n readonly key: string;\n /** Bottom and top of the wave at each row, or `undefined` in a gap. */\n readonly spans: readonly ({ readonly y0: number; readonly y1: number; readonly value: number } | undefined)[];\n}\n\nfunction buildStreamChart(props: StreamChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? STREAM_CHART_DEMO;\n const xKey = usesDemo ? 'x' : (props.xKey ?? 'x');\n const requested = usesDemo ? STREAM_CHART_DEMO_KEYS : (props.keys ?? STREAM_CHART_DEMO_KEYS);\n const keys = requested.slice(0, WAVES);\n const stacked = props.stacked ?? false;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n const series = keys.map((key) => readSeries(data, key, key));\n checkVolume(CHART, series);\n const xName = accessorName(xKey, 'x');\n const xValues = data.map((datum, index) => read(xKey, datum, index));\n const xLabels = xValues.map((value) => formatCategory(value, locale));\n\n const base = modelBase(CHART, props, context, 'Stream chart', {\n columns: [xName, ...keys],\n rows: data.map((_, i) => [xLabels[i] ?? '', ...series.map((s) => formatValue(s.points[i]?.value, locale, numberFormat))]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const key = legend(card.area, keys.map((name, i) => (i === 0 ? { name, part: 'ink' as const, tone: 1 as const } : { name, part: 'ink-secondary' as const, tone: 2 as const, dash: 'dotted' as const })));\n const plot = cartesianPlot(key.area);\n const strokes: Stroke[] = [...card.strokes, ...key.strokes];\n const labels: TextLabel[] = [...card.labels, ...key.labels];\n const hitAreas: HitArea[] = [];\n\n if (requested.length > WAVES) warnValue(CHART, 'keys', `${requested.length} keys were given; a stream draws the first ${WAVES}.`);\n for (const s of series) if (s.missing > 0 && data.length > 0) warnValue(CHART, s.key, `${s.missing} of ${data.length} values are not finite; the wave breaks there.`);\n\n // Stacked, the second wave rides on the first; a negative value cannot stack and is held at zero.\n // Stacked, a wave has nothing to ride on where the one below is missing: it breaks there too.\n let clamped = 0;\n let unsupported = 0;\n const waves: Wave[] = series.map((s, w) => ({\n key: s.key,\n spans: s.points.map((p, i) => {\n if (p.value === undefined) return undefined;\n if (stacked && w > 0 && series[0]?.points[i]?.value === undefined) {\n unsupported += 1;\n return undefined;\n }\n let value = p.value;\n if (stacked && value < 0) {\n clamped += 1;\n value = 0;\n }\n const below = stacked && w > 0 ? Math.max(series[0]?.points[i]?.value ?? 0, 0) : 0;\n return { y0: below, y1: below + value, value: p.value };\n }),\n }));\n if (clamped > 0) warnValue(CHART, 'stacked', `${clamped} negative values cannot stack; they are drawn at zero.`);\n if (unsupported > 0) warnValue(CHART, 'stacked', `${unsupported} values have nothing below them to stack on; the upper wave breaks there.`);\n\n const range = extent(waves.flatMap((w) => w.spans.flatMap((s) => (s ? [s.y0, s.y1] : []))));\n if (data.length === 0 || range === undefined) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const axis = valueAxis(plot, range, { chart: CHART, property: keys[0] ?? 'value', padding: context.domainPadding, locale, numberFormat });\n const y = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const xAt = categoryAxis(xValues, plot, { chart: CHART, property: xName, padding: context.domainPadding }).at;\n const curve = CURVES.monotone;\n\n waves.forEach((wave, w) => {\n const indexed = wave.spans.map((span, index) => ({ span, index }));\n const defined = (e: (typeof indexed)[number]) => e.span !== undefined;\n const shape = area<(typeof indexed)[number]>().defined(defined).x((e) => xAt(e.index)).y0((e) => y(e.span?.y0 ?? 0)).y1((e) => y(e.span?.y1 ?? 0)).curve(curve)(indexed);\n const top = line<(typeof indexed)[number]>().defined(defined).x((e) => xAt(e.index)).y((e) => y(e.span?.y1 ?? 0)).curve(curve)(indexed);\n const part = w === 0 ? 'ink' : 'ink-secondary';\n // The wave is hatched only: its top line below is its edge, and an outline would hide the dots.\n if (shape) strokes.push({ d: shape, role: 'encoding', part, paint: 'none', tone: w === 0 ? 1 : 2 });\n if (top) strokes.push({ d: top, role: 'encoding', part, ...(w === 0 ? {} : { dash: 'dotted' as const }) });\n wave.spans.forEach((span, index) => {\n if (!span) return;\n const datum = data[index] ?? {};\n hitAreas.push({ seriesKey: wave.key, index, datum, value: span.value, x: xAt(index), y: y(span.y1), cell: { column: index, row: w } });\n });\n });\n labels.push(...categoryLabels(xLabels, xAt, key.area, plot));\n\n const totals = series.map((s) => `${s.key} totals ${formatNumber(s.points.reduce((sum, p) => sum + (p.value ?? 0), 0), locale, numberFormat)}`);\n const description =\n props.description ?? `${base.name}. ${stacked ? 'Stacked' : 'Overlaid'} stream of ${keys.length} waves over ${data.length} ${xName} values; ${totals.join('; ')}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `StreamChart` recipe (REQ-074): two waves, overlaid or stacked, told apart by dash and name. */\nexport const streamChart: ChartRecipe<StreamChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildStreamChart });\n","import { linearScale } from '../../scales/scales';\nimport { extent } from '../../scales/util';\nimport type { Accessor, ChartModel, CommonChartProps, Datum, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from './card';\nimport { cartesianPlot, checkCount, TICK_CHAR, valueAxis } from './cartesian';\nimport { finite, inset, warnValue } from './cells';\nimport { accessorName, circlePath, formatNumber, formatValue, read } from './format';\nimport { emptyModel, measure, modelBase, readyModel } from './shell';\n\n/** What tells the scatter from the bubble: defaults, the kind of fill, and the name. */\nexport interface PointFamily {\n readonly chart: string;\n readonly fallbackName: string;\n readonly defaultSizeRange: readonly [number, number];\n /** Whether a size is read when no `sizeKey` is given. */\n readonly sizeByDefault: boolean;\n readonly toned: boolean;\n}\n\ninterface PointProps extends CommonChartProps {\n xKey?: Accessor<number | null | undefined>;\n yKey?: Accessor<number | null | undefined>;\n sizeKey?: Accessor<number | null | undefined>;\n sizeRange?: readonly [number, number];\n}\n\ninterface Point {\n readonly index: number;\n readonly datum: Datum;\n readonly x: number;\n readonly y: number;\n readonly size: number | undefined;\n}\n\nconst validRange = (range: readonly [number, number] | undefined): range is readonly [number, number] =>\n !!range && Number.isFinite(range[0]) && Number.isFinite(range[1]) && range[0] > 0 && range[0] <= range[1];\n\n/**\n * Points on two linear scales. A size maps to marker **area**, affinely from the smallest size to\n * the largest across `sizeRange` (px²): area, not radius, so a size twice as far from the smallest\n * is a mark twice as much larger to the eye (REQ-082, REQ-083).\n */\nexport function buildPoints(family: PointFamily, props: PointProps, context: RecipeContext, demo: readonly Datum[]): ChartModel {\n const { chart } = family;\n const usesDemo = props.data === undefined;\n const data = props.data ?? demo;\n const xKey = usesDemo ? 'x' : (props.xKey ?? 'x');\n const yKey = usesDemo ? 'y' : (props.yKey ?? 'y');\n const sizeKey = usesDemo ? 'size' : (props.sizeKey ?? (family.sizeByDefault ? 'size' : undefined));\n const sizeRange = validRange(props.sizeRange) ? props.sizeRange : family.defaultSizeRange;\n if (props.sizeRange !== undefined && !validRange(props.sizeRange)) {\n warnValue(chart, 'sizeRange', `[${String(props.sizeRange)}] is not two finite areas with 0 < smallest ≤ largest; the default [${String(family.defaultSizeRange)}] is used.`);\n }\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const xName = accessorName(xKey, 'x');\n const yName = accessorName(yKey, 'y');\n const sizeName = sizeKey === undefined ? undefined : accessorName(sizeKey, 'size');\n checkCount(chart, yName, data.length);\n\n const points: Point[] = [];\n data.forEach((datum, index) => {\n const x = finite(read(xKey, datum, index));\n const y = finite(read(yKey, datum, index));\n const size = sizeKey === undefined ? undefined : finite(read(sizeKey, datum, index));\n if (x === undefined || y === undefined) {\n warnValue(chart, x === undefined ? xName : yName, `Row ${index} has no finite ${x === undefined ? xName : yName}; it is omitted.`);\n return;\n }\n if (sizeKey !== undefined && (size === undefined || size < 0)) {\n warnValue(chart, sizeName ?? 'size', `Row ${index} has a size of ${String(size ?? 'no number')}; sizes must be zero or more, so it is omitted.`);\n return;\n }\n points.push({ index, datum, x, y, size });\n });\n\n const base = modelBase(chart, props, context, family.fallbackName, {\n columns: [xName, yName, ...(sizeName ? [sizeName] : [])],\n rows: data.map((datum, index) => [\n formatValue(read(xKey, datum, index), locale, numberFormat),\n formatValue(read(yKey, datum, index), locale, numberFormat),\n ...(sizeKey ? [formatValue(read(sizeKey, datum, index), locale, numberFormat)] : []),\n ]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = cartesianPlot(card.area);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (points.length === 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const sizes = extent(points.flatMap((p) => (p.size === undefined ? [] : [p.size])));\n const areaOf = (s: number | undefined) => {\n if (s === undefined || !sizes) return sizeRange[0];\n if (sizes[0] === sizes[1]) return sizeRange[1];\n return sizeRange[0] + ((s - sizes[0]) / (sizes[1] - sizes[0])) * (sizeRange[1] - sizeRange[0]);\n };\n const radius = (s: number | undefined) => Math.sqrt(areaOf(s) / Math.PI);\n const largest = Math.max(...points.map((p) => radius(p.size)));\n // The scales run inside the plot by the largest radius, so no mark is ever clipped.\n const inner = inset(plot, largest);\n\n const axis = valueAxis(inner, extent(points.map((p) => p.y)) ?? [0, 0], { chart, property: yName, padding: context.domainPadding, locale, numberFormat, zero: false });\n const y = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n // The value labels sit at the plot's left edge; the marks start after them, so none covers one.\n const gutter = Math.min(Math.max(0, ...axis.labels.map((l) => l.text.length * TICK_CHAR)) + 4 + largest, inner.width / 3);\n const x = linearScale(extent(points.map((p) => p.x)) ?? [0, 0], [inner.x + gutter, inner.x + inner.width], { chart, property: xName, padding: context.domainPadding, nice: true });\n for (const tick of x.ticks(4)) {\n labels.push({ x: x(tick), y: card.area.y + card.area.height - 5, text: formatNumber(tick, locale, numberFormat), kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n\n // The largest mark is drawn first, so the small ones stay on top of it.\n for (const p of [...points].sort((a, b) => radius(b.size) - radius(a.size) || a.index - b.index)) {\n strokes.push({ d: circlePath(x(p.x), y(p.y), radius(p.size)), role: 'encoding', part: 'ink', ...(family.toned ? { tone: 1 as const } : {}) });\n }\n for (const p of points) {\n const r = radius(p.size);\n hitAreas.push({ seriesKey: yName, index: p.index, datum: p.datum, value: p.y, x: x(p.x), y: y(p.y), box: { x: x(p.x) - r, y: y(p.y) - r, width: 2 * r, height: 2 * r } });\n }\n\n const xs = extent(points.map((p) => p.x)) ?? [0, 0];\n const ys = extent(points.map((p) => p.y)) ?? [0, 0];\n const description =\n props.description ??\n `${base.name}. ${points.length} points; ${xName} from ${formatNumber(xs[0], locale, numberFormat)} to ${formatNumber(xs[1], locale, numberFormat)}, ${yName} from ${formatNumber(ys[0], locale, numberFormat)} to ${formatNumber(ys[1], locale, numberFormat)}${\n sizeName && sizes ? `, ${sizeName} from ${formatNumber(sizes[0], locale, numberFormat)} to ${formatNumber(sizes[1], locale, numberFormat)} as marker area` : ''\n }.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `ScatterChart` (REQ-093): height against weight. Frozen (Data Model §4). */\nexport const SCATTER_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 152, y: 51, size: 2 },\n { x: 158, y: 56, size: 4 },\n { x: 161, y: 54, size: 3 },\n { x: 165, y: 62, size: 6 },\n { x: 168, y: 60, size: 5 },\n { x: 171, y: 68, size: 8 },\n { x: 175, y: 71, size: 7 },\n { x: 178, y: 69, size: 9 },\n { x: 182, y: 77, size: 10 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartRecipe, RecipeContext, ScatterChartProps } from '../../types';\nimport { buildPoints } from '../shared/points';\nimport { SCATTER_CHART_DEMO } from './demo';\n\nconst FAMILY = { chart: 'ScatterChart', fallbackName: 'Scatter chart', defaultSizeRange: [60, 240] as const, sizeByDefault: false, toned: false };\n\n/** `ScatterChart` recipe (REQ-082): points on two linear scales, optionally sized by area. */\nexport const scatterChart: ChartRecipe<ScatterChartProps> = /* @__PURE__ */ Object.freeze({\n name: 'ScatterChart',\n build: (props: ScatterChartProps, context: RecipeContext) => buildPoints(FAMILY, props, context, SCATTER_CHART_DEMO),\n});\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `BubbleChart` (REQ-093): markets by growth, margin and size. Frozen (Data Model §4). */\nexport const BUBBLE_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 2, y: 18, size: 40 },\n { x: 5, y: 24, size: 120 },\n { x: 8, y: 12, size: 65 },\n { x: 11, y: 30, size: 210 },\n { x: 14, y: 21, size: 90 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { BubbleChartProps, ChartRecipe, RecipeContext } from '../../types';\nimport { buildPoints } from '../shared/points';\nimport { BUBBLE_CHART_DEMO } from './demo';\n\nconst FAMILY = { chart: 'BubbleChart', fallbackName: 'Bubble chart', defaultSizeRange: [100, 500] as const, sizeByDefault: true, toned: true };\n\n/** `BubbleChart` recipe (REQ-083): circles whose area encodes the size. */\nexport const bubbleChart: ChartRecipe<BubbleChartProps> = /* @__PURE__ */ Object.freeze({\n name: 'BubbleChart',\n build: (props: BubbleChartProps, context: RecipeContext) => buildPoints(FAMILY, props, context, BUBBLE_CHART_DEMO),\n});\n","import { diagnose } from '../diagnostics/diagnose';\nimport type { DashboardBreakpoint, DashboardLayout, PerBreakpoint, ResolvedLayout, ResolvedSpan } from './types';\n\nexport const BREAKPOINTS: readonly DashboardBreakpoint[] = ['sm', 'md', 'lg'];\nexport const DASHBOARD = 'Dashboard';\n/** Columns a breakpoint may have, and rows a cell may span (Data Model §2.13). */\nconst MAX_COLUMNS = 12;\nconst MAX_ROW_SPAN = 6;\n\n/** The dashboard's documented defaults (API Spec §5.1, REQ-208). */\nexport const DASHBOARD_DEFAULTS = /* @__PURE__ */ Object.freeze({\n columns: /* @__PURE__ */ Object.freeze({ sm: 1, md: 2, lg: 4 }),\n rowHeight: 240,\n gap: 16,\n span: 1,\n headingLevel: 2,\n ssrWidth: 1200,\n} as const);\n\n/** A per-breakpoint value expanded to all three: a bare value applies everywhere, a gap keeps `fallback`. */\nexport function perBreakpoint<T>(value: PerBreakpoint<T> | undefined, fallback: Readonly<Record<DashboardBreakpoint, T>>): Record<DashboardBreakpoint, T> {\n const given = value !== null && typeof value === 'object' ? (value as Partial<Record<DashboardBreakpoint, T>>) : undefined;\n const bare = value !== undefined && given === undefined ? (value as T) : undefined;\n return Object.fromEntries(BREAKPOINTS.map((bp) => [bp, bare ?? given?.[bp] ?? fallback[bp]])) as Record<DashboardBreakpoint, T>;\n}\n\n/** Warns SP002 for a number outside the layout contract and returns what is used instead. */\nfunction corrected(property: string, given: unknown, used: number, rule: string): number {\n if (process.env.NODE_ENV !== 'production') {\n diagnose('SP002', DASHBOARD, { property, message: `${String(given)} is not ${rule}; ${used} is used.` });\n }\n return used;\n}\n\nconst isInteger = (n: unknown): n is number => typeof n === 'number' && Number.isInteger(n);\n\n/**\n * The layout with its defaults applied and its numbers held to the contract of Data Model §2.13\n * (REQ-201, REQ-204, REQ-208): invalid numbers fall back with SP002, a column span wider than its\n * breakpoint is clamped with SP014 (I-12). Pure but for diagnostics; JSON-serialisable (I-10).\n */\nexport function resolveLayout(layout: DashboardLayout | undefined): ResolvedLayout {\n const asked = perBreakpoint<unknown>(layout?.columns, DASHBOARD_DEFAULTS.columns);\n const columns = Object.fromEntries(\n BREAKPOINTS.map((bp) => {\n const n = asked[bp];\n const ok = isInteger(n) && n >= 1 && n <= MAX_COLUMNS;\n return [bp, ok ? n : corrected(`columns.${bp}`, n, DASHBOARD_DEFAULTS.columns[bp], `an integer from 1 to ${MAX_COLUMNS}`)];\n }),\n ) as Record<DashboardBreakpoint, number>;\n const rowHeight = layout?.rowHeight;\n const gap = layout?.gap;\n const one = { sm: 1, md: 1, lg: 1 };\n return {\n columns,\n rowHeight:\n rowHeight === undefined ? DASHBOARD_DEFAULTS.rowHeight : Number.isFinite(rowHeight) && rowHeight > 0 ? rowHeight : corrected('rowHeight', rowHeight, DASHBOARD_DEFAULTS.rowHeight, 'a number above 0'),\n gap: gap === undefined ? DASHBOARD_DEFAULTS.gap : Number.isFinite(gap) && gap >= 0 ? gap : corrected('gap', gap, DASHBOARD_DEFAULTS.gap, 'a number of 0 or more'),\n cells: (layout?.cells ?? []).map((cell, index) => {\n const col = perBreakpoint<unknown>(cell.colSpan, one);\n const row = perBreakpoint<unknown>(cell.rowSpan, one);\n const where = `cells[${index}]`;\n const span = Object.fromEntries(\n BREAKPOINTS.map((bp) => {\n let c = col[bp];\n if (!isInteger(c) || c < 1) c = corrected(`${where}.colSpan.${bp}`, c, 1, 'an integer of 1 or more');\n else if (c > columns[bp]) {\n if (process.env.NODE_ENV !== 'production') {\n diagnose('SP014', DASHBOARD, { property: `${where}.colSpan.${bp}`, message: `Cell \"${cell.id}\" spans ${c} columns at ${bp}, which has ${columns[bp]}; it spans ${columns[bp]}.` });\n }\n c = columns[bp];\n }\n let r = row[bp];\n if (!isInteger(r)) r = corrected(`${where}.rowSpan.${bp}`, r, 1, `an integer from 1 to ${MAX_ROW_SPAN}`);\n else if (r < 1 || r > MAX_ROW_SPAN) r = corrected(`${where}.rowSpan.${bp}`, r, Math.min(Math.max(r, 1), MAX_ROW_SPAN), `an integer from 1 to ${MAX_ROW_SPAN}`);\n return [bp, { col: c as number, row: r as number }];\n }),\n ) as ResolvedSpan;\n return { id: cell.id, span };\n }),\n };\n}\n","import { cardLayout } from '../charts/shared/card';\nimport { diagnose } from '../diagnostics/diagnose';\nimport { round2 } from '../render/round';\nimport type { ChartRecipe, CommonChartProps } from '../types';\nimport { BREAKPOINTS, DASHBOARD, DASHBOARD_DEFAULTS, resolveLayout } from './defaults';\nimport type { DashboardBreakpoint, DashboardModel, DashboardProps, ResolvedCell, ResolvedLayout, ResolvedSpan } from './types';\n\n/** Characters an id keeps intact in an IDREF list and inside `url(#…)` — the rule of `renderChart`. */\nconst UNSAFE = /[^A-Za-z0-9_.:-]+/g;\n/** Container widths where `md` and `lg` begin (TD DD-014); fixed in the stylesheet too. */\nconst MD_FROM = 640;\nconst LG_FROM = 1024;\n/** Drawing-area height of the probe build that measures a chart's card chrome. */\nconst PROBE = 100;\n\n/** An id with every character unsafe in an IDREF or `url(#…)` replaced by `-`. */\nexport function safeIdOf(id: string): string {\n return id.replace(UNSAFE, '-');\n}\n\nfunction warn(code: 'SP002' | 'SP015', property: string, message: string): void {\n if (process.env.NODE_ENV !== 'production') diagnose(code, DASHBOARD, { property, message });\n}\n\n/** The breakpoint a container of `width` px falls in (DD-014). */\nexport function breakpointOf(width: number): DashboardBreakpoint {\n return width >= LG_FROM ? 'lg' : width >= MD_FROM ? 'md' : 'sm';\n}\n\n/** A cell's outer box at `width`, DD-015: whole columns and the gaps they span, 2 decimals (REQ-002). */\nfunction nominalBox(layout: ResolvedLayout, span: ResolvedSpan, width: number): { width: number; height: number } {\n const bp = breakpointOf(width);\n const { col, row } = span[bp];\n const cols = layout.columns[bp];\n const { gap, rowHeight } = layout;\n return {\n width: round2(((width - gap * (cols - 1)) / cols) * col + gap * (col - 1)),\n height: round2(rowHeight * row + gap * (row - 1)),\n };\n}\n\nfunction cellStyle(span: ResolvedSpan): Record<string, string> {\n const style: Record<string, string> = {};\n for (const bp of BREAKPOINTS) style[`--sp-cell-col-${bp}`] = String(span[bp].col);\n for (const bp of BREAKPOINTS) style[`--sp-cell-row-${bp}`] = String(span[bp].row);\n return style;\n}\n\n/**\n * The dashboard's resolved model (REQ-201): children matched to layout cells by id in the four\n * rules of Data Model §2.13, spans held to the columns, chart ids derived from the dashboard's id\n * (REQ-209), nominal boxes at `ssrWidth` (REQ-206) and the custom properties the adapters write\n * (REQ-202). Pure but for diagnostics; never throws on a mismatch (REQ-205).\n */\nexport function resolveDashboard(props: DashboardProps, childCells: readonly (string | undefined)[]): DashboardModel {\n const layout = resolveLayout(props.layout);\n let ssrWidth: number = DASHBOARD_DEFAULTS.ssrWidth;\n if (props.ssrWidth !== undefined) {\n if (Number.isFinite(props.ssrWidth) && props.ssrWidth > 0) ssrWidth = props.ssrWidth;\n else warn('SP002', 'ssrWidth', `${String(props.ssrWidth)} is not a width above 0; ${ssrWidth} is used.`);\n }\n\n // The layout's cells by id; a repeated id is ignored after its first declaration.\n const declared = new Map<string, ResolvedSpan>();\n const order: string[] = [];\n for (const cell of layout.cells) {\n if (declared.has(cell.id)) {\n warn('SP015', 'layout.cells', `Layout cell \"${cell.id}\" is declared twice; the later declaration is ignored.`);\n continue;\n }\n declared.set(cell.id, cell.span);\n order.push(cell.id);\n }\n\n // Rules 1 and 3: each child takes its cell once; the rest wait for source order.\n const holder = new Map<string, number>();\n const unplaced: number[] = [];\n childCells.forEach((cell, index) => {\n if (cell === undefined) {\n unplaced.push(index);\n } else if (!declared.has(cell)) {\n warn('SP015', 'cell', `Child ${index} names cell \"${cell}\", which the layout does not declare; it is placed in source order, span 1.`);\n unplaced.push(index);\n } else if (holder.has(cell)) {\n warn('SP015', 'cell', `Children ${holder.get(cell)} and ${index} both name cell \"${cell}\"; the later is placed in source order, span 1.`);\n unplaced.push(index);\n } else {\n holder.set(cell, index);\n }\n });\n\n // Rule 4: a layout cell with no child is dropped and leaves no hole.\n for (const id of order) {\n if (!holder.has(id)) warn('SP015', 'layout.cells', `Layout cell \"${id}\" has no child; it is dropped.`);\n }\n\n const single: ResolvedSpan = { sm: { col: 1, row: 1 }, md: { col: 1, row: 1 }, lg: { col: 1, row: 1 } };\n const base = safeIdOf(props.id);\n const taken = new Set<string>();\n const chartIdOf = (token: string): string => {\n const stem = `${base}--${token.replace(UNSAFE, '-')}`;\n let id = stem;\n for (let n = 2; taken.has(id); n += 1) id = `${stem}-${n}`;\n taken.add(id);\n return id;\n };\n const cellOf = (id: string, child: number, span: ResolvedSpan, token: string): ResolvedCell => ({\n id,\n child,\n chartId: chartIdOf(token),\n span,\n nominal: nominalBox(layout, span, ssrWidth),\n style: cellStyle(span),\n });\n\n // Rule 2: the reading order is the layout's, then the unplaced children in source order (I-11).\n const cells = [\n ...order.filter((id) => holder.has(id)).map((id) => cellOf(id, holder.get(id) as number, declared.get(id) as ResolvedSpan, id)),\n ...unplaced.map((index) => cellOf(String(index), index, single, String(index))),\n ];\n\n const style: Record<string, string> = {};\n for (const bp of BREAKPOINTS) style[`--sp-dashboard-columns-${bp}`] = String(layout.columns[bp]);\n style['--sp-dashboard-row-height'] = `${layout.rowHeight}px`;\n style['--sp-dashboard-layout-gap'] = `${layout.gap}px`;\n return { id: props.id, cells, style };\n}\n\n/**\n * The size a chart is drawn at inside a cell box (REQ-206): the cell's width, and its height less\n * the chart's own card chrome, so every card in a row has the same outer height (I-13). The chrome\n * is measured by building `recipe` at a probe height — the recipe may add rows of its own (KpiCard's\n * value line) — and read from `cardLayout` when no recipe is given. The chart's own `width` and\n * `height` take precedence (API Spec §7.1, size precedence).\n */\nexport function cellChartBox<P extends CommonChartProps>(cell: { width: number; height: number }, chartProps: P, recipe?: ChartRecipe<P>): { width: number; height: number } {\n const width = chartProps.width ?? cell.width;\n if (chartProps.height !== undefined) return { width, height: chartProps.height };\n let outer: number | undefined;\n if (recipe && width > 0) {\n const model = recipe.build({ ...chartProps, width, height: PROBE }, { id: 'sp-probe', width, locale: 'en', emptyState: { text: '', rule: false }, domainPadding: 0 });\n if (model.status !== 'deferred') outer = model.geometry.viewBox.height;\n }\n outer ??= cardLayout(chartProps, { width, areaHeight: PROBE, chrome: chartProps.chrome ?? 'card', locale: 'en' }).viewBox.height;\n return { width, height: Math.max(1, round2(cell.height - (outer - PROBE))) };\n}\n","import { DEFAULTS } from '../config/resolve';\nimport { diagnose } from '../diagnostics/diagnose';\nimport type { ChartRecipe, CommonChartProps, ProviderConfig } from '../types';\nimport { DASHBOARD_DEFAULTS } from './defaults';\nimport { cellChartBox, resolveDashboard, safeIdOf } from './resolve';\nimport type { DashboardCellContext, DashboardProps, DashboardView } from './types';\n\n/**\n * The dashboard as an adapter writes it (REQ-200, REQ-214): the section's class, substrate, name\n * and variables, the heading and description, and per cell its variables, its label and the\n * context its chart reads. `children` gives, in source order, each child's `cell` and its chart's\n * own `id` when the adapter can read it.\n */\nexport function dashboardView(props: DashboardProps, children: readonly { readonly cell?: string; readonly id?: string }[]): DashboardView {\n const model = resolveDashboard(props, children.map((c) => c.cell));\n // React and Vue reject a nameless dashboard by type; Angular's signal inputs cannot (REQ-214).\n if (props.title === undefined && props.label === undefined && process.env.NODE_ENV !== 'production') {\n diagnose('SP002', 'Dashboard', { property: 'title', message: 'Name the region with `title` or `label`.' });\n }\n const base = safeIdOf(props.id);\n const ground = props.ground ?? DEFAULTS.ground;\n const groundName = typeof ground === 'string' ? ground : ground.name;\n const titled = props.title !== undefined;\n const heading = titled ? { level: props.headingLevel ?? DASHBOARD_DEFAULTS.headingLevel, id: `${base}-title`, text: props.title } : undefined;\n const description = props.description !== undefined ? { id: `${base}-desc`, text: props.description } : undefined;\n const config: ProviderConfig = {};\n for (const key of ['ground', 'substrate', 'mode', 'locale'] as const) {\n if (props[key] !== undefined) (config as Record<string, unknown>)[key] = props[key];\n }\n return {\n model,\n section: {\n className: ['sp-dashboard', `sp-ground-${groundName}`, props.className].filter(Boolean).join(' '),\n substrate: props.substrate ?? DEFAULTS.substrate,\n ...(heading ? { labelledby: heading.id } : { label: props.label }),\n ...(description ? { describedby: description.id } : {}),\n style: model.style,\n },\n ...(heading ? { heading } : {}),\n ...(description ? { description } : {}),\n cells: model.cells.map((cell) => ({\n child: cell.child,\n labelledby: `${children[cell.child]?.id ?? cell.chartId}-title`,\n style: cell.style,\n context: { chartId: cell.chartId, box: cell.nominal, config },\n })),\n };\n}\n\n/**\n * A chart's props inside a cell (API Spec §7.1, size precedence; REQ-212 config precedence): its\n * own `id`, `height` and config win; the cell supplies the rest. `width` is the width to draw at\n * until the chart is measured — the chart's own, else the cell's nominal width (REQ-207).\n */\nexport function inCell<P extends CommonChartProps>(props: P, cell: DashboardCellContext | undefined, recipe: ChartRecipe<P>): { props: P; width: number | undefined } {\n if (!cell) return { props, width: props.width };\n const box = cellChartBox(cell.box, props, recipe);\n // An own prop wins only when it has a value: Vue hands every declared prop, absent ones undefined.\n const merged: Record<string, unknown> = { ...(props as Record<string, unknown>) };\n for (const [key, value] of Object.entries(cell.config)) merged[key] ??= value;\n return {\n props: { ...merged, id: props.id ?? cell.chartId, height: props.height ?? box.height } as P,\n width: props.width ?? box.width,\n };\n}\n","import { diagnose } from '../diagnostics/diagnose';\nimport { readout, toActiveItem } from '../interaction/hit-test';\nimport type { ActiveItem, ChartModel } from '../types';\n\n/**\n * The items of `model` whose datum carries `value` under `key` (REQ-216), by the index of their hit\n * area: exact matches only, never the nearest (REQ-217). A chart whose data has no `key` at all\n * shows no linked mark and warns SP016, once. Pure: the model is read, never touched.\n */\nexport function linkedItems(model: ChartModel, key: string, value: unknown): readonly number[] {\n const { hitAreas } = model.geometry;\n if (hitAreas.length > 0 && !hitAreas.some((hit) => key in hit.datum) && process.env.NODE_ENV !== 'production') {\n diagnose('SP016', model.chart, { property: 'link.key', message: `No datum has a \"${key}\" field.` });\n }\n return hitAreas.flatMap((hit, index) => (hit.datum[key] === value ? [index] : []));\n}\n\n/** A dashboard's linked value (REQ-216): the key, the value of the source's active item, and the source chart's id. */\nexport interface LinkState {\n readonly key: string;\n readonly value: unknown;\n readonly source: string;\n}\n\n/** The link a chart's active item sets; `null` when it clears, which clears every chart (REQ-218). */\nexport function linkFrom(key: string, source: string, active: ActiveItem | null): LinkState | null {\n return active ? { key, value: active.datum[key], source } : null;\n}\n\n/**\n * The marker paths a chart draws for a link (REQ-216): the readout's own marker, for each item\n * carrying the value. None for the source, which shows its active item, nor for a cleared link.\n */\nexport function linkedMarks(model: Pick<ChartModel, 'id' | 'chart' | 'geometry' | 'table'>, state: LinkState | null | undefined): readonly string[] {\n if (!state || state.source === model.id) return [];\n return linkedItems(model as ChartModel, state.key, state.value).map((index) => readout(model, toActiveItem(model.geometry.hitAreas[index]!)).marker.d);\n}\n"]}
1
+ {"version":3,"sources":["../src/render/serialize.ts","../src/render/heighten.ts","../src/render/view.ts","../src/diagnostics/typeface.ts","../src/ink/null-inker.ts","../src/ink/registry.ts","../src/charts/line-chart/demo.ts","../src/charts/line-chart/line-chart.ts","../src/interaction/hit-test.ts","../src/interaction/reduce.ts","../src/charts/bullet-chart/demo.ts","../src/charts/bullet-chart/bullet-chart.ts","../src/charts/pyramid-chart/demo.ts","../src/charts/pyramid-chart/pyramid-chart.ts","../src/charts/heatmap-chart/demo.ts","../src/charts/heatmap-chart/heatmap-chart.ts","../src/charts/treemap-chart/demo.ts","../src/charts/treemap-chart/treemap-chart.ts","../src/charts/sankey-chart/demo.ts","../src/charts/sankey-chart/sankey-chart.ts","../src/charts/activity-grid/demo.ts","../src/charts/activity-grid/activity-grid.ts","../src/charts/step-chart/demo.ts","../src/charts/step-chart/step-chart.ts","../src/charts/shared/curves.ts","../src/charts/sparkline-rows/demo.ts","../src/charts/sparkline-rows/sparkline-rows.ts","../src/charts/kpi-card/demo.ts","../src/charts/kpi-card/kpi-card.ts","../src/charts/bar-chart/demo.ts","../src/charts/bar-chart/bar-chart.ts","../src/charts/stacked-bar-chart/demo.ts","../src/charts/stacked-bar-chart/stacked-bar-chart.ts","../src/charts/composed-chart/demo.ts","../src/charts/composed-chart/composed-chart.ts","../src/charts/waterfall-chart/demo.ts","../src/charts/waterfall-chart/waterfall-chart.ts","../src/charts/funnel-chart/demo.ts","../src/charts/funnel-chart/funnel-chart.ts","../src/charts/donut-chart/demo.ts","../src/charts/donut-chart/donut-chart.ts","../src/charts/radar-chart/demo.ts","../src/charts/radar-chart/radar-chart.ts","../src/charts/polar-bar-chart/demo.ts","../src/charts/polar-bar-chart/polar-bar-chart.ts","../src/charts/coxcomb-chart/demo.ts","../src/charts/coxcomb-chart/coxcomb-chart.ts","../src/charts/shared/tracks.ts","../src/charts/radial-arc-group/demo.ts","../src/charts/radial-arc-group/radial-arc-group.ts","../src/charts/radial-rings/demo.ts","../src/charts/radial-rings/radial-rings.ts","../src/charts/shared/scalar.ts","../src/charts/gauge-arc/gauge-arc.ts","../src/charts/meter-chart/meter-chart.ts","../src/charts/wind-rose/demo.ts","../src/charts/wind-rose/wind-rose.ts","../src/charts/chord-ring/demo.ts","../src/charts/chord-ring/chord-ring.ts","../src/charts/orbit-chart/demo.ts","../src/charts/orbit-chart/orbit-chart.ts","../src/charts/volvelle-chart/demo.ts","../src/charts/volvelle-chart/volvelle-chart.ts","../src/charts/candlestick-chart/demo.ts","../src/charts/candlestick-chart/candlestick-chart.ts","../src/charts/area-chart/demo.ts","../src/charts/area-chart/area-chart.ts","../src/charts/range-band-chart/demo.ts","../src/charts/range-band-chart/range-band-chart.ts","../src/charts/stream-chart/demo.ts","../src/charts/stream-chart/stream-chart.ts","../src/charts/shared/points.ts","../src/charts/scatter-chart/demo.ts","../src/charts/scatter-chart/scatter-chart.ts","../src/charts/bubble-chart/demo.ts","../src/charts/bubble-chart/bubble-chart.ts","../src/dashboard/defaults.ts","../src/dashboard/resolve.ts","../src/dashboard/view.ts","../src/dashboard/link.ts"],"names":["area","row","along","CHART","PLOT_INSET","LABEL_COLUMN","HEIGHTEN_RADIUS","curveStepAfter","line","CURVES","curveMonotoneX","curveLinear","curveNatural","top","bottom","BAR_FILL","VALUE_COLUMN","HOLE","LEGEND_GAP","FAMILY","START","SPAN","LEGEND_ASPECT","BAND","CHAR","low","high","key","x","y","size"],"mappings":"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,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAC9H,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IACtH,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAC/H,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IACjI,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IACjI,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAClH,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAA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,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IACjI,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAC3H,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAChI,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAC/H,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAC/H,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAC7H,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAC/H,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IACvH,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IACvH,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAC1G,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IACxH,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IACvH,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,EAAE,CAAA;AAAA,IACvH,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,IAAI,CAAC,C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,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IACjI,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAC/H,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,EAAE,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAC/H,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,KAAK,CAAC,CAAA;AAAA,IAAG,CAAC,K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","file":"index.js","sourcesContent":["import type { Geometry } from '../types';\n\n/** Serialises a geometry to JSON. Geometry holds no functions and no DOM nodes (REQ-011). */\nexport function serializeGeometry(geometry: Geometry): string {\n return JSON.stringify(geometry);\n}\n\n/** Inverse of `serializeGeometry`. */\nexport function parseGeometry(json: string): Geometry {\n return JSON.parse(json) as Geometry;\n}\n\n/** Bytes of path data a geometry carries, tiles included (NFR §7). */\nexport function pathBytes(geometry: Geometry): number {\n let bytes = 0;\n for (const stroke of geometry.strokes) bytes += stroke.d.length;\n for (const tile of geometry.defs) {\n for (const stroke of tile.strokes) bytes += stroke.d.length;\n }\n return bytes;\n}\n\n/** Path data budget per chart (API Spec §12). */\nexport const PATH_BYTE_BUDGET = 40_000;\n","import { diagnose } from '../diagnostics/diagnose';\nimport type { Geometry, Stroke } from '../types';\n\nfunction isOutlineOf(candidate: Stroke, heightened: Stroke): boolean {\n return (\n candidate.part === 'ink' &&\n (candidate.paint ?? 'stroke') === 'stroke' &&\n candidate.d === heightened.d\n );\n}\n\n/**\n * Holds the heightening rules on a geometry:\n * - a single heightened element per chart (REQ-024); a second one throws SP005 in development\n * and is dropped in production (REQ-025);\n * - every heightened element carries an outline in the main ink (REQ-031), which is added\n * when the recipe did not draw it.\n */\nexport function enforceHeightening(geometry: Geometry, chart: string): Geometry {\n const heightened = geometry.strokes.filter((stroke) => stroke.part === 'heighten');\n if (heightened.length === 0) return geometry;\n if (heightened.length > 1 && process.env.NODE_ENV !== 'production') {\n diagnose('SP005', chart, {\n property: 'heighten',\n message: `${heightened.length} heightened elements were declared.`,\n });\n }\n const [kept] = heightened as [Stroke, ...Stroke[]];\n const strokes: Stroke[] = [];\n for (const stroke of geometry.strokes) {\n if (stroke.part === 'heighten' && stroke !== kept) continue;\n strokes.push(stroke);\n if (stroke === kept && !geometry.strokes.some((other) => isOutlineOf(other, kept))) {\n strokes.push({ d: kept.d, role: kept.role, part: 'ink', paint: 'stroke' });\n }\n }\n return { ...geometry, strokes };\n}\n","import type { ChartModel, InkMode, Stroke, StrokePaint, TextLabel } from '../types';\n\n/**\n * The SVG a chart renders, as flat element descriptors with every attribute value already a\n * string. Each adapter's template writes these fields to the same attribute names, one to one,\n * and computes nothing (Art. 2); `svgString` writes them too, and its output is the canonical\n * render every adapter is compared against (Art. 3, DD-004).\n *\n * Colour never appears here: the stylesheet paints by `part` (REQ-042).\n */\nexport interface SvgView {\n readonly svg: Readonly<{\n viewBox: string;\n width: string;\n height: string;\n /** `class` attribute. */\n class: string;\n /** `data-substrate` attribute. */\n substrate: string;\n /** `data-mode` attribute. */\n mode: InkMode;\n role: 'img';\n /** `aria-labelledby` attribute. */\n labelledby: string;\n }>;\n readonly title: Readonly<{ id: string; text: string }>;\n readonly desc: Readonly<{ id: string; text: string }>;\n /** `<pattern>` elements inside `<defs>`; `<defs>` is omitted when there are none. */\n readonly patterns: readonly PatternView[];\n readonly paths: readonly PathView[];\n readonly texts: readonly TextView[];\n}\n\nexport interface PatternView {\n readonly id: string;\n readonly width: string;\n readonly height: string;\n /** `patternTransform` attribute. */\n readonly transform: string;\n readonly paths: readonly PathView[];\n}\n\nexport interface PathView {\n readonly d: string;\n /** `part` attribute: `sp-<part>`. */\n readonly part: string;\n /** `data-role` attribute. */\n readonly role: Stroke['role'];\n /** `data-paint` attribute. */\n readonly paint: StrokePaint;\n /** `data-dash` attribute, omitted when `null`. */\n readonly dash: string | null;\n /** `data-weight` attribute: a `weight` ground's tonal level (REQ-028), omitted when `null`. */\n readonly weight: string | null;\n /** `fill` attribute — only ever a `url(#tile)` reference, omitted when `null`. */\n readonly fill: string | null;\n}\n\nexport interface TextView {\n readonly x: string;\n readonly y: string;\n /** `part` attribute: `sp-text` or `sp-axis`. */\n readonly part: string;\n /** `data-kind` attribute. */\n readonly kind: TextLabel['kind'];\n /** `text-anchor` attribute. */\n readonly anchor: TextLabel['anchor'];\n readonly text: string;\n}\n\nexport interface ViewStyle {\n readonly ground: string;\n readonly substrate: string;\n readonly mode: InkMode;\n}\n\nfunction pathView(stroke: Stroke): PathView {\n const paint = stroke.paint ?? 'stroke';\n return {\n d: stroke.d,\n part: `sp-${stroke.part}`,\n role: stroke.role,\n paint,\n dash: stroke.dash ?? null,\n weight: stroke.tonalWeight === undefined ? null : String(stroke.tonalWeight),\n fill: paint === 'tile' && stroke.tile ? `url(#${stroke.tile})` : null,\n };\n}\n\n/** Builds the element descriptors of a chart model (API Spec §10). */\nexport function toSvgView(model: ChartModel, style: ViewStyle): SvgView {\n const { geometry, ids } = model;\n const { viewBox } = geometry;\n return {\n svg: {\n viewBox: `${viewBox.x} ${viewBox.y} ${viewBox.width} ${viewBox.height}`,\n width: String(viewBox.width),\n height: String(viewBox.height),\n class: `sp-chart sp-ground-${style.ground}`,\n substrate: style.substrate,\n mode: style.mode,\n role: 'img',\n labelledby: `${ids.title} ${ids.desc}`,\n },\n title: { id: ids.title, text: model.name },\n desc: { id: ids.desc, text: model.description },\n patterns: geometry.defs.map((tile) => ({\n id: tile.id,\n width: String(tile.width),\n height: String(tile.height),\n transform: `rotate(${tile.angle})`,\n paths: tile.strokes.map(pathView),\n })),\n paths: geometry.strokes.map(pathView),\n texts: geometry.labels.map((label) => ({\n x: String(label.x),\n y: String(label.y),\n part: `sp-${label.part}`,\n kind: label.kind,\n anchor: label.anchor,\n text: label.text,\n })),\n };\n}\n\nconst ESCAPES: Readonly<Record<string, string>> = { '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;' };\n\nfunction escape(value: string): string {\n return value.replace(/[&<>\"]/g, (char) => ESCAPES[char] ?? char);\n}\n\nfunction attributes(pairs: readonly (readonly [string, string | null])[]): string {\n return pairs\n .filter((pair): pair is readonly [string, string] => pair[1] !== null)\n .map(([name, value]) => ` ${name}=\"${escape(value)}\"`)\n .join('');\n}\n\nfunction pathString(path: PathView): string {\n return `<path${attributes([\n ['d', path.d],\n ['part', path.part],\n ['data-role', path.role],\n ['data-paint', path.paint],\n ['data-dash', path.dash],\n ['data-weight', path.weight],\n ['fill', path.fill],\n ])}></path>`;\n}\n\n/**\n * Serialises a view to SVG markup. This is the canonical render stored with each fixture;\n * user text is always escaped, never interpolated as markup (TD §6).\n */\nexport function svgString(view: SvgView, style = ''): string {\n const { svg } = view;\n const open = `<svg${attributes([\n ['xmlns', 'http://www.w3.org/2000/svg'],\n ['viewBox', svg.viewBox],\n ['width', svg.width],\n ['height', svg.height],\n ['class', svg.class],\n ['data-substrate', svg.substrate],\n ['data-mode', svg.mode],\n ['role', svg.role],\n ['aria-labelledby', svg.labelledby],\n // A palette's declarations (REQ-461): the only attribute it changes (REQ-468).\n ['style', style || null],\n ])}>`;\n const title = `<title id=\"${escape(view.title.id)}\">${escape(view.title.text)}</title>`;\n const desc = `<desc id=\"${escape(view.desc.id)}\">${escape(view.desc.text)}</desc>`;\n const defs =\n view.patterns.length === 0\n ? ''\n : `<defs>${view.patterns\n .map(\n (pattern) =>\n `<pattern${attributes([\n ['id', pattern.id],\n ['width', pattern.width],\n ['height', pattern.height],\n ['patternUnits', 'userSpaceOnUse'],\n ['patternTransform', pattern.transform],\n ])}>${pattern.paths.map(pathString).join('')}</pattern>`,\n )\n .join('')}</defs>`;\n const paths = view.paths.map(pathString).join('');\n const texts = view.texts\n .map(\n (text) =>\n `<text${attributes([\n ['x', text.x],\n ['y', text.y],\n ['part', text.part],\n ['data-kind', text.kind],\n ['text-anchor', text.anchor],\n ])}>${escape(text.text)}</text>`,\n )\n .join('');\n return `${open}${title}${desc}${defs}${paths}${texts}</svg>`;\n}\n","import { diagnose } from './diagnose';\n\n/** The subset of `FontFaceSet` the check needs; injected so the core stays DOM-free. */\nexport interface FontFaceSetLike {\n load(font: string): Promise<readonly unknown[]>;\n check(font: string): boolean;\n}\n\n/** Font shorthand used to probe the display face. */\nexport const DISPLAY_FACE_PROBE = '16px \"EB Garamond\"';\n\n/**\n * Checks that the display typeface loaded. On failure it reports SP013 and resolves `false`;\n * it never throws and never blocks the render (REQ-032).\n */\nexport async function checkTypeface(\n fonts: FontFaceSetLike,\n chart: string,\n face: string = DISPLAY_FACE_PROBE,\n): Promise<boolean> {\n let loaded: boolean;\n try {\n const faces = await fonts.load(face);\n loaded = faces.length > 0 && fonts.check(face);\n } catch {\n loaded = false;\n }\n if (!loaded && process.env.NODE_ENV !== 'production') {\n diagnose('SP013', chart, { property: 'font-family', message: `Probe: ${face}.` });\n }\n return loaded;\n}\n","import type { Geometry, Inker, InkOptions } from '../types';\n\n/** Returns the geometry untouched and uncopied. `precision` mode is exactly this (REQ-021). */\nexport const NullInker: Inker = Object.freeze({\n name: 'null',\n ink(geometry: Geometry, _options: InkOptions): Geometry {\n return geometry;\n },\n});\n","import { diagnose } from '../diagnostics/diagnose';\nimport type { Inker } from '../types';\nimport { NullInker } from './null-inker';\n\nconst registry = new Map<string, Inker>([[NullInker.name, NullInker]]);\n\n/** Registers an inker under its `name`, replacing any previous one with that name. */\nexport function registerInker(inker: Inker): void {\n registry.set(inker.name, inker);\n}\n\n/**\n * Resolves an inker by name among the registered ones and `builtins`. An unknown name falls\n * back to `NullInker` and emits SP006; the render continues (REQ-026).\n */\nexport function resolveInker(name: string, chart: string, builtins: readonly Inker[] = []): Inker {\n const found = registry.get(name) ?? builtins.find((inker) => inker.name === name);\n if (found) return found;\n if (process.env.NODE_ENV !== 'production') {\n diagnose('SP006', chart, { property: 'inker', message: `Inker \"${name}\" is not registered.` });\n }\n return NullInker;\n}\n","import type { Datum } from '../../types';\n\n/**\n * Demo dataset of `LineChart` (REQ-093). Frozen, and part of the stable surface: changing it\n * alters the SVG of anyone who renders without data, so it is never a patch (Data Model §4).\n */\nexport const LINE_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { hour: '00', hits: 18, baseline: 22 },\n { hour: '02', hits: 14, baseline: 18 },\n { hour: '04', hits: 11, baseline: 15 },\n { hour: '06', hits: 16, baseline: 17 },\n { hour: '08', hits: 34, baseline: 30 },\n { hour: '10', hits: 58, baseline: 48 },\n { hour: '12', hits: 71, baseline: 60 },\n { hour: '14', hits: 66, baseline: 62 },\n { hour: '16', hits: 74, baseline: 64 },\n { hour: '18', hits: 88, baseline: 70 },\n { hour: '20', hits: 62, baseline: 55 },\n { hour: '22', hits: 41, baseline: 40 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const LINE_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n xKey: 'hour',\n valueKey: 'hits',\n secondaryKey: 'baseline',\n} as const);\n","import {\n curveLinear,\n curveMonotoneX,\n curveNatural,\n curveStepAfter,\n line,\n type CurveFactory,\n} from 'd3-shape';\nimport { diagnose } from '../../diagnostics/diagnose';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, HitArea, LineChartProps, LineCurve, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, categoryAxis, checkVolume, categoryLabels, readSeries, seriesValues, valueAxis, type Series, type SeriesPoint } from '../shared/cartesian';\nimport { accessorName, circlePath, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { LINE_CHART_DEMO, LINE_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'LineChart';\nconst HEIGHTEN_RADIUS = 3.5;\n\nconst CURVES: Record<LineCurve, CurveFactory> = {\n monotone: curveMonotoneX,\n linear: curveLinear,\n natural: curveNatural,\n step: curveStepAfter,\n};\n\nfunction buildLineChart(props: LineChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? LINE_CHART_DEMO;\n const xKey = usesDemo ? LINE_CHART_DEMO_KEYS.xKey : (props.xKey ?? 'x');\n const valueKey = usesDemo ? LINE_CHART_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n const secondaryKey = usesDemo ? LINE_CHART_DEMO_KEYS.secondaryKey : props.secondaryKey;\n const chrome = props.chrome ?? 'card';\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n const primary = readSeries(data, valueKey, 'value');\n const secondary =\n secondaryKey !== undefined && (props.series ?? 'all') === 'all'\n ? readSeries(data, secondaryKey, 'secondary')\n : undefined;\n const series = secondary ? [primary, secondary] : [primary];\n checkVolume(CHART, series);\n\n const xName = accessorName(xKey, 'x');\n const xValues = data.map((datum, index) => read(xKey, datum, index));\n const xLabels = xValues.map((value) => formatCategory(value, locale));\n\n const base = modelBase(CHART, props, context, 'Line chart', {\n columns: [xName, ...series.map((s) => s.key)],\n rows: data.map((_, index) => [\n xLabels[index] ?? '',\n ...series.map((s) => formatValue(s.points[index]?.value, locale, numberFormat)),\n ]),\n });\n const { name } = base;\n\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const { width } = size;\n\n const card = cardLayout(props, { width, areaHeight: size.height, chrome, locale });\n const { area } = card;\n const plot = cartesianPlot(area);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n for (const s of series) {\n if (s.missing > 0 && data.length > 0 && process.env.NODE_ENV !== 'production') {\n diagnose('SP002', CHART, {\n property: s.key,\n message: `${s.missing} of ${data.length} values were omitted from the stroke; set \\`connectNulls\\` to bridge the gap.`,\n });\n }\n }\n\n const valueExtent = extent(seriesValues(series));\n\n if (data.length === 0 || valueExtent === undefined) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const axis = valueAxis(plot, valueExtent, { chart: CHART, property: primary.key, padding: context.domainPadding, locale, numberFormat });\n const y = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const xAt = categoryAxis(xValues, plot, { chart: CHART, property: xName, padding: context.domainPadding }).at;\n\n const curve = CURVES[props.curve ?? 'monotone'];\n const connectNulls = props.connectNulls ?? false;\n const pathFor = (s: Series): string => {\n const generator = line<SeriesPoint>()\n .x((p) => xAt(p.index))\n .y((p) => y(p.value ?? 0))\n .curve(curve);\n const points = connectNulls ? s.points.filter((p) => p.value !== undefined) : s.points;\n if (!connectNulls) generator.defined((p) => p.value !== undefined);\n return generator(points) ?? '';\n };\n\n // The secondary series is drawn first so the primary one reads on top of it.\n const ordered = secondary ? [secondary, primary] : [primary];\n for (const s of ordered) {\n const d = pathFor(s);\n if (d === '') continue;\n strokes.push(\n s === primary\n ? { d, role: 'encoding', part: 'ink' }\n : { d, role: 'encoding', part: 'ink-secondary', dash: 'dotted' },\n );\n }\n\n for (const s of series) {\n for (const p of s.points) {\n if (p.value === undefined) continue;\n hitAreas.push({\n seriesKey: s.key,\n index: p.index,\n datum: p.datum,\n value: p.value,\n x: xAt(p.index),\n y: y(p.value),\n });\n }\n }\n\n const live = [...primary.points].reverse().find((p) => p.value !== undefined);\n if (live?.value !== undefined) {\n const d = circlePath(xAt(live.index), y(live.value), HEIGHTEN_RADIUS);\n strokes.push({ d, role: 'encoding', part: 'heighten', paint: 'fill' });\n strokes.push({ d, role: 'encoding', part: 'ink', paint: 'stroke' });\n }\n\n const count = data.length;\n labels.push(...categoryLabels(xLabels, xAt, area, plot));\n\n const ranges = series.map((s) => {\n const seriesExtent = extent(s.points.flatMap((p) => (p.value === undefined ? [] : [p.value])));\n return seriesExtent\n ? `${s.key} ranges from ${formatNumber(seriesExtent[0], locale, numberFormat)} to ${formatNumber(seriesExtent[1], locale, numberFormat)}`\n : `${s.key} has no values`;\n });\n const description =\n props.description ??\n `${name}. Line chart of ${count} ${xName} values${secondary ? ' in 2 series' : ''}; ${ranges.join('; ')}.`;\n\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `LineChart` recipe (REQ-060): props plus scales produce exact geometry. */\nexport const lineChart: ChartRecipe<LineChartProps> = /* @__PURE__ */ Object.freeze({\n name: CHART,\n build: buildLineChart,\n});\n","import { round2 } from '../render/round';\nimport type { ActiveItem, Geometry, HitArea, Rect, Stroke } from '../types';\nimport { circlePath } from '../charts/shared/format';\n\nexport type PointerKind = 'mouse' | 'pen' | 'touch';\n\n/** Minimum touch target, in px (REQ-144). */\nexport const MIN_TOUCH_TARGET = 24;\n\n/** The active item a hit area stands for. @internal */\nexport function toActiveItem(hit: HitArea): ActiveItem {\n return {\n seriesKey: hit.seriesKey,\n index: hit.index,\n datum: hit.datum,\n value: hit.value,\n point: { x: hit.x, y: hit.y },\n };\n}\n\nfunction inside(rect: Rect, x: number, y: number): boolean {\n return x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height;\n}\n\n/** Smallest horizontal distance between neighbouring hit areas of the same series. */\nfunction spacing(hitAreas: readonly HitArea[]): number {\n let smallest = Number.POSITIVE_INFINITY;\n for (let i = 1; i < hitAreas.length; i += 1) {\n const previous = hitAreas[i - 1] as HitArea;\n const current = hitAreas[i] as HitArea;\n if (previous.seriesKey !== current.seriesKey) continue;\n const gap = Math.abs(current.x - previous.x);\n if (gap > 0 && gap < smallest) smallest = gap;\n }\n return smallest;\n}\n\n/**\n * Resolves the active item as a pure function of a pointer position, in SVG space, and the\n * geometry — no DOM involved (REQ-140).\n *\n * A pointer inside an item's box resolves to that item. Otherwise a mouse or pen resolves to the\n * item nearest along x, then along y. Touch resolves by\n * proximity and only within a target at least 24 px wide (REQ-144). A point outside the\n * drawing area resolves to `null`.\n */\nexport function resolveActive(\n geometry: Geometry,\n pointer: Readonly<{ x: number; y: number }>,\n kind: PointerKind = 'mouse',\n): ActiveItem | null {\n if (!Number.isFinite(pointer.x) || !Number.isFinite(pointer.y)) return null;\n if (!inside(geometry.plot, pointer.x, pointer.y)) return null;\n // An item with an area wins when the pointer is inside it; of nested areas, the smallest.\n let boxed: HitArea | undefined;\n for (const hit of geometry.hitAreas) {\n if (!hit.box || !inside(hit.box, pointer.x, pointer.y)) continue;\n if (!boxed?.box || hit.box.width * hit.box.height < boxed.box.width * boxed.box.height) boxed = hit;\n }\n if (boxed) return toActiveItem(boxed);\n let best: HitArea | undefined;\n let bestDx = Number.POSITIVE_INFINITY;\n let bestDy = Number.POSITIVE_INFINITY;\n for (const hit of geometry.hitAreas) {\n const dx = Math.abs(hit.x - pointer.x);\n const dy = Math.abs(hit.y - pointer.y);\n if (dx < bestDx || (dx === bestDx && dy < bestDy)) {\n best = hit;\n bestDx = dx;\n bestDy = dy;\n }\n }\n if (!best) return null;\n if (kind === 'touch') {\n const reach = Math.max(MIN_TOUCH_TARGET / 2, spacing(geometry.hitAreas) / 2);\n if (bestDx > reach) return null;\n }\n return toActiveItem(best);\n}\n\n/**\n * Converts a client-space pointer position into SVG space, given the rendered bounding box of\n * the `<svg>` element. Adapters pass numbers; the arithmetic stays here (Art. 2).\n */\nexport function toSvgPoint(\n client: Readonly<{ x: number; y: number }>,\n box: Readonly<{ left: number; top: number; width: number; height: number }>,\n viewBox: Rect,\n): { x: number; y: number } {\n if (box.width <= 0 || box.height <= 0) return { x: Number.NaN, y: Number.NaN };\n return {\n x: viewBox.x + ((client.x - box.left) * viewBox.width) / box.width,\n y: viewBox.y + ((client.y - box.top) * viewBox.height) / box.height,\n };\n}\n\n/** Keys that move the active item (REQ-122). */\nexport const NAVIGATION_KEYS: readonly string[] = ['ArrowRight', 'ArrowDown', 'ArrowLeft', 'ArrowUp', 'Home', 'End', 'Escape'];\n\n/**\n * Keyboard traversal of the data points, as a pure function (REQ-122). Right and down move to\n * the next point of the series, left and up to the previous one, Home and End to its ends,\n * Escape clears. On a grid — every item carries a `cell` — the arrows move by column and row\n * instead. A chart with its own model — a hierarchy — gives every item its `moves`, and the keys\n * follow them. Returns `undefined` for a key that is not a navigation key.\n */\nexport function stepActive(\n geometry: Geometry,\n current: ActiveItem | null,\n key: string,\n): ActiveItem | null | undefined {\n if (!NAVIGATION_KEYS.includes(key)) return undefined;\n if (key === 'Escape') return null;\n const hits = geometry.hitAreas;\n if (hits[0]?.moves) {\n // The moves are the chart's own (a tree's, interaction/tree.ts); here they are only followed.\n const here = current ? hits.findIndex((hit) => hit.seriesKey === current.seriesKey && hit.index === current.index) : -1;\n const to = here < 0 ? hits[0].moves[key === 'End' ? 'End' : 'Home'] : hits[here]?.moves?.[key];\n return toActiveItem(hits[to ?? Math.max(here, 0)] as HitArea);\n }\n const grid = geometry.hitAreas.length > 0 && geometry.hitAreas.every((hit) => hit.cell !== undefined);\n if (grid) return stepGrid(geometry.hitAreas, current, key);\n const seriesKey = current?.seriesKey ?? geometry.hitAreas[0]?.seriesKey;\n const points = geometry.hitAreas.filter((hit) => hit.seriesKey === seriesKey);\n if (points.length === 0) return null;\n const position = current ? points.findIndex((hit) => hit.index === current.index) : -1;\n let next: number;\n switch (key) {\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = points.length - 1;\n break;\n case 'ArrowRight':\n case 'ArrowDown':\n next = position < 0 ? 0 : Math.min(position + 1, points.length - 1);\n break;\n default:\n next = position < 0 ? 0 : Math.max(position - 1, 0);\n }\n return toActiveItem(points[next] as HitArea);\n}\n\n/**\n * Grid traversal. Home and End reach the start and end of the current row, as in a spreadsheet;\n * with nothing active they reach the first and last cell in reading order.\n */\nfunction stepGrid(hits: readonly HitArea[], current: ActiveItem | null, key: string): ActiveItem | null {\n const order = [...hits].sort((a, b) => (a.cell?.row ?? 0) - (b.cell?.row ?? 0) || (a.cell?.column ?? 0) - (b.cell?.column ?? 0));\n const here = current ? hits.find((hit) => hit.seriesKey === current.seriesKey && hit.index === current.index) : undefined;\n if (!here?.cell) return toActiveItem((key === 'End' ? order.at(-1) : order[0]) as HitArea);\n if (key === 'Home' || key === 'End') {\n const row = order.filter((hit) => hit.cell?.row === here.cell?.row);\n return toActiveItem((key === 'End' ? row.at(-1) : row[0]) as HitArea);\n }\n // An arrow moves to the nearest cell in its direction along the same row or column, so a\n // missing value is stepped over rather than walling off the items behind it (REQ-122).\n const horizontal = key === 'ArrowRight' || key === 'ArrowLeft';\n const sign = key === 'ArrowRight' || key === 'ArrowDown' ? 1 : -1;\n const { column, row } = here.cell;\n let next: HitArea | undefined;\n for (const hit of hits) {\n if (!hit.cell) continue;\n const along = horizontal ? hit.cell.column - column : hit.cell.row - row;\n const across = horizontal ? hit.cell.row - row : hit.cell.column - column;\n if (across !== 0 || along * sign <= 0) continue;\n const best = next?.cell ? Math.abs(horizontal ? next.cell.column - column : next.cell.row - row) : Number.POSITIVE_INFINITY;\n if (Math.abs(along) < best) next = hit;\n }\n return toActiveItem(next ?? here);\n}\n\n/** Readout of an active item, positioned as percentages of the viewBox (REQ-141). */\nexport interface Readout {\n readonly heading: string;\n readonly text: string;\n readonly left: string;\n readonly top: string;\n /** Sentence announced to assistive technology (REQ-122). */\n readonly announcement: string;\n /** Marker drawn over the active point. */\n readonly marker: Stroke;\n}\n\n/**\n * Builds the readout of an active item from the chart's own tabular alternative, so the\n * readout, the table and the announcement always say the same.\n */\nexport function readout(\n model: { readonly geometry: Geometry; readonly table: { readonly columns: readonly string[]; readonly rows: readonly (readonly string[])[] } },\n active: ActiveItem,\n): Readout {\n const { geometry, table } = model;\n const column = Math.max(table.columns.indexOf(active.seriesKey), 1);\n const row = table.rows[active.index] ?? [];\n const heading = row[0] ?? '';\n const value = row[column] ?? String(active.value);\n const { viewBox } = geometry;\n const percent = (part: number, whole: number) => `${whole > 0 ? round2((part / whole) * 100) : 0}%`;\n return {\n heading,\n text: `${active.seriesKey}: ${value}`,\n left: percent(active.point.x - viewBox.x, viewBox.width),\n top: percent(active.point.y - viewBox.y, viewBox.height),\n announcement: `${table.columns[0] ?? ''} ${heading}, ${active.seriesKey} ${value}`,\n marker: { d: circlePath(active.point.x, active.point.y, 6), role: 'ornament', part: 'ink', paint: 'stroke' },\n };\n}\n","import type { ActiveItem, Geometry } from '../types';\nimport { resolveActive, stepActive, toSvgPoint, type PointerKind } from './hit-test';\n\ntype Point = Readonly<{ x: number; y: number }>;\ntype Box = Readonly<{ left: number; top: number; width: number; height: number }>;\n\n/** A DOM event, reduced to the numbers the interaction engine needs. */\nexport type InteractionEvent =\n | { readonly type: 'pointer' | 'click'; readonly client: Point; readonly box: Box; readonly kind: PointerKind }\n | { readonly type: 'leave' | 'focus' | 'blur' }\n | { readonly type: 'key'; readonly key: string };\n\nexport interface InteractionResult {\n readonly active: ActiveItem | null;\n /** The active item differs from the current one: emit `activeChange` (REQ-141, REQ-143). */\n readonly changed: boolean;\n /** An item was chosen: emit `select` (API Spec §9). */\n readonly selected?: ActiveItem;\n /** The event was consumed; a key event should not scroll the page. */\n readonly handled: boolean;\n}\n\n/** Same item: same series and index. */\nexport function sameActive(a: ActiveItem | null, b: ActiveItem | null): boolean {\n return a === b || (a !== null && b !== null && a.seriesKey === b.seriesKey && a.index === b.index);\n}\n\nconst SELECT_KEYS = ['Enter', ' '];\n\n/**\n * The whole interaction of a chart as one pure function (REQ-140): current item plus event gives\n * the next item. Adapters wire DOM events to it and keep the result; they decide nothing.\n */\nexport function reduceInteraction(\n geometry: Geometry,\n current: ActiveItem | null,\n event: InteractionEvent,\n): InteractionResult {\n const settle = (active: ActiveItem | null, extra: Partial<InteractionResult> = {}): InteractionResult => ({\n active,\n changed: !sameActive(current, active),\n handled: true,\n ...extra,\n });\n\n switch (event.type) {\n case 'pointer':\n case 'click': {\n const active = resolveActive(geometry, toSvgPoint(event.client, event.box, geometry.viewBox), event.kind);\n return event.type === 'click' && active ? settle(active, { selected: active }) : settle(active);\n }\n case 'leave':\n case 'blur':\n return settle(null);\n case 'focus':\n return settle(current ?? stepActive(geometry, null, 'Home') ?? null);\n case 'key': {\n if (SELECT_KEYS.includes(event.key)) {\n return current ? settle(current, { selected: current }) : { active: null, changed: false, handled: false };\n }\n const next = stepActive(geometry, current, event.key);\n return next === undefined ? { active: current, changed: false, handled: false } : settle(next);\n }\n }\n}\n","import type { Datum } from '../../types';\n\n/**\n * Demo dataset of `BulletChart` (REQ-093), in the default field names of Data Model §2.9.\n * Frozen and part of the stable surface (Data Model §4).\n */\nexport const BULLET_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { title: 'Revenue', actual: 72, target: 80 },\n { title: 'Profit', actual: 58, target: 65 },\n { title: 'New users', actual: 86, target: 75 },\n { title: 'Retention', actual: 41, target: 60 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { BulletChartProps, ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { finite, inset, rectPath, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { BULLET_CHART_DEMO } from './demo';\n\nconst CHART = 'BulletChart';\nconst PLOT_INSET = 6;\nconst MAX_BAR = 12;\n/** How far the target marker reaches past the bar, above and below. */\nconst MARKER_REACH = 3;\n\n/** Holds a value to the 0-100 track, warning when it had to (Data Model §2.9). */\nfunction clampPercent(value: number, property: string, row: number): number {\n if (value >= 0 && value <= 100) return value;\n warnValue(CHART, property, `Row ${row} is ${value}; it is drawn at the nearest end of 0-100.`);\n return Math.min(Math.max(value, 0), 100);\n}\n\nfunction buildBulletChart(props: BulletChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? BULLET_CHART_DEMO;\n const titleKey = usesDemo ? 'title' : (props.titleKey ?? 'title');\n const actualKey = usesDemo ? 'actual' : (props.actualKey ?? 'actual');\n const targetKey = usesDemo ? 'target' : (props.targetKey ?? 'target');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n const rows = data.map((datum, index) => ({\n index,\n datum,\n title: formatCategory(read(titleKey, datum, index), locale),\n actual: finite(read(actualKey, datum, index)),\n target: finite(read(targetKey, datum, index)),\n }));\n const actualName = accessorName(actualKey, 'actual');\n const targetName = accessorName(targetKey, 'target');\n\n const base = modelBase(CHART, props, context, 'Bullet chart', {\n columns: [accessorName(titleKey, 'title'), actualName, targetName],\n rows: rows.map((r) => [r.title, formatValue(r.actual, locale, numberFormat), formatValue(r.target, locale, numberFormat)]),\n });\n\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = inset(card.area, PLOT_INSET);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (rows.length === 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, true);\n }\n\n const rowHeight = plot.height / rows.length;\n const barHeight = Math.min(MAX_BAR, rowHeight * 0.35);\n const at = (percent: number) => plot.x + (percent / 100) * plot.width;\n let met = 0;\n\n for (const row of rows) {\n const top = plot.y + row.index * rowHeight;\n const barY = top + rowHeight - barHeight - Math.min(MARKER_REACH + 1, rowHeight * 0.1);\n const baseline = barY - 5;\n labels.push({ x: plot.x, y: baseline, text: row.title, kind: 'tick', part: 'text', anchor: 'start' });\n strokes.push({ d: rectPath({ x: plot.x, y: barY, width: plot.width, height: barHeight }), role: 'ornament', part: 'rule' });\n\n if (row.actual === undefined) {\n warnValue(CHART, actualName, `Row ${row.index} has no finite value; its bar is omitted.`);\n } else {\n const actual = clampPercent(row.actual, actualName, row.index);\n const bar = { x: plot.x, y: barY, width: at(actual) - plot.x, height: barHeight };\n if (bar.width > 0) strokes.push({ d: rectPath(bar), role: 'encoding', part: 'ink', tone: 2 });\n labels.push({ x: plot.x + plot.width, y: baseline, text: formatNumber(row.actual, locale, numberFormat), kind: 'tick', part: 'axis', anchor: 'end' });\n hitAreas.push({ seriesKey: actualName, index: row.index, datum: row.datum, value: row.actual, x: at(actual), y: barY + barHeight / 2, box: bar });\n if (row.target !== undefined && row.actual >= row.target) met += 1;\n }\n\n if (row.target === undefined) {\n warnValue(CHART, targetName, `Row ${row.index} has no finite target; its marker is omitted.`);\n } else {\n const x = at(clampPercent(row.target, targetName, row.index));\n strokes.push({ d: `M${x},${barY - MARKER_REACH}V${barY + barHeight + MARKER_REACH}`, role: 'encoding', part: 'ink', weight: 2 });\n }\n }\n\n const description =\n props.description ?? `${base.name}. Bullet chart of ${rows.length} targets on a 0 to 100 scale; ${met} of ${rows.length} reach their target.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `BulletChart` recipe (REQ-069): a bar to the actual value and a marker at the target, on 0-100. */\nexport const bulletChart: ChartRecipe<BulletChartProps> = /* @__PURE__ */ Object.freeze({\n name: CHART,\n build: buildBulletChart,\n});\n","import type { Datum } from '../../types';\n\n/**\n * Demo dataset of `PyramidChart` (REQ-093), in the default field names of Data Model §2.9.\n * Frozen and part of the stable surface (Data Model §4).\n */\nexport const PYRAMID_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { label: 'Leads', width: 18 },\n { label: 'Managers', width: 42 },\n { label: 'Specialists', width: 70 },\n { label: 'Staff', width: 100 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, HitArea, PyramidChartProps, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { finite, inset, rectPath, toneLevel, toneOf, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { PYRAMID_CHART_DEMO } from './demo';\n\nconst CHART = 'PyramidChart';\nconst PLOT_INSET = 6;\n/** Room at the left for the tier labels and at the right for the values. */\nconst LABEL_COLUMN = 72;\nconst VALUE_COLUMN = 48;\nconst TIER_GAP = 2;\n\nfunction buildPyramidChart(props: PyramidChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? PYRAMID_CHART_DEMO;\n const labelKey = usesDemo ? 'label' : (props.labelKey ?? 'label');\n const widthKey = usesDemo ? 'width' : (props.widthKey ?? 'width');\n const toneKey = usesDemo ? undefined : props.toneKey;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const widthName = accessorName(widthKey, 'width');\n const toneName = toneKey === undefined ? undefined : accessorName(toneKey, 'tone');\n\n const rows = data.map((datum, index) => ({\n index,\n datum,\n label: formatCategory(read(labelKey, datum, index), locale),\n width: finite(read(widthKey, datum, index)),\n tone: toneKey === undefined ? undefined : finite(read(toneKey, datum, index)),\n }));\n\n const base = modelBase(CHART, props, context, 'Pyramid chart', {\n columns: [accessorName(labelKey, 'label'), widthName, ...(toneName ? [toneName] : [])],\n rows: rows.map((r) => [\n r.label,\n formatValue(r.width, locale, numberFormat),\n ...(toneName ? [formatValue(r.tone, locale, undefined)] : []),\n ]),\n });\n\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = inset(card.area, PLOT_INSET);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (rows.length === 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, true);\n }\n\n const track = { x: plot.x + LABEL_COLUMN, width: Math.max(plot.width - LABEL_COLUMN - VALUE_COLUMN, 1) };\n const centre = track.x + track.width / 2;\n const tierHeight = plot.height / rows.length;\n let previous = Number.NEGATIVE_INFINITY;\n let monotonic = true;\n\n for (const row of rows) {\n const top = plot.y + row.index * tierHeight;\n const baseline = top + tierHeight / 2 + 4;\n labels.push({ x: plot.x, y: baseline, text: row.label, kind: 'tick', part: 'text', anchor: 'start' });\n if (row.width === undefined) {\n warnValue(CHART, widthName, `Tier ${row.index} has no finite width; it is omitted.`);\n continue;\n }\n if (row.width < previous) monotonic = false;\n previous = row.width;\n const percent = Math.min(Math.max(row.width, 0), 100);\n if (percent !== row.width) warnValue(CHART, widthName, `Tier ${row.index} is ${row.width}; it is drawn at the nearest end of 0-100.`);\n\n const width = (percent / 100) * track.width;\n const tier = { x: centre - width / 2, y: top + TIER_GAP / 2, width, height: Math.max(tierHeight - TIER_GAP, 0) };\n // Without a toneKey the tone repeats the width, which the tier's length and label already say.\n const tone = row.tone === undefined ? toneOf(percent / 100) : toneLevel(row.tone);\n if (row.tone !== undefined && tone !== row.tone) {\n warnValue(CHART, toneName ?? 'tone', `Tier ${row.index} has tone ${row.tone}; it is drawn at level ${tone}.`);\n }\n if (width > 0) strokes.push({ d: rectPath(tier), role: 'encoding', part: 'ink', ...(tone > 0 ? { tone } : {}) });\n const right = plot.x + plot.width;\n labels.push({ x: right, y: baseline, text: formatNumber(row.width, locale, numberFormat), kind: 'tick', part: 'axis', anchor: 'end' });\n // A consumer tone is information of its own, so it is printed as well as hatched (REQ-124).\n if (row.tone !== undefined) {\n labels.push({ x: right, y: baseline + 11, text: `tone ${tone}`, kind: 'tick', part: 'axis', anchor: 'end' });\n }\n hitAreas.push({ seriesKey: widthName, index: row.index, datum: row.datum, value: row.width, x: centre, y: tier.y + tier.height / 2, box: tier });\n }\n\n if (!monotonic) warnValue(CHART, widthName, 'The widths do not increase from the top tier down; the pyramid is drawn as given.');\n\n const description =\n props.description ?? `${base.name}. Pyramid of ${rows.length} tiers, from ${rows[0]?.label} at the top to ${rows[rows.length - 1]?.label} at the base; width on a 0 to 100 scale.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `PyramidChart` recipe (REQ-070): stacked, centred tiers whose width encodes the value. */\nexport const pyramidChart: ChartRecipe<PyramidChartProps> = /* @__PURE__ */ Object.freeze({\n name: CHART,\n build: buildPyramidChart,\n});\n","import type { Datum } from '../../types';\n\n/**\n * Demo dataset of `HeatmapChart` (REQ-093), in the default field names of Data Model §2.4.\n * Frozen and part of the stable surface (Data Model §4).\n */\nexport const HEATMAP_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { label: 'Mon', values: Object.freeze([12, 34, 58, 71, 66, 40]) },\n { label: 'Tue', values: Object.freeze([18, 42, 77, 88, 70, 35]) },\n { label: 'Wed', values: Object.freeze([9, 38, 64, 93, 81, 47]) },\n { label: 'Thu', values: Object.freeze([15, 29, 55, 68, 59, 31]) },\n { label: 'Fri', values: Object.freeze([6, 21, 43, 49, 37, 14]) },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, HeatmapChartProps, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { TONE_SCALE, finite, inset, rectPath, toneOf, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { HEATMAP_CHART_DEMO } from './demo';\n\nconst CHART = 'HeatmapChart';\nconst PLOT_INSET = 6;\n/** Room at the left for the row labels. */\nconst LABEL_COLUMN = 40;\nconst CELL_GAP = 2;\n/** Room above the cells for the column labels, when there are any. */\nconst HEADER_BAND = 14;\n/** Advance of one tabular digit at the 9.5 px tick size, with room to spare. */\nconst DIGIT_WIDTH = 5.5;\nconst LINE_HEIGHT = 12;\n\nfunction buildHeatmapChart(props: HeatmapChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? HEATMAP_CHART_DEMO;\n const labelKey = usesDemo ? 'label' : (props.labelKey ?? 'label');\n const valuesKey = usesDemo ? 'values' : (props.valuesKey ?? 'values');\n const scaleMax = props.scaleMax !== undefined && props.scaleMax > 0 ? props.scaleMax : 100;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n const rows = data.map((datum, index) => {\n const raw = read(valuesKey, datum, index);\n return {\n index,\n datum,\n label: formatCategory(read(labelKey, datum, index), locale),\n values: Array.isArray(raw) ? (raw as readonly unknown[]).map(finite) : undefined,\n };\n });\n // A row without an array of values is drawn blank and warned; it does not set the width.\n const lengths = rows.flatMap((r) => (r.values ? [r.values.length] : []));\n // Rows of unequal length use the shortest (Data Model §2.4).\n const columnCount = lengths.length > 0 ? lengths.reduce((a, b) => Math.min(a, b)) : 0;\n const named = props.columnLabels ?? [];\n const columns = Array.from({ length: columnCount }, (_, i) => named[i] ?? `#${i + 1}`);\n\n const base = modelBase(CHART, props, context, 'Heatmap', {\n columns: [accessorName(labelKey, 'label'), ...columns],\n rows: rows.map((r) => [r.label, ...columns.map((_, c) => formatValue(r.values?.[c], locale, numberFormat))]),\n });\n\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = inset(card.area, PLOT_INSET);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const valuesName = accessorName(valuesKey, 'values');\n for (const row of rows) {\n if (!row.values) warnValue(CHART, valuesName, `Row ${row.index} has no array of values; it is left blank.`);\n }\n if (lengths.some((length) => length !== columnCount)) {\n warnValue(CHART, valuesName, `Rows have ${columnCount} to ${lengths.reduce((a, b) => Math.max(a, b))} values; the first ${columnCount} of each are drawn.`);\n }\n if (named.length > columnCount && columnCount > 0) {\n warnValue(CHART, 'columnLabels', `${named.length} column labels for ${columnCount} columns; the extra ones are ignored.`);\n }\n const drawable = rows.some((r) => r.values?.slice(0, columnCount).some((v) => v !== undefined));\n if (!drawable) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, rows.length === 0);\n }\n\n // Named columns get a header band above the cells (delta-006); unnamed ones draw none.\n const header = named.length > 0 ? HEADER_BAND : 0;\n const cellWidth = (plot.width - LABEL_COLUMN) / columnCount;\n const cellHeight = (plot.height - header) / rows.length;\n if (header > 0) {\n columns.forEach((name, c) => {\n labels.push({ x: plot.x + LABEL_COLUMN + (c + 0.5) * cellWidth, y: plot.y + 10, text: name, kind: 'tick', part: 'axis', anchor: 'middle' });\n });\n }\n // When the widest value cannot be printed inside a cell, the value is carried by the cell's\n // size instead, as the activity grid carries its level, so it never overprints and still\n // survives `precision` mode (REQ-124).\n let widest = 0;\n for (const r of rows) for (const v of r.values ?? []) if (v !== undefined) widest = Math.max(widest, formatNumber(v, locale, numberFormat).length);\n const printed = widest * DIGIT_WIDTH <= cellWidth - CELL_GAP - 2 && cellHeight >= LINE_HEIGHT;\n let omitted = 0;\n\n for (const row of rows) {\n const top = plot.y + header + row.index * cellHeight;\n labels.push({ x: plot.x, y: top + cellHeight / 2 + 4, text: row.label, kind: 'tick', part: 'text', anchor: 'start' });\n for (let c = 0; c < columnCount; c += 1) {\n const value = row.values?.[c];\n const cell = inset({ x: plot.x + LABEL_COLUMN + c * cellWidth, y: top, width: cellWidth, height: cellHeight }, CELL_GAP / 2);\n const cx = cell.x + cell.width / 2;\n const cy = cell.y + cell.height / 2;\n if (value === undefined) {\n omitted += 1;\n if (printed) labels.push({ x: cx, y: cy + 4, text: '—', kind: 'tick', part: 'axis', anchor: 'middle' });\n continue;\n }\n const tone = toneOf(value / scaleMax);\n const scale = printed ? 1 : TONE_SCALE[tone];\n const drawn = { x: cx - (cell.width * scale) / 2, y: cy - (cell.height * scale) / 2, width: cell.width * scale, height: cell.height * scale };\n strokes.push({ d: rectPath(drawn), role: 'encoding', part: 'ink', ...(tone > 0 ? { tone } : {}) });\n // The tone is quantised; the printed value, or the cell's size, carries it too (REQ-124).\n if (printed) labels.push({ x: cx, y: cy + 4, text: formatNumber(value, locale, numberFormat), kind: 'tick', part: 'text', anchor: 'middle' });\n hitAreas.push({ seriesKey: columns[c] as string, index: row.index, datum: row.datum, value, x: cx, y: cy, box: cell, cell: { column: c, row: row.index } });\n }\n }\n if (omitted > 0) warnValue(CHART, valuesName, `${omitted} cells have no finite value and are left blank.`);\n\n let low = Number.POSITIVE_INFINITY;\n let high = Number.NEGATIVE_INFINITY;\n for (const h of hitAreas) {\n low = Math.min(low, h.value);\n high = Math.max(high, h.value);\n }\n const description =\n props.description ??\n `${base.name}. Heatmap of ${rows.length} rows by ${columnCount} columns, toned against ${formatNumber(scaleMax, locale, numberFormat)}; values range from ${formatNumber(low, locale, numberFormat)} to ${formatNumber(high, locale, numberFormat)}${printed ? '' : '; values are shown by cell size'}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `HeatmapChart` recipe (REQ-084): labelled rows of cells, toned by value and printed. */\nexport const heatmapChart: ChartRecipe<HeatmapChartProps> = /* @__PURE__ */ Object.freeze({\n name: CHART,\n build: buildHeatmapChart,\n});\n","import type { Datum } from '../../types';\n\n/**\n * Demo dataset of `TreemapChart` (REQ-093), in the field names of Data Model §2.5; it fills\n * the default 6 × 4 grid exactly. Frozen and part of the stable surface (Data Model §4).\n */\nexport const TREEMAP_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { label: 'Search', share: 48, cols: 3, rows: 4 },\n { label: 'Direct', share: 26, cols: 3, rows: 2 },\n { label: 'Social', share: 17, cols: 2, rows: 2 },\n { label: 'Email', share: 9, cols: 1, rows: 2 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke, TextLabel, TreemapChartProps } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { finite, inset, rectPath, toneLevel, toneOf, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { TREEMAP_CHART_DEMO } from './demo';\n\nconst CHART = 'TreemapChart';\nconst PLOT_INSET = 6;\nconst TILE_GAP = 3;\nconst TEXT_INSET = 6;\nconst LINE = 13;\n/** The grid a treemap declares when `columns` and `rows` are not given. */\nconst DEFAULT_COLUMNS = 6;\nconst DEFAULT_ROWS = 4;\n\nconst wholeCount = (raw: unknown): number | undefined => {\n const value = finite(raw);\n return value !== undefined && Number.isInteger(value) && value > 0 ? value : undefined;\n};\n\n/**\n * First-fit, row-major placement (Data Model §2.5): each tile takes the first cell, reading\n * the grid left to right and top to bottom, where its `cols × rows` block is free.\n */\nfunction place(taken: boolean[][], cols: number, rows: number): { column: number; row: number } | undefined {\n const gridRows = taken.length;\n const gridColumns = taken[0]?.length ?? 0;\n for (let row = 0; row + rows <= gridRows; row += 1) {\n for (let column = 0; column + cols <= gridColumns; column += 1) {\n let free = true;\n for (let r = row; r < row + rows && free; r += 1) {\n for (let c = column; c < column + cols && free; c += 1) free = !taken[r]?.[c];\n }\n if (!free) continue;\n for (let r = row; r < row + rows; r += 1) for (let c = column; c < column + cols; c += 1) (taken[r] as boolean[])[c] = true;\n return { column, row };\n }\n }\n return undefined;\n}\n\nfunction buildTreemapChart(props: TreemapChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? TREEMAP_CHART_DEMO;\n const labelKey = usesDemo ? 'label' : (props.labelKey ?? 'label');\n const shareKey = usesDemo ? 'share' : (props.shareKey ?? 'share');\n const gridColumns = wholeCount(props.columns) ?? DEFAULT_COLUMNS;\n const gridRows = wholeCount(props.rows) ?? DEFAULT_ROWS;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const shareName = accessorName(shareKey, 'share');\n\n const tiles = data.map((datum, index) => ({\n index,\n datum,\n label: formatCategory(read(labelKey, datum, index), locale),\n share: finite(read(shareKey, datum, index)),\n cols: wholeCount(datum.cols),\n rows: wholeCount(datum.rows),\n tone: finite(datum.tone),\n }));\n const shareText = (share: number | undefined) => (share === undefined ? '—' : `${formatNumber(share, locale, numberFormat)}%`);\n\n const base = modelBase(CHART, props, context, 'Treemap', {\n columns: [accessorName(labelKey, 'label'), shareName],\n rows: tiles.map((t) => [t.label, shareText(t.share)]),\n });\n\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = inset(card.area, PLOT_INSET);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const taken = Array.from({ length: gridRows }, () => Array<boolean>(gridColumns).fill(false));\n const cellWidth = plot.width / gridColumns;\n const cellHeight = plot.height / gridRows;\n const placed: (typeof tiles)[number][] = [];\n\n for (const tile of tiles) {\n if (tile.cols === undefined || tile.rows === undefined) {\n warnValue(CHART, 'cols', `Tile ${tile.index} needs whole, positive cols and rows; it is omitted.`);\n continue;\n }\n const spot = place(taken, tile.cols, tile.rows);\n if (!spot) {\n warnValue(CHART, 'cols', `Tile ${tile.index} (${tile.cols} × ${tile.rows}) no longer fits the ${gridColumns} × ${gridRows} grid; it is omitted.`);\n continue;\n }\n // The pointer answers anywhere in the tile's block; the drawn tile leaves a gap around it.\n const box = { x: plot.x + spot.column * cellWidth, y: plot.y + spot.row * cellHeight, width: tile.cols * cellWidth, height: tile.rows * cellHeight };\n const drawn = inset(box, TILE_GAP / 2);\n // Without a tone of its own a tile repeats its share, which it also prints.\n const tone = tile.tone === undefined ? toneOf((tile.share ?? 0) / 100) : toneLevel(tile.tone);\n strokes.push({ d: rectPath(drawn), role: 'encoding', part: 'ink', ...(tone > 0 ? { tone } : {}) });\n const x = drawn.x + TEXT_INSET;\n labels.push({ x, y: drawn.y + LINE, text: tile.label, kind: 'tick', part: 'text', anchor: 'start' });\n labels.push({ x, y: drawn.y + 2 * LINE, text: shareText(tile.share), kind: 'tick', part: 'axis', anchor: 'start' });\n // A consumer tone is information of its own, so it is printed as well as hatched (REQ-124).\n if (tile.tone !== undefined) labels.push({ x, y: drawn.y + 3 * LINE, text: `tone ${tone}`, kind: 'tick', part: 'axis', anchor: 'start' });\n placed.push(tile);\n hitAreas.push({ seriesKey: shareName, index: tile.index, datum: tile.datum, value: tile.share ?? 0, x: box.x + box.width / 2, y: box.y + box.height / 2, box });\n }\n\n if (hitAreas.length === 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, tiles.length === 0);\n }\n\n const description =\n props.description ??\n `${base.name}. Treemap of ${hitAreas.length} tiles in a ${gridColumns} by ${gridRows} grid; ${placed.map((t) => `${t.label} ${shareText(t.share)}`).join(', ')}${\n placed.length < tiles.length ? `; ${tiles.length - placed.length} omitted` : ''\n }.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `TreemapChart` recipe (REQ-085): tiles placed first-fit in a declared grid, each labelled with its share. */\nexport const treemapChart: ChartRecipe<TreemapChartProps> = /* @__PURE__ */ Object.freeze({\n name: CHART,\n build: buildTreemapChart,\n});\n","import type { Datum } from '../../types';\n\n/**\n * Demo dataset of `SankeyChart` (REQ-093), in the default field names of Data Model §2.7.\n * Frozen and part of the stable surface (Data Model §4).\n */\nexport const SANKEY_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { source: 'Search', target: 'Visit', value: 48 },\n { source: 'Social', target: 'Visit', value: 27 },\n { source: 'Email', target: 'Visit', value: 15 },\n { source: 'Visit', target: 'Signup', value: 42 },\n { source: 'Visit', target: 'Bounce', value: 48 },\n { source: 'Signup', target: 'Paid', value: 18 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, Datum, HitArea, RecipeContext, SankeyChartProps, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { finite, inset, rectPath, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { SANKEY_CHART_DEMO } from './demo';\n\nconst CHART = 'SankeyChart';\nconst PLOT_INSET = 6;\nconst NODE_WIDTH = 8;\nconst NODE_GAP = 10;\n/** The largest share of the height the gaps of one layer may take. */\nconst MAX_GAP_SHARE = 0.5;\nconst LABEL_GAP = 4;\n\ninterface Flow {\n readonly index: number;\n readonly datum: Datum;\n readonly source: string;\n readonly target: string;\n readonly value: number;\n}\n\ninterface Node {\n readonly name: string;\n layer: number;\n inflow: number;\n outflow: number;\n x: number;\n y: number;\n height: number;\n /** Where the next outgoing and incoming band attach. */\n outCursor: number;\n inCursor: number;\n}\n\n/** True when `to` can already be reached from `from` along the kept flows. */\nfunction reaches(edges: ReadonlyMap<string, readonly string[]>, from: string, to: string): boolean {\n const stack = [from];\n const seen = new Set<string>();\n while (stack.length > 0) {\n const name = stack.pop() as string;\n if (name === to) return true;\n if (seen.has(name)) continue;\n seen.add(name);\n stack.push(...(edges.get(name) ?? []));\n }\n return false;\n}\n\nfunction buildSankeyChart(props: SankeyChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? SANKEY_CHART_DEMO;\n const sourceKey = usesDemo ? 'source' : (props.sourceKey ?? 'source');\n const targetKey = usesDemo ? 'target' : (props.targetKey ?? 'target');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n\n // Flows that cannot be drawn — non-positive, or closing a cycle — are dropped and warned\n // (Data Model §2.7): a band of negative width, or a loop, has no layered drawing.\n const flows: Flow[] = [];\n const edges = new Map<string, string[]>();\n data.forEach((datum, index) => {\n const rawSource = read(sourceKey, datum, index);\n const rawTarget = read(targetKey, datum, index);\n // A flow needs both ends: a missing one (often a mistyped key) is dropped, not named \"—\".\n const missing = rawSource === null || rawSource === undefined ? 'source' : rawTarget === null || rawTarget === undefined ? 'target' : undefined;\n if (missing) {\n warnValue(CHART, accessorName(missing === 'source' ? sourceKey : targetKey, missing), `Flow ${index} has no ${missing}; it is omitted.`);\n return;\n }\n const source = formatCategory(rawSource, locale);\n const target = formatCategory(rawTarget, locale);\n const value = finite(read(valueKey, datum, index));\n if (value === undefined || value <= 0) {\n warnValue(CHART, valueName, `Flow ${index} (${source} → ${target}) is ${String(value ?? 'not finite')}; flows must be positive, so it is omitted.`);\n return;\n }\n if (reaches(edges, target, source)) {\n warnValue(CHART, accessorName(targetKey, 'target'), `Flow ${index} (${source} → ${target}) would close a cycle; it is omitted.`);\n return;\n }\n edges.set(source, [...(edges.get(source) ?? []), target]);\n flows.push({ index, datum, source, target, value });\n });\n\n const base = modelBase(CHART, props, context, 'Sankey diagram', {\n columns: ['flow', valueName],\n rows: flows.map((f) => [`${f.source} → ${f.target}`, formatNumber(f.value, locale, numberFormat)]),\n });\n\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = inset(card.area, PLOT_INSET);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (flows.length === 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n // Nodes in order of first appearance; each sits one layer past its furthest source.\n const nodes = new Map<string, Node>();\n const node = (name: string): Node => {\n let found = nodes.get(name);\n if (!found) {\n found = { name, layer: 0, inflow: 0, outflow: 0, x: 0, y: 0, height: 0, outCursor: 0, inCursor: 0 };\n nodes.set(name, found);\n }\n return found;\n };\n for (const flow of flows) {\n node(flow.source).outflow += flow.value;\n node(flow.target).inflow += flow.value;\n }\n // The graph is acyclic, so relaxing every flow once per node settles the longest paths.\n for (let pass = 0; pass < nodes.size; pass += 1) {\n for (const flow of flows) {\n const target = node(flow.target);\n target.layer = Math.max(target.layer, node(flow.source).layer + 1);\n }\n }\n\n const layers: Node[][] = [];\n for (const n of nodes.values()) (layers[n.layer] ??= []).push(n);\n const throughput = (n: Node) => Math.max(n.inflow, n.outflow);\n // Gaps between nodes take at most half the height, so a crowded layer still leaves room for\n // its flows; one scale for every layer then lets the fullest layer fill the height.\n const gapOf = (count: number) => (count > 1 ? Math.min(NODE_GAP, (plot.height * MAX_GAP_SHARE) / (count - 1)) : 0);\n // A one-node layer has no gap to narrow, so it is never crowded.\n const crowded = layers.filter((layer) => layer.length > 1 && gapOf(layer.length) < NODE_GAP);\n if (crowded.length > 0) {\n warnValue(CHART, accessorName(targetKey, 'target'), `A layer of ${Math.max(...crowded.map((l) => l.length))} nodes is crowded; its gaps are narrowed to fit.`);\n }\n const scale = layers.reduce(\n (smallest, layer) => Math.min(smallest, (plot.height - (layer.length - 1) * gapOf(layer.length)) / layer.reduce((sum, n) => sum + throughput(n), 0)),\n Number.POSITIVE_INFINITY,\n );\n const step = layers.length > 1 ? (plot.width - NODE_WIDTH) / (layers.length - 1) : 0;\n layers.forEach((layer, index) => {\n const gap = gapOf(layer.length);\n const height = layer.reduce((sum, n) => sum + throughput(n) * scale, 0) + (layer.length - 1) * gap;\n let y = plot.y + (plot.height - height) / 2;\n for (const n of layer) {\n n.x = plot.x + index * step;\n n.y = y;\n n.height = throughput(n) * scale;\n n.outCursor = y;\n n.inCursor = y;\n y += n.height + gap;\n }\n });\n\n flows.forEach((flow, row) => {\n const source = node(flow.source);\n const target = node(flow.target);\n const width = flow.value * scale;\n const x0 = source.x + NODE_WIDTH;\n const x1 = target.x;\n const y0 = source.outCursor;\n const y1 = target.inCursor;\n source.outCursor += width;\n target.inCursor += width;\n const mx = (x0 + x1) / 2;\n const d = `M${x0},${y0}C${mx},${y0},${mx},${y1},${x1},${y1}V${y1 + width}C${mx},${y1 + width},${mx},${y0 + width},${x0},${y0 + width}Z`;\n strokes.push({ d, role: 'encoding', part: 'ink-secondary', tone: 1 });\n hitAreas.push({ seriesKey: valueName, index: row, datum: flow.datum, value: flow.value, x: mx, y: (y0 + y1) / 2 + width / 2 });\n });\n\n const last = layers.length - 1;\n for (const n of nodes.values()) {\n strokes.push({ d: rectPath({ x: n.x, y: n.y, width: NODE_WIDTH, height: n.height }), role: 'encoding', part: 'ink', tone: 3 });\n const end = n.layer === last && last > 0;\n labels.push({\n x: end ? n.x - LABEL_GAP : n.x + NODE_WIDTH + LABEL_GAP,\n y: n.y + n.height / 2 + 4,\n text: `${n.name} ${formatNumber(throughput(n), locale, numberFormat)}`,\n kind: 'tick',\n part: 'text',\n anchor: end ? 'end' : 'start',\n });\n }\n\n // REQ-097: the flow total is not a prop; it is derived as the flow leaving the nodes that\n // receive none, which is everything that enters the diagram.\n const total = [...nodes.values()].filter((n) => n.inflow === 0).reduce((sum, n) => sum + n.outflow, 0);\n const description =\n props.description ??\n `${base.name}. Sankey diagram of ${flows.length} flows between ${nodes.size} nodes in ${layers.length} layers; total flow of ${formatNumber(total, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `SankeyChart` recipe (REQ-086): flow bands between nodes layered by longest path. */\nexport const sankeyChart: ChartRecipe<SankeyChartProps> = /* @__PURE__ */ Object.freeze({\n name: CHART,\n build: buildSankeyChart,\n});\n","import { createPrng } from '../../render/prng';\nimport type { Datum } from '../../types';\nimport { isoDate, parseIsoDate, weekday } from '../shared/dates';\n\n/** The demo's pinned end date: never `today`, so server and client agree (Data Model §4). */\nexport const ACTIVITY_GRID_DEMO_END = '2026-06-30';\n/** The demo's fixed seed, which pins the counts. */\nexport const ACTIVITY_GRID_DEMO_SEED = 1592;\nconst DAYS = 26 * 7;\n\n/**\n * Demo dataset of `ActivityGrid` (REQ-093), the only generated one: 26 weeks ending on\n * {@link ACTIVITY_GRID_DEMO_END}, counts drawn from {@link ACTIVITY_GRID_DEMO_SEED}. It is\n * generated once, at module load, and frozen; the level is quantised here, as a consumer would,\n * because the library never derives it from the count (Data Model §2.8).\n */\nexport const ACTIVITY_GRID_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ (() => {\n const next = createPrng(ACTIVITY_GRID_DEMO_SEED);\n const first = parseIsoDate(ACTIVITY_GRID_DEMO_END) - (DAYS - 1);\n return Array.from({ length: DAYS }, (_, i) => {\n const day = first + i;\n const weekend = weekday(day) === 0 || weekday(day) === 6;\n const r = next();\n const count = Math.floor(r * r * (weekend ? 5 : 14));\n const level = count === 0 ? 0 : count <= 2 ? 1 : count <= 5 ? 2 : count <= 9 ? 3 : 4;\n return Object.freeze({ date: isoDate(day), count, level });\n });\n })(),\n);\n","import type { ActivityGridProps, ChartModel, ChartRecipe, Datum, HitArea, RecipeContext, Stroke, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { finite, inset, rectPath, toneLevel, warnValue } from '../shared/cells';\nimport { isoDate, parseIsoDate } from '../shared/dates';\nimport { accessorName, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { ACTIVITY_GRID_DEMO } from './demo';\n\nconst CHART = 'ActivityGrid';\nconst PLOT_INSET = 6;\n/** Room above the grid for the month labels. */\nconst MONTH_BAND = 14;\nconst DEFAULT_WEEKS = 26;\nconst DAY_MS = 86_400_000;\n/**\n * The side of a cell, as a share of its slot, for each level: the level is carried by size as\n * well as by tone, so it survives `precision` mode, which draws no hatching (REQ-124).\n */\nconst CELL_SCALE: Readonly<Record<ToneLevel, number>> = { 0: 0.4, 1: 0.55, 2: 0.7, 3: 0.85, 4: 1 };\nconst CELL_FILL = 0.86;\n/** Fewest columns between two month labels. */\nconst MONTH_GAP = 3;\n\ninterface Day {\n readonly datum: Datum;\n readonly day: number;\n readonly count: number | undefined;\n readonly level: ToneLevel;\n}\n\nfunction buildActivityGrid(props: ActivityGridProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? ACTIVITY_GRID_DEMO;\n const dateKey = usesDemo ? 'date' : (props.dateKey ?? 'date');\n const countKey = usesDemo ? 'count' : (props.countKey ?? 'count');\n const levelKey = usesDemo ? 'level' : (props.levelKey ?? 'level');\n const weeks = props.weeks !== undefined && Number.isInteger(props.weeks) && props.weeks > 0 ? props.weeks : DEFAULT_WEEKS;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const countName = accessorName(countKey, 'count');\n const levelName = accessorName(levelKey, 'level');\n\n const parsed: Day[] = [];\n data.forEach((datum, index) => {\n const iso = String(read(dateKey, datum, index));\n const day = parseIsoDate(iso);\n // A date that does not exist (2026-02-31) would roll over onto a real one: it is rejected.\n if (Number.isNaN(day) || isoDate(day) !== iso) {\n warnValue(CHART, accessorName(dateKey, 'date'), `Row ${index} (${iso}) is not a calendar date in ISO form; it is omitted.`);\n return;\n }\n const raw = finite(read(levelKey, datum, index));\n const level = raw === undefined ? 0 : toneLevel(raw);\n if (raw !== level) warnValue(CHART, levelName, `Row ${index} has level ${String(raw)}; it is drawn at level ${level}.`);\n parsed.push({ datum, day, count: finite(read(countKey, datum, index)), level });\n });\n // The grid runs forward in time whatever order the rows came in.\n let days = [...parsed].sort((a, b) => a.day - b.day);\n // One cell per day: a repeated date keeps its first row.\n const unique = days.filter((d, i) => i === 0 || d.day !== days[i - 1]?.day);\n if (unique.length < days.length) {\n warnValue(CHART, accessorName(dateKey, 'date'), `${days.length - unique.length} rows repeat a date; the first row of each day is kept.`);\n days = unique;\n }\n // Whole weeks only (Data Model §2.8): the oldest days of a partial week are trimmed.\n const partial = days.length % 7;\n if (partial > 0) {\n warnValue(CHART, 'data', `${days.length} days are not whole weeks; the oldest ${partial} are omitted.`);\n days = days.slice(partial);\n }\n days = days.slice(-weeks * 7);\n // Cells are placed by position, so a missing day shifts every later one off its weekday.\n if (days.some((d, i) => i > 0 && d.day !== (days[i - 1]?.day ?? 0) + 1)) {\n warnValue(CHART, accessorName(dateKey, 'date'), 'The dates are not consecutive; cells are placed by position, one per row.');\n }\n\n const base = modelBase(CHART, props, context, 'Activity grid', {\n columns: [accessorName(dateKey, 'date'), countName, levelName],\n rows: days.map((d) => [isoDate(d.day), formatValue(d.count, locale, numberFormat), String(d.level)]),\n });\n\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = inset(card.area, PLOT_INSET);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (days.length === 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const columns = days.length / 7;\n const slot = Math.min(plot.width / columns, (plot.height - MONTH_BAND) / 7);\n const top = plot.y + MONTH_BAND;\n const month = new Intl.DateTimeFormat(locale, { month: 'short', timeZone: 'UTC' });\n // A month label names the first column that starts in it; two closer than MONTH_GAP columns\n // would collide, so a leading partial month gives way to the next, and any other newcomer waits.\n const months: { column: number; name: string }[] = [];\n\n days.forEach((d, index) => {\n const column = Math.floor(index / 7);\n const row = index % 7;\n if (row === 0) {\n const name = month.format(new Date(d.day * DAY_MS));\n const last = months.at(-1);\n if (name !== last?.name) {\n if (last && column - last.column < MONTH_GAP) {\n if (months.length === 1) months[0] = { column, name };\n } else {\n months.push({ column, name });\n }\n }\n }\n const side = slot * CELL_FILL * CELL_SCALE[d.level];\n const cx = plot.x + column * slot + slot / 2;\n const cy = top + row * slot + slot / 2;\n const cell = { x: cx - side / 2, y: cy - side / 2, width: side, height: side };\n strokes.push({ d: rectPath(cell), role: 'encoding', part: 'ink', ...(d.level > 0 ? { tone: d.level } : {}) });\n hitAreas.push({ seriesKey: countName, index, datum: d.datum, value: d.count ?? 0, x: cx, y: cy, box: cell, cell: { column, row } });\n });\n\n for (const { column, name } of months) {\n labels.push({ x: plot.x + column * slot, y: plot.y + 10, text: name, kind: 'tick', part: 'axis', anchor: 'start' });\n }\n\n const total = days.reduce((sum, d) => sum + (d.count ?? 0), 0);\n const active = days.filter((d) => d.level > 0).length;\n const description =\n props.description ??\n `${base.name}. Activity grid of ${columns} weeks, ${isoDate(days[0]!.day)} to ${isoDate(days[days.length - 1]!.day)}; ${formatNumber(total, locale, numberFormat)} in total, active on ${active} of ${days.length} days.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `ActivityGrid` recipe (REQ-087): one cell per day, a column per week, sized and toned by level. */\nexport const activityGrid: ChartRecipe<ActivityGridProps> = /* @__PURE__ */ Object.freeze({\n name: CHART,\n build: buildActivityGrid,\n});\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `StepChart` (REQ-093): a price tier over the year. Frozen (Data Model §4). */\nexport const STEP_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 'Jan', value: 12 },\n { x: 'Feb', value: 12 },\n { x: 'Mar', value: 18 },\n { x: 'Apr', value: 18 },\n { x: 'May', value: 15 },\n { x: 'Jun', value: 24 },\n { x: 'Jul', value: 24 },\n { x: 'Aug', value: 30 },\n ].map((row) => Object.freeze(row)),\n);\n","import { curveStep, curveStepAfter, curveStepBefore, line, type CurveFactory } from 'd3-shape';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, HitArea, RecipeContext, StepChartProps, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, categoryAxis, categoryLabels, checkVolume, readSeries, seriesValues, valueAxis, type SeriesPoint } from '../shared/cartesian';\nimport { warnValue } from '../shared/cells';\nimport { accessorName, circlePath, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { STEP_CHART_DEMO } from './demo';\n\nconst CHART = 'StepChart';\nconst HEIGHTEN_RADIUS = 3.5;\nconst STEPS: Readonly<Record<NonNullable<StepChartProps['step']>, CurveFactory>> = {\n after: curveStepAfter,\n before: curveStepBefore,\n middle: curveStep,\n};\n\nfunction buildStepChart(props: StepChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? STEP_CHART_DEMO;\n const xKey = usesDemo ? 'x' : (props.xKey ?? 'x');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n const series = readSeries(data, valueKey, 'value');\n checkVolume(CHART, [series]);\n const xName = accessorName(xKey, 'x');\n const xValues = data.map((datum, index) => read(xKey, datum, index));\n const xLabels = xValues.map((value) => formatCategory(value, locale));\n\n const base = modelBase(CHART, props, context, 'Step chart', {\n columns: [xName, series.key],\n rows: data.map((_, i) => [xLabels[i] ?? '', formatValue(series.points[i]?.value, locale, numberFormat)]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = cartesianPlot(card.area);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (series.missing > 0 && data.length > 0) warnValue(CHART, series.key, `${series.missing} of ${data.length} values are not finite; the steps skip them.`);\n const range = extent(seriesValues([series]));\n if (data.length === 0 || range === undefined) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const axis = valueAxis(plot, range, { chart: CHART, property: series.key, padding: context.domainPadding, locale, numberFormat });\n const y = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const xAt = categoryAxis(xValues, plot, { chart: CHART, property: xName, padding: context.domainPadding }).at;\n\n const d = line<SeriesPoint>()\n .defined((p) => p.value !== undefined)\n .x((p) => xAt(p.index))\n .y((p) => y(p.value ?? 0))\n .curve(STEPS[props.step ?? 'after'])(series.points);\n if (d) strokes.push({ d, role: 'encoding', part: 'ink' });\n\n for (const p of series.points) {\n if (p.value === undefined) continue;\n hitAreas.push({ seriesKey: series.key, index: p.index, datum: p.datum, value: p.value, x: xAt(p.index), y: y(p.value) });\n }\n const live = hitAreas.at(-1);\n if (live) {\n const mark = circlePath(live.x, live.y, HEIGHTEN_RADIUS);\n strokes.push({ d: mark, role: 'encoding', part: 'heighten', paint: 'fill' });\n strokes.push({ d: mark, role: 'encoding', part: 'ink', paint: 'stroke' });\n }\n labels.push(...categoryLabels(xLabels, xAt, card.area, plot));\n\n const description =\n props.description ??\n `${base.name}. Step chart of ${data.length} ${xName} values, stepping ${props.step ?? 'after'} each point; ${series.key} ranges from ${formatNumber(range[0], locale, numberFormat)} to ${formatNumber(range[1], locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `StepChart` recipe (REQ-061): a series drawn as exact steps. */\nexport const stepChart: ChartRecipe<StepChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildStepChart });\n","import { curveLinear, curveMonotoneX, curveNatural, curveStepAfter, type CurveFactory } from 'd3-shape';\nimport type { LineCurve } from '../../types';\n\n/** The curves a line or an area may take (API Spec §5.1: `monotone` by default). */\nexport const CURVES: Readonly<Record<LineCurve, CurveFactory>> = {\n monotone: curveMonotoneX,\n linear: curveLinear,\n natural: curveNatural,\n step: curveStepAfter,\n};\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `SparklineRows` (REQ-093): service health, one row each (delta-008). Frozen. */\nexport const SPARKLINE_ROWS_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { name: 'API', readout: '99.9%', points: Object.freeze([98, 99, 99, 97, 99, 100, 99, 100]) },\n { name: 'Queue', points: Object.freeze([12, 18, 15, 22, 19, 25, 21, 17]) },\n { name: 'Cache', readout: '84%', points: Object.freeze([70, 72, 78, 75, 80, 83, 81, 84]) },\n { name: 'Search', points: Object.freeze([240, 220, 260, 210, 190, 205, 180, 170]) },\n ].map((row) => Object.freeze(row)),\n);\n","import { line } from 'd3-shape';\nimport type { ChartModel, ChartRecipe, Datum, HitArea, RecipeContext, SparklineRowsProps, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { checkCount } from '../shared/cartesian';\nimport { finite, inset, warnValue } from '../shared/cells';\nimport { CURVES } from '../shared/curves';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { SPARKLINE_ROWS_DEMO } from './demo';\n\nconst CHART = 'SparklineRows';\nconst PLOT_INSET = 6;\nconst NAME_COLUMN = 64;\nconst READOUT_COLUMN = 52;\n/** Room above and below each sparkline inside its row. */\nconst ROW_PAD = 4;\n\n/** A point's value: through `pointKey`, else the point itself when a number, else its `value`. */\nfunction pointValue(point: unknown, index: number, pointKey: SparklineRowsProps['pointKey']): number | undefined {\n if (pointKey !== undefined) return typeof point === 'object' && point !== null ? finite(read(pointKey, point as Datum, index)) : undefined;\n if (typeof point === 'number') return finite(point);\n return typeof point === 'object' && point !== null ? finite((point as Datum).value) : undefined;\n}\n\nfunction buildSparklineRows(props: SparklineRowsProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const all = props.data ?? SPARKLINE_ROWS_DEMO;\n const data = props.rows !== undefined && Number.isInteger(props.rows) && props.rows >= 0 ? all.slice(0, props.rows) : all;\n if (props.rows !== undefined && !(Number.isInteger(props.rows) && props.rows >= 0)) warnValue(CHART, 'rows', `${String(props.rows)} is not a whole number of rows ≥ 0; every row is shown.`);\n const nameKey = usesDemo ? 'name' : (props.nameKey ?? 'name');\n const readoutKey = usesDemo ? 'readout' : (props.readoutKey ?? 'readout');\n const seriesKey = usesDemo ? 'points' : (props.seriesKey ?? 'points');\n const pointKey = usesDemo ? undefined : props.pointKey;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const readoutName = accessorName(readoutKey, 'readout');\n\n const rows = data.map((datum, index) => {\n const raw = read(seriesKey, datum, index);\n const points = Array.isArray(raw) ? (raw as readonly unknown[]).map((p, i) => pointValue(p, i, pointKey)) : [];\n const values = points.flatMap((v) => (v === undefined ? [] : [v]));\n const given = read(readoutKey, datum, index);\n const last = [...points].reverse().find((v) => v !== undefined);\n return {\n index,\n datum,\n name: formatCategory(read(nameKey, datum, index), locale),\n points,\n values,\n last,\n readout: given !== undefined && given !== null ? formatValue(given, locale, numberFormat) : last === undefined ? '—' : formatNumber(last, locale, numberFormat),\n };\n });\n for (const row of rows) checkCount(CHART, row.name, row.points.length);\n\n const base = modelBase(CHART, props, context, 'Sparkline rows', {\n columns: [accessorName(nameKey, 'name'), readoutName],\n rows: rows.map((r) => [r.name, r.readout]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = inset(card.area, PLOT_INSET);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (rows.length === 0 || rows.every((r) => r.values.length === 0)) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, rows.length === 0);\n }\n\n const rowHeight = plot.height / rows.length;\n const longest = Math.max(...rows.map((r) => r.points.length));\n const lineX = plot.x + NAME_COLUMN;\n const lineWidth = Math.max(plot.width - NAME_COLUMN - READOUT_COLUMN, 1);\n const xAt = (i: number) => (longest > 1 ? lineX + (i / (longest - 1)) * lineWidth : lineX + lineWidth / 2);\n\n for (const row of rows) {\n const band = { x: plot.x, y: plot.y + row.index * rowHeight, width: plot.width, height: rowHeight };\n const baseline = band.y + rowHeight / 2 + 4;\n // The name and the readout are printed; the sparkline is the shape of the series (REQ-124).\n labels.push({ x: plot.x, y: baseline, text: row.name, kind: 'tick', part: 'text', anchor: 'start' });\n labels.push({ x: plot.x + plot.width, y: baseline, text: row.readout, kind: 'tick', part: 'text', anchor: 'end' });\n if (row.values.length === 0) {\n warnValue(CHART, accessorName(seriesKey, 'points'), `Row ${row.index} (${row.name}) has no finite points; its sparkline is omitted.`);\n continue;\n }\n // Each row scales to its own range: the sparkline shows shape, the readout the value.\n const low = Math.min(...row.values);\n const high = Math.max(...row.values);\n const top = band.y + ROW_PAD;\n const span = Math.max(rowHeight - 2 * ROW_PAD, 1);\n const yAt = (v: number) => (high === low ? top + span / 2 : top + span - ((v - low) / (high - low)) * span);\n const indexed = row.points.map((value, i) => ({ value, i }));\n const d = line<(typeof indexed)[number]>().defined((p) => p.value !== undefined).x((p) => xAt(p.i)).y((p) => yAt(p.value ?? 0)).curve(CURVES.monotone)(indexed);\n if (d) strokes.push({ d, role: 'encoding', part: 'ink' });\n const lastIndex = row.points.lastIndexOf(row.last);\n hitAreas.push({ seriesKey: readoutName, index: row.index, datum: row.datum as Datum, value: row.last ?? 0, x: xAt(lastIndex), y: yAt(row.last ?? 0), box: band });\n }\n\n const description = props.description ?? `${base.name}. ${rows.length} rows: ${rows.map((r) => `${r.name} ${r.readout}`).join(', ')}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `SparklineRows` recipe (REQ-062): one row per series — name, sparkline, printed readout. */\nexport const sparklineRows: ChartRecipe<SparklineRowsProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildSparklineRows });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `KpiCard` (REQ-093): daily orders over two weeks. Frozen (Data Model §4). */\nexport const KPI_CARD_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [118, 124, 121, 132, 140, 136, 129, 142, 151, 147, 155, 162, 158, 171].map((value) => Object.freeze({ value })),\n);\n\nexport const KPI_CARD_DEMO_PROPS = /* @__PURE__ */ Object.freeze({ metric: 'orders per day', delta: 8.2 } as const);\n","import { area, line } from 'd3-shape';\nimport { linearScale } from '../../scales/scales';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, HitArea, KpiCardProps, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { checkVolume, readSeries, seriesValues, type SeriesPoint } from '../shared/cartesian';\nimport { inset, warnValue } from '../shared/cells';\nimport { CURVES } from '../shared/curves';\nimport { accessorName, formatNumber, formatValue } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { KPI_CARD_DEMO, KPI_CARD_DEMO_PROPS } from './demo';\n\nconst CHART = 'KpiCard';\nconst PLOT_INSET = 6;\n/** The row at the top of the drawing area that carries the delta. */\nconst DELTA_BAND = 18;\nconst MARK = 7;\nconst CHAR = 5.6;\n\nfunction buildKpiCard(props: KpiCardProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? KPI_CARD_DEMO;\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const metric = usesDemo ? (props.metric ?? KPI_CARD_DEMO_PROPS.metric) : props.metric;\n const delta = usesDemo ? (props.delta ?? KPI_CARD_DEMO_PROPS.delta) : props.delta;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n const series = readSeries(data, valueKey, 'value');\n checkVolume(CHART, [series]);\n const last = [...series.points].reverse().find((p) => p.value !== undefined)?.value;\n\n const base = modelBase(CHART, props, context, metric ?? 'KPI', {\n columns: ['point', series.key],\n rows: series.points.map((p) => [String(p.index + 1), formatValue(p.value, locale, numberFormat)]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n // The figure is the card's own value line: the prop, else the latest value; the metric names it.\n const card = cardLayout({ ...props, value: props.value ?? last, unit: props.unit ?? metric }, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const drawing = inset(card.area, PLOT_INSET);\n const plot = { x: drawing.x, y: drawing.y + DELTA_BAND, width: drawing.width, height: Math.max(drawing.height - DELTA_BAND, 1) };\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n // One text for the delta, printed and described alike (REQ-120).\n const deltaText =\n delta !== undefined && Number.isFinite(delta) ? formatNumber(delta, locale, { ...(numberFormat ?? { maximumFractionDigits: 2 }), signDisplay: 'always' }) : undefined;\n if (delta !== undefined && deltaText !== undefined) {\n // The delta is printed with its sign, and a mark points its way: never tone alone (REQ-124).\n const text = deltaText;\n const right = drawing.x + drawing.width;\n labels.push({ x: right, y: drawing.y + 11, text, kind: 'tick', part: 'text', anchor: 'end' });\n const tone = props.deltaTone ?? (delta > 0 ? 'up' : delta < 0 ? 'down' : 'flat');\n const x0 = right - text.length * CHAR - MARK - 6;\n const top = drawing.y + 3;\n const bottom = top + MARK;\n const d =\n tone === 'up'\n ? `M${x0},${bottom}L${x0 + MARK / 2},${top}L${x0 + MARK},${bottom}Z`\n : tone === 'down'\n ? `M${x0},${top}L${x0 + MARK / 2},${bottom}L${x0 + MARK},${top}Z`\n : `M${x0},${top}L${x0 + MARK},${(top + bottom) / 2}L${x0},${bottom}Z`;\n strokes.push({ d, role: 'encoding', part: 'ink', paint: 'fill' });\n }\n\n if (series.missing > 0 && data.length > 0) warnValue(CHART, series.key, `${series.missing} of ${data.length} values are not finite; the sparkline breaks there.`);\n const range = extent(seriesValues([series]));\n if (data.length === 0 || range === undefined) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const bottom = plot.y + plot.height;\n const y = linearScale(range, [bottom, plot.y], { chart: CHART, property: series.key, padding: context.domainPadding });\n const xAt = (i: number) => (data.length > 1 ? plot.x + (i / (data.length - 1)) * plot.width : plot.x + plot.width / 2);\n const defined = (p: SeriesPoint) => p.value !== undefined;\n const shape = area<SeriesPoint>().defined(defined).x((p) => xAt(p.index)).y0(bottom).y1((p) => y(p.value ?? 0)).curve(CURVES.monotone)(series.points);\n if (shape) strokes.push({ d: shape, role: 'encoding', part: 'ink', paint: 'stroke', tone: 1 });\n const top = line<SeriesPoint>().defined(defined).x((p) => xAt(p.index)).y((p) => y(p.value ?? 0)).curve(CURVES.monotone)(series.points);\n if (top) strokes.push({ d: top, role: 'encoding', part: 'ink' });\n for (const p of series.points) {\n if (p.value === undefined) continue;\n hitAreas.push({ seriesKey: series.key, index: p.index, datum: p.datum, value: p.value, x: xAt(p.index), y: y(p.value) });\n }\n\n const description =\n props.description ??\n `${base.name}. ${metric ?? accessorName(valueKey, 'value')} at ${formatValue(props.value ?? last, locale, numberFormat)}${\n deltaText !== undefined ? `, change ${deltaText}` : ''\n }; ${data.length} points from ${formatNumber(range[0], locale, numberFormat)} to ${formatNumber(range[1], locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `KpiCard` recipe (REQ-063): the figure, its signed delta with a direction mark, and an area sparkline. */\nexport const kpiCard: ChartRecipe<KpiCardProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildKpiCard });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `BarChart` (REQ-093): orders per quarter against last year. Frozen (Data Model §4). */\nexport const BAR_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 'Q1', value: 42, previous: 35 },\n { x: 'Q2', value: 58, previous: 44 },\n { x: 'Q3', value: 51, previous: 49 },\n { x: 'Q4', value: 73, previous: 60 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const BAR_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({ xKey: 'x', valueKey: 'value', secondaryKey: 'previous' } as const);\n","import { extent } from '../../scales/util';\nimport type { BarChartProps, ChartModel, ChartRecipe, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport {\n AXIS_BAND,\n PLOT_INSET,\n cartesianPlot,\n categoryAxis,\n categoryLabels,\n checkVolume,\n horizontalValueAxis,\n legend,\n pillPath,\n readSeries,\n seriesValues,\n valueAxis,\n} from '../shared/cartesian';\nimport { warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { BAR_CHART_DEMO, BAR_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'BarChart';\n/** Room at the left for the category labels when bars run in rows. */\nconst ROW_LABELS = 56;\n/** Share of a category's band the bars fill, together. */\nconst BAR_FILL = 0.7;\n\nfunction buildBarChart(props: BarChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? BAR_CHART_DEMO;\n const xKey = usesDemo ? BAR_CHART_DEMO_KEYS.xKey : (props.xKey ?? 'x');\n const valueKey = usesDemo ? BAR_CHART_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n const secondaryKey = usesDemo ? BAR_CHART_DEMO_KEYS.secondaryKey : props.secondaryKey;\n const rows = props.orientation === 'rows';\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n const series = [readSeries(data, valueKey, 'value'), ...(secondaryKey === undefined ? [] : [readSeries(data, secondaryKey, 'secondary')])];\n checkVolume(CHART, series);\n const xName = accessorName(xKey, 'x');\n const xValues = data.map((datum, index) => read(xKey, datum, index));\n const xLabels = xValues.map((value) => formatCategory(value, locale));\n\n const base = modelBase(CHART, props, context, 'Bar chart', {\n columns: [xName, ...series.map((s) => s.key)],\n rows: data.map((_, i) => [xLabels[i] ?? '', ...series.map((s) => formatValue(s.points[i]?.value, locale, numberFormat))]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const paired = series.length > 1;\n const key = paired\n ? legend(card.area, series.map((s, i) => (i === 0 ? { name: s.key, part: 'ink' as const, tone: 2 as const } : { name: s.key, part: 'ink-secondary' as const, tone: 1 as const, dash: 'dotted' as const })))\n : { area: card.area, strokes: [], labels: [] };\n const area = key.area;\n const plot: Rect = rows\n ? { x: area.x + ROW_LABELS, y: area.y + PLOT_INSET, width: Math.max(area.width - ROW_LABELS - PLOT_INSET, 1), height: Math.max(area.height - AXIS_BAND - PLOT_INSET, 1) }\n : cartesianPlot(area);\n const strokes: Stroke[] = [...card.strokes, ...key.strokes];\n const labels: TextLabel[] = [...card.labels, ...key.labels];\n const hitAreas: HitArea[] = [];\n\n for (const s of series) if (s.missing > 0 && data.length > 0) warnValue(CHART, s.key, `${s.missing} of ${data.length} values are not finite; their bars are omitted.`);\n const range = extent(seriesValues(series));\n if (data.length === 0 || range === undefined) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const axisOptions = { chart: CHART, property: series[0]?.key ?? 'value', padding: context.domainPadding, locale, numberFormat };\n const axis = rows ? horizontalValueAxis(plot, area, range, axisOptions) : valueAxis(plot, range, axisOptions);\n const v = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n // Categories run along x as columns, or down y as rows; either way a band per category.\n const along = rows ? { x: plot.y, y: plot.x, width: plot.height, height: plot.width } : plot;\n const categories = categoryAxis(xValues, along, { chart: CHART, property: xName, padding: context.domainPadding, numeric: false, paddingInner: 0.3, paddingOuter: 0.15 });\n const thickness = (categories.bandwidth * BAR_FILL) / series.length;\n\n series.forEach((s, k) => {\n for (const p of s.points) {\n if (p.value === undefined) continue;\n const centre = categories.at(p.index) - (categories.bandwidth * BAR_FILL) / 2 + thickness * (k + 0.5);\n const from = v(Math.min(0, p.value));\n const to = v(Math.max(0, p.value));\n const bar: Rect = rows\n ? { x: from, y: centre - thickness / 2, width: to - from, height: thickness }\n : { x: centre - thickness / 2, y: to, width: thickness, height: from - to };\n strokes.push({ d: pillPath(bar), role: 'encoding', part: k === 0 ? 'ink' : 'ink-secondary', tone: k === 0 ? 2 : 1, ...(k === 0 ? {} : { dash: 'dotted' as const }) });\n const end = v(p.value);\n hitAreas.push({\n seriesKey: s.key,\n index: p.index,\n datum: p.datum,\n value: p.value,\n x: rows ? end : centre,\n y: rows ? centre : end,\n box: bar,\n ...(paired ? { cell: rows ? { column: k, row: p.index } : { column: p.index, row: k } } : {}),\n });\n }\n });\n\n if (rows) {\n xLabels.forEach((text, i) => labels.push({ x: area.x + PLOT_INSET, y: categories.at(i) + 4, text, kind: 'tick', part: 'axis', anchor: 'start' }));\n } else {\n labels.push(...categoryLabels(xLabels, categories.at, area, plot));\n }\n\n const ranges = series.map((s) => {\n const r = extent(seriesValues([s]));\n return r ? `${s.key} from ${formatNumber(r[0], locale, numberFormat)} to ${formatNumber(r[1], locale, numberFormat)}` : `${s.key} has no values`;\n });\n const description =\n props.description ?? `${base.name}. Bar chart in ${rows ? 'rows' : 'columns'} of ${data.length} ${xName} values; ${ranges.join('; ')}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `BarChart` recipe (REQ-064): pill bars, columns or rows, with an optional second series. */\nexport const barChart: ChartRecipe<BarChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildBarChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `StackedBarChart` (REQ-093): signups by plan per month. Frozen (Data Model §4). */\nexport const STACKED_BAR_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 'Jan', free: 40, pro: 18, team: 6 },\n { x: 'Feb', free: 46, pro: 21, team: 9 },\n { x: 'Mar', free: 38, pro: 26, team: 11 },\n { x: 'Apr', free: 52, pro: 24, team: 14 },\n { x: 'May', free: 49, pro: 31, team: 15 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const STACKED_BAR_CHART_DEMO_KEYS: readonly string[] = /* @__PURE__ */ Object.freeze(['free', 'pro', 'team']);\n","import type { ChartModel, ChartRecipe, HitArea, Rect, RecipeContext, StackedBarChartProps, Stroke, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, categoryAxis, categoryLabels, checkVolume, legend, readSeries, valueAxis } from '../shared/cartesian';\nimport { rectPath, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { STACKED_BAR_CHART_DEMO, STACKED_BAR_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'StackedBarChart';\n/** Tones of the stacked keys, bottom to top; a fifth key starts over. */\nconst TONES: readonly ToneLevel[] = [1, 2, 3, 4];\n\nfunction buildStackedBarChart(props: StackedBarChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? STACKED_BAR_CHART_DEMO;\n const xKey = usesDemo ? 'x' : (props.xKey ?? 'x');\n const keys = usesDemo ? STACKED_BAR_CHART_DEMO_KEYS : (props.keys ?? STACKED_BAR_CHART_DEMO_KEYS);\n const names = keys.map((k, i) => (usesDemo ? undefined : props.names?.[i]) ?? k);\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n // A series is known by its display name everywhere a reader meets it: legend, table, readout.\n const series = keys.map((k, i) => ({ ...readSeries(data, k, k), key: names[i] ?? k }));\n checkVolume(CHART, series);\n const xName = accessorName(xKey, 'x');\n const xValues = data.map((datum, index) => read(xKey, datum, index));\n const xLabels = xValues.map((value) => formatCategory(value, locale));\n\n const base = modelBase(CHART, props, context, 'Stacked bar chart', {\n columns: [xName, ...names],\n rows: data.map((_, i) => [xLabels[i] ?? '', ...series.map((s) => formatValue(s.points[i]?.value, locale, numberFormat))]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n // The legend lists the keys in stack order, bottom first: the name tells a key, not its tone (REQ-124).\n const key = legend(card.area, names.map((name, k) => ({ name, part: 'ink' as const, tone: TONES[k % TONES.length] })));\n const plot = cartesianPlot(key.area);\n const strokes: Stroke[] = [...card.strokes, ...key.strokes];\n const labels: TextLabel[] = [...card.labels, ...key.labels];\n const hitAreas: HitArea[] = [];\n\n let missing = 0;\n let negative = 0;\n const totals = data.map((_, i) =>\n series.reduce((sum, s) => {\n const value = s.points[i]?.value;\n if (value === undefined) {\n missing += 1;\n return sum;\n }\n if (value < 0) negative += 1;\n return sum + Math.max(value, 0);\n }, 0),\n );\n if (missing > 0 && data.length > 0) warnValue(CHART, keys[0] ?? 'keys', `${missing} values are not finite; their segments are omitted.`);\n if (negative > 0) warnValue(CHART, keys[0] ?? 'keys', `${negative} negative values cannot stack; they are drawn at zero.`);\n if (data.length === 0 || keys.length === 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const axis = valueAxis(plot, [0, Math.max(0, ...totals)], { chart: CHART, property: keys[0] ?? 'value', padding: context.domainPadding, locale, numberFormat });\n const y = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const categories = categoryAxis(xValues, plot, { chart: CHART, property: xName, padding: context.domainPadding, numeric: false, paddingInner: 0.35, paddingOuter: 0.2 });\n const width = categories.bandwidth;\n\n data.forEach((_, i) => {\n let below = 0;\n series.forEach((s, k) => {\n const p = s.points[i];\n if (p?.value === undefined) return;\n const height = Math.max(p.value, 0);\n const segment: Rect = { x: categories.at(i) - width / 2, y: y(below + height), width, height: y(below) - y(below + height) };\n if (segment.height > 0) strokes.push({ d: rectPath(segment), role: 'encoding', part: 'ink', tone: TONES[k % TONES.length] });\n hitAreas.push({ seriesKey: s.key, index: i, datum: p.datum, value: p.value, x: categories.at(i), y: segment.y, box: segment, cell: { column: i, row: k } });\n below += height;\n });\n });\n labels.push(...categoryLabels(xLabels, categories.at, key.area, plot));\n\n const largest = Math.max(...totals);\n const description =\n props.description ??\n `${base.name}. Stacked bars of ${keys.length} keys (${names.join(', ')}, bottom to top) over ${data.length} ${xName} values; the tallest stack totals ${formatNumber(largest, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `StackedBarChart` recipe (REQ-065): one segment per key, stacked from zero, named in a legend. */\nexport const stackedBarChart: ChartRecipe<StackedBarChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildStackedBarChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `ComposedChart` (REQ-093): revenue and margin per month. Frozen (Data Model §4). */\nexport const COMPOSED_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 'Jan', revenue: 42, margin: 18 },\n { x: 'Feb', revenue: 48, margin: 21 },\n { x: 'Mar', revenue: 39, margin: 17 },\n { x: 'Apr', revenue: 55, margin: 26 },\n { x: 'May', revenue: 61, margin: 30 },\n { x: 'Jun', revenue: 58, margin: 27 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const COMPOSED_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({ xKey: 'x', barKey: 'revenue', lineKey: 'margin' } as const);\n","import { line } from 'd3-shape';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, ComposedChartProps, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, categoryAxis, categoryLabels, checkVolume, legend, readSeries, seriesValues, valueAxis, type SeriesPoint } from '../shared/cartesian';\nimport { rectPath, warnValue } from '../shared/cells';\nimport { CURVES } from '../shared/curves';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { COMPOSED_CHART_DEMO, COMPOSED_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'ComposedChart';\nconst BAR_FILL = 0.6;\n\nfunction buildComposedChart(props: ComposedChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? COMPOSED_CHART_DEMO;\n const xKey = usesDemo ? COMPOSED_CHART_DEMO_KEYS.xKey : (props.xKey ?? 'x');\n const barKey = usesDemo ? COMPOSED_CHART_DEMO_KEYS.barKey : (props.barKey ?? 'bar');\n const lineKey = usesDemo ? COMPOSED_CHART_DEMO_KEYS.lineKey : (props.lineKey ?? 'line');\n const showLine = props.showLine ?? true;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n const bars = readSeries(data, barKey, 'bar');\n const trend = readSeries(data, lineKey, 'line');\n const series = showLine ? [bars, trend] : [bars];\n checkVolume(CHART, series);\n const xName = accessorName(xKey, 'x');\n const xValues = data.map((datum, index) => read(xKey, datum, index));\n const xLabels = xValues.map((value) => formatCategory(value, locale));\n\n const base = modelBase(CHART, props, context, 'Composed chart', {\n columns: [xName, ...series.map((s) => s.key)],\n rows: data.map((_, i) => [xLabels[i] ?? '', ...series.map((s) => formatValue(s.points[i]?.value, locale, numberFormat))]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const key = legend(card.area, [\n { name: bars.key, part: 'ink', tone: 2 },\n ...(showLine ? [{ name: trend.key, part: 'ink-secondary' as const }] : []),\n ]);\n const plot = cartesianPlot(key.area);\n const strokes: Stroke[] = [...card.strokes, ...key.strokes];\n const labels: TextLabel[] = [...card.labels, ...key.labels];\n const hitAreas: HitArea[] = [];\n\n for (const s of series) if (s.missing > 0 && data.length > 0) warnValue(CHART, s.key, `${s.missing} of ${data.length} values are not finite; they are omitted.`);\n const range = extent(seriesValues(series));\n if (data.length === 0 || range === undefined) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const axis = valueAxis(plot, range, { chart: CHART, property: bars.key, padding: context.domainPadding, locale, numberFormat });\n const y = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const categories = categoryAxis(xValues, plot, { chart: CHART, property: xName, padding: context.domainPadding, numeric: false, paddingInner: 0.3, paddingOuter: 0.15 });\n const width = categories.bandwidth * BAR_FILL;\n\n for (const p of bars.points) {\n if (p.value === undefined) continue;\n const top = y(Math.max(0, p.value));\n const bottom = y(Math.min(0, p.value));\n const bar: Rect = { x: categories.at(p.index) - width / 2, y: top, width, height: bottom - top };\n if (bar.height > 0) strokes.push({ d: rectPath(bar), role: 'encoding', part: 'ink', tone: 2 });\n hitAreas.push({ seriesKey: bars.key, index: p.index, datum: p.datum, value: p.value, x: categories.at(p.index), y: y(p.value), box: bar, cell: { column: p.index, row: 0 } });\n }\n if (showLine) {\n const d = line<SeriesPoint>().defined((p) => p.value !== undefined).x((p) => categories.at(p.index)).y((p) => y(p.value ?? 0)).curve(CURVES.monotone)(trend.points);\n if (d) strokes.push({ d, role: 'encoding', part: 'ink-secondary' });\n for (const p of trend.points) {\n if (p.value === undefined) continue;\n hitAreas.push({ seriesKey: trend.key, index: p.index, datum: p.datum, value: p.value, x: categories.at(p.index), y: y(p.value), cell: { column: p.index, row: 1 } });\n }\n }\n labels.push(...categoryLabels(xLabels, categories.at, key.area, plot));\n\n const description =\n props.description ??\n `${base.name}. Columns of ${bars.key}${showLine ? ` with a line of ${trend.key}` : ''} over ${data.length} ${xName} values, on one scale from ${formatNumber(range[0], locale, numberFormat)} to ${formatNumber(range[1], locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `ComposedChart` recipe (REQ-066): columns and a spline on one value scale. */\nexport const composedChart: ChartRecipe<ComposedChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildComposedChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `WaterfallChart` (REQ-093): from opening to closing cash. Frozen (Data Model §4). */\nexport const WATERFALL_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { step: 'Opening', base: 120 },\n { step: 'Sales', delta: 64 },\n { step: 'Services', delta: 22 },\n { step: 'Payroll', delta: -58 },\n { step: 'Rent', delta: -24 },\n { step: 'Closing', base: 124 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, Datum, HitArea, Rect, RecipeContext, Stroke, TextLabel, WaterfallChartProps } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, categoryAxis, categoryLabels, checkCount, valueAxis } from '../shared/cartesian';\nimport { finite, rectPath, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { WATERFALL_CHART_DEMO } from './demo';\n\nconst CHART = 'WaterfallChart';\nconst BAR_FILL = 0.62;\n\ninterface Step {\n readonly index: number;\n readonly datum: Datum;\n readonly kind: 'total' | 'delta';\n readonly value: number;\n /** Running total before and after this step. */\n readonly from: number;\n readonly to: number;\n}\n\nfunction buildWaterfallChart(props: WaterfallChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? WATERFALL_CHART_DEMO;\n const stepKey = usesDemo ? 'step' : (props.stepKey ?? 'step');\n const baseKey = usesDemo ? 'base' : (props.baseKey ?? 'base');\n const deltaKey = usesDemo ? 'delta' : (props.deltaKey ?? 'delta');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const baseName = accessorName(baseKey, 'base');\n const deltaName = accessorName(deltaKey, 'delta');\n\n // A total starts at zero and resets the running total; a delta floats from it (API Spec §7).\n const steps: Step[] = [];\n let running = 0;\n let skipped = 0;\n data.forEach((datum, index) => {\n const total = finite(read(baseKey, datum, index));\n const delta = finite(read(deltaKey, datum, index));\n if (total !== undefined) {\n if (delta !== undefined) warnValue(CHART, deltaName, `Row ${index} has both a ${baseName} and a ${deltaName}; a total resets the running total, so its ${deltaName} is ignored.`);\n steps.push({ index, datum, kind: 'total', value: total, from: 0, to: total });\n running = total;\n } else if (delta !== undefined) {\n steps.push({ index, datum, kind: 'delta', value: delta, from: running, to: running + delta });\n running += delta;\n } else {\n skipped += 1;\n }\n });\n checkCount(CHART, deltaName, data.length);\n const stepName = accessorName(stepKey, 'step');\n const stepLabels = data.map((datum, index) => formatCategory(read(stepKey, datum, index), locale));\n const signed = (value: number) => formatNumber(value, locale, { ...(numberFormat ?? { maximumFractionDigits: 2 }), signDisplay: 'always' });\n\n const base = modelBase(CHART, props, context, 'Waterfall chart', {\n columns: [stepName, baseName, deltaName],\n rows: data.map((datum, index) => [\n stepLabels[index] ?? '',\n formatValue(finite(read(baseKey, datum, index)), locale, numberFormat),\n formatValue(finite(read(deltaKey, datum, index)), locale, numberFormat),\n ]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = cartesianPlot(card.area);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (skipped > 0 && data.length > 0) warnValue(CHART, deltaName, `${skipped} rows have neither a finite ${baseName} nor a finite ${deltaName}; they are omitted.`);\n if (steps.length === 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const levels = steps.flatMap((s) => [s.from, s.to]);\n const axis = valueAxis(plot, [Math.min(...levels), Math.max(...levels)], { chart: CHART, property: deltaName, padding: context.domainPadding, locale, numberFormat });\n const y = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const categories = categoryAxis(stepLabels, plot, { chart: CHART, property: stepName, padding: context.domainPadding, numeric: false, paddingInner: 0.3, paddingOuter: 0.15 });\n const width = categories.bandwidth * BAR_FILL;\n\n steps.forEach((step, n) => {\n const top = y(Math.max(step.from, step.to));\n const bar: Rect = { x: categories.at(step.index) - width / 2, y: top, width, height: y(Math.min(step.from, step.to)) - top };\n // Rises, falls and totals differ by tone, but also by their printed sign and their position (REQ-124).\n const tone = step.kind === 'total' ? 3 : step.value >= 0 ? 1 : 2;\n if (bar.height > 0) strokes.push({ d: rectPath(bar), role: 'encoding', part: 'ink', tone });\n const next = steps[n + 1];\n if (next?.kind === 'delta') {\n strokes.push({ d: `M${bar.x + width},${y(step.to)}H${categories.at(next.index) - width / 2}`, role: 'ornament', part: 'grid', dash: 'dotted' });\n }\n labels.push({\n x: categories.at(step.index),\n y: top - 3,\n text: step.kind === 'total' ? formatNumber(step.value, locale, numberFormat) : signed(step.value),\n kind: 'tick',\n part: 'text',\n anchor: 'middle',\n });\n hitAreas.push({\n seriesKey: step.kind === 'total' ? baseName : deltaName,\n index: step.index,\n datum: step.datum,\n value: step.value,\n x: categories.at(step.index),\n y: y(step.to),\n box: bar,\n cell: { column: n, row: 0 },\n });\n });\n labels.push(...categoryLabels(stepLabels, categories.at, card.area, plot));\n\n const description =\n props.description ?? `${base.name}. Waterfall of ${steps.length} steps, ending at ${formatNumber(running, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `WaterfallChart` recipe (REQ-067): totals from zero and signed deltas floating on the running total. */\nexport const waterfallChart: ChartRecipe<WaterfallChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildWaterfallChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `FunnelChart` (REQ-093): a checkout funnel. Frozen (Data Model §4). */\nexport const FUNNEL_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { stage: 'Visits', value: 12400 },\n { stage: 'Product', value: 6800 },\n { stage: 'Cart', value: 2900 },\n { stage: 'Checkout', value: 1500 },\n { stage: 'Paid', value: 980 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, FunnelChartProps, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { checkCount } from '../shared/cartesian';\nimport { finite, inset, rectPath, toneOf, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { FUNNEL_CHART_DEMO } from './demo';\n\nconst CHART = 'FunnelChart';\nconst PLOT_INSET = 6;\n/** Room at the left for the stage names and at the right for value and share. */\nconst LABEL_COLUMN = 64;\nconst VALUE_COLUMN = 64;\nconst STAGE_GAP = 3;\n\nfunction buildFunnelChart(props: FunnelChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? FUNNEL_CHART_DEMO;\n const stageKey = usesDemo ? 'stage' : (props.stageKey ?? 'stage');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n checkCount(CHART, valueName, data.length);\n\n const stages = data.map((datum, index) => ({\n index,\n datum,\n stage: formatCategory(read(stageKey, datum, index), locale),\n value: finite(read(valueKey, datum, index)),\n }));\n // Shares are of the first stage that has a positive value: the funnel's entry.\n const entry = stages.find((s) => s.value !== undefined && s.value > 0)?.value;\n const share = (value: number) => (entry ? `${formatNumber((value / entry) * 100, locale, { maximumFractionDigits: 0 })}%` : '—');\n\n const base = modelBase(CHART, props, context, 'Funnel chart', {\n columns: [accessorName(stageKey, 'stage'), valueName, 'share'],\n rows: stages.map((s) => [s.stage, formatValue(s.value, locale, numberFormat), s.value === undefined ? '—' : share(Math.max(s.value, 0))]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = inset(card.area, PLOT_INSET);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const largest = Math.max(0, ...stages.map((s) => s.value ?? 0));\n if (stages.length > 0 && largest <= 0) warnValue(CHART, valueName, `No stage has a ${valueName} above zero; there is no funnel to draw.`);\n if (stages.length === 0 || largest <= 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, stages.length === 0);\n }\n\n const track = { x: plot.x + LABEL_COLUMN, width: Math.max(plot.width - LABEL_COLUMN - VALUE_COLUMN, 1) };\n const centre = track.x + track.width / 2;\n const rowHeight = plot.height / stages.length;\n const right = plot.x + plot.width;\n\n for (const s of stages) {\n const top = plot.y + s.index * rowHeight;\n const baseline = top + rowHeight / 2 + 4;\n labels.push({ x: plot.x, y: baseline, text: s.stage, kind: 'tick', part: 'text', anchor: 'start' });\n if (s.value === undefined) {\n warnValue(CHART, valueName, `Stage ${s.index} has no finite value; it is omitted.`);\n continue;\n }\n const value = Math.max(s.value, 0);\n if (value !== s.value) warnValue(CHART, valueName, `Stage ${s.index} is ${s.value}; a funnel stage cannot be negative, so it is drawn at zero.`);\n const width = (value / largest) * track.width;\n const stage = { x: centre - width / 2, y: top + STAGE_GAP / 2, width, height: Math.max(rowHeight - STAGE_GAP, 0) };\n const tone = toneOf(value / largest);\n if (width > 0) strokes.push({ d: rectPath(stage), role: 'encoding', part: 'ink', ...(tone > 0 ? { tone } : {}) });\n // The width, the value and the share all say the same thing; the tone only repeats it (REQ-124).\n labels.push({ x: right, y: baseline - 6, text: formatNumber(s.value, locale, numberFormat), kind: 'tick', part: 'text', anchor: 'end' });\n labels.push({ x: right, y: baseline + 5, text: share(value), kind: 'tick', part: 'axis', anchor: 'end' });\n hitAreas.push({ seriesKey: valueName, index: s.index, datum: s.datum, value: s.value, x: centre, y: stage.y + stage.height / 2, box: stage });\n }\n\n const last = [...stages].reverse().find((s) => s.value !== undefined);\n const description =\n props.description ??\n `${base.name}. Funnel of ${stages.length} stages, from ${stages[0]?.stage} to ${last?.stage}; ${last?.value === undefined ? '' : `${share(Math.max(last.value, 0))} of the entry reach the last stage`}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `FunnelChart` recipe (REQ-068): centred stages, width ∝ value, value and share printed. */\nexport const funnelChart: ChartRecipe<FunnelChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildFunnelChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `DonutChart` (REQ-093): a household budget. Frozen (Data Model §4). */\nexport const DONUT_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { name: 'Rent', value: 38 },\n { name: 'Food', value: 22 },\n { name: 'Savings', value: 15 },\n { name: 'Transport', value: 14 },\n { name: 'Leisure', value: 11 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, DonutChartProps, HitArea, RecipeContext, Stroke, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { warnValue } from '../shared/cells';\nimport { accessorName, formatNumber, formatValue } from '../shared/format';\nimport { checkSectors, pointAt, polarFrame, readSectors, ringTones, sectorLegend, sectorPath } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { DONUT_CHART_DEMO } from './demo';\n\nconst CHART = 'DonutChart';\n/** Inner radius as a share of the outer: room for the central readout. */\nconst HOLE = 0.62;\n/** The legend sits beside the ring when the area is at least this much wider than tall. */\nconst LEGEND_ASPECT = 1.5;\nconst LEGEND_GAP = 14;\n\nfunction buildDonutChart(props: DonutChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? DONUT_CHART_DEMO;\n const nameKey = usesDemo ? 'name' : (props.nameKey ?? 'name');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n checkSectors(CHART, valueName, data.length);\n\n const sectors = readSectors(data, nameKey, valueKey, CHART, locale);\n const total = sectors.reduce((sum, s) => sum + s.value, 0);\n const share = (value: number) => (total > 0 ? `${formatNumber((value / total) * 100, locale, { maximumFractionDigits: 0 })}%` : '—');\n const byRow = new Map(sectors.map((s) => [s.index, s]));\n\n const base = modelBase(CHART, props, context, 'Donut chart', {\n columns: [accessorName(nameKey, 'name'), valueName, 'share'],\n rows: data.map((_, index) => {\n const s = byRow.get(index);\n return s ? [s.name, formatValue(s.value, locale, numberFormat), share(s.value)] : ['—', '—', '—'];\n }),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (sectors.length > 0 && total <= 0) warnValue(CHART, valueName, 'Every value is zero; a donut has nothing to divide.');\n if (sectors.length === 0 || total <= 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const withLegend = (props.legend ?? true) && plot.width >= plot.height * LEGEND_ASPECT;\n const ringArea = withLegend ? { x: plot.x, y: plot.y, width: plot.height, height: plot.height } : plot;\n const frame = polarFrame(ringArea);\n const inner = frame.radius * HOLE;\n\n const tones = ringTones(sectors.map((s) => s.value));\n let start = 0;\n sectors.forEach((s, k) => {\n const end = start + (s.value / total) * 2 * Math.PI;\n const tone = tones[k] as ToneLevel;\n const d = sectorPath(frame, { inner, outer: frame.radius, start, end });\n if (d) strokes.push({ d, role: 'encoding', part: 'ink', tone });\n const middle = pointAt(frame, (start + end) / 2, (inner + frame.radius) / 2);\n hitAreas.push({ seriesKey: valueName, index: s.index, datum: s.datum, value: s.value, x: middle.x, y: middle.y });\n start = end;\n });\n\n const centre = props.centerValue ?? formatNumber(total, locale, numberFormat);\n const hasLabel = props.centerLabel !== undefined && props.centerLabel !== '';\n labels.push({ x: frame.cx, y: frame.cy + (hasLabel ? 2 : 6), text: typeof centre === 'number' ? formatNumber(centre, locale, numberFormat) : centre, kind: 'value', part: 'text', anchor: 'middle' });\n if (hasLabel) labels.push({ x: frame.cx, y: frame.cy + 16, text: props.centerLabel as string, kind: 'tick', part: 'axis', anchor: 'middle' });\n\n if (withLegend) {\n const x = ringArea.x + ringArea.width + LEGEND_GAP;\n const key = sectorLegend(\n { x, y: plot.y, width: Math.max(plot.x + plot.width - x, 1), height: plot.height },\n sectors.map((s, k) => ({ name: s.name, share: share(s.value), tone: tones[k] as ToneLevel })),\n );\n strokes.push(...key.strokes);\n labels.push(...key.labels);\n }\n\n const largest = sectors.reduce((a, b) => (b.value > a.value ? b : a));\n const description =\n props.description ??\n `${base.name}. Donut of ${sectors.length} sectors totalling ${formatNumber(total, locale, numberFormat)}; the largest is ${largest.name} at ${share(largest.value)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `DonutChart` recipe (REQ-075): sectors ∝ value, a central readout, a legend with shares. */\nexport const donutChart: ChartRecipe<DonutChartProps> = /* @__PURE__ */ Object.freeze({ name: 'DonutChart', build: buildDonutChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `RadarChart` (REQ-093): a product scored on six criteria. Frozen (Data Model §4). */\nexport const RADAR_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { subject: 'Speed', value: 8 },\n { subject: 'Range', value: 6 },\n { subject: 'Comfort', value: 7 },\n { subject: 'Safety', value: 9 },\n { subject: 'Cost', value: 4 },\n { subject: 'Style', value: 6 },\n ].map((row) => Object.freeze(row)),\n);\n","import { linearScale } from '../../scales/scales';\nimport type { ChartModel, ChartRecipe, HitArea, RadarChartProps, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { warnValue } from '../shared/cells';\nimport { accessorName, formatNumber, formatValue } from '../shared/format';\nimport { checkSectors, pointAt, polarFrame, readSectors, RIM_LABELS, rimLabels } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { RADAR_CHART_DEMO } from './demo';\n\nconst CHART = 'RadarChart';\n\nconst validDomain = (d: readonly [number, number] | undefined): d is readonly [number, number] =>\n !!d && Number.isFinite(d[0]) && Number.isFinite(d[1]) && d[0] < d[1];\n\nfunction buildRadarChart(props: RadarChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? RADAR_CHART_DEMO;\n const subjectKey = usesDemo ? 'subject' : (props.subjectKey ?? 'subject');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n checkSectors(CHART, valueName, data.length);\n\n const subjects = readSectors(data, subjectKey, valueKey, CHART, locale);\n const byRow = new Map(subjects.map((s) => [s.index, s]));\n const base = modelBase(CHART, props, context, 'Radar chart', {\n columns: [accessorName(subjectKey, 'subject'), valueName],\n rows: data.map((_, index) => {\n const s = byRow.get(index);\n return s ? [s.name, formatValue(s.value, locale, numberFormat)] : ['—', '—'];\n }),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n const pinned = validDomain(props.domain) ? props.domain : undefined;\n if (subjects.length > 0 && subjects.length < 3) warnValue(CHART, accessorName(subjectKey, 'subject'), `${subjects.length} subjects cannot close a polygon; a radar needs at least three.`);\n const flat = !pinned && subjects.length > 0 && subjects.every((s) => s.value === 0);\n if (flat) warnValue(CHART, valueName, `Every ${valueName} is zero and no \\`domain\\` is given; there is no scale to draw on.`);\n if (subjects.length === 0 || flat) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const frame = polarFrame(plot, RIM_LABELS);\n const radius = linearScale(pinned ?? [0, Math.max(...subjects.map((s) => s.value))], [0, frame.radius], {\n chart: CHART,\n property: 'domain',\n padding: context.domainPadding,\n nice: !pinned,\n });\n const [low, high] = radius.domain;\n const slot = (2 * Math.PI) / subjects.length;\n const angleOf = (k: number) => k * slot;\n\n // Rings at the ticks and one spoke per subject: the grid carries no data (ornament).\n const ring = (r: number) => subjects.map((_, k) => pointAt(frame, angleOf(k), r)).map((p, k) => `${k === 0 ? 'M' : 'L'}${p.x},${p.y}`).join('') + 'Z';\n for (const tick of radius.ticks(4)) {\n const r = radius(tick);\n if (r <= 0) continue;\n strokes.push({ d: ring(r), role: 'ornament', part: 'grid' });\n // The outermost ring's value would sit under the name at 12 o'clock; the inner rings give the scale.\n if (r > frame.radius - RIM_LABELS) continue;\n labels.push({ x: frame.cx + 3, y: frame.cy - r - 2, text: formatNumber(tick, locale, numberFormat), kind: 'tick', part: 'axis', anchor: 'start' });\n }\n subjects.forEach((_, k) => {\n const end = pointAt(frame, angleOf(k), frame.radius);\n strokes.push({ d: `M${frame.cx},${frame.cy}L${end.x},${end.y}`, role: 'ornament', part: 'grid' });\n });\n\n let outside = 0;\n const vertices = subjects.map((s, k) => {\n const held = Math.min(Math.max(s.value, low), high);\n if (held !== s.value) outside += 1;\n return { s, point: pointAt(frame, angleOf(k), radius(held)) };\n });\n if (outside > 0) warnValue(CHART, valueName, `${outside} values fall outside the domain [${low}, ${high}]; they are held at its edge.`);\n strokes.push({ d: vertices.map((v, k) => `${k === 0 ? 'M' : 'L'}${v.point.x},${v.point.y}`).join('') + 'Z', role: 'encoding', part: 'ink', tone: 1 });\n for (const v of vertices) hitAreas.push({ seriesKey: valueName, index: v.s.index, datum: v.s.datum, value: v.s.value, x: v.point.x, y: v.point.y });\n labels.push(...rimLabels(frame, subjects.map((s, k) => ({ angle: angleOf(k), text: s.name }))));\n\n const top = subjects.reduce((a, b) => (b.value > a.value ? b : a));\n const bottom = subjects.reduce((a, b) => (b.value < a.value ? b : a));\n const description =\n props.description ??\n `${base.name}. Radar of ${subjects.length} subjects on a scale from ${formatNumber(low, locale, numberFormat)} to ${formatNumber(high, locale, numberFormat)}; highest ${top.name} at ${formatNumber(top.value, locale, numberFormat)}, lowest ${bottom.name} at ${formatNumber(bottom.value, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `RadarChart` recipe (REQ-076): one spoke per subject, a closed polygon of values. */\nexport const radarChart: ChartRecipe<RadarChartProps> = /* @__PURE__ */ Object.freeze({ name: 'RadarChart', build: buildRadarChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `PolarBarChart` (REQ-093): a year of monthly sales. Frozen (Data Model §4). */\nexport const POLAR_BAR_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { name: 'Jan', value: 32 },\n { name: 'Feb', value: 28 },\n { name: 'Mar', value: 41 },\n { name: 'Apr', value: 47 },\n { name: 'May', value: 55 },\n { name: 'Jun', value: 61 },\n { name: 'Jul', value: 66 },\n { name: 'Aug', value: 63 },\n { name: 'Sep', value: 52 },\n { name: 'Oct', value: 44 },\n { name: 'Nov', value: 37 },\n { name: 'Dec', value: 49 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, HitArea, PolarBarChartProps, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { warnValue } from '../shared/cells';\nimport { accessorName, formatNumber, formatValue } from '../shared/format';\nimport { arcPath, checkSectors, pointAt, polarFrame, readSectors, RIM_LABELS, rimLabels, sectorPath } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { POLAR_BAR_CHART_DEMO } from './demo';\n\nconst CHART = 'PolarBarChart';\n/** Radius of the hole the bars grow out from, as a share of the outer radius. */\nconst HOLE = 0.22;\n/** Share of each slot left empty between bars. */\nconst SLOT_GAP = 0.14;\n\nfunction buildPolarBarChart(props: PolarBarChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? POLAR_BAR_CHART_DEMO;\n const nameKey = usesDemo ? 'name' : (props.nameKey ?? 'name');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n checkSectors(CHART, valueName, data.length);\n\n const bars = readSectors(data, nameKey, valueKey, CHART, locale);\n const byRow = new Map(bars.map((s) => [s.index, s]));\n const base = modelBase(CHART, props, context, 'Polar bar chart', {\n columns: [accessorName(nameKey, 'name'), valueName],\n rows: data.map((_, index) => {\n const s = byRow.get(index);\n return s ? [s.name, formatValue(s.value, locale, numberFormat)] : ['—', '—'];\n }),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const largest = Math.max(0, ...bars.map((b) => b.value));\n if (bars.length > 0 && largest <= 0) warnValue(CHART, valueName, 'Every value is zero; no bar has a length.');\n if (bars.length === 0 || largest <= 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const frame = polarFrame(plot, RIM_LABELS);\n const hole = frame.radius * HOLE;\n const reach = frame.radius - hole;\n const slot = (2 * Math.PI) / bars.length;\n strokes.push({ d: arcPath(frame, hole, 0, 2 * Math.PI), role: 'ornament', part: 'rule' });\n\n bars.forEach((b, k) => {\n const start = k * slot + (slot * SLOT_GAP) / 2;\n const end = (k + 1) * slot - (slot * SLOT_GAP) / 2;\n // Length out from the hole is proportional to the value: a bar, bent around the circle.\n const tip = hole + (b.value / largest) * reach;\n const d = sectorPath(frame, { inner: hole, outer: tip, start, end });\n if (d && tip > hole) strokes.push({ d, role: 'encoding', part: 'ink', tone: 2 });\n const at = pointAt(frame, (start + end) / 2, tip);\n hitAreas.push({ seriesKey: valueName, index: b.index, datum: b.datum, value: b.value, x: at.x, y: at.y });\n });\n labels.push(...rimLabels(frame, bars.map((b, k) => ({ angle: (k + 0.5) * slot, text: b.name }))));\n\n const top = bars.reduce((a, b) => (b.value > a.value ? b : a));\n const description =\n props.description ?? `${base.name}. Polar bars for ${bars.length} categories around the circle; the longest is ${top.name} at ${formatNumber(top.value, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `PolarBarChart` recipe (REQ-077): equal slots around the turn, bar length ∝ value. */\nexport const polarBarChart: ChartRecipe<PolarBarChartProps> = /* @__PURE__ */ Object.freeze({ name: 'PolarBarChart', build: buildPolarBarChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `CoxcombChart` (REQ-093): support tickets by weekday. Frozen (Data Model §4). */\nexport const COXCOMB_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { name: 'Mon', value: 42 },\n { name: 'Tue', value: 35 },\n { name: 'Wed', value: 31 },\n { name: 'Thu', value: 38 },\n { name: 'Fri', value: 27 },\n { name: 'Sat', value: 12 },\n { name: 'Sun', value: 9 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, CoxcombChartProps, HitArea, RecipeContext, Stroke, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { warnValue } from '../shared/cells';\nimport { accessorName, formatNumber, formatValue } from '../shared/format';\nimport { arcPath, checkSectors, pointAt, polarFrame, readSectors, RIM_LABELS, rimLabels, ringTones, sectorPath } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { COXCOMB_CHART_DEMO } from './demo';\n\nconst CHART = 'CoxcombChart';\n\nfunction buildCoxcombChart(props: CoxcombChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? COXCOMB_CHART_DEMO;\n const nameKey = usesDemo ? 'name' : (props.nameKey ?? 'name');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n checkSectors(CHART, valueName, data.length);\n\n const sectors = readSectors(data, nameKey, valueKey, CHART, locale);\n const byRow = new Map(sectors.map((s) => [s.index, s]));\n const base = modelBase(CHART, props, context, 'Coxcomb chart', {\n columns: [accessorName(nameKey, 'name'), valueName],\n rows: data.map((_, index) => {\n const s = byRow.get(index);\n return s ? [s.name, formatValue(s.value, locale, numberFormat)] : ['—', '—'];\n }),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const largest = Math.max(0, ...sectors.map((s) => s.value));\n if (sectors.length > 0 && largest <= 0) warnValue(CHART, valueName, 'Every value is zero; no sector has an area.');\n if (sectors.length === 0 || largest <= 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const frame = polarFrame(plot, RIM_LABELS);\n const start = Number.isFinite(props.startAngle) ? ((props.startAngle as number) * Math.PI) / 180 : 0;\n const slot = (2 * Math.PI) / sectors.length;\n strokes.push({ d: arcPath(frame, frame.radius, 0, 2 * Math.PI), role: 'ornament', part: 'grid' });\n\n const tones = ringTones(sectors.map((s) => s.value));\n sectors.forEach((s, k) => {\n const from = start + k * slot;\n // Nightingale's rule: the AREA of a sector is proportional to its value, so its radius is ∝ √value.\n const r = frame.radius * Math.sqrt(s.value / largest);\n const d = sectorPath(frame, { inner: 0, outer: r, start: from, end: from + slot });\n if (d) strokes.push({ d, role: 'encoding', part: 'ink', tone: tones[k] as ToneLevel });\n const at = pointAt(frame, from + slot / 2, r * 0.6);\n hitAreas.push({ seriesKey: valueName, index: s.index, datum: s.datum, value: s.value, x: at.x, y: at.y });\n });\n labels.push(...rimLabels(frame, sectors.map((s, k) => ({ angle: start + (k + 0.5) * slot, text: s.name }))));\n\n const top = sectors.reduce((a, b) => (b.value > a.value ? b : a));\n const description =\n props.description ??\n `${base.name}. Coxcomb of ${sectors.length} equal-angle sectors whose area is proportional to the value; the largest is ${top.name} at ${formatNumber(top.value, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `CoxcombChart` recipe (REQ-088): Nightingale's polar area — equal angles, area ∝ value. */\nexport const coxcombChart: ChartRecipe<CoxcombChartProps> = /* @__PURE__ */ Object.freeze({ name: 'CoxcombChart', build: buildCoxcombChart });\n","import type { ChartModel, CommonChartProps, Datum, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from './card';\nimport { warnValue } from './cells';\nimport { accessorName, formatValue } from './format';\nimport type { Accessor } from '../../types';\nimport { arcPath, checkSectors, pointAt, readSectors, sectorLegend, sectorPath, type PolarFrame, type Sector } from './polar';\nimport { emptyModel, measure, modelBase, readyModel } from './shell';\nimport { PLOT_INSET } from './cartesian';\n\n/** Radius of the empty centre, as a share of the outer radius. */\nconst HOLE = 0.3;\n/** Share of each track's band that the value fills; the rest is the gap to the next track. */\nconst BAND_FILL = 0.72;\n/** Width kept for the legend column beside the tracks. */\nconst LEGEND_WIDTH = 110;\nconst LEGEND_GAP = 12;\n\nexport interface TrackFamily {\n readonly chart: string;\n readonly fallbackName: string;\n /** Where every track starts and how far a full value sweeps, in radians clockwise from 12. */\n readonly start: number;\n readonly span: number;\n /** Lays the tracks' circle out in the space left of the legend. */\n frameIn(area: Rect): PolarFrame;\n /** The share of the span a sector sweeps, before saturation. */\n shareOf(sector: Sector, sectors: readonly Sector[]): number;\n /** What the legend prints beside a track's name. */\n printed(sector: Sector, locale: string, numberFormat: Intl.NumberFormatOptions | undefined): string;\n readonly demo: readonly Datum[];\n}\n\ninterface TrackProps extends CommonChartProps {\n nameKey?: Accessor<string | number>;\n valueKey?: Accessor<number | null | undefined>;\n}\n\n/**\n * Concentric tracks, outermost first (REQ-078, REQ-079): a guide arc per item (ornament) and a\n * value band swept from the family's start. A legend beside them names each track with its value,\n * in the same order; the tracks share one tone, so order and print tell them apart (REQ-124).\n */\nexport function buildTracks(family: TrackFamily, props: TrackProps, context: RecipeContext): ChartModel {\n const { chart } = family;\n const usesDemo = props.data === undefined;\n const data = props.data ?? family.demo;\n const nameKey = usesDemo ? 'name' : (props.nameKey ?? 'name');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n checkSectors(chart, valueName, data.length);\n\n const sectors = readSectors(data, nameKey, valueKey, chart, locale);\n const byRow = new Map(sectors.map((s) => [s.index, s]));\n const base = modelBase(chart, props, context, family.fallbackName, {\n columns: [accessorName(nameKey, 'name'), valueName],\n rows: data.map((_, index) => {\n const s = byRow.get(index);\n return s ? [s.name, formatValue(s.value, locale, numberFormat)] : ['—', '—'];\n }),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n if (sectors.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const withLegend = plot.width >= LEGEND_WIDTH * 2;\n const drawing = withLegend ? { ...plot, width: plot.width - LEGEND_WIDTH - LEGEND_GAP } : plot;\n const frame = family.frameIn(drawing);\n const hole = frame.radius * HOLE;\n const band = (frame.radius - hole) / sectors.length;\n\n let saturated = 0;\n sectors.forEach((s, k) => {\n const outer = frame.radius - k * band;\n const inner = outer - band * BAND_FILL;\n const middle = (outer + inner) / 2;\n strokes.push({ d: arcPath(frame, middle, family.start, family.start + family.span), role: 'ornament', part: 'grid' });\n const raw = family.shareOf(s, sectors);\n const share = Math.min(Math.max(raw, 0), 1);\n if (share !== raw) saturated += 1;\n const end = family.start + share * family.span;\n const d = sectorPath(frame, { inner, outer, start: family.start, end });\n if (d) strokes.push({ d, role: 'encoding', part: 'ink', tone: 2 });\n const tip = pointAt(frame, end, middle);\n hitAreas.push({ seriesKey: valueName, index: s.index, datum: s.datum, value: s.value, x: tip.x, y: tip.y });\n });\n if (saturated > 0) warnValue(chart, valueName, `${saturated} values fall outside the track's range; they are drawn at its end.`);\n\n if (withLegend) {\n const x = drawing.x + drawing.width + LEGEND_GAP;\n const key = sectorLegend(\n { x, y: plot.y, width: plot.x + plot.width - x, height: plot.height },\n sectors.map((s) => ({ name: s.name, share: family.printed(s, locale, numberFormat), tone: 2 })),\n );\n strokes.push(...key.strokes);\n labels.push(...key.labels);\n }\n\n const description =\n props.description ??\n `${base.name}. ${sectors.length} concentric tracks, outermost first: ${sectors.map((s) => `${s.name} ${family.printed(s, locale, numberFormat)}`).join(', ')}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** A half circle standing on the bottom of the area, as wide as fits. */\nexport function halfCircleFrame(area: Rect, bottomRoom: number): PolarFrame {\n const radius = Math.max(Math.min(area.width / 2, area.height - bottomRoom) - PLOT_INSET, 1);\n return { cx: area.x + area.width / 2, cy: area.y + area.height - bottomRoom, radius };\n}\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `RadialArcGroup` (REQ-093): a sales pipeline by channel. Frozen (Data Model §4). */\nexport const RADIAL_ARC_GROUP_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { name: 'Direct', value: 84 },\n { name: 'Partners', value: 62 },\n { name: 'Online', value: 47 },\n { name: 'Events', value: 23 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartRecipe, RadialArcGroupProps, RecipeContext } from '../../types';\nimport { formatNumber } from '../shared/format';\nimport { buildTracks, halfCircleFrame, type TrackFamily } from '../shared/tracks';\nimport { RADIAL_ARC_GROUP_DEMO } from './demo';\n\nconst FAMILY: TrackFamily = {\n chart: 'RadialArcGroup',\n fallbackName: 'Radial arc group',\n // From 9 o'clock over the top to 3: a half turn.\n start: -Math.PI / 2,\n span: Math.PI,\n frameIn: (area) => halfCircleFrame(area, 8),\n // The largest value sweeps the whole half turn.\n shareOf: (s, all) => s.value / Math.max(...all.map((x) => x.value), Number.MIN_VALUE),\n printed: (s, locale, numberFormat) => formatNumber(s.value, locale, numberFormat),\n demo: RADIAL_ARC_GROUP_DEMO,\n};\n\n/** `RadialArcGroup` recipe (REQ-078): concentric 180° tracks, sweep ∝ value / the largest. */\nexport const radialArcGroup: ChartRecipe<RadialArcGroupProps> = /* @__PURE__ */ Object.freeze({\n name: 'RadialArcGroup',\n build: (props: RadialArcGroupProps, context: RecipeContext) => buildTracks(FAMILY, props, context),\n});\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `RadialRings` (REQ-093): daily goals, percent reached. Frozen (Data Model §4). */\nexport const RADIAL_RINGS_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { name: 'Move', value: 82 },\n { name: 'Exercise', value: 64 },\n { name: 'Stand', value: 100 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartRecipe, RadialRingsProps, RecipeContext } from '../../types';\nimport { formatNumber } from '../shared/format';\nimport { polarFrame } from '../shared/polar';\nimport { buildTracks, type TrackFamily } from '../shared/tracks';\nimport { RADIAL_RINGS_DEMO } from './demo';\n\nconst FAMILY: TrackFamily = {\n chart: 'RadialRings',\n fallbackName: 'Radial rings',\n // A full turn from 12 o'clock: a ring is progress towards 100.\n start: 0,\n span: 2 * Math.PI,\n frameIn: (area) => polarFrame(area),\n shareOf: (s) => s.value / 100,\n printed: (s, locale) => `${formatNumber(s.value, locale, { maximumFractionDigits: 1 })}%`,\n demo: RADIAL_RINGS_DEMO,\n};\n\n/** `RadialRings` recipe (REQ-079): concentric progress rings, sweep ∝ value in 0-100. */\nexport const radialRings: ChartRecipe<RadialRingsProps> = /* @__PURE__ */ Object.freeze({\n name: 'RadialRings',\n build: (props: RadialRingsProps, context: RecipeContext) => buildTracks(FAMILY, props, context),\n});\n","import type { ChartModel, CommonChartProps, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from './card';\nimport { warnValue } from './cells';\nimport { formatNumber } from './format';\nimport type { PolarFrame } from './polar';\nimport { measure, modelBase, readyModel } from './shell';\n\n/** The demo value of a meter (REQ-093). */\nexport const SCALAR_DEMO = 72;\n\ninterface ScalarProps extends CommonChartProps {\n percent?: number;\n caption?: string;\n readout?: string;\n}\n\nexport interface ScalarDrawing {\n readonly strokes: Stroke[];\n readonly labels: TextLabel[];\n /** Where the value points: the item's position. */\n readonly tip?: { readonly x: number; readonly y: number };\n}\n\nexport interface ScalarFamily {\n readonly chart: string;\n readonly fallbackName: string;\n frameIn(area: Rect): PolarFrame;\n /** Baselines of the readout and of the caption: clear of the value's marks. */\n readoutAt(frame: PolarFrame): { readonly value: number; readonly caption: number };\n /** Draws the track, and the value when there is one (0-100, already saturated). */\n draw(frame: PolarFrame, value: number | undefined): ScalarDrawing;\n}\n\n/**\n * A meter (Data Model §2.3): one percent, saturated at 0 and 100 with `SP002`; a non-finite one\n * draws the empty track. The readout — the percent, or `readout` — is printed under the drawing,\n * with the `caption` that names it (REQ-080, REQ-081).\n */\nexport function buildScalar(family: ScalarFamily, props: ScalarProps, context: RecipeContext): ChartModel {\n const { chart } = family;\n const { locale } = context;\n const raw = props.percent === undefined ? SCALAR_DEMO : props.percent;\n let value: number | undefined;\n if (typeof raw !== 'number' || !Number.isFinite(raw)) {\n warnValue(chart, 'percent', `The percent is ${String(raw)}; a meter needs a finite number, so none is drawn.`);\n } else {\n value = Math.min(Math.max(raw, 0), 100);\n if (value !== raw) warnValue(chart, 'percent', `The percent is ${raw}; it is drawn at ${value}, the end of the 0-100 range.`);\n }\n const printed = value === undefined ? '—' : (props.readout ?? `${formatNumber(value, locale, { maximumFractionDigits: 1 })}%`);\n const caption = props.caption && props.caption !== '' ? props.caption : undefined;\n\n const base = modelBase(chart, props, context, family.fallbackName, { columns: ['measure', 'value'], rows: [[caption ?? 'value', printed]] });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const frame = family.frameIn(plot);\n const drawing = family.draw(frame, value);\n const strokes: Stroke[] = [...card.strokes, ...drawing.strokes];\n const labels: TextLabel[] = [...card.labels, ...drawing.labels];\n const at = family.readoutAt(frame);\n labels.push({ x: frame.cx, y: at.value, text: printed, kind: 'value', part: 'text', anchor: 'middle' });\n if (caption) labels.push({ x: frame.cx, y: at.caption, text: caption, kind: 'tick', part: 'axis', anchor: 'middle' });\n const hitAreas: HitArea[] = [];\n if (value !== undefined && drawing.tip) {\n hitAreas.push({ seriesKey: 'value', index: 0, datum: { value }, value, x: drawing.tip.x, y: drawing.tip.y });\n }\n const description = props.description ?? `${base.name}. ${caption ?? 'The value'} at ${printed}${props.readout && value !== undefined ? ` (${formatNumber(value, locale, undefined)}% of the range)` : ' of the range'}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n","import type { ChartRecipe, GaugeArcProps, RecipeContext } from '../../types';\nimport { PLOT_INSET } from '../shared/cartesian';\nimport { arcPath, pointAt, sectorPath } from '../shared/polar';\nimport { buildScalar, type ScalarFamily } from '../shared/scalar';\n\n/** The gauge sweeps 240°, from 8 o'clock over the top to 4 o'clock. */\nconst START = (-2 * Math.PI) / 3;\nconst SPAN = (4 * Math.PI) / 3;\n/** Inner radius of the band, as a share of the outer. */\nconst BAND = 0.8;\n\nconst FAMILY: ScalarFamily = {\n chart: 'GaugeArc',\n fallbackName: 'Gauge',\n // A 240° arc reaches half a radius below the centre: it needs 1.5 radii of height.\n frameIn: (area) => {\n const radius = Math.max(Math.min(area.width / 2, area.height / 1.5) - PLOT_INSET, 1);\n return { cx: area.x + area.width / 2, cy: area.y + (area.height - 1.5 * radius) / 2 + radius, radius };\n },\n // Inside the ring, which the value never crosses.\n readoutAt: (frame) => ({ value: frame.cy + 2, caption: frame.cy + 16 }),\n draw: (frame, value) => {\n const inner = frame.radius * BAND;\n const middle = (inner + frame.radius) / 2;\n const strokes = [{ d: arcPath(frame, middle, START, START + SPAN), role: 'ornament' as const, part: 'grid' as const }];\n if (value === undefined) return { strokes, labels: [] };\n const end = START + (value / 100) * SPAN;\n const d = sectorPath(frame, { inner, outer: frame.radius, start: START, end });\n return { strokes: d ? [...strokes, { d, role: 'encoding' as const, part: 'ink' as const, tone: 2 as const }] : strokes, labels: [], tip: pointAt(frame, end, middle) };\n },\n};\n\n/** `GaugeArc` recipe (REQ-080): a 240° arc swept to a percent, the readout at its centre. */\nexport const gaugeArc: ChartRecipe<GaugeArcProps> = /* @__PURE__ */ Object.freeze({\n name: 'GaugeArc',\n build: (props: GaugeArcProps, context: RecipeContext) => buildScalar(FAMILY, props, context),\n});\n","import type { ChartRecipe, MeterChartProps, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { arcPath, pointAt } from '../shared/polar';\nimport { buildScalar, type ScalarFamily } from '../shared/scalar';\nimport { halfCircleFrame } from '../shared/tracks';\n\n/** The meter sweeps 180°, from 9 o'clock over the top to 3 o'clock. */\nconst START = -Math.PI / 2;\nconst SPAN = Math.PI;\nconst TICKS = [0, 25, 50, 75, 100];\n/** Needle length, as a share of the radius. */\nconst NEEDLE = 0.86;\n\nconst FAMILY: ScalarFamily = {\n chart: 'MeterChart',\n fallbackName: 'Meter',\n // Under the pivot, clear of the needle, which sweeps only the upper half: the 30 px readout\n // stands up to 22 px above its baseline, and the caption goes under it.\n frameIn: (area) => halfCircleFrame(area, 46),\n readoutAt: (frame) => ({ value: frame.cy + 29, caption: frame.cy + 42 }),\n draw: (frame, value) => {\n const strokes: Stroke[] = [{ d: arcPath(frame, frame.radius, START, START + SPAN), role: 'ornament', part: 'grid' }];\n const labels: TextLabel[] = [];\n for (const tick of TICKS) {\n const angle = START + (tick / 100) * SPAN;\n const a = pointAt(frame, angle, frame.radius * 0.9);\n const b = pointAt(frame, angle, frame.radius);\n strokes.push({ d: `M${a.x},${a.y}L${b.x},${b.y}`, role: 'ornament', part: 'rule' });\n }\n labels.push({ x: frame.cx - frame.radius, y: frame.cy + 11, text: '0', kind: 'tick', part: 'axis', anchor: 'middle' });\n labels.push({ x: frame.cx + frame.radius, y: frame.cy + 11, text: '100', kind: 'tick', part: 'axis', anchor: 'middle' });\n if (value === undefined) return { strokes, labels };\n // The needle is the encoding: a straight line from the pivot to the value.\n const tip = pointAt(frame, START + (value / 100) * SPAN, frame.radius * NEEDLE);\n strokes.push({ d: `M${frame.cx},${frame.cy}L${tip.x},${tip.y}`, role: 'encoding', part: 'ink' });\n return { strokes, labels, tip };\n },\n};\n\n/** `MeterChart` recipe (REQ-081): a semicircular meter whose needle points at a percent. */\nexport const meterChart: ChartRecipe<MeterChartProps> = /* @__PURE__ */ Object.freeze({\n name: 'MeterChart',\n build: (props: MeterChartProps, context: RecipeContext) => buildScalar(FAMILY, props, context),\n});\n","import type { Datum } from '../../types';\n\n/**\n * Demo dataset of `WindRose` (REQ-089, REQ-093) — a real record, never a synthetic one (Phase 3 Done\n * criterion): the 742 hourly METAR reports of wind at Des Moines International Airport (ASOS\n * station DSM, Iowa, USA) for March 2024, UTC, as `[bearing°, speed kt]`; `bearing` is where the\n * wind blows from, 0 = north, and a calm is reported as `[0, 0]`. The two reports with a missing\n * value are left out.\n *\n * Source: Iowa Environmental Mesonet, ASOS/AWOS archive, Iowa State University —\n * https://mesonet.agron.iastate.edu/request/download.phtml (station DSM, 2024-03-01 to 2024-04-01,\n * fields `drct` and `sknt`, routine reports only), retrieved 2026-09-24.\n */\nexport const WIND_ROSE_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n [180, 11], [170, 11], [180, 9], [180, 10], [170, 7], [180, 11], [180, 10], [180, 9], [160, 7], [150, 6], [140, 9], [150, 8],\n [160, 8], [180, 9], [190, 8], [200, 12], [190, 16], [210, 16], [170, 17], [180, 16], [190, 15], [190, 17], [190, 13], [180, 14],\n [170, 9], [170, 11], [160, 9], [150, 6], [150, 7], [150, 8], [160, 9], [160, 9], [140, 7], [150, 9], [150, 7], [140, 7],\n [140, 8], [150, 9], [160, 12], [170, 10], [170, 11], [140, 14], [150, 15], [150, 17], [140, 16], [140, 18], [150, 21], [140, 14],\n [140, 13], [130, 12], [140, 16], [150, 13], [160, 15], [160, 14], [160, 16], [160, 18], [170, 15], [170, 17], [170, 19], [170, 20],\n [170, 20], [180, 20], [180, 22], [190, 21], [180, 26], [190, 20], [200, 22], [210, 29], [210, 27], [250, 22], [270, 17], [300, 16],\n [320, 13], [330, 8], [350, 8], [30, 7], [20, 10], [110, 7], [100, 9], [80, 7], [90, 7], [70, 9], [40, 10], [20, 12],\n [50, 17], [30, 9], [50, 15], [50, 12], [30, 15], [30, 9], [30, 13], [40, 11], [20, 12], [10, 15], [20, 10], [20, 16],\n [40, 14], [30, 12], [10, 10], [360, 9], [10, 11], [360, 14], [10, 10], [10, 10], [20, 4], [20, 6], [350, 6], [350, 4],\n [360, 6], [30, 6], [40, 8], [10, 5], [0, 0], [320, 3], [0, 0], [0, 0], [310, 7], [310, 11], [330, 6], [350, 5],\n [350, 5], [20, 3], [10, 3], [0, 0], [80, 5], [0, 0], [0, 0], [0, 0], [0, 0], [280, 3], [0, 0], [0, 0],\n [70, 6], [110, 8], [130, 5], [90, 9], [110, 10], [130, 12], [120, 10], [110, 11], [110, 8], [110, 11], [100, 10], [110, 7],\n [100, 10], [140, 9], [70, 12], [120, 10], [100, 9], [100, 7], [100, 6], [100, 9], [100, 6], [80, 7], [80, 8], [70, 8],\n [80, 9], [80, 10], [100, 8], [80, 7], [80, 8], [60, 9], [90, 10], [90, 8], [90, 7], [90, 12], [80, 10], [80, 14],\n [80, 12], [50, 9], [30, 10], [40, 11], [40, 7], [30, 9], [30, 8], [30, 10], [20, 11], [360, 13], [360, 13], [360, 12],\n [350, 12], [350, 11], [340, 13], [350, 11], [330, 13], [330, 10], [330, 11], [330, 10], [330, 7], [310, 7], [340, 10], [340, 14],\n [340, 9], [340, 9], [340, 10], [330, 13], [340, 10], [320, 8], [310, 8], [310, 6], [310, 6], [310, 7], [310, 8], [290, 5],\n [310, 8], [320, 10], [330, 13], [320, 15], [320, 11], [290, 15], [310, 17], [310, 18], [300, 18], [320, 16], [330, 8], [320, 7],\n [330, 7], [350, 3], [350, 3], [310, 4], [300, 3], [300, 3], [280, 3], [270, 3], [240, 3], [300, 3], [270, 3], [0, 0],\n [0, 0], [0, 0], [150, 4], [170, 5], [220, 6], [230, 7], [180, 10], [190, 8], [200, 6], [200, 9], [170, 7], [150, 8],\n [150, 10], [150, 9], [160, 9], [150, 8], [160, 8], [180, 9], [190, 8], [200, 12], [190, 11], [200, 13], [200, 12], [210, 13],\n [220, 12], [220, 16], [230, 15], [210, 14], [220, 16], [210, 15], [220, 18], [200, 21], [220, 20], [220, 16], [210, 13], [200, 13],\n [200, 11], [190, 12], [200, 11], [200, 10], [200, 11], [200, 11], [200, 9], [200, 10], [210, 12], [220, 9], [210, 10], [210, 10],\n [210, 9], [220, 15], [240, 12], [270, 8], [240, 5], [280, 6], [200, 5], [180, 7], [220, 5], [0, 0], [0, 0], [0, 0],\n [20, 3], [30, 3], [10, 3], [70, 4], [0, 0], [150, 4], [0, 0], [0, 0], [80, 5], [60, 4], [70, 4], [50, 3],\n [90, 7], [100, 8], [150, 4], [170, 8], [140, 6], [90, 9], [100, 9], [80, 9], [100, 11], [90, 10], [100, 8], [90, 7],\n [90, 5], [80, 6], [40, 6], [70, 6], [100, 7], [100, 5], [100, 9], [180, 5], [80, 6], [40, 6], [50, 23], [70, 9],\n [360, 5], [350, 3], [360, 7], [20, 12], [20, 10], [20, 12], [40, 12], [30, 11], [40, 13], [30, 12], [20, 11], [40, 13],\n [10, 7], [360, 5], [20, 4], [30, 5], [330, 5], [320, 5], [330, 6], [340, 7], [350, 5], [320, 10], [320, 11], [330, 9],\n [340, 9], [320, 8], [300, 6], [300, 9], [320, 10], [310, 14], [280, 11], [320, 10], [290, 11], [290, 12], [300, 9], [290, 7],\n [280, 5], [210, 8], [220, 5], [260, 3], [230, 8], [240, 7], [230, 10], [230, 11], [250, 13], [250, 15], [250, 18], [260, 11],\n [270, 14], [300, 16], [310, 21], [310, 21], [310, 20], [310, 25], [290, 23], [300, 20], [300, 18], [310, 20], [300, 16], [300, 14],\n [310, 15], [320, 12], [320, 10], [320, 10], [310, 10], [310, 9], [310, 10], [310, 8], [330, 7], [330, 8], [300, 7], [320, 7],\n [360, 7], [320, 18], [330, 16], [310, 21], [340, 16], [320, 20], [330, 17], [320, 22], [320, 17], [330, 16], [320, 18], [340, 10],\n [330, 11], [320, 14], [330, 9], [320, 11], [320, 9], [320, 13], [320, 10], [320, 13], [320, 12], [320, 11], [320, 12], [310, 14],\n [320, 12], [310, 15], [320, 12], [320, 12], [320, 15], [280, 11], [300, 12], [270, 12], [280, 11], [260, 11], [250, 6], [240, 6],\n [220, 6], [210, 7], [210, 10], [210, 10], [210, 10], [220, 10], [210, 12], [220, 14], [220, 11], [230, 9], [250, 10], [260, 9],\n [270, 11], [310, 16], [330, 11], [310, 9], [340, 13], [320, 12], [320, 12], [310, 18], [340, 11], [320, 17], [300, 12], [310, 8],\n [300, 5], [360, 11], [10, 9], [350, 6], [10, 6], [10, 11], [350, 9], [330, 13], [350, 9], [330, 14], [340, 8], [350, 10],\n [360, 13], [360, 13], [20, 10], [350, 11], [350, 9], [360, 11], [350, 8], [40, 10], [30, 7], [10, 11], [340, 7], [10, 4],\n [10, 4], [30, 9], [40, 8], [50, 8], [60, 6], [60, 4], [60, 7], [70, 8], [70, 11], [60, 8], [80, 6], [70, 8],\n [100, 10], [120, 9], [70, 8], [120, 8], [80, 11], [120, 8], [120, 11], [90, 6], [120, 11], [100, 14], [100, 11], [110, 7],\n [110, 9], [100, 10], [110, 10], [120, 10], [130, 10], [90, 6], [20, 6], [60, 10], [50, 16], [20, 13], [50, 11], [90, 11],\n [50, 6], [30, 8], [360, 9], [360, 8], [350, 8], [350, 12], [360, 12], [360, 12], [10, 10], [360, 12], [360, 9], [10, 11],\n [360, 10], [360, 9], [350, 6], [360, 5], [360, 5], [10, 5], [360, 4], [360, 3], [360, 6], [360, 6], [20, 5], [20, 7],\n [30, 5], [70, 7], [70, 8], [80, 12], [90, 5], [120, 9], [120, 5], [110, 7], [100, 10], [110, 13], [110, 13], [120, 13],\n [100, 13], [110, 14], [100, 11], [110, 11], [110, 11], [100, 8], [90, 10], [90, 10], [90, 11], [90, 13], [100, 15], [110, 13],\n [100, 13], [100, 10], [90, 8], [90, 11], [100, 13], [100, 11], [110, 10], [120, 10], [130, 12], [140, 11], [110, 5], [120, 5],\n [80, 11], [100, 9], [90, 8], [120, 11], [120, 11], [130, 12], [140, 11], [130, 11], [130, 14], [130, 15], [130, 11], [130, 12],\n [160, 5], [160, 10], [150, 6], [160, 15], [180, 15], [180, 10], [150, 10], [160, 16], [150, 14], [130, 12], [130, 12], [150, 15],\n [150, 13], [150, 8], [200, 7], [200, 5], [320, 7], [310, 9], [300, 13], [340, 6], [310, 19], [310, 17], [310, 15], [300, 16],\n [310, 18], [300, 22], [320, 19], [300, 22], [300, 19], [300, 22], [290, 20], [290, 17], [300, 22], [280, 20], [300, 20], [310, 18],\n [310, 19], [290, 19], [300, 14], [300, 19], [300, 12], [280, 17], [300, 12], [300, 11], [300, 11], [280, 8], [290, 11], [290, 9],\n [290, 10], [270, 13], [290, 12], [280, 12], [310, 12], [290, 14], [290, 12], [270, 9], [240, 13], [210, 14], [240, 11], [240, 7],\n [230, 5], [220, 5], [180, 5], [180, 4], [170, 7], [180, 5], [170, 4], [70, 4], [140, 6], [30, 3], [60, 3], [90, 4],\n [0, 0], [100, 5], [110, 8], [90, 5], [50, 6], [60, 6], [0, 0], [0, 0], [20, 7], [40, 7], [60, 9], [60, 8],\n [70, 8], [80, 9], [80, 10], [80, 9], [90, 11], [100, 11], [90, 7], [90, 8], [100, 10], [100, 9], [100, 8], [110, 11],\n [100, 11], [110, 11], [100, 13], [100, 11], [190, 18], [160, 13], [180, 13], [160, 15], [180, 11], [120, 6], [70, 7], [70, 8],\n [80, 8], [70, 5], [330, 5], [10, 10], [350, 6], [280, 9], [300, 13], [320, 15], [320, 13], [310, 12], [310, 14], [330, 8],\n [330, 13], [340, 12], [330, 12], [350, 8], [340, 9], [360, 5], [30, 4], [10, 10], [360, 9], [350, 6], [360, 4], [10, 8],\n [10, 8], [30, 8], [20, 8], [30, 6], [20, 7], [30, 11], [20, 8], [30, 9], [40, 8], [30, 5], [30, 6], [50, 8],\n [60, 11], [50, 8], [90, 9], [50, 12], [80, 8], [70, 15], [80, 12], [90, 10], [80, 11], [70, 12],\n ].map(([bearing, speed]) => Object.freeze({ bearing, speed })),\n);\n","import { linearScale } from '../../scales/scales';\nimport type { ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke, TextLabel, ToneLevel, WindRoseProps } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { finite, warnValue } from '../shared/cells';\nimport { accessorName, formatNumber, read } from '../shared/format';\nimport { arcPath, pointAt, polarFrame, RIM_LABELS, rimLabels, sectorLegend, sectorPath } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { WIND_ROSE_DEMO } from './demo';\n\nconst CHART = 'WindRose';\nconst COUNTS = [4, 8, 16, 32];\nconst DEFAULT_SECTORS = 16;\nconst DEFAULT_BINS: readonly number[] = [5, 10, 15, 20];\nconst POINTS_16 = ['N', 'NNE', 'NE', 'ENE', 'E', 'ESE', 'SE', 'SSE', 'S', 'SSW', 'SW', 'WSW', 'W', 'WNW', 'NW', 'NNW'];\nconst BIN_TONES: readonly ToneLevel[] = [1, 2, 3, 4];\n/** Share of each sector's angle left empty on either side. */\nconst SECTOR_GAP = 0.08;\nconst LEGEND_ASPECT = 1.5;\nconst LEGEND_GAP = 14;\n\n/** The compass name of sector `k` of `count`: the 16 points, or degrees for 32 sectors. */\nfunction compass(k: number, count: number, locale: string): string {\n if (count <= 16) return POINTS_16[(k * 16) / count] as string;\n return `${formatNumber((k * 360) / count, locale, { maximumFractionDigits: 2 })}°`;\n}\n\nconst validBins = (bins: readonly number[] | undefined): bins is readonly number[] =>\n !!bins && bins.length > 0 && bins.every((b, i) => Number.isFinite(b) && b > 0 && (i === 0 || b > (bins[i - 1] as number)));\n\nfunction buildWindRose(props: WindRoseProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? WIND_ROSE_DEMO;\n const bearingKey = usesDemo ? 'bearing' : (props.bearingKey ?? 'bearing');\n const valueKey = usesDemo ? 'speed' : (props.valueKey ?? 'speed');\n const { locale } = context;\n const bearingName = accessorName(bearingKey, 'bearing');\n const speedName = accessorName(valueKey, 'speed');\n\n const count = props.sectors === undefined || COUNTS.includes(props.sectors) ? (props.sectors ?? DEFAULT_SECTORS) : DEFAULT_SECTORS;\n if (count !== (props.sectors ?? DEFAULT_SECTORS)) warnValue(CHART, 'sectors', `${String(props.sectors)} sectors cannot divide a compass; ${DEFAULT_SECTORS} are drawn.`);\n const bins = props.bins === undefined ? DEFAULT_BINS : validBins(props.bins) ? props.bins : DEFAULT_BINS;\n if (bins !== (props.bins ?? DEFAULT_BINS)) warnValue(CHART, 'bins', 'The speed bins must be positive and ascending; the defaults are used.');\n const binLabels = [\n `< ${formatNumber(bins[0] as number, locale, undefined)}`,\n ...bins.slice(1).map((b, i) => `${formatNumber(bins[i] as number, locale, undefined)}–${formatNumber(b, locale, undefined)}`),\n `≥ ${formatNumber(bins.at(-1) as number, locale, undefined)}`,\n ];\n\n // Each observation: a sector by bearing and a bin by speed; a calm has neither.\n const width = (2 * Math.PI) / count;\n const tally = Array.from({ length: count }, () => new Array<number>(binLabels.length).fill(0));\n let calm = 0;\n let observed = 0;\n data.forEach((datum, index) => {\n const bearing = finite(read(bearingKey, datum, index));\n const speed = finite(read(valueKey, datum, index));\n if (bearing === undefined || speed === undefined || speed < 0) {\n warnValue(CHART, bearing === undefined ? bearingName : speedName, `Row ${index} lacks a finite bearing or a speed ≥ 0; it is omitted.`);\n return;\n }\n observed += 1;\n if (speed === 0) {\n calm += 1;\n return;\n }\n const k = Math.round((((bearing % 360) + 360) % 360) / (360 / count)) % count;\n const bin = bins.filter((b) => speed >= b).length;\n (tally[k] as number[])[bin] = ((tally[k] as number[])[bin] as number) + 1;\n });\n const pct = (n: number) => (observed > 0 ? (n / observed) * 100 : 0);\n const printed = (n: number) => `${formatNumber(pct(n), locale, { maximumFractionDigits: 0 })}%`;\n const totals = tally.map((row) => row.reduce((a, b) => a + b, 0));\n\n const base = modelBase(CHART, props, context, 'Wind rose', {\n columns: ['direction', 'share', ...binLabels],\n rows: tally.map((row, k) => [compass(k, count, locale), printed(totals[k] as number), ...row.map(printed)]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n if (observed === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const withLegend = plot.width >= plot.height * LEGEND_ASPECT;\n const roseArea = withLegend ? { x: plot.x, y: plot.y, width: plot.height, height: plot.height } : plot;\n const frame = polarFrame(roseArea, RIM_LABELS);\n const largest = Math.max(...totals.map(pct));\n const radius = linearScale([0, Math.max(largest, Number.MIN_VALUE)], [0, frame.radius], { chart: CHART, property: 'share', padding: 0, nice: true });\n\n // Rings at the share ticks (ornament), labelled between the first two sectors.\n for (const tick of radius.ticks(3)) {\n const r = radius(tick);\n if (r <= 0 || r > frame.radius + 0.01) continue;\n strokes.push({ d: arcPath(frame, r, 0, 2 * Math.PI), role: 'ornament', part: 'grid' });\n // The outermost ring's value would sit among the compass names; the inner rings give the scale.\n if (r > frame.radius - RIM_LABELS) continue;\n const at = pointAt(frame, width / 2, r);\n labels.push({ x: at.x + 2, y: at.y - 2, text: `${formatNumber(tick, locale, { maximumFractionDigits: 0 })}%`, kind: 'tick', part: 'axis', anchor: 'start' });\n }\n\n tally.forEach((row, k) => {\n const start = k * width - width / 2 + width * SECTOR_GAP;\n const end = (k + 1) * width - width / 2 - width * SECTOR_GAP;\n // Stacked outward from the calmest bin: a band's outer edge is the running share.\n let running = 0;\n row.forEach((n, bin) => {\n if (n === 0) return;\n const inner = radius(pct(running));\n running += n;\n const d = sectorPath(frame, { inner, outer: radius(pct(running)), start, end });\n if (d) strokes.push({ d, role: 'encoding', part: 'ink', tone: BIN_TONES[bin % BIN_TONES.length] as ToneLevel });\n });\n const tip = pointAt(frame, k * width, radius(pct(running)));\n const direction = compass(k, count, locale);\n hitAreas.push({ seriesKey: 'share', index: k, datum: { direction, share: pct(running) }, value: pct(running), x: tip.x, y: tip.y });\n });\n labels.push(...rimLabels(frame, tally.map((_, k) => ({ angle: k * width, text: compass(k, count, locale) })), 16));\n\n const calmText = `calm ${printed(calm)}`;\n if (withLegend) {\n const x = roseArea.x + roseArea.width + LEGEND_GAP;\n const area = { x, y: plot.y, width: Math.max(plot.x + plot.width - x, 1), height: plot.height - 16 };\n const binTotals = binLabels.map((_, bin) => tally.reduce((sum, row) => sum + (row[bin] as number), 0));\n const key = sectorLegend(area, binLabels.map((name, bin) => ({ name, share: printed(binTotals[bin] as number), tone: BIN_TONES[bin % BIN_TONES.length] as ToneLevel })));\n strokes.push(...key.strokes);\n labels.push(...key.labels);\n labels.push({ x: x + 14, y: plot.y + plot.height - 4, text: calmText, kind: 'tick', part: 'axis', anchor: 'start' });\n } else {\n labels.push({ x: plot.x, y: plot.y + plot.height - 4, text: calmText, kind: 'tick', part: 'axis', anchor: 'start' });\n }\n\n const prevailing = totals.indexOf(Math.max(...totals));\n const description =\n props.description ??\n `${base.name}. Wind rose of ${observed} observations in ${count} sectors; ${\n (totals[prevailing] as number) > 0 ? `most often from ${compass(prevailing, count, locale)} (${printed(totals[prevailing] as number)})` : 'no wind from any direction'\n }; calm ${printed(calm)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `WindRose` recipe (REQ-089): the share of observations per compass sector, stacked by speed. */\nexport const windRose: ChartRecipe<WindRoseProps> = /* @__PURE__ */ Object.freeze({ name: 'WindRose', build: buildWindRose });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `ChordRing` (REQ-093): visitors moving between five sections of a site. Frozen (Data Model §4). */\nexport const CHORD_RING_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { source: 'Home', target: 'Shop', value: 42 },\n { source: 'Home', target: 'Blog', value: 28 },\n { source: 'Blog', target: 'Shop', value: 16 },\n { source: 'Shop', target: 'Cart', value: 35 },\n { source: 'Cart', target: 'Shop', value: 12 },\n { source: 'Blog', target: 'Home', value: 9 },\n { source: 'Help', target: 'Cart', value: 7 },\n { source: 'Shop', target: 'Help', value: 11 },\n ].map((row) => Object.freeze(row)),\n);\n","import { chordDirected } from 'd3-chord';\nimport { diagnose } from '../../diagnostics/diagnose';\nimport type { ChartModel, ChartRecipe, ChordRingProps, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { finite, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { pointAt, polarFrame, RIM_LABELS, rimLabels, ringTone, sectorPath, type PolarFrame } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { CHORD_RING_DEMO } from './demo';\n\nconst CHART = 'ChordRing';\n/** The v1 ceiling: ribbons grow with the square of the categories (PRD NFR \"Data volume\"). */\nconst CEILING = 12;\nconst OTHER = 'Other';\n/** Width of the category band, as a share of the radius. */\nconst BAND = 0.08;\nconst PAD = 0.04;\n\n/** An arc command along radius `r` to angle `to`, clockwise, as the ribbon ends need. */\nfunction along(frame: PolarFrame, r: number, from: number, to: number): string {\n const p = pointAt(frame, to, r);\n return `A${r},${r},0,${to - from > Math.PI ? 1 : 0},1,${p.x},${p.y}`;\n}\n\n/**\n * A ribbon (DD-005): out along the source's span, a quadratic curve through the centre to the\n * target's span, along it, and back through the centre — d3's ribbon, written with the polar\n * frame's exact arcs so it is placed like every other polar path.\n */\nfunction ribbonPath(frame: PolarFrame, r: number, s0: number, s1: number, t0: number, t1: number): string {\n const start = pointAt(frame, s0, r);\n const target = pointAt(frame, t0, r);\n const c = `${frame.cx},${frame.cy}`;\n return `M${start.x},${start.y}${along(frame, r, s0, s1)}Q${c},${target.x},${target.y}${along(frame, r, t0, t1)}Q${c},${start.x},${start.y}Z`;\n}\n\nfunction buildChordRing(props: ChordRingProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? CHORD_RING_DEMO;\n const sourceKey = usesDemo ? 'source' : (props.sourceKey ?? 'source');\n const targetKey = usesDemo ? 'target' : (props.targetKey ?? 'target');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n const most = props.maxCategories !== undefined && Number.isInteger(props.maxCategories) && props.maxCategories >= 2 ? props.maxCategories : CEILING;\n\n // Data Model §2.7: a flow needs both ends and a value > 0.\n const flows: { index: number; source: string; target: string; value: number }[] = [];\n data.forEach((datum, index) => {\n const rawSource = read(sourceKey, datum, index);\n const rawTarget = read(targetKey, datum, index);\n const value = finite(read(valueKey, datum, index));\n if (rawSource === undefined || rawSource === null || rawSource === '' || rawTarget === undefined || rawTarget === null || rawTarget === '' || value === undefined || value <= 0) {\n warnValue(CHART, valueName, `Row ${index} lacks a source, a target or a ${valueName} > 0; it is omitted.`);\n return;\n }\n flows.push({ index, source: formatCategory(rawSource, locale), target: formatCategory(rawTarget, locale), value });\n });\n\n // The categories, in order of first appearance; past the ceiling the smallest merge into \"Other\".\n const throughput = new Map<string, number>();\n for (const f of flows) {\n throughput.set(f.source, (throughput.get(f.source) ?? 0) + f.value);\n throughput.set(f.target, (throughput.get(f.target) ?? 0) + f.value);\n }\n const all = [...throughput.keys()];\n // The merge bucket never takes the name of a real category.\n let other = OTHER;\n while (all.includes(other)) other = `${other} (merged)`;\n // A warning (API Spec §11): stripped from production builds like every other.\n if (process.env.NODE_ENV !== 'production' && (all.length > CEILING || all.length > most)) {\n diagnose('SP010', CHART, {\n property: 'maxCategories',\n message: `${all.length} categories${all.length > most ? `; the ${all.length - most + 1} smallest are merged into \"${other}\"` : ''}.`,\n });\n }\n const kept = new Set(all.length > most ? [...all].sort((a, b) => (throughput.get(b) ?? 0) - (throughput.get(a) ?? 0)).slice(0, most - 1) : all);\n const categories = [...all.filter((c) => kept.has(c)), ...(all.length > most ? [other] : [])];\n const slot = (name: string) => categories.indexOf(kept.has(name) ? name : other);\n\n // One ribbon per directed pair of categories, in order of its first row. Rows repeating a pair\n // are summed into one ribbon, and warned; flows merged into \"Other\" were warned by SP010.\n const pairs = new Map<string, { i: number; j: number; index: number; value: number }>();\n const seenPairs = new Map<string, number>();\n for (const f of flows) {\n const raw = `${f.source}\\u0000${f.target}`;\n const earlier = seenPairs.get(raw);\n if (earlier === undefined) seenPairs.set(raw, f.index);\n else warnValue(CHART, valueName, `Rows ${earlier} and ${f.index} both run ${f.source} → ${f.target}; their values are summed into one ribbon.`);\n const [i, j] = [slot(f.source), slot(f.target)];\n const pair = pairs.get(`${i}>${j}`);\n if (pair) pair.value += f.value;\n else pairs.set(`${i}>${j}`, { i, j, index: f.index, value: f.value });\n }\n const ribbonsInOrder = [...pairs.values()];\n\n // A ribbon is named by both its ends, as a sankey flow is, so the readout says where it goes.\n const base = modelBase(CHART, props, context, 'Chord ring', {\n columns: ['flow', valueName],\n rows: ribbonsInOrder.map((p) => [`${categories[p.i]} → ${categories[p.j]}`, formatValue(p.value, locale, numberFormat)]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n if (flows.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n // The square matrix is ours (DD-005); d3-chord allocates the angles, one chord per directed cell.\n const n = categories.length;\n const matrix = Array.from({ length: n }, () => new Array<number>(n).fill(0));\n for (const p of ribbonsInOrder) (matrix[p.i] as number[])[p.j] = p.value;\n // The gaps never take more than a quarter of the turn, so hundreds of categories keep an extent.\n const chords = chordDirected().padAngle(Math.min(PAD, (Math.PI / 2) / n))(matrix);\n\n const frame = polarFrame(plot, RIM_LABELS);\n const inner = frame.radius * (1 - BAND);\n chords.groups.forEach((g) => {\n const d = sectorPath(frame, { inner, outer: frame.radius, start: g.startAngle, end: g.endAngle });\n if (d) strokes.push({ d, role: 'encoding', part: 'ink', tone: ringTone(g.index, n) });\n });\n // Ribbons in the order of their first row, so drawing and keyboard follow the consumer's data.\n const order = (c: (typeof chords)[number]) => {\n const position = ribbonsInOrder.indexOf(pairs.get(`${c.source.index}>${c.target.index}`)!);\n return position < 0 ? Number.MAX_SAFE_INTEGER : position;\n };\n for (const c of [...chords].sort((x, y) => order(x) - order(y))) {\n // A ribbon is a surface: hatched in its source's tone, which ties it to the arc it leaves.\n strokes.push({ d: ribbonPath(frame, inner, c.source.startAngle, c.source.endAngle, c.target.startAngle, c.target.endAngle), role: 'encoding', part: 'ink', tone: ringTone(c.source.index, n) });\n const pair = pairs.get(`${c.source.index}>${c.target.index}`);\n if (!pair) continue;\n // The ribbon's midpoint: a quarter of each end and half the centre, on its quadratic curves.\n const a = pointAt(frame, (c.source.startAngle + c.source.endAngle) / 2, inner);\n const b = pointAt(frame, (c.target.startAngle + c.target.endAngle) / 2, inner);\n const datum = data[pair.index] ?? {};\n hitAreas.push({ seriesKey: valueName, index: ribbonsInOrder.indexOf(pair), datum, value: c.source.value, x: 0.25 * a.x + 0.5 * frame.cx + 0.25 * b.x, y: 0.25 * a.y + 0.5 * frame.cy + 0.25 * b.y });\n }\n labels.push(...rimLabels(frame, chords.groups.map((g) => ({ angle: (g.startAngle + g.endAngle) / 2, text: categories[g.index] as string }))));\n\n const busiest = chords.groups.reduce((x, y) => (y.value > x.value ? y : x));\n const description =\n props.description ??\n `${base.name}. Chord ring of ${flows.length} flows between ${n} categories; the busiest is ${categories[busiest.index]}, sending ${formatNumber(\n (matrix[busiest.index] as number[]).reduce((s, v) => s + v, 0),\n locale,\n numberFormat,\n )}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `ChordRing` recipe (REQ-091): directed flows between categories, ribbons over `d3-chord`. */\nexport const chordRing: ChartRecipe<ChordRingProps> = /* @__PURE__ */ Object.freeze({ name: 'ChordRing', build: buildChordRing });\n","import type { Datum } from '../../types';\n\n/**\n * Demo dataset of `OrbitChart` (REQ-093): three years of releases, one orbit per year from the\n * inside out, each release at its day of the year (0-1) and sized by the changes it shipped.\n * Frozen (Data Model §4).\n */\nexport const ORBIT_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { label: '2023', markers: Object.freeze([Object.freeze({ period: 0.08, value: 12 }), Object.freeze({ period: 0.33, value: 30 }), Object.freeze({ period: 0.61, value: 18 }), Object.freeze({ period: 0.9, value: 24 })]) },\n { label: '2024', markers: Object.freeze([Object.freeze({ period: 0.12, value: 20 }), Object.freeze({ period: 0.4, value: 42 }), Object.freeze({ period: 0.66, value: 15 }), Object.freeze({ period: 0.87, value: 33 })]) },\n { label: '2025', markers: Object.freeze([Object.freeze({ period: 0.05, value: 26 }), Object.freeze({ period: 0.29, value: 38 }), Object.freeze({ period: 0.55, value: 50 }), Object.freeze({ period: 0.81, value: 21 })]) },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, Datum, HitArea, OrbitChartProps, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { PLOT_INSET } from '../shared/cartesian';\nimport { finite, warnValue } from '../shared/cells';\nimport { accessorName, circlePath, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { ORBIT_CHART_DEMO } from './demo';\n\nconst CHART = 'OrbitChart';\n/** The orbits are seen at a tilt, as on an armillary sphere: height over width of each ellipse. */\nconst TILT = 0.42;\n/** The innermost orbit's width, as a share of the outermost's. */\nconst HOLE = 0.3;\n/** Radius of the largest marker. */\nconst MARKER = 6;\n\ninterface Marker {\n readonly flat: number;\n readonly orbit: number;\n readonly column: number;\n readonly datum: Datum;\n readonly period: number;\n readonly value: number;\n}\n\n/** A full ellipse as two half arcs, from its top clockwise: a closed path that survives inking. */\nfunction ellipsePath(cx: number, cy: number, a: number, b: number): string {\n return `M${cx},${cy - b}A${a},${b},0,1,1,${cx},${cy + b}A${a},${b},0,1,1,${cx},${cy - b}Z`;\n}\n\nfunction buildOrbitChart(props: OrbitChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const all = props.data ?? ORBIT_CHART_DEMO;\n const markerKey = usesDemo ? 'markers' : (props.markerKey ?? 'markers');\n const periodKey = usesDemo ? 'period' : (props.periodKey ?? 'period');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const shown = props.orbits !== undefined && Number.isInteger(props.orbits) && props.orbits > 0 ? Math.min(props.orbits, all.length) : all.length;\n const data = all.slice(0, shown);\n const periodName = accessorName(periodKey, 'period');\n\n // Every marker, flat, in orbit order: its place in the table is its index (delta-009).\n const rows: string[][] = [];\n const markers: Marker[] = [];\n data.forEach((datum, orbit) => {\n const label = formatCategory(datum.label, locale);\n const list = read(markerKey, datum, orbit);\n // A marker's keyboard column counts the kept markers only, so a dropped one leaves no gap that\n // the arrows cannot cross between orbits (REQ-122).\n let kept = 0;\n (Array.isArray(list) ? list : []).forEach((raw: unknown, column) => {\n const m = (typeof raw === 'object' && raw !== null ? raw : {}) as Datum;\n const period = finite(read(periodKey, m, column));\n const value = finite(m.value);\n rows.push([label, formatValue(period, locale, undefined), formatValue(value, locale, numberFormat)]);\n const flat = rows.length - 1;\n if (period === undefined || period < 0 || period > 1 || value === undefined || value < 0) {\n warnValue(CHART, periodName, `Marker ${column} of orbit \"${label}\" needs a period in 0-1 and a value ≥ 0; it is omitted.`);\n return;\n }\n markers.push({ flat, orbit, column: kept++, datum: { orbit: label, ...m }, period, value });\n });\n });\n\n const base = modelBase(CHART, props, context, 'Orbit chart', { columns: ['orbit', periodName, 'value'], rows });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n if (data.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, all.length === 0);\n\n const cx = plot.x + plot.width / 2;\n const cy = plot.y + plot.height / 2;\n const outer = Math.max(Math.min(plot.width / 2, plot.height / 2 / TILT) - PLOT_INSET - MARKER, 1);\n const hole = outer * HOLE;\n const widthOf = (orbit: number) => (data.length === 1 ? outer : hole + (orbit / (data.length - 1)) * (outer - hole));\n\n data.forEach((datum, orbit) => {\n const a = widthOf(orbit);\n // The orbit names the series; it carries no value, so it is an ornament.\n strokes.push({ d: ellipsePath(cx, cy, a, a * TILT), role: 'ornament', part: 'grid' });\n labels.push({ x: cx - a + 3, y: cy + 3, text: formatCategory(datum.label, locale), kind: 'tick', part: 'axis', anchor: 'start' });\n });\n\n // A marker's place along its orbit is its period; its AREA is its value.\n const largest = Math.max(0, ...markers.map((m) => m.value));\n for (const m of markers) {\n const a = widthOf(m.orbit);\n const angle = m.period * 2 * Math.PI;\n const x = cx + a * Math.sin(angle);\n const y = cy - a * TILT * Math.cos(angle);\n const r = largest > 0 ? MARKER * Math.sqrt(m.value / largest) : 0;\n if (r > 0) strokes.push({ d: circlePath(x, y, r), role: 'encoding', part: 'ink', paint: 'fill' });\n hitAreas.push({ seriesKey: 'value', index: m.flat, datum: m.datum, value: m.value, x, y, box: { x: x - r, y: y - r, width: 2 * r, height: 2 * r }, cell: { column: m.column, row: m.orbit } });\n }\n\n const description =\n props.description ??\n `${base.name}. ${data.length} orbits from the inside out (${data.map((d) => formatCategory(d.label, locale)).join(', ')}) with ${markers.length} markers placed by ${periodName} over the cycle; the largest is ${formatNumber(largest, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `OrbitChart` recipe (REQ-092): nested tilted orbits, markers along them by period, sized by value. */\nexport const orbitChart: ChartRecipe<OrbitChartProps> = /* @__PURE__ */ Object.freeze({ name: 'OrbitChart', build: buildOrbitChart });\n","import type { Datum } from '../../types';\n\n/**\n * Demo dataset of `VolvelleChart` (REQ-093): an on-call wheel — the day, the shift and the team\n * that covers it, read against one index as on a paper volvelle. Frozen (Data Model §4).\n */\nexport const VOLVELLE_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { label: 'Day', segments: Object.freeze(['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']) },\n { label: 'Shift', segments: Object.freeze(['Early', 'Late', 'Night']) },\n { label: 'Team', segments: Object.freeze(['Atlas', 'Borealis', 'Cygnus', 'Draco', 'Eridanus']) },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke, TextLabel, VolvelleChartProps } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { warnValue } from '../shared/cells';\nimport { formatCategory } from '../shared/format';\nimport { checkSectors, pointAt, polarFrame, polarLabel, RIM_LABELS, sectorPath, type PolarFrame } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { VOLVELLE_CHART_DEMO } from './demo';\n\nconst CHART = 'VolvelleChart';\n/** Radius of the empty hub, as a share of the outer radius. */\nconst HUB = 0.22;\n/** Room above the rings for the index pointer. */\nconst POINTER = 7;\n/** Advance of one character of a 9.5 px label, to decide whether a name fits its segment. */\nconst CHAR = 5.2;\n\ninterface Ring {\n readonly label: string;\n readonly segments: readonly string[];\n /** Its place in `data`, which `indexRing` counts, before invalid rings are left out. */\n readonly given: number;\n}\n\n/** Cap height of a 9.5 px label. */\nconst CAP = 7;\n/** Air kept between a name and its segment's edges. */\nconst AIR = 1;\n\n/**\n * Whether a name, centred on `at`, fits its segment: every corner of its box lies inside the ring\n * and between the segment's two edges. A horizontal name at 3 o'clock runs across the ring, at 12\n * along it, so both the radial and the angular room are checked; the table names every segment.\n */\nfunction fits(frame: PolarFrame, name: string, at: { x: number; y: number }, inner: number, outer: number, start: number, end: number): boolean {\n const width = name.length * CHAR;\n const corners = [\n [at.x - width / 2, at.y + 3 - CAP],\n [at.x + width / 2, at.y + 3 - CAP],\n [at.x - width / 2, at.y + 3],\n [at.x + width / 2, at.y + 3],\n ] as const;\n const middle = (start + end) / 2;\n return corners.every(([x, y]) => {\n const r = Math.hypot(x - frame.cx, y - frame.cy);\n // The corner's angle from 12 o'clock, measured from the segment's middle into (-π, π].\n let a = Math.atan2(x - frame.cx, frame.cy - y) - middle;\n a = Math.atan2(Math.sin(a), Math.cos(a));\n return r >= inner + AIR && r <= outer - AIR && Math.abs(a) <= (end - start) / 2 - AIR / Math.max(r, 1);\n });\n}\n\nfunction buildVolvelleChart(props: VolvelleChartProps, context: RecipeContext): ChartModel {\n const all = props.data ?? VOLVELLE_CHART_DEMO;\n const { locale } = context;\n const cap = props.rings !== undefined && Number.isInteger(props.rings) && props.rings > 0 ? props.rings : all.length;\n\n // Data (delta-010): rings from the inside out, each a label and a list of categories.\n const rings: Ring[] = [];\n all.slice(0, cap).forEach((datum, index) => {\n const segments = datum.segments;\n if (!Array.isArray(segments) || segments.length === 0) {\n warnValue(CHART, 'segments', `Ring ${index} has no list of segments; it is omitted.`);\n return;\n }\n checkSectors(CHART, 'segments', segments.length);\n rings.push({ label: formatCategory(datum.label, locale), segments: segments.map((s: unknown) => formatCategory(s, locale)), given: index });\n });\n\n // The index angle: the middle of `indexValue` on `indexRing`; every ring is read there. The demo's\n // rings are addressed like the consumer's: the index is a view prop (REQ-098).\n let ringIndex = props.indexRing === undefined ? 0 : rings.findIndex((r) => r.given === props.indexRing);\n if (ringIndex < 0) {\n if (rings.length > 0) warnValue(CHART, 'indexRing', `Ring ${String(props.indexRing)} does not exist or has no segments; the index reads the first ring.`);\n ringIndex = 0;\n }\n const turned = rings[ringIndex];\n let segment = turned && props.indexValue !== undefined ? turned.segments.indexOf(props.indexValue) : 0;\n if (segment < 0) {\n warnValue(CHART, 'indexValue', `\"${String(props.indexValue)}\" is not on ring \"${turned?.label}\"; the index reads its first segment.`);\n segment = 0;\n }\n const indexAngle = turned ? ((segment + 0.5) * 2 * Math.PI) / turned.segments.length : 0;\n // The segment of each ring holding the index angle, (segment + ½) / n of the turn, found in whole\n // numbers: a boundary shared by two rings (6 and 12 segments) is read exactly, never by rounding.\n const n = turned?.segments.length ?? 1;\n const underIndex = rings.map((r) => Math.floor(((2 * segment + 1) * r.segments.length) / (2 * n)));\n const combined = rings.map((r, k) => `${r.label} ${r.segments[underIndex[k] as number]}`).join(' · ');\n\n const base = modelBase(CHART, props, context, 'Volvelle', {\n columns: ['ring', 'segment', 'under the index'],\n rows: rings.flatMap((r, k) => r.segments.map((s, j) => [r.label, s, j === underIndex[k] ? 'yes' : 'no'])),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n if (rings.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, all.length === 0);\n\n // Room outside the rings for the outermost ring's names, which the pointer shares at 12 o'clock.\n const frame = polarFrame(plot, Math.max(POINTER, RIM_LABELS));\n const hub = frame.radius * HUB;\n const band = (frame.radius - hub) / rings.length;\n // The whole disc is turned so the index angle faces 12 o'clock.\n const turn = -indexAngle;\n let flat = 0;\n rings.forEach((r, k) => {\n const inner = hub + k * band;\n const outer = inner + band;\n const width = (2 * Math.PI) / r.segments.length;\n r.segments.forEach((name, j) => {\n const start = j * width + turn;\n const aligned = j === underIndex[k];\n const d = sectorPath(frame, { inner, outer, start, end: start + width });\n // The segments under the index are marked by tone and named in the readout (REQ-124).\n if (d) strokes.push({ d, role: 'encoding', part: 'ink', ...(aligned ? { tone: 3 as const } : {}) });\n const middle = pointAt(frame, start + width / 2, (inner + outer) / 2);\n if (fits(frame, name, middle, inner, outer, start, start + width)) {\n labels.push({ x: middle.x, y: middle.y + 3, text: name, kind: 'tick', part: 'text', anchor: 'middle' });\n } else if (k === rings.length - 1 && !aligned) {\n // The outermost ring is named around the rim; the segment under the pointer is in the readout.\n labels.push(polarLabel(frame, start + width / 2, outer + 8, name));\n }\n hitAreas.push({ seriesKey: 'segment', index: flat, datum: { ring: r.label, segment: name }, value: j, x: middle.x, y: middle.y, cell: { column: j, row: k } });\n flat += 1;\n });\n });\n\n // The fixed pointer above 12 o'clock, and the combined readout under the disc.\n const tip = frame.cy - frame.radius - 1;\n strokes.push({ d: `M${frame.cx - 4},${tip - POINTER + 1}L${frame.cx + 4},${tip - POINTER + 1}L${frame.cx},${tip}Z`, role: 'ornament', part: 'ink', paint: 'fill' });\n labels.push({ x: plot.x, y: plot.y + plot.height - 4, text: combined, kind: 'tick', part: 'text', anchor: 'start' });\n\n const description = props.description ?? `${base.name}. Volvelle of ${rings.length} rings from the inside out; under the index: ${combined}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `VolvelleChart` recipe (REQ-090): concentric categorical rings read against one index. */\nexport const volvelleChart: ChartRecipe<VolvelleChartProps> = /* @__PURE__ */ Object.freeze({ name: 'VolvelleChart', build: buildVolvelleChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `CandlestickChart` (REQ-093): ten sessions of a price. Frozen (Data Model §4). */\nexport const CANDLESTICK_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { time: 'Mon', open: 102, high: 108, low: 99, close: 106 },\n { time: 'Tue', open: 106, high: 109, low: 101, close: 103 },\n { time: 'Wed', open: 103, high: 105, low: 97, close: 99 },\n { time: 'Thu', open: 99, high: 104, low: 96, close: 103 },\n { time: 'Fri', open: 103, high: 111, low: 102, close: 110 },\n { time: 'Mon', open: 110, high: 114, low: 107, close: 108 },\n { time: 'Tue', open: 108, high: 110, low: 104, close: 109 },\n { time: 'Wed', open: 109, high: 116, low: 108, close: 115 },\n ].map((row) => Object.freeze(row)),\n);\n","import { diagnose } from '../../diagnostics/diagnose';\nimport type { CandlestickChartProps, ChartModel, ChartRecipe, Datum, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, categoryAxis, categoryLabels, checkCount, valueAxis } from '../shared/cartesian';\nimport { finite, rectPath, warnValue } from '../shared/cells';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { CANDLESTICK_CHART_DEMO } from './demo';\n\nconst CHART = 'CandlestickChart';\nconst BODY_FILL = 0.6;\n\ninterface Candle {\n readonly index: number;\n readonly datum: Datum;\n readonly open: number;\n readonly high: number;\n readonly low: number;\n readonly close: number;\n}\n\nfunction buildCandlestickChart(props: CandlestickChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? CANDLESTICK_CHART_DEMO;\n const timeKey = usesDemo ? 'time' : (props.timeKey ?? 'time');\n const keys = {\n open: usesDemo ? 'open' : (props.openKey ?? 'open'),\n high: usesDemo ? 'high' : (props.highKey ?? 'high'),\n low: usesDemo ? 'low' : (props.lowKey ?? 'low'),\n close: usesDemo ? 'close' : (props.closeKey ?? 'close'),\n };\n const names = { open: accessorName(keys.open, 'open'), high: accessorName(keys.high, 'high'), low: accessorName(keys.low, 'low'), close: accessorName(keys.close, 'close') };\n const { locale } = context;\n const numberFormat = props.numberFormat;\n checkCount(CHART, names.close, data.length);\n\n // Data Model §2.6: low ≤ min(open, close) and max(open, close) ≤ high, or the row is dropped.\n const candles: Candle[] = [];\n data.forEach((datum, index) => {\n const [open, high, low, close] = (['open', 'high', 'low', 'close'] as const).map((k) => finite(read(keys[k], datum, index)));\n if (open === undefined || high === undefined || low === undefined || close === undefined) {\n warnValue(CHART, names.close, `Row ${index} lacks a finite open, high, low or close; it is omitted.`);\n return;\n }\n if (!(low <= Math.min(open, close) && Math.max(open, close) <= high)) {\n warnValue(CHART, names.high, `Row ${index} breaks low ≤ min(open, close) ≤ max(open, close) ≤ high; it is omitted.`);\n return;\n }\n candles.push({ index, datum, open, high, low, close });\n });\n const timeName = accessorName(timeKey, 'time');\n const timeLabels = data.map((datum, index) => formatCategory(read(timeKey, datum, index), locale));\n\n const base = modelBase(CHART, props, context, 'Candlestick chart', {\n columns: [timeName, names.open, names.high, names.low, names.close],\n rows: data.map((datum, index) => [timeLabels[index] ?? '', ...(['open', 'high', 'low', 'close'] as const).map((k) => formatValue(finite(read(keys[k], datum, index)), locale, numberFormat))]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = cartesianPlot(card.area);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const pinned = props.bounds && Number.isFinite(props.bounds[0]) && Number.isFinite(props.bounds[1]) && props.bounds[0] < props.bounds[1] ? props.bounds : undefined;\n if (props.bounds !== undefined && !pinned) warnValue(CHART, 'bounds', `[${String(props.bounds)}] is not two finite prices, lowest first; the bounds are derived from the rows.`);\n if (data.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, true);\n if (candles.length === 0) {\n // REQ-097: with no valid row there is nothing to derive the price bounds from.\n if (!pinned) diagnose('SP009', CHART, { property: 'bounds', message: `None of the ${data.length} rows is a valid candle: open, high, low and close must be finite numbers with low ≤ min(open, close) ≤ max(open, close) ≤ high.` });\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, false);\n }\n\n // REQ-097: the price bounds are `bounds` when given, else the lowest low and the highest high.\n const bounds = pinned ?? [Math.min(...candles.map((c) => c.low)), Math.max(...candles.map((c) => c.high))];\n const axis = valueAxis(plot, bounds, { chart: CHART, property: 'bounds', padding: context.domainPadding, locale, numberFormat, zero: false, nice: !pinned });\n // Pinned bounds may cut a candle: it is drawn clamped to the plot, and the table keeps its prices.\n const [floor, ceiling] = bounds;\n const outside = candles.filter((c) => c.low < floor || c.high > ceiling).length;\n if (outside > 0) warnValue(CHART, 'bounds', `${outside} candles reach outside the pinned bounds; they are drawn clamped to them.`);\n const y = (price: number) => axis.scale(Math.min(Math.max(price, floor), ceiling));\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const slots = categoryAxis(timeLabels, plot, { chart: CHART, property: timeName, padding: context.domainPadding, numeric: false, paddingInner: 0.25, paddingOuter: 0.1 });\n const width = slots.bandwidth * BODY_FILL;\n\n for (const c of candles) {\n const x = slots.at(c.index);\n strokes.push({ d: `M${x},${y(c.high)}V${y(c.low)}`, role: 'encoding', part: 'ink' });\n const top = y(Math.max(c.open, c.close));\n const body = { x: x - width / 2, y: top, width, height: y(Math.min(c.open, c.close)) - top };\n // A rising candle is hollow and a falling one solid: the fill, not a hatch, tells them apart (REQ-124).\n if (body.height > 0) {\n strokes.push(c.close >= c.open ? { d: rectPath(body), role: 'encoding', part: 'ink' } : { d: rectPath(body), role: 'encoding', part: 'ink', paint: 'fill' });\n } else {\n strokes.push({ d: `M${body.x},${top}H${body.x + width}`, role: 'encoding', part: 'ink' });\n }\n hitAreas.push({\n seriesKey: names.close,\n index: c.index,\n datum: c.datum,\n value: c.close,\n x,\n y: y(c.close),\n box: { x: x - slots.bandwidth / 2, y: y(c.high), width: slots.bandwidth, height: y(c.low) - y(c.high) },\n });\n }\n labels.push(...categoryLabels(timeLabels, slots.at, card.area, plot));\n\n const rising = candles.filter((c) => c.close >= c.open).length;\n const description =\n props.description ??\n `${base.name}. Candlestick chart of ${candles.length} sessions, prices from ${formatNumber(bounds[0], locale, numberFormat)} to ${formatNumber(bounds[1], locale, numberFormat)}${\n pinned ? ' (pinned bounds)' : ', from the lowest low to the highest high'\n }; ${rising} rise and ${candles.length - rising} fall.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `CandlestickChart` recipe (REQ-071): OHLC bodies and wicks, bounds derived or pinned (REQ-097). */\nexport const candlestickChart: ChartRecipe<CandlestickChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildCandlestickChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `AreaChart` (REQ-093): sessions per weekday. Frozen (Data Model §4). */\nexport const AREA_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 'Mon', value: 32 },\n { x: 'Tue', value: 45 },\n { x: 'Wed', value: 41 },\n { x: 'Thu', value: 58 },\n { x: 'Fri', value: 66 },\n { x: 'Sat', value: 38 },\n { x: 'Sun', value: 29 },\n ].map((row) => Object.freeze(row)),\n);\n","import { area, line } from 'd3-shape';\nimport { extent } from '../../scales/util';\nimport type { AreaChartProps, ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, categoryAxis, categoryLabels, checkVolume, readSeries, seriesValues, valueAxis, type SeriesPoint } from '../shared/cartesian';\nimport { warnValue } from '../shared/cells';\nimport { CURVES } from '../shared/curves';\nimport { accessorName, circlePath, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { AREA_CHART_DEMO } from './demo';\n\nconst CHART = 'AreaChart';\nconst HEIGHTEN_RADIUS = 3.5;\n\nfunction buildAreaChart(props: AreaChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? AREA_CHART_DEMO;\n const xKey = usesDemo ? 'x' : (props.xKey ?? 'x');\n const valueKey = usesDemo ? 'value' : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n const series = readSeries(data, valueKey, 'value');\n checkVolume(CHART, [series]);\n const xName = accessorName(xKey, 'x');\n const xValues = data.map((datum, index) => read(xKey, datum, index));\n const xLabels = xValues.map((value) => formatCategory(value, locale));\n\n const base = modelBase(CHART, props, context, 'Area chart', {\n columns: [xName, series.key],\n rows: data.map((_, i) => [xLabels[i] ?? '', formatValue(series.points[i]?.value, locale, numberFormat)]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = cartesianPlot(card.area);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (series.missing > 0 && data.length > 0) warnValue(CHART, series.key, `${series.missing} of ${data.length} values are not finite; the area breaks there.`);\n const range = extent(seriesValues([series]));\n if (data.length === 0 || range === undefined) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const axis = valueAxis(plot, range, { chart: CHART, property: series.key, padding: context.domainPadding, locale, numberFormat });\n const y = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const xAt = categoryAxis(xValues, plot, { chart: CHART, property: xName, padding: context.domainPadding }).at;\n const curve = CURVES[props.curve ?? 'monotone'];\n const defined = (p: SeriesPoint) => p.value !== undefined;\n\n // The tone is the gradation; the line on top carries the values exactly (REQ-124).\n const shape = area<SeriesPoint>().defined(defined).x((p) => xAt(p.index)).y0(y(0)).y1((p) => y(p.value ?? 0)).curve(curve)(series.points);\n if (shape) strokes.push({ d: shape, role: 'encoding', part: 'ink', paint: 'stroke', tone: 2 });\n const top = line<SeriesPoint>().defined(defined).x((p) => xAt(p.index)).y((p) => y(p.value ?? 0)).curve(curve)(series.points);\n if (top) strokes.push({ d: top, role: 'encoding', part: 'ink' });\n\n for (const p of series.points) {\n if (p.value === undefined) continue;\n hitAreas.push({ seriesKey: series.key, index: p.index, datum: p.datum, value: p.value, x: xAt(p.index), y: y(p.value) });\n }\n const live = hitAreas.at(-1);\n if (live) {\n const mark = circlePath(live.x, live.y, HEIGHTEN_RADIUS);\n strokes.push({ d: mark, role: 'encoding', part: 'heighten', paint: 'fill' });\n strokes.push({ d: mark, role: 'encoding', part: 'ink', paint: 'stroke' });\n }\n labels.push(...categoryLabels(xLabels, xAt, card.area, plot));\n\n const description =\n props.description ??\n `${base.name}. Area chart of ${data.length} ${xName} values; ${series.key} ranges from ${formatNumber(range[0], locale, numberFormat)} to ${formatNumber(range[1], locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `AreaChart` recipe (REQ-072): a curved area, toned, under its exact line. */\nexport const areaChart: ChartRecipe<AreaChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildAreaChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `RangeBandChart` (REQ-093): daily temperature range. Frozen (Data Model §4). */\nexport const RANGE_BAND_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 'Mon', low: 11, high: 19 },\n { x: 'Tue', low: 12, high: 22 },\n { x: 'Wed', low: 14, high: 24 },\n { x: 'Thu', low: 13, high: 21 },\n { x: 'Fri', low: 10, high: 18 },\n { x: 'Sat', low: 9, high: 20 },\n { x: 'Sun', low: 12, high: 23 },\n ].map((row) => Object.freeze(row)),\n);\n","import { area, line } from 'd3-shape';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, Datum, HitArea, RangeBandChartProps, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, categoryAxis, categoryLabels, checkVolume, valueAxis, type Series } from '../shared/cartesian';\nimport { finite, warnValue } from '../shared/cells';\nimport { CURVES } from '../shared/curves';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { RANGE_BAND_CHART_DEMO } from './demo';\n\nconst CHART = 'RangeBandChart';\n\ninterface Span {\n readonly index: number;\n readonly datum: Datum;\n readonly low: number | undefined;\n readonly high: number | undefined;\n}\n\nfunction buildRangeBandChart(props: RangeBandChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? RANGE_BAND_CHART_DEMO;\n const xKey = usesDemo ? 'x' : (props.xKey ?? 'x');\n const lowKey = usesDemo ? 'low' : (props.lowKey ?? 'low');\n const highKey = usesDemo ? 'high' : (props.highKey ?? 'high');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const lowName = accessorName(lowKey, 'low');\n const highName = accessorName(highKey, 'high');\n\n let swapped = 0;\n let missing = 0;\n const spans: Span[] = data.map((datum, index) => {\n let low = finite(read(lowKey, datum, index));\n let high = finite(read(highKey, datum, index));\n if (low === undefined || high === undefined) {\n missing += 1;\n return { index, datum, low: undefined, high: undefined };\n }\n // Data Model §2.1: low ≤ high per row; a reversed row is swapped, and warned.\n if (low > high) {\n [low, high] = [high, low];\n swapped += 1;\n }\n return { index, datum, low, high };\n });\n const asSeries = (key: string, pick: (s: Span) => number | undefined): Series => ({\n key,\n points: spans.map((s) => ({ index: s.index, datum: s.datum, value: pick(s) })),\n missing,\n });\n checkVolume(CHART, [asSeries(lowName, (s) => s.low)]);\n const xName = accessorName(xKey, 'x');\n const xValues = data.map((datum, index) => read(xKey, datum, index));\n const xLabels = xValues.map((value) => formatCategory(value, locale));\n\n const base = modelBase(CHART, props, context, 'Range band', {\n columns: [xName, lowName, highName],\n rows: spans.map((s, i) => [xLabels[i] ?? '', formatValue(s.low, locale, numberFormat), formatValue(s.high, locale, numberFormat)]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = cartesianPlot(card.area);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (swapped > 0) warnValue(CHART, lowName, `${swapped} rows had ${lowName} above ${highName}; they are swapped.`);\n if (missing > 0 && data.length > 0) warnValue(CHART, lowName, `${missing} of ${data.length} rows lack a finite ${lowName} or ${highName}; the band breaks there.`);\n const range = extent(spans.flatMap((s) => (s.low === undefined || s.high === undefined ? [] : [s.low, s.high])));\n if (data.length === 0 || range === undefined) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const axis = valueAxis(plot, range, { chart: CHART, property: highName, padding: context.domainPadding, locale, numberFormat, zero: false });\n const y = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const xAt = categoryAxis(xValues, plot, { chart: CHART, property: xName, padding: context.domainPadding }).at;\n const curve = CURVES.monotone;\n const defined = (s: Span) => s.low !== undefined;\n\n const band = area<Span>().defined(defined).x((s) => xAt(s.index)).y0((s) => y(s.low ?? 0)).y1((s) => y(s.high ?? 0)).curve(curve)(spans);\n // The band is hatched only: its edges are the two lines below, and an outline would hide the dots.\n if (band) strokes.push({ d: band, role: 'encoding', part: 'ink-secondary', paint: 'none', tone: 1 });\n // Both edges are drawn exactly: the high one solid, the low one dotted (REQ-124).\n const edge = (pick: (s: Span) => number) => line<Span>().defined(defined).x((s) => xAt(s.index)).y((s) => y(pick(s))).curve(curve)(spans);\n const high = edge((s) => s.high ?? 0);\n const low = edge((s) => s.low ?? 0);\n if (high) strokes.push({ d: high, role: 'encoding', part: 'ink' });\n if (low) strokes.push({ d: low, role: 'encoding', part: 'ink', dash: 'dotted' });\n\n for (const [row, key, pick] of [[0, lowName, (s: Span) => s.low], [1, highName, (s: Span) => s.high]] as const) {\n for (const s of spans) {\n const value = pick(s);\n if (value === undefined) continue;\n hitAreas.push({ seriesKey: key, index: s.index, datum: s.datum, value, x: xAt(s.index), y: y(value), cell: { column: s.index, row } });\n }\n }\n labels.push(...categoryLabels(xLabels, xAt, card.area, plot));\n\n const description =\n props.description ??\n `${base.name}. Range band over ${data.length} ${xName} values, from a lowest ${lowName} of ${formatNumber(range[0], locale, numberFormat)} to a highest ${highName} of ${formatNumber(range[1], locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `RangeBandChart` recipe (REQ-073): the band between a low and a high series. */\nexport const rangeBandChart: ChartRecipe<RangeBandChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildRangeBandChart });\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `StreamChart` (REQ-093): two traffic sources over a week. Frozen (Data Model §4). */\nexport const STREAM_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 'Mon', organic: 22, paid: 14 },\n { x: 'Tue', organic: 28, paid: 18 },\n { x: 'Wed', organic: 35, paid: 16 },\n { x: 'Thu', organic: 31, paid: 24 },\n { x: 'Fri', organic: 38, paid: 29 },\n { x: 'Sat', organic: 26, paid: 21 },\n { x: 'Sun', organic: 19, paid: 12 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const STREAM_CHART_DEMO_KEYS: readonly string[] = /* @__PURE__ */ Object.freeze(['organic', 'paid']);\n","import { area, line } from 'd3-shape';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke, StreamChartProps, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, categoryAxis, categoryLabels, checkVolume, legend, readSeries, valueAxis } from '../shared/cartesian';\nimport { warnValue } from '../shared/cells';\nimport { CURVES } from '../shared/curves';\nimport { accessorName, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { STREAM_CHART_DEMO, STREAM_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'StreamChart';\n/** A stream has two waves; the second is told apart by its dash (REQ-124). */\nconst WAVES = 2;\n\ninterface Wave {\n readonly key: string;\n /** Bottom and top of the wave at each row, or `undefined` in a gap. */\n readonly spans: readonly ({ readonly y0: number; readonly y1: number; readonly value: number } | undefined)[];\n}\n\nfunction buildStreamChart(props: StreamChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? STREAM_CHART_DEMO;\n const xKey = usesDemo ? 'x' : (props.xKey ?? 'x');\n const requested = usesDemo ? STREAM_CHART_DEMO_KEYS : (props.keys ?? STREAM_CHART_DEMO_KEYS);\n const keys = requested.slice(0, WAVES);\n const stacked = props.stacked ?? false;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n const series = keys.map((key) => readSeries(data, key, key));\n checkVolume(CHART, series);\n const xName = accessorName(xKey, 'x');\n const xValues = data.map((datum, index) => read(xKey, datum, index));\n const xLabels = xValues.map((value) => formatCategory(value, locale));\n\n const base = modelBase(CHART, props, context, 'Stream chart', {\n columns: [xName, ...keys],\n rows: data.map((_, i) => [xLabels[i] ?? '', ...series.map((s) => formatValue(s.points[i]?.value, locale, numberFormat))]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const key = legend(card.area, keys.map((name, i) => (i === 0 ? { name, part: 'ink' as const, tone: 1 as const } : { name, part: 'ink-secondary' as const, tone: 2 as const, dash: 'dotted' as const })));\n const plot = cartesianPlot(key.area);\n const strokes: Stroke[] = [...card.strokes, ...key.strokes];\n const labels: TextLabel[] = [...card.labels, ...key.labels];\n const hitAreas: HitArea[] = [];\n\n if (requested.length > WAVES) warnValue(CHART, 'keys', `${requested.length} keys were given; a stream draws the first ${WAVES}.`);\n for (const s of series) if (s.missing > 0 && data.length > 0) warnValue(CHART, s.key, `${s.missing} of ${data.length} values are not finite; the wave breaks there.`);\n\n // Stacked, the second wave rides on the first; a negative value cannot stack and is held at zero.\n // Stacked, a wave has nothing to ride on where the one below is missing: it breaks there too.\n let clamped = 0;\n let unsupported = 0;\n const waves: Wave[] = series.map((s, w) => ({\n key: s.key,\n spans: s.points.map((p, i) => {\n if (p.value === undefined) return undefined;\n if (stacked && w > 0 && series[0]?.points[i]?.value === undefined) {\n unsupported += 1;\n return undefined;\n }\n let value = p.value;\n if (stacked && value < 0) {\n clamped += 1;\n value = 0;\n }\n const below = stacked && w > 0 ? Math.max(series[0]?.points[i]?.value ?? 0, 0) : 0;\n return { y0: below, y1: below + value, value: p.value };\n }),\n }));\n if (clamped > 0) warnValue(CHART, 'stacked', `${clamped} negative values cannot stack; they are drawn at zero.`);\n if (unsupported > 0) warnValue(CHART, 'stacked', `${unsupported} values have nothing below them to stack on; the upper wave breaks there.`);\n\n const range = extent(waves.flatMap((w) => w.spans.flatMap((s) => (s ? [s.y0, s.y1] : []))));\n if (data.length === 0 || range === undefined) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const axis = valueAxis(plot, range, { chart: CHART, property: keys[0] ?? 'value', padding: context.domainPadding, locale, numberFormat });\n const y = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const xAt = categoryAxis(xValues, plot, { chart: CHART, property: xName, padding: context.domainPadding }).at;\n const curve = CURVES.monotone;\n\n waves.forEach((wave, w) => {\n const indexed = wave.spans.map((span, index) => ({ span, index }));\n const defined = (e: (typeof indexed)[number]) => e.span !== undefined;\n const shape = area<(typeof indexed)[number]>().defined(defined).x((e) => xAt(e.index)).y0((e) => y(e.span?.y0 ?? 0)).y1((e) => y(e.span?.y1 ?? 0)).curve(curve)(indexed);\n const top = line<(typeof indexed)[number]>().defined(defined).x((e) => xAt(e.index)).y((e) => y(e.span?.y1 ?? 0)).curve(curve)(indexed);\n const part = w === 0 ? 'ink' : 'ink-secondary';\n // The wave is hatched only: its top line below is its edge, and an outline would hide the dots.\n if (shape) strokes.push({ d: shape, role: 'encoding', part, paint: 'none', tone: w === 0 ? 1 : 2 });\n if (top) strokes.push({ d: top, role: 'encoding', part, ...(w === 0 ? {} : { dash: 'dotted' as const }) });\n wave.spans.forEach((span, index) => {\n if (!span) return;\n const datum = data[index] ?? {};\n hitAreas.push({ seriesKey: wave.key, index, datum, value: span.value, x: xAt(index), y: y(span.y1), cell: { column: index, row: w } });\n });\n });\n labels.push(...categoryLabels(xLabels, xAt, key.area, plot));\n\n const totals = series.map((s) => `${s.key} totals ${formatNumber(s.points.reduce((sum, p) => sum + (p.value ?? 0), 0), locale, numberFormat)}`);\n const description =\n props.description ?? `${base.name}. ${stacked ? 'Stacked' : 'Overlaid'} stream of ${keys.length} waves over ${data.length} ${xName} values; ${totals.join('; ')}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `StreamChart` recipe (REQ-074): two waves, overlaid or stacked, told apart by dash and name. */\nexport const streamChart: ChartRecipe<StreamChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildStreamChart });\n","import { linearScale } from '../../scales/scales';\nimport { extent } from '../../scales/util';\nimport type { Accessor, ChartModel, CommonChartProps, Datum, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from './card';\nimport { cartesianPlot, checkCount, TICK_CHAR, valueAxis } from './cartesian';\nimport { finite, inset, warnValue } from './cells';\nimport { accessorName, circlePath, formatNumber, formatValue, read } from './format';\nimport { emptyModel, measure, modelBase, readyModel } from './shell';\n\n/** What tells the scatter from the bubble: defaults, the kind of fill, and the name. */\nexport interface PointFamily {\n readonly chart: string;\n readonly fallbackName: string;\n readonly defaultSizeRange: readonly [number, number];\n /** Whether a size is read when no `sizeKey` is given. */\n readonly sizeByDefault: boolean;\n readonly toned: boolean;\n}\n\ninterface PointProps extends CommonChartProps {\n xKey?: Accessor<number | null | undefined>;\n yKey?: Accessor<number | null | undefined>;\n sizeKey?: Accessor<number | null | undefined>;\n sizeRange?: readonly [number, number];\n}\n\ninterface Point {\n readonly index: number;\n readonly datum: Datum;\n readonly x: number;\n readonly y: number;\n readonly size: number | undefined;\n}\n\nconst validRange = (range: readonly [number, number] | undefined): range is readonly [number, number] =>\n !!range && Number.isFinite(range[0]) && Number.isFinite(range[1]) && range[0] > 0 && range[0] <= range[1];\n\n/**\n * Points on two linear scales. A size maps to marker **area**, affinely from the smallest size to\n * the largest across `sizeRange` (px²): area, not radius, so a size twice as far from the smallest\n * is a mark twice as much larger to the eye (REQ-082, REQ-083).\n */\nexport function buildPoints(family: PointFamily, props: PointProps, context: RecipeContext, demo: readonly Datum[]): ChartModel {\n const { chart } = family;\n const usesDemo = props.data === undefined;\n const data = props.data ?? demo;\n const xKey = usesDemo ? 'x' : (props.xKey ?? 'x');\n const yKey = usesDemo ? 'y' : (props.yKey ?? 'y');\n const sizeKey = usesDemo ? 'size' : (props.sizeKey ?? (family.sizeByDefault ? 'size' : undefined));\n const sizeRange = validRange(props.sizeRange) ? props.sizeRange : family.defaultSizeRange;\n if (props.sizeRange !== undefined && !validRange(props.sizeRange)) {\n warnValue(chart, 'sizeRange', `[${String(props.sizeRange)}] is not two finite areas with 0 < smallest ≤ largest; the default [${String(family.defaultSizeRange)}] is used.`);\n }\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const xName = accessorName(xKey, 'x');\n const yName = accessorName(yKey, 'y');\n const sizeName = sizeKey === undefined ? undefined : accessorName(sizeKey, 'size');\n checkCount(chart, yName, data.length);\n\n const points: Point[] = [];\n data.forEach((datum, index) => {\n const x = finite(read(xKey, datum, index));\n const y = finite(read(yKey, datum, index));\n const size = sizeKey === undefined ? undefined : finite(read(sizeKey, datum, index));\n if (x === undefined || y === undefined) {\n warnValue(chart, x === undefined ? xName : yName, `Row ${index} has no finite ${x === undefined ? xName : yName}; it is omitted.`);\n return;\n }\n if (sizeKey !== undefined && (size === undefined || size < 0)) {\n warnValue(chart, sizeName ?? 'size', `Row ${index} has a size of ${String(size ?? 'no number')}; sizes must be zero or more, so it is omitted.`);\n return;\n }\n points.push({ index, datum, x, y, size });\n });\n\n const base = modelBase(chart, props, context, family.fallbackName, {\n columns: [xName, yName, ...(sizeName ? [sizeName] : [])],\n rows: data.map((datum, index) => [\n formatValue(read(xKey, datum, index), locale, numberFormat),\n formatValue(read(yKey, datum, index), locale, numberFormat),\n ...(sizeKey ? [formatValue(read(sizeKey, datum, index), locale, numberFormat)] : []),\n ]),\n });\n const size = measure(base, props, context);\n if ('deferred' in size) return size.deferred;\n const card = cardLayout(props, { width: size.width, areaHeight: size.height, chrome: props.chrome ?? 'card', locale });\n const plot = cartesianPlot(card.area);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (points.length === 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n }\n\n const sizes = extent(points.flatMap((p) => (p.size === undefined ? [] : [p.size])));\n const areaOf = (s: number | undefined) => {\n if (s === undefined || !sizes) return sizeRange[0];\n if (sizes[0] === sizes[1]) return sizeRange[1];\n return sizeRange[0] + ((s - sizes[0]) / (sizes[1] - sizes[0])) * (sizeRange[1] - sizeRange[0]);\n };\n const radius = (s: number | undefined) => Math.sqrt(areaOf(s) / Math.PI);\n const largest = Math.max(...points.map((p) => radius(p.size)));\n // The scales run inside the plot by the largest radius, so no mark is ever clipped.\n const inner = inset(plot, largest);\n\n const axis = valueAxis(inner, extent(points.map((p) => p.y)) ?? [0, 0], { chart, property: yName, padding: context.domainPadding, locale, numberFormat, zero: false });\n const y = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n // The value labels sit at the plot's left edge; the marks start after them, so none covers one.\n const gutter = Math.min(Math.max(0, ...axis.labels.map((l) => l.text.length * TICK_CHAR)) + 4 + largest, inner.width / 3);\n const x = linearScale(extent(points.map((p) => p.x)) ?? [0, 0], [inner.x + gutter, inner.x + inner.width], { chart, property: xName, padding: context.domainPadding, nice: true });\n for (const tick of x.ticks(4)) {\n labels.push({ x: x(tick), y: card.area.y + card.area.height - 5, text: formatNumber(tick, locale, numberFormat), kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n\n // The largest mark is drawn first, so the small ones stay on top of it.\n for (const p of [...points].sort((a, b) => radius(b.size) - radius(a.size) || a.index - b.index)) {\n strokes.push({ d: circlePath(x(p.x), y(p.y), radius(p.size)), role: 'encoding', part: 'ink', ...(family.toned ? { tone: 1 as const } : {}) });\n }\n for (const p of points) {\n const r = radius(p.size);\n hitAreas.push({ seriesKey: yName, index: p.index, datum: p.datum, value: p.y, x: x(p.x), y: y(p.y), box: { x: x(p.x) - r, y: y(p.y) - r, width: 2 * r, height: 2 * r } });\n }\n\n const xs = extent(points.map((p) => p.x)) ?? [0, 0];\n const ys = extent(points.map((p) => p.y)) ?? [0, 0];\n const description =\n props.description ??\n `${base.name}. ${points.length} points; ${xName} from ${formatNumber(xs[0], locale, numberFormat)} to ${formatNumber(xs[1], locale, numberFormat)}, ${yName} from ${formatNumber(ys[0], locale, numberFormat)} to ${formatNumber(ys[1], locale, numberFormat)}${\n sizeName && sizes ? `, ${sizeName} from ${formatNumber(sizes[0], locale, numberFormat)} to ${formatNumber(sizes[1], locale, numberFormat)} as marker area` : ''\n }.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `ScatterChart` (REQ-093): height against weight. Frozen (Data Model §4). */\nexport const SCATTER_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 152, y: 51, size: 2 },\n { x: 158, y: 56, size: 4 },\n { x: 161, y: 54, size: 3 },\n { x: 165, y: 62, size: 6 },\n { x: 168, y: 60, size: 5 },\n { x: 171, y: 68, size: 8 },\n { x: 175, y: 71, size: 7 },\n { x: 178, y: 69, size: 9 },\n { x: 182, y: 77, size: 10 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { ChartRecipe, RecipeContext, ScatterChartProps } from '../../types';\nimport { buildPoints } from '../shared/points';\nimport { SCATTER_CHART_DEMO } from './demo';\n\nconst FAMILY = { chart: 'ScatterChart', fallbackName: 'Scatter chart', defaultSizeRange: [60, 240] as const, sizeByDefault: false, toned: false };\n\n/** `ScatterChart` recipe (REQ-082): points on two linear scales, optionally sized by area. */\nexport const scatterChart: ChartRecipe<ScatterChartProps> = /* @__PURE__ */ Object.freeze({\n name: 'ScatterChart',\n build: (props: ScatterChartProps, context: RecipeContext) => buildPoints(FAMILY, props, context, SCATTER_CHART_DEMO),\n});\n","import type { Datum } from '../../types';\n\n/** Demo dataset of `BubbleChart` (REQ-093): markets by growth, margin and size. Frozen (Data Model §4). */\nexport const BUBBLE_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 2, y: 18, size: 40 },\n { x: 5, y: 24, size: 120 },\n { x: 8, y: 12, size: 65 },\n { x: 11, y: 30, size: 210 },\n { x: 14, y: 21, size: 90 },\n ].map((row) => Object.freeze(row)),\n);\n","import type { BubbleChartProps, ChartRecipe, RecipeContext } from '../../types';\nimport { buildPoints } from '../shared/points';\nimport { BUBBLE_CHART_DEMO } from './demo';\n\nconst FAMILY = { chart: 'BubbleChart', fallbackName: 'Bubble chart', defaultSizeRange: [100, 500] as const, sizeByDefault: true, toned: true };\n\n/** `BubbleChart` recipe (REQ-083): circles whose area encodes the size. */\nexport const bubbleChart: ChartRecipe<BubbleChartProps> = /* @__PURE__ */ Object.freeze({\n name: 'BubbleChart',\n build: (props: BubbleChartProps, context: RecipeContext) => buildPoints(FAMILY, props, context, BUBBLE_CHART_DEMO),\n});\n","import { diagnose } from '../diagnostics/diagnose';\nimport type { DashboardBreakpoint, DashboardLayout, PerBreakpoint, ResolvedLayout, ResolvedSpan } from './types';\n\nexport const BREAKPOINTS: readonly DashboardBreakpoint[] = ['sm', 'md', 'lg'];\nexport const DASHBOARD = 'Dashboard';\n/** Columns a breakpoint may have, and rows a cell may span (Data Model §2.13). */\nconst MAX_COLUMNS = 12;\nconst MAX_ROW_SPAN = 6;\n\n/** The dashboard's documented defaults (API Spec §5.1, REQ-208). */\nexport const DASHBOARD_DEFAULTS = /* @__PURE__ */ Object.freeze({\n columns: /* @__PURE__ */ Object.freeze({ sm: 1, md: 2, lg: 4 }),\n rowHeight: 240,\n gap: 16,\n span: 1,\n headingLevel: 2,\n ssrWidth: 1200,\n} as const);\n\n/** A per-breakpoint value expanded to all three: a bare value applies everywhere, a gap keeps `fallback`. */\nexport function perBreakpoint<T>(value: PerBreakpoint<T> | undefined, fallback: Readonly<Record<DashboardBreakpoint, T>>): Record<DashboardBreakpoint, T> {\n const given = value !== null && typeof value === 'object' ? (value as Partial<Record<DashboardBreakpoint, T>>) : undefined;\n const bare = value !== undefined && given === undefined ? (value as T) : undefined;\n return Object.fromEntries(BREAKPOINTS.map((bp) => [bp, bare ?? given?.[bp] ?? fallback[bp]])) as Record<DashboardBreakpoint, T>;\n}\n\n/** Warns SP002 for a number outside the layout contract and returns what is used instead. */\nfunction corrected(property: string, given: unknown, used: number, rule: string): number {\n if (process.env.NODE_ENV !== 'production') {\n diagnose('SP002', DASHBOARD, { property, message: `${String(given)} is not ${rule}; ${used} is used.` });\n }\n return used;\n}\n\nconst isInteger = (n: unknown): n is number => typeof n === 'number' && Number.isInteger(n);\n\n/**\n * The layout with its defaults applied and its numbers held to the contract of Data Model §2.13\n * (REQ-201, REQ-204, REQ-208): invalid numbers fall back with SP002, a column span wider than its\n * breakpoint is clamped with SP014 (I-12). Pure but for diagnostics; JSON-serialisable (I-10).\n */\nexport function resolveLayout(layout: DashboardLayout | undefined): ResolvedLayout {\n const asked = perBreakpoint<unknown>(layout?.columns, DASHBOARD_DEFAULTS.columns);\n const columns = Object.fromEntries(\n BREAKPOINTS.map((bp) => {\n const n = asked[bp];\n const ok = isInteger(n) && n >= 1 && n <= MAX_COLUMNS;\n return [bp, ok ? n : corrected(`columns.${bp}`, n, DASHBOARD_DEFAULTS.columns[bp], `an integer from 1 to ${MAX_COLUMNS}`)];\n }),\n ) as Record<DashboardBreakpoint, number>;\n const rowHeight = layout?.rowHeight;\n const gap = layout?.gap;\n const one = { sm: 1, md: 1, lg: 1 };\n return {\n columns,\n rowHeight:\n rowHeight === undefined ? DASHBOARD_DEFAULTS.rowHeight : Number.isFinite(rowHeight) && rowHeight > 0 ? rowHeight : corrected('rowHeight', rowHeight, DASHBOARD_DEFAULTS.rowHeight, 'a number above 0'),\n gap: gap === undefined ? DASHBOARD_DEFAULTS.gap : Number.isFinite(gap) && gap >= 0 ? gap : corrected('gap', gap, DASHBOARD_DEFAULTS.gap, 'a number of 0 or more'),\n cells: (layout?.cells ?? []).map((cell, index) => {\n const col = perBreakpoint<unknown>(cell.colSpan, one);\n const row = perBreakpoint<unknown>(cell.rowSpan, one);\n const where = `cells[${index}]`;\n const span = Object.fromEntries(\n BREAKPOINTS.map((bp) => {\n let c = col[bp];\n if (!isInteger(c) || c < 1) c = corrected(`${where}.colSpan.${bp}`, c, 1, 'an integer of 1 or more');\n else if (c > columns[bp]) {\n if (process.env.NODE_ENV !== 'production') {\n diagnose('SP014', DASHBOARD, { property: `${where}.colSpan.${bp}`, message: `Cell \"${cell.id}\" spans ${c} columns at ${bp}, which has ${columns[bp]}; it spans ${columns[bp]}.` });\n }\n c = columns[bp];\n }\n let r = row[bp];\n if (!isInteger(r)) r = corrected(`${where}.rowSpan.${bp}`, r, 1, `an integer from 1 to ${MAX_ROW_SPAN}`);\n else if (r < 1 || r > MAX_ROW_SPAN) r = corrected(`${where}.rowSpan.${bp}`, r, Math.min(Math.max(r, 1), MAX_ROW_SPAN), `an integer from 1 to ${MAX_ROW_SPAN}`);\n return [bp, { col: c as number, row: r as number }];\n }),\n ) as ResolvedSpan;\n return { id: cell.id, span };\n }),\n };\n}\n","import { cardLayout } from '../charts/shared/card';\nimport { diagnose } from '../diagnostics/diagnose';\nimport { round2 } from '../render/round';\nimport type { ChartRecipe, CommonChartProps } from '../types';\nimport { BREAKPOINTS, DASHBOARD, DASHBOARD_DEFAULTS, resolveLayout } from './defaults';\nimport type { DashboardBreakpoint, DashboardModel, DashboardProps, ResolvedCell, ResolvedLayout, ResolvedSpan } from './types';\n\n/** Characters an id keeps intact in an IDREF list and inside `url(#…)` — the rule of `renderChart`. */\nconst UNSAFE = /[^A-Za-z0-9_.:-]+/g;\n/** Container widths where `md` and `lg` begin (TD DD-014); fixed in the stylesheet too. */\nconst MD_FROM = 640;\nconst LG_FROM = 1024;\n/** Drawing-area height of the probe build that measures a chart's card chrome. */\nconst PROBE = 100;\n\n/** An id with every character unsafe in an IDREF or `url(#…)` replaced by `-`. */\nexport function safeIdOf(id: string): string {\n return id.replace(UNSAFE, '-');\n}\n\nfunction warn(code: 'SP002' | 'SP015', property: string, message: string): void {\n if (process.env.NODE_ENV !== 'production') diagnose(code, DASHBOARD, { property, message });\n}\n\n/** The breakpoint a container of `width` px falls in (DD-014). */\nexport function breakpointOf(width: number): DashboardBreakpoint {\n return width >= LG_FROM ? 'lg' : width >= MD_FROM ? 'md' : 'sm';\n}\n\n/** A cell's outer box at `width`, DD-015: whole columns and the gaps they span, 2 decimals (REQ-002). */\nfunction nominalBox(layout: ResolvedLayout, span: ResolvedSpan, width: number): { width: number; height: number } {\n const bp = breakpointOf(width);\n const { col, row } = span[bp];\n const cols = layout.columns[bp];\n const { gap, rowHeight } = layout;\n return {\n width: round2(((width - gap * (cols - 1)) / cols) * col + gap * (col - 1)),\n height: round2(rowHeight * row + gap * (row - 1)),\n };\n}\n\nfunction cellStyle(span: ResolvedSpan): Record<string, string> {\n const style: Record<string, string> = {};\n for (const bp of BREAKPOINTS) style[`--sp-cell-col-${bp}`] = String(span[bp].col);\n for (const bp of BREAKPOINTS) style[`--sp-cell-row-${bp}`] = String(span[bp].row);\n return style;\n}\n\n/**\n * The dashboard's resolved model (REQ-201): children matched to layout cells by id in the four\n * rules of Data Model §2.13, spans held to the columns, chart ids derived from the dashboard's id\n * (REQ-209), nominal boxes at `ssrWidth` (REQ-206) and the custom properties the adapters write\n * (REQ-202). Pure but for diagnostics; never throws on a mismatch (REQ-205).\n */\nexport function resolveDashboard(props: DashboardProps, childCells: readonly (string | undefined)[]): DashboardModel {\n const layout = resolveLayout(props.layout);\n let ssrWidth: number = DASHBOARD_DEFAULTS.ssrWidth;\n if (props.ssrWidth !== undefined) {\n if (Number.isFinite(props.ssrWidth) && props.ssrWidth > 0) ssrWidth = props.ssrWidth;\n else warn('SP002', 'ssrWidth', `${String(props.ssrWidth)} is not a width above 0; ${ssrWidth} is used.`);\n }\n\n // The layout's cells by id; a repeated id is ignored after its first declaration.\n const declared = new Map<string, ResolvedSpan>();\n const order: string[] = [];\n for (const cell of layout.cells) {\n if (declared.has(cell.id)) {\n warn('SP015', 'layout.cells', `Layout cell \"${cell.id}\" is declared twice; the later declaration is ignored.`);\n continue;\n }\n declared.set(cell.id, cell.span);\n order.push(cell.id);\n }\n\n // Rules 1 and 3: each child takes its cell once; the rest wait for source order.\n const holder = new Map<string, number>();\n const unplaced: number[] = [];\n childCells.forEach((cell, index) => {\n if (cell === undefined) {\n unplaced.push(index);\n } else if (!declared.has(cell)) {\n warn('SP015', 'cell', `Child ${index} names cell \"${cell}\", which the layout does not declare; it is placed in source order, span 1.`);\n unplaced.push(index);\n } else if (holder.has(cell)) {\n warn('SP015', 'cell', `Children ${holder.get(cell)} and ${index} both name cell \"${cell}\"; the later is placed in source order, span 1.`);\n unplaced.push(index);\n } else {\n holder.set(cell, index);\n }\n });\n\n // Rule 4: a layout cell with no child is dropped and leaves no hole.\n for (const id of order) {\n if (!holder.has(id)) warn('SP015', 'layout.cells', `Layout cell \"${id}\" has no child; it is dropped.`);\n }\n\n const single: ResolvedSpan = { sm: { col: 1, row: 1 }, md: { col: 1, row: 1 }, lg: { col: 1, row: 1 } };\n const base = safeIdOf(props.id);\n const taken = new Set<string>();\n const chartIdOf = (token: string): string => {\n const stem = `${base}--${token.replace(UNSAFE, '-')}`;\n let id = stem;\n for (let n = 2; taken.has(id); n += 1) id = `${stem}-${n}`;\n taken.add(id);\n return id;\n };\n const cellOf = (id: string, child: number, span: ResolvedSpan, token: string): ResolvedCell => ({\n id,\n child,\n chartId: chartIdOf(token),\n span,\n nominal: nominalBox(layout, span, ssrWidth),\n style: cellStyle(span),\n });\n\n // Rule 2: the reading order is the layout's, then the unplaced children in source order (I-11).\n const cells = [\n ...order.filter((id) => holder.has(id)).map((id) => cellOf(id, holder.get(id) as number, declared.get(id) as ResolvedSpan, id)),\n ...unplaced.map((index) => cellOf(String(index), index, single, String(index))),\n ];\n\n const style: Record<string, string> = {};\n for (const bp of BREAKPOINTS) style[`--sp-dashboard-columns-${bp}`] = String(layout.columns[bp]);\n style['--sp-dashboard-row-height'] = `${layout.rowHeight}px`;\n style['--sp-dashboard-layout-gap'] = `${layout.gap}px`;\n return { id: props.id, cells, style };\n}\n\n/**\n * The size a chart is drawn at inside a cell box (REQ-206): the cell's width, and its height less\n * the chart's own card chrome, so every card in a row has the same outer height (I-13). The chrome\n * is measured by building `recipe` at a probe height — the recipe may add rows of its own (KpiCard's\n * value line) — and read from `cardLayout` when no recipe is given. The chart's own `width` and\n * `height` take precedence (API Spec §7.1, size precedence).\n */\nexport function cellChartBox<P extends CommonChartProps>(cell: { width: number; height: number }, chartProps: P, recipe?: ChartRecipe<P>): { width: number; height: number } {\n const width = chartProps.width ?? cell.width;\n if (chartProps.height !== undefined) return { width, height: chartProps.height };\n let outer: number | undefined;\n if (recipe && width > 0) {\n const model = recipe.build({ ...chartProps, width, height: PROBE }, { id: 'sp-probe', width, locale: 'en', emptyState: { text: '', rule: false }, domainPadding: 0 });\n if (model.status !== 'deferred') outer = model.geometry.viewBox.height;\n }\n outer ??= cardLayout(chartProps, { width, areaHeight: PROBE, chrome: chartProps.chrome ?? 'card', locale: 'en' }).viewBox.height;\n return { width, height: Math.max(1, round2(cell.height - (outer - PROBE))) };\n}\n","import { DEFAULTS } from '../config/resolve';\nimport { diagnose } from '../diagnostics/diagnose';\nimport type { ChartRecipe, CommonChartProps, ProviderConfig } from '../types';\nimport { DASHBOARD_DEFAULTS } from './defaults';\nimport { cellChartBox, resolveDashboard, safeIdOf } from './resolve';\nimport type { DashboardCellContext, DashboardProps, DashboardView } from './types';\n\n/**\n * The dashboard as an adapter writes it (REQ-200, REQ-214): the section's class, substrate, name\n * and variables, the heading and description, and per cell its variables, its label and the\n * context its chart reads. `children` gives, in source order, each child's `cell` and its chart's\n * own `id` when the adapter can read it. `palette` is the section's own palette as declarations\n * (`paletteStyle`, from `@silverpoint/core/palettes`, off this entry's budget), written first in its\n * style; the cells hand the palette on to their charts and components (REQ-461, REQ-462).\n */\nexport function dashboardView(\n props: DashboardProps,\n children: readonly { readonly cell?: string; readonly id?: string }[],\n palette = '',\n): DashboardView {\n const model = resolveDashboard(props, children.map((c) => c.cell));\n // React and Vue reject a nameless dashboard by type; Angular's signal inputs cannot (REQ-214).\n if (props.title === undefined && props.label === undefined && process.env.NODE_ENV !== 'production') {\n diagnose('SP002', 'Dashboard', { property: 'title', message: 'Name the region with `title` or `label`.' });\n }\n const base = safeIdOf(props.id);\n const ground = props.ground ?? DEFAULTS.ground;\n const groundName = typeof ground === 'string' ? ground : ground.name;\n const titled = props.title !== undefined;\n const heading = titled ? { level: props.headingLevel ?? DASHBOARD_DEFAULTS.headingLevel, id: `${base}-title`, text: props.title } : undefined;\n const description = props.description !== undefined ? { id: `${base}-desc`, text: props.description } : undefined;\n const config: ProviderConfig = {};\n for (const key of ['ground', 'substrate', 'mode', 'locale', 'palette'] as const) {\n if (props[key] !== undefined) (config as Record<string, unknown>)[key] = props[key];\n }\n return {\n model,\n section: {\n className: ['sp-dashboard', `sp-ground-${groundName}`, props.className].filter(Boolean).join(' '),\n substrate: props.substrate ?? DEFAULTS.substrate,\n ...(heading ? { labelledby: heading.id } : { label: props.label }),\n ...(description ? { describedby: description.id } : {}),\n style: { ...Object.fromEntries(palette.split(';').filter(Boolean).map((d) => d.split(':') as [string, string])), ...model.style },\n },\n ...(heading ? { heading } : {}),\n ...(description ? { description } : {}),\n cells: model.cells.map((cell) => ({\n child: cell.child,\n labelledby: `${children[cell.child]?.id ?? cell.chartId}-title`,\n style: cell.style,\n context: { chartId: cell.chartId, box: cell.nominal, config },\n })),\n };\n}\n\n/**\n * A chart's props inside a cell (API Spec §7.1, size precedence; REQ-212 config precedence): its\n * own `id`, `height` and config win; the cell supplies the rest. `width` is the width to draw at\n * until the chart is measured — the chart's own, else the cell's nominal width (REQ-207).\n */\nexport function inCell<P extends CommonChartProps>(props: P, cell: DashboardCellContext | undefined, recipe: ChartRecipe<P>): { props: P; width: number | undefined } {\n if (!cell) return { props, width: props.width };\n const box = cellChartBox(cell.box, props, recipe);\n // An own prop wins only when it has a value: Vue hands every declared prop, absent ones undefined.\n const merged: Record<string, unknown> = { ...(props as Record<string, unknown>) };\n for (const [key, value] of Object.entries(cell.config)) merged[key] ??= value;\n // A palette merges field by field, the chart's own fields over the dashboard's (REQ-462).\n if (props.palette && cell.config.palette) {\n const palette: Record<string, unknown> = { ...cell.config.palette };\n for (const [field, value] of Object.entries(props.palette)) if (value !== undefined) palette[field] = value;\n merged.palette = palette;\n }\n return {\n props: { ...merged, id: props.id ?? cell.chartId, height: props.height ?? box.height } as P,\n width: props.width ?? box.width,\n };\n}\n","import { diagnose } from '../diagnostics/diagnose';\nimport { readout, toActiveItem } from '../interaction/hit-test';\nimport type { ActiveItem, ChartModel } from '../types';\n\n/**\n * The items of `model` whose datum carries `value` under `key` (REQ-216), by the index of their hit\n * area: exact matches only, never the nearest (REQ-217). A chart whose data has no `key` at all\n * shows no linked mark and warns SP016, once. Pure: the model is read, never touched.\n */\nexport function linkedItems(model: ChartModel, key: string, value: unknown): readonly number[] {\n const { hitAreas } = model.geometry;\n if (hitAreas.length > 0 && !hitAreas.some((hit) => key in hit.datum) && process.env.NODE_ENV !== 'production') {\n diagnose('SP016', model.chart, { property: 'link.key', message: `No datum has a \"${key}\" field.` });\n }\n return hitAreas.flatMap((hit, index) => (hit.datum[key] === value ? [index] : []));\n}\n\n/** A dashboard's linked value (REQ-216): the key, the value of the source's active item, and the source chart's id. */\nexport interface LinkState {\n readonly key: string;\n readonly value: unknown;\n readonly source: string;\n}\n\n/** The link a chart's active item sets; `null` when it clears, which clears every chart (REQ-218). */\nexport function linkFrom(key: string, source: string, active: ActiveItem | null): LinkState | null {\n return active ? { key, value: active.datum[key], source } : null;\n}\n\n/**\n * The marker paths a chart draws for a link (REQ-216): the readout's own marker, for each item\n * carrying the value. None for the source, which shows its active item, nor for a cleared link.\n */\nexport function linkedMarks(model: Pick<ChartModel, 'id' | 'chart' | 'geometry' | 'table'>, state: LinkState | null | undefined): readonly string[] {\n if (!state || state.source === model.id) return [];\n return linkedItems(model as ChartModel, state.key, state.value).map((index) => readout(model, toActiveItem(model.geometry.hitAreas[index]!)).marker.d);\n}\n"]}