@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
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/charts/shared/contracts.ts","../src/charts/shared/stats.ts","../src/charts/histogram-chart/demo.ts","../src/charts/histogram-chart/histogram-chart.ts","../src/charts/ecdf-chart/demo.ts","../src/charts/ecdf-chart/ecdf-chart.ts","../src/charts/shared/distribution.ts","../src/charts/box-plot-chart/demo.ts","../src/charts/box-plot-chart/box-plot-chart.ts","../src/charts/shared/density.ts","../src/charts/violin-chart/demo.ts","../src/charts/violin-chart/violin-chart.ts","../src/charts/ridgeline-chart/demo.ts","../src/charts/ridgeline-chart/ridgeline-chart.ts","../src/charts/shared/beeswarm.ts","../src/charts/beeswarm-chart/demo.ts","../src/charts/beeswarm-chart/beeswarm-chart.ts","../src/charts/lollipop-chart/demo.ts","../src/charts/lollipop-chart/lollipop-chart.ts","../src/charts/dumbbell-chart/demo.ts","../src/charts/dumbbell-chart/dumbbell-chart.ts","../src/charts/slope-chart/demo.ts","../src/charts/slope-chart/slope-chart.ts","../src/charts/bump-chart/demo.ts","../src/charts/bump-chart/bump-chart.ts","../src/charts/error-bar-chart/demo.ts","../src/charts/error-bar-chart/error-bar-chart.ts","../src/charts/interval-chart/demo.ts","../src/charts/interval-chart/interval-chart.ts","../src/charts/diverging-bar-chart/demo.ts","../src/charts/diverging-bar-chart/diverging-bar-chart.ts","../src/charts/connected-scatter-chart/demo.ts","../src/charts/connected-scatter-chart/connected-scatter-chart.ts","../src/charts/shared/hierarchy.ts","../src/interaction/tree.ts","../src/charts/shared/nodes.ts","../src/charts/squarified-treemap/demo.ts","../src/charts/squarified-treemap/squarified-treemap.ts","../src/charts/sunburst-chart/demo.ts","../src/charts/sunburst-chart/sunburst-chart.ts","../src/charts/tree-chart/demo.ts","../src/charts/tree-chart/tree-chart.ts","../src/charts/waffle-chart/demo.ts","../src/charts/waffle-chart/waffle-chart.ts","../src/charts/marimekko-chart/demo.ts","../src/charts/marimekko-chart/marimekko-chart.ts","../src/charts/parallel-coordinates-chart/demo.ts","../src/charts/parallel-coordinates-chart/parallel-coordinates-chart.ts","../src/charts/shared/radial.ts","../src/charts/polar-line-chart/demo.ts","../src/charts/polar-line-chart/polar-line-chart.ts","../src/charts/polar-scatter-chart/demo.ts","../src/charts/polar-scatter-chart/polar-scatter-chart.ts","../src/charts/shared/field.ts","../src/charts/shared/xy.ts","../src/charts/density-bin-chart/demo.ts","../src/charts/density-bin-chart/density-bin-chart.ts","../src/charts/contour-chart/demo.ts","../src/charts/contour-chart/contour-chart.ts","../src/charts/shared/delaunay.ts","../src/charts/delaunay-chart/demo.ts","../src/charts/delaunay-chart/delaunay-chart.ts","../src/charts/vector-field-chart/demo.ts","../src/charts/vector-field-chart/vector-field-chart.ts","../src/charts/shared/network.ts","../src/charts/network-chart/demo.ts","../src/charts/network-chart/network-chart.ts","../src/interaction/root-change.ts"],"names":["value","chain","bins","family","worst","along","text","CHART","HEIGHTEN_RADIUS","read","ROW_LABELS","band","p","POINT_RADIUS","MINIMUM","area","areaShape","method","bandwidthOf","curveMonotoneX","spacing","v","inset","falls","line","best","PERCENT","DOT_RADIUS","byValue","tiles","toneOf","LABEL_GAP","GAP","LEGEND_GAP","TURN","ordered","MIN_RADIUS","DEGREES","extent","LABEL_ROOM","round2","d","rank","HEAD","arrowPath","k","NODE_RADIUS"],"mappings":"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AAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC7D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAC7D,KAAA;AAAA,IAAO,MAAA;AAAA,IAAQ,IAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,MAAA;AAAA,IAC/D,MAAA;AAAA,IAAQ,MAAA;AAAA,IAAQ,MAAA;AAAA,IAAQ,MAAA;AAAA,IAAQ,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAA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AAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,IAAA;AAAA,IAAM,KAAA;AAAA,IAC7D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAC5D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC9D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC9D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAC7D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAC9D,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC7D,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC9D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAC9D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,GAAA;AAAA,IAAK,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC7D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAC9D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC7D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAC9D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC9D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,IAAA;AAAA,IAAM,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC7D,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAC7D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC9D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC9D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;A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Q,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ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","file":"catalog.js","sourcesContent":["import { diagnose } from '../../diagnostics/diagnose';\nimport type { Accessor, Datum, NetworkNode } from '../../types';\nimport { finite, warnValue } from './cells';\nimport { parseIsoDate } from './dates';\nimport { accessorName, read } from './format';\n\n/**\n * The input contracts of the second catalog (Data Model §2.15..§2.24): one reader per shape. Each\n * reads through the chart's accessors, drops, swaps or corrects what its contract row says, and\n * warns once per render and property, naming the first offending row (T-164).\n */\n\n/**\n * Counts the rows a reader rejected or corrected, and warns once per render (SP002), naming the\n * property and row of the first of them.\n */\nclass Rejections {\n private first: { property: string; index: number; why: string } | undefined;\n private count = 0;\n\n constructor(\n private readonly chart: string,\n private readonly total: number,\n ) {}\n\n add(property: string, index: number, why: string): void {\n this.count += 1;\n this.first ??= { property, index, why };\n }\n\n report(): void {\n if (!this.first) return;\n const { property, index, why } = this.first;\n warnValue(this.chart, property, `${this.count} of ${this.total} rows break the data contract; the first is row ${index}, which ${why}.`);\n }\n}\n\n/** A text field: a string, or a number printed as given; anything else is missing. */\nfunction text(raw: unknown): string | undefined {\n if (typeof raw === 'string') return raw;\n if (typeof raw === 'number' && Number.isFinite(raw)) return String(raw);\n return undefined;\n}\n\n/** First-appearance order of a list of keys. */\nfunction ordered<T>(keys: Iterable<T>): T[] {\n return [...new Set(keys)];\n}\n\n// --- §2.15 Observations ----------------------------------------------------------------------\n\nexport interface Observation {\n readonly value: number;\n /** `''` when the chart has no group accessor. */\n readonly group: string;\n readonly label?: string;\n readonly index: number;\n readonly datum: Datum;\n}\n\nexport function readObservations(\n chart: string,\n data: readonly Datum[],\n keys: { value: Accessor<unknown>; group?: Accessor<unknown>; label?: Accessor<unknown> },\n): { observations: Observation[]; groups: string[] } {\n const rejected = new Rejections(chart, data.length);\n const valueName = accessorName(keys.value, 'value');\n const groupName = keys.group === undefined ? 'group' : accessorName(keys.group, 'group');\n const observations: Observation[] = [];\n data.forEach((datum, index) => {\n const value = finite(read(keys.value, datum, index));\n if (value === undefined) return rejected.add(valueName, index, 'has no finite value');\n const group = keys.group === undefined ? '' : text(read(keys.group, datum, index));\n if (group === undefined) return rejected.add(groupName, index, 'has no group');\n const label = keys.label === undefined ? undefined : text(read(keys.label, datum, index));\n observations.push(label === undefined ? { value, group, index, datum } : { value, group, label, index, datum });\n });\n rejected.report();\n return { observations, groups: keys.group === undefined ? [''] : ordered(observations.map((o) => o.group)) };\n}\n\n// --- §2.16 Paired ----------------------------------------------------------------------------\n\nexport interface PairedRow {\n readonly label: string;\n readonly start: number;\n readonly end: number;\n readonly index: number;\n readonly datum: Datum;\n}\n\nexport function readPaired(\n chart: string,\n data: readonly Datum[],\n keys: { label: Accessor<unknown>; start: Accessor<unknown>; end: Accessor<unknown> },\n): PairedRow[] {\n const rejected = new Rejections(chart, data.length);\n const seen = new Set<string>();\n const rows: PairedRow[] = [];\n data.forEach((datum, index) => {\n const label = text(read(keys.label, datum, index));\n if (label === undefined || seen.has(label)) return rejected.add(accessorName(keys.label, 'label'), index, 'repeats a label or has none');\n const start = finite(read(keys.start, datum, index));\n const end = finite(read(keys.end, datum, index));\n if (start === undefined) return rejected.add(accessorName(keys.start, 'start'), index, 'has no finite value');\n if (end === undefined) return rejected.add(accessorName(keys.end, 'end'), index, 'has no finite value');\n seen.add(label);\n rows.push({ label, start, end, index, datum });\n });\n rejected.report();\n return rows;\n}\n\n// --- §2.17 Ranked ----------------------------------------------------------------------------\n\nexport interface RankedRow {\n readonly x: string | number;\n readonly series: string;\n readonly value: number;\n readonly index: number;\n readonly datum: Datum;\n}\n\nexport function readRanked(\n chart: string,\n data: readonly Datum[],\n keys: { x: Accessor<unknown>; series: Accessor<unknown>; value: Accessor<unknown> },\n): { rows: RankedRow[]; xs: (string | number)[]; series: string[] } {\n const rejected = new Rejections(chart, data.length);\n const pairs = new Set<string>();\n const rows: RankedRow[] = [];\n data.forEach((datum, index) => {\n const rawX = read(keys.x, datum, index);\n const x = typeof rawX === 'number' && Number.isFinite(rawX) ? rawX : text(rawX);\n const series = text(read(keys.series, datum, index));\n if (x === undefined) return rejected.add(accessorName(keys.x, 'x'), index, 'has no x');\n if (series === undefined) return rejected.add(accessorName(keys.series, 'series'), index, 'has no series');\n const value = finite(read(keys.value, datum, index));\n if (value === undefined) return rejected.add(accessorName(keys.value, 'value'), index, 'has no finite value');\n const pair = `${typeof x}:${x}\\u0000${series}`;\n if (pairs.has(pair)) return rejected.add(accessorName(keys.series, 'series'), index, 'repeats an (x, series) pair');\n pairs.add(pair);\n rows.push({ x, series, value, index, datum });\n });\n rejected.report();\n return { rows, xs: ordered(rows.map((r) => r.x)), series: ordered(rows.map((r) => r.series)) };\n}\n\n// --- §2.18 Estimates -------------------------------------------------------------------------\n\nexport interface EstimateRow {\n readonly label: string;\n readonly estimate: number;\n readonly low: number;\n readonly high: number;\n /** The estimate falls outside its own interval: drawn, and warned. */\n readonly outside: boolean;\n readonly index: number;\n readonly datum: Datum;\n}\n\nexport function readEstimates(\n chart: string,\n data: readonly Datum[],\n keys: { label: Accessor<unknown>; estimate: Accessor<unknown>; low: Accessor<unknown>; high: Accessor<unknown> },\n): EstimateRow[] {\n const rejected = new Rejections(chart, data.length);\n const rows: EstimateRow[] = [];\n data.forEach((datum, index) => {\n const label = text(read(keys.label, datum, index)) ?? '';\n const estimate = finite(read(keys.estimate, datum, index));\n let low = finite(read(keys.low, datum, index));\n let high = finite(read(keys.high, datum, index));\n if (estimate === undefined || low === undefined || high === undefined) {\n return rejected.add(accessorName(keys.estimate, 'estimate'), index, 'has no finite estimate and interval');\n }\n if (low > high) {\n rejected.add(accessorName(keys.low, 'low'), index, 'has `low` above `high`, swapped');\n [low, high] = [high, low];\n }\n const outside = estimate < low || estimate > high;\n if (outside) rejected.add(accessorName(keys.estimate, 'estimate'), index, 'has an estimate outside its interval, drawn as given');\n rows.push({ label, estimate, low, high, outside, index, datum });\n });\n rejected.report();\n return rows;\n}\n\n// --- §2.19 Intervals -------------------------------------------------------------------------\n\nexport interface IntervalRow {\n readonly lane: string;\n /** A number, or whole UTC days since 1970-01-01 on a date axis. */\n readonly start: number;\n readonly end: number;\n readonly label?: string;\n readonly index: number;\n readonly datum: Datum;\n}\n\nexport function readIntervals(\n chart: string,\n data: readonly Datum[],\n keys: { lane: Accessor<unknown>; start: Accessor<unknown>; end: Accessor<unknown>; label?: Accessor<unknown> },\n axis: 'number' | 'date',\n): { rows: IntervalRow[]; lanes: string[] } {\n const rejected = new Rejections(chart, data.length);\n const parse = (raw: unknown) => {\n if (axis === 'date') return typeof raw === 'string' ? finite(parseIsoDate(raw)) : undefined;\n return finite(raw);\n };\n const rows: IntervalRow[] = [];\n data.forEach((datum, index) => {\n const lane = text(read(keys.lane, datum, index));\n if (lane === undefined) return rejected.add(accessorName(keys.lane, 'lane'), index, 'has no lane');\n let start = parse(read(keys.start, datum, index));\n let end = parse(read(keys.end, datum, index));\n if (start === undefined || end === undefined) {\n return rejected.add(accessorName(keys.start, 'start'), index, axis === 'date' ? 'has no ISO start and end' : 'has no finite start and end');\n }\n if (start > end) {\n rejected.add(accessorName(keys.start, 'start'), index, 'starts after it ends, swapped');\n [start, end] = [end, start];\n }\n const label = keys.label === undefined ? undefined : text(read(keys.label, datum, index));\n rows.push(label === undefined ? { lane, start, end, index, datum } : { lane, start, end, label, index, datum });\n });\n rejected.report();\n return { rows, lanes: ordered(rows.map((r) => r.lane)) };\n}\n\n// --- §2.20 Likert, WideRows ------------------------------------------------------------------\n\nexport interface LikertRow {\n readonly label: string;\n /** One count per level, in level order; a negative or missing count is 0. */\n readonly values: readonly number[];\n /** The values normalised to 100 with `percent`, else the values. */\n readonly shares: readonly number[];\n readonly total: number;\n readonly index: number;\n readonly datum: Datum;\n}\n\nexport function readLikert(\n chart: string,\n data: readonly Datum[],\n label: Accessor<unknown>,\n levels: readonly string[],\n percent: boolean,\n): LikertRow[] {\n const rejected = new Rejections(chart, data.length);\n return withReport(rejected, () =>\n data.map((datum, index) => {\n const values = levels.map((level) => {\n const raw = finite(datum[level]);\n if (raw === undefined || raw < 0) {\n rejected.add(level, index, 'has a negative or missing count, taken as 0');\n return 0;\n }\n return raw;\n });\n const total = values.reduce((sum, v) => sum + v, 0);\n const shares = percent ? values.map((v) => (total > 0 ? (v / total) * 100 : 0)) : values;\n return { label: text(read(label, datum, index)) ?? '', values, shares, total, index, datum };\n }),\n );\n}\n\nexport interface WideRow {\n readonly label?: string;\n /** One value per dimension, in dimension order. */\n readonly values: readonly number[];\n readonly index: number;\n readonly datum: Datum;\n}\n\nexport function readWideRows(\n chart: string,\n data: readonly Datum[],\n label: Accessor<unknown> | undefined,\n dimensions: readonly string[],\n): WideRow[] {\n const rejected = new Rejections(chart, data.length);\n const rows: WideRow[] = [];\n data.forEach((datum, index) => {\n const values = dimensions.map((dimension) => finite(datum[dimension]));\n const missing = values.findIndex((v) => v === undefined);\n if (missing >= 0) return rejected.add(dimensions[missing] as string, index, 'has no finite value for a dimension');\n const name = label === undefined ? undefined : text(read(label, datum, index));\n rows.push(name === undefined ? { values: values as number[], index, datum } : { label: name, values: values as number[], index, datum });\n });\n rejected.report();\n return rows;\n}\n\n// --- §2.21 PathPoints, PolarPoints -----------------------------------------------------------\n\nexport interface PathPoint {\n readonly x: number;\n readonly y: number;\n readonly label?: string;\n readonly index: number;\n readonly datum: Datum;\n}\n\n/** Points in data order, which is the path's order. */\nexport function readPathPoints(\n chart: string,\n data: readonly Datum[],\n keys: { x: Accessor<unknown>; y: Accessor<unknown>; label?: Accessor<unknown> },\n): PathPoint[] {\n const rejected = new Rejections(chart, data.length);\n const points: PathPoint[] = [];\n data.forEach((datum, index) => {\n const x = finite(read(keys.x, datum, index));\n const y = finite(read(keys.y, datum, index));\n if (x === undefined) return rejected.add(accessorName(keys.x, 'x'), index, 'has no finite x');\n if (y === undefined) return rejected.add(accessorName(keys.y, 'y'), index, 'has no finite y');\n const label = keys.label === undefined ? undefined : text(read(keys.label, datum, index));\n points.push(label === undefined ? { x, y, index, datum } : { x, y, label, index, datum });\n });\n rejected.report();\n return points;\n}\n\n/** §2.24's point cloud has the path points' contract, without the order. */\nexport const readPointCloud = readPathPoints;\n\nexport interface PolarPoint {\n /** In `[0, period)`. */\n readonly angle: number;\n readonly value: number;\n readonly size?: number;\n readonly index: number;\n readonly datum: Datum;\n}\n\nexport function readPolarPoints(\n chart: string,\n data: readonly Datum[],\n keys: { angle: Accessor<unknown>; value: Accessor<unknown>; size?: Accessor<unknown> },\n period: number,\n): PolarPoint[] {\n const rejected = new Rejections(chart, data.length);\n const points: PolarPoint[] = [];\n data.forEach((datum, index) => {\n const raw = finite(read(keys.angle, datum, index));\n const value = finite(read(keys.value, datum, index));\n if (raw === undefined) return rejected.add(accessorName(keys.angle, 'angle'), index, 'has no finite angle');\n if (value === undefined || value < 0) return rejected.add(accessorName(keys.value, 'value'), index, 'has no radius at or above 0');\n const angle = ((raw % period) + period) % period;\n const size = keys.size === undefined ? undefined : finite(read(keys.size, datum, index));\n points.push(size === undefined ? { angle, value, index, datum } : { angle, value, size, index, datum });\n });\n rejected.report();\n return points;\n}\n\n// --- §2.22 Mosaic ----------------------------------------------------------------------------\n\nexport interface Mosaic {\n readonly columns: readonly string[];\n readonly segments: readonly string[];\n /** `values[column][segment]`; a missing pair is 0. */\n readonly values: readonly (readonly number[])[];\n /** The row behind each pair, when there is one. */\n readonly rows: readonly (readonly ({ readonly index: number; readonly datum: Datum } | undefined)[])[];\n}\n\nexport function readMosaic(\n chart: string,\n data: readonly Datum[],\n keys: { column: Accessor<unknown>; segment: Accessor<unknown>; value: Accessor<unknown> },\n): Mosaic {\n const rejected = new Rejections(chart, data.length);\n const cells = new Map<string, { column: string; segment: string; value: number; index: number; datum: Datum }>();\n data.forEach((datum, index) => {\n const column = text(read(keys.column, datum, index));\n const segment = text(read(keys.segment, datum, index));\n if (column === undefined || segment === undefined) return rejected.add(accessorName(keys.column, 'column'), index, 'has no column and segment');\n const value = finite(read(keys.value, datum, index));\n if (value === undefined || value < 0) return rejected.add(accessorName(keys.value, 'value'), index, 'has no value at or above 0');\n const key = `${column}\\u0000${segment}`;\n if (cells.has(key)) return rejected.add(accessorName(keys.segment, 'segment'), index, 'repeats a (column, segment) pair');\n cells.set(key, { column, segment, value, index, datum });\n });\n rejected.report();\n const kept = [...cells.values()];\n const columns = ordered(kept.map((c) => c.column));\n const segments = ordered(kept.map((c) => c.segment));\n const cell = (column: string, segment: string) => cells.get(`${column}\\u0000${segment}`);\n return {\n columns,\n segments,\n values: columns.map((c) => segments.map((s) => cell(c, s)?.value ?? 0)),\n rows: columns.map((c) => segments.map((s) => {\n const found = cell(c, s);\n return found ? { index: found.index, datum: found.datum } : undefined;\n })),\n };\n}\n\n// --- §2.23 Hierarchy -------------------------------------------------------------------------\n\n/** Id of the root added when the data has several (Data Model §2.23). */\nexport const SYNTHETIC_ROOT = '∅';\n\nexport interface HierarchyRow {\n readonly id: string;\n readonly parent: string | null;\n /** A leaf's own value; 0 on internal nodes, whose value is the sum of their children. */\n readonly value: number;\n readonly label: string;\n /** `-1` for the synthetic root. */\n readonly index: number;\n readonly datum: Datum;\n}\n\n/**\n * Validates flat `{ id, parent }` rows (REQ-437): duplicate or empty ids, missing parents and\n * cycles are dropped with their descendants, several roots get a synthetic one. `SP020` is raised\n * once, naming the first offending id. Rows keep their input order, the synthetic root first.\n */\nexport function readHierarchy(\n chart: string,\n data: readonly Datum[],\n keys: { id: Accessor<unknown>; parent: Accessor<unknown>; value?: Accessor<unknown>; label?: Accessor<unknown> },\n rootLabel: string,\n): { rows: HierarchyRow[]; root: string | undefined } {\n let offender: { id: string; why: string } | undefined;\n const offend = (id: string, why: string) => {\n offender ??= { id, why };\n };\n const byId = new Map<string, { parent: string | null; index: number; datum: Datum }>();\n data.forEach((datum, index) => {\n const id = text(read(keys.id, datum, index));\n if (id === undefined || id === '') return offend(id ?? '', 'has an empty id');\n if (byId.has(id)) return offend(id, 'repeats an id');\n const rawParent = read(keys.parent, datum, index);\n const parent = rawParent === null || rawParent === undefined ? null : (text(rawParent) ?? null);\n byId.set(id, { parent, index, datum });\n });\n\n // A row is kept when its chain of parents reaches a root; a missing parent or a cycle never does.\n const reaches = new Map<string, boolean>();\n const resolve = (start: string): boolean => {\n const chain: string[] = [];\n const onChain = new Set<string>();\n let id: string | null = start;\n let verdict = false;\n while (id !== null) {\n const known = reaches.get(id);\n if (known !== undefined) {\n verdict = known;\n break;\n }\n const row = byId.get(id);\n if (!row || onChain.has(id)) break;\n chain.push(id);\n onChain.add(id);\n if (row.parent === null) {\n verdict = true;\n break;\n }\n id = row.parent;\n }\n for (const link of chain) reaches.set(link, verdict);\n return verdict;\n };\n for (const [id, row] of byId) {\n if (resolve(id)) continue;\n const parent = row.parent;\n offend(id, parent !== null && !byId.has(parent) ? `names a parent, \"${parent}\", that does not exist` : 'is in a cycle or under a dropped row');\n }\n\n const kept = [...byId].filter(([id]) => reaches.get(id));\n const roots = kept.filter(([, row]) => row.parent === null).map(([id]) => id);\n if (roots.length > 1) offend(roots[1] as string, 'is a second root; a synthetic root holds them all');\n const synthetic = roots.length > 1;\n const children = new Set(kept.map(([, row]) => row.parent).filter((p): p is string => p !== null));\n\n const valueName = keys.value === undefined ? 'value' : accessorName(keys.value, 'value');\n let badLeaf: { index: number; count: number } | undefined;\n const rows: HierarchyRow[] = kept.map(([id, row]) => {\n let value = 0;\n if (!children.has(id) && keys.value !== undefined) {\n const raw = finite(read(keys.value, row.datum, row.index));\n if (raw === undefined || raw < 0) {\n badLeaf = badLeaf ? { index: badLeaf.index, count: badLeaf.count + 1 } : { index: row.index, count: 1 };\n } else {\n value = raw;\n }\n }\n const label = (keys.label === undefined ? undefined : text(read(keys.label, row.datum, row.index))) ?? id;\n return { id, parent: synthetic && row.parent === null ? SYNTHETIC_ROOT : row.parent, value, label, index: row.index, datum: row.datum };\n });\n if (synthetic) {\n rows.unshift({ id: SYNTHETIC_ROOT, parent: null, value: 0, label: rootLabel, index: -1, datum: Object.freeze({}) });\n }\n\n if (offender && process.env.NODE_ENV !== 'production') {\n diagnose('SP020', chart, { property: accessorName(keys.id, 'id'), message: `The row \"${offender.id}\" ${offender.why}.` });\n }\n if (badLeaf) warnValue(chart, valueName, `${badLeaf.count} leaves have no value at or above 0, taken as 0; the first is row ${badLeaf.index}.`);\n return { rows, root: synthetic ? SYNTHETIC_ROOT : roots[0] };\n}\n\n// --- §2.24 GridField, VectorField, Network ---------------------------------------------------\n\nexport interface Grid<T> {\n /** The distinct x values, ascending. */\n readonly xs: readonly number[];\n /** The distinct y values, ascending. */\n readonly ys: readonly number[];\n /** Row-major, `cells[j * xs.length + i]` at `(xs[i], ys[j])`; `undefined` is a hole. */\n readonly cells: readonly (T | undefined)[];\n}\n\nfunction readCells<T>(\n chart: string,\n data: readonly Datum[],\n keys: { x: Accessor<unknown>; y: Accessor<unknown> },\n cell: (datum: Datum, index: number) => T | undefined,\n property: string,\n): Grid<T> {\n const rejected = new Rejections(chart, data.length);\n const found: { x: number; y: number; cell: T }[] = [];\n data.forEach((datum, index) => {\n const x = finite(read(keys.x, datum, index));\n const y = finite(read(keys.y, datum, index));\n if (x === undefined || y === undefined) return rejected.add(accessorName(keys.x, 'x'), index, 'has no finite position');\n const value = cell(datum, index);\n if (value === undefined) return rejected.add(property, index, 'has no finite value, left as a hole');\n found.push({ x, y, cell: value });\n });\n const xs = [...new Set(found.map((f) => f.x))].sort((a, b) => a - b);\n const ys = [...new Set(found.map((f) => f.y))].sort((a, b) => a - b);\n const column = new Map(xs.map((x, i) => [x, i]));\n const row = new Map(ys.map((y, j) => [y, j]));\n const cells: (T | undefined)[] = Array.from({ length: xs.length * ys.length }, () => undefined);\n found.forEach((f, k) => {\n const at = (row.get(f.y) as number) * xs.length + (column.get(f.x) as number);\n if (cells[at] !== undefined) return rejected.add(accessorName(keys.y, 'y'), k, 'repeats a grid cell; the first is kept');\n cells[at] = f.cell;\n });\n rejected.report();\n return { xs, ys, cells };\n}\n\nexport function readGrid(\n chart: string,\n data: readonly Datum[],\n keys: { x: Accessor<unknown>; y: Accessor<unknown>; value: Accessor<unknown> },\n): Grid<number> & { readonly values: readonly (number | undefined)[] } {\n const grid = readCells(chart, data, keys, (datum, index) => finite(read(keys.value, datum, index)), accessorName(keys.value, 'value'));\n return { ...grid, values: grid.cells };\n}\n\nexport interface Vector {\n readonly u: number;\n readonly v: number;\n}\n\nexport function readVectorField(\n chart: string,\n data: readonly Datum[],\n keys: { x: Accessor<unknown>; y: Accessor<unknown>; u: Accessor<unknown>; v: Accessor<unknown> },\n): Grid<Vector> & { readonly vectors: readonly (Vector | undefined)[] } {\n const grid = readCells(\n chart,\n data,\n keys,\n (datum, index) => {\n const u = finite(read(keys.u, datum, index));\n const v = finite(read(keys.v, datum, index));\n return u === undefined || v === undefined ? undefined : { u, v };\n },\n accessorName(keys.u, 'u'),\n );\n return { ...grid, vectors: grid.cells };\n}\n\nexport interface NetworkLink {\n readonly source: string;\n readonly target: string;\n readonly value: number;\n readonly index: number;\n readonly datum: Datum;\n}\n\nexport function readNetwork(\n chart: string,\n data: readonly Datum[],\n keys: { source: Accessor<unknown>; target: Accessor<unknown>; value?: Accessor<unknown> },\n nodes: readonly NetworkNode[] | undefined,\n): { nodes: NetworkNode[]; links: NetworkLink[] } {\n const rejected = new Rejections(chart, data.length);\n const given = new Map<string, NetworkNode>();\n let repeated: string | undefined;\n for (const node of nodes ?? []) {\n if (given.has(node.id)) repeated ??= node.id;\n else given.set(node.id, node);\n }\n if (repeated !== undefined) warnValue(chart, 'nodes', `The node \"${repeated}\" is repeated; the first is kept.`);\n const links: NetworkLink[] = [];\n data.forEach((datum, index) => {\n const source = text(read(keys.source, datum, index));\n const target = text(read(keys.target, datum, index));\n if (source === undefined || target === undefined) return rejected.add(accessorName(keys.source, 'source'), index, 'has no source and target');\n if (nodes !== undefined && (!given.has(source) || !given.has(target))) {\n return rejected.add(accessorName(keys.target, 'target'), index, 'links a node not in `nodes`');\n }\n let value = 1;\n if (keys.value !== undefined) {\n const raw = read(keys.value, datum, index);\n if (raw !== undefined && raw !== null) {\n const parsed = finite(raw);\n if (parsed === undefined || parsed <= 0) return rejected.add(accessorName(keys.value, 'value'), index, 'has no value above 0');\n value = parsed;\n }\n }\n links.push({ source, target, value, index, datum });\n });\n rejected.report();\n const drawn = nodes === undefined ? ordered(links.flatMap((l) => [l.source, l.target])).map((id) => ({ id })) : [...given.values()];\n return { nodes: drawn, links };\n}\n\n// --- Statistic parameters (REQ-433, SP021) and small groups (REQ-434, SP022) -----------------\n\nfunction invalid(chart: string, property: string, raw: unknown): undefined {\n if (process.env.NODE_ENV !== 'production') {\n diagnose('SP021', chart, { property, message: `${JSON.stringify(raw)} is not valid.` });\n }\n return undefined;\n}\n\nconst increasing = (values: readonly number[]) =>\n values.every((v, i) => Number.isFinite(v) && (i === 0 || v > (values[i - 1] as number)));\n\n/** A bin count `≥ 1`, or at least two increasing thresholds; `undefined` asks for the default. */\nexport function checkBins(chart: string, bins: number | readonly number[] | undefined): number | readonly number[] | undefined {\n if (bins === undefined) return undefined;\n if (typeof bins === 'number') return Number.isFinite(bins) && bins >= 1 ? Math.floor(bins) : invalid(chart, 'bins', bins);\n return bins.length >= 2 && increasing(bins) ? bins : invalid(chart, 'bins', bins);\n}\n\n/** A finite bandwidth above 0, in data units. */\nexport function checkBandwidth(chart: string, bandwidth: number | undefined): number | undefined {\n if (bandwidth === undefined) return undefined;\n return Number.isFinite(bandwidth) && bandwidth > 0 ? bandwidth : invalid(chart, 'bandwidth', bandwidth);\n}\n\n/** A finite whisker multiple at or above 0. */\nexport function checkWhisker(chart: string, whisker: number | undefined): number | undefined {\n if (whisker === undefined) return undefined;\n return Number.isFinite(whisker) && whisker >= 0 ? whisker : invalid(chart, 'whisker', whisker);\n}\n\n/** An overlap in 0-1. */\nexport function checkOverlap(chart: string, overlap: number | undefined): number | undefined {\n if (overlap === undefined) return undefined;\n return Number.isFinite(overlap) && overlap >= 0 && overlap <= 1 ? overlap : invalid(chart, 'overlap', overlap);\n}\n\n/** A whole number of iterations at or above 0. */\nexport function checkIterations(chart: string, iterations: number | undefined): number | undefined {\n if (iterations === undefined) return undefined;\n return Number.isInteger(iterations) && iterations >= 0 ? iterations : invalid(chart, 'iterations', iterations);\n}\n\n/** A level count `≥ 1`, or increasing thresholds. */\nexport function checkLevels(chart: string, levels: number | readonly number[] | undefined): number | readonly number[] | undefined {\n if (levels === undefined) return undefined;\n if (typeof levels === 'number') return Number.isInteger(levels) && levels >= 1 ? levels : invalid(chart, 'levels', levels);\n return levels.length >= 1 && increasing(levels) ? levels : invalid(chart, 'levels', levels);\n}\n\n/** Quantiles, each in 0-1, to mark on an ECDF. */\nexport function checkQuantiles(chart: string, markers: readonly number[] | undefined): readonly number[] | undefined {\n if (markers === undefined) return undefined;\n return markers.every((m) => Number.isFinite(m) && m >= 0 && m <= 1) ? markers : invalid(chart, 'markers', markers);\n}\n\n/** A finite point radius above 0, in px. */\nexport function checkRadius(chart: string, radius: number | undefined): number | undefined {\n if (radius === undefined) return undefined;\n return Number.isFinite(radius) && radius > 0 ? radius : invalid(chart, 'radius', radius);\n}\n\n/** A whole number at or above `min` — a depth, a cell count, a column count. */\nexport function checkWhole(chart: string, property: string, value: number | undefined, min: number): number | undefined {\n if (value === undefined) return undefined;\n return Number.isInteger(value) && value >= min ? value : invalid(chart, property, value);\n}\n\n/** A finite number above 0 — a period. */\nexport function checkPositive(chart: string, property: string, value: number | undefined): number | undefined {\n if (value === undefined) return undefined;\n return Number.isFinite(value) && value > 0 ? value : invalid(chart, property, value);\n}\n\n/** A group below its statistic's minimum is drawn as points (REQ-434). */\nexport function warnTooSmall(chart: string, group: string, count: number, need: number): void {\n if (process.env.NODE_ENV !== 'production') {\n diagnose('SP022', chart, { property: 'group', message: `The group \"${group}\" has ${count} observations; its statistic needs ${need}.` });\n }\n}\n\n// --- Volume (REQ-443, SP008) -----------------------------------------------------------------\n\n/** The second catalog's volume ceilings (API Spec §12). */\nexport const CEILINGS = /* @__PURE__ */ Object.freeze({\n /** Observations of a binned or density chart. */\n observations: 10_000,\n /** Drawn points: beeswarm, polar scatter, connected scatter, Delaunay. */\n points: 500,\n intervals: 200,\n /** Hierarchy nodes. */\n nodes: 500,\n networkNodes: 150,\n links: 600,\n /** Field grid cells, 60 × 60. */\n gridCells: 3_600,\n});\n\n/** Warns SP008 above the family's ceiling; the chart is still drawn in full (REQ-443). */\nexport function checkCeiling(chart: string, property: string, family: keyof typeof CEILINGS, count: number): void {\n if (process.env.NODE_ENV === 'production' || count <= CEILINGS[family]) return;\n diagnose('SP008', chart, { property, message: `${count} ${family}; the ceiling is ${CEILINGS[family]}.` });\n}\n\nfunction withReport<T>(rejected: Rejections, build: () => T): T {\n const result = build();\n rejected.report();\n return result;\n}\n","/**\n * Statistics of the distribution charts (DD-029, REQ-432). Every function takes a sorted copy of\n * the values, returns plain data and rounds nothing: geometry is rounded where it is emitted\n * (REQ-002). Inside every sum and loop only correctly rounded operations are used (`+ − × ÷`,\n * `Math.sqrt`, comparisons), so Node and every browser agree to the last bit (REQ-435); the one\n * power is `rootOf`, rounded before use.\n */\n\n/** An ascending copy of `values`; the input is left untouched. */\nexport function sortedValues(values: readonly number[]): number[] {\n return [...values].sort((a, b) => a - b);\n}\n\n/**\n * `n^(1/k)`, through the one `Math.pow` call DD-029 allows, rounded to 6 significant digits so\n * a last-bit difference between engines cannot reach the drawing (A-03).\n */\nexport function rootOf(n: number, k: number): number {\n // eslint-disable-next-line silverpoint/no-transcendental -- DD-029: the single reviewed power, rounded to 6 digits.\n return Number(Math.pow(n, 1 / k).toPrecision(6));\n}\n\n/** Quantile `p` of a sorted sample by linear interpolation, Hyndman–Fan type 7 (R's and NumPy's default). */\nexport function quantile(sorted: readonly number[], p: number): number {\n const n = sorted.length;\n if (n === 0) return Number.NaN;\n const h = (n - 1) * p;\n const lo = Math.floor(h);\n const a = sorted[lo] as number;\n if (lo >= n - 1) return sorted[n - 1] as number;\n const b = sorted[lo + 1] as number;\n return a + (b - a) * (h - lo);\n}\n\n/** The box plot's summary: quartiles, median, and whisker ends as `min` and `max` (Data Model §2.15). */\nexport interface FiveNumber {\n /** The lowest observation at or above the lower fence, never above `q1`. */\n readonly min: number;\n readonly q1: number;\n readonly median: number;\n readonly q3: number;\n /** The highest observation at or below the upper fence, never below `q3`. */\n readonly max: number;\n /** Observations past the fences, ascending. */\n readonly outliers: readonly number[];\n}\n\n/** Tukey's summary of a sorted, non-empty sample, whiskers at `whisker` × IQR (1.5 by default). */\nexport function fiveNumber(sorted: readonly number[], whisker = 1.5): FiveNumber {\n const q1 = quantile(sorted, 0.25);\n const median = quantile(sorted, 0.5);\n const q3 = quantile(sorted, 0.75);\n const reach = (q3 - q1) * whisker;\n const low = q1 - reach;\n const high = q3 + reach;\n const inside = sorted.filter((v) => v >= low && v <= high);\n // An interpolated quartile can lie past the last observation inside its fence; the whisker\n // then has no length, and stops at the box (I-24).\n return {\n min: Math.min(inside[0] ?? q1, q1),\n q1,\n median,\n q3,\n max: Math.max(inside.at(-1) ?? q3, q3),\n outliers: sorted.filter((v) => v < low || v > high),\n };\n}\n\n/** A step of the 1-2-5 ladder as an exact ratio: the step is `num / den`, both whole. */\ninterface Step {\n readonly num: number;\n readonly den: number;\n}\n\nconst value = (step: Step) => step.num / step.den;\n/** The `k`-th multiple of a step, correctly rounded from the exact decimal. */\nconst multiple = (step: Step, k: number) => (k * step.num) / step.den;\n\n/**\n * The 1-2-5 × 10^k step nearest `width` by ratio (`ceil`: the smallest one at or above it). Powers\n * of ten are built by whole multiplications, so every step is an exact decimal (no `Math.log10`).\n */\nfunction ladder(width: number, ceil = false): Step {\n let num = 1;\n let den = 1;\n while (num / den > width) {\n if (num > 1) num /= 10;\n else den *= 10;\n }\n while ((num * 10) / den <= width) {\n if (den > 1) den /= 10;\n else num *= 10;\n }\n const candidates = [1, 2, 5, 10].map((m) => ({ num: num * m, den }));\n if (ceil) return candidates.find((c) => value(c) >= width) as Step;\n let best = candidates[0] as Step;\n let worst = Number.POSITIVE_INFINITY;\n for (const c of candidates) {\n const ratio = value(c) > width ? value(c) / width : width / value(c);\n if (ratio < worst) {\n worst = ratio;\n best = c;\n }\n }\n return best;\n}\n\n/** The nice step nearest `width`: 1, 2 or 5 × 10^k. */\nexport function niceStep(width: number): number {\n return value(ladder(width));\n}\n\n/** Sturges' bin count, `⌈log₂ n⌉ + 1`, by doubling. */\nexport function sturges(n: number): number {\n let bits = 0;\n for (let reach = 1; reach < n; reach *= 2) bits += 1;\n return bits + 1;\n}\n\n/** A bin: `x0` inclusive, `x1` exclusive except on the last bin (Data Model §2.15). */\nexport interface Bin {\n readonly x0: number;\n readonly x1: number;\n readonly count: number;\n}\n\n/** Bins drawn at most: past it the step widens, so a long tail cannot ask for millions of bins. */\nconst MAX_BINS = 1000;\n\n/** Edges on multiples of `step` that cover `[min, max]`. */\nfunction steppedEdges(min: number, max: number, step: Step): number[] {\n let k = Math.floor((min * step.den) / step.num);\n while (multiple(step, k) > min) k -= 1;\n while (multiple(step, k + 1) <= min) k += 1;\n const edges = [multiple(step, k)];\n while ((edges.at(-1) as number) < max) edges.push(multiple(step, k + edges.length));\n return edges;\n}\n\n/** The edges of `bins` for a sorted sample with a non-zero span. */\nfunction edgesOf(sorted: readonly number[], spec: number | readonly number[] | undefined): number[] {\n const min = sorted[0] as number;\n const max = sorted.at(-1) as number;\n const span = max - min;\n if (Array.isArray(spec)) {\n const thresholds = spec as readonly number[];\n const edges = [...thresholds];\n if (min < (edges[0] as number)) edges.unshift(min);\n if (max > (edges.at(-1) as number)) edges.push(max);\n return edges;\n }\n if (typeof spec === 'number') {\n const step = ladder(span / spec, true);\n const lo = steppedEdges(min, min, step)[0] as number;\n let hi = lo;\n for (let k = 1; hi < max; k += 1) hi = lo + multiple(step, k);\n return Array.from({ length: spec + 1 }, (_, i) => (i === spec ? hi : lo + (i * (hi - lo)) / spec));\n }\n const iqr = quantile(sorted, 0.75) - quantile(sorted, 0.25);\n const width = iqr > 0 ? (2 * iqr) / rootOf(sorted.length, 3) : span / sturges(sorted.length);\n return steppedEdges(min, max, ladder(Math.max(width, span / MAX_BINS)));\n}\n\n/**\n * Bins of a sorted sample (REQ-400, REQ-432). Omitted, Freedman–Diaconis' width `2·IQR·n^(−1/3)`\n * (Sturges' count when the IQR is 0), snapped to the nearest nice step so the edges fall on axis\n * ticks. A number asks for that many equal bins over the extent niced to a step; an array gives\n * the edges, closed by the data's extent when the sample reaches past them.\n */\nexport function bins(sorted: readonly number[], spec?: number | readonly number[]): Bin[] {\n if (sorted.length === 0) return [];\n const min = sorted[0] as number;\n const max = sorted.at(-1) as number;\n if (max === min && !Array.isArray(spec)) return [{ x0: min, x1: max, count: sorted.length }];\n const edges = edgesOf(sorted, spec);\n const counts = new Array<number>(edges.length - 1).fill(0);\n const last = counts.length - 1;\n let b = 0;\n for (const v of sorted) {\n while (b < last && v >= (edges[b + 1] as number)) b += 1;\n counts[b] = (counts[b] as number) + 1;\n }\n return counts.map((count, i) => ({ x0: edges[i] as number, x1: edges[i + 1] as number, count }));\n}\n\n/** A step of the empirical cumulative distribution: the share of observations at or below `value`. */\nexport interface EcdfStep {\n readonly value: number;\n readonly p: number;\n}\n\n/** The ECDF of a sorted sample: one step per distinct value, ending at exactly 1 (REQ-401). */\nexport function ecdf(sorted: readonly number[]): EcdfStep[] {\n const n = sorted.length;\n const steps: EcdfStep[] = [];\n sorted.forEach((v, i) => {\n if (i + 1 < n && sorted[i + 1] === v) return;\n steps.push({ value: v, p: (i + 1) / n });\n });\n return steps;\n}\n\n/** A rank and the line's slot at one x: ties share a rank, and are slotted by series order. */\nexport interface Rank {\n readonly rank: number;\n readonly slot: number;\n}\n\n/**\n * Competition ranks (\"1224\") of long-format rows, per x (REQ-409, DD-029). `descending` gives rank\n * 1 to the highest value. Equal values share a rank; for the drawing only, ties are slotted by the\n * series' first appearance (`seriesOrder`), so the result does not depend on row order (I-23).\n */\nexport function rank(\n rows: readonly { readonly x: unknown; readonly series: string; readonly value: number }[],\n seriesOrder: readonly string[],\n order: 'descending' | 'ascending',\n): Rank[] {\n const position = new Map(seriesOrder.map((s, i) => [s, i]));\n const sign = order === 'descending' ? -1 : 1;\n const groups = new Map<string, number[]>();\n rows.forEach((row, i) => {\n const key = `${typeof row.x}:${String(row.x)}`;\n const group = groups.get(key);\n if (group) group.push(i);\n else groups.set(key, [i]);\n });\n const result = new Array<Rank>(rows.length);\n for (const members of groups.values()) {\n const sorted = [...members].sort((a, b) => {\n const ra = rows[a] as (typeof rows)[number];\n const rb = rows[b] as (typeof rows)[number];\n return sign * (ra.value - rb.value) || (position.get(ra.series) ?? 0) - (position.get(rb.series) ?? 0);\n });\n sorted.forEach((i, slot) => {\n const v = (rows[i] as (typeof rows)[number]).value;\n const better = sorted.findIndex((j) => (rows[j] as (typeof rows)[number]).value === v);\n result[i] = { rank: better + 1, slot: slot + 1 };\n });\n }\n return result;\n}\n\n/**\n * Whole cells for each value, summing exactly to `cells` (REQ-414, I-26): Hamilton's largest\n * remainder — each takes the whole part of its share, and the cells left go to the largest\n * remainders, ties to the earlier value. Then, while there are enough cells, a positive value left\n * with none takes one from the value holding the most (the later one on a tie).\n */\nexport function allocateCells(values: readonly number[], cells: number): number[] {\n const total = values.reduce((sum, v) => sum + (v > 0 ? v : 0), 0);\n if (total <= 0) return values.map(() => 0);\n const exact = values.map((v) => (v > 0 ? (v * cells) / total : 0));\n const counts = exact.map((e) => Math.floor(e));\n let left = cells - counts.reduce((sum, c) => sum + c, 0);\n const order = exact.map((e, i) => [e - (counts[i] as number), i] as const).sort((a, b) => b[0] - a[0] || a[1] - b[1]);\n for (const [, i] of order) {\n if (left <= 0) break;\n counts[i] = (counts[i] as number) + 1;\n left -= 1;\n }\n const positive = values.filter((v) => v > 0).length;\n if (cells >= positive) {\n values.forEach((v, i) => {\n if (v <= 0 || (counts[i] as number) > 0) return;\n let donor = 0;\n counts.forEach((c, j) => {\n if (c >= (counts[donor] as number)) donor = j;\n });\n counts[donor] = (counts[donor] as number) - 1;\n counts[i] = 1;\n });\n }\n return counts;\n}\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `HistogramChart` (REQ-400): 240 right-skewed reading times in minutes, rounded to half minutes so values tie. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const HISTOGRAM_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { reader: 'R001', device: 'desktop', minutes: 4 },\n { reader: 'R002', device: 'phone', minutes: 17 },\n { reader: 'R003', device: 'phone', minutes: 3 },\n { reader: 'R004', device: 'phone', minutes: 6.5 },\n { reader: 'R005', device: 'phone', minutes: 3.5 },\n { reader: 'R006', device: 'phone', minutes: 3 },\n { reader: 'R007', device: 'phone', minutes: 4.5 },\n { reader: 'R008', device: 'desktop', minutes: 23.5 },\n { reader: 'R009', device: 'phone', minutes: 1 },\n { reader: 'R010', device: 'desktop', minutes: 1 },\n { reader: 'R011', device: 'phone', minutes: 6.5 },\n { reader: 'R012', device: 'desktop', minutes: 4.5 },\n { reader: 'R013', device: 'desktop', minutes: 1.5 },\n { reader: 'R014', device: 'phone', minutes: 7 },\n { reader: 'R015', device: 'desktop', minutes: 8.5 },\n { reader: 'R016', device: 'phone', minutes: 3 },\n { reader: 'R017', device: 'phone', minutes: 3 },\n { reader: 'R018', device: 'desktop', minutes: 8 },\n { reader: 'R019', device: 'desktop', minutes: 3 },\n { reader: 'R020', device: 'phone', minutes: 4 },\n { reader: 'R021', device: 'desktop', minutes: 8 },\n { reader: 'R022', device: 'phone', minutes: 6.5 },\n { reader: 'R023', device: 'phone', minutes: 10.5 },\n { reader: 'R024', device: 'desktop', minutes: 16.5 },\n { reader: 'R025', device: 'phone', minutes: 3.5 },\n { reader: 'R026', device: 'phone', minutes: 5 },\n { reader: 'R027', device: 'phone', minutes: 8 },\n { reader: 'R028', device: 'phone', minutes: 5 },\n { reader: 'R029', device: 'desktop', minutes: 2 },\n { reader: 'R030', device: 'desktop', minutes: 1.5 },\n { reader: 'R031', device: 'phone', minutes: 10 },\n { reader: 'R032', device: 'desktop', minutes: 4.5 },\n { reader: 'R033', device: 'desktop', minutes: 18.5 },\n { reader: 'R034', device: 'phone', minutes: 3.5 },\n { reader: 'R035', device: 'phone', minutes: 3 },\n { reader: 'R036', device: 'desktop', minutes: 9.5 },\n { reader: 'R037', device: 'phone', minutes: 11.5 },\n { reader: 'R038', device: 'desktop', minutes: 11 },\n { reader: 'R039', device: 'desktop', minutes: 4.5 },\n { reader: 'R040', device: 'phone', minutes: 3 },\n { reader: 'R041', device: 'phone', minutes: 4.5 },\n { reader: 'R042', device: 'phone', minutes: 11 },\n { reader: 'R043', device: 'phone', minutes: 4 },\n { reader: 'R044', device: 'phone', minutes: 5 },\n { reader: 'R045', device: 'desktop', minutes: 5.5 },\n { reader: 'R046', device: 'desktop', minutes: 6 },\n { reader: 'R047', device: 'phone', minutes: 2.5 },\n { reader: 'R048', device: 'phone', minutes: 4 },\n { reader: 'R049', device: 'phone', minutes: 1 },\n { reader: 'R050', device: 'phone', minutes: 1.5 },\n { reader: 'R051', device: 'phone', minutes: 2.5 },\n { reader: 'R052', device: 'phone', minutes: 4 },\n { reader: 'R053', device: 'desktop', minutes: 21.5 },\n { reader: 'R054', device: 'phone', minutes: 5 },\n { reader: 'R055', device: 'desktop', minutes: 16.5 },\n { reader: 'R056', device: 'phone', minutes: 6 },\n { reader: 'R057', device: 'desktop', minutes: 27.5 },\n { reader: 'R058', device: 'phone', minutes: 3.5 },\n { reader: 'R059', device: 'phone', minutes: 1.5 },\n { reader: 'R060', device: 'desktop', minutes: 20 },\n { reader: 'R061', device: 'desktop', minutes: 6.5 },\n { reader: 'R062', device: 'phone', minutes: 11.5 },\n { reader: 'R063', device: 'phone', minutes: 11 },\n { reader: 'R064', device: 'phone', minutes: 4 },\n { reader: 'R065', device: 'phone', minutes: 2 },\n { reader: 'R066', device: 'phone', minutes: 1.5 },\n { reader: 'R067', device: 'phone', minutes: 6 },\n { reader: 'R068', device: 'desktop', minutes: 14 },\n { reader: 'R069', device: 'desktop', minutes: 2 },\n { reader: 'R070', device: 'phone', minutes: 4.5 },\n { reader: 'R071', device: 'phone', minutes: 10.5 },\n { reader: 'R072', device: 'desktop', minutes: 3.5 },\n { reader: 'R073', device: 'desktop', minutes: 7.5 },\n { reader: 'R074', device: 'phone', minutes: 4 },\n { reader: 'R075', device: 'phone', minutes: 3.5 },\n { reader: 'R076', device: 'desktop', minutes: 7.5 },\n { reader: 'R077', device: 'phone', minutes: 3 },\n { reader: 'R078', device: 'phone', minutes: 2 },\n { reader: 'R079', device: 'desktop', minutes: 6 },\n { reader: 'R080', device: 'phone', minutes: 4 },\n { reader: 'R081', device: 'phone', minutes: 4 },\n { reader: 'R082', device: 'phone', minutes: 4 },\n { reader: 'R083', device: 'phone', minutes: 9.5 },\n { reader: 'R084', device: 'desktop', minutes: 13.5 },\n { reader: 'R085', device: 'desktop', minutes: 2 },\n { reader: 'R086', device: 'phone', minutes: 2.5 },\n { reader: 'R087', device: 'desktop', minutes: 6 },\n { reader: 'R088', device: 'desktop', minutes: 12 },\n { reader: 'R089', device: 'phone', minutes: 5 },\n { reader: 'R090', device: 'phone', minutes: 5.5 },\n { reader: 'R091', device: 'phone', minutes: 5 },\n { reader: 'R092', device: 'desktop', minutes: 14 },\n { reader: 'R093', device: 'phone', minutes: 5 },\n { reader: 'R094', device: 'desktop', minutes: 3 },\n { reader: 'R095', device: 'phone', minutes: 12.5 },\n { reader: 'R096', device: 'desktop', minutes: 6.5 },\n { reader: 'R097', device: 'phone', minutes: 14 },\n { reader: 'R098', device: 'phone', minutes: 8.5 },\n { reader: 'R099', device: 'desktop', minutes: 3.5 },\n { reader: 'R100', device: 'desktop', minutes: 9 },\n { reader: 'R101', device: 'phone', minutes: 10 },\n { reader: 'R102', device: 'phone', minutes: 8.5 },\n { reader: 'R103', device: 'desktop', minutes: 8.5 },\n { reader: 'R104', device: 'phone', minutes: 6.5 },\n { reader: 'R105', device: 'desktop', minutes: 12 },\n { reader: 'R106', device: 'phone', minutes: 4.5 },\n { reader: 'R107', device: 'phone', minutes: 10.5 },\n { reader: 'R108', device: 'phone', minutes: 8.5 },\n { reader: 'R109', device: 'phone', minutes: 6 },\n { reader: 'R110', device: 'phone', minutes: 9 },\n { reader: 'R111', device: 'phone', minutes: 4 },\n { reader: 'R112', device: 'phone', minutes: 7 },\n { reader: 'R113', device: 'desktop', minutes: 4 },\n { reader: 'R114', device: 'desktop', minutes: 2.5 },\n { reader: 'R115', device: 'phone', minutes: 11.5 },\n { reader: 'R116', device: 'desktop', minutes: 2 },\n { reader: 'R117', device: 'phone', minutes: 21.5 },\n { reader: 'R118', device: 'desktop', minutes: 14.5 },\n { reader: 'R119', device: 'phone', minutes: 4.5 },\n { reader: 'R120', device: 'desktop', minutes: 8 },\n { reader: 'R121', device: 'desktop', minutes: 6.5 },\n { reader: 'R122', device: 'desktop', minutes: 5.5 },\n { reader: 'R123', device: 'phone', minutes: 4 },\n { reader: 'R124', device: 'desktop', minutes: 9.5 },\n { reader: 'R125', device: 'phone', minutes: 15.5 },\n { reader: 'R126', device: 'phone', minutes: 11 },\n { reader: 'R127', device: 'desktop', minutes: 27 },\n { reader: 'R128', device: 'phone', minutes: 1 },\n { reader: 'R129', device: 'phone', minutes: 12 },\n { reader: 'R130', device: 'phone', minutes: 8.5 },\n { reader: 'R131', device: 'desktop', minutes: 4 },\n { reader: 'R132', device: 'desktop', minutes: 3.5 },\n { reader: 'R133', device: 'phone', minutes: 3 },\n { reader: 'R134', device: 'desktop', minutes: 15.5 },\n { reader: 'R135', device: 'phone', minutes: 9 },\n { reader: 'R136', device: 'phone', minutes: 17 },\n { reader: 'R137', device: 'phone', minutes: 5.5 },\n { reader: 'R138', device: 'desktop', minutes: 6 },\n { reader: 'R139', device: 'phone', minutes: 2 },\n { reader: 'R140', device: 'phone', minutes: 10.5 },\n { reader: 'R141', device: 'phone', minutes: 2 },\n { reader: 'R142', device: 'desktop', minutes: 12.5 },\n { reader: 'R143', device: 'desktop', minutes: 4 },\n { reader: 'R144', device: 'phone', minutes: 1.5 },\n { reader: 'R145', device: 'phone', minutes: 9.5 },\n { reader: 'R146', device: 'phone', minutes: 5.5 },\n { reader: 'R147', device: 'phone', minutes: 3.5 },\n { reader: 'R148', device: 'phone', minutes: 11.5 },\n { reader: 'R149', device: 'desktop', minutes: 6 },\n { reader: 'R150', device: 'desktop', minutes: 4 },\n { reader: 'R151', device: 'phone', minutes: 8 },\n { reader: 'R152', device: 'phone', minutes: 9 },\n { reader: 'R153', device: 'desktop', minutes: 13 },\n { reader: 'R154', device: 'phone', minutes: 2 },\n { reader: 'R155', device: 'desktop', minutes: 12 },\n { reader: 'R156', device: 'phone', minutes: 1 },\n { reader: 'R157', device: 'phone', minutes: 4.5 },\n { reader: 'R158', device: 'phone', minutes: 2 },\n { reader: 'R159', device: 'desktop', minutes: 2 },\n { reader: 'R160', device: 'phone', minutes: 5 },\n { reader: 'R161', device: 'phone', minutes: 4.5 },\n { reader: 'R162', device: 'phone', minutes: 1.5 },\n { reader: 'R163', device: 'desktop', minutes: 9.5 },\n { reader: 'R164', device: 'phone', minutes: 6 },\n { reader: 'R165', device: 'phone', minutes: 10 },\n { reader: 'R166', device: 'desktop', minutes: 7.5 },\n { reader: 'R167', device: 'phone', minutes: 14.5 },\n { reader: 'R168', device: 'phone', minutes: 5 },\n { reader: 'R169', device: 'phone', minutes: 9.5 },\n { reader: 'R170', device: 'phone', minutes: 3 },\n { reader: 'R171', device: 'desktop', minutes: 10.5 },\n { reader: 'R172', device: 'phone', minutes: 8 },\n { reader: 'R173', device: 'phone', minutes: 7.5 },\n { reader: 'R174', device: 'phone', minutes: 4.5 },\n { reader: 'R175', device: 'phone', minutes: 6 },\n { reader: 'R176', device: 'desktop', minutes: 1.5 },\n { reader: 'R177', device: 'desktop', minutes: 5 },\n { reader: 'R178', device: 'phone', minutes: 2 },\n { reader: 'R179', device: 'desktop', minutes: 19.5 },\n { reader: 'R180', device: 'phone', minutes: 3 },\n { reader: 'R181', device: 'phone', minutes: 2.5 },\n { reader: 'R182', device: 'phone', minutes: 5.5 },\n { reader: 'R183', device: 'phone', minutes: 4.5 },\n { reader: 'R184', device: 'phone', minutes: 3.5 },\n { reader: 'R185', device: 'desktop', minutes: 2 },\n { reader: 'R186', device: 'phone', minutes: 5.5 },\n { reader: 'R187', device: 'phone', minutes: 5.5 },\n { reader: 'R188', device: 'phone', minutes: 3 },\n { reader: 'R189', device: 'desktop', minutes: 2.5 },\n { reader: 'R190', device: 'phone', minutes: 10 },\n { reader: 'R191', device: 'phone', minutes: 9.5 },\n { reader: 'R192', device: 'desktop', minutes: 3 },\n { reader: 'R193', device: 'phone', minutes: 3 },\n { reader: 'R194', device: 'phone', minutes: 2.5 },\n { reader: 'R195', device: 'phone', minutes: 3 },\n { reader: 'R196', device: 'phone', minutes: 11 },\n { reader: 'R197', device: 'phone', minutes: 13 },\n { reader: 'R198', device: 'desktop', minutes: 10.5 },\n { reader: 'R199', device: 'desktop', minutes: 5 },\n { reader: 'R200', device: 'phone', minutes: 6 },\n { reader: 'R201', device: 'desktop', minutes: 13.5 },\n { reader: 'R202', device: 'phone', minutes: 6 },\n { reader: 'R203', device: 'phone', minutes: 8.5 },\n { reader: 'R204', device: 'phone', minutes: 7.5 },\n { reader: 'R205', device: 'desktop', minutes: 5 },\n { reader: 'R206', device: 'desktop', minutes: 3.5 },\n { reader: 'R207', device: 'phone', minutes: 9 },\n { reader: 'R208', device: 'desktop', minutes: 5 },\n { reader: 'R209', device: 'phone', minutes: 4.5 },\n { reader: 'R210', device: 'phone', minutes: 7.5 },\n { reader: 'R211', device: 'phone', minutes: 11.5 },\n { reader: 'R212', device: 'desktop', minutes: 18 },\n { reader: 'R213', device: 'desktop', minutes: 12 },\n { reader: 'R214', device: 'phone', minutes: 2.5 },\n { reader: 'R215', device: 'desktop', minutes: 15 },\n { reader: 'R216', device: 'desktop', minutes: 9 },\n { reader: 'R217', device: 'phone', minutes: 10 },\n { reader: 'R218', device: 'desktop', minutes: 3.5 },\n { reader: 'R219', device: 'desktop', minutes: 5 },\n { reader: 'R220', device: 'desktop', minutes: 8 },\n { reader: 'R221', device: 'desktop', minutes: 6.5 },\n { reader: 'R222', device: 'phone', minutes: 15 },\n { reader: 'R223', device: 'phone', minutes: 6.5 },\n { reader: 'R224', device: 'phone', minutes: 3 },\n { reader: 'R225', device: 'phone', minutes: 4 },\n { reader: 'R226', device: 'phone', minutes: 2 },\n { reader: 'R227', device: 'desktop', minutes: 4 },\n { reader: 'R228', device: 'phone', minutes: 8 },\n { reader: 'R229', device: 'phone', minutes: 7 },\n { reader: 'R230', device: 'phone', minutes: 6.5 },\n { reader: 'R231', device: 'phone', minutes: 1.5 },\n { reader: 'R232', device: 'phone', minutes: 9 },\n { reader: 'R233', device: 'phone', minutes: 6 },\n { reader: 'R234', device: 'desktop', minutes: 6.5 },\n { reader: 'R235', device: 'phone', minutes: 11.5 },\n { reader: 'R236', device: 'phone', minutes: 5 },\n { reader: 'R237', device: 'phone', minutes: 3.5 },\n { reader: 'R238', device: 'desktop', minutes: 4 },\n { reader: 'R239', device: 'phone', minutes: 4.5 },\n { reader: 'R240', device: 'desktop', minutes: 4.5 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const HISTOGRAM_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n valueKey: 'minutes',\n} as const);\n","import { linearScale } from '../../scales/scales';\nimport type { ChartModel, ChartRecipe, HistogramChartProps, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, TICK_CHAR, cartesianPlot, horizontalValueAxis, valueAxis } from '../shared/cartesian';\nimport { rectPath } from '../shared/cells';\nimport { checkBins, checkCeiling, readObservations } from '../shared/contracts';\nimport { accessorName, circlePath, formatNumber } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { bins as binsOf, quantile, sortedValues, type Bin } from '../shared/stats';\nimport { HISTOGRAM_CHART_DEMO, HISTOGRAM_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'HistogramChart';\nconst HEIGHTEN_RADIUS = 3.5;\n/** Room at the left for the bin edges when bins run in rows. */\nconst ROW_LABELS = 48;\n/** Minimum room per printed bin edge. */\nconst EDGE_SPACING = 36;\n\n/** The rule the bins came from, for the description (REQ-431). */\nfunction method(spec: number | readonly number[] | undefined, sorted: readonly number[]): string {\n if (Array.isArray(spec)) return 'at the given thresholds';\n if (typeof spec === 'number') return `as ${spec} equal bins`;\n const iqr = quantile(sorted, 0.75) - quantile(sorted, 0.25);\n return iqr > 0 ? 'by the Freedman–Diaconis rule' : \"by Sturges' rule\";\n}\n\nfunction buildHistogramChart(props: HistogramChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? HISTOGRAM_CHART_DEMO;\n const valueKey = usesDemo ? HISTOGRAM_CHART_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n const rows = props.orientation === 'rows';\n const cumulative = props.cumulative === true;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n\n const { observations } = readObservations(CHART, data, { value: valueKey });\n checkCeiling(CHART, valueName, 'observations', observations.length);\n const spec = checkBins(CHART, props.bins);\n const sorted = sortedValues(observations.map((o) => o.value));\n let running = 0;\n const bins: Bin[] = binsOf(sorted, spec).map((bin) => (cumulative ? { ...bin, count: (running += bin.count) } : bin));\n const countName = cumulative ? 'cumulative count' : 'count';\n const range = (bin: Bin) => `${formatNumber(bin.x0, locale, numberFormat)}–${formatNumber(bin.x1, locale, numberFormat)}`;\n\n const base = modelBase(CHART, props, context, 'Histogram', {\n columns: [valueName, countName],\n rows: bins.map((bin) => [range(bin), formatNumber(bin.count, locale, undefined)]),\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 area = card.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];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (bins.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const largest = Math.max(...bins.map((b) => b.count));\n const axisOptions = { chart: CHART, property: countName, padding: context.domainPadding, locale, numberFormat: undefined };\n const axis = rows ? horizontalValueAxis(plot, area, [0, largest], axisOptions) : valueAxis(plot, [0, largest], axisOptions);\n const count = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n // The bins sit on their own edges, which are already nice: the scale is not niced again.\n const first = (bins[0] as Bin).x0;\n const last = (bins.at(-1) as Bin).x1;\n const along = rows ? ([plot.y, plot.y + plot.height] as const) : ([plot.x, plot.x + plot.width] as const);\n const at = linearScale([first, last], along, { chart: CHART, property: valueName, padding: context.domainPadding });\n\n const tops: string[] = [];\n bins.forEach((bin, index) => {\n const a = at(bin.x0);\n const b = at(bin.x1);\n const end = count(bin.count);\n const zero = count(0);\n const box: Rect = rows ? { x: zero, y: a, width: end - zero, height: b - a } : { x: a, y: end, width: b - a, height: zero - end };\n strokes.push({ d: rectPath(box), role: 'encoding', part: 'ink', tone: cumulative ? 1 : 2 });\n // The running total's top edge: across each bin, then up (or out) to the next one.\n if (rows) tops.push(index === 0 ? `M${end},${a}V${b}` : `H${end}V${b}`);\n else tops.push(index === 0 ? `M${a},${end}H${b}` : `V${end}H${b}`);\n const centre = (a + b) / 2;\n hitAreas.push({\n seriesKey: countName,\n index,\n datum: Object.freeze({ x0: bin.x0, x1: bin.x1, count: bin.count }),\n value: bin.count,\n x: rows ? end : centre,\n y: rows ? centre : end,\n box,\n });\n const text = formatNumber(bin.count, locale, undefined);\n if (!rows && b - a >= text.length * TICK_CHAR + 2 && bin.count > 0) {\n // Clear of the heightened mark, which may sit on this bin's top.\n labels.push({ x: centre, y: end - HEIGHTEN_RADIUS - 3, text, kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n });\n // The running total's top edge, one exact line over the toned bins (DD-035).\n if (cumulative) strokes.push({ d: tops.join(''), role: 'encoding', part: 'ink' });\n\n // Ticks at the bin edges, thinned so they never crowd.\n const edges = [first, ...bins.map((b) => b.x1)];\n const room = rows ? plot.height : plot.width;\n const step = Math.max(1, Math.ceil(edges.length / Math.max(2, Math.floor(room / EDGE_SPACING))));\n edges.forEach((edge, i) => {\n if (i % step !== 0 && i !== edges.length - 1) return;\n const text = formatNumber(edge, locale, numberFormat);\n labels.push(rows\n ? { x: area.x + PLOT_INSET, y: at(edge) + 3, text, kind: 'tick', part: 'axis', anchor: 'start' }\n : { x: at(edge), y: area.y + area.height - 5, text, kind: 'tick', part: 'axis', anchor: 'middle' });\n });\n\n // One heightened element (REQ-442): the modal bin's top, or the last bin's when cumulative.\n const raised = cumulative ? (hitAreas.at(-1) as HitArea) : hitAreas.reduce((best, hit) => (hit.value > best.value ? hit : best));\n const mark = circlePath(raised.x, raised.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 const modal = bins.reduce((best, bin) => (bin.count > best.count ? bin : best));\n const description =\n props.description ??\n `${base.name}. Histogram of ${observations.length} ${valueName} observations in ${bins.length} bins ${method(spec, sorted)}, from ${formatNumber(first, locale, numberFormat)} to ${formatNumber(last, locale, numberFormat)}; ${\n cumulative ? `the counts run up to ${observations.length}` : `the fullest bin, ${range(modal)}, holds ${modal.count}`\n }.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `HistogramChart` recipe (REQ-400): raw observations binned in the core, abutting bins. */\nexport const histogramChart: ChartRecipe<HistogramChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildHistogramChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\n/** Demo dataset of `EcdfChart` (REQ-401): the histogram's reading times, by device. */\nexport { HISTOGRAM_CHART_DEMO as ECDF_CHART_DEMO } from '../histogram-chart/demo';\n\nexport const ECDF_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n valueKey: 'minutes',\n groupKey: 'device',\n} as const);\n","import { linearScale } from '../../scales/scales';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, EcdfChartProps, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, legend } from '../shared/cartesian';\nimport { warnValue } from '../shared/cells';\nimport { checkCeiling, checkQuantiles, readObservations } from '../shared/contracts';\nimport { accessorName, circlePath, formatNumber, numberFormatter } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { ecdf, quantile, sortedValues, type EcdfStep } from '../shared/stats';\nimport { ECDF_CHART_DEMO, ECDF_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'EcdfChart';\nconst HEIGHTEN_RADIUS = 3.5;\n/** Groups drawn: the catalog's two-series grammar, `ink` and `ink-secondary` dotted (DD-035). */\nconst MAX_GROUPS = 2;\n/** The share grid: the quartiles and the whole (DD-035). */\nconst SHARES = [0.25, 0.5, 0.75, 1] as const;\nconst PERCENT: Intl.NumberFormatOptions = { style: 'percent', maximumFractionDigits: 1 };\n\ninterface Group {\n readonly name: string;\n readonly sorted: readonly number[];\n readonly steps: readonly EcdfStep[];\n}\n\nfunction buildEcdfChart(props: EcdfChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? ECDF_CHART_DEMO;\n const valueKey = usesDemo ? ECDF_CHART_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n const groupKey = usesDemo ? ECDF_CHART_DEMO_KEYS.groupKey : props.groupKey;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n\n const read = readObservations(CHART, data, { value: valueKey, ...(groupKey === undefined ? {} : { group: groupKey }) });\n checkCeiling(CHART, valueName, 'observations', read.observations.length);\n if (read.groups.length > MAX_GROUPS) {\n warnValue(CHART, groupKey === undefined ? 'group' : accessorName(groupKey, 'group'), `${read.groups.length} groups; the ECDF draws the first ${MAX_GROUPS}.`);\n }\n const markers = checkQuantiles(CHART, props.markers) ?? [];\n const groups: Group[] = read.groups.slice(0, MAX_GROUPS).map((name, i) => {\n const sorted = sortedValues(read.observations.filter((o) => o.group === name).map((o) => o.value));\n return { name: groupKey === undefined && i === 0 ? 'cumulative share' : name, sorted, steps: ecdf(sorted) };\n });\n\n // One row per distinct value across the groups; each cell is that group's share at or below it.\n const values = sortedValues([...new Set(groups.flatMap((g) => g.steps.map((s) => s.value)))]);\n const row = new Map(values.map((v, i) => [v, i]));\n // Each group's share at every row, in one pass: values and steps are both sorted (REQ-445).\n const shares = groups.map((group) => {\n let k = 0;\n let p = 0;\n return values.map((v) => {\n while (k < group.steps.length && (group.steps[k] as EcdfStep).value <= v) p = (group.steps[k++] as EcdfStep).p;\n return p;\n });\n });\n // A row per distinct value: each column's formatter is resolved once (REQ-445).\n const value = numberFormatter(locale, numberFormat);\n const percent = numberFormatter(locale, PERCENT);\n const base = modelBase(CHART, props, context, 'Cumulative distribution', {\n columns: [valueName, ...groups.map((g) => g.name)],\n rows: values.map((v, i) => [value(v), ...shares.map((column) => percent(column[i] as number))]),\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 = groups.length > 1\n ? legend(card.area, groups.map((g, i) => (i === 0 ? { name: g.name, part: 'ink' as const } : { name: g.name, part: 'ink-secondary' as const, dash: 'dotted' as const })))\n : { area: card.area, strokes: [], labels: [] };\n const area = key.area;\n const plot = cartesianPlot(area);\n const strokes: Stroke[] = [...card.strokes, ...key.strokes];\n const labels: TextLabel[] = [...card.labels, ...key.labels];\n const hitAreas: HitArea[] = [];\n\n const domain = extent(values);\n if (domain === undefined) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const right = plot.x + plot.width;\n const bottom = plot.y + plot.height;\n const x = linearScale(domain, [plot.x, right], { chart: CHART, property: valueName, padding: context.domainPadding, nice: true });\n const y = linearScale([0, 1], [bottom, plot.y], { chart: CHART, property: 'share', padding: context.domainPadding });\n for (const share of SHARES) {\n strokes.push({ d: `M${plot.x},${y(share)}H${right}`, role: 'ornament', part: 'grid' });\n labels.push({ x: plot.x, y: y(share) - 3, text: formatNumber(share, locale, PERCENT), kind: 'tick', part: 'axis', anchor: 'start' });\n }\n strokes.push({ d: `M${plot.x},${bottom}H${right}`, role: 'ornament', part: 'rule' });\n for (const tick of x.ticks(4)) {\n labels.push({ x: x(tick), y: area.y + area.height - 5, text: formatNumber(tick, locale, numberFormat), kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n // A quantile marker is a dotted rule across the plot at its share.\n for (const p of markers) strokes.push({ d: `M${plot.x},${y(p)}H${right}`, role: 'ornament', part: 'rule', dash: 'dotted' });\n\n groups.forEach((group, series) => {\n // The step function: zero until the first value, up at each value, held to the end.\n let d = '';\n group.steps.forEach((step, i) => {\n d += i === 0 ? `M${x(step.value)},${bottom}V${y(step.p)}` : `H${x(step.value)}V${y(step.p)}`;\n });\n d += `H${right}`;\n strokes.push({ d, role: 'encoding', part: series === 0 ? 'ink' : 'ink-secondary', ...(series === 0 ? {} : { dash: 'dotted' as const }) });\n group.steps.forEach((step, column) => {\n hitAreas.push({\n seriesKey: group.name,\n index: row.get(step.value) as number,\n datum: Object.freeze({ value: step.value, p: step.p, group: group.name }),\n value: step.p,\n x: x(step.value),\n y: y(step.p),\n cell: { column, row: series },\n });\n });\n });\n\n // One heightened element (REQ-442): where the first group crosses its median.\n const first = groups[0] as Group;\n const median = quantile(first.sorted, 0.5);\n const mark = circlePath(x(median), y(0.5), 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 const summary = groups.map((g) => `${g.name}: ${g.sorted.length} values, median ${formatNumber(quantile(g.sorted, 0.5), locale, numberFormat)}`).join('; ');\n const description =\n props.description ??\n `${base.name}. Empirical cumulative distribution of ${valueName}, the share of observations at or below each value, from ${formatNumber(domain[0], locale, numberFormat)} to ${formatNumber(domain[1], locale, numberFormat)}; ${summary}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `EcdfChart` recipe (REQ-401): the empirical cumulative distribution as an exact step line. */\nexport const ecdfChart: ChartRecipe<EcdfChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildEcdfChart });\n","import { bandScale, type LinearScale } from '../../scales/scales';\nimport { extent } from '../../scales/util';\nimport type { Accessor, ChartModel, ChartOrientation, CommonChartProps, Datum, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from './card';\nimport { AXIS_BAND, PLOT_INSET, cartesianPlot, categoryLabels, horizontalValueAxis, valueAxis } from './cartesian';\nimport { checkCeiling, readObservations, warnTooSmall } from './contracts';\nimport { accessorName, fitText, formatNumber } from './format';\nimport { emptyModel, measure, modelBase, readyModel } from './shell';\nimport { sortedValues } from './stats';\n\n/**\n * The skeleton the box plot, the violin and the ridgeline share (DD-036), as `points.ts` serves\n * the scatter and the bubble: observations read and grouped, a sorted sample per group, the derived\n * table, the card, the empty state; each family then draws its groups on the frame.\n */\n\n/** A group's observations, ascending. */\nexport interface DistributionGroup {\n readonly name: string;\n readonly sorted: readonly number[];\n /** Fewer observations than the family's statistic needs: drawn as points (REQ-434). */\n readonly small: boolean;\n}\n\nexport interface DistributionProps extends CommonChartProps {\n valueKey?: Accessor<number | null | undefined>;\n groupKey?: Accessor<string | null | undefined>;\n orientation?: ChartOrientation;\n}\n\n/** What a family draws on the frame; every coordinate in it comes from the frame's scales. */\nexport interface DistributionDrawing {\n readonly plot: Rect;\n readonly strokes: readonly Stroke[];\n readonly labels: readonly TextLabel[];\n readonly hitAreas: readonly HitArea[];\n /** What the description says after the chart's name and its groups. */\n readonly summary: string;\n}\n\nexport interface DistributionFamily<P extends DistributionProps> {\n readonly chart: string;\n readonly fallbackName: string;\n readonly demo: readonly Datum[];\n readonly demoKeys: { readonly valueKey: string; readonly groupKey: string };\n /** Observations a group needs for the statistic (REQ-434). */\n readonly minimum: number;\n /** The derived columns after the group's name, and a group's cells (REQ-431). */\n readonly columns: readonly string[];\n row(group: DistributionGroup, props: P, format: (v: number) => string, groups: readonly DistributionGroup[]): readonly string[];\n draw(frame: { readonly props: P; readonly context: RecipeContext; readonly groups: readonly DistributionGroup[]; readonly area: Rect; readonly valueName: string; readonly format: (v: number) => string }): DistributionDrawing;\n}\n\nexport function buildDistribution<P extends DistributionProps>(family: DistributionFamily<P>, props: P, context: RecipeContext): ChartModel {\n const { chart } = family;\n const usesDemo = props.data === undefined;\n const data = props.data ?? family.demo;\n const valueKey = usesDemo ? family.demoKeys.valueKey : (props.valueKey ?? 'value');\n const groupKey = usesDemo ? family.demoKeys.groupKey : props.groupKey;\n const { locale } = context;\n const format = (v: number) => formatNumber(v, locale, props.numberFormat);\n const valueName = accessorName(valueKey, 'value');\n const groupName = groupKey === undefined ? 'group' : accessorName(groupKey, 'group');\n\n const read = readObservations(chart, data, { value: valueKey, ...(groupKey === undefined ? {} : { group: groupKey }) });\n checkCeiling(chart, valueName, 'observations', read.observations.length);\n const groups: DistributionGroup[] = read.groups.map((name) => {\n const sorted = sortedValues(read.observations.filter((o) => o.group === name).map((o) => o.value));\n return { name: groupKey === undefined ? valueName : name, sorted, small: sorted.length < family.minimum };\n });\n for (const g of groups) if (g.small && g.sorted.length > 0) warnTooSmall(chart, g.name, g.sorted.length, family.minimum);\n\n const base = modelBase(chart, props, context, family.fallbackName, {\n columns: [groupName, ...family.columns],\n rows: groups.map((g) => [g.name, ...family.row(g, props, format, groups)]),\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 if (read.observations.length === 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot: cartesianPlot(card.area), strokes: [...card.strokes], labels: [...card.labels] }, data.length === 0);\n }\n const drawing = family.draw({ props, context, groups, area: card.area, valueName, format });\n const description = props.description ?? `${base.name}. ${family.fallbackName} of ${valueName} in ${groups.length} ${groups.length === 1 ? 'group' : 'groups'}; ${drawing.summary}.`;\n return readyModel(base, description, {\n viewBox: card.viewBox,\n plot: drawing.plot,\n strokes: [...card.strokes, ...drawing.strokes],\n labels: [...card.labels, ...drawing.labels],\n hitAreas: drawing.hitAreas,\n });\n}\n\n/** Room at the left for the group names when groups run in rows. */\nexport const ROW_LABELS = 56;\n\n/** The frame of the box plot and the violin: a band per group, a value scale across them. */\nexport interface BandFrame {\n readonly plot: Rect;\n readonly rows: boolean;\n /** Data value → px along the value axis. */\n readonly value: LinearScale;\n /** Centre of group `i` across the value axis. */\n centre(i: number): number;\n readonly bandwidth: number;\n readonly strokes: readonly Stroke[];\n readonly labels: readonly TextLabel[];\n}\n\nexport function bandFrame(\n area: Rect,\n groups: readonly DistributionGroup[],\n domain: readonly [number, number],\n options: { readonly chart: string; readonly property: string; readonly padding: number; readonly locale: string; readonly numberFormat: Intl.NumberFormatOptions | undefined; readonly orientation: ChartOrientation | undefined },\n): BandFrame {\n const rows = options.orientation === 'rows';\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 axisOptions = { chart: options.chart, property: options.property, padding: options.padding, locale: options.locale, numberFormat: options.numberFormat };\n const axis = rows ? horizontalValueAxis(plot, area, domain, axisOptions) : valueAxis(plot, domain, { ...axisOptions, zero: false });\n const across = rows ? ([plot.y, plot.y + plot.height] as const) : ([plot.x, plot.x + plot.width] as const);\n const band = bandScale(groups.map((_, i) => String(i)), across, { paddingInner: 0.3, paddingOuter: 0.15 });\n const centre = (i: number) => band.center(String(i)) ?? across[0];\n const names = groups.map((g) => g.name);\n const labels: TextLabel[] = [...axis.labels];\n if (rows) names.forEach((text, i) => labels.push({ x: area.x + PLOT_INSET, y: centre(i) + 4, text: fitText(text, ROW_LABELS - PLOT_INSET - 6), kind: 'tick', part: 'axis', anchor: 'start' }));\n else labels.push(...categoryLabels(names, centre, area, plot));\n return { plot, rows, value: axis.scale, centre, bandwidth: band.bandwidth, strokes: axis.strokes, labels };\n}\n\n/** The value extent of every group, for a shared scale. */\nexport function valueExtent(groups: readonly DistributionGroup[], pad = 0): [number, number] {\n const [low, high] = extent(groups.flatMap((g) => g.sorted)) ?? [0, 0];\n return [low - pad, high + pad];\n}\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `BoxPlotChart` (REQ-402): response times in ms of five services, 24 to 60 each: one bimodal, one with outliers. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const BOX_PLOT_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { service: 'Search', ms: 220 },\n { service: 'Search', ms: 177 },\n { service: 'Search', ms: 158 },\n { service: 'Search', ms: 199 },\n { service: 'Search', ms: 171 },\n { service: 'Search', ms: 138 },\n { service: 'Search', ms: 186 },\n { service: 'Search', ms: 207 },\n { service: 'Search', ms: 181 },\n { service: 'Search', ms: 187 },\n { service: 'Search', ms: 176 },\n { service: 'Search', ms: 187 },\n { service: 'Search', ms: 203 },\n { service: 'Search', ms: 161 },\n { service: 'Search', ms: 184 },\n { service: 'Search', ms: 143 },\n { service: 'Search', ms: 140 },\n { service: 'Search', ms: 191 },\n { service: 'Search', ms: 189 },\n { service: 'Search', ms: 203 },\n { service: 'Search', ms: 208 },\n { service: 'Search', ms: 162 },\n { service: 'Search', ms: 229 },\n { service: 'Search', ms: 165 },\n { service: 'Search', ms: 167 },\n { service: 'Search', ms: 161 },\n { service: 'Search', ms: 151 },\n { service: 'Search', ms: 168 },\n { service: 'Search', ms: 189 },\n { service: 'Search', ms: 208 },\n { service: 'Search', ms: 180 },\n { service: 'Search', ms: 139 },\n { service: 'Search', ms: 184 },\n { service: 'Search', ms: 154 },\n { service: 'Search', ms: 170 },\n { service: 'Search', ms: 175 },\n { service: 'Search', ms: 176 },\n { service: 'Search', ms: 154 },\n { service: 'Search', ms: 162 },\n { service: 'Search', ms: 176 },\n { service: 'Search', ms: 189 },\n { service: 'Search', ms: 185 },\n { service: 'Search', ms: 147 },\n { service: 'Search', ms: 183 },\n { service: 'Search', ms: 213 },\n { service: 'Search', ms: 194 },\n { service: 'Search', ms: 186 },\n { service: 'Search', ms: 162 },\n { service: 'Search', ms: 184 },\n { service: 'Search', ms: 170 },\n { service: 'Search', ms: 192 },\n { service: 'Search', ms: 180 },\n { service: 'Search', ms: 158 },\n { service: 'Search', ms: 156 },\n { service: 'Search', ms: 172 },\n { service: 'Search', ms: 203 },\n { service: 'Search', ms: 216 },\n { service: 'Search', ms: 161 },\n { service: 'Search', ms: 194 },\n { service: 'Search', ms: 134 },\n { service: 'Checkout', ms: 116 },\n { service: 'Checkout', ms: 247 },\n { service: 'Checkout', ms: 154 },\n { service: 'Checkout', ms: 242 },\n { service: 'Checkout', ms: 142 },\n { service: 'Checkout', ms: 241 },\n { service: 'Checkout', ms: 129 },\n { service: 'Checkout', ms: 248 },\n { service: 'Checkout', ms: 147 },\n { service: 'Checkout', ms: 241 },\n { service: 'Checkout', ms: 148 },\n { service: 'Checkout', ms: 264 },\n { service: 'Checkout', ms: 132 },\n { service: 'Checkout', ms: 283 },\n { service: 'Checkout', ms: 127 },\n { service: 'Checkout', ms: 252 },\n { service: 'Checkout', ms: 130 },\n { service: 'Checkout', ms: 247 },\n { service: 'Checkout', ms: 133 },\n { service: 'Checkout', ms: 263 },\n { service: 'Checkout', ms: 163 },\n { service: 'Checkout', ms: 265 },\n { service: 'Checkout', ms: 149 },\n { service: 'Checkout', ms: 288 },\n { service: 'Checkout', ms: 144 },\n { service: 'Checkout', ms: 271 },\n { service: 'Checkout', ms: 123 },\n { service: 'Checkout', ms: 296 },\n { service: 'Checkout', ms: 123 },\n { service: 'Checkout', ms: 224 },\n { service: 'Checkout', ms: 141 },\n { service: 'Checkout', ms: 292 },\n { service: 'Checkout', ms: 121 },\n { service: 'Checkout', ms: 300 },\n { service: 'Checkout', ms: 177 },\n { service: 'Checkout', ms: 252 },\n { service: 'Checkout', ms: 141 },\n { service: 'Checkout', ms: 251 },\n { service: 'Checkout', ms: 130 },\n { service: 'Checkout', ms: 237 },\n { service: 'Checkout', ms: 154 },\n { service: 'Checkout', ms: 242 },\n { service: 'Checkout', ms: 132 },\n { service: 'Checkout', ms: 263 },\n { service: 'Checkout', ms: 163 },\n { service: 'Checkout', ms: 257 },\n { service: 'Checkout', ms: 142 },\n { service: 'Checkout', ms: 311 },\n { service: 'Checkout', ms: 145 },\n { service: 'Checkout', ms: 266 },\n { service: 'Checkout', ms: 134 },\n { service: 'Checkout', ms: 255 },\n { service: 'Checkout', ms: 154 },\n { service: 'Checkout', ms: 254 },\n { service: 'Checkout', ms: 122 },\n { service: 'Checkout', ms: 268 },\n { service: 'Checkout', ms: 144 },\n { service: 'Checkout', ms: 284 },\n { service: 'Checkout', ms: 128 },\n { service: 'Checkout', ms: 282 },\n { service: 'Profile', ms: 136 },\n { service: 'Profile', ms: 121 },\n { service: 'Profile', ms: 127 },\n { service: 'Profile', ms: 122 },\n { service: 'Profile', ms: 121 },\n { service: 'Profile', ms: 250 },\n { service: 'Profile', ms: 135 },\n { service: 'Profile', ms: 114 },\n { service: 'Profile', ms: 109 },\n { service: 'Profile', ms: 103 },\n { service: 'Profile', ms: 110 },\n { service: 'Profile', ms: 114 },\n { service: 'Profile', ms: 124 },\n { service: 'Profile', ms: 117 },\n { service: 'Profile', ms: 116 },\n { service: 'Profile', ms: 132 },\n { service: 'Profile', ms: 124 },\n { service: 'Profile', ms: 246 },\n { service: 'Profile', ms: 110 },\n { service: 'Profile', ms: 135 },\n { service: 'Profile', ms: 125 },\n { service: 'Profile', ms: 148 },\n { service: 'Profile', ms: 125 },\n { service: 'Profile', ms: 113 },\n { service: 'Profile', ms: 104 },\n { service: 'Profile', ms: 128 },\n { service: 'Profile', ms: 127 },\n { service: 'Profile', ms: 119 },\n { service: 'Profile', ms: 110 },\n { service: 'Profile', ms: 290 },\n { service: 'Profile', ms: 114 },\n { service: 'Profile', ms: 127 },\n { service: 'Profile', ms: 117 },\n { service: 'Profile', ms: 101 },\n { service: 'Profile', ms: 118 },\n { service: 'Profile', ms: 126 },\n { service: 'Profile', ms: 130 },\n { service: 'Profile', ms: 111 },\n { service: 'Profile', ms: 100 },\n { service: 'Profile', ms: 107 },\n { service: 'Profile', ms: 111 },\n { service: 'Profile', ms: 287 },\n { service: 'Profile', ms: 119 },\n { service: 'Profile', ms: 115 },\n { service: 'Profile', ms: 139 },\n { service: 'Profile', ms: 114 },\n { service: 'Profile', ms: 133 },\n { service: 'Profile', ms: 119 },\n { service: 'Reports', ms: 364 },\n { service: 'Reports', ms: 313 },\n { service: 'Reports', ms: 363 },\n { service: 'Reports', ms: 310 },\n { service: 'Reports', ms: 344 },\n { service: 'Reports', ms: 332 },\n { service: 'Reports', ms: 319 },\n { service: 'Reports', ms: 340 },\n { service: 'Reports', ms: 303 },\n { service: 'Reports', ms: 308 },\n { service: 'Reports', ms: 345 },\n { service: 'Reports', ms: 360 },\n { service: 'Reports', ms: 376 },\n { service: 'Reports', ms: 334 },\n { service: 'Reports', ms: 304 },\n { service: 'Reports', ms: 348 },\n { service: 'Reports', ms: 411 },\n { service: 'Reports', ms: 330 },\n { service: 'Reports', ms: 323 },\n { service: 'Reports', ms: 408 },\n { service: 'Reports', ms: 339 },\n { service: 'Reports', ms: 353 },\n { service: 'Reports', ms: 380 },\n { service: 'Reports', ms: 443 },\n { service: 'Reports', ms: 306 },\n { service: 'Reports', ms: 314 },\n { service: 'Reports', ms: 518 },\n { service: 'Reports', ms: 317 },\n { service: 'Reports', ms: 464 },\n { service: 'Reports', ms: 464 },\n { service: 'Reports', ms: 308 },\n { service: 'Reports', ms: 358 },\n { service: 'Reports', ms: 355 },\n { service: 'Reports', ms: 309 },\n { service: 'Reports', ms: 429 },\n { service: 'Reports', ms: 347 },\n { service: 'Login', ms: 89 },\n { service: 'Login', ms: 100 },\n { service: 'Login', ms: 84 },\n { service: 'Login', ms: 90 },\n { service: 'Login', ms: 88 },\n { service: 'Login', ms: 80 },\n { service: 'Login', ms: 82 },\n { service: 'Login', ms: 88 },\n { service: 'Login', ms: 98 },\n { service: 'Login', ms: 103 },\n { service: 'Login', ms: 83 },\n { service: 'Login', ms: 85 },\n { service: 'Login', ms: 109 },\n { service: 'Login', ms: 86 },\n { service: 'Login', ms: 90 },\n { service: 'Login', ms: 84 },\n { service: 'Login', ms: 99 },\n { service: 'Login', ms: 76 },\n { service: 'Login', ms: 81 },\n { service: 'Login', ms: 82 },\n { service: 'Login', ms: 87 },\n { service: 'Login', ms: 95 },\n { service: 'Login', ms: 109 },\n { service: 'Login', ms: 95 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const BOX_PLOT_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n valueKey: 'ms',\n groupKey: 'service',\n} as const);\n","import type { BoxPlotChartProps, ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke } from '../../types';\nimport { rectPath } from '../shared/cells';\nimport { checkWhisker } from '../shared/contracts';\nimport { bandFrame, buildDistribution, valueExtent, type DistributionFamily, type DistributionGroup } from '../shared/distribution';\nimport { circlePath } from '../shared/format';\nimport { fiveNumber, type FiveNumber } from '../shared/stats';\nimport { BOX_PLOT_CHART_DEMO, BOX_PLOT_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'BoxPlotChart';\nconst HEIGHTEN_RADIUS = 3.5;\nconst POINT_RADIUS = 2.5;\n/** Tukey's reach (REQ-432). */\nconst DEFAULT_WHISKER = 1.5;\n/** A box needs five observations (REQ-434). */\nconst MINIMUM = 5;\n/** Share of a group's band the box fills, and the most it may be in px. */\nconst BOX_FILL = 0.6;\nconst BOX_MAX = 40;\n\n/** The whisker reach; an invalid one is the default, warned once per render (SP021, REQ-433). */\nconst whiskerOf = (props: BoxPlotChartProps) => checkWhisker(CHART, props.whisker) ?? DEFAULT_WHISKER;\nconst summaryOf = (group: DistributionGroup, props: BoxPlotChartProps): FiveNumber => fiveNumber(group.sorted, whiskerOf(props));\n\nconst family: DistributionFamily<BoxPlotChartProps> = {\n chart: CHART,\n fallbackName: 'Box plot',\n demo: BOX_PLOT_CHART_DEMO,\n demoKeys: BOX_PLOT_CHART_DEMO_KEYS,\n minimum: MINIMUM,\n columns: ['n', 'min', 'q1', 'median', 'q3', 'max', 'outliers'],\n row(group, props, format) {\n if (group.sorted.length === 0) return [String(0), '—', '—', '—', '—', '—', '—'];\n const s = summaryOf(group, props);\n return [String(group.sorted.length), format(s.min), format(s.q1), format(s.median), format(s.q3), format(s.max), s.outliers.length > 0 ? s.outliers.map(format).join(', ') : '—'];\n },\n draw({ props, context, groups, area, valueName, format }) {\n const frame = bandFrame(area, groups, valueExtent(groups), { chart: CHART, property: valueName, padding: context.domainPadding, locale: context.locale, numberFormat: props.numberFormat, orientation: props.orientation });\n const { rows, value: v } = frame;\n const strokes: Stroke[] = [...frame.strokes];\n const hitAreas: HitArea[] = [];\n const showOutliers = props.outliers !== false;\n const half = Math.min(frame.bandwidth * BOX_FILL, BOX_MAX) / 2;\n // (along, across) → (x, y): the value runs up a column, or across a row.\n const at = (along: number, across: number) => (rows ? { x: along, y: across } : { x: across, y: along });\n const segment = (a0: number, c0: number, a1: number, c1: number) => {\n const p = at(a0, c0);\n const q = at(a1, c1);\n return `M${p.x},${p.y}L${q.x},${q.y}`;\n };\n const summaries = groups.map((g) => (g.small ? undefined : summaryOf(g, props)));\n let best: { index: number; median: number } | undefined;\n\n groups.forEach((group, g) => {\n const c = frame.centre(g);\n const s = summaries[g];\n const cell = (k: number) => (rows ? { column: k, row: g } : { column: g, row: k });\n if (!s) {\n // Too few for a box: every observation is a point; one stop names the group.\n for (const value of group.sorted) {\n const p = at(v(value), c);\n strokes.push({ d: circlePath(p.x, p.y, POINT_RADIUS), role: 'encoding', part: 'ink' });\n }\n const middle = group.sorted[Math.floor((group.sorted.length - 1) / 2)] ?? 0;\n const p = at(v(middle), c);\n hitAreas.push({ seriesKey: 'median', index: g, datum: Object.freeze({ group: group.name, values: Object.freeze([...group.sorted]) }), value: middle, x: p.x, y: p.y, cell: cell(0) });\n return;\n }\n const low = v(s.q1);\n const high = v(s.q3);\n const lo = Math.min(low, high);\n const box = rows ? { x: lo, y: c - half, width: Math.abs(high - low), height: 2 * half } : { x: c - half, y: lo, width: 2 * half, height: Math.abs(high - low) };\n strokes.push({ d: rectPath(box), role: 'encoding', part: 'ink', tone: 1 });\n strokes.push({ d: segment(v(s.median), c - half, v(s.median), c + half), role: 'encoding', part: 'ink', weight: 2 });\n // Whiskers out to the extreme observations inside the fences, each with its cap.\n for (const [from, to] of [[s.q3, s.max], [s.q1, s.min]] as const) {\n strokes.push({ d: segment(v(from), c, v(to), c) + segment(v(to), c - half / 2, v(to), c + half / 2), role: 'encoding', part: 'ink' });\n }\n const m = at(v(s.median), c);\n const whiskerLow = at(v(s.min), c - half);\n const whiskerHigh = at(v(s.max), c + half);\n hitAreas.push({\n seriesKey: 'median',\n index: g,\n datum: Object.freeze({ group: group.name, min: s.min, q1: s.q1, median: s.median, q3: s.q3, max: s.max, outliers: Object.freeze([...s.outliers]) }),\n value: s.median,\n x: m.x,\n y: m.y,\n box: { x: Math.min(whiskerLow.x, whiskerHigh.x), y: Math.min(whiskerLow.y, whiskerHigh.y), width: Math.abs(whiskerHigh.x - whiskerLow.x), height: Math.abs(whiskerHigh.y - whiskerLow.y) },\n cell: cell(0),\n });\n if (showOutliers) {\n s.outliers.forEach((value, k) => {\n const p = at(v(value), c);\n strokes.push({ d: circlePath(p.x, p.y, POINT_RADIUS), role: 'encoding', part: 'ink' });\n hitAreas.push({ seriesKey: 'outliers', index: g, datum: Object.freeze({ group: group.name, value }), value, x: p.x, y: p.y, cell: cell(k + 1) });\n });\n }\n if (!best || s.median > best.median) best = { index: g, median: s.median };\n });\n\n // One heightened element (REQ-442): the highest median, on its line.\n const raised = best ? hitAreas.find((h) => h.seriesKey === 'median' && h.index === best?.index) : hitAreas[0];\n if (raised) {\n const mark = circlePath(raised.x, raised.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 const whisker = whiskerOf(props);\n const medians = groups.map((g, i) => `${g.name} median ${summaries[i] ? format(summaries[i].median) : 'not drawn, too few observations'}`).join(', ');\n return { plot: frame.plot, strokes, labels: frame.labels, hitAreas, summary: `quartiles by linear interpolation, Tukey whiskers at ${format(whisker)} IQR; ${medians}` };\n },\n};\n\nfunction buildBoxPlotChart(props: BoxPlotChartProps, context: RecipeContext): ChartModel {\n return buildDistribution(family, props, context);\n}\n\n/** `BoxPlotChart` recipe (REQ-402): quartiles, median, Tukey whiskers and outliers per group. */\nexport const boxPlotChart: ChartRecipe<BoxPlotChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildBoxPlotChart });\n","import { quantile, rootOf } from './stats';\n\n/**\n * Kernel density of the violin and ridgeline charts (DD-029, REQ-432): the Epanechnikov kernel,\n * `K(u) = ¾(1 − u²)` on `|u| ≤ 1`, is polynomial, so the density sum needs only correctly rounded\n * operations and Node and every browser produce the same samples (REQ-435). A Gaussian kernel\n * would call `Math.exp`, which ECMAScript does not require to be correctly rounded.\n */\n\n/** Points at which a density is evaluated, over the shared value domain. */\nexport const DENSITY_SAMPLES = 64;\n\n/** A density sample. */\nexport interface DensityPoint {\n readonly at: number;\n readonly value: number;\n}\n\n/**\n * Silverman's rule of thumb, `0.9 · min(σ, IQR/1.34) · n^(−1/5)`, of a sorted sample. When the\n * spread is 0 it falls back to σ, then to |x₀|, then to 1 (as R's `bw.nrd0`), so it is never 0.\n */\nexport function silverman(sorted: readonly number[]): number {\n const n = sorted.length;\n let sum = 0;\n for (const v of sorted) sum += v;\n const mean = sum / n;\n let squares = 0;\n for (const v of sorted) squares += (v - mean) * (v - mean);\n const sigma = n > 1 ? Math.sqrt(squares / (n - 1)) : 0;\n const iqr = quantile(sorted, 0.75) - quantile(sorted, 0.25);\n let spread = Math.min(sigma, iqr / 1.34);\n if (!(spread > 0)) spread = sigma > 0 ? sigma : Math.abs(sorted[0] ?? 0) || 1;\n return (0.9 * spread) / rootOf(n, 5);\n}\n\n/**\n * The Epanechnikov density of a sorted sample at `samples` evenly spaced points of `domain`, both\n * ends included. Terms are summed in ascending order of the observations.\n */\nexport function kde(sorted: readonly number[], bandwidth: number, domain: readonly [number, number], samples = DENSITY_SAMPLES): DensityPoint[] {\n const [lo, hi] = domain;\n const n = sorted.length;\n const scale = n * bandwidth;\n const points: DensityPoint[] = [];\n let first = 0;\n for (let k = 0; k < samples; k += 1) {\n const at = k === samples - 1 ? hi : lo + (k * (hi - lo)) / (samples - 1);\n while (first < n && (sorted[first] as number) < at - bandwidth) first += 1;\n let sum = 0;\n for (let i = first; i < n; i += 1) {\n const u = (at - (sorted[i] as number)) / bandwidth;\n if (u < -1) break;\n if (u <= 1) sum += 0.75 * (1 - u * u);\n }\n points.push({ at, value: n > 0 ? sum / scale : 0 });\n }\n return points;\n}\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\n/** Demo dataset of `ViolinChart` (REQ-403): the box plot's service response times. */\nexport { BOX_PLOT_CHART_DEMO as VIOLIN_CHART_DEMO } from '../box-plot-chart/demo';\n\nexport const VIOLIN_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n valueKey: 'ms',\n groupKey: 'service',\n} as const);\n","import { area as areaShape, curveMonotoneX, curveMonotoneY } from 'd3-shape';\nimport type { ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke, ViolinChartProps } from '../../types';\nimport { checkBandwidth } from '../shared/contracts';\nimport { kde, silverman, type DensityPoint } from '../shared/density';\nimport { bandFrame, buildDistribution, valueExtent, type DistributionFamily, type DistributionGroup } from '../shared/distribution';\nimport { circlePath } from '../shared/format';\nimport { quantile } from '../shared/stats';\nimport { VIOLIN_CHART_DEMO, VIOLIN_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'ViolinChart';\nconst HEIGHTEN_RADIUS = 3.5;\nconst POINT_RADIUS = 2.5;\n/** A density needs two observations (REQ-434). */\nconst MINIMUM = 2;\n/** Share of a group's band the widest violin fills, and the most it may be in px. */\nconst VIOLIN_FILL = 0.9;\nconst VIOLIN_MAX = 60;\n/** Half-length of the quartile and median marks, as a share of the band. */\nconst MARK = 0.15;\n\n/**\n * One bandwidth for every group, so the shapes compare (API delta §3): the prop, or the mean of the\n * groups' Silverman bandwidths. An invalid prop is the default, warned once (SP021).\n */\nfunction bandwidthOf(groups: readonly DistributionGroup[], props: ViolinChartProps): { value: number; given: boolean } {\n const given = checkBandwidth(CHART, props.bandwidth);\n if (given !== undefined) return { value: given, given: true };\n const rules = groups.filter((g) => !g.small).map((g) => silverman(g.sorted));\n return { value: rules.length > 0 ? rules.reduce((s, h) => s + h, 0) / rules.length : 1, given: false };\n}\n\n/** The density's samples from just before it rises to just after it falls: the violin's outline. */\nfunction trimmed(points: readonly DensityPoint[]): DensityPoint[] {\n const first = points.findIndex((p) => p.value > 0);\n let last = points.length - 1;\n while (last > 0 && (points[last] as DensityPoint).value <= 0) last -= 1;\n return points.slice(Math.max(first - 1, 0), Math.min(last + 2, points.length));\n}\n\nconst family: DistributionFamily<ViolinChartProps> = {\n chart: CHART,\n fallbackName: 'Violin chart',\n demo: VIOLIN_CHART_DEMO,\n demoKeys: VIOLIN_CHART_DEMO_KEYS,\n minimum: MINIMUM,\n columns: ['n', 'min', 'q1', 'median', 'q3', 'max'],\n row(group, _props, format) {\n const s = group.sorted;\n return [String(s.length), format(s[0] as number), format(quantile(s, 0.25)), format(quantile(s, 0.5)), format(quantile(s, 0.75)), format(s.at(-1) as number)];\n },\n draw({ props, context, groups, area, valueName, format }) {\n const h = bandwidthOf(groups, props);\n const domain = valueExtent(groups, h.value);\n const frame = bandFrame(area, groups, domain, { chart: CHART, property: valueName, padding: context.domainPadding, locale: context.locale, numberFormat: props.numberFormat, orientation: props.orientation });\n const { rows, value: v } = frame;\n const strokes: Stroke[] = [...frame.strokes];\n const hitAreas: HitArea[] = [];\n const densities = groups.map((g) => (g.small ? undefined : trimmed(kde(g.sorted, h.value, domain))));\n const peak = Math.max(...densities.flatMap((d) => (d ?? []).map((p) => p.value)), 0);\n const half = Math.min(frame.bandwidth * VIOLIN_FILL, VIOLIN_MAX) / 2;\n const width = (density: number) => (peak > 0 ? (density / peak) * half : 0);\n const mark = frame.bandwidth * MARK;\n const at = (along: number, across: number) => (rows ? { x: along, y: across } : { x: across, y: along });\n const rule = (value: number, c: number) => {\n const p = at(v(value), c - mark);\n const q = at(v(value), c + mark);\n return `M${p.x},${p.y}L${q.x},${q.y}`;\n };\n let best: { index: number; median: number } | undefined;\n\n groups.forEach((group, g) => {\n const c = frame.centre(g);\n const cell = rows ? { column: 0, row: g } : { column: g, row: 0 };\n const median = quantile(group.sorted, 0.5);\n const m = at(v(median), c);\n const density = densities[g];\n if (!density) {\n for (const value of group.sorted) {\n const p = at(v(value), c);\n strokes.push({ d: circlePath(p.x, p.y, POINT_RADIUS), role: 'encoding', part: 'ink' });\n }\n hitAreas.push({ seriesKey: 'median', index: g, datum: Object.freeze({ group: group.name, n: group.sorted.length, median }), value: median, x: m.x, y: m.y, cell });\n return;\n }\n // The mirrored density, closed: out on one side of the centre, back on the other.\n const outline = rows\n ? areaShape<DensityPoint>().x((p) => v(p.at)).y0((p) => c - width(p.value)).y1((p) => c + width(p.value)).curve(curveMonotoneX)(density)\n : areaShape<DensityPoint>().y((p) => v(p.at)).x0((p) => c - width(p.value)).x1((p) => c + width(p.value)).curve(curveMonotoneY)(density);\n if (outline) strokes.push({ d: outline, role: 'encoding', part: 'ink', tone: 1 });\n const q1 = quantile(group.sorted, 0.25);\n const q3 = quantile(group.sorted, 0.75);\n if (props.quartiles !== false) {\n for (const q of [q1, q3]) strokes.push({ d: rule(q, c), role: 'encoding', part: 'ink-secondary', dash: 'dotted' });\n }\n strokes.push({ d: rule(median, c), role: 'encoding', part: 'ink' });\n const lo = at(v(domain[0]), c - half);\n const hi = at(v(domain[1]), c + half);\n hitAreas.push({\n seriesKey: 'median',\n index: g,\n datum: Object.freeze({ group: group.name, n: group.sorted.length, q1, median, q3 }),\n value: median,\n x: m.x,\n y: m.y,\n box: { x: Math.min(lo.x, hi.x), y: Math.min(lo.y, hi.y), width: Math.abs(hi.x - lo.x), height: Math.abs(hi.y - lo.y) },\n cell,\n });\n if (!best || median > best.median) best = { index: g, median };\n });\n\n // One heightened element (REQ-442): the median mark of the highest median.\n const raised = hitAreas.find((hit) => hit.index === (best?.index ?? 0));\n if (raised) {\n const markPath = circlePath(raised.x, raised.y, HEIGHTEN_RADIUS);\n strokes.push({ d: markPath, role: 'encoding', part: 'heighten', paint: 'fill' });\n strokes.push({ d: markPath, role: 'encoding', part: 'ink', paint: 'stroke' });\n }\n const method = h.given ? 'as given' : \"the mean of the groups' Silverman rules\";\n return {\n plot: frame.plot,\n strokes,\n labels: frame.labels,\n hitAreas,\n summary: `densities by an Epanechnikov kernel of bandwidth ${format(h.value)}, ${method}, at 64 points; ${groups.map((g) => `${g.name} median ${format(quantile(g.sorted, 0.5))}`).join(', ')}`,\n };\n },\n};\n\nfunction buildViolinChart(props: ViolinChartProps, context: RecipeContext): ChartModel {\n return buildDistribution(family, props, context);\n}\n\n/** `ViolinChart` recipe (REQ-403): a mirrored kernel density per group, quartiles marked inside. */\nexport const violinChart: ChartRecipe<ViolinChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildViolinChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\n/** Demo dataset of `RidgelineChart` (REQ-404): the box plot's service response times. */\nexport { BOX_PLOT_CHART_DEMO as RIDGELINE_CHART_DEMO } from '../box-plot-chart/demo';\n\nexport const RIDGELINE_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n valueKey: 'ms',\n groupKey: 'service',\n} as const);\n","import { curveMonotoneX, line } from 'd3-shape';\nimport { linearScale } from '../../scales/scales';\nimport type { ChartModel, ChartRecipe, HitArea, Rect, RecipeContext, RidgelineChartProps, Stroke, TextLabel } from '../../types';\nimport { AXIS_BAND, PLOT_INSET } from '../shared/cartesian';\nimport { checkBandwidth, checkOverlap } from '../shared/contracts';\nimport { kde, silverman, type DensityPoint } from '../shared/density';\nimport { buildDistribution, ROW_LABELS, valueExtent, type DistributionFamily, type DistributionGroup } from '../shared/distribution';\nimport { circlePath, fitText, formatNumber } from '../shared/format';\nimport { quantile } from '../shared/stats';\nimport { RIDGELINE_CHART_DEMO, RIDGELINE_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'RidgelineChart';\nconst HEIGHTEN_RADIUS = 3.5;\nconst POINT_RADIUS = 2.5;\n/** A density needs two observations (REQ-434). */\nconst MINIMUM = 2;\nconst DEFAULT_OVERLAP = 0.5;\n\n/** The shared bandwidth: the prop, or the mean of the groups' Silverman rules (as the violin). */\nfunction bandwidthOf(groups: readonly DistributionGroup[], props: RidgelineChartProps): { value: number; given: boolean } {\n const given = checkBandwidth(CHART, props.bandwidth);\n if (given !== undefined) return { value: given, given: true };\n const rules = groups.filter((g) => !g.small).map((g) => silverman(g.sorted));\n return { value: rules.length > 0 ? rules.reduce((s, h) => s + h, 0) / rules.length : 1, given: false };\n}\n\n/** Where a density peaks: the first sample of its largest value. */\nconst peakOf = (density: readonly DensityPoint[]) => density.reduce((best, p) => (p.value > best.value ? p : best));\n\nconst family: DistributionFamily<RidgelineChartProps> = {\n chart: CHART,\n fallbackName: 'Ridgeline chart',\n demo: RIDGELINE_CHART_DEMO,\n demoKeys: RIDGELINE_CHART_DEMO_KEYS,\n minimum: MINIMUM,\n columns: ['n', 'median', 'peak'],\n row(group, props, format, groups) {\n const s = group.sorted;\n if (group.small) return [String(s.length), format(quantile(s, 0.5)), '—'];\n // The same bandwidth and domain the drawing uses, so the table and the readout say the same.\n const h = bandwidthOf(groups, props).value;\n return [String(s.length), format(quantile(s, 0.5)), format(peakOf(kde(s, h, valueExtent(groups, h))).at)];\n },\n draw({ props, context, groups, area, valueName, format }) {\n const h = bandwidthOf(groups, props);\n const overlap = checkOverlap(CHART, props.overlap) ?? DEFAULT_OVERLAP;\n const domain = valueExtent(groups, h.value);\n const plot: Rect = { 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 const right = plot.x + plot.width;\n const x = linearScale(domain, [plot.x, right], { chart: CHART, property: valueName, padding: context.domainPadding });\n const strokes: Stroke[] = [];\n const labels: TextLabel[] = [];\n const hitAreas: HitArea[] = [];\n\n // n baselines a step apart; each ridge rises (1 + overlap) steps, into the one behind it.\n const n = groups.length;\n const step = plot.height / (n + overlap);\n const rise = step * (1 + overlap);\n const baseline = (g: number) => plot.y + rise + g * step;\n const densities = groups.map((g) => (g.small ? undefined : kde(g.sorted, h.value, domain)));\n const tallest = Math.max(...densities.flatMap((d) => (d ?? []).map((p) => p.value)), 0);\n const heightOf = (density: number) => (tallest > 0 ? (density / tallest) * rise : 0);\n\n for (const tick of x.ticks(4)) {\n labels.push({ x: x(tick), y: area.y + area.height - 5, text: formatNumber(tick, context.locale, props.numberFormat), kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n // Back to front: the ridge nearest the reader is drawn last.\n groups.forEach((group, g) => {\n const base = baseline(g);\n strokes.push({ d: `M${plot.x},${base}H${right}`, role: 'ornament', part: 'rule' });\n labels.push({ x: area.x + PLOT_INSET, y: base - 2, text: fitText(group.name, ROW_LABELS - PLOT_INSET - 6), kind: 'tick', part: 'axis', anchor: 'start' });\n const density = densities[g];\n if (!density) {\n for (const value of group.sorted) strokes.push({ d: circlePath(x(value), base, POINT_RADIUS), role: 'encoding', part: 'ink' });\n const value = quantile(group.sorted, 0.5);\n hitAreas.push({ seriesKey: 'peak', index: g, datum: Object.freeze({ group: group.name, n: group.sorted.length, median: value }), value, x: x(value), y: base });\n return;\n }\n // An open profile, outline only: overlapping hatch would read as value (DD-035).\n const d = line<DensityPoint>().x((p) => x(p.at)).y((p) => base - heightOf(p.value)).curve(curveMonotoneX)(density);\n if (d) strokes.push({ d, role: 'encoding', part: 'ink' });\n const top = peakOf(density);\n hitAreas.push({\n seriesKey: 'peak',\n index: g,\n datum: Object.freeze({ group: group.name, n: group.sorted.length, median: quantile(group.sorted, 0.5), peak: top.at }),\n value: top.at,\n x: x(top.at),\n y: base - heightOf(top.value),\n });\n });\n\n // One heightened element (REQ-442): the front ridge's peak.\n const front = hitAreas.at(-1);\n if (front) {\n const mark = circlePath(front.x, front.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 return {\n plot,\n strokes,\n labels,\n hitAreas,\n summary: `densities by an Epanechnikov kernel of bandwidth ${format(h.value)}, ${h.given ? 'as given' : \"the mean of the groups' Silverman rules\"}, overlapping by ${format(overlap)}; ${hitAreas.map((hit, g) => `${groups[g]?.name ?? ''} peaks at ${format(hit.value)}`).join(', ')}`,\n };\n },\n};\n\nfunction buildRidgelineChart(props: RidgelineChartProps, context: RecipeContext): ChartModel {\n return buildDistribution(family, props, context);\n}\n\n/** `RidgelineChart` recipe (REQ-404): a kernel density per group on overlapping baselines. */\nexport const ridgelineChart: ChartRecipe<RidgelineChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildRidgelineChart });\n","/**\n * The beeswarm's packing (DD-030, REQ-405): not iterative, and a pure function of the positions,\n * the radius and the side the seed picks. Points are placed in ascending order along the value\n * axis; each takes the smallest offset across it at which it touches no placed point. Candidates\n * are the axis itself and the exact tangencies with each nearby placed point, `y ± √(4r² − dx²)`,\n * so only `+ − × ÷` and `Math.sqrt` are used (REQ-435).\n */\n\n/**\n * Offsets across the axis for points at sorted positions `xs` (px), of radius `r`. Off-axis\n * placements alternate sides, starting on `side` (1 or −1): of two equally small offsets, a point\n * takes the side opposite to the last point placed off the axis.\n */\nexport function packSwarm(xs: readonly number[], r: number, side: 1 | -1): number[] {\n const reach = 2 * r;\n const touch = reach * reach;\n // Below this a squared distance counts as touching: tangent candidates carry rounding error.\n const slack = touch * 1e-12;\n const ys: number[] = [];\n let prefer: number = side;\n let first = 0;\n for (let i = 0; i < xs.length; i += 1) {\n const x = xs[i] as number;\n while (first < i && x - (xs[first] as number) >= reach) first += 1;\n const fits = (y: number) => {\n for (let j = first; j < i; j += 1) {\n const dx = x - (xs[j] as number);\n const dy = y - (ys[j] as number);\n if (dx * dx + dy * dy < touch - slack) return false;\n }\n return true;\n };\n // The smallest offset that fits wins; of two equal ones, the preferred side. Candidates are\n // tried in that order and the first that fits is taken, so a dense column costs one pass.\n let best = 0;\n if (!fits(0)) {\n const candidates: number[] = [];\n for (let j = first; j < i; j += 1) {\n const dx = x - (xs[j] as number);\n const rise = Math.sqrt(Math.max(touch - dx * dx, 0));\n candidates.push((ys[j] as number) + rise, (ys[j] as number) - rise);\n }\n candidates.sort((a, b) => (a < 0 ? -a : a) - (b < 0 ? -b : b) || b * prefer - a * prefer);\n best = candidates.find(fits) ?? 0;\n }\n ys.push(best);\n if (best !== 0) prefer = best > 0 ? -1 : 1;\n }\n return ys;\n}\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\n/** Demo dataset of `BeeswarmChart` (REQ-405): the histogram's reading times, one point per reader. */\nexport { HISTOGRAM_CHART_DEMO as BEESWARM_CHART_DEMO } from '../histogram-chart/demo';\n\nexport const BEESWARM_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n valueKey: 'minutes',\n labelKey: 'reader',\n} as const);\n","import { linearScale } from '../../scales/scales';\nimport { extent } from '../../scales/util';\nimport { resolveSeed } from '../../render/seed';\nimport type { BeeswarmChartProps, ChartModel, ChartRecipe, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { packSwarm } from '../shared/beeswarm';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, cartesianPlot } from '../shared/cartesian';\nimport { checkCeiling, checkRadius, readObservations, type Observation } from '../shared/contracts';\nimport { ROW_LABELS } from '../shared/distribution';\nimport { accessorName, circlePath, fitText, formatNumber, formatValue, numberFormatter, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { BEESWARM_CHART_DEMO, BEESWARM_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'BeeswarmChart';\nconst DEFAULT_RADIUS = 3;\n/** A swarm that outgrows its band is packed again at a smaller radius, at most this many times. */\nconst FIT_ATTEMPTS = 8;\nconst SHRINK = 0.8;\nconst MIN_RADIUS = 1;\n\n/** Value order, ties by row: the order points are packed, drawn and walked by keyboard. */\nconst byValue = (a: Observation, b: Observation) => a.value - b.value || a.index - b.index;\n\nfunction buildBeeswarmChart(props: BeeswarmChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? BEESWARM_CHART_DEMO;\n const valueKey = usesDemo ? BEESWARM_CHART_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n const labelKey = usesDemo ? BEESWARM_CHART_DEMO_KEYS.labelKey : props.labelKey;\n const groupKey = usesDemo ? undefined : props.groupKey;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n const labelName = labelKey === undefined ? 'observation' : accessorName(labelKey, 'label');\n const groupName = groupKey === undefined ? undefined : accessorName(groupKey, 'group');\n\n const { observations, groups } = readObservations(CHART, data, {\n value: valueKey,\n ...(groupKey === undefined ? {} : { group: groupKey }),\n ...(labelKey === undefined ? {} : { label: labelKey }),\n });\n checkCeiling(CHART, valueName, 'points', observations.length);\n const asked = checkRadius(CHART, props.radius) ?? DEFAULT_RADIUS;\n\n // A row per observation: the value column's formatter is resolved once (REQ-445); a value that\n // is not a finite number reads `—`, as formatValue prints it.\n const value = numberFormatter(locale, numberFormat);\n const cell = (raw: unknown) => (typeof raw === 'number' && Number.isFinite(raw) ? value(raw) : formatValue(raw, locale, numberFormat));\n const base = modelBase(CHART, props, context, 'Beeswarm', {\n columns: [labelName, valueName, ...(groupName ? [groupName] : [])],\n rows: data.map((datum, index) => [\n labelKey === undefined ? `#${index + 1}` : formatValue(read(labelKey, datum, index), locale, undefined),\n cell(read(valueKey, datum, index)),\n ...(groupKey ? [formatValue(read(groupKey, datum, index), locale, undefined)] : []),\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 area = card.area;\n const grouped = groupKey !== undefined;\n const plot: Rect = grouped\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];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const range = extent(observations.map((o) => o.value));\n if (range === undefined) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n // The value axis runs inside the plot by the radius, so no point is clipped at the ends.\n const x = linearScale(range, [plot.x + asked, plot.x + plot.width - asked], { chart: CHART, property: valueName, padding: context.domainPadding, nice: true });\n for (const tick of x.ticks(4)) {\n labels.push({ x: x(tick), y: area.y + area.height - 5, text: formatNumber(tick, locale, numberFormat), kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n strokes.push({ d: `M${plot.x},${plot.y + plot.height}H${plot.x + plot.width}`, role: 'ornament', part: 'rule' });\n\n // The side the first point off the axis takes is the seed's (DD-030).\n const side = (resolveSeed(props.seed, context.id) & 1) === 0 ? 1 : -1;\n const band = plot.height / groups.length;\n const placed: { o: Observation; x: number; y: number; r: number }[] = [];\n groups.forEach((group, g) => {\n const members = observations.filter((o) => o.group === group).sort(byValue);\n const xs = members.map((o) => x(o.value));\n const centre = plot.y + band * (g + 0.5);\n // A swarm taller than its band is packed again at a smaller radius: points never overlap.\n let r = asked;\n let ys = packSwarm(xs, r, side);\n for (let attempt = 0; attempt < FIT_ATTEMPTS && r > MIN_RADIUS && Math.max(0, ...ys.map((y) => (y < 0 ? -y : y))) + r > band / 2; attempt += 1) {\n r = Math.max(r * SHRINK, MIN_RADIUS);\n ys = packSwarm(xs, r, side);\n }\n members.forEach((o, k) => placed.push({ o, x: xs[k] as number, y: centre + (ys[k] as number), r }));\n if (grouped) labels.push({ x: area.x + PLOT_INSET, y: centre + 4, text: fitText(group, ROW_LABELS - PLOT_INSET - 6), kind: 'tick', part: 'axis', anchor: 'start' });\n });\n\n for (const p of [...placed].sort((a, b) => byValue(a.o, b.o))) {\n strokes.push({ d: circlePath(p.x, p.y, p.r), role: 'encoding', part: 'ink' });\n hitAreas.push({ seriesKey: valueName, index: p.o.index, datum: p.o.datum, value: p.o.value, x: p.x, y: p.y, box: { x: p.x - p.r, y: p.y - p.r, width: 2 * p.r, height: 2 * p.r } });\n }\n\n // One heightened element (REQ-442): the maximum observation, the point itself.\n const top = [...placed].sort((a, b) => byValue(a.o, b.o)).at(-1);\n if (top) strokes.push({ d: circlePath(top.x, top.y, top.r), role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const description =\n props.description ??\n `${base.name}. Beeswarm of ${observations.length} ${valueName} observations${grouped ? ` in ${groups.length} groups` : ''}, one point each, packed without overlap; 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/** `BeeswarmChart` recipe (REQ-405): one point per observation, packed without overlap. */\nexport const beeswarmChart: ChartRecipe<BeeswarmChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildBeeswarmChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `LollipopChart` (REQ-406): loans at 12 library branches, unsorted, some names long. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const LOLLIPOP_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { branch: 'Northgate', loans: 2969 },\n { branch: 'Riverside Commons', loans: 2695 },\n { branch: 'Old Mill', loans: 6096 },\n { branch: 'Harbour View Annex', loans: 7785 },\n { branch: 'Elm Street', loans: 3499 },\n { branch: 'Quarry Hill', loans: 7698 },\n { branch: 'Saint Brigid Reading Rooms', loans: 7279 },\n { branch: 'Westfield', loans: 3294 },\n { branch: 'Lantern Square', loans: 7695 },\n { branch: 'Copper Beech', loans: 5301 },\n { branch: 'Marsh Lane', loans: 3486 },\n { branch: 'Upper Fenwick Community Library', loans: 3917 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const LOLLIPOP_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n xKey: 'branch',\n valueKey: 'loans',\n} as const);\n","import { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, HitArea, LollipopChartProps, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, TICK_CHAR, cartesianPlot, categoryAxis, checkVolume, horizontalValueAxis, readSeries, seriesValues, valueAxis } from '../shared/cartesian';\nimport { warnValue } from '../shared/cells';\nimport { accessorName, circlePath, fitText, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { LOLLIPOP_CHART_DEMO, LOLLIPOP_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'LollipopChart';\nconst HEAD_RADIUS = 4;\n/** Room at the left for the category names when lollipops run in rows. */\nconst ROW_LABELS = 96;\n/** Room, in px, a category name needs under a column before names are thinned. */\nconst MIN_LABEL_ROOM = 48;\n\nfunction buildLollipopChart(props: LollipopChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? LOLLIPOP_CHART_DEMO;\n const xKey = usesDemo ? LOLLIPOP_CHART_DEMO_KEYS.xKey : (props.xKey ?? 'x');\n const valueKey = usesDemo ? LOLLIPOP_CHART_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n const rows = props.orientation === 'rows';\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 xLabels = data.map((datum, index) => formatCategory(read(xKey, datum, index), locale));\n\n const base = modelBase(CHART, props, context, 'Lollipop 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 area = card.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];\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; their lollipops are omitted.`);\n const range = extent(seriesValues([series]));\n if (data.length === 0 || range === undefined) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const axisOptions = { chart: CHART, property: series.key, 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\n // The drawing order: data order, or sorted by value (ties by row); the table keeps data order.\n const drawn = series.points.filter((p) => p.value !== undefined);\n if (props.sort === 'ascending' || props.sort === 'descending') {\n const sign = props.sort === 'ascending' ? 1 : -1;\n drawn.sort((a, b) => sign * ((a.value as number) - (b.value as number)) || a.index - b.index);\n }\n const along = rows ? { x: plot.y, y: plot.x, width: plot.height, height: plot.width } : plot;\n const slots = categoryAxis(drawn.map((_, i) => i), along, { chart: CHART, property: xName, padding: context.domainPadding, numeric: false, paddingInner: 0.3, paddingOuter: 0.15 });\n const zero = v(0);\n\n drawn.forEach((p, slot) => {\n const value = p.value as number;\n const c = slots.at(slot);\n const end = v(value);\n const head = rows ? { x: end, y: c } : { x: c, y: end };\n // The stem stops at the head's edge, so the head's tone is never crossed by it.\n const toward = end > zero ? -HEAD_RADIUS : HEAD_RADIUS;\n const tip = Math.abs(end - zero) > HEAD_RADIUS ? end + toward : zero;\n strokes.push({ d: rows ? `M${zero},${c}H${tip}` : `M${c},${zero}V${tip}`, role: 'encoding', part: 'ink' });\n strokes.push({ d: circlePath(head.x, head.y, HEAD_RADIUS), role: 'encoding', part: 'ink', tone: 2 });\n hitAreas.push({ seriesKey: series.key, index: p.index, datum: p.datum, value, x: head.x, y: head.y, box: { x: head.x - HEAD_RADIUS, y: head.y - HEAD_RADIUS, width: 2 * HEAD_RADIUS, height: 2 * HEAD_RADIUS } });\n const text = formatNumber(value, locale, numberFormat);\n // The value at the head when the band holds it (DD-035).\n if (!rows && slots.bandwidth >= text.length * TICK_CHAR + 2) {\n labels.push({ x: c, y: value >= 0 ? end - HEAD_RADIUS - 4 : end + HEAD_RADIUS + 10, text, kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n });\n const names = drawn.map((p) => xLabels[p.index] ?? '');\n if (rows) names.forEach((text, slot) => labels.push({ x: area.x + PLOT_INSET, y: slots.at(slot) + 4, text: fitText(text, ROW_LABELS - PLOT_INSET - 6), kind: 'tick', part: 'axis', anchor: 'start' }));\n else {\n // Long names are thinned to one every `step` slots and cut to the room that leaves; the table\n // and the readout carry them whole.\n const spacing = plot.width / Math.max(drawn.length, 1);\n const step = Math.max(1, Math.ceil(MIN_LABEL_ROOM / spacing));\n names.forEach((text, slot) => {\n if (slot % step !== 0) return;\n labels.push({ x: slots.at(slot), y: area.y + area.height - 5, text: fitText(text, spacing * step - 6), kind: 'tick', part: 'axis', anchor: 'middle' });\n });\n }\n\n // One heightened element (REQ-442): the largest head, the head itself.\n const largest = hitAreas.reduce((best, hit) => (hit.value > best.value ? hit : best));\n strokes.push({ d: circlePath(largest.x, largest.y, HEAD_RADIUS), role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const description =\n props.description ??\n `${base.name}. Lollipop chart in ${rows ? 'rows' : 'columns'} of ${drawn.length} ${xName} values${props.sort && props.sort !== 'none' ? `, sorted ${props.sort}` : ''}; ${series.key} from ${formatNumber(range[0], locale, numberFormat)} to ${formatNumber(range[1], locale, numberFormat)}, the largest ${xLabels[largest.index] ?? ''}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `LollipopChart` recipe (REQ-406): a stem from the baseline and a head at the value. */\nexport const lollipopChart: ChartRecipe<LollipopChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildLollipopChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `DumbbellChart` (REQ-407): average wait in minutes at 10 clinics, 2024 and 2025; two of them improve. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const DUMBBELL_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { clinic: 'Ashford', y2024: 59, y2025: 66 },\n { clinic: 'Brook Lane', y2024: 24, y2025: 30 },\n { clinic: 'Castlegate', y2024: 33, y2025: 47 },\n { clinic: 'Dunmore', y2024: 23, y2025: 16 },\n { clinic: 'Eastwick', y2024: 52, y2025: 60 },\n { clinic: 'Fairholm', y2024: 28, y2025: 43 },\n { clinic: 'Glenbrook', y2024: 32, y2025: 40 },\n { clinic: 'Hollins', y2024: 33, y2025: 25 },\n { clinic: 'Ivybridge', y2024: 25, y2025: 31 },\n { clinic: 'Juniper Row', y2024: 25, y2025: 32 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const DUMBBELL_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n labelKey: 'clinic',\n startKey: 'y2024',\n endKey: 'y2025',\n names: /* @__PURE__ */ Object.freeze(['2024', '2025']),\n} as const);\n","import { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, DumbbellChartProps, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, cartesianPlot, categoryAxis, categoryLabels, horizontalValueAxis, legend, valueAxis } from '../shared/cartesian';\nimport { readPaired } from '../shared/contracts';\nimport { accessorName, circlePath, fitText, formatNumber, signedChange } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { DUMBBELL_CHART_DEMO, DUMBBELL_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'DumbbellChart';\nconst MARK_RADIUS = 4;\n/** Length of the arrowhead along the segment, and its half-width. */\nconst ARROW_LENGTH = 9;\nconst ARROW_HALF = 4.5;\n/** Room at the left for the category names when dumbbells run in rows. */\nconst ROW_LABELS = 88;\n\n/** A closed arrowhead whose tip is at `(x, y)`, pointing along `direction` (±1 on the value axis). */\nfunction arrowPath(rows: boolean, tip: number, across: number, direction: number): string {\n const back = tip - direction * ARROW_LENGTH;\n return rows\n ? `M${tip},${across}L${back},${across - ARROW_HALF}L${back},${across + ARROW_HALF}Z`\n : `M${across},${tip}L${across - ARROW_HALF},${back}L${across + ARROW_HALF},${back}Z`;\n}\n\nfunction buildDumbbellChart(props: DumbbellChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? DUMBBELL_CHART_DEMO;\n const labelKey = usesDemo ? DUMBBELL_CHART_DEMO_KEYS.labelKey : (props.labelKey ?? 'label');\n const startKey = usesDemo ? DUMBBELL_CHART_DEMO_KEYS.startKey : (props.startKey ?? 'start');\n const endKey = usesDemo ? DUMBBELL_CHART_DEMO_KEYS.endKey : (props.endKey ?? 'end');\n const [first = 'start', second = 'end'] = usesDemo ? DUMBBELL_CHART_DEMO_KEYS.names : (props.names ?? []);\n const names = [first, second] as const;\n // Dumbbells read best in rows: long category names, values along one axis.\n const rows = props.orientation !== 'columns';\n const arrow = props.endMarker === 'arrow';\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const format = (v: number) => formatNumber(v, locale, numberFormat);\n const labelName = accessorName(labelKey, 'label');\n\n const pairs = readPaired(CHART, data, { label: labelKey, start: startKey, end: endKey });\n const base = modelBase(CHART, props, context, 'Dumbbell chart', {\n columns: [labelName, names[0], names[1], 'change'],\n rows: pairs.map((p) => [p.label, format(p.start), format(p.end), signedChange(p.end - p.start, format)]),\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: names[0], part: 'ink-secondary', dash: 'dotted' },\n { name: names[1], part: 'ink', tone: 2 },\n ]);\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 const range = extent(pairs.flatMap((p) => [p.start, p.end]));\n if (range === undefined) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const axisOptions = { chart: CHART, property: accessorName(endKey, 'end'), padding: context.domainPadding, locale, numberFormat };\n const axis = rows ? horizontalValueAxis(plot, area, range, axisOptions) : valueAxis(plot, range, { ...axisOptions, zero: false });\n const v = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const along = rows ? { x: plot.y, y: plot.x, width: plot.height, height: plot.width } : plot;\n const slots = categoryAxis(pairs.map((_, i) => i), along, { chart: CHART, property: labelName, padding: context.domainPadding, numeric: false, paddingInner: 0.3, paddingOuter: 0.15 });\n const point = (value: number, c: number) => (rows ? { x: v(value), y: c } : { x: c, y: v(value) });\n\n let largest: { row: number; size: number } | undefined;\n const ends: string[] = [];\n pairs.forEach((pair, row) => {\n const c = slots.at(row);\n const a = point(pair.start, c);\n const b = point(pair.end, c);\n const direction = Math.sign(v(pair.end) - v(pair.start));\n // The segment runs between the marks' edges, so neither mark is crossed by it.\n const inset = (from: { x: number; y: number }, sign: number, by: number) => (rows ? { x: from.x + sign * by, y: from.y } : { x: from.x, y: from.y + sign * by });\n const gap = Math.abs(v(pair.end) - v(pair.start));\n if (gap > MARK_RADIUS + (arrow ? ARROW_LENGTH : MARK_RADIUS)) {\n const p = inset(a, direction, MARK_RADIUS);\n const q = inset(b, -direction, arrow ? ARROW_LENGTH : MARK_RADIUS);\n strokes.push({ d: `M${p.x},${p.y}L${q.x},${q.y}`, role: 'encoding', part: 'ink' });\n } else {\n strokes.push({ d: `M${a.x},${a.y}L${b.x},${b.y}`, role: 'encoding', part: 'ink' });\n }\n strokes.push({ d: circlePath(a.x, a.y, MARK_RADIUS), role: 'encoding', part: 'ink-secondary', dash: 'dotted' });\n const end = arrow && direction !== 0 ? arrowPath(rows, v(pair.end), c, direction) : circlePath(b.x, b.y, MARK_RADIUS);\n strokes.push({ d: end, role: 'encoding', part: 'ink', tone: 2 });\n ends.push(end);\n const datum = Object.freeze({ label: pair.label, start: pair.start, end: pair.end, change: pair.end - pair.start });\n const cell = (column: number) => ({ column, row });\n hitAreas.push({ seriesKey: names[0], index: row, datum, value: pair.start, x: a.x, y: a.y, cell: cell(0) });\n hitAreas.push({ seriesKey: names[1], index: row, datum, value: pair.end, x: b.x, y: b.y, cell: cell(1) });\n const change = Math.abs(pair.end - pair.start);\n if (!largest || change > largest.size) largest = { row, size: change };\n });\n const texts = pairs.map((p) => p.label);\n if (rows) texts.forEach((text, row) => labels.push({ x: area.x + PLOT_INSET, y: slots.at(row) + 4, text: fitText(text, ROW_LABELS - PLOT_INSET - 6), kind: 'tick', part: 'axis', anchor: 'start' }));\n else labels.push(...categoryLabels(texts, slots.at, area, plot));\n\n // One heightened element (REQ-442): the end mark of the largest change.\n if (largest) strokes.push({ d: ends[largest.row] as string, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const rises = pairs.filter((p) => p.end > p.start).length;\n const falls = pairs.filter((p) => p.end < p.start).length;\n const description =\n props.description ??\n `${base.name}. Dumbbell chart of ${pairs.length} ${labelName} values from ${names[0]} to ${names[1]}; ${rises} rise, ${falls} fall${\n largest ? `; the largest change is ${pairs[largest.row]?.label ?? ''}, ${signedChange((pairs[largest.row]?.end ?? 0) - (pairs[largest.row]?.start ?? 0), format)}` : ''\n }.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `DumbbellChart` recipe (REQ-407): two values per category joined by a segment. */\nexport const dumbbellChart: ChartRecipe<DumbbellChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildDumbbellChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\n/** Demo dataset of `SlopeChart` (REQ-408): the dumbbell's clinic waits. */\nexport { DUMBBELL_CHART_DEMO as SLOPE_CHART_DEMO } from '../dumbbell-chart/demo';\n\nexport const SLOPE_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n labelKey: 'clinic',\n startKey: 'y2024',\n endKey: 'y2025',\n names: /* @__PURE__ */ Object.freeze(['2024', '2025']),\n} as const);\n","import { linearScale } from '../../scales/scales';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, HitArea, Rect, RecipeContext, SlopeChartProps, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, TICK_CHAR, spreadLabels } from '../shared/cartesian';\nimport { readPaired } from '../shared/contracts';\nimport { accessorName, circlePath, formatNumber, signedChange } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { SLOPE_CHART_DEMO, SLOPE_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'SlopeChart';\nconst HEIGHTEN_RADIUS = 3.5;\n/** Vertical room one end label needs. */\nconst LABEL_GAP = 11;\n/** The two period axes keep at least this share of the width between them. */\nconst MIN_SPAN = 0.4;\n\nfunction buildSlopeChart(props: SlopeChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? SLOPE_CHART_DEMO;\n const labelKey = usesDemo ? SLOPE_CHART_DEMO_KEYS.labelKey : (props.labelKey ?? 'label');\n const startKey = usesDemo ? SLOPE_CHART_DEMO_KEYS.startKey : (props.startKey ?? 'start');\n const endKey = usesDemo ? SLOPE_CHART_DEMO_KEYS.endKey : (props.endKey ?? 'end');\n const [first = 'start', second = 'end'] = usesDemo ? SLOPE_CHART_DEMO_KEYS.names : (props.names ?? []);\n const names = [first, second] as const;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const format = (v: number) => formatNumber(v, locale, numberFormat);\n const labelName = accessorName(labelKey, 'label');\n\n const pairs = readPaired(CHART, data, { label: labelKey, start: startKey, end: endKey });\n const base = modelBase(CHART, props, context, 'Slopegraph', {\n columns: [labelName, names[0], names[1], 'change'],\n rows: pairs.map((p) => [p.label, format(p.start), format(p.end), signedChange(p.end - p.start, format)]),\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 area = card.area;\n const leftTexts = pairs.map((p) => `${p.label} ${format(p.start)}`);\n const rightTexts = pairs.map((p) => `${format(p.end)} ${p.label}`);\n const room = (texts: readonly string[]) => Math.max(0, ...texts.map((t) => t.length * TICK_CHAR)) + 8;\n const budget = (area.width * (1 - MIN_SPAN)) / 2;\n const left = area.x + Math.min(room(leftTexts), budget);\n const right = area.x + area.width - Math.min(room(rightTexts), budget);\n // The period names sit above the plot; the plot spans the two axes.\n const plot: Rect = { x: left, y: area.y + AXIS_BAND, width: Math.max(right - left, 1), height: Math.max(area.height - AXIS_BAND - PLOT_INSET, 1) };\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const range = extent(pairs.flatMap((p) => [p.start, p.end]));\n if (range === undefined) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const bottom = plot.y + plot.height;\n const y = linearScale(range, [bottom, plot.y], { chart: CHART, property: accessorName(endKey, 'end'), padding: context.domainPadding });\n for (const [x, name, anchor] of [[left, names[0], 'start'], [right, names[1], 'end']] as const) {\n strokes.push({ d: `M${x},${plot.y}V${bottom}`, role: 'ornament', part: 'axis' });\n labels.push({ x, y: area.y + 11, text: name, kind: 'tick', part: 'axis', anchor });\n }\n\n let largest: { row: number; size: number } | undefined;\n pairs.forEach((pair, row) => {\n const a = { x: left, y: y(pair.start) };\n const b = { x: right, y: y(pair.end) };\n const falls = pair.end < pair.start;\n strokes.push({ d: `M${a.x},${a.y}L${b.x},${b.y}`, role: 'encoding', part: falls ? 'ink-secondary' : 'ink', ...(falls ? { dash: 'dotted' as const } : {}) });\n const datum = Object.freeze({ label: pair.label, start: pair.start, end: pair.end, change: pair.end - pair.start });\n hitAreas.push({ seriesKey: names[0], index: row, datum, value: pair.start, x: a.x, y: a.y, cell: { column: 0, row } });\n hitAreas.push({ seriesKey: names[1], index: row, datum, value: pair.end, x: b.x, y: b.y, cell: { column: 1, row } });\n const change = Math.abs(pair.end - pair.start);\n if (!largest || change > largest.size) largest = { row, size: change };\n });\n // Name and value at both ends, spread so they never overlap (no legend: DD-035).\n const lefts = spreadLabels(pairs.map((p) => y(p.start)), LABEL_GAP, plot.y, bottom);\n const rights = spreadLabels(pairs.map((p) => y(p.end)), LABEL_GAP, plot.y, bottom);\n pairs.forEach((_, row) => {\n labels.push({ x: left - 6, y: (lefts[row] as number) + 3, text: leftTexts[row] as string, kind: 'tick', part: 'axis', anchor: 'end' });\n labels.push({ x: right + 6, y: (rights[row] as number) + 3, text: rightTexts[row] as string, kind: 'tick', part: 'axis', anchor: 'start' });\n });\n\n // One heightened element (REQ-442): the end of the largest change.\n if (largest) {\n const mark = circlePath(right, y(pairs[largest.row]?.end ?? 0), 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\n const rises = pairs.filter((p) => p.end > p.start).length;\n const falls = pairs.filter((p) => p.end < p.start).length;\n const description =\n props.description ??\n `${base.name}. Slopegraph of ${pairs.length} ${labelName} values from ${names[0]} to ${names[1]}; ${rises} rise, ${falls} fall, ${pairs.length - rises - falls} hold${\n largest ? `; the largest change is ${pairs[largest.row]?.label ?? ''}, ${signedChange((pairs[largest.row]?.end ?? 0) - (pairs[largest.row]?.start ?? 0), format)}` : ''\n }.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `SlopeChart` recipe (REQ-408): two period axes, one segment per category, labelled at both ends. */\nexport const slopeChart: ChartRecipe<SlopeChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildSlopeChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `BumpChart` (REQ-409): six teams' points over eight seasons, with one tie. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const BUMP_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { season: 2018, team: 'Kestrel', points: 57 },\n { season: 2018, team: 'Otter', points: 53 },\n { season: 2018, team: 'Lynx', points: 52 },\n { season: 2018, team: 'Heron', points: 54 },\n { season: 2018, team: 'Badger', points: 73 },\n { season: 2018, team: 'Marten', points: 62 },\n { season: 2019, team: 'Kestrel', points: 65 },\n { season: 2019, team: 'Otter', points: 49 },\n { season: 2019, team: 'Lynx', points: 44 },\n { season: 2019, team: 'Heron', points: 58 },\n { season: 2019, team: 'Badger', points: 81 },\n { season: 2019, team: 'Marten', points: 66 },\n { season: 2020, team: 'Kestrel', points: 73 },\n { season: 2020, team: 'Otter', points: 47 },\n { season: 2020, team: 'Lynx', points: 43 },\n { season: 2020, team: 'Heron', points: 51 },\n { season: 2020, team: 'Badger', points: 83 },\n { season: 2020, team: 'Marten', points: 70 },\n { season: 2021, team: 'Kestrel', points: 81 },\n { season: 2021, team: 'Otter', points: 81 },\n { season: 2021, team: 'Lynx', points: 42 },\n { season: 2021, team: 'Heron', points: 51 },\n { season: 2021, team: 'Badger', points: 75 },\n { season: 2021, team: 'Marten', points: 77 },\n { season: 2022, team: 'Kestrel', points: 81 },\n { season: 2022, team: 'Otter', points: 48 },\n { season: 2022, team: 'Lynx', points: 47 },\n { season: 2022, team: 'Heron', points: 49 },\n { season: 2022, team: 'Badger', points: 83 },\n { season: 2022, team: 'Marten', points: 80 },\n { season: 2023, team: 'Kestrel', points: 89 },\n { season: 2023, team: 'Otter', points: 55 },\n { season: 2023, team: 'Lynx', points: 49 },\n { season: 2023, team: 'Heron', points: 44 },\n { season: 2023, team: 'Badger', points: 87 },\n { season: 2023, team: 'Marten', points: 84 },\n { season: 2024, team: 'Kestrel', points: 92 },\n { season: 2024, team: 'Otter', points: 62 },\n { season: 2024, team: 'Lynx', points: 49 },\n { season: 2024, team: 'Heron', points: 36 },\n { season: 2024, team: 'Badger', points: 93 },\n { season: 2024, team: 'Marten', points: 81 },\n { season: 2025, team: 'Kestrel', points: 97 },\n { season: 2025, team: 'Otter', points: 64 },\n { season: 2025, team: 'Lynx', points: 53 },\n { season: 2025, team: 'Heron', points: 41 },\n { season: 2025, team: 'Badger', points: 101 },\n { season: 2025, team: 'Marten', points: 78 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const BUMP_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n xKey: 'season',\n seriesKey: 'team',\n valueKey: 'points',\n} as const);\n","import { curveBumpX, line } from 'd3-shape';\nimport type { BumpChartProps, ChartModel, ChartRecipe, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, TICK_CHAR, categoryAxis, categoryLabels, spreadLabels } from '../shared/cartesian';\nimport { readRanked } from '../shared/contracts';\nimport { accessorName, circlePath, formatCategory } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { rank, type Rank } from '../shared/stats';\nimport { BUMP_CHART_DEMO, BUMP_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'BumpChart';\nconst DOT_RADIUS = 3;\nconst HEIGHTEN_RADIUS = 3.5;\nconst NAME_GAP = 11;\n\ninterface Place {\n readonly x: number;\n readonly y: number;\n readonly rank: number;\n readonly value: number;\n}\n\nfunction buildBumpChart(props: BumpChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? BUMP_CHART_DEMO;\n const xKey = usesDemo ? BUMP_CHART_DEMO_KEYS.xKey : (props.xKey ?? 'x');\n const seriesKey = usesDemo ? BUMP_CHART_DEMO_KEYS.seriesKey : (props.seriesKey ?? 'series');\n const valueKey = usesDemo ? BUMP_CHART_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n const order = props.order ?? 'descending';\n const { locale } = context;\n const xName = accessorName(xKey, 'x');\n\n const read = readRanked(CHART, data, { x: xKey, series: seriesKey, value: valueKey });\n const ranks = rank(read.rows, read.series, order);\n const xIndex = new Map(read.xs.map((x, i) => [`${typeof x}:${String(x)}`, i]));\n /** `places[series][x]`: where a series stands at each x, when it has a value there. */\n const at = new Map<string, (Rank & { value: number } | undefined)[]>(read.series.map((s) => [s, read.xs.map(() => undefined)]));\n read.rows.forEach((row, i) => {\n const list = at.get(row.series) as (Rank & { value: number } | undefined)[];\n list[xIndex.get(`${typeof row.x}:${String(row.x)}`) as number] = { ...(ranks[i] as Rank), value: row.value };\n });\n // Best-ranked first, at the last x each series reaches; `series` caps how many are drawn.\n const standing = (s: string) => {\n const list = at.get(s) ?? [];\n for (let i = list.length - 1; i >= 0; i -= 1) if (list[i]) return [read.xs.length - i, (list[i] as Rank).slot];\n return [Number.POSITIVE_INFINITY, 0];\n };\n const best = [...read.series].sort((a, b) => {\n const [ga, sa] = standing(a);\n const [gb, sb] = standing(b);\n return (ga as number) - (gb as number) || (sa as number) - (sb as number);\n });\n const cap = props.series !== undefined && Number.isInteger(props.series) && props.series > 0 ? props.series : best.length;\n const drawn = read.series.filter((s) => best.slice(0, cap).includes(s));\n const tied = (xi: number, r: number) => read.series.filter((s) => at.get(s)?.[xi]?.rank === r).length > 1;\n const rankText = (xi: number, s: string) => {\n const place = at.get(s)?.[xi];\n return place ? `${place.rank}${tied(xi, place.rank) ? '=' : ''}` : '—';\n };\n\n const xLabels = read.xs.map((x) => formatCategory(x, locale));\n const base = modelBase(CHART, props, context, 'Bump chart', {\n columns: [xName, ...drawn],\n rows: read.xs.map((_, xi) => [xLabels[xi] ?? '', ...drawn.map((s) => rankText(xi, s))]),\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 area = card.area;\n const room = Math.min(Math.max(0, ...drawn.map((s) => s.length * TICK_CHAR)) + 10, area.width / 4);\n const plot: Rect = { x: area.x + room, y: area.y + PLOT_INSET, width: Math.max(area.width - 2 * room, 1), height: Math.max(area.height - AXIS_BAND - PLOT_INSET, 1) };\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (read.rows.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const columns = categoryAxis(read.xs.map((_, i) => i), plot, { chart: CHART, property: xName, padding: context.domainPadding, numeric: false, paddingInner: 0, paddingOuter: 0.1 });\n const slots = Math.max(1, ...drawn.flatMap((s) => (at.get(s) ?? []).map((p) => p?.slot ?? 0)));\n const rowHeight = plot.height / slots;\n const y = (slot: number) => plot.y + (slot - 0.5) * rowHeight;\n // The rank rows, as grid lines: a line keeps its slot between them.\n for (let slot = 1; slot <= slots; slot += 1) strokes.push({ d: `M${plot.x},${y(slot)}H${plot.x + plot.width}`, role: 'ornament', part: 'grid' });\n labels.push(...categoryLabels(xLabels, columns.at, area, plot));\n\n const ends: { first: Place; last: Place; series: string }[] = [];\n drawn.forEach((series, row) => {\n const places: (Place | undefined)[] = (at.get(series) ?? []).map((p, xi) => (p ? { x: columns.at(xi), y: y(p.slot), rank: p.rank, value: p.value } : undefined));\n const d = line<Place | undefined>().defined((p) => p !== undefined).x((p) => (p as Place).x).y((p) => (p as Place).y).curve(curveBumpX)(places);\n if (d) strokes.push({ d, role: 'encoding', part: 'ink' });\n places.forEach((p, xi) => {\n if (!p) return;\n strokes.push({ d: circlePath(p.x, p.y, DOT_RADIUS), role: 'encoding', part: 'ink' });\n hitAreas.push({ seriesKey: series, index: xi, datum: Object.freeze({ x: read.xs[xi], series, value: p.value, rank: p.rank }), value: p.rank, x: p.x, y: p.y, cell: { column: xi, row } });\n });\n const present = places.filter((p): p is Place => p !== undefined);\n if (present.length > 0) ends.push({ first: present[0] as Place, last: present.at(-1) as Place, series });\n });\n // The series' names at both ends, as direct labels, spread apart (DD-035).\n const lefts = spreadLabels(ends.map((e) => e.first.y), NAME_GAP, plot.y, plot.y + plot.height);\n const rights = spreadLabels(ends.map((e) => e.last.y), NAME_GAP, plot.y, plot.y + plot.height);\n ends.forEach((e, k) => {\n labels.push({ x: e.first.x - 7, y: (lefts[k] as number) + 3, text: e.series, kind: 'tick', part: 'axis', anchor: 'end' });\n labels.push({ x: e.last.x + 7, y: (rights[k] as number) + 3, text: e.series, kind: 'tick', part: 'axis', anchor: 'start' });\n });\n\n // One heightened element (REQ-442): the last point of the rank-1 series.\n const last = read.xs.length - 1;\n const leader = hitAreas.filter((h) => h.index === last).sort((a, b) => a.y - b.y)[0] ?? hitAreas.at(-1);\n if (leader) {\n const mark = circlePath(leader.x, leader.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\n const description =\n props.description ??\n `${base.name}. Bump chart of the rank of ${drawn.length} series over ${read.xs.length} ${xName} values, rank 1 the ${order === 'descending' ? 'highest' : 'lowest'} ${accessorName(valueKey, 'value')}, competition ranking with ties shared${\n leader ? `; ${leader.seriesKey} leads at ${xLabels[last] ?? ''}` : ''\n }.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `BumpChart` recipe (REQ-409): the rank of each series at each x, computed in the core. */\nexport const bumpChart: ChartRecipe<BumpChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildBumpChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `ErrorBarChart` (REQ-410): eight effect estimates with asymmetric intervals, read against 0. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const ERROR_BAR_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { arm: 'Arm A', effect: 1.61, low: 1.01, high: 2.07 },\n { arm: 'Arm B', effect: 0.2, low: -0.16, high: 1.04 },\n { arm: 'Arm C', effect: 1.25, low: 0.35, high: 2.79 },\n { arm: 'Arm D', effect: 1.64, low: 0.74, high: 2.26 },\n { arm: 'Arm E', effect: 0.45, low: -0.52, high: 2.54 },\n { arm: 'Arm F', effect: 0.34, low: -0.57, high: 2.41 },\n { arm: 'Arm G', effect: 1.03, low: 0.14, high: 1.85 },\n { arm: 'Arm H', effect: 1.04, low: -0.44, high: 2.67 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const ERROR_BAR_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n labelKey: 'arm',\n estimateKey: 'effect',\n lowKey: 'low',\n highKey: 'high',\n} as const);\n","import { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, ErrorBarChartProps, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, TICK_CHAR, cartesianPlot, categoryAxis, categoryLabels, horizontalValueAxis, valueAxis } from '../shared/cartesian';\nimport { finite } from '../shared/cells';\nimport { readEstimates } from '../shared/contracts';\nimport { accessorName, circlePath, fitText, formatNumber } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { ERROR_BAR_CHART_DEMO, ERROR_BAR_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'ErrorBarChart';\nconst ESTIMATE_RADIUS = 3.5;\nconst CAP = 4;\n/** Room at the left for the category names when estimates run in rows. */\nconst ROW_LABELS = 64;\n\nfunction buildErrorBarChart(props: ErrorBarChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? ERROR_BAR_CHART_DEMO;\n const labelKey = usesDemo ? ERROR_BAR_CHART_DEMO_KEYS.labelKey : (props.labelKey ?? 'label');\n const estimateKey = usesDemo ? ERROR_BAR_CHART_DEMO_KEYS.estimateKey : (props.estimateKey ?? 'estimate');\n const lowKey = usesDemo ? ERROR_BAR_CHART_DEMO_KEYS.lowKey : (props.lowKey ?? 'low');\n const highKey = usesDemo ? ERROR_BAR_CHART_DEMO_KEYS.highKey : (props.highKey ?? 'high');\n const rows = props.orientation !== 'columns';\n const reference = finite(props.reference);\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const format = (v: number) => formatNumber(v, locale, numberFormat);\n const labelName = accessorName(labelKey, 'label');\n const estimateName = accessorName(estimateKey, 'estimate');\n\n const estimates = readEstimates(CHART, data, { label: labelKey, estimate: estimateKey, low: lowKey, high: highKey });\n const base = modelBase(CHART, props, context, 'Error bars', {\n columns: [labelName, estimateName, accessorName(lowKey, 'low'), accessorName(highKey, 'high')],\n rows: estimates.map((e) => [e.label, format(e.estimate), format(e.low), format(e.high)]),\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 area = card.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];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const range = extent([...estimates.flatMap((e) => [e.low, e.high, e.estimate]), ...(reference === undefined || estimates.length === 0 ? [] : [reference])]);\n if (range === undefined) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const axisOptions = { chart: CHART, property: estimateName, padding: context.domainPadding, locale, numberFormat };\n const axis = rows ? horizontalValueAxis(plot, area, range, axisOptions) : valueAxis(plot, range, { ...axisOptions, zero: false });\n const v = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n if (reference !== undefined) {\n const r = v(reference);\n strokes.push({ d: rows ? `M${r},${plot.y}V${plot.y + plot.height}` : `M${plot.x},${r}H${plot.x + plot.width}`, role: 'ornament', part: 'rule', dash: 'dotted' });\n }\n const along = rows ? { x: plot.y, y: plot.x, width: plot.height, height: plot.width } : plot;\n const slots = categoryAxis(estimates.map((_, i) => i), along, { chart: CHART, property: labelName, padding: context.domainPadding, numeric: false, paddingInner: 0.3, paddingOuter: 0.15 });\n\n const marks: string[] = [];\n estimates.forEach((e, row) => {\n const c = slots.at(row);\n const lo = v(e.low);\n const hi = v(e.high);\n const mid = v(e.estimate);\n // The interval with a cap at each end, one exact path.\n const d = rows\n ? `M${lo},${c}H${hi}M${lo},${c - CAP}V${c + CAP}M${hi},${c - CAP}V${c + CAP}`\n : `M${c},${lo}V${hi}M${c - CAP},${lo}H${c + CAP}M${c - CAP},${hi}H${c + CAP}`;\n strokes.push({ d, role: 'encoding', part: 'ink' });\n const point = rows ? { x: mid, y: c } : { x: c, y: mid };\n const mark = circlePath(point.x, point.y, ESTIMATE_RADIUS);\n marks.push(mark);\n strokes.push({ d: mark, role: 'encoding', part: 'ink', tone: 2 });\n hitAreas.push({\n seriesKey: estimateName,\n index: row,\n datum: Object.freeze({ label: e.label, estimate: e.estimate, low: e.low, high: e.high }),\n value: e.estimate,\n x: point.x,\n y: point.y,\n box: rows ? { x: Math.min(lo, hi), y: c - CAP, width: Math.abs(hi - lo), height: 2 * CAP } : { x: c - CAP, y: Math.min(lo, hi), width: 2 * CAP, height: Math.abs(hi - lo) },\n });\n const text = format(e.estimate);\n // The estimate is printed past the interval's end when the plot holds it (DD-035).\n if (rows && Math.max(lo, hi) + 6 + text.length * TICK_CHAR <= plot.x + plot.width) {\n labels.push({ x: Math.max(lo, hi) + 6, y: c + 3, text, kind: 'tick', part: 'axis', anchor: 'start' });\n }\n });\n const names = estimates.map((e) => e.label);\n if (rows) names.forEach((text, row) => labels.push({ x: area.x + PLOT_INSET, y: slots.at(row) + 4, text: fitText(text, ROW_LABELS - PLOT_INSET - 6), kind: 'tick', part: 'axis', anchor: 'start' }));\n else labels.push(...categoryLabels(names, slots.at, area, plot));\n\n // One heightened element (REQ-442): the estimate furthest from the reference, or the largest.\n const distance = (value: number) => (reference === undefined ? value : Math.abs(value - reference));\n let raised = 0;\n estimates.forEach((e, row) => {\n if (distance(e.estimate) > distance((estimates[raised] as (typeof estimates)[number]).estimate)) raised = row;\n });\n if (marks.length > 0) strokes.push({ d: marks[raised] as string, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const crossing = reference === undefined ? 0 : estimates.filter((e) => e.low <= reference && reference <= e.high).length;\n const description =\n props.description ??\n `${base.name}. ${estimates.length} estimates of ${estimateName} with their intervals${\n reference === undefined ? '' : `, read against ${format(reference)}; ${crossing} of them include it`\n }; estimates from ${format(Math.min(...estimates.map((e) => e.estimate)))} to ${format(Math.max(...estimates.map((e) => e.estimate)))}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `ErrorBarChart` recipe (REQ-410): a point estimate with its interval per category. */\nexport const errorBarChart: ChartRecipe<ErrorBarChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildErrorBarChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `IntervalChart` (REQ-411): four crews' jobs over the first quarter of 2026, ISO dates in UTC, some overlapping. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const INTERVAL_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { crew: 'North crew', task: 'Signage', from: '2026-03-15', to: '2026-03-21' },\n { crew: 'North crew', task: 'Grading', from: '2026-02-17', to: '2026-03-07' },\n { crew: 'North crew', task: 'Signage', from: '2026-03-09', to: '2026-03-31' },\n { crew: 'North crew', task: 'Drainage', from: '2026-02-19', to: '2026-02-24' },\n { crew: 'North crew', task: 'Grading', from: '2026-02-21', to: '2026-03-16' },\n { crew: 'South crew', task: 'Fencing', from: '2026-02-20', to: '2026-03-05' },\n { crew: 'South crew', task: 'Paving', from: '2026-01-02', to: '2026-01-16' },\n { crew: 'South crew', task: 'Paving', from: '2026-03-03', to: '2026-03-09' },\n { crew: 'South crew', task: 'Formwork', from: '2026-03-06', to: '2026-03-10' },\n { crew: 'Bridge team', task: 'Lighting', from: '2026-01-26', to: '2026-02-08' },\n { crew: 'Bridge team', task: 'Drainage', from: '2026-02-26', to: '2026-03-16' },\n { crew: 'Bridge team', task: 'Fencing', from: '2026-02-04', to: '2026-02-19' },\n { crew: 'Bridge team', task: 'Grading', from: '2026-03-14', to: '2026-03-31' },\n { crew: 'Survey', task: 'Formwork', from: '2026-03-22', to: '2026-03-31' },\n { crew: 'Survey', task: 'Signage', from: '2026-02-21', to: '2026-03-08' },\n { crew: 'Survey', task: 'Grading', from: '2026-03-17', to: '2026-03-26' },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const INTERVAL_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n laneKey: 'crew',\n startKey: 'from',\n endKey: 'to',\n labelKey: 'task',\n axis: 'date',\n} as const);\n","import { linearScale } from '../../scales/scales';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, HitArea, IntervalChartProps, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, TICK_CHAR, pillPath } from '../shared/cartesian';\nimport { checkCeiling, readIntervals, type IntervalRow } from '../shared/contracts';\nimport { isoDate } from '../shared/dates';\nimport { accessorName, fitText, formatNumber } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { INTERVAL_CHART_DEMO, INTERVAL_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'IntervalChart';\n/** Room at the left for the lane names. */\nconst ROW_LABELS = 72;\n/** Height of a pill as a share of its track, and the most it may be. */\nconst PILL_FILL = 0.7;\nconst PILL_MAX = 14;\n/** An interval that starts where it ends is drawn this wide, centred. */\nconst MIN_WIDTH = 3;\n\n/**\n * Tracks within a lane, so overlapping intervals never cover each other: in start order, each\n * takes the first track whose last interval has ended before it starts.\n */\nfunction tracksOf(rows: readonly IntervalRow[]): { track: number[]; count: number } {\n const order = rows.map((r, i) => [r, i] as const).sort((a, b) => a[0].start - b[0].start || a[1] - b[1]);\n const ends: number[] = [];\n const track = new Array<number>(rows.length);\n for (const [r, i] of order) {\n let t = ends.findIndex((end) => end <= r.start);\n if (t < 0) t = ends.push(r.end) - 1;\n else ends[t] = r.end;\n track[i] = t;\n }\n return { track, count: Math.max(ends.length, 1) };\n}\n\nfunction buildIntervalChart(props: IntervalChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? INTERVAL_CHART_DEMO;\n const laneKey = usesDemo ? INTERVAL_CHART_DEMO_KEYS.laneKey : (props.laneKey ?? 'lane');\n const startKey = usesDemo ? INTERVAL_CHART_DEMO_KEYS.startKey : (props.startKey ?? 'start');\n const endKey = usesDemo ? INTERVAL_CHART_DEMO_KEYS.endKey : (props.endKey ?? 'end');\n const labelKey = usesDemo ? INTERVAL_CHART_DEMO_KEYS.labelKey : props.labelKey;\n const axisKind = usesDemo ? INTERVAL_CHART_DEMO_KEYS.axis : (props.axis ?? 'number');\n const dates = axisKind === 'date';\n const { locale } = context;\n const numberFormat = props.numberFormat;\n // A date axis prints ISO days, never through the host's time zone or locale (REQ-103).\n const at = (value: number) => (dates ? isoDate(value) : formatNumber(value, locale, numberFormat));\n const tick = (value: number) => (dates ? isoDate(value).slice(5) : formatNumber(value, locale, numberFormat));\n const laneName = accessorName(laneKey, 'lane');\n\n const { rows: intervals, lanes } = readIntervals(CHART, data, { lane: laneKey, start: startKey, end: endKey, ...(labelKey === undefined ? {} : { label: labelKey }) }, dates ? 'date' : 'number');\n checkCeiling(CHART, laneName, 'intervals', intervals.length);\n const base = modelBase(CHART, props, context, 'Interval chart', {\n columns: [...(labelKey === undefined ? [] : [accessorName(labelKey, 'label')]), laneName, accessorName(startKey, 'start'), accessorName(endKey, 'end'), 'length'],\n rows: intervals.map((r) => [...(labelKey === undefined ? [] : [r.label ?? '—']), r.lane, at(r.start), at(r.end), formatNumber(r.end - r.start, 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 area = card.area;\n const plot: Rect = { 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 const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const range = extent(intervals.flatMap((r) => [r.start, r.end]));\n if (range === undefined) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const right = plot.x + plot.width;\n const x = linearScale(range, [plot.x, right], { chart: CHART, property: accessorName(startKey, 'start'), padding: context.domainPadding, nice: !dates });\n for (const t of x.ticks(4)) {\n if (dates && !Number.isInteger(t)) continue;\n strokes.push({ d: `M${x(t)},${plot.y}V${plot.y + plot.height}`, role: 'ornament', part: 'grid' });\n labels.push({ x: x(t), y: area.y + area.height - 5, text: tick(t), kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n const laneHeight = plot.height / lanes.length;\n const pills: string[] = [];\n lanes.forEach((lane, l) => {\n const top = plot.y + l * laneHeight;\n strokes.push({ d: `M${plot.x},${top + laneHeight}H${right}`, role: 'ornament', part: 'rule' });\n labels.push({ x: area.x + PLOT_INSET, y: top + laneHeight / 2 + 4, text: fitText(lane, ROW_LABELS - PLOT_INSET - 6), kind: 'tick', part: 'axis', anchor: 'start' });\n const members = intervals.map((r, i) => [r, i] as const).filter(([r]) => r.lane === lane);\n const { track, count } = tracksOf(members.map(([r]) => r));\n const trackHeight = laneHeight / count;\n const height = Math.min(trackHeight * PILL_FILL, PILL_MAX);\n members.forEach(([r, i], k) => {\n const centre = top + trackHeight * ((track[k] as number) + 0.5);\n let x0 = x(r.start);\n let x1 = x(r.end);\n if (x1 - x0 < MIN_WIDTH) {\n const mid = (x0 + x1) / 2;\n x0 = mid - MIN_WIDTH / 2;\n x1 = mid + MIN_WIDTH / 2;\n }\n const box = { x: x0, y: centre - height / 2, width: x1 - x0, height };\n const d = pillPath(box);\n pills[i] = d;\n strokes.push({ d, role: 'encoding', part: 'ink', tone: 2 });\n hitAreas.push({\n seriesKey: 'length',\n index: i,\n datum: Object.freeze({ label: r.label ?? r.lane, lane: r.lane, start: r.start, end: r.end, length: r.end - r.start }),\n value: r.end - r.start,\n x: (x0 + x1) / 2,\n y: centre,\n box,\n cell: { column: k, row: l },\n });\n // The interval's own label inside it, when it fits (DD-035).\n if (r.label !== undefined && r.label.length * TICK_CHAR + 8 <= x1 - x0 && height >= 9) {\n labels.push({ x: (x0 + x1) / 2, y: centre + 3, text: r.label, kind: 'tick', part: 'text', anchor: 'middle' });\n }\n });\n });\n\n // One heightened element (REQ-442): the longest interval, the pill itself.\n let longest = 0;\n intervals.forEach((r, i) => {\n const best = intervals[longest] as IntervalRow;\n if (r.end - r.start > best.end - best.start) longest = i;\n });\n strokes.push({ d: pills[longest] as string, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const best = intervals[longest] as IntervalRow;\n const description =\n props.description ??\n `${base.name}. ${intervals.length} intervals on ${lanes.length} ${laneName} lanes, from ${at(range[0])} to ${at(range[1])}${dates ? ' (UTC days)' : ''}; the longest is ${best.label ?? best.lane}, ${formatNumber(best.end - best.start, locale, numberFormat)}${dates ? ' days' : ''}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `IntervalChart` recipe (REQ-411): floating bars from start to end on lanes. */\nexport const intervalChart: ChartRecipe<IntervalChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildIntervalChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `DivergingBarChart` (REQ-412): 200 answers to each of six questions on a five-level scale. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const DIVERGING_BAR_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { question: 'The site is easy to use', 'Strongly disagree': 43, Disagree: 53, Neutral: 50, Agree: 24, 'Strongly agree': 29 },\n { question: 'Prices are fair', 'Strongly disagree': 38, Disagree: 36, Neutral: 62, Agree: 42, 'Strongly agree': 21 },\n { question: 'Delivery was on time', 'Strongly disagree': 40, Disagree: 42, Neutral: 45, Agree: 31, 'Strongly agree': 41 },\n { question: 'Support solved my issue', 'Strongly disagree': 37, Disagree: 39, Neutral: 43, Agree: 41, 'Strongly agree': 39 },\n { question: 'I would recommend it', 'Strongly disagree': 55, Disagree: 36, Neutral: 50, Agree: 20, 'Strongly agree': 38 },\n { question: 'The app is reliable', 'Strongly disagree': 49, Disagree: 33, Neutral: 46, Agree: 40, 'Strongly agree': 31 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const DIVERGING_BAR_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n labelKey: 'question',\n levels: /* @__PURE__ */ Object.freeze(['Strongly disagree', 'Disagree', 'Neutral', 'Agree', 'Strongly agree']),\n} as const);\n","import { linearScale } from '../../scales/scales';\nimport type { ChartModel, ChartRecipe, DivergingBarChartProps, HitArea, Rect, RecipeContext, Stroke, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, TICK_CHAR, categoryAxis, legend } from '../shared/cartesian';\nimport { rectPath } from '../shared/cells';\nimport { readLikert } from '../shared/contracts';\nimport { accessorName, fitText, formatNumber } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { niceStep } from '../shared/stats';\nimport { DIVERGING_BAR_CHART_DEMO, DIVERGING_BAR_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'DivergingBarChart';\n/** The deepest tone a level takes: the darkest steps of the ramp stay for the heaviest marks. */\nconst MAX_TONE = 3;\nconst PERCENT: Intl.NumberFormatOptions = { style: 'percent', maximumFractionDigits: 1 };\n\n/** Where each level sits: its side of the centre, its tone, and whether it is the split neutral. */\ninterface Placement {\n readonly side: -1 | 0 | 1;\n readonly tone: ToneLevel;\n}\n\n/**\n * Levels left of the neutral run left of the centre, the rest right; the neutral is split across\n * it. The side carries the sign; the tone, the distance from neutral (REQ-412, REQ-440).\n */\nfunction placements(count: number, neutral: number | null): Placement[] {\n const tone = (distance: number) => Math.min(distance, MAX_TONE) as ToneLevel;\n if (neutral === null) {\n const middle = Math.floor(count / 2);\n return Array.from({ length: count }, (_, i) => (i < middle ? { side: -1, tone: tone(middle - i) } : { side: 1, tone: tone(i - middle + 1) }));\n }\n return Array.from({ length: count }, (_, i) => (i < neutral ? { side: -1, tone: tone(neutral - i) } : i > neutral ? { side: 1, tone: tone(i - neutral) } : { side: 0, tone: 0 }));\n}\n\nfunction buildDivergingBarChart(props: DivergingBarChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? DIVERGING_BAR_CHART_DEMO;\n const labelKey = usesDemo ? DIVERGING_BAR_CHART_DEMO_KEYS.labelKey : (props.labelKey ?? 'label');\n const levels = usesDemo ? DIVERGING_BAR_CHART_DEMO_KEYS.levels : props.levels;\n const percent = props.percent !== false;\n // The middle level of an odd scale by default; a given index is held to the scale.\n const neutral =\n props.neutral === null\n ? null\n : props.neutral === undefined\n ? levels.length % 2 === 1 ? (levels.length - 1) / 2 : null\n : Math.min(Math.max(Math.round(Number.isFinite(props.neutral) ? props.neutral : 0), 0), levels.length - 1);\n const { locale } = context;\n const share = (v: number) => (percent ? formatNumber(v / 100, locale, PERCENT) : formatNumber(v, locale, props.numberFormat));\n const labelName = accessorName(labelKey, 'label');\n\n const rows = readLikert(CHART, data, labelKey, levels, percent);\n const base = modelBase(CHART, props, context, 'Diverging bar chart', {\n columns: [labelName, ...levels],\n rows: rows.map((r) => [r.label, ...r.shares.map(share)]),\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 place = placements(levels.length, neutral);\n const key = legend(card.area, levels.map((name, i) => ({ name, part: 'ink' as const, ...(place[i]?.tone ? { tone: place[i]?.tone } : {}) })));\n const area = key.area;\n const room = Math.min(Math.max(0, ...rows.map((r) => r.label.length * TICK_CHAR)) + 10, area.width * 0.35);\n const plot: Rect = { x: area.x + room, y: area.y + PLOT_INSET, width: Math.max(area.width - room - PLOT_INSET, 1), height: Math.max(area.height - AXIS_BAND - PLOT_INSET, 1) };\n const strokes: Stroke[] = [...card.strokes, ...key.strokes];\n const labels: TextLabel[] = [...card.labels, ...key.labels];\n const hitAreas: HitArea[] = [];\n\n if (rows.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const sideTotal = (shares: readonly number[], side: -1 | 1) =>\n shares.reduce((sum, s, i) => sum + (place[i]?.side === side ? s : place[i]?.side === 0 ? s / 2 : 0), 0);\n const left = Math.max(...rows.map((r) => sideTotal(r.shares, -1)), 0);\n const rightTotal = Math.max(...rows.map((r) => sideTotal(r.shares, 1)), 0);\n // Symmetric about the centre, so the two sides read on one scale, to the next step of the\n // 1-2-5 ladder: d3's nice would round ±55 % out to ±100 %.\n const reach = Math.max(left, rightTotal, 1e-9);\n const step = niceStep(reach / 2);\n const bound = Math.ceil(reach / step - 1e-9) * step;\n const x = linearScale([-bound, bound], [plot.x, plot.x + plot.width], { chart: CHART, property: labelName, padding: context.domainPadding });\n for (let k = -Math.round(bound / step); k <= Math.round(bound / step); k += 1) {\n const t = k * step;\n if (k !== 0) strokes.push({ d: `M${x(t)},${plot.y}V${plot.y + plot.height}`, role: 'ornament', part: 'grid' });\n labels.push({ x: x(t), y: area.y + area.height - 5, text: share(Math.abs(t)), kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n const centre = x(0);\n strokes.push({ d: `M${centre},${plot.y}V${plot.y + plot.height}`, role: 'ornament', part: 'rule' });\n const band = categoryAxis(rows.map((_, i) => i), { x: plot.y, y: plot.x, width: plot.height, height: plot.width }, { chart: CHART, property: labelName, padding: context.domainPadding, numeric: false, paddingInner: 0.3, paddingOuter: 0.15 });\n const thickness = Math.min(band.bandwidth, 22);\n\n let raised: { d: string; share: number } | undefined;\n rows.forEach((row, r) => {\n const c = band.at(r);\n const top = c - thickness / 2;\n labels.push({ x: area.x + PLOT_INSET, y: c + 4, text: fitText(row.label, room - PLOT_INSET - 4), kind: 'tick', part: 'axis', anchor: 'start' });\n // Out from the centre on each side: the neutral half first, then outward by distance.\n let leftEdge = centre;\n let rightEdge = centre;\n const segment = (from: number, to: number, tone: ToneLevel) => {\n const box = { x: Math.min(from, to), y: top, width: Math.abs(to - from), height: thickness };\n const d = rectPath(box);\n strokes.push({ d, role: 'encoding', part: 'ink', tone });\n return { box, d };\n };\n const order = levels.map((_, i) => i).sort((a, b) => (place[a]?.tone ?? 0) - (place[b]?.tone ?? 0) || a - b);\n for (const i of order) {\n const s = row.shares[i] as number;\n const p = place[i] as Placement;\n if (!(s > 0)) continue;\n let box: Rect;\n let d: string;\n if (p.side === 0) {\n const half = x(s / 2) - x(0);\n const a = segment(leftEdge - half, leftEdge, 0);\n const b = segment(rightEdge, rightEdge + half, 0);\n leftEdge -= half;\n rightEdge += half;\n box = { x: a.box.x, y: top, width: a.box.width + b.box.width, height: thickness };\n d = b.d;\n } else {\n const width = x(s) - x(0);\n const from = p.side < 0 ? leftEdge - width : rightEdge;\n const drawn = segment(from, from + width, p.tone);\n if (p.side < 0) leftEdge -= width;\n else rightEdge += width;\n box = drawn.box;\n d = drawn.d;\n if (p.side > 0 && (!raised || s > raised.share)) raised = { d, share: s };\n }\n hitAreas.push({\n seriesKey: levels[i] as string,\n index: row.index,\n datum: Object.freeze({ label: row.label, level: levels[i], share: s, count: row.values[i] }),\n value: s,\n x: box.x + box.width / 2,\n y: c,\n box,\n cell: { column: i, row: r },\n });\n const text = share(s);\n if (text.length * TICK_CHAR + 4 <= box.width && thickness >= 9) labels.push({ x: box.x + box.width / 2, y: c + 3, text, kind: 'tick', part: 'text', anchor: 'middle' });\n }\n });\n\n // One heightened element (REQ-442): the largest positive share, the segment itself.\n if (raised) strokes.push({ d: raised.d, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const description =\n props.description ??\n `${base.name}. Diverging bars of ${rows.length} ${labelName} rows on a ${levels.length}-level scale from ${levels[0] ?? ''} to ${levels.at(-1) ?? ''}${\n neutral === null ? '' : `, ${levels[neutral] ?? ''} split across the centre`\n }; ${percent ? 'each row as shares of 100 %' : 'counts'}, levels before the centre to its left.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `DivergingBarChart` recipe (REQ-412): ordered levels stacked on both sides of a neutral centre. */\nexport const divergingBarChart: ChartRecipe<DivergingBarChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildDivergingBarChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `ConnectedScatterChart` (REQ-413): fare and riders over 14 years, the path crossing itself once. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const CONNECTED_SCATTER_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { year: 2012, fare: 1.5, riders: 39.8 },\n { year: 2013, fare: 1.62, riders: 41.8 },\n { year: 2014, fare: 1.72, riders: 42.7 },\n { year: 2015, fare: 1.85, riders: 44.7 },\n { year: 2016, fare: 1.97, riders: 45.9 },\n { year: 2017, fare: 2.09, riders: 47.6 },\n { year: 2018, fare: 2.73, riders: 53.1 },\n { year: 2019, fare: 2.42, riders: 58.2 },\n { year: 2020, fare: 1.87, riders: 55.9 },\n { year: 2021, fare: 2.26, riders: 48.6 },\n { year: 2022, fare: 2.7, riders: 55.2 },\n { year: 2023, fare: 2.83, riders: 56.3 },\n { year: 2024, fare: 2.93, riders: 58.1 },\n { year: 2025, fare: 3.05, riders: 59.6 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const CONNECTED_SCATTER_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n xKey: 'fare',\n yKey: 'riders',\n labelKey: 'year',\n} as const);\n","import { linearScale } from '../../scales/scales';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, ConnectedScatterChartProps, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { TICK_CHAR, cartesianPlot, valueAxis } from '../shared/cartesian';\nimport { inset } from '../shared/cells';\nimport { checkCeiling, readPathPoints } from '../shared/contracts';\nimport { accessorName, circlePath, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { CONNECTED_SCATTER_CHART_DEMO, CONNECTED_SCATTER_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'ConnectedScatterChart';\nconst DOT_RADIUS = 2.5;\nconst HEIGHTEN_RADIUS = 3.5;\n/** A chevron's length back along the path and its half-width; segments shorter than `CHEVRON_ROOM` get none. */\nconst CHEVRON_BACK = 4;\nconst CHEVRON_HALF = 3;\nconst CHEVRON_ROOM = 14;\n/** Two labels closer than this, in px, would collide: the later one is left to the table. */\nconst LABEL_ROOM = 22;\n\nfunction buildConnectedScatterChart(props: ConnectedScatterChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? CONNECTED_SCATTER_CHART_DEMO;\n const xKey = usesDemo ? CONNECTED_SCATTER_CHART_DEMO_KEYS.xKey : (props.xKey ?? 'x');\n const yKey = usesDemo ? CONNECTED_SCATTER_CHART_DEMO_KEYS.yKey : (props.yKey ?? 'y');\n const labelKey = usesDemo ? CONNECTED_SCATTER_CHART_DEMO_KEYS.labelKey : props.labelKey;\n const arrows = props.arrows !== false;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const xName = accessorName(xKey, 'x');\n const yName = accessorName(yKey, 'y');\n\n const points = readPathPoints(CHART, data, { x: xKey, y: yKey, ...(labelKey === undefined ? {} : { label: labelKey }) });\n checkCeiling(CHART, yName, 'points', points.length);\n const base = modelBase(CHART, props, context, 'Connected scatter', {\n columns: [...(labelKey === undefined ? [] : [accessorName(labelKey, 'label')]), xName, yName],\n rows: data.map((datum, index) => [\n ...(labelKey === undefined ? [] : [formatValue(read(labelKey, datum, index), locale, { useGrouping: false, maximumFractionDigits: 2 })]),\n formatValue(read(xKey, datum, index), locale, numberFormat),\n formatValue(read(yKey, 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) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const inner = inset(plot, HEIGHTEN_RADIUS);\n const axis = valueAxis(inner, extent(points.map((p) => p.y)) ?? [0, 0], { chart: 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 marks start after the value labels at the plot's left edge, as the scatter's do.\n const gutter = Math.min(Math.max(0, ...axis.labels.map((l) => l.text.length * TICK_CHAR)) + 6, inner.width / 3);\n const x = linearScale(extent(points.map((p) => p.x)) ?? [0, 0], [inner.x + gutter, inner.x + inner.width], { chart: 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 const at = points.map((p) => ({ x: x(p.x), y: y(p.y) }));\n strokes.push({ d: at.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x},${p.y}`).join(''), role: 'encoding', part: 'ink' });\n // A chevron at each segment's middle, pointing the way the path runs: exact, encoding.\n if (arrows) {\n for (let i = 1; i < at.length; i += 1) {\n const a = at[i - 1] as { x: number; y: number };\n const b = at[i] as { x: number; y: number };\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const length = Math.sqrt(dx * dx + dy * dy);\n if (length < CHEVRON_ROOM) continue;\n const ux = dx / length;\n const uy = dy / length;\n const mx = (a.x + b.x) / 2;\n const my = (a.y + b.y) / 2;\n const bx = mx - ux * CHEVRON_BACK;\n const by = my - uy * CHEVRON_BACK;\n strokes.push({ d: `M${bx - uy * CHEVRON_HALF},${by + ux * CHEVRON_HALF}L${mx},${my}L${bx + uy * CHEVRON_HALF},${by - ux * CHEVRON_HALF}`, role: 'encoding', part: 'ink' });\n }\n }\n points.forEach((p, i) => {\n const q = at[i] as { x: number; y: number };\n strokes.push({ d: circlePath(q.x, q.y, DOT_RADIUS), role: 'encoding', part: 'ink' });\n hitAreas.push({ seriesKey: yName, index: p.index, datum: p.datum, value: p.y, x: q.x, y: q.y, box: { x: q.x - DOT_RADIUS, y: q.y - DOT_RADIUS, width: 2 * DOT_RADIUS, height: 2 * DOT_RADIUS } });\n });\n\n // Labels at both ends always, and where given, unless one would sit on another.\n const placed: { x: number; y: number }[] = [];\n const name = (i: number) => {\n const label = points[i]?.label;\n if (label !== undefined) return label;\n return i === 0 ? 'start' : i === points.length - 1 ? 'end' : undefined;\n };\n const ends = points.length > 1 ? [0, points.length - 1] : [0];\n const order = [...ends, ...points.map((_, i) => i).filter((i) => !ends.includes(i))];\n for (const i of order) {\n const text = name(i);\n const q = at[i] as { x: number; y: number };\n if (text === undefined || placed.some((p) => Math.abs(p.x - q.x) < LABEL_ROOM && Math.abs(p.y - q.y) < LABEL_ROOM / 2)) continue;\n placed.push(q);\n labels.push({ x: q.x + 5, y: q.y - 5, text, kind: 'tick', part: 'axis', anchor: q.x > plot.x + plot.width * 0.8 ? 'end' : 'start' });\n }\n\n // One heightened element (REQ-442): the path's last point.\n const last = at.at(-1) as { x: number; y: number };\n const mark = circlePath(last.x, last.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 const first = points[0] as (typeof points)[number];\n const end = points.at(-1) as (typeof points)[number];\n const description =\n props.description ??\n `${base.name}. A path through ${points.length} points in data order, ${xName} across and ${yName} up; it starts at ${formatNumber(first.x, locale, numberFormat)}, ${formatNumber(first.y, locale, numberFormat)} and ends at ${formatNumber(end.x, locale, numberFormat)}, ${formatNumber(end.y, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `ConnectedScatterChart` recipe (REQ-413): an ordered path through x-y points, with direction marks. */\nexport const connectedScatterChart: ChartRecipe<ConnectedScatterChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildConnectedScatterChart });\n","/**\n * The hierarchy layouts of the treemap, the sunburst and the tree (DD-028, REQ-416..REQ-418): the\n * tree built from validated rows, a subtree drawn as root (DD-033), squarify, partition and the\n * tidy tree — all owned, with only `+ − × ÷` and comparisons inside them (REQ-435). Rows are\n * validated before they get here (`readHierarchy`, REQ-437).\n */\nimport type { Datum, Rect } from '../../types';\nimport type { HierarchyRow } from './contracts';\n\n/** A node of the tree, with what is derived from its rows (Data Model §2.23). */\nexport interface TreeNode {\n readonly id: string;\n readonly label: string;\n /** The row it came from; `-1` for a synthetic root. */\n readonly index: number;\n readonly datum: Datum;\n readonly parent: TreeNode | null;\n readonly children: readonly TreeNode[];\n readonly depth: number;\n /** Depth-first pre-order, from 0: the keyboard's order (REQ-438). */\n readonly order: number;\n /** A leaf's own value; an internal node's is the sum of its children (I-25). */\n readonly value: number;\n /** The node's value over its parent's; 1 for the root, 0 under a parent of value 0. */\n readonly share: number;\n /** Labels from the data root to the node, for the announcement (DD-031). */\n readonly path: readonly string[];\n}\n\ninterface Building {\n id: string;\n label: string;\n index: number;\n datum: Datum;\n parent: Building | null;\n children: Building[];\n depth: number;\n order: number;\n value: number;\n share: number;\n path: string[];\n}\n\n/** Largest first, ties by id: an order no shuffle of the rows can change (I-23). */\nconst byValue = (a: Building, b: Building) => b.value - a.value || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0);\n\n/** Depth, pre-order, share and path, from `node` down; `path` is the path of its parent. */\nfunction number(node: Building, depth: number, path: readonly string[], counter: { next: number }): void {\n node.depth = depth;\n node.order = counter.next++;\n node.path = [...path, node.label];\n for (const child of node.children) {\n child.share = node.value > 0 ? child.value / node.value : 0;\n number(child, depth + 1, node.path, counter);\n }\n}\n\n/**\n * The tree of validated rows. Siblings keep the data order (`data`), or run largest first with\n * ties by id (`value`), so a value-ordered layout does not depend on the order of the rows.\n */\nexport function stratify(rows: readonly HierarchyRow[], siblings: 'data' | 'value'): TreeNode | undefined {\n const nodes = new Map<string, Building>();\n for (const row of rows) {\n nodes.set(row.id, { id: row.id, label: row.label, index: row.index, datum: row.datum, parent: null, children: [], depth: 0, order: 0, value: row.value, share: 1, path: [] });\n }\n let root: Building | undefined;\n for (const row of rows) {\n const node = nodes.get(row.id) as Building;\n const parent = row.parent === null ? undefined : nodes.get(row.parent);\n if (parent) {\n node.parent = parent;\n parent.children.push(node);\n } else root ??= node;\n }\n if (!root) return undefined;\n // Post-order sums: an internal node's own value is ignored (Data Model §2.23).\n const sum = (node: Building): number => {\n if (node.children.length > 0) node.value = node.children.reduce((total, child) => total + sum(child), 0);\n return node.value;\n };\n sum(root);\n if (siblings === 'value') {\n const sort = (node: Building): void => {\n node.children.sort(byValue);\n node.children.forEach(sort);\n };\n sort(root);\n }\n root.share = 1;\n number(root, 0, [], { next: 0 });\n return root;\n}\n\n/** Every node, in pre-order. */\nexport function flatten(root: TreeNode): TreeNode[] {\n const out: TreeNode[] = [];\n const walk = (node: TreeNode) => {\n out.push(node);\n node.children.forEach(walk);\n };\n walk(root);\n return out;\n}\n\n/**\n * The subtree of `rootId` drawn as root (DD-033): a copy renumbered from its own root — depth 0,\n * share 1, pre-order from 0 — whose paths still run from the data root, and `up`, the node the\n * centre or the frame returns to. The input is not touched. An unknown or absent id is the data root.\n */\nexport function reroot(root: TreeNode, rootId: string | null | undefined): { root: TreeNode; up: TreeNode | null } {\n const found = rootId === null || rootId === undefined ? undefined : flatten(root).find((n) => n.id === rootId);\n if (!found || found === root) return { root, up: null };\n const copy = (node: TreeNode, parent: Building | null): Building => {\n const made: Building = { ...node, parent, children: [], path: [...node.path] } as Building;\n made.children = node.children.map((child) => copy(child, made));\n return made;\n };\n const top = copy(found, null);\n top.share = 1;\n number(top, 0, found.path.slice(0, -1), { next: 0 });\n return { root: top, up: found.parent };\n}\n\n/** Each node's span of its root, `[start, end]` in 0–1, children in order inside their parent's (I-25). */\nexport function partition(root: TreeNode): Map<string, readonly [number, number]> {\n const spans = new Map<string, readonly [number, number]>();\n const walk = (node: TreeNode, start: number, end: number) => {\n spans.set(node.id, [start, end]);\n let at = start;\n for (const child of node.children) {\n const width = node.value > 0 ? ((end - start) * child.value) / node.value : 0;\n // The last child ends exactly where its parent does, whatever the sum's last bit says.\n const next = child === node.children.at(-1) ? end : at + width;\n walk(child, at, next);\n at = next;\n }\n };\n walk(root, 0, 1);\n return spans;\n}\n\n/** The worst aspect ratio of a row of `areas` laid along a side of length `side` (Bruls et al.). */\nfunction worst(areas: readonly number[], side: number): number {\n let sum = 0;\n let max = 0;\n let min = Number.POSITIVE_INFINITY;\n for (const a of areas) {\n sum += a;\n if (a > max) max = a;\n if (a < min) min = a;\n }\n const s2 = sum * sum;\n const w2 = side * side;\n return Math.max((w2 * max) / s2, s2 / (w2 * min));\n}\n\n/**\n * Squarified tiles of `rect` for `values`, in the given order (Bruls, Huizing and van Wijk): rows\n * are laid along the shorter side, and a tile joins the row while it does not worsen the row's\n * worst aspect ratio. Tile areas are proportional to the values (I-25); a zero value gets a tile of\n * no area at the row's end.\n */\nexport function squarify(values: readonly number[], rect: Rect): Rect[] {\n const total = values.reduce((sum, v) => sum + (v > 0 ? v : 0), 0);\n const tiles: Rect[] = values.map(() => ({ x: rect.x, y: rect.y, width: 0, height: 0 }));\n if (total <= 0) return values.length === 0 ? [] : tiles;\n const scale = (rect.width * rect.height) / total;\n const queue = values.map((v, i) => [v > 0 ? v * scale : 0, i] as const).filter(([a]) => a > 0);\n let free = { ...rect };\n let k = 0;\n while (k < queue.length) {\n const side = Math.min(free.width, free.height);\n const row = [queue[k] as readonly [number, number]];\n k += 1;\n while (k < queue.length) {\n const next = queue[k] as readonly [number, number];\n if (worst([...row, next].map(([a]) => a), side) > worst(row.map(([a]) => a), side)) break;\n row.push(next);\n k += 1;\n }\n const sum = row.reduce((s, [a]) => s + a, 0);\n const last = k === queue.length;\n if (free.width >= free.height) {\n // A column along the left edge, as tall as the free rectangle.\n const width = last ? free.width : sum / free.height;\n let y = free.y;\n row.forEach(([a, i], j) => {\n const height = j === row.length - 1 ? free.y + free.height - y : a / width;\n tiles[i] = { x: free.x, y, width, height };\n y += height;\n });\n free = { x: free.x + width, y: free.y, width: free.width - width, height: free.height };\n } else {\n // A row along the top edge, as wide as the free rectangle.\n const height = last ? free.height : sum / free.width;\n let x = free.x;\n row.forEach(([a, i], j) => {\n const width = j === row.length - 1 ? free.x + free.width - x : a / height;\n tiles[i] = { x, y: free.y, width, height };\n x += width;\n });\n free = { x: free.x, y: free.y + height, width: free.width, height: free.height - height };\n }\n }\n return tiles;\n}\n\n/** Walker's per-node state, as Buchheim, Jünger and Leipert name it. */\ninterface Walk {\n readonly node: TreeNode;\n readonly children: Walk[];\n readonly parent: Walk | null;\n /** 1-based position among its siblings. */\n readonly number: number;\n prelim: number;\n mod: number;\n shift: number;\n change: number;\n thread: Walk | null;\n ancestor: Walk;\n}\n\n/** The gap between neighbouring nodes of one depth, in layout units. */\nconst GAP = 1;\n\n/**\n * The tidy tree of `root` (REQ-418): Buchheim, Jünger and Leipert's linear-time version of the\n * Reingold–Tilford algorithm with Walker's spreading of the smaller subtrees. `x` is the position\n * across the depth, in node gaps from the leftmost node; `y` is the depth. No two nodes of one depth\n * are closer than one gap, and every parent is centred over its children.\n */\nexport function tidyTree(root: TreeNode): Map<string, { x: number; y: number }> {\n const build = (node: TreeNode, parent: Walk | null, n: number): Walk => {\n const walk = { node, children: [] as Walk[], parent, number: n, prelim: 0, mod: 0, shift: 0, change: 0, thread: null } as unknown as Walk;\n walk.ancestor = walk;\n node.children.forEach((child, i) => walk.children.push(build(child, walk, i + 1)));\n return walk;\n };\n const top = build(root, null, 1);\n const leftSibling = (v: Walk) => (v.parent && v.number > 1 ? (v.parent.children[v.number - 2] as Walk) : null);\n const leftmostSibling = (v: Walk) => (v.parent && v.number > 1 ? (v.parent.children[0] as Walk) : null);\n const nextLeft = (v: Walk) => v.children[0] ?? v.thread;\n const nextRight = (v: Walk) => v.children.at(-1) ?? v.thread;\n\n const moveSubtree = (wm: Walk, wp: Walk, shift: number) => {\n const subtrees = wp.number - wm.number;\n wp.change -= shift / subtrees;\n wp.shift += shift;\n wm.change += shift / subtrees;\n wp.prelim += shift;\n wp.mod += shift;\n };\n const executeShifts = (v: Walk) => {\n let shift = 0;\n let change = 0;\n for (let i = v.children.length - 1; i >= 0; i -= 1) {\n const w = v.children[i] as Walk;\n w.prelim += shift;\n w.mod += shift;\n change += w.change;\n shift += w.shift + change;\n }\n };\n const ancestorOf = (vim: Walk, v: Walk, fallback: Walk) => (vim.ancestor.parent === v.parent ? vim.ancestor : fallback);\n\n const apportion = (v: Walk, defaultAncestor: Walk): Walk => {\n const w = leftSibling(v);\n if (!w) return defaultAncestor;\n let vip: Walk = v;\n let vop: Walk = v;\n let vim: Walk = w;\n let vom: Walk = leftmostSibling(v) as Walk;\n let sip = vip.mod;\n let sop = vop.mod;\n let sim = vim.mod;\n let som = vom.mod;\n let ancestor = defaultAncestor;\n while (nextRight(vim) && nextLeft(vip)) {\n vim = nextRight(vim) as Walk;\n vip = nextLeft(vip) as Walk;\n vom = nextLeft(vom) as Walk;\n vop = nextRight(vop) as Walk;\n vop.ancestor = v;\n const shift = vim.prelim + sim - (vip.prelim + sip) + GAP;\n if (shift > 0) {\n moveSubtree(ancestorOf(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.mod;\n sip += vip.mod;\n som += vom.mod;\n sop += vop.mod;\n }\n if (nextRight(vim) && !nextRight(vop)) {\n vop.thread = nextRight(vim);\n vop.mod += sim - sop;\n }\n if (nextLeft(vip) && !nextLeft(vom)) {\n vom.thread = nextLeft(vip);\n vom.mod += sip - som;\n ancestor = v;\n }\n return ancestor;\n };\n\n const firstWalk = (v: Walk) => {\n const w = leftSibling(v);\n if (v.children.length === 0) {\n v.prelim = w ? w.prelim + GAP : 0;\n return;\n }\n let defaultAncestor = v.children[0] as Walk;\n for (const child of v.children) {\n firstWalk(child);\n defaultAncestor = apportion(child, defaultAncestor);\n }\n executeShifts(v);\n const midpoint = ((v.children[0] as Walk).prelim + (v.children.at(-1) as Walk).prelim) / 2;\n if (w) {\n v.prelim = w.prelim + GAP;\n v.mod = v.prelim - midpoint;\n } else v.prelim = midpoint;\n };\n\n const at = new Map<string, { x: number; y: number }>();\n const secondWalk = (v: Walk, m: number) => {\n at.set(v.node.id, { x: v.prelim + m, y: v.node.depth - root.depth });\n for (const child of v.children) secondWalk(child, m + v.mod);\n };\n firstWalk(top);\n secondWalk(top, -top.prelim);\n // From the leftmost node: every x at or above 0.\n let left = Number.POSITIVE_INFINITY;\n for (const p of at.values()) if (p.x < left) left = p.x;\n for (const p of at.values()) p.x -= left;\n return at;\n}\n","import type { HitArea } from '../types';\n\n/**\n * The tree keyboard model, the WAI-ARIA tree pattern (REQ-438, DD-031), as `moves` on each hit\n * area: Down and Up to the next and previous node in depth-first pre-order, Right to the first\n * child (a leaf stays), Left to the parent (the root stays), Home and End to the first and last\n * node. Right always descends and Left always ascends, whatever the writing direction: the model\n * takes none, as the APG trees do. Only a chart that lays out a hierarchy imports this module, so\n * no other chart carries it (REQ-444); `stepActive` follows the moves.\n */\nexport function treeMoves(hits: readonly HitArea[]): HitArea[] {\n const order = hits.map((hit, i) => [hit, i] as const).sort((a, b) => (a[0].node?.order ?? 0) - (b[0].node?.order ?? 0));\n const indexOf = (id: string | null | undefined) => order.find(([hit]) => id !== null && hit.node?.id === id)?.[1];\n const first = order[0]?.[1];\n const last = order.at(-1)?.[1];\n return hits.map((hit, i) => {\n const position = order.findIndex(([, k]) => k === i);\n const id = hit.node?.id;\n const moves = {\n ArrowDown: order[position + 1]?.[1],\n ArrowUp: order[position - 1]?.[1],\n ArrowRight: order.find(([h]) => id !== undefined && h.node?.parent === id)?.[1],\n ArrowLeft: indexOf(hit.node?.parent),\n Home: first,\n End: last,\n };\n return { ...hit, moves: Object.fromEntries(Object.entries(moves).filter(([, to]) => to !== undefined)) as HitArea['moves'] };\n });\n}\n\n/**\n * The label a hierarchy item announces (DD-031): its path from the root, its value and, below the\n * root, its share of its parent — \"Budget › Operations › Travel: 12,400, 8% of Operations\". The\n * parts arrive formatted, so the readout, the table and the announcement say the same.\n */\nexport function treeLabel(path: readonly string[], value: string, share?: string): string {\n const head = `${path.join(' › ')}: ${value}`;\n const parent = path.at(-2);\n return share === undefined || parent === undefined ? head : `${head}, ${share} of ${parent}`;\n}\n","/**\n * What the three hierarchy charts share (REQ-416..REQ-418, DD-031, DD-033): rows validated and\n * built into a tree, the controlled root and the depth drawn, the tabular alternative in pre-order,\n * and each drawn node's hit area — its frozen summary, its place in the tree and its moves.\n */\nimport { warnValue } from './cells';\nimport { checkCeiling, checkWhole, readHierarchy } from './contracts';\nimport { accessorName, formatNumber, numberFormatter } from './format';\nimport { flatten, reroot, stratify, type TreeNode } from './hierarchy';\nimport { treeMoves } from '../../interaction/tree';\nimport type { Accessor, CommonChartProps, DataTable, Datum, HitArea, RecipeContext } from '../../types';\n\n/** A column name and a share of the parent, as the table and the announcement print it. */\nconst SHARE: Intl.NumberFormatOptions = { style: 'percent', maximumFractionDigits: 1 };\n\nexport interface HierarchyKeys {\n readonly id: Accessor<unknown>;\n readonly parent: Accessor<unknown>;\n readonly label?: Accessor<unknown>;\n readonly value?: Accessor<unknown>;\n}\n\nexport interface ReadTree {\n /** The tree drawn: the data root, or the subtree of `rootId`. `undefined` with no valid row. */\n readonly root: TreeNode | undefined;\n /** Where the centre or the frame returns to: the drawn root's parent, `null` at the data root. */\n readonly up: TreeNode | null;\n /** Every node of the drawn tree, in pre-order: `nodes[i].order === i`, the table's row `i`. */\n readonly nodes: readonly TreeNode[];\n /** Levels drawn below the root. */\n readonly depth: number;\n readonly valueName: string;\n readonly table: Omit<DataTable, 'caption'>;\n /** The value cell of a node: its value and, below the root, its share of its parent. */\n readonly valueText: (node: TreeNode) => string;\n}\n\n/**\n * Reads a hierarchy chart's rows into the tree it draws. `siblings` orders children; `rootId` and\n * `depth` are the chart's view props (an unknown `rootId` is the data root, warned `SP002`).\n */\nexport function readTree(\n chart: string,\n data: readonly Datum[],\n keys: HierarchyKeys,\n props: CommonChartProps & { readonly rootId?: string | null; readonly depth?: number },\n context: RecipeContext,\n siblings: 'data' | 'value',\n): ReadTree {\n const { locale } = context;\n const valueName = keys.value === undefined ? 'leaves' : accessorName(keys.value, 'value');\n const rows = readHierarchy(chart, data, keys, props.title ?? 'All').rows;\n checkCeiling(chart, accessorName(keys.id, 'id'), 'nodes', rows.length);\n // Without a value key, a node counts its leaves: every leaf is 1 (TreeChart).\n const tree = stratify(keys.value === undefined ? rows.map((r) => ({ ...r, value: 1 })) : rows, siblings);\n let root = tree;\n let up: TreeNode | null = null;\n if (tree && props.rootId !== undefined && props.rootId !== null) {\n const rerooted = reroot(tree, props.rootId);\n if (rerooted.root === tree && props.rootId !== tree.id) warnValue(chart, 'rootId', `\"${props.rootId}\" names no node; the data root is drawn.`);\n root = rerooted.root;\n up = rerooted.up;\n }\n const nodes = root ? flatten(root) : [];\n const deepest = nodes.reduce((max, n) => Math.max(max, n.depth), 0);\n const depth = Math.min(checkWhole(chart, 'depth', props.depth, 1) ?? deepest, deepest);\n\n const value = numberFormatter(locale, props.numberFormat);\n const share = numberFormatter(locale, SHARE);\n const valueText = (node: TreeNode) => {\n const parent = node === root ? null : node.parent;\n return parent ? `${value(node.value)}, ${share(node.share)} of ${parent.label}` : value(node.value);\n };\n return {\n root,\n up,\n nodes,\n depth,\n valueName,\n valueText,\n table: { columns: ['node', valueName], rows: nodes.map((n) => [n.path.join(' › '), valueText(n)]) },\n };\n}\n\n/**\n * Hit areas for the drawn nodes, given where each sits: the frozen summary of API delta §4, the\n * node's place in the tree (`index` is its pre-order), and the tree's moves (REQ-438). The drawn\n * root's summary names `up`, the id its centre or frame returns to (`null`: the data root).\n */\nexport function nodeHitAreas(\n read: ReadTree,\n placed: readonly { readonly node: TreeNode; readonly x: number; readonly y: number; readonly box?: HitArea['box'] }[],\n): HitArea[] {\n const { root, up } = read;\n const hits = placed.map(({ node, x, y, box }): HitArea => {\n const summary: Record<string, unknown> = { id: node.id, path: node.path, value: node.value, share: node.share };\n if (node === root && up) summary.up = up.parent === null ? null : up.id;\n return {\n seriesKey: read.valueName,\n index: node.order,\n datum: Object.freeze(summary),\n value: node.value,\n x,\n y,\n ...(box ? { box } : {}),\n node: { id: node.id, parent: node === root ? null : (node.parent?.id ?? null), depth: node.depth, order: node.order },\n };\n });\n return treeMoves(hits);\n}\n\n/** \"3 levels, 38 nodes, 24 leaves, totalling 150,000\", for a description. */\nexport function treeSummary(read: ReadTree, locale: string, numberFormat: Intl.NumberFormatOptions | undefined): string {\n const leaves = read.nodes.filter((n) => n.children.length === 0).length;\n const root = read.root as TreeNode;\n return `${read.depth + 1} levels, ${read.nodes.length} nodes, ${leaves} leaves, rooted at ${root.path.join(' › ')}, totalling ${formatNumber(root.value, locale, numberFormat)}`;\n}\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `SquarifiedTreemap` (REQ-416): a fictional city budget: a root, 5 departments, 16 programmes and 16 budget lines, values on the 24 leaves. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const SQUARIFIED_TREEMAP_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { id: 'budget', parent: null, name: 'City budget' },\n { id: 'works', parent: 'budget', name: 'Public works' },\n { id: 'works-01', parent: 'works', name: 'Roads' },\n { id: 'works-01-a', parent: 'works-01', name: 'Roads: staff', amount: 1760 },\n { id: 'works-01-b', parent: 'works-01', name: 'Roads: materials', amount: 390 },\n { id: 'works-02', parent: 'works', name: 'Bridges', amount: 6154 },\n { id: 'works-03', parent: 'works', name: 'Water mains' },\n { id: 'works-03-a', parent: 'works-03', name: 'Water mains: staff', amount: 2069 },\n { id: 'works-03-b', parent: 'works-03', name: 'Water mains: materials', amount: 809 },\n { id: 'works-04', parent: 'works', name: 'Street lighting', amount: 8015 },\n { id: 'parks', parent: 'budget', name: 'Parks' },\n { id: 'parks-05', parent: 'parks', name: 'Playgrounds' },\n { id: 'parks-05-a', parent: 'parks-05', name: 'Playgrounds: staff', amount: 2165 },\n { id: 'parks-05-b', parent: 'parks-05', name: 'Playgrounds: materials', amount: 2865 },\n { id: 'parks-06', parent: 'parks', name: 'Tree care', amount: 2835 },\n { id: 'parks-07', parent: 'parks', name: 'Sports fields' },\n { id: 'parks-07-a', parent: 'parks-07', name: 'Sports fields: staff', amount: 2455 },\n { id: 'parks-07-b', parent: 'parks-07', name: 'Sports fields: materials', amount: 306 },\n { id: 'safety', parent: 'budget', name: 'Safety' },\n { id: 'safety-08', parent: 'safety', name: 'Fire service', amount: 1805 },\n { id: 'safety-09', parent: 'safety', name: 'Lifeguards' },\n { id: 'safety-09-a', parent: 'safety-09', name: 'Lifeguards: staff', amount: 2271 },\n { id: 'safety-09-b', parent: 'safety-09', name: 'Lifeguards: materials', amount: 2953 },\n { id: 'safety-10', parent: 'safety', name: 'Emergency planning', amount: 6265 },\n { id: 'culture', parent: 'budget', name: 'Culture' },\n { id: 'culture-11', parent: 'culture', name: 'Libraries' },\n { id: 'culture-11-a', parent: 'culture-11', name: 'Libraries: staff', amount: 912 },\n { id: 'culture-11-b', parent: 'culture-11', name: 'Libraries: materials', amount: 2265 },\n { id: 'culture-12', parent: 'culture', name: 'Museum', amount: 2999 },\n { id: 'culture-13', parent: 'culture', name: 'Festivals' },\n { id: 'culture-13-a', parent: 'culture-13', name: 'Festivals: staff', amount: 1275 },\n { id: 'culture-13-b', parent: 'culture-13', name: 'Festivals: materials', amount: 185 },\n { id: 'admin', parent: 'budget', name: 'Administration' },\n { id: 'admin-14', parent: 'admin', name: 'Payroll', amount: 6768 },\n { id: 'admin-15', parent: 'admin', name: 'Records' },\n { id: 'admin-15-a', parent: 'admin-15', name: 'Records: staff', amount: 3281 },\n { id: 'admin-15-b', parent: 'admin-15', name: 'Records: materials', amount: 310 },\n { id: 'admin-16', parent: 'admin', name: 'IT services', amount: 8252 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const SQUARIFIED_TREEMAP_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n idKey: 'id',\n parentKey: 'parent',\n labelKey: 'name',\n valueKey: 'amount',\n} as const);\n","import type { ChartModel, ChartRecipe, HitArea, Rect, RecipeContext, SquarifiedTreemapProps, Stroke, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { TICK_CHAR } from '../shared/cartesian';\nimport { inset, rectPath, ringTone, warnValue } from '../shared/cells';\nimport { fitText, formatNumber } from '../shared/format';\nimport { squarify, type TreeNode } from '../shared/hierarchy';\nimport { nodeHitAreas, readTree, treeSummary } from '../shared/nodes';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { SQUARIFIED_TREEMAP_DEMO, SQUARIFIED_TREEMAP_DEMO_KEYS } from './demo';\n\nconst CHART = 'SquarifiedTreemap';\n/** A label's line: its baseline below the line's top, and the line's height. */\nconst BASELINE = 10;\nconst LINE = 13;\n/** A tile narrower or shorter than this carries no label; the table and the readout name it. */\nconst LABEL_WIDTH = 28;\n\nconst PERCENT: Intl.NumberFormatOptions = { style: 'percent', maximumFractionDigits: 0 };\n\nfunction buildSquarifiedTreemap(props: SquarifiedTreemapProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? SQUARIFIED_TREEMAP_DEMO;\n const k = SQUARIFIED_TREEMAP_DEMO_KEYS;\n const keys = usesDemo\n ? { id: k.idKey, parent: k.parentKey, label: k.labelKey, value: k.valueKey }\n : { id: props.idKey ?? 'id', parent: props.parentKey ?? 'parent', value: props.valueKey ?? 'value', ...(props.labelKey === undefined ? {} : { label: props.labelKey }) };\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n // Largest first, ties by id: squarify's order, and one no shuffle of the rows can change (I-23).\n const read = readTree(CHART, data, keys, props, context, 'value');\n const base = modelBase(CHART, props, context, 'Treemap', read.table);\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, 2);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const root = read.root;\n\n if (root && root.value <= 0) warnValue(CHART, read.valueName, 'Every leaf is zero; a treemap has nothing to divide.');\n if (!root || root.value <= 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n // Every drawn node's rectangle: the root is the plot, children squarified inside their parent.\n const rects = new Map<TreeNode, Rect>([[root, plot]]);\n const drawn: TreeNode[] = [root];\n const lay = (node: TreeNode) => {\n if (node.depth >= read.depth) return;\n const children = node.children.filter((c) => c.value > 0);\n const tiles = squarify(children.map((c) => c.value), rects.get(node) as Rect);\n children.forEach((child, i) => {\n rects.set(child, tiles[i] as Rect);\n drawn.push(child);\n lay(child);\n });\n };\n lay(root);\n drawn.sort((a, b) => a.order - b.order);\n\n // Tone by the first level below the root, the ring's rule (DD-032, REQ-440): leaves inherit it.\n const first = root.children.filter((c) => c.value > 0);\n const toneOf = new Map<TreeNode, ToneLevel>();\n const tone = (node: TreeNode): ToneLevel => {\n const known = toneOf.get(node);\n if (known) return known;\n const own = node.depth <= 1 ? ringTone(Math.max(first.indexOf(node), 0), first.length) : tone(node.parent as TreeNode);\n toneOf.set(node, own);\n return own;\n };\n // A root drawn alone (a leaf as `rootId`) is its own tile.\n const isTile = (node: TreeNode) => (node !== root || drawn.length === 1) && (node.depth === read.depth || node.children.every((c) => c.value <= 0));\n\n const share = (node: TreeNode) => formatNumber(node.value / root.value, locale, PERCENT);\n /** Where a first-level frame's name sits, so a leaf label below it does not cover it. */\n const headers: Rect[] = [];\n for (const node of drawn) {\n if (node === root && !isTile(node)) continue;\n const r = rects.get(node) as Rect;\n if (isTile(node)) {\n strokes.push({ d: rectPath(r), role: 'encoding', part: 'ink', tone: tone(node) });\n } else {\n // An internal node: its frame, heavier for the first level, over its tiles.\n strokes.push({ d: rectPath(r), role: 'encoding', part: 'ink', paint: 'stroke', ...(node.depth === 1 ? { weight: 2 } : {}) });\n }\n if (node.depth === 1 && r.width >= LABEL_WIDTH && r.height >= LINE) {\n labels.push({ x: r.x + 3, y: r.y + BASELINE, text: fitText(`${node.label} ${share(node)}`, r.width - 6), kind: 'tick', part: 'text', anchor: 'start' });\n headers.push({ x: r.x, y: r.y, width: r.width, height: LINE });\n }\n }\n // Leaf names, where the tile holds them: below a first-level name when they would meet it.\n for (const node of drawn) {\n if (node.depth < 2 || !isTile(node)) continue;\n const r = rects.get(node) as Rect;\n const covered = headers.some((h) => r.x < h.x + h.width && h.x < r.x + r.width && r.y < h.y + h.height);\n const top = covered ? r.y + LINE : r.y;\n if (r.width < LABEL_WIDTH || r.y + r.height - top < LINE || node.label.length * TICK_CHAR > r.width * 3) continue;\n labels.push({ x: r.x + 3, y: top + BASELINE, text: fitText(node.label, r.width - 6), kind: 'tick', part: 'text', anchor: 'start' });\n }\n\n const hitAreas: HitArea[] = nodeHitAreas(\n read,\n drawn.map((node) => {\n const r = rects.get(node) as Rect;\n return { node, x: r.x + r.width / 2, y: r.y + r.height / 2, box: r };\n }),\n );\n\n // One heightened element (REQ-442): the largest tile, the tile itself.\n const tiles = drawn.filter(isTile);\n const largest = tiles.reduce((a, b) => (b.value > a.value ? b : a));\n strokes.push({ d: rectPath(rects.get(largest) as Rect), role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const description =\n props.description ??\n `${base.name}. Squarified treemap of ${treeSummary(read, locale, numberFormat)}; each tile's area is its value. The largest tile is ${largest.path.join(' › ')}, ${share(largest)} of the whole.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `SquarifiedTreemap` recipe (REQ-416): a hierarchy laid out by the squarified algorithm, frames per level. */\nexport const squarifiedTreemap: ChartRecipe<SquarifiedTreemapProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildSquarifiedTreemap });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\n/** Demo dataset of `SunburstChart` (REQ-417): the treemap's city budget. */\nexport { SQUARIFIED_TREEMAP_DEMO as SUNBURST_CHART_DEMO } from '../squarified-treemap/demo';\n\nexport const SUNBURST_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n idKey: 'id',\n parentKey: 'parent',\n labelKey: 'name',\n valueKey: 'amount',\n} as const);\n","import type { ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke, SunburstChartProps, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { TICK_CHAR } from '../shared/cartesian';\nimport { ringTone, warnValue } from '../shared/cells';\nimport { circlePath, fitText, formatNumber } from '../shared/format';\nimport { partition, type TreeNode } from '../shared/hierarchy';\nimport { nodeHitAreas, readTree, treeSummary } from '../shared/nodes';\nimport { pointAt, polarFrame, sectorLegend, sectorPath } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { SUNBURST_CHART_DEMO, SUNBURST_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'SunburstChart';\n/** The legend sits beside the rings when the area is at least this much wider than tall (as the donut's). */\nconst LEGEND_ASPECT = 1.5;\nconst LEGEND_GAP = 14;\nconst TURN = 2 * Math.PI;\nconst PERCENT: Intl.NumberFormatOptions = { style: 'percent', maximumFractionDigits: 0 };\n\nfunction buildSunburstChart(props: SunburstChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? SUNBURST_CHART_DEMO;\n const k = SUNBURST_CHART_DEMO_KEYS;\n const keys = usesDemo\n ? { id: k.idKey, parent: k.parentKey, label: k.labelKey, value: k.valueKey }\n : { id: props.idKey ?? 'id', parent: props.parentKey ?? 'parent', value: props.valueKey ?? 'value', ...(props.labelKey === undefined ? {} : { label: props.labelKey }) };\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n // Largest first, ties by id, clockwise from 12 o'clock: no shuffle of the rows moves an arc (I-23).\n const read = readTree(CHART, data, keys, props, context, 'value');\n const base = modelBase(CHART, props, context, 'Sunburst', read.table);\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 root = read.root;\n\n if (root && root.value <= 0) warnValue(CHART, read.valueName, 'Every leaf is zero; a sunburst has nothing to divide.');\n if (!root || root.value <= 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 ringArea = withLegend ? { x: plot.x, y: plot.y, width: plot.height, height: plot.height } : plot;\n const frame = polarFrame(ringArea);\n // The drawn root is the centre disc; each level below it a ring of equal width.\n const ring = frame.radius / (read.depth + 1);\n const spans = partition(root);\n const drawn = read.nodes.filter((n) => n.depth <= read.depth && n.value > 0);\n const first = root.children.filter((c) => c.value > 0);\n const share = (node: TreeNode) => formatNumber(node.value / root.value, locale, PERCENT);\n\n // Tone by the first ring, the ring's rule (DD-032, REQ-440): an outer arc takes its ancestor's.\n const toneOf = new Map<TreeNode, ToneLevel>();\n const tone = (node: TreeNode): ToneLevel => {\n const known = toneOf.get(node);\n if (known) return known;\n const own = node.depth <= 1 ? ringTone(Math.max(first.indexOf(node), 0), first.length) : tone(node.parent as TreeNode);\n toneOf.set(node, own);\n return own;\n };\n\n const centre = circlePath(frame.cx, frame.cy, ring);\n strokes.push({ d: centre, role: 'encoding', part: 'ink', paint: 'stroke' });\n const paths = new Map<TreeNode, string>();\n const placed = drawn.map((node) => {\n if (node === root) return { node, x: frame.cx, y: frame.cy };\n const [s, e] = spans.get(node.id) as readonly [number, number];\n const start = s * TURN;\n const end = e * TURN;\n const shape = { inner: node.depth * ring, outer: (node.depth + 1) * ring, start, end };\n const d = sectorPath(frame, shape);\n paths.set(node, d);\n if (d) strokes.push({ d, role: 'encoding', part: 'ink', tone: tone(node) });\n const middle = pointAt(frame, (start + end) / 2, (shape.inner + shape.outer) / 2);\n // A first-ring arc long enough for its name carries it, centred on the arc (REQ-440).\n const text = node.label;\n if (node.depth === 1 && ((end - start) * (shape.inner + shape.outer)) / 2 >= Math.min(text.length, 10) * TICK_CHAR && ring >= 12) {\n labels.push({ x: middle.x, y: middle.y + 3, text: fitText(text, ((end - start) * (shape.inner + shape.outer)) / 2), kind: 'tick', part: 'text', anchor: 'middle' });\n }\n return { node, x: middle.x, y: middle.y };\n });\n // The centre names the drawn root and its total; activating it returns to `up` (DD-033).\n labels.push({ x: frame.cx, y: frame.cy + 3, text: fitText(root.label, ring * 2 - 6), kind: 'tick', part: 'text', anchor: 'middle' });\n\n if (withLegend) {\n const x = ringArea.x + ringArea.width + LEGEND_GAP;\n const key = sectorLegend({ x, y: plot.y, width: Math.max(plot.x + plot.width - x, 1), height: plot.height }, first.map((n) => ({ name: n.label, share: share(n), tone: tone(n) })));\n strokes.push(...key.strokes);\n labels.push(...key.labels);\n }\n\n const hitAreas: HitArea[] = nodeHitAreas(read, placed);\n\n // One heightened element (REQ-442): the largest first-ring arc, the arc itself.\n // A root drawn alone (a leaf as `rootId`) heightens the centre.\n const largest = first.length > 0 ? first.reduce((a, b) => (b.value > a.value ? b : a)) : root;\n const raised = paths.get(largest) ?? centre;\n strokes.push({ d: raised, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const description =\n props.description ??\n `${base.name}. Sunburst of ${treeSummary(read, locale, numberFormat)}; each arc's angle is its value, each ring a level.${largest === root ? '' : ` The largest first-level arc is ${largest.label}, ${share(largest)} of the whole.`}`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `SunburstChart` recipe (REQ-417): a hierarchy as concentric rings of arcs, angle ∝ value, with a controlled root. */\nexport const sunburstChart: ChartRecipe<SunburstChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildSunburstChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\n/** Demo dataset of `TreeChart` (REQ-418): the treemap's city budget. */\nexport { SQUARIFIED_TREEMAP_DEMO as TREE_CHART_DEMO } from '../squarified-treemap/demo';\n\nexport const TREE_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n idKey: 'id',\n parentKey: 'parent',\n labelKey: 'name',\n valueKey: 'amount',\n} as const);\n","import type { ChartModel, ChartRecipe, HitArea, Rect, RecipeContext, Stroke, TextLabel, TreeChartProps } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { PLOT_INSET, TICK_CHAR } from '../shared/cartesian';\nimport { circlePath, fitText } from '../shared/format';\nimport { tidyTree, type TreeNode } from '../shared/hierarchy';\nimport { nodeHitAreas, readTree, treeSummary } from '../shared/nodes';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { TREE_CHART_DEMO, TREE_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'TreeChart';\nconst NODE_RADIUS = 3;\nconst HEIGHTEN_RADIUS = 3.5;\n/** Two labels nearer than this across the depth would collide: the later one is left to the table. */\nconst LABEL_GAP = 10;\n\nfunction buildTreeChart(props: TreeChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? TREE_CHART_DEMO;\n const k = TREE_CHART_DEMO_KEYS;\n const keys = usesDemo\n ? { id: k.idKey, parent: k.parentKey, label: k.labelKey, value: k.valueKey }\n : {\n id: props.idKey ?? 'id',\n parent: props.parentKey ?? 'parent',\n ...(props.labelKey === undefined ? {} : { label: props.labelKey }),\n ...(props.valueKey === undefined ? {} : { value: props.valueKey }),\n };\n const horizontal = props.orientation !== 'vertical';\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n // A tree keeps the data's sibling order: an organisation reads in the order it is given.\n const read = readTree(CHART, data, keys, props, context, 'data');\n const base = modelBase(CHART, props, context, 'Tree', read.table);\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 area = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const root = read.root;\n if (!root) return emptyModel(base, props, context, { viewBox: card.viewBox, plot: area, strokes, labels }, data.length === 0);\n\n const at = tidyTree(root);\n const depth = Math.max(read.depth, 1);\n let breadth = 0;\n for (const p of at.values()) if (p.x > breadth) breadth = p.x;\n // Room for the names: the root's before it and the leaves' after them (horizontal), or the\n // leaves' below them (vertical).\n const longest = (nodes: readonly TreeNode[]) => Math.max(0, ...nodes.map((n) => n.label.length * TICK_CHAR));\n const leaves = read.nodes.filter((n) => n.children.length === 0 && n.depth === read.depth);\n const before = horizontal ? Math.min(longest([root]) + 8, area.width / 5) : 0;\n const after = horizontal ? Math.min(longest(leaves) + 8, area.width / 3) : 14;\n const plot: Rect = horizontal\n ? { x: area.x + PLOT_INSET + before, y: area.y + PLOT_INSET, width: Math.max(area.width - 2 * PLOT_INSET - before - after, 1), height: Math.max(area.height - 2 * PLOT_INSET, 1) }\n : { x: area.x + PLOT_INSET, y: area.y + PLOT_INSET + 6, width: Math.max(area.width - 2 * PLOT_INSET, 1), height: Math.max(area.height - 2 * PLOT_INSET - 6 - after, 1) };\n const across = (x: number) => (breadth > 0 ? x / breadth : 0.5);\n const position = (node: TreeNode) => {\n const p = at.get(node.id) as { x: number; y: number };\n return horizontal\n ? { x: plot.x + (p.y / depth) * plot.width, y: plot.y + across(p.x) * plot.height }\n : { x: plot.x + across(p.x) * plot.width, y: plot.y + (p.y / depth) * plot.height };\n };\n const place = new Map(read.nodes.map((n) => [n, position(n)] as const));\n\n // Links, parent to child: an exact cubic with its tangents along the depth (encoding: the tree is the data).\n for (const node of read.nodes) {\n if (node === root) continue;\n const a = place.get(node.parent as TreeNode) as { x: number; y: number };\n const b = place.get(node) as { x: number; y: number };\n const d = horizontal\n ? `M${a.x},${a.y}C${(a.x + b.x) / 2},${a.y},${(a.x + b.x) / 2},${b.y},${b.x},${b.y}`\n : `M${a.x},${a.y}C${a.x},${(a.y + b.y) / 2},${b.x},${(a.y + b.y) / 2},${b.x},${b.y}`;\n strokes.push({ d, role: 'encoding', part: 'ink' });\n }\n for (const node of read.nodes) {\n const p = place.get(node) as { x: number; y: number };\n strokes.push({ d: circlePath(p.x, p.y, NODE_RADIUS), role: 'encoding', part: 'ink' });\n }\n\n // Names: each leaf past its node, the root before it, an inner node beside it; thinned so none\n // collide (the table and the announcement name every node, REQ-121).\n const lastAt = new Map<number, number>();\n for (const node of read.nodes) {\n const p = place.get(node) as { x: number; y: number };\n // Only the deepest leaves have the room past them; a shallower leaf is named as an inner node is.\n const leaf = node.children.length === 0 && node.depth === read.depth;\n const lane = horizontal ? (leaf ? Number.POSITIVE_INFINITY : node.depth) : leaf ? Number.POSITIVE_INFINITY : node.depth;\n const along = horizontal ? p.y : p.x;\n const room = horizontal ? LABEL_GAP : Math.min(node.label.length, 12) * TICK_CHAR;\n const previous = lastAt.get(lane);\n if (previous !== undefined && Math.abs(along - previous) < room) continue;\n lastAt.set(lane, along);\n if (horizontal) {\n const text = fitText(node.label, leaf ? after - 8 : node === root ? before - 4 : plot.width / depth - 12);\n labels.push(leaf ? { x: p.x + 6, y: p.y + 3, text, kind: 'tick', part: 'axis', anchor: 'start' } : { x: p.x - 6, y: p.y - 4, text, kind: 'tick', part: 'axis', anchor: 'end' });\n } else {\n const text = fitText(node.label, 12 * TICK_CHAR);\n labels.push(leaf ? { x: p.x, y: p.y + 13, text, kind: 'tick', part: 'axis', anchor: 'middle' } : { x: p.x + 6, y: p.y - 4, text, kind: 'tick', part: 'axis', anchor: 'start' });\n }\n }\n\n const hitAreas: HitArea[] = nodeHitAreas(\n read,\n read.nodes.map((node) => {\n const p = place.get(node) as { x: number; y: number };\n return { node, x: p.x, y: p.y, box: { x: p.x - NODE_RADIUS, y: p.y - NODE_RADIUS, width: 2 * NODE_RADIUS, height: 2 * NODE_RADIUS } };\n }),\n );\n\n // One heightened element (REQ-442): the root.\n const r = place.get(root) as { x: number; y: number };\n const mark = circlePath(r.x, r.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 const description = props.description ?? `${base.name}. Tidy tree, ${horizontal ? 'left to right' : 'top to bottom'}, of ${treeSummary(read, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `TreeChart` recipe (REQ-418): a tidy node-link tree, horizontal or vertical. */\nexport const treeChart: ChartRecipe<TreeChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildTreeChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `WaffleChart` (REQ-414): 1 000 kWh of household energy in five uses. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const WAFFLE_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { use: 'Heating', kwh: 412 },\n { use: 'Water heating', kwh: 263 },\n { use: 'Appliances', kwh: 158 },\n { use: 'Lighting', kwh: 97 },\n { use: 'Cooking', kwh: 70 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const WAFFLE_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n nameKey: 'use',\n valueKey: 'kwh',\n} as const);\n","import type { ChartModel, ChartRecipe, HitArea, Rect, RecipeContext, Stroke, TextLabel, ToneLevel, WaffleChartProps } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { PLOT_INSET } from '../shared/cartesian';\nimport { rectPath, warnValue } from '../shared/cells';\nimport { checkWhole } from '../shared/contracts';\nimport { accessorName, formatNumber, formatValue } from '../shared/format';\nimport { checkSectors, readSectors, ringTones, sectorLegend } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { allocateCells } from '../shared/stats';\nimport { WAFFLE_CHART_DEMO, WAFFLE_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'WaffleChart';\nconst DEFAULT_CELLS = 100;\nconst DEFAULT_COLUMNS = 10;\n/** Cells drawn at most: past it a cell is too small to see (the field ceiling, API delta §12). */\nconst MAX_CELLS = 3600;\n/** The gap between cells, as a share of a cell's side. */\nconst GAP = 0.18;\nconst LEGEND_GAP = 14;\nconst PERCENT: Intl.NumberFormatOptions = { style: 'percent', maximumFractionDigits: 0 };\n\nfunction buildWaffleChart(props: WaffleChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? WAFFLE_CHART_DEMO;\n const nameKey = usesDemo ? WAFFLE_CHART_DEMO_KEYS.nameKey : (props.nameKey ?? 'name');\n const valueKey = usesDemo ? WAFFLE_CHART_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n const cells = Math.min(checkWhole(CHART, 'cells', props.cells, 1) ?? DEFAULT_CELLS, MAX_CELLS);\n const columns = Math.min(checkWhole(CHART, 'columns', props.columns, 1) ?? DEFAULT_COLUMNS, cells);\n checkSectors(CHART, valueName, data.length);\n\n const sectors = readSectors(data, nameKey, valueKey, CHART, locale);\n const counts = allocateCells(sectors.map((s) => s.value), cells);\n const total = sectors.reduce((sum, s) => sum + s.value, 0);\n const share = (value: number) => (total > 0 ? formatNumber(value / total, locale, PERCENT) : '—');\n const byRow = new Map(sectors.map((s, k) => [s.index, k]));\n const base = modelBase(CHART, props, context, 'Waffle chart', {\n columns: [accessorName(nameKey, 'name'), valueName, 'cells', 'share'],\n rows: data.map((_, index) => {\n const k = byRow.get(index);\n if (k === undefined) return ['—', '—', '—', '—'];\n const s = sectors[k] as (typeof sectors)[number];\n return [s.name, formatValue(s.value, locale, numberFormat), String(counts[k]), 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 area = 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 waffle has nothing to divide.');\n if (sectors.length === 0 || total <= 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot: area, strokes, labels }, data.length === 0);\n\n // Square cells, as large as the area allows; the legend beside them names every category.\n const rows = Math.ceil(cells / columns);\n const inner = { x: area.x + PLOT_INSET, y: area.y + PLOT_INSET, width: Math.max(area.width - 2 * PLOT_INSET, 1), height: Math.max(area.height - 2 * PLOT_INSET, 1) };\n const side = Math.min(inner.width / 2 / columns, inner.height / rows);\n const plot: Rect = { x: inner.x, y: inner.y, width: side * columns, height: side * rows };\n const gap = side * GAP;\n const cell = (n: number): Rect => ({ x: plot.x + (n % columns) * side + gap / 2, y: plot.y + Math.floor(n / columns) * side + gap / 2, width: side - gap, height: side - gap });\n\n // Reading order, category by category: each category's cells are one path (I-4 counts elements).\n const tones = ringTones(counts);\n const paths: string[] = [];\n let next = 0;\n sectors.forEach((s, k) => {\n const n = counts[k] as number;\n const own = Array.from({ length: n }, (_, j) => cell(next + j));\n const d = own.map(rectPath).join('');\n paths.push(d);\n if (d) strokes.push({ d, role: 'encoding', part: 'ink', tone: tones[k] as ToneLevel });\n const first = own[0] ?? cell(Math.min(next, cells - 1));\n hitAreas.push({ seriesKey: valueName, index: s.index, datum: s.datum, value: s.value, x: first.x + first.width / 2, y: first.y + first.height / 2, ...(own[0] ? { box: own[0] } : {}) });\n next += n;\n });\n\n const x = plot.x + plot.width + LEGEND_GAP;\n const key = sectorLegend({ x, y: area.y, width: Math.max(area.x + area.width - x, 1), height: area.height }, sectors.map((s, k) => ({ name: s.name, share: share(s.value), tone: tones[k] as ToneLevel })));\n strokes.push(...key.strokes);\n labels.push(...key.labels);\n\n // One heightened element (REQ-442): the largest category's cells, as one path (I-4).\n let largest = 0;\n sectors.forEach((s, k) => {\n if (s.value > (sectors[largest] as (typeof sectors)[number]).value) largest = k;\n });\n strokes.push({ d: paths[largest] as string, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const top = sectors[largest] as (typeof sectors)[number];\n const description =\n props.description ??\n `${base.name}. Waffle of ${cells} cells in ${columns} columns, filled in reading order by ${sectors.length} categories totalling ${formatNumber(total, locale, numberFormat)}; one cell is about ${formatNumber(total / cells, locale, numberFormat)}. The largest is ${top.name}, ${counts[largest]} cells, ${share(top.value)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `WaffleChart` recipe (REQ-414): a unit grid filled in reading order by category, cells by largest remainder. */\nexport const waffleChart: ChartRecipe<WaffleChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildWaffleChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `MarimekkoChart` (REQ-415): sales by region and channel, columns of unequal totals. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const MARIMEKKO_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { region: 'North', channel: 'Retail', sales: 115 },\n { region: 'North', channel: 'Online', sales: 80 },\n { region: 'North', channel: 'Wholesale', sales: 37 },\n { region: 'North', channel: 'Direct', sales: 67 },\n { region: 'South', channel: 'Retail', sales: 178 },\n { region: 'South', channel: 'Online', sales: 133 },\n { region: 'South', channel: 'Wholesale', sales: 168 },\n { region: 'South', channel: 'Direct', sales: 108 },\n { region: 'East', channel: 'Retail', sales: 90 },\n { region: 'East', channel: 'Online', sales: 72 },\n { region: 'East', channel: 'Wholesale', sales: 21 },\n { region: 'East', channel: 'Direct', sales: 213 },\n { region: 'West', channel: 'Retail', sales: 257 },\n { region: 'West', channel: 'Online', sales: 301 },\n { region: 'West', channel: 'Wholesale', sales: 387 },\n { region: 'West', channel: 'Direct', sales: 171 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const MARIMEKKO_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n columnKey: 'region',\n segmentKey: 'channel',\n valueKey: 'sales',\n} as const);\n","import type { ChartModel, ChartRecipe, HitArea, MarimekkoChartProps, Rect, RecipeContext, Stroke, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, legend } from '../shared/cartesian';\nimport { rectPath, ringTone, warnValue } from '../shared/cells';\nimport { readMosaic } from '../shared/contracts';\nimport { accessorName, fitText, formatNumber } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { MARIMEKKO_CHART_DEMO, MARIMEKKO_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'MarimekkoChart';\n/** Room at the left for the share ticks. */\nconst TICKS = 30;\n/** The gap between columns, in px: the columns' widths still sum to the plot's less the gaps. */\nconst GAP = 2;\nconst PERCENT: Intl.NumberFormatOptions = { style: 'percent', maximumFractionDigits: 0 };\n\nfunction buildMarimekkoChart(props: MarimekkoChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? MARIMEKKO_CHART_DEMO;\n const k = MARIMEKKO_CHART_DEMO_KEYS;\n const columnKey = usesDemo ? k.columnKey : (props.columnKey ?? 'column');\n const segmentKey = usesDemo ? k.segmentKey : (props.segmentKey ?? 'segment');\n const valueKey = usesDemo ? k.valueKey : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const format = (v: number) => formatNumber(v, locale, numberFormat);\n const percent = (v: number) => formatNumber(v, locale, PERCENT);\n\n const mosaic = readMosaic(CHART, data, { column: columnKey, segment: segmentKey, value: valueKey });\n const totals = mosaic.values.map((row) => row.reduce((sum, v) => sum + v, 0));\n const grand = totals.reduce((sum, t) => sum + t, 0);\n const base = modelBase(CHART, props, context, 'Marimekko chart', {\n columns: [accessorName(columnKey, 'column'), ...mosaic.segments, 'total'],\n rows: mosaic.columns.map((column, c) => [column, ...(mosaic.values[c] ?? []).map(format), `${format(totals[c] as number)}, ${grand > 0 ? percent((totals[c] as number) / grand) : '—'}`]),\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 segments' legend names every segment above the plot (REQ-440): tone only repeats it.\n const tones = mosaic.segments.map((_, s) => ringTone(s, mosaic.segments.length));\n const key = legend(card.area, mosaic.segments.map((name, s) => ({ name, part: 'ink' as const, tone: tones[s] as ToneLevel })));\n const area = key.area;\n const plot: Rect = { x: area.x + TICKS, y: area.y + PLOT_INSET, width: Math.max(area.width - TICKS - PLOT_INSET, 1), height: Math.max(area.height - AXIS_BAND - PLOT_INSET, 1) };\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (mosaic.columns.length > 0 && grand <= 0) warnValue(CHART, accessorName(valueKey, 'value'), 'Every value is zero; a Marimekko has nothing to divide.');\n if (mosaic.columns.length === 0 || grand <= 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n strokes.push(...key.strokes);\n labels.push(...key.labels);\n\n // Both axes at 100 %: the share ticks of every column.\n for (const share of [0, 0.5, 1]) {\n const y = plot.y + plot.height * (1 - share);\n labels.push({ x: plot.x - 4, y: y + 3, text: percent(share), kind: 'tick', part: 'axis', anchor: 'end' });\n }\n const drawn = mosaic.columns.filter((_, c) => (totals[c] as number) > 0).length;\n const room = plot.width - GAP * Math.max(drawn - 1, 0);\n const cells: { d: string; value: number }[] = [];\n let x = plot.x;\n mosaic.columns.forEach((column, c) => {\n const total = totals[c] as number;\n if (total <= 0) return;\n const width = (room * total) / grand;\n // Segments top to bottom in their order; each one's height is its share of the column.\n let y = plot.y;\n mosaic.segments.forEach((segment, s) => {\n const value = (mosaic.values[c] as number[])[s] as number;\n if (value <= 0) return;\n const height = (plot.height * value) / total;\n const box = { x, y, width, height };\n const d = rectPath(box);\n strokes.push({ d, role: 'encoding', part: 'ink', tone: tones[s] as ToneLevel });\n cells.push({ d, value });\n hitAreas.push({\n seriesKey: segment,\n index: c,\n datum: Object.freeze({ column, segment, value, share: value / total, columnShare: total / grand }),\n value,\n x: x + width / 2,\n y: y + height / 2,\n box,\n cell: { column: c, row: s },\n });\n y += height;\n });\n labels.push({ x: x + width / 2, y: area.y + area.height - 5, text: fitText(`${column} ${percent(total / grand)}`, width), kind: 'tick', part: 'axis', anchor: 'middle' });\n x += width + GAP;\n });\n\n // One heightened element (REQ-442): the largest cell, the cell itself.\n const largest = cells.reduce((a, b) => (b.value > a.value ? b : a), cells[0] as { d: string; value: number });\n strokes.push({ d: largest.d, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const widest = mosaic.columns[totals.indexOf(Math.max(...totals))] ?? '';\n const description =\n props.description ??\n `${base.name}. Marimekko of ${mosaic.columns.length} columns by ${mosaic.segments.length} segments, totalling ${format(grand)}: each column is as wide as its share of the whole, each segment as tall as its share of the column. The widest column is ${widest}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `MarimekkoChart` recipe (REQ-415): column width ∝ total, segment height ∝ share, both axes at 100 %. */\nexport const marimekkoChart: ChartRecipe<MarimekkoChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildMarimekkoChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `ParallelCoordinatesChart` (REQ-419): 30 bicycles on five dimensions of very different scales. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const PARALLEL_COORDINATES_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { model: 'Model 01', mass: 13.9, gears: 15, price: 3434, range: 125, rating: 1.5 },\n { model: 'Model 02', mass: 8.6, gears: 22, price: 3897, range: 29, rating: 3.8 },\n { model: 'Model 03', mass: 19.5, gears: 13, price: 3202, range: 62, rating: 2.9 },\n { model: 'Model 04', mass: 12.7, gears: 15, price: 2760, range: 28, rating: 2.2 },\n { model: 'Model 05', mass: 22.8, gears: 21, price: 485, range: 39, rating: 2.9 },\n { model: 'Model 06', mass: 20.1, gears: 22, price: 1178, range: 60, rating: 3.1 },\n { model: 'Model 07', mass: 22.5, gears: 8, price: 3952, range: 40, rating: 4.8 },\n { model: 'Model 08', mass: 22.6, gears: 16, price: 1407, range: 133, rating: 1.7 },\n { model: 'Model 09', mass: 18.3, gears: 18, price: 2982, range: 126, rating: 3.4 },\n { model: 'Model 10', mass: 19.1, gears: 11, price: 2060, range: 24, rating: 2.1 },\n { model: 'Model 11', mass: 13.9, gears: 9, price: 2430, range: 78, rating: 2.5 },\n { model: 'Model 12', mass: 18.4, gears: 11, price: 1046, range: 42, rating: 1.3 },\n { model: 'Model 13', mass: 9, gears: 5, price: 343, range: 55, rating: 4 },\n { model: 'Model 14', mass: 16.7, gears: 13, price: 3837, range: 36, rating: 4 },\n { model: 'Model 15', mass: 20.8, gears: 18, price: 3644, range: 107, rating: 4.8 },\n { model: 'Model 16', mass: 16.2, gears: 14, price: 4053, range: 28, rating: 1.5 },\n { model: 'Model 17', mass: 15.9, gears: 13, price: 1664, range: 114, rating: 1.3 },\n { model: 'Model 18', mass: 10.4, gears: 4, price: 3600, range: 75, rating: 1.9 },\n { model: 'Model 19', mass: 20.6, gears: 14, price: 1052, range: 124, rating: 3.5 },\n { model: 'Model 20', mass: 17, gears: 4, price: 2367, range: 50, rating: 3.5 },\n { model: 'Model 21', mass: 21, gears: 6, price: 2545, range: 96, rating: 3.1 },\n { model: 'Model 22', mass: 20.1, gears: 22, price: 3674, range: 115, rating: 3.2 },\n { model: 'Model 23', mass: 18.7, gears: 13, price: 2686, range: 108, rating: 1.8 },\n { model: 'Model 24', mass: 21.4, gears: 7, price: 863, range: 60, rating: 2.6 },\n { model: 'Model 25', mass: 12.8, gears: 12, price: 4163, range: 95, rating: 2.4 },\n { model: 'Model 26', mass: 22.9, gears: 3, price: 3148, range: 135, rating: 3.5 },\n { model: 'Model 27', mass: 12.6, gears: 12, price: 3104, range: 124, rating: 4.2 },\n { model: 'Model 28', mass: 18.2, gears: 10, price: 2765, range: 131, rating: 2.3 },\n { model: 'Model 29', mass: 18.3, gears: 8, price: 922, range: 106, rating: 3.9 },\n { model: 'Model 30', mass: 9, gears: 9, price: 886, range: 32, rating: 2 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const PARALLEL_COORDINATES_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n labelKey: 'model',\n dimensions: /* @__PURE__ */ Object.freeze(['mass', 'gears', 'price', 'range', 'rating']),\n} as const);\n","import { linearScale } from '../../scales/scales';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, HitArea, ParallelCoordinatesChartProps, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET } from '../shared/cartesian';\nimport { warnValue } from '../shared/cells';\nimport { readWideRows } from '../shared/contracts';\nimport { accessorName, circlePath, fitText, formatNumber, numberFormatter } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { PARALLEL_COORDINATES_CHART_DEMO, PARALLEL_COORDINATES_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'ParallelCoordinatesChart';\nconst HEIGHTEN_RADIUS = 3.5;\n/** Room above the axes for the dimension names and below them for the minimum ticks. */\nconst HEAD = 14;\n/** Room at each side, so the first and last axes' ticks are not clipped. */\nconst SIDE = 22;\n\n/** A valid domain: two finite, increasing bounds. */\nconst validDomain = (raw: unknown): readonly [number, number] | undefined =>\n Array.isArray(raw) && raw.length === 2 && Number.isFinite(raw[0]) && Number.isFinite(raw[1]) && (raw[0] as number) < (raw[1] as number) ? [raw[0] as number, raw[1] as number] : undefined;\n\nfunction buildParallelCoordinatesChart(props: ParallelCoordinatesChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? PARALLEL_COORDINATES_CHART_DEMO;\n const labelKey = usesDemo ? PARALLEL_COORDINATES_CHART_DEMO_KEYS.labelKey : props.labelKey;\n const dimensions = usesDemo ? PARALLEL_COORDINATES_CHART_DEMO_KEYS.dimensions : (props.dimensions ?? []);\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const format = numberFormatter(locale, numberFormat);\n const labelName = labelKey === undefined ? 'row' : accessorName(labelKey, 'label');\n\n const rows = readWideRows(CHART, data, labelKey, dimensions);\n const byIndex = new Map(rows.map((r) => [r.index, r]));\n const base = modelBase(CHART, props, context, 'Parallel coordinates', {\n columns: [labelName, ...dimensions],\n rows: data.map((_, index) => {\n const row = byIndex.get(index);\n return row ? [row.label ?? `#${index + 1}`, ...row.values.map(format)] : ['—', ...dimensions.map(() => '—')];\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 area = card.area;\n const plot: Rect = { x: area.x + SIDE, y: area.y + HEAD + PLOT_INSET, width: Math.max(area.width - 2 * SIDE, 1), height: Math.max(area.height - HEAD - AXIS_BAND - PLOT_INSET, 1) };\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (dimensions.length < 2) warnValue(CHART, 'dimensions', `${dimensions.length} dimensions; parallel coordinates need at least 2.`);\n if (rows.length === 0 || dimensions.length < 2) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n // Each axis' domain: the one given (REQ-097), else the data's extent, niced.\n const given = props.domains ?? {};\n let outside = 0;\n const axes = dimensions.map((name, d) => {\n const x = plot.x + (plot.width * d) / (dimensions.length - 1);\n const domain = validDomain(given[name]);\n const scale = linearScale(domain ?? extent(rows.map((r) => r.values[d] as number)) ?? [0, 1], [plot.y + plot.height, plot.y], { chart: CHART, property: name, padding: 0, nice: domain === undefined });\n const [lo, hi] = scale.domain;\n strokes.push({ d: `M${x},${plot.y}V${plot.y + plot.height}`, role: 'ornament', part: 'axis' });\n labels.push({ x, y: area.y + 10, text: fitText(name, plot.width / Math.max(dimensions.length - 1, 1)), kind: 'tick', part: 'axis', anchor: 'middle' });\n labels.push({ x: x + 3, y: plot.y + 3, text: formatNumber(hi, locale, numberFormat), kind: 'tick', part: 'axis', anchor: 'start' });\n labels.push({ x: x + 3, y: plot.y + plot.height + 10, text: formatNumber(lo, locale, numberFormat), kind: 'tick', part: 'axis', anchor: 'start' });\n // A value outside a given domain is drawn at the axis' end (SP002).\n const y = (v: number) => {\n if (v < lo || v > hi) outside += 1;\n return scale(Math.min(Math.max(v, lo), hi));\n };\n return { x, y, given: domain !== undefined };\n });\n\n // One polyline per row, in data order; the first row's drawn heavier, as the one heightened.\n const vertices = rows.map((row) => row.values.map((v, d) => ({ x: (axes[d] as (typeof axes)[number]).x, y: (axes[d] as (typeof axes)[number]).y(v) })));\n if (outside > 0) warnValue(CHART, 'domains', `${outside} values lie outside their given domain; they are drawn at the axis' end.`);\n rows.forEach((row, r) => {\n const at = vertices[r] as { x: number; y: number }[];\n strokes.push({ d: at.map((p, d) => `${d === 0 ? 'M' : 'L'}${p.x},${p.y}`).join(''), role: 'encoding', part: 'ink', ...(r === 0 ? { weight: 2 } : {}) });\n row.values.forEach((value, d) => {\n const p = at[d] as { x: number; y: number };\n hitAreas.push({ seriesKey: dimensions[d] as string, index: row.index, datum: row.datum, value, x: p.x, y: p.y, cell: { column: d, row: r } });\n });\n });\n\n // One heightened element (REQ-442): the first row, marked where it meets the first axis. A\n // heightening is a fill (the grounds' rule), so an open line carries it as a mark at its start.\n const start = (vertices[0] as { x: number; y: number }[])[0] as { x: number; y: number };\n const mark = circlePath(start.x, start.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 const derived = axes.filter((a) => !a.given).length;\n const description =\n props.description ??\n `${base.name}. Parallel coordinates of ${rows.length} rows on ${dimensions.length} axes, ${dimensions.join(', ')}; ${\n derived === dimensions.length ? 'every axis spans its data, niced' : derived === 0 ? 'every axis spans its given domain' : `${derived} axes span their data, niced, the rest their given domain`\n }. The first row, ${rows[0]?.label ?? '#1'}, is drawn heavier.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `ParallelCoordinatesChart` recipe (REQ-419): one axis per dimension, one polyline per row. */\nexport const parallelCoordinatesChart: ChartRecipe<ParallelCoordinatesChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildParallelCoordinatesChart });\n","/**\n * The grid of the polar line and the polar scatter (REQ-420, REQ-421): a radius scale from 0 with a\n * ring at each tick, and spokes at the angle's natural steps, named at the rim. The grid carries no\n * data (ornament); the angle is in the units of `period`, clockwise from `startAngle`.\n */\nimport { linearScale, type LinearScale } from '../../scales/scales';\nimport type { Stroke, TextLabel } from '../../types';\nimport { circlePath, formatNumber } from './format';\nimport { RIM_LABELS, pointAt, polarLabel, type PolarFrame } from './polar';\n\nconst TURN = 2 * Math.PI;\n\n/** The angle in radians, clockwise from 12 o'clock, of `angle` in units of `period`. */\nexport function angleOf(angle: number, period: number, startAngle: number): number {\n return (startAngle / 360) * TURN + (angle / period) * TURN;\n}\n\n/**\n * A radius scale from 0 to the largest value, niced, with a ring and its value at each tick (the\n * values at 12 o'clock, as the radar's).\n */\nexport function radialAxis(\n frame: PolarFrame,\n largest: number,\n options: { readonly chart: string; readonly property: string; readonly locale: string; readonly numberFormat: Intl.NumberFormatOptions | undefined },\n): { scale: LinearScale; strokes: Stroke[]; labels: TextLabel[] } {\n const scale = linearScale([0, largest > 0 ? largest : 1], [0, frame.radius], { chart: options.chart, property: options.property, padding: 0, nice: true, fromZero: true });\n const strokes: Stroke[] = [];\n const labels: TextLabel[] = [];\n for (const tick of scale.ticks(3)) {\n const r = scale(tick);\n if (r <= 0) continue;\n strokes.push({ d: circlePath(frame.cx, frame.cy, r), role: 'ornament', part: 'grid', paint: 'stroke' });\n // A ring by the rim would put its value under the angle named 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, options.locale, options.numberFormat), kind: 'tick', part: 'axis', anchor: 'start' });\n }\n return { scale, strokes, labels };\n}\n\n/**\n * Spokes at the angle's steps: one per unit when the period is a whole number up to 24 (months,\n * hours), else every eighth of a turn; each named at the rim in the angle's own units.\n */\nexport function angleSpokes(frame: PolarFrame, period: number, startAngle: number, locale: string): { strokes: Stroke[]; labels: TextLabel[] } {\n const steps = Number.isInteger(period) && period <= 24 ? period : 8;\n const strokes: Stroke[] = [];\n const labels: TextLabel[] = [];\n for (let k = 0; k < steps; k += 1) {\n const value = (period * k) / steps;\n const angle = angleOf(value, period, startAngle);\n const end = pointAt(frame, angle, frame.radius);\n strokes.push({ d: `M${frame.cx},${frame.cy}L${end.x},${end.y}`, role: 'ornament', part: 'grid' });\n labels.push(polarLabel(frame, angle, frame.radius + 7, formatNumber(value, locale, { maximumFractionDigits: 1 })));\n }\n return { strokes, labels };\n}\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `PolarLineChart` (REQ-420): rainfall in mm by month, 0 to 11, closed over `period: 12`. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const POLAR_LINE_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { month: 0, rain: 82 },\n { month: 1, rain: 62 },\n { month: 2, rain: 54 },\n { month: 3, rain: 45 },\n { month: 4, rain: 57 },\n { month: 5, rain: 38 },\n { month: 6, rain: 27 },\n { month: 7, rain: 30 },\n { month: 8, rain: 48 },\n { month: 9, rain: 71 },\n { month: 10, rain: 91 },\n { month: 11, rain: 86 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const POLAR_LINE_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n angleKey: 'month',\n valueKey: 'rain',\n period: 12,\n} as const);\n","import type { ChartModel, ChartRecipe, HitArea, PolarLineChartProps, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { finite } from '../shared/cells';\nimport { checkCeiling, checkPositive, readPolarPoints } from '../shared/contracts';\nimport { accessorName, circlePath, formatNumber, formatValue, read } from '../shared/format';\nimport { RIM_LABELS, pointAt, polarFrame } from '../shared/polar';\nimport { angleOf, angleSpokes, radialAxis } from '../shared/radial';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { POLAR_LINE_CHART_DEMO, POLAR_LINE_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'PolarLineChart';\nconst DOT_RADIUS = 2.5;\nconst HEIGHTEN_RADIUS = 3.5;\n/** The turn when no `period` is given: degrees (Data Model §2.21). */\nconst DEGREES = 360;\n\nfunction buildPolarLineChart(props: PolarLineChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? POLAR_LINE_CHART_DEMO;\n const angleKey = usesDemo ? POLAR_LINE_CHART_DEMO_KEYS.angleKey : (props.angleKey ?? 'angle');\n const valueKey = usesDemo ? POLAR_LINE_CHART_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n // `period` says the angle's units, so it goes with the data (REQ-099); given, the line closes.\n const given = usesDemo ? POLAR_LINE_CHART_DEMO_KEYS.period : checkPositive(CHART, 'period', props.period);\n const period = given ?? DEGREES;\n const closed = given !== undefined;\n const startAngle = finite(props.startAngle) ?? 0;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const angleName = accessorName(angleKey, 'angle');\n const valueName = accessorName(valueKey, 'value');\n\n const points = readPolarPoints(CHART, data, { angle: angleKey, value: valueKey }, period);\n checkCeiling(CHART, valueName, 'points', points.length);\n const base = modelBase(CHART, props, context, 'Polar line', {\n columns: [angleName, valueName],\n rows: data.map((datum, index) => [formatValue(read(angleKey, datum, index), locale, { maximumFractionDigits: 2 }), formatValue(read(valueKey, 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 = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (points.length === 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 axis = radialAxis(frame, Math.max(...points.map((p) => p.value)), { chart: CHART, property: valueName, locale, numberFormat });\n const spokes = angleSpokes(frame, period, startAngle, locale);\n strokes.push(...spokes.strokes, ...axis.strokes);\n labels.push(...spokes.labels, ...axis.labels);\n\n // In angle order, ties by row: the line runs round the circle, closing when the angle is cyclic.\n const ordered = [...points].sort((a, b) => a.angle - b.angle || a.index - b.index);\n const at = ordered.map((p) => pointAt(frame, angleOf(p.angle, period, startAngle), axis.scale(p.value)));\n strokes.push({ d: at.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x},${p.y}`).join('') + (closed && at.length > 2 ? 'Z' : ''), role: 'encoding', part: 'ink' });\n ordered.forEach((p, i) => {\n const q = at[i] as { x: number; y: number };\n strokes.push({ d: circlePath(q.x, q.y, DOT_RADIUS), role: 'encoding', part: 'ink' });\n hitAreas.push({ seriesKey: valueName, index: p.index, datum: p.datum, value: p.value, x: q.x, y: q.y });\n });\n\n // One heightened element (REQ-442): the maximum point.\n let top = 0;\n ordered.forEach((p, i) => {\n if (p.value > (ordered[top] as (typeof ordered)[number]).value) top = i;\n });\n const peak = at[top] as { x: number; y: number };\n const mark = circlePath(peak.x, peak.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 const best = ordered[top] as (typeof ordered)[number];\n const description =\n props.description ??\n `${base.name}. Polar line of ${points.length} ${valueName} values by ${angleName}, one turn being ${formatNumber(period, locale, undefined)}${closed ? ', closed' : ''}; radius from 0, the maximum ${formatNumber(best.value, locale, numberFormat)} at ${formatNumber(best.angle, locale, { maximumFractionDigits: 2 })}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `PolarLineChart` recipe (REQ-420): a line over angle × radius, closed when the angle is cyclic. */\nexport const polarLineChart: ChartRecipe<PolarLineChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildPolarLineChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `PolarScatterChart` (REQ-421): 150 sightings by bearing in degrees and distance in km, one cluster across north. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const POLAR_SCATTER_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { bearing: 28, distance: 2.5 },\n { bearing: 149.6, distance: 1.4 },\n { bearing: 229.3, distance: 19.6 },\n { bearing: 15.5, distance: 1.6 },\n { bearing: 130.5, distance: 16.6 },\n { bearing: 250.7, distance: 7 },\n { bearing: 348.7, distance: 2.6 },\n { bearing: 115.9, distance: 16.3 },\n { bearing: 242.6, distance: 3.8 },\n { bearing: 39.1, distance: 2.3 },\n { bearing: 136.4, distance: 1.6 },\n { bearing: 243.8, distance: 1.7 },\n { bearing: 26.8, distance: 2.2 },\n { bearing: 132.6, distance: 4.6 },\n { bearing: 260.3, distance: 6.5 },\n { bearing: 0.3, distance: 13.4 },\n { bearing: 130, distance: 2 },\n { bearing: 241.4, distance: 13.4 },\n { bearing: 10.2, distance: 3 },\n { bearing: 121.9, distance: 1.4 },\n { bearing: 279.5, distance: 8.1 },\n { bearing: 28.3, distance: 4.4 },\n { bearing: 116.7, distance: 3.5 },\n { bearing: 201.4, distance: 2.9 },\n { bearing: 7.7, distance: 1.7 },\n { bearing: 106.7, distance: 1 },\n { bearing: 279.8, distance: 5.8 },\n { bearing: 348.5, distance: 4.8 },\n { bearing: 136.8, distance: 8 },\n { bearing: 259.4, distance: 12.2 },\n { bearing: 344.1, distance: 3.5 },\n { bearing: 139.9, distance: 3.9 },\n { bearing: 241.5, distance: 11.7 },\n { bearing: 359.7, distance: 5.3 },\n { bearing: 117.4, distance: 5.3 },\n { bearing: 272, distance: 1.9 },\n { bearing: 355.2, distance: 5.2 },\n { bearing: 103.6, distance: 2 },\n { bearing: 271.4, distance: 3.5 },\n { bearing: 25, distance: 6.3 },\n { bearing: 120.3, distance: 1.9 },\n { bearing: 277.2, distance: 8 },\n { bearing: 13.8, distance: 11.4 },\n { bearing: 138.6, distance: 2.5 },\n { bearing: 255.4, distance: 4.1 },\n { bearing: 14.4, distance: 3.4 },\n { bearing: 135.8, distance: 4.2 },\n { bearing: 242.7, distance: 11.6 },\n { bearing: 20.5, distance: 2.4 },\n { bearing: 113.3, distance: 1.2 },\n { bearing: 248.6, distance: 12.8 },\n { bearing: 3.8, distance: 8 },\n { bearing: 129.6, distance: 1.3 },\n { bearing: 214.4, distance: 3.8 },\n { bearing: 20.8, distance: 3.4 },\n { bearing: 135.3, distance: 3.3 },\n { bearing: 244.8, distance: 1.4 },\n { bearing: 2.8, distance: 3.1 },\n { bearing: 128.1, distance: 0.9 },\n { bearing: 219.5, distance: 4.2 },\n { bearing: 3.5, distance: 5.4 },\n { bearing: 138.4, distance: 17.1 },\n { bearing: 246.4, distance: 3.2 },\n { bearing: 345.8, distance: 6.3 },\n { bearing: 141.1, distance: 3.4 },\n { bearing: 262.5, distance: 6.6 },\n { bearing: 356.7, distance: 4.8 },\n { bearing: 154.3, distance: 3.5 },\n { bearing: 237.3, distance: 2.6 },\n { bearing: 23.5, distance: 6.1 },\n { bearing: 136.7, distance: 3.4 },\n { bearing: 242.9, distance: 2.3 },\n { bearing: 0.8, distance: 4.1 },\n { bearing: 94.1, distance: 6.5 },\n { bearing: 253.1, distance: 1.1 },\n { bearing: 346.2, distance: 6.7 },\n { bearing: 137.3, distance: 2.6 },\n { bearing: 258, distance: 7.2 },\n { bearing: 1.5, distance: 3.4 },\n { bearing: 140.7, distance: 4.5 },\n { bearing: 226.8, distance: 4 },\n { bearing: 4.2, distance: 1.2 },\n { bearing: 114.4, distance: 5 },\n { bearing: 247.3, distance: 3.9 },\n { bearing: 34.7, distance: 14.8 },\n { bearing: 125.9, distance: 6 },\n { bearing: 231.7, distance: 12 },\n { bearing: 31.6, distance: 3 },\n { bearing: 131.9, distance: 3.1 },\n { bearing: 242, distance: 3.9 },\n { bearing: 5.2, distance: 1.5 },\n { bearing: 130.1, distance: 13.1 },\n { bearing: 260.9, distance: 2.5 },\n { bearing: 334.1, distance: 7.7 },\n { bearing: 159.8, distance: 13.9 },\n { bearing: 252.2, distance: 12.1 },\n { bearing: 18.4, distance: 5.3 },\n { bearing: 115, distance: 6.6 },\n { bearing: 259.5, distance: 0.7 },\n { bearing: 357.6, distance: 4.6 },\n { bearing: 157.5, distance: 3.7 },\n { bearing: 224.4, distance: 2.9 },\n { bearing: 23.9, distance: 1.9 },\n { bearing: 127.8, distance: 10.5 },\n { bearing: 221.4, distance: 1.8 },\n { bearing: 345.5, distance: 2.5 },\n { bearing: 110.7, distance: 0.9 },\n { bearing: 253.7, distance: 2.6 },\n { bearing: 9.8, distance: 14.9 },\n { bearing: 125.6, distance: 3.4 },\n { bearing: 264.6, distance: 3.1 },\n { bearing: 333, distance: 1.4 },\n { bearing: 132.9, distance: 9 },\n { bearing: 230.3, distance: 1.9 },\n { bearing: 4.4, distance: 8.2 },\n { bearing: 122.8, distance: 3.2 },\n { bearing: 277.7, distance: 1.2 },\n { bearing: 3.6, distance: 1.4 },\n { bearing: 133.9, distance: 3.1 },\n { bearing: 231.6, distance: 1.1 },\n { bearing: 8.6, distance: 3.4 },\n { bearing: 112.6, distance: 9.2 },\n { bearing: 250.7, distance: 2.4 },\n { bearing: 4.5, distance: 8.1 },\n { bearing: 125.2, distance: 1 },\n { bearing: 246.6, distance: 3.5 },\n { bearing: 338.9, distance: 5.4 },\n { bearing: 121.7, distance: 6.3 },\n { bearing: 273.2, distance: 3 },\n { bearing: 1.9, distance: 10.2 },\n { bearing: 122.1, distance: 5.7 },\n { bearing: 258.2, distance: 3.9 },\n { bearing: 10.1, distance: 5.7 },\n { bearing: 163.7, distance: 10.7 },\n { bearing: 222.6, distance: 3.5 },\n { bearing: 329.1, distance: 3.5 },\n { bearing: 160.5, distance: 5.1 },\n { bearing: 228.5, distance: 3.9 },\n { bearing: 356, distance: 1.9 },\n { bearing: 94.4, distance: 1.5 },\n { bearing: 255.2, distance: 7.6 },\n { bearing: 347.7, distance: 2.5 },\n { bearing: 144.5, distance: 1.7 },\n { bearing: 258.2, distance: 4.4 },\n { bearing: 19.8, distance: 12 },\n { bearing: 151.7, distance: 4.4 },\n { bearing: 266, distance: 2.8 },\n { bearing: 0.9, distance: 5.1 },\n { bearing: 145.4, distance: 3.5 },\n { bearing: 250.4, distance: 2.5 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const POLAR_SCATTER_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n angleKey: 'bearing',\n radiusKey: 'distance',\n} as const);\n","import type { ChartModel, ChartRecipe, HitArea, PolarScatterChartProps, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { checkCeiling, checkPositive, readPolarPoints } from '../shared/contracts';\nimport { accessorName, circlePath, formatNumber, formatValue, read } from '../shared/format';\nimport { RIM_LABELS, pointAt, polarFrame } from '../shared/polar';\nimport { angleOf, angleSpokes, radialAxis } from '../shared/radial';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { POLAR_SCATTER_CHART_DEMO, POLAR_SCATTER_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'PolarScatterChart';\nconst DOT_RADIUS = 2.5;\n/** With a size key, a point's area is its size: radii from the smallest to the largest here. */\nconst MIN_RADIUS = 1.5;\nconst MAX_RADIUS = 7;\nconst DEGREES = 360;\n\nfunction buildPolarScatterChart(props: PolarScatterChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? POLAR_SCATTER_CHART_DEMO;\n const angleKey = usesDemo ? POLAR_SCATTER_CHART_DEMO_KEYS.angleKey : (props.angleKey ?? 'angle');\n const radiusKey = usesDemo ? POLAR_SCATTER_CHART_DEMO_KEYS.radiusKey : (props.radiusKey ?? 'radius');\n const sizeKey = usesDemo ? undefined : props.sizeKey;\n // `period` says the angle's units, so it goes with the data (REQ-099).\n const period = (usesDemo ? undefined : checkPositive(CHART, 'period', props.period)) ?? DEGREES;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const angleName = accessorName(angleKey, 'angle');\n const radiusName = accessorName(radiusKey, 'radius');\n\n const points = readPolarPoints(CHART, data, { angle: angleKey, value: radiusKey, ...(sizeKey === undefined ? {} : { size: sizeKey }) }, period);\n checkCeiling(CHART, radiusName, 'points', points.length);\n const base = modelBase(CHART, props, context, 'Polar scatter', {\n columns: [angleName, radiusName, ...(sizeKey === undefined ? [] : [accessorName(sizeKey, 'size')])],\n rows: data.map((datum, index) => [\n formatValue(read(angleKey, datum, index), locale, { maximumFractionDigits: 2 }),\n formatValue(read(radiusKey, datum, index), locale, numberFormat),\n ...(sizeKey === undefined ? [] : [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 = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (points.length === 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 axis = radialAxis(frame, Math.max(...points.map((p) => p.value)), { chart: CHART, property: radiusName, locale, numberFormat });\n const spokes = angleSpokes(frame, period, 0, locale);\n strokes.push(...spokes.strokes, ...axis.strokes);\n labels.push(...spokes.labels, ...axis.labels);\n\n // A point's area is its size, when there is one: the radius goes with its square root.\n const largestSize = Math.max(0, ...points.map((p) => (p.size !== undefined && p.size > 0 ? p.size : 0)));\n const radiusOf = (s: number | undefined) => (sizeKey === undefined || s === undefined || s <= 0 || largestSize <= 0 ? DOT_RADIUS : Math.max(MAX_RADIUS * Math.sqrt(s / largestSize), MIN_RADIUS));\n // In angle order, ties by row: the order the keyboard walks round the circle.\n const ordered = [...points].sort((a, b) => a.angle - b.angle || a.index - b.index);\n const marks = ordered.map((p) => {\n const q = pointAt(frame, angleOf(p.angle, period, 0), axis.scale(p.value));\n const r = radiusOf(p.size);\n const d = circlePath(q.x, q.y, r);\n strokes.push({ d, role: 'encoding', part: 'ink' });\n hitAreas.push({ seriesKey: radiusName, index: p.index, datum: p.datum, value: p.value, x: q.x, y: q.y, box: { x: q.x - r, y: q.y - r, width: 2 * r, height: 2 * r } });\n return d;\n });\n\n // One heightened element (REQ-442): the point of largest radius, the point itself.\n let far = 0;\n ordered.forEach((p, i) => {\n if (p.value > (ordered[far] as (typeof ordered)[number]).value) far = i;\n });\n strokes.push({ d: marks[far] as string, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const farthest = ordered[far] as (typeof ordered)[number];\n const description =\n props.description ??\n `${base.name}. Polar scatter of ${points.length} points, ${angleName} round the circle (one turn being ${formatNumber(period, locale, undefined)}) and ${radiusName} out from the centre${sizeKey === undefined ? '' : `, each point's area its ${accessorName(sizeKey, 'size')}`}; the farthest at ${formatNumber(farthest.value, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `PolarScatterChart` recipe (REQ-421): points over angle × radius, unbinned. */\nexport const polarScatterChart: ChartRecipe<PolarScatterChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildPolarScatterChart });\n","/**\n * The field engine of the contour and density-bin charts (DD-028, REQ-430): marching squares,\n * the Epanechnikov density splat and the 2-D bins, all owned. Only correctly rounded operations\n * are used (`+ − × ÷`, `Math.sqrt`, comparisons), so Node and every browser produce the same\n * coordinates (REQ-435).\n */\n\n/** A regular grid of values, row-major: `values[j * nx + i]`; `undefined` is a hole. */\nexport interface ScalarGrid {\n readonly nx: number;\n readonly ny: number;\n readonly values: readonly (number | undefined)[];\n}\n\nexport interface GridPoint {\n readonly x: number;\n readonly y: number;\n}\n\n/** A closed ring in grid coordinates (`x` along `i`, `y` along `j`); the first point is not repeated. */\nexport type Ring = readonly GridPoint[];\n\n/** A crossing of a level on a grid edge; `exact` when both ends of the edge are values. */\ninterface Crossing extends GridPoint {\n readonly exact: boolean;\n}\n\n/**\n * The rings bounding `{ value ≥ level }` (marching squares). The grid is read as padded by a ring\n * of holes, so every ring closes; a hole is below every level, its crossing put on the value\n * beside it. A saddle is resolved by the cell's centre, the mean of its corners. Rings are\n * oriented: walking along one, the region is always on the same side, so a hole turns the other\n * way and a region fills under the non-zero rule.\n */\nexport function isoRings(grid: ScalarGrid, level: number): Ring[] {\n return trace(grid, level).map(plain);\n}\n\n/**\n * The iso-lines at `level`: the rings' runs between exact crossings, so the grid's border and a\n * hole's edge, which bound the region but are not at the level, are not drawn. A closed line\n * repeats its first point at its end.\n */\nexport function isoLines(grid: ScalarGrid, level: number): GridPoint[][] {\n return linesOf(trace(grid, level));\n}\n\n/**\n * The rings of the band `[low, high)`: the region above `low` with the region above `high`\n * turned the other way inside it. Their signed areas sum to the band's.\n */\nexport function bandRings(grid: ScalarGrid, low: number, high?: number): Ring[] {\n return band(isoRings(grid, low), high === undefined ? undefined : isoRings(grid, high));\n}\n\n/** One level's contour: its region's rings, its iso-lines, and its band up to the next level. */\nexport interface Contour {\n readonly level: number;\n readonly rings: readonly Ring[];\n readonly lines: readonly GridPoint[][];\n readonly band: readonly Ring[];\n}\n\n/** The contours of increasing `levels`, each level traced once (REQ-445). */\nexport function contours(grid: ScalarGrid, levels: readonly number[]): Contour[] {\n const traced = levels.map((level) => trace(grid, level));\n const rings = traced.map((t) => t.map(plain));\n return levels.map((level, k) => ({\n level,\n rings: rings[k] as Ring[],\n lines: linesOf(traced[k] as Crossing[][]),\n band: band(rings[k] as Ring[], rings[k + 1]),\n }));\n}\n\nconst plain = (ring: readonly Crossing[]): Ring => ring.map(({ x, y }) => ({ x, y }));\n\nfunction band(outer: readonly Ring[], inner: readonly Ring[] | undefined): Ring[] {\n return inner === undefined ? [...outer] : [...outer, ...inner.map((ring) => [...ring].reverse())];\n}\n\nfunction linesOf(rings: readonly Crossing[][]): GridPoint[][] {\n const lines: GridPoint[][] = [];\n for (const ring of rings) {\n const n = ring.length;\n const breakAt = ring.findIndex((p, k) => !p.exact || !(ring[(k + 1) % n] as Crossing).exact);\n if (breakAt < 0) {\n lines.push([...plain(ring), { x: (ring[0] as Crossing).x, y: (ring[0] as Crossing).y }]);\n continue;\n }\n // Walk once round from the first break, cutting at every segment with an inexact end.\n let run: GridPoint[] = [];\n for (let s = 1; s <= n; s += 1) {\n const a = ring[(breakAt + s) % n] as Crossing;\n const b = ring[(breakAt + s + 1) % n] as Crossing;\n if (a.exact && b.exact) {\n if (run.length === 0) run.push({ x: a.x, y: a.y });\n run.push({ x: b.x, y: b.y });\n } else if (run.length > 0) {\n lines.push(run);\n run = [];\n }\n }\n if (run.length > 0) lines.push(run);\n }\n return lines;\n}\n\n/** Signed area of a ring (shoelace). */\nexport function ringArea(ring: Ring): number {\n let twice = 0;\n for (let k = 0; k < ring.length; k += 1) {\n const a = ring[k] as GridPoint;\n const b = ring[(k + 1) % ring.length] as GridPoint;\n twice += a.x * b.y - b.x * a.y;\n }\n return twice / 2;\n}\n\nfunction trace(grid: ScalarGrid, level: number): Crossing[][] {\n const { nx, ny, values } = grid;\n const value = (i: number, j: number) => (i < 0 || j < 0 || i >= nx || j >= ny ? undefined : values[j * nx + i]);\n const inside = (v: number | undefined) => v !== undefined && v >= level;\n // Edges of the padded grid: a key per edge, so a crossing is computed once and shared by the two\n // cells either side of it (their segments then meet to the last bit).\n const width = nx + 2;\n const edgeKey = (i: number, j: number, vertical: boolean) => ((j + 1) * width + (i + 1)) * 2 + (vertical ? 1 : 0);\n const crossings = new Map<number, Crossing>();\n const crossing = (i: number, j: number, vertical: boolean): number => {\n const key = edgeKey(i, j, vertical);\n if (!crossings.has(key)) {\n const i1 = vertical ? i : i + 1;\n const j1 = vertical ? j + 1 : j;\n const a = value(i, j);\n const b = value(i1, j1);\n let f: number;\n if (a === undefined) f = 1;\n else if (b === undefined) f = 0;\n else f = (level - a) / (b - a);\n crossings.set(key, { x: i + f * (i1 - i), y: j + f * (j1 - j), exact: a !== undefined && b !== undefined });\n }\n return key;\n };\n\n // Which vertices of the padded grid are inside, so a cell all in or all out costs four reads.\n const status = new Uint8Array(width * (ny + 2));\n for (let j = 0; j < ny; j += 1) for (let i = 0; i < nx; i += 1) if (inside(values[j * nx + i])) status[(j + 1) * width + i + 1] = 1;\n\n // Segments, each from an exit (inside to outside, walking a cell clockwise) to an entry.\n const next = new Map<number, number>();\n for (let j = -1; j < ny; j += 1) {\n for (let i = -1; i < nx; i += 1) {\n const top = (j + 1) * width + i + 1;\n const sum = (status[top] as number) + (status[top + 1] as number) + (status[top + width + 1] as number) + (status[top + width] as number);\n if (sum === 0 || sum === 4) continue;\n const corners = [value(i, j), value(i + 1, j), value(i + 1, j + 1), value(i, j + 1)];\n const ins = corners.map(inside);\n // The cell's edges clockwise: top, right, bottom (right to left), left (bottom to top).\n const edges: (() => number)[] = [() => crossing(i, j, false), () => crossing(i + 1, j, true), () => crossing(i, j + 1, false), () => crossing(i, j, true)];\n const exits: number[] = [];\n const entries: number[] = [];\n for (let k = 0; k < 4; k += 1) {\n if (ins[k] && !ins[(k + 1) % 4]) exits.push(k);\n if (!ins[k] && ins[(k + 1) % 4]) entries.push(k);\n }\n if (exits.length === 0) continue;\n let centre = false;\n if (exits.length === 2 && corners.every((c) => c !== undefined)) {\n centre = ((corners[0] as number) + (corners[1] as number) + (corners[2] as number) + (corners[3] as number)) / 4 >= level;\n }\n for (const exit of exits) {\n // Joined through the centre: the next entry clockwise; apart: the one before.\n let entry = entries[0] as number;\n if (exits.length === 2) {\n const after = entries.find((e) => e > exit) ?? (entries[0] as number);\n const before = [...entries].reverse().find((e) => e < exit) ?? (entries.at(-1) as number);\n entry = centre ? after : before;\n }\n next.set((edges[exit] as () => number)(), (edges[entry] as () => number)());\n }\n }\n }\n\n const rings: Crossing[][] = [];\n const seen = new Set<number>();\n for (const start of [...next.keys()].sort((a, b) => a - b)) {\n if (seen.has(start)) continue;\n const ring: Crossing[] = [];\n let at: number | undefined = start;\n while (at !== undefined && !seen.has(at)) {\n seen.add(at);\n const point = crossings.get(at) as Crossing;\n const last = ring.at(-1);\n // Crossings put on the same value (beside a hole or the border) collapse into one.\n if (!last || last.x !== point.x || last.y !== point.y) ring.push(point);\n at = next.get(at);\n }\n while (ring.length > 1 && (ring[0] as Crossing).x === (ring.at(-1) as Crossing).x && (ring[0] as Crossing).y === (ring.at(-1) as Crossing).y) ring.pop();\n if (ring.length >= 3) rings.push(ring);\n }\n return rings;\n}\n\n/**\n * The density of a point cloud on a regular grid of `nx × ny` nodes spanning `domain`, with the\n * product Epanechnikov kernel `¾(1 − u²) · ¾(1 − v²)` and bandwidths in data units (DD-029): a\n * splat, polynomial, summed over the points in `(x, y)` order so the result does not depend on the\n * order of the rows (I-23). Rows run along `y`, ascending.\n */\nexport function densityGrid(\n points: readonly GridPoint[],\n domain: { readonly x: readonly [number, number]; readonly y: readonly [number, number] },\n nx: number,\n ny: number,\n bandwidth: { readonly x: number; readonly y: number },\n): ScalarGrid & { readonly values: readonly number[] } {\n const [x0, x1] = domain.x;\n const [y0, y1] = domain.y;\n const dx = nx > 1 ? (x1 - x0) / (nx - 1) : 1;\n const dy = ny > 1 ? (y1 - y0) / (ny - 1) : 1;\n const hx = bandwidth.x;\n const hy = bandwidth.y;\n const values = new Float64Array(nx * ny);\n const sorted = [...points].sort((a, b) => a.x - b.x || a.y - b.y);\n const scale = sorted.length * hx * hy;\n for (const p of sorted) {\n const iLow = Math.max(0, Math.ceil((p.x - hx - x0) / dx));\n const iHigh = Math.min(nx - 1, Math.floor((p.x + hx - x0) / dx));\n const jLow = Math.max(0, Math.ceil((p.y - hy - y0) / dy));\n const jHigh = Math.min(ny - 1, Math.floor((p.y + hy - y0) / dy));\n // The kernel's two factors, once per column and per row of the point's footprint.\n const across: number[] = [];\n for (let i = iLow; i <= iHigh; i += 1) {\n const u = (x0 + i * dx - p.x) / hx;\n across.push(u < -1 || u > 1 ? 0 : 0.75 * (1 - u * u));\n }\n for (let j = jLow; j <= jHigh; j += 1) {\n const v = (y0 + j * dy - p.y) / hy;\n if (v < -1 || v > 1) continue;\n const kv = (0.75 * (1 - v * v)) / scale;\n const row = j * nx;\n for (let i = iLow; i <= iHigh; i += 1) values[row + i] = (values[row + i] as number) + (across[i - iLow] as number) * kv;\n }\n }\n return { nx, ny, values: Array.from(values) };\n}\n\n/** A 2-D bin: its centre, its place (row, then column), the points in it by index. */\nexport interface Bin2D {\n readonly cx: number;\n readonly cy: number;\n readonly column: number;\n readonly row: number;\n readonly count: number;\n readonly indices: readonly number[];\n}\n\ninterface Indexed extends GridPoint {\n readonly index: number;\n}\n\nfunction collect(points: readonly Indexed[], place: (p: Indexed) => { column: number; row: number; cx: number; cy: number }): Bin2D[] {\n const bins = new Map<string, { column: number; row: number; cx: number; cy: number; indices: number[] }>();\n for (const p of points) {\n const at = place(p);\n const key = `${at.row},${at.column}`;\n const bin = bins.get(key);\n if (bin) bin.indices.push(p.index);\n else bins.set(key, { ...at, indices: [p.index] });\n }\n return [...bins.values()]\n .sort((a, b) => a.row - b.row || a.column - b.column)\n .map((b) => ({ cx: b.cx, cy: b.cy, column: b.column, row: b.row, count: b.indices.length, indices: b.indices.sort((x, y) => x - y) }));\n}\n\n/**\n * Hexagonal bins, pointy-top, `size` px across the flats, the lattice anchored at `origin`. A\n * point goes to the nearer of the two candidate centres, so each hexagon is exactly the set of\n * points nearest its centre.\n */\nexport function hexBins(points: readonly Indexed[], size: number, origin: GridPoint): Bin2D[] {\n const r = size / Math.sqrt(3);\n const dy = 1.5 * r;\n const centre = (column: number, row: number) => ({ column, row, cx: origin.x + (column + (row & 1) / 2) * size, cy: origin.y + row * dy });\n return collect(points, (p) => {\n // The rectangle of rows `row` and `row + 1` holds the point: its centre is one of four.\n const row = Math.floor((p.y - origin.y) / dy);\n let best = centre(0, 0);\n let distance = Number.POSITIVE_INFINITY;\n for (const j of [row, row + 1]) {\n const column = Math.round((p.x - origin.x) / size - (j & 1) / 2);\n for (const i of [column - 1, column, column + 1]) {\n const c = centre(i, j);\n const d = (p.x - c.cx) * (p.x - c.cx) + (p.y - c.cy) * (p.y - c.cy);\n if (d < distance) {\n distance = d;\n best = c;\n }\n }\n }\n return best;\n });\n}\n\n/** Square bins of side `size` px, anchored at `origin`. */\nexport function rectBins(points: readonly Indexed[], size: number, origin: GridPoint): Bin2D[] {\n return collect(points, (p) => {\n const column = Math.floor((p.x - origin.x) / size);\n const row = Math.floor((p.y - origin.y) / size);\n return { column, row, cx: origin.x + (column + 0.5) * size, cy: origin.y + (row + 0.5) * size };\n });\n}\n\n/**\n * A pointy-top hexagon `size` px across the flats, centred at `(cx, cy)`; its two vertical sides\n * are written as `V`, so a cloud of bins weighs less (NFR §7).\n */\nexport function hexagonPath(cx: number, cy: number, size: number): string {\n const r = size / Math.sqrt(3);\n const h = size / 2;\n return `M${cx},${cy - r}L${cx + h},${cy - r / 2}V${cy + r / 2}L${cx},${cy + r}L${cx - h},${cy + r / 2}V${cy - r / 2}Z`;\n}\n","import { linearScale, type LinearScale } from '../../scales/scales';\nimport type { Rect, Stroke, TextLabel } from '../../types';\nimport { TICK_CHAR, valueAxis } from './cartesian';\nimport { inset } from './cells';\nimport { formatNumber } from './format';\n\n/**\n * The x-y frame the field charts share (DD-036) — density bins, contours, Delaunay, vector field —\n * as the connected scatter draws it: the value axis up the left with its grid, `x` niced across\n * after the value labels, its ticks under the plot. `region` is where the data's extent maps.\n */\nexport interface XYFrame {\n readonly x: LinearScale;\n readonly y: LinearScale;\n readonly region: Rect;\n readonly strokes: readonly Stroke[];\n readonly labels: readonly TextLabel[];\n}\n\nexport function xyFrame(\n area: Rect,\n plot: Rect,\n domain: { readonly x: readonly [number, number]; readonly y: readonly [number, number] },\n options: {\n readonly chart: string;\n readonly xName: string;\n readonly yName: string;\n readonly padding: number;\n readonly locale: string;\n readonly numberFormat: Intl.NumberFormatOptions | undefined;\n /** Room inside the plot for marks centred on its edge. */\n readonly inset: number;\n },\n): XYFrame {\n const inner = inset(plot, options.inset);\n const { chart, padding, locale, numberFormat } = options;\n const axis = valueAxis(inner, domain.y, { chart, property: options.yName, padding, locale, numberFormat, zero: false });\n const gutter = Math.min(Math.max(0, ...axis.labels.map((l) => l.text.length * TICK_CHAR)) + 6, inner.width / 3);\n const x = linearScale(domain.x, [inner.x + gutter, inner.x + inner.width], { chart, property: options.xName, padding, nice: true });\n const labels: TextLabel[] = [...axis.labels];\n for (const tick of x.ticks(4)) {\n labels.push({ x: x(tick), y: area.y + area.height - 5, text: formatNumber(tick, locale, numberFormat), kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n const region = { x: inner.x + gutter, y: inner.y, width: Math.max(inner.width - gutter, 1), height: inner.height };\n return { x, y: axis.scale, region, strokes: axis.strokes, labels };\n}\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `DensityBinChart` (REQ-422): 1 200 points from two overlapping clusters. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const DENSITY_BIN_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 18.48, y: 44.44 },\n { x: 38.26, y: 64.71 },\n { x: 39.92, y: 61.68 },\n { x: 38.71, y: 58.23 },\n { x: 42.91, y: 56.15 },\n { x: 47.49, y: 71.55 },\n { x: 26.68, y: 41.44 },\n { x: 31.44, y: 62.22 },\n { x: 32.33, y: 55.33 },\n { x: 44.8, y: 73.12 },\n { x: 25.8, y: 32.3 },\n { x: 33.77, y: 60.57 },\n { x: 51.08, y: 57.14 },\n { x: 26.63, y: 53.5 },\n { x: 47.35, y: 78.81 },\n { x: 29.94, y: 62.06 },\n { x: 39.28, y: 53.69 },\n { x: 40.55, y: 56.85 },\n { x: 32.99, y: 44.73 },\n { x: 17.73, y: 55.74 },\n { x: 39.31, y: 64.48 },\n { x: 16.32, y: 42.02 },\n { x: 28.1, y: 63.13 },\n { x: 16.85, y: 50.77 },\n { x: 26.81, y: 53.85 },\n { x: 20.75, y: 57.7 },\n { x: 23.21, y: 64.42 },\n { x: 32.3, y: 43.5 },\n { x: 32.52, y: 66.57 },\n { x: 20.16, y: 57.82 },\n { x: 27.08, y: 52.77 },\n { x: 44.9, y: 48.23 },\n { x: 44.27, y: 66.62 },\n { x: 31.8, y: 57.41 },\n { x: 51.2, y: 71.63 },\n { x: 47.49, y: 62.7 },\n { x: 39.6, y: 62.4 },\n { x: 37.24, y: 63.31 },\n { x: 40.53, y: 66.45 },\n { x: 25.04, y: 53.54 },\n { x: 28.57, y: 58.54 },\n { x: 26.96, y: 48.12 },\n { x: 52.53, y: 63.56 },\n { x: 44.78, y: 81.02 },\n { x: 29.58, y: 50.75 },\n { x: 39.49, y: 63.42 },\n { x: 21.95, y: 48.31 },\n { x: 50.2, y: 79.32 },\n { x: 34.37, y: 57.6 },\n { x: 32.77, y: 66.83 },\n { x: 37.41, y: 63.5 },\n { x: 31.2, y: 63.89 },\n { x: 37.97, y: 56.3 },\n { x: 24.51, y: 46.3 },\n { x: 52.19, y: 72.84 },\n { x: 19.17, y: 36.52 },\n { x: 32.75, y: 56.59 },\n { x: 31.38, y: 51.94 },\n { x: 23.08, y: 51.87 },\n { x: 38.62, y: 80.32 },\n { x: 22.22, y: 48.3 },\n { x: 10.68, y: 45.69 },\n { x: 38.78, y: 83.52 },\n { x: 38.66, y: 54.91 },\n { x: 47.56, y: 69.77 },\n { x: 46.21, y: 69.54 },\n { x: 54.63, y: 77.76 },\n { x: 41.15, y: 77.16 },\n { x: 48.52, y: 72.72 },\n { x: 21.73, y: 42.52 },\n { x: 27.44, y: 69.05 },\n { x: 32.89, y: 72.07 },\n { x: 26.88, y: 36.81 },\n { x: 27.27, y: 54.97 },\n { x: 18.48, y: 53.01 },\n { x: 25.58, y: 60.46 },\n { x: 23.17, y: 51.32 },\n { x: 20.83, y: 31.96 },\n { x: 31.99, y: 70.88 },\n { x: 28.63, y: 55.39 },\n { x: 34.9, y: 49.27 },\n { x: 32, y: 57.31 },\n { x: 24.29, y: 61.51 },\n { x: 31.14, y: 44.41 },\n { x: 34.29, y: 53.53 },\n { x: 22.42, y: 47.7 },\n { x: 41.77, y: 65.87 },\n { x: 32, y: 54.17 },\n { x: 45.74, y: 57.44 },\n { x: 32.17, y: 55.47 },\n { x: 44.76, y: 65.43 },\n { x: 40.7, y: 77.45 },\n { x: 22.41, y: 28.25 },\n { x: 44.61, y: 69.09 },\n { x: 30.23, y: 51.25 },\n { x: 48.2, y: 59.76 },\n { x: 31.89, y: 47.52 },\n { x: 22.48, y: 51 },\n { x: 34.02, y: 59.42 },\n { x: 24.56, y: 58.9 },\n { x: 32.97, y: 44.71 },\n { x: 44.87, y: 59.64 },\n { x: 28.53, y: 43.48 },\n { x: 28, y: 56.22 },\n { x: 51.96, y: 74.48 },\n { x: 45.45, y: 52.24 },\n { x: 36.13, y: 51.18 },\n { x: 47.5, y: 83.25 },\n { x: 29.84, y: 62.32 },\n { x: 29.93, y: 59.02 },\n { x: 32.21, y: 52.02 },\n { x: 40.74, y: 67.59 },\n { x: 38.98, y: 65.14 },\n { x: 24.68, y: 46.18 },\n { x: 29.5, y: 52.85 },\n { x: 40.33, y: 75.04 },\n { x: 32.67, y: 52.62 },\n { x: 35.41, y: 55.17 },\n { x: 24.83, y: 50.29 },\n { x: 24.54, y: 40.21 },\n { x: 26.22, y: 56.08 },\n { x: 21.89, y: 53.74 },\n { x: 45.31, y: 71.79 },\n { x: 28.63, y: 60.24 },\n { x: 39.03, y: 63.02 },\n { x: 42.69, y: 53.38 },\n { x: 37.97, y: 71.04 },\n { x: 49.03, y: 79.35 },\n { x: 19.03, y: 54.85 },\n { x: 43.57, y: 48.67 },\n { x: 30.89, y: 72.9 },\n { x: 36.33, y: 50.95 },\n { x: 25.24, y: 47.84 },\n { x: 38.6, y: 55.99 },\n { x: 50.78, y: 68.03 },\n { x: 33.12, y: 73.23 },\n { x: 32.17, y: 75.32 },\n { x: 38.68, y: 43.81 },\n { x: 25.14, y: 47.07 },\n { x: 36.03, y: 69.7 },\n { x: 30.93, y: 52.22 },\n { x: 37.27, y: 51.75 },\n { x: 43.22, y: 63.73 },\n { x: 33.53, y: 54.54 },\n { x: 39.85, y: 59.85 },\n { x: 26.44, y: 52.68 },\n { x: 43.48, y: 50.42 },\n { x: 43.94, y: 56.13 },\n { x: 30.87, y: 58.51 },\n { x: 25.68, y: 53.77 },\n { x: 33.92, y: 59.48 },\n { x: 43.71, y: 66.53 },\n { x: 31.47, y: 43.77 },\n { x: 20.35, y: 33.36 },\n { x: 34.68, y: 48.8 },\n { x: 32.67, y: 50.24 },\n { x: 44.52, y: 59.13 },\n { x: 21.38, y: 52.15 },\n { x: 18.98, y: 50.59 },\n { x: 53.96, y: 80.18 },\n { x: 33.71, y: 58.13 },\n { x: 36.89, y: 77.92 },\n { x: 29.81, y: 59.44 },\n { x: 37.44, y: 49.48 },\n { x: 48.11, y: 65.74 },\n { x: 42.34, y: 71.44 },\n { x: 44.65, y: 59.27 },\n { x: 26.27, y: 57.86 },\n { x: 33.35, y: 48.1 },\n { x: 33.81, y: 46.03 },\n { x: 42.08, y: 79.78 },\n { x: 47.91, y: 68.98 },\n { x: 39.32, y: 65.57 },\n { x: 32.09, y: 61.53 },\n { x: 44.04, y: 57.78 },\n { x: 23.98, y: 52.25 },\n { x: 32.74, y: 70.21 },\n { x: 46.59, y: 72.18 },\n { x: 36.87, y: 39.41 },\n { x: 39.62, y: 61.5 },\n { x: 27.47, y: 42.47 },\n { x: 20.63, y: 54.07 },\n { x: 23.78, y: 48.48 },\n { x: 34.9, y: 53.82 },\n { x: 25.95, y: 77.94 },\n { x: 47.35, y: 59.89 },\n { x: 42.99, y: 62.02 },\n { x: 34.7, y: 53.06 },\n { x: 27.85, y: 48.85 },\n { x: 23.97, y: 61.95 },\n { x: 21.2, y: 67.03 },\n { x: 35.1, y: 61.23 },\n { x: 38.61, y: 66.79 },\n { x: 28.61, y: 43.93 },\n { x: 44.83, y: 70.63 },\n { x: 25.26, y: 56.97 },\n { x: 35.75, y: 67.29 },\n { x: 41.72, y: 61.28 },\n { x: 30.71, y: 54.38 },\n { x: 22.65, y: 56.16 },\n { x: 29.86, y: 45.36 },\n { x: 46.68, y: 59.62 },\n { x: 40.99, y: 67.75 },\n { x: 51.53, y: 77.33 },\n { x: 29.86, y: 74.61 },\n { x: 22.8, y: 50.46 },\n { x: 28.02, y: 56.07 },\n { x: 30.82, y: 64.72 },\n { x: 28.12, y: 64.08 },\n { x: 33.65, y: 63.48 },\n { x: 15.76, y: 56.61 },\n { x: 30.73, y: 59.74 },\n { x: 39.42, y: 49.98 },\n { x: 45.87, y: 69.07 },\n { x: 44.27, y: 61.19 },\n { x: 30.53, y: 55.59 },\n { x: 46.63, y: 52.83 },\n { x: 30.42, y: 51.58 },\n { x: 31.67, y: 57.39 },\n { x: 25.04, y: 56.83 },\n { x: 26.6, y: 53.01 },\n { x: 39.05, y: 69.3 },\n { x: 39.91, y: 77.76 },\n { x: 31.06, y: 47.63 },\n { x: 34.72, y: 53.43 },\n { x: 44.85, y: 62.92 },\n { x: 42.66, y: 67.49 },\n { x: 30.95, y: 66.27 },\n { x: 38.37, y: 70.35 },\n { x: 43.05, y: 60.83 },\n { x: 43.89, y: 67.5 },\n { x: 42.25, y: 65.71 },\n { x: 30.1, y: 40.65 },\n { x: 31.47, y: 59.56 },\n { x: 41.36, y: 59.41 },\n { x: 20.64, y: 50.99 },\n { x: 31.3, y: 65.1 },\n { x: 18.78, y: 41.06 },\n { x: 25.97, y: 48.98 },\n { x: 15.75, y: 32.86 },\n { x: 13.84, y: 26.3 },\n { x: 29.48, y: 67.96 },\n { x: 25.77, y: 58.25 },\n { x: 33, y: 47.53 },\n { x: 42.17, y: 50.98 },\n { x: 42.99, y: 57.97 },\n { x: 36.43, y: 79.15 },\n { x: 24.33, y: 48.18 },\n { x: 33.88, y: 56.07 },\n { x: 43.23, y: 56.78 },\n { x: 33.88, y: 56.12 },\n { x: 27.01, y: 41.23 },\n { x: 37.65, y: 66.65 },\n { x: 49.72, y: 73.77 },\n { x: 25.56, y: 38.54 },\n { x: 30.79, y: 36.75 },\n { x: 39.54, y: 67.51 },\n { x: 30.23, y: 50.04 },\n { x: 47.51, y: 71.64 },\n { x: 28.03, y: 69.65 },\n { x: 45.44, y: 59.79 },\n { x: 24.8, y: 61.04 },\n { x: 60.38, y: 56.02 },\n { x: 39.05, y: 60.48 },\n { x: 39.95, y: 70.41 },\n { x: 25.77, y: 60.89 },\n { x: 35.9, y: 65.27 },\n { x: 29.34, y: 55.84 },\n { x: 35.49, y: 52.44 },\n { x: 30.9, y: 54.15 },\n { x: 26.34, y: 47.82 },\n { x: 24.56, y: 59.85 },\n { x: 29.81, y: 63.01 },\n { x: 20.71, y: 64.37 },\n { x: 34.17, y: 73.09 },\n { x: 26.8, y: 50.58 },\n { x: 19.9, y: 41.12 },\n { x: 28.52, y: 61.26 },\n { x: 42.81, y: 70.8 },\n { x: 36.07, y: 51.75 },\n { x: 33.18, y: 66.69 },\n { x: 32.15, y: 56.04 },\n { x: 41.98, y: 62.6 },\n { x: 29.58, y: 48.12 },\n { x: 43.88, y: 63.19 },\n { x: 39.65, y: 70.24 },\n { x: 25.2, y: 51.74 },\n { x: 50.2, y: 82.21 },\n { x: 44.03, y: 59.16 },\n { x: 31.93, y: 61.96 },\n { x: 28.07, y: 55.49 },\n { x: 35.22, y: 62.71 },\n { x: 19.34, y: 58.11 },\n { x: 36.53, y: 70.95 },\n { x: 41.26, y: 81.35 },\n { x: 14.71, y: 44.04 },\n { x: 50.11, y: 61.78 },\n { x: 19.26, y: 47.02 },\n { x: 42.55, y: 56.89 },\n { x: 18.69, y: 33.04 },\n { x: 21.95, y: 43.8 },\n { x: 33.21, y: 52.5 },\n { x: 44.73, y: 43.43 },\n { x: 37.93, y: 58.67 },\n { x: 43.83, y: 65.93 },\n { x: 45.66, y: 46.99 },\n { x: 21.84, y: 48.34 },\n { x: 24.66, y: 52.25 },\n { x: 38.18, y: 61.11 },\n { x: 36.99, y: 67.75 },\n { x: 43.48, y: 74.82 },\n { x: 31.37, y: 53.5 },\n { x: 42.46, y: 55.25 },\n { x: 29.04, y: 44.44 },\n { x: 24.83, y: 47.12 },\n { x: 41.66, y: 63.88 },\n { x: 34.18, y: 67.91 },\n { x: 43.41, y: 71.74 },\n { x: 36.72, y: 67.46 },\n { x: 30.95, y: 48.41 },\n { x: 34.99, y: 63.71 },\n { x: 25.43, y: 46.92 },\n { x: 26.6, y: 49.55 },\n { x: 23.37, y: 54.84 },\n { x: 34.39, y: 69.55 },\n { x: 31.99, y: 72.18 },\n { x: 29.32, y: 62.81 },\n { x: 37.73, y: 70.11 },\n { x: 44.63, y: 57.88 },\n { x: 42.28, y: 52.71 },\n { x: 34.2, y: 70.06 },\n { x: 36.39, y: 55 },\n { x: 26.81, y: 56.73 },\n { x: 38.18, y: 73.95 },\n { x: 39.44, y: 69.15 },\n { x: 41.71, y: 60.03 },\n { x: 24.63, y: 49.26 },\n { x: 31.52, y: 43.76 },\n { x: 50.46, y: 93.71 },\n { x: 28.76, y: 45.87 },\n { x: 46.95, y: 73.87 },\n { x: 49.23, y: 78.51 },\n { x: 37.98, y: 61.61 },\n { x: 31.7, y: 74.29 },\n { x: 38.35, y: 58.84 },\n { x: 43.31, y: 65.5 },\n { x: 29.7, y: 47.19 },\n { x: 38.75, y: 59.67 },\n { x: 20.03, y: 41.74 },\n { x: 37.71, y: 51.88 },\n { x: 35.29, y: 59.98 },\n { x: 36.62, y: 51.84 },\n { x: 42.36, y: 53.81 },\n { x: 46.32, y: 54.87 },\n { x: 32.93, y: 62.47 },\n { x: 37.93, y: 54.87 },\n { x: 33.93, y: 51.89 },\n { x: 22.77, y: 58.83 },\n { x: 6.55, y: 35.34 },\n { x: 24.46, y: 43.93 },\n { x: 25.17, y: 37.24 },\n { x: 31.04, y: 69.97 },\n { x: 35.47, y: 60.56 },\n { x: 22.51, y: 47.67 },\n { x: 26.78, y: 58.5 },\n { x: 20.71, y: 38.47 },\n { x: 32.06, y: 68.03 },\n { x: 41.22, y: 61.84 },\n { x: 37.96, y: 55.06 },\n { x: 41.9, y: 76.87 },\n { x: 34.05, y: 70.4 },\n { x: 35.17, y: 60.75 },\n { x: 48.5, y: 61.31 },\n { x: 15.96, y: 50.43 },\n { x: 50.44, y: 81.97 },\n { x: 36.15, y: 72.83 },\n { x: 29.8, y: 71.72 },\n { x: 37.81, y: 64.11 },\n { x: 22.56, y: 59.03 },\n { x: 45.01, y: 73.41 },\n { x: 32.56, y: 38.6 },\n { x: 42.77, y: 63.68 },\n { x: 45.83, y: 60.08 },\n { x: 39.2, y: 53.41 },\n { x: 46.12, y: 51.28 },\n { x: 37.35, y: 51.19 },\n { x: 25.01, y: 53.55 },\n { x: 20.92, y: 38.11 },\n { x: 24.41, y: 52.89 },\n { x: 29.5, y: 60.57 },\n { x: 42.79, y: 61.27 },\n { x: 34.15, y: 53.29 },\n { x: 17.92, y: 51.26 },\n { x: 36.56, y: 47.34 },\n { x: 39.29, y: 70.84 },\n { x: 23.44, y: 64.99 },\n { x: 39.11, y: 49.11 },\n { x: 39.64, y: 77.26 },\n { x: 30.88, y: 75.93 },\n { x: 23.03, y: 37.94 },\n { x: 36.9, y: 59.28 },\n { x: 31.55, y: 49.32 },\n { x: 35.29, y: 61.61 },\n { x: 12.15, y: 53.44 },\n { x: 36.32, y: 42.95 },\n { x: 35.57, y: 54.84 },\n { x: 53.2, y: 80.97 },\n { x: 37.45, y: 80.01 },\n { x: 42.65, y: 71.37 },\n { x: 14.51, y: 61.16 },\n { x: 39.42, y: 71.73 },\n { x: 53.5, y: 62.02 },\n { x: 36.97, y: 62.15 },\n { x: 35.31, y: 73.55 },\n { x: 31.19, y: 64.27 },\n { x: 38.15, y: 53.74 },\n { x: 39.58, y: 73.86 },\n { x: 26.99, y: 48.57 },\n { x: 43.75, y: 75.87 },\n { x: 38.82, y: 72.91 },\n { x: 36.67, y: 57.63 },\n { x: 42.7, y: 78.68 },\n { x: 12.27, y: 43.9 },\n { x: 39.02, y: 62.95 },\n { x: 38.2, y: 74.67 },\n { x: 41.94, y: 63.5 },\n { x: 14.76, y: 49.11 },\n { x: 41.12, y: 51.33 },\n { x: 26.3, y: 56.02 },\n { x: 31.64, y: 53.93 },\n { x: 44.75, y: 60.14 },\n { x: 26.62, y: 49.02 },\n { x: 54.2, y: 92.21 },\n { x: 37.27, y: 76.45 },\n { x: 26.89, y: 40.45 },\n { x: 37.36, y: 80.37 },\n { x: 28.8, y: 57.19 },\n { x: 39.32, y: 65.36 },\n { x: 35, y: 58.64 },\n { x: 20.06, y: 64.8 },\n { x: 43.28, y: 62.04 },\n { x: 39.18, y: 69.22 },\n { x: 45.77, y: 59.73 },\n { x: 29.32, y: 66.99 },\n { x: 19.69, y: 58 },\n { x: 36.26, y: 63.36 },\n { x: 27.84, y: 52.85 },\n { x: 34.72, y: 74.23 },\n { x: 50.94, y: 61.8 },\n { x: 33.07, y: 52.68 },\n { x: 29.74, y: 67.69 },\n { x: 45.55, y: 75.19 },\n { x: 31.52, y: 47.03 },\n { x: 42.55, y: 62.25 },\n { x: 38.49, y: 47.73 },\n { x: 13.08, y: 55.99 },\n { x: 30.82, y: 66.36 },\n { x: 31.2, y: 49.83 },\n { x: 28.6, y: 47.64 },\n { x: 44.66, y: 53.51 },\n { x: 32.06, y: 44.37 },\n { x: 41.61, y: 57.38 },\n { x: 31.31, y: 71.28 },\n { x: 36.71, y: 75.18 },\n { x: 41.67, y: 69.93 },\n { x: 38.85, y: 63.5 },\n { x: 28.06, y: 59.49 },\n { x: 36.35, y: 72.71 },\n { x: 30.66, y: 59.39 },\n { x: 21.47, y: 54.42 },\n { x: 30.14, y: 49.52 },\n { x: 46.19, y: 83.73 },\n { x: 41.21, y: 44.9 },\n { x: 29.47, y: 41.77 },\n { x: 38.18, y: 74.84 },\n { x: 28.25, y: 54.02 },\n { x: 38.95, y: 72.89 },\n { x: 30.98, y: 50.28 },\n { x: 40.41, y: 57.79 },\n { x: 35.75, y: 41.34 },\n { x: 37.83, y: 69.88 },\n { x: 15.96, y: 52.74 },\n { x: 18.93, y: 57.49 },\n { x: 52.5, y: 55.18 },\n { x: 15.17, y: 25.07 },\n { x: 36.24, y: 66.16 },\n { x: 38.54, y: 60.4 },\n { x: 23.26, y: 45.25 },\n { x: 35.77, y: 51.87 },\n { x: 32.37, y: 64.55 },\n { x: 37.35, y: 61.98 },\n { x: 30.96, y: 49.99 },\n { x: 41.22, y: 62.62 },\n { x: 23.44, y: 54.36 },\n { x: 46.9, y: 58.63 },\n { x: 34.03, y: 43.82 },\n { x: 33.36, y: 47.04 },\n { x: 33.04, y: 44.76 },\n { x: 45.25, y: 61.86 },\n { x: 43.46, y: 63.25 },\n { x: 36.86, y: 54.46 },\n { x: 36.54, y: 55.71 },\n { x: 31.32, y: 48.43 },\n { x: 39.64, y: 55.12 },\n { x: 32.12, y: 45.5 },\n { x: 30.79, y: 64.26 },\n { x: 24.17, y: 46.62 },\n { x: 24.57, y: 58.18 },\n { x: 33.84, y: 43.52 },\n { x: 34.45, y: 63.52 },\n { x: 18.43, y: 39.14 },\n { x: 26.62, y: 62.94 },\n { x: 30.9, y: 62.2 },\n { x: 43.97, y: 87.12 },\n { x: 42.61, y: 70.76 },\n { x: 28.55, y: 50 },\n { x: 16.64, y: 57.92 },\n { x: 16.51, y: 56.4 },\n { x: 42.38, y: 66.18 },\n { x: 27.73, y: 56.71 },\n { x: 34.37, y: 57.78 },\n { x: 40.1, y: 45.25 },\n { x: 30.56, y: 42.02 },\n { x: 22.05, y: 51.67 },\n { x: 32.95, y: 61.06 },\n { x: 21.02, y: 66.85 },\n { x: 23.84, y: 52.58 },\n { x: 48.93, y: 64.94 },\n { x: 40.59, y: 59.14 },\n { x: 23.95, y: 42.65 },\n { x: 25.14, y: 61.69 },\n { x: 30.9, y: 69.86 },\n { x: 32.88, y: 57.93 },\n { x: 45.71, y: 59.95 },\n { x: 39.48, y: 67.76 },\n { x: 29.78, y: 41.77 },\n { x: 35.03, y: 82.35 },\n { x: 47.09, y: 72.79 },\n { x: 37.95, y: 73.95 },\n { x: 41.96, y: 65.12 },\n { x: 23.9, y: 44.55 },\n { x: 41.22, y: 64.34 },\n { x: 22.58, y: 59.15 },\n { x: 36.68, y: 73.13 },\n { x: 26.03, y: 60.9 },\n { x: 57.26, y: 84.66 },\n { x: 25.53, y: 54.84 },\n { x: 35.49, y: 46.45 },\n { x: 42.59, y: 72.57 },\n { x: 42.83, y: 59.2 },\n { x: 44.45, y: 86.36 },\n { x: 39.91, y: 59.21 },\n { x: 40.22, y: 63.99 },\n { x: 27.46, y: 63.2 },\n { x: 50.02, y: 72.78 },\n { x: 19.53, y: 39.72 },\n { x: 42.81, y: 65.57 },\n { x: 27.46, y: 55.63 },\n { x: 47.21, y: 74.3 },\n { x: 47.91, y: 69.27 },\n { x: 43.69, y: 61.94 },\n { x: 32.39, y: 80.17 },\n { x: 43.87, y: 81.03 },\n { x: 13.9, y: 40.55 },\n { x: 44.22, y: 72.34 },\n { x: 37.06, y: 59.19 },\n { x: 31.34, y: 39.39 },\n { x: 45.27, y: 69.53 },\n { x: 34.86, y: 62.47 },\n { x: 55.18, y: 84.27 },\n { x: 10.14, y: 29.14 },\n { x: 22.98, y: 37.28 },\n { x: 37.56, y: 69.15 },\n { x: 54.71, y: 93.12 },\n { x: 45.34, y: 66.31 },\n { x: 32.33, y: 69.28 },\n { x: 36.14, y: 70.33 },\n { x: 24.05, y: 53.3 },\n { x: 47.37, y: 47.28 },\n { x: 40.94, y: 53.83 },\n { x: 36.02, y: 59.22 },\n { x: 43.02, y: 66.23 },\n { x: 41.04, y: 72.49 },\n { x: 32.68, y: 43.99 },\n { x: 31, y: 48.56 },\n { x: 33.45, y: 40.86 },\n { x: 36.76, y: 57.1 },\n { x: 40.59, y: 68.82 },\n { x: 40.55, y: 58.53 },\n { x: 35.4, y: 50.95 },\n { x: 23.34, y: 54.59 },\n { x: 20.69, y: 66.08 },\n { x: 35.15, y: 56.46 },\n { x: 22.2, y: 58.9 },\n { x: 42.44, y: 67.64 },\n { x: 36.23, y: 60.05 },\n { x: 46.19, y: 63.69 },\n { x: 53.98, y: 81.3 },\n { x: 33.41, y: 76.56 },\n { x: 35.54, y: 51.82 },\n { x: 46.54, y: 89.9 },\n { x: 40.21, y: 51.82 },\n { x: 33.24, y: 66.93 },\n { x: 29.93, y: 51.52 },\n { x: 48.25, y: 62.55 },\n { x: 28.12, y: 56.15 },\n { x: 28.67, y: 62.63 },\n { x: 31.68, y: 41.1 },\n { x: 35.14, y: 52.82 },\n { x: 57.36, y: 62.11 },\n { x: 41.19, y: 53.68 },\n { x: 30.49, y: 52.54 },\n { x: 36.14, y: 73.45 },\n { x: 58.56, y: 75 },\n { x: 36.42, y: 67.7 },\n { x: 30.84, y: 49.83 },\n { x: 31.1, y: 62.45 },\n { x: 33.03, y: 41.98 },\n { x: 38.58, y: 62.48 },\n { x: 46.22, y: 73.91 },\n { x: 39.75, y: 59.91 },\n { x: 51.08, y: 73.41 },\n { x: 16.09, y: 49.54 },\n { x: 46.28, y: 63.35 },\n { x: 28.79, y: 61.01 },\n { x: 42.28, y: 81.13 },\n { x: 29.86, y: 55.29 },\n { x: 35.76, y: 62.56 },\n { x: 35.06, y: 71.36 },\n { x: 29.19, y: 57.03 },\n { x: 42.75, y: 66.4 },\n { x: 22.04, y: 37.41 },\n { x: 43.99, y: 61.54 },\n { x: 49.86, y: 66.66 },\n { x: 40.76, y: 72.14 },\n { x: 46.11, y: 72.02 },\n { x: 29.56, y: 54.55 },\n { x: 22.67, y: 38.56 },\n { x: 26.86, y: 37.61 },\n { x: 47.41, y: 72.04 },\n { x: 25.16, y: 46.84 },\n { x: 48.97, y: 77.62 },\n { x: 31.19, y: 62.28 },\n { x: 37.94, y: 76.89 },\n { x: 31.63, y: 53.71 },\n { x: 33.47, y: 49.74 },\n { x: 51.63, y: 66.68 },\n { x: 29.99, y: 49.27 },\n { x: 19.08, y: 51.39 },\n { x: 41.17, y: 54.77 },\n { x: 44.12, y: 69.52 },\n { x: 33.05, y: 66.7 },\n { x: 38.54, y: 52.42 },\n { x: 19.78, y: 65.06 },\n { x: 43.74, y: 76 },\n { x: 32.17, y: 59.28 },\n { x: 47.92, y: 63.21 },\n { x: 31.4, y: 82.39 },\n { x: 50.78, y: 79.01 },\n { x: 39.39, y: 58.66 },\n { x: 19.64, y: 47.27 },\n { x: 54.48, y: 74.67 },\n { x: 39.33, y: 59.13 },\n { x: 31.68, y: 52.3 },\n { x: 30.79, y: 58.17 },\n { x: 31.89, y: 68.51 },\n { x: 39.89, y: 60.12 },\n { x: 30.15, y: 41.22 },\n { x: 36.72, y: 59.34 },\n { x: 38.18, y: 66.3 },\n { x: 40.29, y: 62.57 },\n { x: 34.18, y: 56.64 },\n { x: 33.49, y: 52.52 },\n { x: 46.75, y: 63.12 },\n { x: 48.6, y: 64.71 },\n { x: 33.72, y: 64.07 },\n { x: 24.51, y: 49.99 },\n { x: 38.02, y: 73.54 },\n { x: 33.58, y: 47.65 },\n { x: 45.31, y: 70.1 },\n { x: 36.2, y: 57.27 },\n { x: 32.56, y: 62.73 },\n { x: 40.66, y: 68.08 },\n { x: 44.35, y: 80.22 },\n { x: 46.93, y: 78.72 },\n { x: 40.26, y: 74.88 },\n { x: 42.95, y: 67.4 },\n { x: 25.44, y: 63.33 },\n { x: 33.01, y: 49.47 },\n { x: 34.57, y: 67.55 },\n { x: 30.85, y: 71.5 },\n { x: 30.17, y: 49.77 },\n { x: 33.99, y: 54.03 },\n { x: 33.58, y: 49.87 },\n { x: 25.65, y: 59.65 },\n { x: 22.62, y: 51.22 },\n { x: 31.52, y: 66.76 },\n { x: 32.39, y: 71.82 },\n { x: 20.96, y: 56.98 },\n { x: 41.71, y: 60.85 },\n { x: 67.58, y: 36.11 },\n { x: 74.2, y: 38.3 },\n { x: 65.2, y: 30.1 },\n { x: 75.63, y: 36.56 },\n { x: 57.91, y: 31.67 },\n { x: 71.45, y: 37.46 },\n { x: 64.44, y: 33.42 },\n { x: 59.83, y: 32.28 },\n { x: 53.81, y: 36.24 },\n { x: 47.69, y: 52.39 },\n { x: 68.81, y: 29.36 },\n { x: 51.98, y: 44.33 },\n { x: 70.89, y: 25.27 },\n { x: 46.48, y: 44.66 },\n { x: 63.7, y: 39.18 },\n { x: 80.33, y: 13.1 },\n { x: 52.44, y: 47.6 },\n { x: 43.24, y: 31.06 },\n { x: 55.16, y: 34.24 },\n { x: 63.46, y: 29.21 },\n { x: 67.24, y: 37.64 },\n { x: 54.87, y: 42.81 },\n { x: 51.51, y: 51.97 },\n { x: 64.13, y: 34.26 },\n { x: 78.04, y: 16.76 },\n { x: 52.16, y: 34.85 },\n { x: 55.69, y: 37.04 },\n { x: 65.21, y: 32.4 },\n { x: 70.43, y: 41.79 },\n { x: 53.54, y: 38.85 },\n { x: 55.28, y: 44.88 },\n { x: 57.32, y: 26.41 },\n { x: 63.78, y: 35.03 },\n { x: 63.02, y: 38.2 },\n { x: 60.58, y: 30.31 },\n { x: 68.54, y: 30.89 },\n { x: 62.97, y: 27.91 },\n { x: 62.88, y: 26.99 },\n { x: 55.78, y: 43.49 },\n { x: 73.7, y: 27.65 },\n { x: 52.48, y: 48.33 },\n { x: 61.09, y: 37.04 },\n { x: 72.32, y: 37.1 },\n { x: 53.86, y: 22.44 },\n { x: 70.67, y: 27.06 },\n { x: 79.59, y: 34.62 },\n { x: 69.73, y: 29.99 },\n { x: 44.76, y: 41.28 },\n { x: 56.84, y: 52.56 },\n { x: 71.34, y: 42.29 },\n { x: 49.63, y: 50.86 },\n { x: 64.43, y: 42.76 },\n { x: 69.72, y: 53.44 },\n { x: 65.74, y: 38.11 },\n { x: 48.86, y: 41.64 },\n { x: 58.27, y: 30.1 },\n { x: 51.73, y: 48.05 },\n { x: 62.04, y: 39.31 },\n { x: 39.92, y: 44.56 },\n { x: 64.31, y: 49.04 },\n { x: 62.05, y: 40.24 },\n { x: 54.5, y: 33.44 },\n { x: 83.13, y: 23.51 },\n { x: 66.71, y: 37 },\n { x: 73.41, y: 31.45 },\n { x: 65.49, y: 24.63 },\n { x: 46.27, y: 28.74 },\n { x: 60.42, y: 32.2 },\n { x: 72.91, y: 33.12 },\n { x: 51.46, y: 14.41 },\n { x: 62.04, y: 33.69 },\n { x: 56.6, y: 43.47 },\n { x: 64.85, y: 45.76 },\n { x: 70.18, y: 37.74 },\n { x: 51.94, y: 32.65 },\n { x: 62.03, y: 37.97 },\n { x: 72.13, y: 22.08 },\n { x: 68.86, y: 39.9 },\n { x: 57.35, y: 42.39 },\n { x: 74.54, y: 41.95 },\n { x: 56.51, y: 55.53 },\n { x: 51.01, y: 37.76 },\n { x: 47.6, y: 23.9 },\n { x: 62, y: 32.85 },\n { x: 58.18, y: 22.65 },\n { x: 68.03, y: 28.16 },\n { x: 62.82, y: 53.84 },\n { x: 63.2, y: 39.35 },\n { x: 44.48, y: 35.16 },\n { x: 79.54, y: 34.09 },\n { x: 65.22, y: 35.18 },\n { x: 56.73, y: 49.33 },\n { x: 60.47, y: 53.5 },\n { x: 59.53, y: 39.04 },\n { x: 77.67, y: 33.14 },\n { x: 85.01, y: 37.81 },\n { x: 56.6, y: 31.12 },\n { x: 72.21, y: 46.13 },\n { x: 66.85, y: 29.19 },\n { x: 70.58, y: 39.31 },\n { x: 66.81, y: 16.61 },\n { x: 61.47, y: 38.56 },\n { x: 78.63, y: 35.87 },\n { x: 70.89, y: 22.17 },\n { x: 51.11, y: 53.1 },\n { x: 68.24, y: 28.01 },\n { x: 67.63, y: 36.36 },\n { x: 48.23, y: 38.48 },\n { x: 63.64, y: 26.1 },\n { x: 66.4, y: 29.56 },\n { x: 44.18, y: 29.31 },\n { x: 65.29, y: 42.52 },\n { x: 68.23, y: 25.84 },\n { x: 74.29, y: 30.52 },\n { x: 65.43, y: 46.6 },\n { x: 76.59, y: 23.27 },\n { x: 52.35, y: 41.86 },\n { x: 62.51, y: 31.67 },\n { x: 61.97, y: 37.54 },\n { x: 83.38, y: 39.16 },\n { x: 71.37, y: 42.95 },\n { x: 63.02, y: 41.41 },\n { x: 62.77, y: 23 },\n { x: 75.39, y: 39.06 },\n { x: 45.81, y: 34.6 },\n { x: 67.8, y: 47.76 },\n { x: 49.81, y: 38.9 },\n { x: 73.09, y: 50.15 },\n { x: 80.91, y: 36.36 },\n { x: 74.45, y: 27.99 },\n { x: 68.92, y: 27.29 },\n { x: 58.5, y: 34.07 },\n { x: 62.8, y: 37.55 },\n { x: 79.32, y: 35.12 },\n { x: 67.32, y: 47.94 },\n { x: 50.15, y: 30.25 },\n { x: 54.99, y: 39.79 },\n { x: 46.24, y: 31.71 },\n { x: 61.04, y: 35.05 },\n { x: 71.67, y: 29.43 },\n { x: 55.47, y: 48.29 },\n { x: 57.17, y: 41.76 },\n { x: 69.16, y: 36.35 },\n { x: 57.27, y: 36.5 },\n { x: 63.45, y: 44.51 },\n { x: 45.11, y: 52.28 },\n { x: 73.64, y: 35.07 },\n { x: 77.66, y: 17.1 },\n { x: 65.72, y: 32.63 },\n { x: 59.72, y: 27.44 },\n { x: 71.6, y: 19.48 },\n { x: 35.16, y: 29.44 },\n { x: 57.68, y: 49.43 },\n { x: 63.01, y: 32 },\n { x: 34.79, y: 43.45 },\n { x: 73.78, y: 43.09 },\n { x: 61.19, y: 34.32 },\n { x: 67.61, y: 33.99 },\n { x: 66.92, y: 42.14 },\n { x: 70.52, y: 36.61 },\n { x: 42.46, y: 38.85 },\n { x: 85.9, y: 34.44 },\n { x: 64.47, y: 47.19 },\n { x: 51.69, y: 45.78 },\n { x: 50.65, y: 43.42 },\n { x: 51.87, y: 44.31 },\n { x: 66.1, y: 34.37 },\n { x: 60.9, y: 43.52 },\n { x: 46.89, y: 54.71 },\n { x: 56.07, y: 31.21 },\n { x: 56.02, y: 51.59 },\n { x: 85.42, y: 24.08 },\n { x: 74.38, y: 19.84 },\n { x: 59.06, y: 43.55 },\n { x: 52.59, y: 36.51 },\n { x: 60.08, y: 41.51 },\n { x: 51.5, y: 41.19 },\n { x: 58.4, y: 51.39 },\n { x: 69.54, y: 32.92 },\n { x: 70.54, y: 27.96 },\n { x: 64.14, y: 38.09 },\n { x: 64.39, y: 41.36 },\n { x: 68.21, y: 17.16 },\n { x: 47.42, y: 43.35 },\n { x: 49.31, y: 47.05 },\n { x: 42.64, y: 42.23 },\n { x: 90.42, y: 37.19 },\n { x: 76.11, y: 26.58 },\n { x: 60, y: 35.58 },\n { x: 58.34, y: 40.09 },\n { x: 47.21, y: 53.44 },\n { x: 76.48, y: 21.59 },\n { x: 60.36, y: 37.77 },\n { x: 69.23, y: 32.19 },\n { x: 53.45, y: 42.14 },\n { x: 46.82, y: 53.86 },\n { x: 65.54, y: 46.03 },\n { x: 64.47, y: 34.68 },\n { x: 57.83, y: 26.5 },\n { x: 51.27, y: 36.74 },\n { x: 79.79, y: 35.78 },\n { x: 87.28, y: 36.13 },\n { x: 67.5, y: 33.51 },\n { x: 80.02, y: 31.57 },\n { x: 69.47, y: 50.79 },\n { x: 53.66, y: 39.29 },\n { x: 60.58, y: 47.73 },\n { x: 68.64, y: 40.98 },\n { x: 38.66, y: 51.27 },\n { x: 72.21, y: 26.35 },\n { x: 73.86, y: 42.09 },\n { x: 67.39, y: 24.27 },\n { x: 51.02, y: 44.41 },\n { x: 61.53, y: 25.3 },\n { x: 55.43, y: 42.93 },\n { x: 73.84, y: 37.6 },\n { x: 70.28, y: 35.33 },\n { x: 64.25, y: 35.89 },\n { x: 60.26, y: 28.92 },\n { x: 73.23, y: 37.79 },\n { x: 54.18, y: 43.4 },\n { x: 62.22, y: 26.21 },\n { x: 43.01, y: 62.93 },\n { x: 65.83, y: 49.05 },\n { x: 52.29, y: 48.9 },\n { x: 55.48, y: 45.57 },\n { x: 49.58, y: 43.09 },\n { x: 51.17, y: 42.44 },\n { x: 53.71, y: 36.93 },\n { x: 62.36, y: 28.07 },\n { x: 52.95, y: 35.8 },\n { x: 59.36, y: 39.47 },\n { x: 68.1, y: 34.38 },\n { x: 66.29, y: 31.42 },\n { x: 52.04, y: 49.59 },\n { x: 52.76, y: 42.31 },\n { x: 56.76, y: 28.73 },\n { x: 67.26, y: 39.85 },\n { x: 40.08, y: 40.46 },\n { x: 77.1, y: 27.65 },\n { x: 68.91, y: 22.39 },\n { x: 62.08, y: 42.31 },\n { x: 65.75, y: 28.26 },\n { x: 78.04, y: 22.12 },\n { x: 64.36, y: 25.71 },\n { x: 57.24, y: 36.04 },\n { x: 64.16, y: 38.13 },\n { x: 70.53, y: 41.53 },\n { x: 74.09, y: 32.62 },\n { x: 62.85, y: 33.26 },\n { x: 40.67, y: 46.25 },\n { x: 62.9, y: 35.8 },\n { x: 70.03, y: 35.2 },\n { x: 67.18, y: 38.78 },\n { x: 55.96, y: 57.23 },\n { x: 62.67, y: 48.59 },\n { x: 68.24, y: 40.07 },\n { x: 56.53, y: 42.39 },\n { x: 65.92, y: 18.1 },\n { x: 51.35, y: 31.69 },\n { x: 81.15, y: 31.22 },\n { x: 48.42, y: 42.38 },\n { x: 43.61, y: 50.94 },\n { x: 55.81, y: 34.82 },\n { x: 52.86, y: 31.74 },\n { x: 51.34, y: 48.64 },\n { x: 64.59, y: 26.39 },\n { x: 62.94, y: 28.9 },\n { x: 63.32, y: 39.37 },\n { x: 37.26, y: 32.42 },\n { x: 62.4, y: 39.42 },\n { x: 79.36, y: 24.78 },\n { x: 54.54, y: 56.06 },\n { x: 75.23, y: 13.17 },\n { x: 70.01, y: 16.07 },\n { x: 59.52, y: 36.32 },\n { x: 55.98, y: 26.28 },\n { x: 69.12, y: 33.92 },\n { x: 68.43, y: 31.31 },\n { x: 67.21, y: 35.54 },\n { x: 58.48, y: 50.02 },\n { x: 68, y: 35.65 },\n { x: 53, y: 38.45 },\n { x: 48.45, y: 29.09 },\n { x: 81.19, y: 36.96 },\n { x: 53.21, y: 34.66 },\n { x: 64.93, y: 36.31 },\n { x: 68.54, y: 29.39 },\n { x: 57.75, y: 32.71 },\n { x: 72.85, y: 40.66 },\n { x: 51.49, y: 58.72 },\n { x: 67.85, y: 47.76 },\n { x: 61.64, y: 27.38 },\n { x: 66.79, y: 51.79 },\n { x: 76.89, y: 31.36 },\n { x: 68.76, y: 29.73 },\n { x: 67.26, y: 36.64 },\n { x: 73.7, y: 27.11 },\n { x: 44.56, y: 44.44 },\n { x: 69.79, y: 32.72 },\n { x: 48.54, y: 44.64 },\n { x: 73.73, y: 37.1 },\n { x: 51.04, y: 57.37 },\n { x: 58.27, y: 41.53 },\n { x: 49.79, y: 43.46 },\n { x: 66.47, y: 43.56 },\n { x: 58.46, y: 35.38 },\n { x: 65.36, y: 35.34 },\n { x: 63.6, y: 40.94 },\n { x: 66.66, y: 40.99 },\n { x: 57.75, y: 39.45 },\n { x: 73.68, y: 37.69 },\n { x: 39.7, y: 37.79 },\n { x: 54.61, y: 44.3 },\n { x: 73.68, y: 37.46 },\n { x: 48.78, y: 30.18 },\n { x: 73.6, y: 51.91 },\n { x: 67.96, y: 27.78 },\n { x: 49.61, y: 41.9 },\n { x: 67.94, y: 25.39 },\n { x: 49.7, y: 45.05 },\n { x: 62.54, y: 26.92 },\n { x: 63.03, y: 29.45 },\n { x: 79.76, y: 26.38 },\n { x: 72.45, y: 48.19 },\n { x: 60.5, y: 36.69 },\n { x: 74.43, y: 27.13 },\n { x: 59.91, y: 38.93 },\n { x: 54.47, y: 49.46 },\n { x: 61, y: 37.45 },\n { x: 49.31, y: 41.78 },\n { x: 58.41, y: 41.76 },\n { x: 48.81, y: 30.06 },\n { x: 64.93, y: 43.56 },\n { x: 58.81, y: 22.95 },\n { x: 57.54, y: 42.81 },\n { x: 59.12, y: 39.3 },\n { x: 72.09, y: 30.92 },\n { x: 58.49, y: 50.3 },\n { x: 67.55, y: 38.72 },\n { x: 50.4, y: 47.44 },\n { x: 61.97, y: 41.44 },\n { x: 72.28, y: 47.5 },\n { x: 55.24, y: 45.44 },\n { x: 57.84, y: 43.46 },\n { x: 72.68, y: 33.08 },\n { x: 74.66, y: 36.53 },\n { x: 56.35, y: 41.36 },\n { x: 68.67, y: 29.74 },\n { x: 52.7, y: 45.68 },\n { x: 43.86, y: 35.18 },\n { x: 61.36, y: 52.68 },\n { x: 66.44, y: 39.03 },\n { x: 61.9, y: 17.55 },\n { x: 62.63, y: 42.91 },\n { x: 61.2, y: 42.65 },\n { x: 60.13, y: 41.67 },\n { x: 56.27, y: 36.11 },\n { x: 74.5, y: 28.55 },\n { x: 62.22, y: 40.66 },\n { x: 54.04, y: 45.76 },\n { x: 70.85, y: 40.33 },\n { x: 53.02, y: 40.65 },\n { x: 59.04, y: 41.98 },\n { x: 50.12, y: 49.21 },\n { x: 65.5, y: 33.55 },\n { x: 63.48, y: 45.74 },\n { x: 72.6, y: 44.72 },\n { x: 56.99, y: 33.71 },\n { x: 61.15, y: 40.18 },\n { x: 57.37, y: 46.48 },\n { x: 75.14, y: 35.3 },\n { x: 67.88, y: 18.32 },\n { x: 61.43, y: 39.51 },\n { x: 85.32, y: 16.43 },\n { x: 69.69, y: 40.11 },\n { x: 76.99, y: 26.84 },\n { x: 58.61, y: 21.89 },\n { x: 64.7, y: 33.93 },\n { x: 57.47, y: 31.35 },\n { x: 68.74, y: 45.97 },\n { x: 70.64, y: 37.12 },\n { x: 61.73, y: 45.14 },\n { x: 68.32, y: 33.45 },\n { x: 59.39, y: 49.73 },\n { x: 61.8, y: 39.35 },\n { x: 54.62, y: 30.26 },\n { x: 71.29, y: 24.42 },\n { x: 53.86, y: 41.75 },\n { x: 62.12, y: 36.3 },\n { x: 57.38, y: 36.63 },\n { x: 63.6, y: 42.2 },\n { x: 79.54, y: 38.53 },\n { x: 53.9, y: 51.62 },\n { x: 71.32, y: 30.12 },\n { x: 62.96, y: 33.76 },\n { x: 58.76, y: 46.79 },\n { x: 63.79, y: 35.74 },\n { x: 55.55, y: 35.9 },\n { x: 59.94, y: 42.52 },\n { x: 43.58, y: 57.33 },\n { x: 61.61, y: 20.37 },\n { x: 62.62, y: 42.48 },\n { x: 53.63, y: 39.67 },\n { x: 61.59, y: 29.04 },\n { x: 56.23, y: 37.45 },\n { x: 48.77, y: 46.25 },\n { x: 66.32, y: 43.04 },\n { x: 45.38, y: 26.08 },\n { x: 58.66, y: 35.52 },\n { x: 67.73, y: 18.06 },\n { x: 57.96, y: 42.16 },\n { x: 78.18, y: 37.51 },\n { x: 70.31, y: 35.79 },\n { x: 60.26, y: 38.1 },\n { x: 47.84, y: 38.86 },\n { x: 55.2, y: 37.06 },\n { x: 62.57, y: 46.28 },\n { x: 34.87, y: 37.82 },\n { x: 58.69, y: 38.78 },\n { x: 62.34, y: 31.03 },\n { x: 72.01, y: 35.98 },\n { x: 58.6, y: 46.14 },\n { x: 81.96, y: 42.02 },\n { x: 75.59, y: 24.88 },\n { x: 73.32, y: 24.79 },\n { x: 59.99, y: 37.24 },\n { x: 79.63, y: 13.6 },\n { x: 48.55, y: 33.26 },\n { x: 52.8, y: 53.59 },\n { x: 65.98, y: 39.86 },\n { x: 50.15, y: 33.5 },\n { x: 54.54, y: 46.75 },\n { x: 61.74, y: 49.83 },\n { x: 55.99, y: 33.51 },\n { x: 72.35, y: 39.27 },\n { x: 53.48, y: 37.1 },\n { x: 69.57, y: 27.72 },\n { x: 67.27, y: 27.15 },\n { x: 49.11, y: 49.87 },\n { x: 49.04, y: 35.21 },\n { x: 69.45, y: 36.41 },\n { x: 74.44, y: 33.34 },\n { x: 66.16, y: 32.41 },\n { x: 71.28, y: 28.64 },\n { x: 54.03, y: 45.87 },\n { x: 60.8, y: 30.58 },\n { x: 46.85, y: 46.94 },\n { x: 64.74, y: 31.28 },\n { x: 53.56, y: 38.34 },\n { x: 79.48, y: 22.27 },\n { x: 57.22, y: 39.67 },\n { x: 61.37, y: 46.59 },\n { x: 50.53, y: 34.52 },\n { x: 63.21, y: 40.95 },\n { x: 65.98, y: 29.64 },\n { x: 60.01, y: 37.44 },\n { x: 56, y: 45.48 },\n { x: 50.71, y: 47.63 },\n { x: 53.65, y: 56.11 },\n { x: 62.54, y: 38.09 },\n { x: 56.64, y: 48.38 },\n { x: 68.34, y: 37.32 },\n { x: 50.1, y: 42.1 },\n { x: 72.13, y: 36.93 },\n { x: 65.89, y: 35.66 },\n { x: 71.95, y: 33.05 },\n { x: 54.98, y: 26.48 },\n { x: 78, y: 30.45 },\n { x: 80.2, y: 17.92 },\n { x: 80, y: 23.68 },\n { x: 57.4, y: 26.59 },\n { x: 60.45, y: 34.79 },\n { x: 72.4, y: 32.83 },\n { x: 82.33, y: 25.78 },\n { x: 51.06, y: 30.83 },\n { x: 52.07, y: 38.26 },\n { x: 68.19, y: 22.41 },\n { x: 60.39, y: 36.5 },\n { x: 58.78, y: 33.45 },\n { x: 68.66, y: 31.45 },\n { x: 56.41, y: 35.5 },\n { x: 48.36, y: 40.84 },\n { x: 58.4, y: 29.11 },\n { x: 62.03, y: 44.12 },\n { x: 49.84, y: 40.39 },\n { x: 62.05, y: 15.03 },\n { x: 64.23, y: 19.95 },\n { x: 61.17, y: 38.4 },\n { x: 69.18, y: 44.24 },\n { x: 51.31, y: 57.31 },\n { x: 68.63, y: 43.05 },\n { x: 46.97, y: 42.48 },\n { x: 58.45, y: 36.35 },\n { x: 72.55, y: 34.21 },\n { x: 58.46, y: 42.99 },\n { x: 63.99, y: 29.56 },\n { x: 60.72, y: 34.13 },\n { x: 48.09, y: 38.17 },\n { x: 84.3, y: 33.99 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const DENSITY_BIN_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n xKey: 'x',\n yKey: 'y',\n} as const);\n","import type { LinearScale } from '../../scales/scales';\nimport type { ChartModel, ChartRecipe, DensityBinChartProps, HitArea, RecipeContext, Stroke, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { LEGEND_BAND, cartesianPlot, legend } from '../shared/cartesian';\nimport { TONE_SCALE, rectPath, toneOf } from '../shared/cells';\nimport { checkCeiling, checkPositive, readPointCloud } from '../shared/contracts';\nimport { hexBins, hexagonPath, rectBins, type Bin2D } from '../shared/field';\nimport { accessorName, formatNumber } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { xyFrame } from '../shared/xy';\nimport { DENSITY_BIN_CHART_DEMO, DENSITY_BIN_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'DensityBinChart';\nconst BIN_SIZE = 14;\n/** Room inside the plot for the bins along its edge. */\nconst EDGE = 4;\n\n/** The data value at a position of a scale (its inverse, piecewise linear like the scale). */\nfunction valueAt(scale: LinearScale, at: number): number {\n const [d0, d1] = scale.domain;\n const r0 = scale(d0);\n const r1 = scale(d1);\n return r1 === r0 ? d0 : d0 + ((at - r0) * (d1 - d0)) / (r1 - r0);\n}\n\nconst round2 = (v: number) => Math.round(v * 100) / 100;\n\n/**\n * The key of the four tones: the counts each level holds, `toneOf(count / max)` read backwards.\n * Levels that hold no whole count are left out.\n */\nfunction keyEntries(max: number): { tone: ToneLevel; text: string }[] {\n const entries: { tone: ToneLevel; text: string }[] = [];\n for (let level = 1; level <= 4; level += 1) {\n const low = Math.floor((max * (level - 1)) / 4) + 1;\n const high = Math.floor((max * level) / 4);\n if (low <= high) entries.push({ tone: level as ToneLevel, text: low === high ? `${low}` : `${low}–${high}` });\n }\n return entries;\n}\n\nfunction buildDensityBinChart(props: DensityBinChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? DENSITY_BIN_CHART_DEMO;\n const xKey = usesDemo ? DENSITY_BIN_CHART_DEMO_KEYS.xKey : (props.xKey ?? 'x');\n const yKey = usesDemo ? DENSITY_BIN_CHART_DEMO_KEYS.yKey : (props.yKey ?? 'y');\n const hexagons = props.binShape !== 'rect';\n const size = checkPositive(CHART, 'binSize', props.binSize) ?? BIN_SIZE;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const xName = accessorName(xKey, 'x');\n const yName = accessorName(yKey, 'y');\n const pointName = `${xName}, ${yName}`;\n\n const points = readPointCloud(CHART, data, { x: xKey, y: yKey });\n checkCeiling(CHART, yName, 'observations', points.length);\n // The bins are cut in pixels, so the table waits for the layout; this one names the chart until then.\n const named = modelBase(CHART, props, context, 'Density bins', { columns: [pointName, 'count'], rows: [] });\n const measured = measure(named, props, context);\n if ('deferred' in measured) return measured.deferred;\n const card = cardLayout(props, { width: measured.width, areaHeight: measured.height, chrome: props.chrome ?? 'card', locale });\n if (points.length === 0) return emptyModel(named, props, context, { viewBox: card.viewBox, plot: cartesianPlot(card.area), strokes: [...card.strokes], labels: [...card.labels] }, data.length === 0);\n\n // A pre-pass for the bins, so the key above the plot knows the counts.\n const keyArea = { ...card.area, y: card.area.y, height: LEGEND_BAND };\n const below = { ...card.area, y: card.area.y + LEGEND_BAND, height: Math.max(card.area.height - LEGEND_BAND, 1) };\n const plot = cartesianPlot(below);\n const extent = (values: number[]) => [Math.min(...values), Math.max(...values)] as const;\n const frame = xyFrame(below, plot, { x: extent(points.map((p) => p.x)), y: extent(points.map((p) => p.y)) }, { chart: CHART, xName, yName, padding: context.domainPadding, locale, numberFormat, inset: EDGE });\n const at = points.map((p) => ({ x: frame.x(p.x), y: frame.y(p.y), index: p.index }));\n const origin = { x: frame.region.x, y: frame.region.y };\n const bins: Bin2D[] = hexagons ? hexBins(at, size, origin) : rectBins(at, size, origin);\n const max = Math.max(...bins.map((b) => b.count));\n\n const summaries = bins.map((b) => Object.freeze({ x: round2(valueAt(frame.x, b.cx)), y: round2(valueAt(frame.y, b.cy)), count: b.count }));\n const base = modelBase(CHART, props, context, 'Density bins', {\n columns: [pointName, 'count'],\n rows: summaries.map((s) => [`${formatNumber(s.x, locale, numberFormat)}, ${formatNumber(s.y, locale, numberFormat)}`, formatNumber(s.count, locale, undefined)]),\n });\n\n const strokes: Stroke[] = [...card.strokes, ...frame.strokes];\n const labels: TextLabel[] = [...card.labels, ...frame.labels];\n const hitAreas: HitArea[] = [];\n const key = legend(keyArea, keyEntries(max).map((e) => ({ name: e.text, part: 'ink' as const, tone: e.tone })));\n strokes.push(...key.strokes);\n labels.push(...key.labels);\n\n // The keyboard's grid: rows that hold a bin, in order, and the bins of a row side by side, so\n // the first of every row lines up and a sparse lattice walls nothing off (I-29).\n const rows = [...new Set(bins.map((b) => b.row))];\n const rowOf = new Map(rows.map((row, r) => [row, r]));\n const columnOf = bins.map((b, k) => bins.slice(0, k).filter((o) => o.row === b.row).length);\n const half = size / 2;\n // The densest bin, the first of them in reading order, is the heightened one (REQ-442).\n const densest = bins.findIndex((b) => b.count === max);\n // Tone by count against the densest bin, as the heatmap tones by value (DD-032); the bin's size\n // repeats the level, so the count survives `precision` mode (REQ-124). Bins of one tone are one\n // path, as the waffle's cells of one category are, so a dense cloud stays light (NFR §7).\n const byTone = new Map<ToneLevel, string[]>();\n let lone = '';\n bins.forEach((bin, k) => {\n const tone = toneOf(bin.count / max);\n const drawn = size * TONE_SCALE[tone];\n const d = hexagons ? hexagonPath(bin.cx, bin.cy, drawn) : rectPath({ x: bin.cx - drawn / 2, y: bin.cy - drawn / 2, width: drawn, height: drawn });\n if (k === densest) lone = d;\n else byTone.set(tone, [...(byTone.get(tone) ?? []), d]);\n // The readout's mark stays in the plot, whatever the lattice does at its edge.\n const x = Math.min(Math.max(bin.cx, plot.x), plot.x + plot.width);\n const y = Math.min(Math.max(bin.cy, plot.y), plot.y + plot.height);\n hitAreas.push({ seriesKey: 'count', index: k, datum: summaries[k] as (typeof summaries)[number], value: bin.count, x, y, box: { x: bin.cx - half, y: bin.cy - half, width: size, height: size }, cell: { column: columnOf[k] as number, row: rowOf.get(bin.row) as number } });\n });\n for (const tone of [1, 2, 3, 4] as const) {\n const paths = byTone.get(tone);\n if (paths) strokes.push({ d: paths.join(''), role: 'encoding', part: 'ink', tone });\n }\n strokes.push({ d: lone, role: 'encoding', part: 'ink', tone: 4 });\n strokes.push({ d: lone, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const peak = summaries[densest] as (typeof summaries)[number];\n const description =\n props.description ??\n `${base.name}. ${points.length} points of ${xName} across and ${yName} up, counted in ${bins.length} ${hexagons ? 'hexagonal' : 'square'} bins ${formatNumber(size, locale, undefined)} px across and toned by count against the densest, which holds ${formatNumber(max, locale, undefined)} near ${formatNumber(peak.x, locale, numberFormat)}, ${formatNumber(peak.y, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `DensityBinChart` recipe (REQ-422): x-y points counted in hexagonal or square bins, toned by count. */\nexport const densityBinChart: ChartRecipe<DensityBinChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildDensityBinChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `ContourChart` (REQ-423), `source: 'points'`: the density bins' two clusters. */\nexport { DENSITY_BIN_CHART_DEMO as CONTOUR_CHART_DEMO } from '../density-bin-chart/demo';\n\nexport const CONTOUR_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n xKey: 'x',\n yKey: 'y',\n} as const);\n\n/** Demo dataset of `ContourChart` (REQ-423), `source: 'grid'`: a smooth surface of two hills and a pit on a 40 × 30 grid. Its values row by row, 40 to a row; a row is `{ x, y, value }`, `x` the column and `y` the row. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const CONTOUR_CHART_GRID_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n 0.999, 1.079, 1.166, 1.259, 1.357, 1.457, 1.558, 1.656, 1.747, 1.827,\n 1.89, 1.932, 1.949, 1.942, 1.91, 1.856, 1.784, 1.697, 1.6, 1.495,\n 1.386, 1.273, 1.158, 1.039, 0.918, 0.795, 0.672, 0.553, 0.446, 0.359,\n 0.299, 0.27, 0.267, 0.283, 0.309, 0.337, 0.362, 0.382, 0.397, 0.405,\n 1.065, 1.158, 1.259, 1.369, 1.486, 1.608, 1.733, 1.856, 1.973, 2.075,\n 2.157, 2.212, 2.235, 2.225, 2.182, 2.111, 2.018, 1.907, 1.786, 1.657,\n 1.524, 1.389, 1.251, 1.109, 0.961, 0.809, 0.652, 0.497, 0.354, 0.239,\n 0.167, 0.141, 0.158, 0.2, 0.252, 0.303, 0.346, 0.378, 0.401, 0.415,\n 1.133, 1.239, 1.357, 1.486, 1.626, 1.774, 1.929, 2.084, 2.233, 2.367,\n 2.474, 2.547, 2.577, 2.563, 2.505, 2.411, 2.289, 2.148, 1.996, 1.838,\n 1.678, 1.517, 1.353, 1.185, 1.008, 0.82, 0.621, 0.415, 0.22, 0.062,\n -0.03, -0.045, 0.005, 0.09, 0.182, 0.264, 0.329, 0.377, 0.409, 0.429,\n 1.201, 1.322, 1.458, 1.608, 1.775, 1.955, 2.146, 2.341, 2.532, 2.706,\n 2.849, 2.945, 2.986, 2.965, 2.887, 2.762, 2.602, 2.422, 2.231, 2.039,\n 1.847, 1.658, 1.467, 1.271, 1.063, 0.835, 0.584, 0.314, 0.044, -0.179,\n -0.301, -0.296, -0.191, -0.042, 0.105, 0.226, 0.317, 0.381, 0.422, 0.447,\n 1.268, 1.404, 1.559, 1.734, 1.929, 2.146, 2.38, 2.625, 2.869, 3.097,\n 3.286, 3.415, 3.468, 3.439, 3.332, 3.165, 2.956, 2.726, 2.49, 2.257,\n 2.031, 1.811, 1.594, 1.371, 1.132, 0.866, 0.561, 0.215, -0.148, -0.46,\n -0.624, -0.587, -0.403, -0.171, 0.039, 0.202, 0.318, 0.395, 0.444, 0.472,\n 1.332, 1.483, 1.657, 1.857, 2.085, 2.342, 2.625, 2.928, 3.238, 3.533,\n 3.782, 3.955, 4.026, 3.984, 3.839, 3.616, 3.346, 3.055, 2.765, 2.487,\n 2.225, 1.976, 1.733, 1.488, 1.225, 0.927, 0.578, 0.167, -0.285, -0.689,\n -0.896, -0.826, -0.562, -0.251, 0.013, 0.208, 0.341, 0.427, 0.479, 0.507,\n 1.39, 1.556, 1.749, 1.974, 2.234, 2.533, 2.87, 3.238, 3.624, 3.999,\n 4.323, 4.551, 4.644, 4.586, 4.393, 4.101, 3.756, 3.396, 3.047, 2.722,\n 2.424, 2.148, 1.886, 1.624, 1.347, 1.035, 0.666, 0.225, -0.267, -0.714,\n -0.945, -0.863, -0.565, -0.226, 0.057, 0.26, 0.394, 0.479, 0.527, 0.552,\n 1.44, 1.619, 1.829, 2.077, 2.368, 2.707, 3.097, 3.533, 3.999, 4.463,\n 4.872, 5.164, 5.283, 5.206, 4.955, 4.585, 4.159, 3.726, 3.319, 2.949,\n 2.62, 2.323, 2.048, 1.78, 1.502, 1.195, 0.838, 0.419, -0.04, -0.452,\n -0.67, -0.612, -0.361, -0.065, 0.184, 0.364, 0.482, 0.553, 0.592, 0.608,\n 1.479, 1.668, 1.893, 2.159, 2.476, 2.85, 3.286, 3.782, 4.323, 4.872,\n 5.365, 5.721, 5.867, 5.771, 5.464, 5.018, 4.515, 4.017, 3.559, 3.155,\n 2.803, 2.494, 2.215, 1.951, 1.686, 1.401, 1.082, 0.724, 0.346, 0.016,\n -0.168, -0.156, 0.001, 0.204, 0.383, 0.515, 0.601, 0.649, 0.671, 0.674,\n 1.505, 1.702, 1.936, 2.215, 2.549, 2.947, 3.415, 3.954, 4.55, 5.162,\n 5.72, 6.128, 6.295, 6.186, 5.836, 5.335, 4.779, 4.237, 3.748, 3.324,\n 2.963, 2.654, 2.382, 2.133, 1.891, 1.641, 1.372, 1.085, 0.795, 0.546,\n 0.392, 0.36, 0.423, 0.527, 0.626, 0.699, 0.744, 0.763, 0.763, 0.749,\n 1.518, 1.718, 1.955, 2.24, 2.581, 2.988, 3.469, 4.025, 4.641, 5.279,\n 5.863, 6.293, 6.471, 6.36, 5.998, 5.481, 4.91, 4.359, 3.867, 3.446,\n 3.093, 2.797, 2.544, 2.319, 2.108, 1.899, 1.682, 1.459, 1.239, 1.048,\n 0.913, 0.847, 0.838, 0.859, 0.885, 0.9, 0.901, 0.888, 0.864, 0.831,\n 1.517, 1.715, 1.95, 2.232, 2.568, 2.968, 3.44, 3.983, 4.583, 5.2,\n 5.764, 6.179, 6.355, 6.256, 5.919, 5.433, 4.894, 4.373, 3.909, 3.515,\n 3.189, 2.92, 2.697, 2.506, 2.333, 2.166, 1.998, 1.827, 1.658, 1.503,\n 1.375, 1.282, 1.221, 1.178, 1.143, 1.107, 1.066, 1.02, 0.97, 0.918,\n 1.501, 1.694, 1.922, 2.192, 2.513, 2.893, 3.335, 3.838, 4.388, 4.947,\n 5.453, 5.823, 5.986, 5.911, 5.628, 5.212, 4.744, 4.287, 3.879, 3.533,\n 3.25, 3.023, 2.841, 2.69, 2.56, 2.438, 2.315, 2.187, 2.054, 1.92,\n 1.792, 1.676, 1.573, 1.481, 1.395, 1.313, 1.233, 1.154, 1.079, 1.006,\n 1.473, 1.657, 1.872, 2.126, 2.424, 2.771, 3.17, 3.616, 4.095, 4.574,\n 5.002, 5.315, 5.459, 5.412, 5.198, 4.871, 4.497, 4.126, 3.792, 3.509,\n 3.283, 3.107, 2.973, 2.871, 2.789, 2.713, 2.635, 2.544, 2.437, 2.315,\n 2.181, 2.042, 1.903, 1.767, 1.637, 1.513, 1.396, 1.287, 1.186, 1.093,\n 1.434, 1.606, 1.806, 2.038, 2.307, 2.616, 2.965, 3.348, 3.751, 4.145,\n 4.493, 4.749, 4.874, 4.856, 4.71, 4.475, 4.197, 3.918, 3.665, 3.454,\n 3.291, 3.173, 3.094, 3.046, 3.017, 2.992, 2.958, 2.902, 2.817, 2.701,\n 2.557, 2.393, 2.217, 2.04, 1.868, 1.705, 1.554, 1.415, 1.29, 1.177,\n 1.387, 1.545, 1.727, 1.936, 2.175, 2.444, 2.742, 3.063, 3.393, 3.712,\n 3.989, 4.196, 4.307, 4.313, 4.226, 4.071, 3.883, 3.69, 3.517, 3.378,\n 3.28, 3.223, 3.204, 3.214, 3.24, 3.269, 3.281, 3.261, 3.196, 3.082,\n 2.923, 2.73, 2.517, 2.299, 2.086, 1.885, 1.701, 1.535, 1.387, 1.255,\n 1.333, 1.477, 1.641, 1.827, 2.035, 2.266, 2.517, 2.782, 3.05, 3.305,\n 3.527, 3.696, 3.795, 3.821, 3.781, 3.693, 3.579, 3.462, 3.362, 3.29,\n 3.254, 3.257, 3.297, 3.366, 3.451, 3.535, 3.596, 3.612, 3.566, 3.451,\n 3.274, 3.049, 2.798, 2.538, 2.285, 2.049, 1.834, 1.642, 1.473, 1.325,\n 1.275, 1.405, 1.551, 1.714, 1.895, 2.091, 2.301, 2.519, 2.737, 2.942,\n 3.121, 3.262, 3.354, 3.395, 3.391, 3.354, 3.3, 3.245, 3.206, 3.193,\n 3.214, 3.273, 3.368, 3.493, 3.636, 3.774, 3.883, 3.934, 3.906, 3.79,\n 3.593, 3.337, 3.046, 2.747, 2.458, 2.189, 1.947, 1.733, 1.546, 1.384,\n 1.215, 1.332, 1.461, 1.603, 1.759, 1.926, 2.101, 2.281, 2.459, 2.626,\n 2.774, 2.893, 2.98, 3.032, 3.055, 3.056, 3.048, 3.043, 3.054, 3.09,\n 3.159, 3.265, 3.408, 3.583, 3.775, 3.963, 4.115, 4.199, 4.187, 4.069,\n 3.854, 3.569, 3.246, 2.914, 2.594, 2.299, 2.036, 1.804, 1.603, 1.429,\n 1.155, 1.259, 1.373, 1.497, 1.63, 1.772, 1.92, 2.069, 2.216, 2.355,\n 2.479, 2.584, 2.667, 2.727, 2.769, 2.798, 2.824, 2.856, 2.905, 2.979,\n 3.085, 3.228, 3.409, 3.621, 3.852, 4.077, 4.262, 4.37, 4.372, 4.254,\n 4.028, 3.724, 3.378, 3.023, 2.683, 2.372, 2.094, 1.851, 1.641, 1.46,\n 1.096, 1.188, 1.288, 1.396, 1.512, 1.632, 1.757, 1.883, 2.006, 2.123,\n 2.23, 2.324, 2.404, 2.469, 2.524, 2.573, 2.623, 2.682, 2.758, 2.859,\n 2.991, 3.159, 3.364, 3.599, 3.851, 4.096, 4.299, 4.422, 4.432, 4.317,\n 4.09, 3.78, 3.428, 3.066, 2.719, 2.402, 2.119, 1.872, 1.658, 1.474,\n 1.038, 1.12, 1.209, 1.303, 1.402, 1.506, 1.613, 1.72, 1.825, 1.925,\n 2.019, 2.105, 2.181, 2.25, 2.313, 2.375, 2.441, 2.517, 2.611, 2.729,\n 2.876, 3.057, 3.27, 3.512, 3.768, 4.014, 4.218, 4.342, 4.356, 4.249,\n 4.031, 3.733, 3.391, 3.039, 2.7, 2.388, 2.11, 1.866, 1.654, 1.472,\n 0.983, 1.056, 1.134, 1.216, 1.303, 1.393, 1.485, 1.577, 1.668, 1.756,\n 1.839, 1.918, 1.991, 2.061, 2.129, 2.198, 2.274, 2.36, 2.464, 2.59,\n 2.742, 2.923, 3.133, 3.366, 3.61, 3.841, 4.03, 4.145, 4.159, 4.062,\n 3.863, 3.59, 3.275, 2.947, 2.629, 2.334, 2.069, 1.835, 1.631, 1.454,\n 0.93, 0.995, 1.064, 1.137, 1.213, 1.291, 1.371, 1.451, 1.531, 1.609,\n 1.684, 1.757, 1.827, 1.896, 1.965, 2.038, 2.118, 2.21, 2.316, 2.442,\n 2.591, 2.764, 2.961, 3.174, 3.393, 3.598, 3.763, 3.862, 3.873, 3.788,\n 3.615, 3.375, 3.096, 2.803, 2.515, 2.245, 2, 1.782, 1.589, 1.422,\n 0.88, 0.939, 1, 1.064, 1.131, 1.2, 1.27, 1.341, 1.411, 1.481,\n 1.549, 1.617, 1.683, 1.75, 1.819, 1.893, 1.973, 2.064, 2.168, 2.289,\n 2.429, 2.588, 2.764, 2.952, 3.14, 3.313, 3.45, 3.53, 3.536, 3.464,\n 3.318, 3.115, 2.877, 2.623, 2.371, 2.131, 1.91, 1.711, 1.534, 1.378,\n 0.834, 0.886, 0.941, 0.998, 1.057, 1.118, 1.18, 1.242, 1.305, 1.368,\n 1.431, 1.493, 1.556, 1.62, 1.687, 1.758, 1.837, 1.924, 2.023, 2.135,\n 2.261, 2.403, 2.556, 2.715, 2.872, 3.013, 3.122, 3.183, 3.185, 3.124,\n 3.004, 2.837, 2.638, 2.424, 2.208, 2, 1.805, 1.627, 1.467, 1.324,\n 0.79, 0.837, 0.886, 0.937, 0.989, 1.044, 1.099, 1.155, 1.211, 1.268,\n 1.325, 1.383, 1.442, 1.502, 1.566, 1.634, 1.708, 1.789, 1.88, 1.982,\n 2.094, 2.216, 2.346, 2.478, 2.605, 2.717, 2.801, 2.846, 2.845, 2.794,\n 2.697, 2.561, 2.398, 2.221, 2.039, 1.861, 1.692, 1.536, 1.393, 1.265,\n 0.749, 0.791, 0.835, 0.881, 0.928, 0.976, 1.026, 1.076, 1.127, 1.179,\n 1.231, 1.284, 1.339, 1.396, 1.455, 1.518, 1.587, 1.661, 1.743, 1.833,\n 1.931, 2.035, 2.142, 2.25, 2.351, 2.438, 2.502, 2.534, 2.531, 2.488,\n 2.409, 2.3, 2.168, 2.022, 1.871, 1.721, 1.576, 1.44, 1.315, 1.2,\n 0.71, 0.748, 0.788, 0.829, 0.872, 0.915, 0.96, 1.005, 1.051, 1.098,\n 1.146, 1.195, 1.245, 1.298, 1.353, 1.411, 1.473, 1.54, 1.613, 1.691,\n 1.775, 1.862, 1.951, 2.037, 2.117, 2.183, 2.231, 2.254, 2.248, 2.213,\n 2.149, 2.061, 1.954, 1.835, 1.71, 1.584, 1.462, 1.345, 1.236, 1.135,\n 0.674, 0.709, 0.745, 0.782, 0.82, 0.859, 0.9, 0.941, 0.983, 1.025,\n 1.069, 1.114, 1.16, 1.208, 1.258, 1.311, 1.367, 1.427, 1.491, 1.558,\n 1.629, 1.701, 1.773, 1.842, 1.904, 1.955, 1.99, 2.006, 1.999, 1.969,\n 1.917, 1.846, 1.76, 1.663, 1.56, 1.455, 1.352, 1.252, 1.157, 1.068,\n ].map((value, k) => Object.freeze({ x: k % 40, y: Math.floor(k / 40), value })),\n);\n\nexport const CONTOUR_CHART_GRID_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n xKey: 'x',\n yKey: 'y',\n valueKey: 'value',\n} as const);\n","import { linearScale } from '../../scales/scales';\nimport type { ChartModel, ChartRecipe, ContourChartProps, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot } from '../shared/cartesian';\nimport { toneOf } from '../shared/cells';\nimport { checkCeiling, checkLevels, readGrid, readPointCloud } from '../shared/contracts';\nimport { silverman } from '../shared/density';\nimport { contours, densityGrid, type GridPoint, type ScalarGrid } from '../shared/field';\nimport { accessorName, formatNumber } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { sortedValues } from '../shared/stats';\nimport { xyFrame } from '../shared/xy';\nimport { CONTOUR_CHART_DEMO, CONTOUR_CHART_DEMO_KEYS, CONTOUR_CHART_GRID_DEMO, CONTOUR_CHART_GRID_DEMO_KEYS } from './demo';\n\nconst CHART = 'ContourChart';\nconst LEVELS = 4;\n/** Density nodes per px of the plot, and their bounds per axis (a 60 × 60 field at most, REQ-445). */\nconst NODE_SPACING = 6;\nconst MIN_NODES = 10;\nconst MAX_NODES = 60;\n/** A level is named on its longest line when the line is at least this long, in px. */\nconst LABEL_ROOM = 20;\n/** Two level names closer than this, in px, would collide: the later one is left to the table. */\nconst LABEL_GAP = 28;\n\nconst PERCENT: Intl.NumberFormatOptions = { style: 'percent', maximumFractionDigits: 0 };\n\n/** The field to contour, in grid coordinates, and how a grid coordinate maps to data. */\ninterface Field {\n readonly grid: ScalarGrid;\n readonly xAt: (i: number) => number;\n readonly yAt: (j: number) => number;\n}\n\n/** A fractional index along sorted node values, as the data value it stands for. */\nconst along = (nodes: readonly number[]) => (t: number) => {\n const i = Math.min(Math.max(Math.floor(t), 0), nodes.length - 1);\n const next = nodes[i + 1];\n return next === undefined ? (nodes[i] as number) : (nodes[i] as number) + (t - i) * (next - (nodes[i] as number));\n};\n\n/** The nice ticks strictly inside `(low, high)`, about `count` of them. */\nfunction ticksInside(low: number, high: number, count: number): number[] {\n if (!(high > low)) return [];\n const scale = linearScale([low, high], [0, 1], { chart: CHART, property: 'levels', padding: 0 });\n return scale.ticks(count + 1).filter((t) => t > low && t < high);\n}\n\nfunction buildContourChart(props: ContourChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const fromGrid = props.source === 'grid';\n const data = props.data ?? (fromGrid ? CONTOUR_CHART_GRID_DEMO : CONTOUR_CHART_DEMO);\n const demoKeys = fromGrid ? CONTOUR_CHART_GRID_DEMO_KEYS : CONTOUR_CHART_DEMO_KEYS;\n const xKey = usesDemo ? demoKeys.xKey : (props.xKey ?? 'x');\n const yKey = usesDemo ? demoKeys.yKey : (props.yKey ?? 'y');\n const valueKey = usesDemo ? CONTOUR_CHART_GRID_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n // `levels` says how the data's values are read, so it goes with the data (REQ-099).\n const levels = (usesDemo ? undefined : checkLevels(CHART, props.levels)) ?? LEVELS;\n const filled = props.filled !== false;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const xName = accessorName(xKey, 'x');\n const yName = accessorName(yKey, 'y');\n const valueName = fromGrid ? accessorName(valueKey, 'value') : 'density';\n\n const values = fromGrid ? readGrid(CHART, data, { x: xKey, y: yKey, value: valueKey }) : undefined;\n const points = fromGrid ? [] : readPointCloud(CHART, data, { x: xKey, y: yKey });\n if (values) checkCeiling(CHART, valueName, 'gridCells', values.xs.length * values.ys.length);\n else checkCeiling(CHART, yName, 'observations', points.length);\n const format = (level: number) => (fromGrid ? formatNumber(level, locale, numberFormat) : formatNumber(level, locale, PERCENT));\n\n // The levels are known before the layout: of the grid's values, or as shares of the density's peak.\n const known = values ? values.values.filter((v): v is number => v !== undefined) : [];\n let thresholds: readonly number[];\n if (Array.isArray(levels)) thresholds = levels;\n else if (values) thresholds = ticksInside(Math.min(...known), Math.max(...known), levels as number);\n else thresholds = Array.from({ length: levels as number }, (_, k) => (k + 1) / ((levels as number) + 1));\n\n const named = modelBase(CHART, props, context, 'Contours', { columns: [valueName, 'band'], rows: [] });\n const measured = measure(named, props, context);\n if ('deferred' in measured) return measured.deferred;\n const card = cardLayout(props, { width: measured.width, areaHeight: measured.height, chrome: props.chrome ?? 'card', locale });\n const plot = cartesianPlot(card.area);\n const empty = values ? known.length === 0 : points.length === 0;\n if (empty) return emptyModel(named, props, context, { viewBox: card.viewBox, plot, strokes: [...card.strokes], labels: [...card.labels] }, data.length === 0);\n\n let field: Field;\n let method: string;\n let frame: ReturnType<typeof xyFrame>;\n const site = { chart: CHART, xName, yName, padding: context.domainPadding, locale, numberFormat, inset: 0 };\n if (values) {\n frame = xyFrame(card.area, plot, { x: [values.xs[0] as number, values.xs.at(-1) as number], y: [values.ys[0] as number, values.ys.at(-1) as number] }, site);\n field = { grid: { nx: values.xs.length, ny: values.ys.length, values: values.values }, xAt: along(values.xs), yAt: along(values.ys) };\n method = `over a ${values.xs.length} × ${values.ys.length} grid of ${xName} and ${yName}`;\n } else {\n // An Epanechnikov density (DD-029), each axis' bandwidth by Silverman's rule; the field\n // reaches a bandwidth past the points so every contour closes inside it.\n const bx = silverman(sortedValues(points.map((p) => p.x)));\n const by = silverman(sortedValues(points.map((p) => p.y)));\n const xs = points.map((p) => p.x);\n const ys = points.map((p) => p.y);\n frame = xyFrame(card.area, plot, { x: [Math.min(...xs) - bx, Math.max(...xs) + bx], y: [Math.min(...ys) - by, Math.max(...ys) + by] }, site);\n const nodes = (px: number) => Math.min(Math.max(Math.round(px / NODE_SPACING) + 1, MIN_NODES), MAX_NODES);\n const nx = nodes(frame.region.width);\n const ny = nodes(frame.region.height);\n const [x0, x1] = frame.x.domain;\n const [y0, y1] = frame.y.domain;\n const density = densityGrid(points, { x: [x0, x1], y: [y0, y1] }, nx, ny, { x: bx, y: by });\n const peak = Math.max(...density.values);\n field = {\n grid: { nx, ny, values: density.values.map((v) => (peak > 0 ? (v ?? 0) / peak : 0)) },\n xAt: (i) => x0 + (i * (x1 - x0)) / (nx - 1),\n yAt: (j) => y0 + (j * (y1 - y0)) / (ny - 1),\n };\n method = `of the density of ${points.length} points of ${xName} and ${yName}, estimated with an Epanechnikov kernel (bandwidths ${formatNumber(bx, locale, undefined)} and ${formatNumber(by, locale, undefined)}, Silverman's rule) and read as a share of its peak`;\n }\n const toPx = (p: GridPoint) => ({ x: frame.x(field.xAt(p.x)), y: frame.y(field.yAt(p.y)) });\n const pathOf = (polylines: readonly (readonly GridPoint[])[], close: boolean) =>\n polylines\n .map((line) =>\n line\n .map(toPx)\n .map((q, k) => `${k === 0 ? 'M' : 'L'}${q.x},${q.y}`)\n .join('') + (close ? 'Z' : ''),\n )\n .join('');\n\n const strokes: Stroke[] = [...card.strokes, ...frame.strokes];\n const labels: TextLabel[] = [...card.labels, ...frame.labels];\n const hitAreas: HitArea[] = [];\n const traced = contours(field.grid, thresholds);\n const drawn = traced.map((c, k) => ({ ...c, k })).filter((c) => c.rings.length > 0);\n const summaries = thresholds.map((level, k) => Object.freeze({ level, next: thresholds[k + 1] ?? null }));\n const base = modelBase(CHART, props, context, 'Contours', {\n columns: [valueName, 'band'],\n rows: summaries.map((s) => [format(s.level), s.next === null ? `${format(s.level)} and above` : `${format(s.level)} to ${format(s.next)}`]),\n });\n\n let top = '';\n const placed: { x: number; y: number }[] = [];\n drawn.forEach((c, n) => {\n const band = pathOf(c.band, true);\n top = filled ? band : pathOf(c.rings, true);\n if (filled) strokes.push({ d: band, role: 'encoding', part: 'ink', tone: toneOf((n + 1) / drawn.length) });\n else if (c.lines.length > 0) strokes.push({ d: pathOf(c.lines, false), role: 'encoding', part: 'ink' });\n // The level is named and reached on its longest line, or its first ring when it draws none.\n const lines = c.lines.length > 0 ? c.lines : c.rings;\n const length = (line: readonly GridPoint[]) => line.map(toPx).reduce((s, q, i, all) => (i === 0 ? 0 : s + Math.sqrt((q.x - (all[i - 1] as typeof q).x) ** 2 + (q.y - (all[i - 1] as typeof q).y) ** 2)), 0);\n // Levels are named at staggered places along their lines, longest line first, and not where a\n // name already is.\n const byLength = [...lines].sort((a, b) => length(b) - length(a));\n const longest = byLength[0] as readonly GridPoint[];\n const at = (line: readonly GridPoint[], f: number) => toPx(line[Math.min(Math.floor(line.length * f), line.length - 1)] as GridPoint);\n const fractions = [(n + 1) / (drawn.length + 1), 0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875];\n const spots = byLength.filter((line) => length(line) >= LABEL_ROOM).flatMap((line) => fractions.map((f) => at(line, f)));\n const free = spots.find((q) => placed.every((o) => (o.x - q.x) * (o.x - q.x) + (o.y - q.y) * (o.y - q.y) >= LABEL_GAP * LABEL_GAP));\n const mid = free ?? at(longest, fractions[0] as number);\n if (free && c.lines.length > 0) {\n placed.push(free);\n labels.push({ x: free.x, y: free.y - 3, text: format(c.level), kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n hitAreas.push({ seriesKey: 'band', index: c.k, datum: summaries[c.k] as (typeof summaries)[number], value: c.level, x: mid.x, y: mid.y });\n });\n // One heightened element (REQ-442): the highest band — the region above the top level drawn.\n if (top !== '') {\n strokes.push({ d: top, role: 'encoding', part: 'heighten', paint: 'fill' });\n if (!filled) strokes.push({ d: top, role: 'encoding', part: 'ink', paint: 'stroke' });\n }\n\n const shown = drawn.map((c) => format(c.level));\n const description =\n props.description ??\n `${base.name}. Contours ${method}, ${filled ? 'filled in bands' : 'as lines'} at ${shown.length} levels${shown.length > 0 ? `: ${shown.join(', ')}; the highest band is ${shown.at(-1) as string} and above` : ''}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `ContourChart` recipe (REQ-423): iso-lines and filled bands of a point density or a regular grid. */\nexport const contourChart: ChartRecipe<ContourChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildContourChart });\n","/**\n * The Delaunay triangulation and its Voronoi dual (DD-028, REQ-424), owned. Points are snapped to\n * the 2-decimal output grid, so they are integers in hundredths, and inserted in `(x, y, index)`\n * order (Bowyer–Watson). The predicates are exact: each is evaluated in doubles with an error\n * bound and, when the bound cannot settle its sign, again with `BigInt`. Degenerate inputs —\n * duplicates, collinear and co-circular points — are handled by the predicates, never by\n * perturbation, so Node and every browser produce the same mesh (REQ-435).\n */\n\ninterface Point {\n readonly x: number;\n readonly y: number;\n}\n\n/** Relative error bounds of the double evaluations, with a margin over Shewchuk's. */\nconst ORIENT_BOUND = 1e-15;\nconst CIRCLE_BOUND = 1e-14;\n\n/**\n * Twice the signed area of `a, b, c` for integer coordinates: positive when they turn\n * counter-clockwise (y up), 0 when collinear; exact in sign.\n */\nexport function orient2d(a: Point, b: Point, c: Point): number {\n const left = (b.x - a.x) * (c.y - a.y);\n const right = (b.y - a.y) * (c.x - a.x);\n const det = left - right;\n if (Math.abs(det) > ORIENT_BOUND * (Math.abs(left) + Math.abs(right))) return det;\n const big = (BigInt(b.x) - BigInt(a.x)) * (BigInt(c.y) - BigInt(a.y)) - (BigInt(b.y) - BigInt(a.y)) * (BigInt(c.x) - BigInt(a.x));\n return big === 0n ? 0 : big > 0n ? 1 : -1;\n}\n\n/**\n * For counter-clockwise `a, b, c` with integer coordinates: positive when `d` is strictly inside\n * their circumcircle, 0 on it, negative outside; exact in sign.\n */\nexport function inCircle(a: Point, b: Point, c: Point, d: Point): number {\n // Translating by `d` is exact: the coordinates are integers.\n const adx = a.x - d.x;\n const ady = a.y - d.y;\n const bdx = b.x - d.x;\n const bdy = b.y - d.y;\n const cdx = c.x - d.x;\n const cdy = c.y - d.y;\n const alift = adx * adx + ady * ady;\n const blift = bdx * bdx + bdy * bdy;\n const clift = cdx * cdx + cdy * cdy;\n const bc = bdx * cdy - cdx * bdy;\n const ca = cdx * ady - adx * cdy;\n const ab = adx * bdy - bdx * ady;\n const det = alift * bc + blift * ca + clift * ab;\n const permanent =\n alift * (Math.abs(bdx * cdy) + Math.abs(cdx * bdy)) + blift * (Math.abs(cdx * ady) + Math.abs(adx * cdy)) + clift * (Math.abs(adx * bdy) + Math.abs(bdx * ady));\n if (Math.abs(det) > CIRCLE_BOUND * permanent) return det;\n const [Ax, Ay, Bx, By, Cx, Cy] = [adx, ady, bdx, bdy, cdx, cdy].map((v) => BigInt(v)) as [bigint, bigint, bigint, bigint, bigint, bigint];\n const big = (Ax * Ax + Ay * Ay) * (Bx * Cy - Cx * By) + (Bx * Bx + By * By) * (Cx * Ay - Ax * Cy) + (Cx * Cx + Cy * Cy) * (Ax * By - Bx * Ay);\n return big === 0n ? 0 : big > 0n ? 1 : -1;\n}\n\nexport interface Triangulation {\n /** Three indices of the input per triangle, counter-clockwise in hundredths (y up). */\n readonly triangles: readonly number[];\n /** The mesh's edges once each, `[u, v]` with `u < v`, sorted. */\n readonly edges: readonly (readonly [number, number])[];\n /** The indices drawn, ascending: the first of each point on the 2-decimal grid. */\n readonly kept: readonly number[];\n /** The indices dropped as repeating a kept point, ascending. */\n readonly duplicates: readonly number[];\n}\n\n/** Bowyer–Watson inside a super-triangle far beyond the points, removed at the end. */\nexport function triangulate(points: readonly Point[]): Triangulation {\n const n = points.length;\n const q = points.map((p) => ({ x: Math.round(p.x * 100), y: Math.round(p.y * 100) }));\n const order = q.map((_, k) => k).sort((a, b) => (q[a] as Point).x - (q[b] as Point).x || (q[a] as Point).y - (q[b] as Point).y || a - b);\n const kept: number[] = [];\n const duplicates: number[] = [];\n order.forEach((k, s) => {\n const prev = s > 0 ? (q[order[s - 1] as number] as Point) : undefined;\n const p = q[k] as Point;\n if (prev && prev.x === p.x && prev.y === p.y) duplicates.push(k);\n else kept.push(k);\n });\n duplicates.sort((a, b) => a - b);\n\n const sortedKept = [...kept].sort((a, b) => a - b);\n if (kept.length < 3) return { triangles: [], edges: chain(kept), kept: sortedKept, duplicates };\n\n // The super-triangle: vertices n, n + 1, n + 2, a million spans away.\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n for (const k of kept) {\n const p = q[k] as Point;\n minX = Math.min(minX, p.x);\n minY = Math.min(minY, p.y);\n maxX = Math.max(maxX, p.x);\n maxY = Math.max(maxY, p.y);\n }\n const span = Math.max(maxX - minX, maxY - minY, 1) * 1_000_000;\n const mx = Math.floor((minX + maxX) / 2);\n const my = Math.floor((minY + maxY) / 2);\n const vertex: Point[] = [...q, { x: mx - 3 * span, y: my - span }, { x: mx + 3 * span, y: my - span }, { x: mx, y: my + 3 * span }];\n const width = n + 3;\n\n const corners: number[] = [];\n const alive: boolean[] = [];\n const owner = new Map<number, number>();\n const add = (a: number, b: number, c: number): number => {\n const t = alive.length;\n corners.push(a, b, c);\n alive.push(true);\n owner.set(a * width + b, t);\n owner.set(b * width + c, t);\n owner.set(c * width + a, t);\n return t;\n };\n const remove = (t: number) => {\n alive[t] = false;\n const [a, b, c] = [corners[3 * t] as number, corners[3 * t + 1] as number, corners[3 * t + 2] as number];\n for (const [u, v] of [[a, b], [b, c], [c, a]] as const) if (owner.get(u * width + v) === t) owner.delete(u * width + v);\n };\n const at = (k: number) => vertex[k] as Point;\n\n let last = add(n, n + 1, n + 2);\n for (const k of kept) {\n const p = at(k);\n // Walk from the last triangle made towards the point (a visibility walk ends in a Delaunay mesh).\n let t = last;\n for (let steps = 0; steps <= alive.length; steps += 1) {\n let moved = false;\n for (let e = 0; e < 3; e += 1) {\n const a = corners[3 * t + e] as number;\n const b = corners[3 * t + ((e + 1) % 3)] as number;\n if (orient2d(at(a), at(b), p) < 0) {\n const across = owner.get(b * width + a);\n if (across !== undefined) {\n t = across;\n moved = true;\n break;\n }\n }\n }\n if (!moved) break;\n }\n // The cavity: the triangle holding the point, and every triangle reached across an edge whose\n // circumcircle holds it strictly.\n const cavity = new Set([t]);\n const stack = [t];\n const boundary: [number, number][] = [];\n while (stack.length > 0) {\n const u = stack.pop() as number;\n for (let e = 0; e < 3; e += 1) {\n const a = corners[3 * u + e] as number;\n const b = corners[3 * u + ((e + 1) % 3)] as number;\n const across = owner.get(b * width + a);\n if (across !== undefined && !cavity.has(across)) {\n const [x, y, z] = [corners[3 * across] as number, corners[3 * across + 1] as number, corners[3 * across + 2] as number];\n if (inCircle(at(x), at(y), at(z), p) > 0) {\n cavity.add(across);\n stack.push(across);\n continue;\n }\n }\n if (across === undefined || !cavity.has(across)) boundary.push([a, b]);\n }\n }\n for (const u of cavity) remove(u);\n // An edge first seen as boundary may have joined the cavity later: keep only true borders.\n for (const [a, b] of boundary) {\n const across = owner.get(b * width + a);\n if (across !== undefined && cavity.has(across)) continue;\n last = add(a, b, k);\n }\n }\n\n const triangles: number[] = [];\n for (let t = 0; t < alive.length; t += 1) {\n if (!alive[t]) continue;\n const tri = [corners[3 * t] as number, corners[3 * t + 1] as number, corners[3 * t + 2] as number];\n if (tri.some((v) => v >= n)) continue;\n triangles.push(...tri);\n }\n const sides = new Map<string, readonly [number, number]>();\n for (let t = 0; t < triangles.length; t += 3) {\n for (let e = 0; e < 3; e += 1) {\n const u = triangles[t + e] as number;\n const v = triangles[t + ((e + 1) % 3)] as number;\n const edge = [Math.min(u, v), Math.max(u, v)] as const;\n sides.set(`${edge[0]},${edge[1]}`, edge);\n }\n }\n const edges = triangles.length === 0 ? chain(kept) : [...sides.values()].sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n return { triangles, edges, kept: sortedKept, duplicates };\n}\n\n/** Points with no triangle — two, or all on one line — are joined in `(x, y)` order. */\nfunction chain(order: readonly number[]): [number, number][] {\n const edges: [number, number][] = [];\n for (let s = 1; s < order.length; s += 1) {\n const u = order[s - 1] as number;\n const v = order[s] as number;\n edges.push([Math.min(u, v), Math.max(u, v)]);\n }\n return edges.sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n}\n\n/**\n * The Voronoi cell of each kept point inside `rect`: the rectangle clipped (Sutherland–Hodgman) by\n * the half-plane nearer the site than each of its mesh neighbours. Keyed by the site's index, in\n * `kept` order.\n */\nexport function voronoiCells(\n points: readonly Point[],\n mesh: Triangulation,\n rect: { readonly x: number; readonly y: number; readonly width: number; readonly height: number },\n): Map<number, Point[]> {\n const neighbours = new Map<number, number[]>(mesh.kept.map((k) => [k, []]));\n for (const [u, v] of mesh.edges) {\n neighbours.get(u)?.push(v);\n neighbours.get(v)?.push(u);\n }\n const cells = new Map<number, Point[]>();\n for (const k of mesh.kept) {\n const s = points[k] as Point;\n let cell: Point[] = [\n { x: rect.x, y: rect.y },\n { x: rect.x + rect.width, y: rect.y },\n { x: rect.x + rect.width, y: rect.y + rect.height },\n { x: rect.x, y: rect.y + rect.height },\n ];\n for (const m of neighbours.get(k) ?? []) {\n const o = points[m] as Point;\n // Keep the side of the bisector nearer `s`: (p − mid) · (o − s) ≤ 0.\n const nx = o.x - s.x;\n const ny = o.y - s.y;\n const offset = (nx * (o.x + s.x) + ny * (o.y + s.y)) / 2;\n const side = (p: Point) => p.x * nx + p.y * ny - offset;\n const clipped: Point[] = [];\n for (let e = 0; e < cell.length; e += 1) {\n const a = cell[e] as Point;\n const b = cell[(e + 1) % cell.length] as Point;\n const sa = side(a);\n const sb = side(b);\n if (sa <= 0) clipped.push(a);\n if ((sa < 0 && sb > 0) || (sa > 0 && sb < 0)) {\n const f = sa / (sa - sb);\n clipped.push({ x: a.x + f * (b.x - a.x), y: a.y + f * (b.y - a.y) });\n }\n }\n cell = clipped;\n }\n cells.set(k, cell);\n }\n return cells;\n}\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `DelaunayChart` (REQ-424): 60 distinct labelled points. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const DELAUNAY_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { label: 'P01', x: 45, y: 27.3 },\n { label: 'P02', x: 37.4, y: 55.6 },\n { label: 'P03', x: 90.6, y: 39.1 },\n { label: 'P04', x: 27.4, y: 1.7 },\n { label: 'P05', x: 0.2, y: 31.8 },\n { label: 'P06', x: 40.8, y: 17.6 },\n { label: 'P07', x: 63.2, y: 56.9 },\n { label: 'P08', x: 65.5, y: 52.9 },\n { label: 'P09', x: 38.7, y: 42.3 },\n { label: 'P10', x: 6.1, y: 17.1 },\n { label: 'P11', x: 92.8, y: 39 },\n { label: 'P12', x: 54.3, y: 58 },\n { label: 'P13', x: 80, y: 54.1 },\n { label: 'P14', x: 9.6, y: 49.1 },\n { label: 'P15', x: 92.2, y: 44.5 },\n { label: 'P16', x: 98.8, y: 7.8 },\n { label: 'P17', x: 85.5, y: 35.4 },\n { label: 'P18', x: 92.9, y: 40.9 },\n { label: 'P19', x: 71.3, y: 8.3 },\n { label: 'P20', x: 44.5, y: 13 },\n { label: 'P21', x: 39, y: 36 },\n { label: 'P22', x: 96, y: 33.3 },\n { label: 'P23', x: 54.1, y: 33.8 },\n { label: 'P24', x: 70.5, y: 8.9 },\n { label: 'P25', x: 22.6, y: 12.9 },\n { label: 'P26', x: 25.6, y: 14.8 },\n { label: 'P27', x: 63.9, y: 55.5 },\n { label: 'P28', x: 83.9, y: 43.3 },\n { label: 'P29', x: 3.8, y: 13.3 },\n { label: 'P30', x: 34, y: 12.3 },\n { label: 'P31', x: 98, y: 57.4 },\n { label: 'P32', x: 50.4, y: 23.7 },\n { label: 'P33', x: 34.6, y: 31.4 },\n { label: 'P34', x: 17.7, y: 34.2 },\n { label: 'P35', x: 62.2, y: 52.3 },\n { label: 'P36', x: 26.3, y: 22.5 },\n { label: 'P37', x: 13, y: 9.5 },\n { label: 'P38', x: 95.2, y: 50.7 },\n { label: 'P39', x: 42.2, y: 32.6 },\n { label: 'P40', x: 94.5, y: 8.4 },\n { label: 'P41', x: 46.2, y: 28.2 },\n { label: 'P42', x: 86.6, y: 0.2 },\n { label: 'P43', x: 15.6, y: 46.7 },\n { label: 'P44', x: 45.5, y: 18.3 },\n { label: 'P45', x: 38.5, y: 39.8 },\n { label: 'P46', x: 28.6, y: 6.2 },\n { label: 'P47', x: 24.2, y: 39.6 },\n { label: 'P48', x: 22.8, y: 37.7 },\n { label: 'P49', x: 38.6, y: 58.7 },\n { label: 'P50', x: 16.2, y: 44.6 },\n { label: 'P51', x: 66.9, y: 40.6 },\n { label: 'P52', x: 40.3, y: 2.6 },\n { label: 'P53', x: 34.3, y: 52.2 },\n { label: 'P54', x: 6.4, y: 28.8 },\n { label: 'P55', x: 37.2, y: 30.1 },\n { label: 'P56', x: 34, y: 17.1 },\n { label: 'P57', x: 23.4, y: 24.1 },\n { label: 'P58', x: 56.9, y: 45.3 },\n { label: 'P59', x: 14.2, y: 56.2 },\n { label: 'P60', x: 21.3, y: 38 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const DELAUNAY_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n xKey: 'x',\n yKey: 'y',\n labelKey: 'label',\n} as const);\n","import type { ChartModel, ChartRecipe, DelaunayChartProps, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot } from '../shared/cartesian';\nimport { warnValue } from '../shared/cells';\nimport { checkCeiling, readPointCloud } from '../shared/contracts';\nimport { triangulate, voronoiCells } from '../shared/delaunay';\nimport { accessorName, circlePath, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { xyFrame } from '../shared/xy';\nimport { DELAUNAY_CHART_DEMO, DELAUNAY_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'DelaunayChart';\nconst DOT_RADIUS = 2.5;\nconst HEIGHTEN_RADIUS = 3.5;\n/** Up to this many points every given label is printed; past it, only the heightened point's. */\nconst LABELLED = 24;\n\nconst round2 = (v: number) => Math.round(v * 100) / 100;\n\ntype Spot = { readonly x: number; readonly y: number };\n\nfunction buildDelaunayChart(props: DelaunayChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? DELAUNAY_CHART_DEMO;\n const xKey = usesDemo ? DELAUNAY_CHART_DEMO_KEYS.xKey : (props.xKey ?? 'x');\n const yKey = usesDemo ? DELAUNAY_CHART_DEMO_KEYS.yKey : (props.yKey ?? 'y');\n const labelKey = usesDemo ? DELAUNAY_CHART_DEMO_KEYS.labelKey : props.labelKey;\n const voronoi = props.mesh === 'voronoi';\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const xName = accessorName(xKey, 'x');\n const yName = accessorName(yKey, 'y');\n const labelName = labelKey === undefined ? 'point' : accessorName(labelKey, 'label');\n\n const points = readPointCloud(CHART, data, { x: xKey, y: yKey, ...(labelKey === undefined ? {} : { label: labelKey }) });\n checkCeiling(CHART, yName, 'points', points.length);\n // Degrees are known after the layout; until then the table names the chart.\n const named = modelBase(CHART, props, context, voronoi ? 'Voronoi cells' : 'Delaunay triangulation', { columns: [labelName, xName, yName, 'degree'], rows: [] });\n const measured = measure(named, props, context);\n if ('deferred' in measured) return measured.deferred;\n const card = cardLayout(props, { width: measured.width, areaHeight: measured.height, chrome: props.chrome ?? 'card', locale });\n const plot = cartesianPlot(card.area);\n if (points.length === 0) return emptyModel(named, props, context, { viewBox: card.viewBox, plot, strokes: [...card.strokes], labels: [...card.labels] }, data.length === 0);\n\n const extent = (values: number[]) => [Math.min(...values), Math.max(...values)] as const;\n const frame = xyFrame(card.area, plot, { x: extent(points.map((p) => p.x)), y: extent(points.map((p) => p.y)) }, { chart: CHART, xName, yName, padding: context.domainPadding, locale, numberFormat, inset: HEIGHTEN_RADIUS });\n // The mesh is built on the drawn positions, rounded as they are emitted (REQ-002), so it is the\n // triangulation of what the reader sees.\n const at = points.map((p) => ({ x: round2(frame.x(p.x)), y: round2(frame.y(p.y)) }));\n const mesh = triangulate(at);\n if (mesh.duplicates.length > 0) {\n warnValue(CHART, yName, `${mesh.duplicates.length} points fall on another; the first row is drawn. The first repeat is row ${(points[mesh.duplicates[0] as number] as (typeof points)[number]).index}.`);\n }\n const degree = new Map<number, number>(mesh.kept.map((k) => [k, 0]));\n for (const [u, v] of mesh.edges) {\n degree.set(u, (degree.get(u) as number) + 1);\n degree.set(v, (degree.get(v) as number) + 1);\n }\n\n const byRow = new Map(points.map((p, k) => [p.index, k]));\n const base = modelBase(CHART, props, context, voronoi ? 'Voronoi cells' : 'Delaunay triangulation', {\n columns: [labelName, xName, yName, 'degree'],\n rows: data.map((datum, index) => {\n const k = byRow.get(index);\n const d = k === undefined ? undefined : degree.get(k);\n return [\n labelKey === undefined ? String(index + 1) : formatValue(read(labelKey, datum, index), locale, { useGrouping: false, maximumFractionDigits: 2 }),\n formatValue(read(xKey, datum, index), locale, numberFormat),\n formatValue(read(yKey, datum, index), locale, numberFormat),\n d === undefined ? '—' : formatNumber(d, locale, undefined),\n ];\n }),\n });\n\n const strokes: Stroke[] = [...card.strokes, ...frame.strokes];\n const labels: TextLabel[] = [...card.labels, ...frame.labels];\n const hitAreas: HitArea[] = [];\n // The mesh as one secondary stroke, drawn in the order of its coordinates, so the row order does\n // not move it (I-23).\n const key = (q: { x: number; y: number }) => `${q.x},${q.y}`;\n let d = '';\n if (voronoi) {\n const cells = voronoiCells(at, mesh, frame.region);\n d = [...cells.entries()]\n .sort(([a], [b]) => (at[a] as { x: number }).x - (at[b] as { x: number }).x || (at[a] as { y: number }).y - (at[b] as { y: number }).y)\n .map(([, cell]) => `${cell.map((q, i) => `${i === 0 ? 'M' : 'L'}${key({ x: round2(q.x), y: round2(q.y) })}`).join('')}Z`)\n .join('');\n } else {\n d = mesh.edges\n .map(([u, v]) => [at[u], at[v]].sort((a, b) => (a as Spot).x - (b as Spot).x || (a as Spot).y - (b as Spot).y) as [Spot, Spot])\n .sort(([a, b], [c, e]) => a.x - c.x || a.y - c.y || b.x - e.x || b.y - e.y)\n .map(([a, b]) => `M${key(a)}L${key(b)}`)\n .join('');\n }\n if (d !== '') strokes.push({ d, role: 'encoding', part: 'ink-secondary' });\n\n // Points in data order, which the keyboard walks (API delta §3).\n const kept = [...mesh.kept].sort((a, b) => (points[a] as { index: number }).index - (points[b] as { index: number }).index);\n // The busiest point: the highest degree; a tie goes to the lowest x, then y, so the row order\n // cannot change it (I-23).\n const rank = (k: number) => [-(degree.get(k) as number), (points[k] as { x: number }).x, (points[k] as { y: number }).y];\n const before = (a: number, b: number) => {\n const [ra, rb] = [rank(a), rank(b)];\n return (ra[0] as number) - (rb[0] as number) || (ra[1] as number) - (rb[1] as number) || (ra[2] as number) - (rb[2] as number);\n };\n const busiest = kept.reduce((best, k) => (before(k, best) < 0 ? k : best), kept[0] as number);\n for (const k of kept) {\n const p = points[k] as (typeof points)[number];\n const q = at[k] as { x: number; y: number };\n strokes.push({ d: circlePath(q.x, q.y, DOT_RADIUS), role: 'encoding', part: 'ink' });\n hitAreas.push({ seriesKey: 'degree', index: p.index, datum: p.datum, value: degree.get(k) as number, x: q.x, y: q.y, box: { x: q.x - DOT_RADIUS, y: q.y - DOT_RADIUS, width: 2 * DOT_RADIUS, height: 2 * DOT_RADIUS } });\n if (p.label !== undefined && (kept.length <= LABELLED || k === busiest)) {\n labels.push({ x: q.x + 5, y: q.y - 5, text: p.label, kind: 'tick', part: 'axis', anchor: q.x > plot.x + plot.width * 0.8 ? 'end' : 'start' });\n }\n }\n const top = points[busiest] as (typeof points)[number];\n const spot = at[busiest] as { x: number; y: number };\n\n // One heightened element (REQ-442): the point of highest degree.\n const mark = circlePath(spot.x, spot.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 const triangles = mesh.triangles.length / 3;\n const name = top.label ?? `point ${top.index + 1}`;\n const description =\n props.description ??\n `${base.name}. ${voronoi ? `The Voronoi cells of ${kept.length} points` : `The Delaunay triangulation of ${kept.length} points, ${triangles} triangles`}, ${xName} across and ${yName} up; ${name} has the most neighbours, ${formatNumber(degree.get(busiest) as number, locale, undefined)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `DelaunayChart` recipe (REQ-424): the triangulation of x-y points, or its Voronoi cells. */\nexport const delaunayChart: ChartRecipe<DelaunayChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildDelaunayChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `VectorFieldChart` (REQ-425): a vortex on a 20 × 14 grid, its speed falling off with distance. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const VECTOR_FIELD_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 0, y: 0, u: 0.852, v: -1.246 },\n { x: 1, y: 0, u: 0.967, v: -1.264 },\n { x: 2, y: 0, u: 1.097, v: -1.266 },\n { x: 3, y: 0, u: 1.244, v: -1.244 },\n { x: 4, y: 0, u: 1.405, v: -1.189 },\n { x: 5, y: 0, u: 1.576, v: -1.091 },\n { x: 6, y: 0, u: 1.745, v: -0.94 },\n { x: 7, y: 0, u: 1.898, v: -0.73 },\n { x: 8, y: 0, u: 2.016, v: -0.465 },\n { x: 9, y: 0, u: 2.08, v: -0.16 },\n { x: 10, y: 0, u: 2.08, v: 0.16 },\n { x: 11, y: 0, u: 2.016, v: 0.465 },\n { x: 12, y: 0, u: 1.898, v: 0.73 },\n { x: 13, y: 0, u: 1.745, v: 0.94 },\n { x: 14, y: 0, u: 1.576, v: 1.091 },\n { x: 15, y: 0, u: 1.405, v: 1.189 },\n { x: 16, y: 0, u: 1.244, v: 1.244 },\n { x: 17, y: 0, u: 1.097, v: 1.266 },\n { x: 18, y: 0, u: 0.967, v: 1.264 },\n { x: 19, y: 0, u: 0.852, v: 1.246 },\n { x: 0, y: 1, u: 0.783, v: -1.352 },\n { x: 1, y: 1, u: 0.898, v: -1.388 },\n { x: 2, y: 1, u: 1.033, v: -1.408 },\n { x: 3, y: 1, u: 1.189, v: -1.405 },\n { x: 4, y: 1, u: 1.366, v: -1.366 },\n { x: 5, y: 1, u: 1.56, v: -1.277 },\n { x: 6, y: 1, u: 1.76, v: -1.12 },\n { x: 7, y: 1, u: 1.947, v: -0.885 },\n { x: 8, y: 1, u: 2.095, v: -0.571 },\n { x: 9, y: 1, u: 2.178, v: -0.198 },\n { x: 10, y: 1, u: 2.178, v: 0.198 },\n { x: 11, y: 1, u: 2.095, v: 0.571 },\n { x: 12, y: 1, u: 1.947, v: 0.885 },\n { x: 13, y: 1, u: 1.76, v: 1.12 },\n { x: 14, y: 1, u: 1.56, v: 1.277 },\n { x: 15, y: 1, u: 1.366, v: 1.366 },\n { x: 16, y: 1, u: 1.189, v: 1.405 },\n { x: 17, y: 1, u: 1.033, v: 1.408 },\n { x: 18, y: 1, u: 0.898, v: 1.388 },\n { x: 19, y: 1, u: 0.783, v: 1.352 },\n { x: 0, y: 2, u: 0.69, v: -1.456 },\n { x: 1, y: 2, u: 0.8, v: -1.511 },\n { x: 2, y: 2, u: 0.933, v: -1.554 },\n { x: 3, y: 2, u: 1.091, v: -1.576 },\n { x: 4, y: 2, u: 1.277, v: -1.56 },\n { x: 5, y: 2, u: 1.488, v: -1.488 },\n { x: 6, y: 2, u: 1.714, v: -1.333 },\n { x: 7, y: 2, u: 1.935, v: -1.075 },\n { x: 8, y: 2, u: 2.118, v: -0.706 },\n { x: 9, y: 2, u: 2.222, v: -0.247 },\n { x: 10, y: 2, u: 2.222, v: 0.247 },\n { x: 11, y: 2, u: 2.118, v: 0.706 },\n { x: 12, y: 2, u: 1.935, v: 1.075 },\n { x: 13, y: 2, u: 1.714, v: 1.333 },\n { x: 14, y: 2, u: 1.488, v: 1.488 },\n { x: 15, y: 2, u: 1.277, v: 1.56 },\n { x: 16, y: 2, u: 1.091, v: 1.576 },\n { x: 17, y: 2, u: 0.933, v: 1.554 },\n { x: 18, y: 2, u: 0.8, v: 1.511 },\n { x: 19, y: 2, u: 0.69, v: 1.456 },\n { x: 0, y: 3, u: 0.571, v: -1.551 },\n { x: 1, y: 3, u: 0.67, v: -1.627 },\n { x: 2, y: 3, u: 0.791, v: -1.695 },\n { x: 3, y: 3, u: 0.94, v: -1.745 },\n { x: 4, y: 3, u: 1.12, v: -1.76 },\n { x: 5, y: 3, u: 1.333, v: -1.714 },\n { x: 6, y: 3, u: 1.573, v: -1.573 },\n { x: 7, y: 3, u: 1.818, v: -1.299 },\n { x: 8, y: 3, u: 2.029, v: -0.87 },\n { x: 9, y: 3, u: 2.154, v: -0.308 },\n { x: 10, y: 3, u: 2.154, v: 0.308 },\n { x: 11, y: 3, u: 2.029, v: 0.87 },\n { x: 12, y: 3, u: 1.818, v: 1.299 },\n { x: 13, y: 3, u: 1.573, v: 1.573 },\n { x: 14, y: 3, u: 1.333, v: 1.714 },\n { x: 15, y: 3, u: 1.12, v: 1.76 },\n { x: 16, y: 3, u: 0.94, v: 1.745 },\n { x: 17, y: 3, u: 0.791, v: 1.695 },\n { x: 18, y: 3, u: 0.67, v: 1.627 },\n { x: 19, y: 3, u: 0.571, v: 1.551 },\n { x: 0, y: 4, u: 0.429, v: -1.631 },\n { x: 1, y: 4, u: 0.508, v: -1.726 },\n { x: 2, y: 4, u: 0.606, v: -1.818 },\n { x: 3, y: 4, u: 0.73, v: -1.898 },\n { x: 4, y: 4, u: 0.885, v: -1.947 },\n { x: 5, y: 4, u: 1.075, v: -1.935 },\n { x: 6, y: 4, u: 1.299, v: -1.818 },\n { x: 7, y: 4, u: 1.538, v: -1.538 },\n { x: 8, y: 4, u: 1.754, v: -1.053 },\n { x: 9, y: 4, u: 1.887, v: -0.377 },\n { x: 10, y: 4, u: 1.887, v: 0.377 },\n { x: 11, y: 4, u: 1.754, v: 1.053 },\n { x: 12, y: 4, u: 1.538, v: 1.538 },\n { x: 13, y: 4, u: 1.299, v: 1.818 },\n { x: 14, y: 4, u: 1.075, v: 1.935 },\n { x: 15, y: 4, u: 0.885, v: 1.947 },\n { x: 16, y: 4, u: 0.73, v: 1.898 },\n { x: 17, y: 4, u: 0.606, v: 1.818 },\n { x: 18, y: 4, u: 0.508, v: 1.726 },\n { x: 19, y: 4, u: 0.429, v: 1.631 },\n { x: 0, y: 5, u: 0.267, v: -1.689 },\n { x: 1, y: 5, u: 0.317, v: -1.799 },\n { x: 2, y: 5, u: 0.382, v: -1.911 },\n { x: 3, y: 5, u: 0.465, v: -2.016 },\n { x: 4, y: 5, u: 0.571, v: -2.095 },\n { x: 5, y: 5, u: 0.706, v: -2.118 },\n { x: 6, y: 5, u: 0.87, v: -2.029 },\n { x: 7, y: 5, u: 1.053, v: -1.754 },\n { x: 8, y: 5, u: 1.224, v: -1.224 },\n { x: 9, y: 5, u: 1.333, v: -0.444 },\n { x: 10, y: 5, u: 1.333, v: 0.444 },\n { x: 11, y: 5, u: 1.224, v: 1.224 },\n { x: 12, y: 5, u: 1.053, v: 1.754 },\n { x: 13, y: 5, u: 0.87, v: 2.029 },\n { x: 14, y: 5, u: 0.706, v: 2.118 },\n { x: 15, y: 5, u: 0.571, v: 2.095 },\n { x: 16, y: 5, u: 0.465, v: 2.016 },\n { x: 17, y: 5, u: 0.382, v: 1.911 },\n { x: 18, y: 5, u: 0.317, v: 1.799 },\n { x: 19, y: 5, u: 0.267, v: 1.689 },\n { x: 0, y: 6, u: 0.09, v: -1.719 },\n { x: 1, y: 6, u: 0.108, v: -1.838 },\n { x: 2, y: 6, u: 0.131, v: -1.961 },\n { x: 3, y: 6, u: 0.16, v: -2.08 },\n { x: 4, y: 6, u: 0.198, v: -2.178 },\n { x: 5, y: 6, u: 0.247, v: -2.222 },\n { x: 6, y: 6, u: 0.308, v: -2.154 },\n { x: 7, y: 6, u: 0.377, v: -1.887 },\n { x: 8, y: 6, u: 0.444, v: -1.333 },\n { x: 9, y: 6, u: 0.488, v: -0.488 },\n { x: 10, y: 6, u: 0.488, v: 0.488 },\n { x: 11, y: 6, u: 0.444, v: 1.333 },\n { x: 12, y: 6, u: 0.377, v: 1.887 },\n { x: 13, y: 6, u: 0.308, v: 2.154 },\n { x: 14, y: 6, u: 0.247, v: 2.222 },\n { x: 15, y: 6, u: 0.198, v: 2.178 },\n { x: 16, y: 6, u: 0.16, v: 2.08 },\n { x: 17, y: 6, u: 0.131, v: 1.961 },\n { x: 18, y: 6, u: 0.108, v: 1.838 },\n { x: 19, y: 6, u: 0.09, v: 1.719 },\n { x: 0, y: 7, u: -0.09, v: -1.719 },\n { x: 1, y: 7, u: -0.108, v: -1.838 },\n { x: 2, y: 7, u: -0.131, v: -1.961 },\n { x: 3, y: 7, u: -0.16, v: -2.08 },\n { x: 4, y: 7, u: -0.198, v: -2.178 },\n { x: 5, y: 7, u: -0.247, v: -2.222 },\n { x: 6, y: 7, u: -0.308, v: -2.154 },\n { x: 7, y: 7, u: -0.377, v: -1.887 },\n { x: 8, y: 7, u: -0.444, v: -1.333 },\n { x: 9, y: 7, u: -0.488, v: -0.488 },\n { x: 10, y: 7, u: -0.488, v: 0.488 },\n { x: 11, y: 7, u: -0.444, v: 1.333 },\n { x: 12, y: 7, u: -0.377, v: 1.887 },\n { x: 13, y: 7, u: -0.308, v: 2.154 },\n { x: 14, y: 7, u: -0.247, v: 2.222 },\n { x: 15, y: 7, u: -0.198, v: 2.178 },\n { x: 16, y: 7, u: -0.16, v: 2.08 },\n { x: 17, y: 7, u: -0.131, v: 1.961 },\n { x: 18, y: 7, u: -0.108, v: 1.838 },\n { x: 19, y: 7, u: -0.09, v: 1.719 },\n { x: 0, y: 8, u: -0.267, v: -1.689 },\n { x: 1, y: 8, u: -0.317, v: -1.799 },\n { x: 2, y: 8, u: -0.382, v: -1.911 },\n { x: 3, y: 8, u: -0.465, v: -2.016 },\n { x: 4, y: 8, u: -0.571, v: -2.095 },\n { x: 5, y: 8, u: -0.706, v: -2.118 },\n { x: 6, y: 8, u: -0.87, v: -2.029 },\n { x: 7, y: 8, u: -1.053, v: -1.754 },\n { x: 8, y: 8, u: -1.224, v: -1.224 },\n { x: 9, y: 8, u: -1.333, v: -0.444 },\n { x: 10, y: 8, u: -1.333, v: 0.444 },\n { x: 11, y: 8, u: -1.224, v: 1.224 },\n { x: 12, y: 8, u: -1.053, v: 1.754 },\n { x: 13, y: 8, u: -0.87, v: 2.029 },\n { x: 14, y: 8, u: -0.706, v: 2.118 },\n { x: 15, y: 8, u: -0.571, v: 2.095 },\n { x: 16, y: 8, u: -0.465, v: 2.016 },\n { x: 17, y: 8, u: -0.382, v: 1.911 },\n { x: 18, y: 8, u: -0.317, v: 1.799 },\n { x: 19, y: 8, u: -0.267, v: 1.689 },\n { x: 0, y: 9, u: -0.429, v: -1.631 },\n { x: 1, y: 9, u: -0.508, v: -1.726 },\n { x: 2, y: 9, u: -0.606, v: -1.818 },\n { x: 3, y: 9, u: -0.73, v: -1.898 },\n { x: 4, y: 9, u: -0.885, v: -1.947 },\n { x: 5, y: 9, u: -1.075, v: -1.935 },\n { x: 6, y: 9, u: -1.299, v: -1.818 },\n { x: 7, y: 9, u: -1.538, v: -1.538 },\n { x: 8, y: 9, u: -1.754, v: -1.053 },\n { x: 9, y: 9, u: -1.887, v: -0.377 },\n { x: 10, y: 9, u: -1.887, v: 0.377 },\n { x: 11, y: 9, u: -1.754, v: 1.053 },\n { x: 12, y: 9, u: -1.538, v: 1.538 },\n { x: 13, y: 9, u: -1.299, v: 1.818 },\n { x: 14, y: 9, u: -1.075, v: 1.935 },\n { x: 15, y: 9, u: -0.885, v: 1.947 },\n { x: 16, y: 9, u: -0.73, v: 1.898 },\n { x: 17, y: 9, u: -0.606, v: 1.818 },\n { x: 18, y: 9, u: -0.508, v: 1.726 },\n { x: 19, y: 9, u: -0.429, v: 1.631 },\n { x: 0, y: 10, u: -0.571, v: -1.551 },\n { x: 1, y: 10, u: -0.67, v: -1.627 },\n { x: 2, y: 10, u: -0.791, v: -1.695 },\n { x: 3, y: 10, u: -0.94, v: -1.745 },\n { x: 4, y: 10, u: -1.12, v: -1.76 },\n { x: 5, y: 10, u: -1.333, v: -1.714 },\n { x: 6, y: 10, u: -1.573, v: -1.573 },\n { x: 7, y: 10, u: -1.818, v: -1.299 },\n { x: 8, y: 10, u: -2.029, v: -0.87 },\n { x: 9, y: 10, u: -2.154, v: -0.308 },\n { x: 10, y: 10, u: -2.154, v: 0.308 },\n { x: 11, y: 10, u: -2.029, v: 0.87 },\n { x: 12, y: 10, u: -1.818, v: 1.299 },\n { x: 13, y: 10, u: -1.573, v: 1.573 },\n { x: 14, y: 10, u: -1.333, v: 1.714 },\n { x: 15, y: 10, u: -1.12, v: 1.76 },\n { x: 16, y: 10, u: -0.94, v: 1.745 },\n { x: 17, y: 10, u: -0.791, v: 1.695 },\n { x: 18, y: 10, u: -0.67, v: 1.627 },\n { x: 19, y: 10, u: -0.571, v: 1.551 },\n { x: 0, y: 11, u: -0.69, v: -1.456 },\n { x: 1, y: 11, u: -0.8, v: -1.511 },\n { x: 2, y: 11, u: -0.933, v: -1.554 },\n { x: 3, y: 11, u: -1.091, v: -1.576 },\n { x: 4, y: 11, u: -1.277, v: -1.56 },\n { x: 5, y: 11, u: -1.488, v: -1.488 },\n { x: 6, y: 11, u: -1.714, v: -1.333 },\n { x: 7, y: 11, u: -1.935, v: -1.075 },\n { x: 8, y: 11, u: -2.118, v: -0.706 },\n { x: 9, y: 11, u: -2.222, v: -0.247 },\n { x: 10, y: 11, u: -2.222, v: 0.247 },\n { x: 11, y: 11, u: -2.118, v: 0.706 },\n { x: 12, y: 11, u: -1.935, v: 1.075 },\n { x: 13, y: 11, u: -1.714, v: 1.333 },\n { x: 14, y: 11, u: -1.488, v: 1.488 },\n { x: 15, y: 11, u: -1.277, v: 1.56 },\n { x: 16, y: 11, u: -1.091, v: 1.576 },\n { x: 17, y: 11, u: -0.933, v: 1.554 },\n { x: 18, y: 11, u: -0.8, v: 1.511 },\n { x: 19, y: 11, u: -0.69, v: 1.456 },\n { x: 0, y: 12, u: -0.783, v: -1.352 },\n { x: 1, y: 12, u: -0.898, v: -1.388 },\n { x: 2, y: 12, u: -1.033, v: -1.408 },\n { x: 3, y: 12, u: -1.189, v: -1.405 },\n { x: 4, y: 12, u: -1.366, v: -1.366 },\n { x: 5, y: 12, u: -1.56, v: -1.277 },\n { x: 6, y: 12, u: -1.76, v: -1.12 },\n { x: 7, y: 12, u: -1.947, v: -0.885 },\n { x: 8, y: 12, u: -2.095, v: -0.571 },\n { x: 9, y: 12, u: -2.178, v: -0.198 },\n { x: 10, y: 12, u: -2.178, v: 0.198 },\n { x: 11, y: 12, u: -2.095, v: 0.571 },\n { x: 12, y: 12, u: -1.947, v: 0.885 },\n { x: 13, y: 12, u: -1.76, v: 1.12 },\n { x: 14, y: 12, u: -1.56, v: 1.277 },\n { x: 15, y: 12, u: -1.366, v: 1.366 },\n { x: 16, y: 12, u: -1.189, v: 1.405 },\n { x: 17, y: 12, u: -1.033, v: 1.408 },\n { x: 18, y: 12, u: -0.898, v: 1.388 },\n { x: 19, y: 12, u: -0.783, v: 1.352 },\n { x: 0, y: 13, u: -0.852, v: -1.246 },\n { x: 1, y: 13, u: -0.967, v: -1.264 },\n { x: 2, y: 13, u: -1.097, v: -1.266 },\n { x: 3, y: 13, u: -1.244, v: -1.244 },\n { x: 4, y: 13, u: -1.405, v: -1.189 },\n { x: 5, y: 13, u: -1.576, v: -1.091 },\n { x: 6, y: 13, u: -1.745, v: -0.94 },\n { x: 7, y: 13, u: -1.898, v: -0.73 },\n { x: 8, y: 13, u: -2.016, v: -0.465 },\n { x: 9, y: 13, u: -2.08, v: -0.16 },\n { x: 10, y: 13, u: -2.08, v: 0.16 },\n { x: 11, y: 13, u: -2.016, v: 0.465 },\n { x: 12, y: 13, u: -1.898, v: 0.73 },\n { x: 13, y: 13, u: -1.745, v: 0.94 },\n { x: 14, y: 13, u: -1.576, v: 1.091 },\n { x: 15, y: 13, u: -1.405, v: 1.189 },\n { x: 16, y: 13, u: -1.244, v: 1.244 },\n { x: 17, y: 13, u: -1.097, v: 1.266 },\n { x: 18, y: 13, u: -0.967, v: 1.264 },\n { x: 19, y: 13, u: -0.852, v: 1.246 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const VECTOR_FIELD_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n xKey: 'x',\n yKey: 'y',\n uKey: 'u',\n vKey: 'v',\n} as const);\n","import type { ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke, TextLabel, VectorFieldChartProps } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { LEGEND_BAND, PLOT_INSET, cartesianPlot } from '../shared/cartesian';\nimport { checkCeiling, checkPositive, readVectorField, type Vector } from '../shared/contracts';\nimport { accessorName, circlePath, formatNumber } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { xyFrame } from '../shared/xy';\nimport { VECTOR_FIELD_CHART_DEMO, VECTOR_FIELD_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'VectorFieldChart';\n/** By default the longest arrow spans this share of the grid's spacing. */\nconst FILL = 0.9;\n/** Spacing assumed along an axis with a single value. */\nconst LONE_SPACING = 24;\n/** The head: at most this long, its half-width a share of its length. */\nconst HEAD = 5;\nconst HEAD_WIDTH = 0.6;\nconst DOT_RADIUS = 1.2;\n/** Length of the key's arrow, at most, in px. */\nconst KEY_ROOM = 40;\n\n/** Arrow from `tail` to `tip`: the shaft, then the head as a closed triangle (heightening fills it). */\nfunction arrowPath(tail: { x: number; y: number }, tip: { x: number; y: number }): string {\n const dx = tip.x - tail.x;\n const dy = tip.y - tail.y;\n const length = Math.sqrt(dx * dx + dy * dy);\n const head = Math.min(HEAD, length * 0.4);\n const ux = dx / length;\n const uy = dy / length;\n const bx = tip.x - ux * head;\n const by = tip.y - uy * head;\n const w = head * HEAD_WIDTH;\n return `M${tail.x},${tail.y}L${bx},${by}M${tip.x},${tip.y}L${bx - uy * w},${by + ux * w}L${bx + uy * w},${by - ux * w}Z`;\n}\n\n/** The smallest gap between neighbouring positions, in px. */\nfunction spacing(positions: readonly number[]): number {\n let gap = Number.POSITIVE_INFINITY;\n for (let k = 1; k < positions.length; k += 1) gap = Math.min(gap, Math.abs((positions[k] as number) - (positions[k - 1] as number)));\n return gap;\n}\n\nfunction buildVectorFieldChart(props: VectorFieldChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? VECTOR_FIELD_CHART_DEMO;\n const keys = VECTOR_FIELD_CHART_DEMO_KEYS;\n const xKey = usesDemo ? keys.xKey : (props.xKey ?? 'x');\n const yKey = usesDemo ? keys.yKey : (props.yKey ?? 'y');\n const uKey = usesDemo ? keys.uKey : (props.uKey ?? 'u');\n const vKey = usesDemo ? keys.vKey : (props.vKey ?? 'v');\n const given = checkPositive(CHART, 'scale', props.scale);\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const xName = accessorName(xKey, 'x');\n const yName = accessorName(yKey, 'y');\n const uName = accessorName(uKey, 'u');\n const vName = accessorName(vKey, 'v');\n\n const field = readVectorField(CHART, data, { x: xKey, y: yKey, u: uKey, v: vKey });\n const nx = field.xs.length;\n const ny = field.ys.length;\n checkCeiling(CHART, uName, 'gridCells', nx * ny);\n // Grid order, top row first and left to right: the order of the table and of the keyboard.\n const cells: { i: number; j: number; vector: Vector; magnitude: number }[] = [];\n for (let j = ny - 1; j >= 0; j -= 1) {\n for (let i = 0; i < nx; i += 1) {\n const vector = field.vectors[j * nx + i];\n if (vector) cells.push({ i, j, vector, magnitude: Math.sqrt(vector.u * vector.u + vector.v * vector.v) });\n }\n }\n const summaries = cells.map((c) => Object.freeze({ x: field.xs[c.i] as number, y: field.ys[c.j] as number, u: c.vector.u, v: c.vector.v, magnitude: c.magnitude }));\n const base = modelBase(CHART, props, context, 'Vector field', {\n columns: [`${xName}, ${yName}`, uName, vName, 'magnitude'],\n rows: summaries.map((s) => [\n `${formatNumber(s.x, locale, numberFormat)}, ${formatNumber(s.y, locale, numberFormat)}`,\n formatNumber(s.u, locale, numberFormat),\n formatNumber(s.v, locale, numberFormat),\n formatNumber(s.magnitude, locale, numberFormat),\n ]),\n });\n const measured = measure(base, props, context);\n if ('deferred' in measured) return measured.deferred;\n const card = cardLayout(props, { width: measured.width, areaHeight: measured.height, chrome: props.chrome ?? 'card', locale });\n if (cells.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot: cartesianPlot(card.area), strokes: [...card.strokes], labels: [...card.labels] }, data.length === 0);\n\n // The key above the plot: one arrow of a stated magnitude.\n const keyArea = { ...card.area, height: LEGEND_BAND };\n const below = { ...card.area, y: card.area.y + LEGEND_BAND, height: Math.max(card.area.height - LEGEND_BAND, 1) };\n const plot = cartesianPlot(below);\n const frame = xyFrame(below, plot, { x: [field.xs[0] as number, field.xs.at(-1) as number], y: [field.ys[0] as number, field.ys.at(-1) as number] }, { chart: CHART, xName, yName, padding: context.domainPadding, locale, numberFormat, inset: 0 });\n const across = nx > 1 ? spacing(field.xs.map((x) => frame.x(x))) : LONE_SPACING;\n const down = ny > 1 ? spacing(field.ys.map((y) => frame.y(y))) : LONE_SPACING;\n const largest = Math.max(...cells.map((c) => c.magnitude));\n // Px per unit of magnitude: given, or the longest arrow filling the grid's spacing.\n const scale = given ?? (largest > 0 ? (FILL * Math.min(across, down)) / largest : 1);\n\n const strokes: Stroke[] = [...card.strokes, ...frame.strokes];\n const labels: TextLabel[] = [...card.labels, ...frame.labels];\n const hitAreas: HitArea[] = [];\n const marks = cells.map((c, k) => {\n const cx = frame.x(field.xs[c.i] as number);\n const cy = frame.y(field.ys[c.j] as number);\n // Up the page is +v: the screen's y runs down.\n const hx = (c.vector.u * scale) / 2;\n const hy = (-c.vector.v * scale) / 2;\n const d = c.magnitude > 0 ? arrowPath({ x: cx - hx, y: cy - hy }, { x: cx + hx, y: cy + hy }) : circlePath(cx, cy, DOT_RADIUS);\n strokes.push({ d, role: 'encoding', part: 'ink' });\n hitAreas.push({ seriesKey: 'magnitude', index: k, datum: summaries[k] as (typeof summaries)[number], value: c.magnitude, x: cx, y: cy, cell: { column: c.i, row: ny - 1 - c.j } });\n return d;\n });\n\n if (largest > 0) {\n // The key's magnitude: the largest, to two significant digits, at a length that fits.\n const unit = Number(largest.toPrecision(2));\n const shown = Math.min(unit * scale, KEY_ROOM);\n const stated = shown / scale;\n const y = keyArea.y + 8;\n const x = keyArea.x + PLOT_INSET;\n strokes.push({ d: arrowPath({ x, y }, { x: x + shown, y }), role: 'ornament', part: 'ink' });\n labels.push({ x: x + shown + 6, y: y + 3.5, text: `${formatNumber(stated, locale, numberFormat)} ${uName}, ${vName}`, kind: 'tick', part: 'axis', anchor: 'start' });\n }\n\n // One heightened element (REQ-442): the arrow of largest magnitude, the first in grid order.\n const strongest = cells.findIndex((c) => c.magnitude === largest);\n strokes.push({ d: marks[strongest] as string, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const top = summaries[strongest] as (typeof summaries)[number];\n const description =\n props.description ??\n `${base.name}. ${cells.length} arrows on a ${nx} × ${ny} grid of ${xName} across and ${yName} up, each along (${uName}, ${vName}), its length its magnitude at ${formatNumber(scale, locale, undefined)} px per unit; the largest, ${formatNumber(largest, locale, numberFormat)}, at ${formatNumber(top.x, locale, numberFormat)}, ${formatNumber(top.y, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `VectorFieldChart` recipe (REQ-425): an arrow per grid point, its direction and length the vector's. */\nexport const vectorFieldChart: ChartRecipe<VectorFieldChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildVectorFieldChart });\n","import { createPrng } from '../../render/prng';\n\n/**\n * The network layout (DD-030, REQ-426): Fruchterman–Reingold over a fixed number of iterations,\n * the temperature cooling linearly to 0, then fitted to the unit square. The start is a square grid, its\n * cells dealt to the nodes by the chart's seed, so no trigonometry is needed; inside the\n * iterations only `+ − × ÷` and `Math.sqrt` are used, so Node and every browser produce the same\n * coordinates (REQ-435, I-27).\n */\n\nexport interface LayoutLink {\n readonly source: number;\n readonly target: number;\n}\n\n/** The step a node may take in the first iteration, as a share of the square's side. */\nconst START_TEMPERATURE = 0.1;\n/** Two nodes closer than this (squared) are pushed apart along x, the lower index leftwards. */\nconst COINCIDENT = 1e-12;\n\nexport function layoutNetwork(\n count: number,\n links: readonly LayoutLink[],\n options: { readonly iterations: number; readonly seed: number },\n): { x: number; y: number }[] {\n const side = Math.ceil(Math.sqrt(count));\n // Fisher–Yates with the seeded PRNG: node `v` starts in cell `cells[v]`.\n const random = createPrng(options.seed);\n const cells = Array.from({ length: count }, (_, k) => k);\n for (let k = count - 1; k > 0; k -= 1) {\n const r = Math.floor(random() * (k + 1));\n const swap = cells[k] as number;\n cells[k] = cells[r] as number;\n cells[r] = swap;\n }\n const xs = new Float64Array(count);\n const ys = new Float64Array(count);\n cells.forEach((cell, v) => {\n xs[v] = ((cell % side) + 0.5) / side;\n ys[v] = (Math.floor(cell / side) + 0.5) / side;\n });\n\n const pulls = links.filter((l) => l.source !== l.target);\n // The ideal distance of FR for the unit area; its square is what repulsion needs.\n const k2 = 1 / Math.max(count, 1);\n const k = Math.sqrt(k2);\n const dx = new Float64Array(count);\n const dy = new Float64Array(count);\n for (let it = 0; it < options.iterations; it += 1) {\n const temperature = START_TEMPERATURE * (1 - it / options.iterations);\n dx.fill(0);\n dy.fill(0);\n // Repulsion k²/d along the unit vector: (Δ / d) · k² / d = Δ · k² / d².\n for (let a = 0; a < count; a += 1) {\n const xa = xs[a] as number;\n const ya = ys[a] as number;\n let sx = dx[a] as number;\n let sy = dy[a] as number;\n for (let b = a + 1; b < count; b += 1) {\n let ex = xa - (xs[b] as number);\n let ey = ya - (ys[b] as number);\n let d2 = ex * ex + ey * ey;\n if (d2 < COINCIDENT) {\n ex = -1e-6;\n ey = 0;\n d2 = 1e-12;\n }\n const f = k2 / d2;\n const fx = ex * f;\n const fy = ey * f;\n sx += fx;\n sy += fy;\n dx[b] = (dx[b] as number) - fx;\n dy[b] = (dy[b] as number) - fy;\n }\n dx[a] = sx;\n dy[a] = sy;\n }\n // Attraction d²/k along the unit vector: Δ · d / k.\n for (const { source, target } of pulls) {\n const ex = (xs[source] as number) - (xs[target] as number);\n const ey = (ys[source] as number) - (ys[target] as number);\n const f = Math.sqrt(ex * ex + ey * ey) / k;\n dx[source] = (dx[source] as number) - ex * f;\n dy[source] = (dy[source] as number) - ey * f;\n dx[target] = (dx[target] as number) + ex * f;\n dy[target] = (dy[target] as number) + ey * f;\n }\n // Each node moves along its displacement, at most the temperature. No wall stops it: walls\n // pile the outer nodes along the edges; the layout is fitted to the square at the end.\n for (let v = 0; v < count; v += 1) {\n const mx = dx[v] as number;\n const my = dy[v] as number;\n const length = Math.sqrt(mx * mx + my * my);\n if (!(length > 0)) continue;\n const step = Math.min(length, temperature) / length;\n xs[v] = (xs[v] as number) + mx * step;\n ys[v] = (ys[v] as number) + my * step;\n }\n }\n const fit = fitter(xs);\n const fitY = fitter(ys);\n return Array.from(xs, (x, v) => ({ x: fit(x), y: fitY(ys[v] as number) }));\n}\n\n/** Maps an axis' extent onto 0–1; a single position goes to the middle. */\nfunction fitter(values: Float64Array): (v: number) => number {\n let low = Number.POSITIVE_INFINITY;\n let high = Number.NEGATIVE_INFINITY;\n for (const v of values) {\n low = Math.min(low, v);\n high = Math.max(high, v);\n }\n return high > low ? (v) => (v - low) / (high - low) : () => 0.5;\n}\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum, NetworkNode } from '../../types';\n\n/** Demo dataset of `NetworkChart` (REQ-426): 90 links between 40 people in four teams, most within a team. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const NETWORK_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { source: 's05', target: 's02', weight: 5 },\n { source: 'p10', target: 'a06', weight: 1 },\n { source: 'p01', target: 'p07', weight: 5 },\n { source: 's06', target: 's04', weight: 1 },\n { source: 'p03', target: 'l06', weight: 1 },\n { source: 's08', target: 's05', weight: 5 },\n { source: 'a05', target: 'a07', weight: 2 },\n { source: 'p02', target: 'p01', weight: 3 },\n { source: 'a04', target: 'a02', weight: 5 },\n { source: 'l08', target: 's08', weight: 2 },\n { source: 'a04', target: 'a01', weight: 1 },\n { source: 'p03', target: 's09', weight: 5 },\n { source: 'l01', target: 's05', weight: 5 },\n { source: 's07', target: 's09', weight: 4 },\n { source: 'p01', target: 'p04', weight: 5 },\n { source: 'a02', target: 'a09', weight: 1 },\n { source: 'a03', target: 'a05', weight: 2 },\n { source: 'p10', target: 'p08', weight: 3 },\n { source: 'p04', target: 'a10', weight: 1 },\n { source: 'p04', target: 'p10', weight: 2 },\n { source: 'l10', target: 's09', weight: 4 },\n { source: 'l06', target: 'l02', weight: 4 },\n { source: 'a01', target: 's03', weight: 4 },\n { source: 'l09', target: 'l02', weight: 2 },\n { source: 'p03', target: 'p06', weight: 2 },\n { source: 'p06', target: 'p01', weight: 4 },\n { source: 's08', target: 's02', weight: 4 },\n { source: 'a09', target: 'a08', weight: 3 },\n { source: 'l02', target: 'l01', weight: 3 },\n { source: 'a03', target: 's10', weight: 3 },\n { source: 'p09', target: 'p02', weight: 3 },\n { source: 'p04', target: 'p07', weight: 1 },\n { source: 's06', target: 's05', weight: 4 },\n { source: 's03', target: 's05', weight: 5 },\n { source: 'a10', target: 'a04', weight: 3 },\n { source: 's01', target: 's09', weight: 1 },\n { source: 'a02', target: 'a07', weight: 3 },\n { source: 's08', target: 's09', weight: 4 },\n { source: 'a06', target: 'a04', weight: 1 },\n { source: 'p03', target: 'p01', weight: 2 },\n { source: 's07', target: 's05', weight: 4 },\n { source: 'a02', target: 'a05', weight: 1 },\n { source: 'p08', target: 'p01', weight: 4 },\n { source: 'a02', target: 'a01', weight: 2 },\n { source: 's06', target: 's07', weight: 5 },\n { source: 'a04', target: 'p08', weight: 3 },\n { source: 's04', target: 's01', weight: 1 },\n { source: 'p03', target: 'a10', weight: 2 },\n { source: 'a03', target: 'a06', weight: 1 },\n { source: 's01', target: 's02', weight: 4 },\n { source: 'a05', target: 'a10', weight: 4 },\n { source: 'l07', target: 'l04', weight: 1 },\n { source: 'a04', target: 'a05', weight: 2 },\n { source: 'a07', target: 's04', weight: 3 },\n { source: 'p07', target: 'l08', weight: 3 },\n { source: 'p02', target: 'p03', weight: 3 },\n { source: 'l09', target: 'l04', weight: 5 },\n { source: 'p08', target: 'a06', weight: 1 },\n { source: 'l06', target: 'l09', weight: 2 },\n { source: 'p09', target: 'p08', weight: 3 },\n { source: 's10', target: 'l05', weight: 3 },\n { source: 'p08', target: 'p03', weight: 3 },\n { source: 's09', target: 's10', weight: 4 },\n { source: 'l01', target: 'l03', weight: 5 },\n { source: 'a03', target: 'a02', weight: 4 },\n { source: 'l06', target: 'l05', weight: 3 },\n { source: 'l02', target: 's07', weight: 2 },\n { source: 'a08', target: 'a04', weight: 1 },\n { source: 'p04', target: 'a03', weight: 2 },\n { source: 'l08', target: 'a07', weight: 4 },\n { source: 'p05', target: 'p03', weight: 5 },\n { source: 'p06', target: 'p09', weight: 2 },\n { source: 'p07', target: 'p10', weight: 3 },\n { source: 'a06', target: 'a02', weight: 4 },\n { source: 'a09', target: 'a04', weight: 1 },\n { source: 'l01', target: 'a10', weight: 1 },\n { source: 'p08', target: 'p06', weight: 4 },\n { source: 'a02', target: 'a10', weight: 5 },\n { source: 'l02', target: 'l10', weight: 5 },\n { source: 'a08', target: 'a07', weight: 2 },\n { source: 'p03', target: 's06', weight: 2 },\n { source: 'p04', target: 'p06', weight: 3 },\n { source: 'l08', target: 's05', weight: 4 },\n { source: 's02', target: 's03', weight: 3 },\n { source: 'l09', target: 'l01', weight: 4 },\n { source: 'a09', target: 'a06', weight: 5 },\n { source: 'p07', target: 'p03', weight: 2 },\n { source: 'p07', target: 'p02', weight: 1 },\n { source: 'a07', target: 'a09', weight: 5 },\n { source: 'l07', target: 'a02', weight: 4 },\n ].map((row) => Object.freeze(row)),\n);\n\n/** Demo dataset of `NetworkChart` (REQ-426): its 40 nodes, in four groups. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const NETWORK_CHART_DEMO_NODES: readonly NetworkNode[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { id: 'a01', label: 'Archive 1', group: 'Archive' },\n { id: 'a02', label: 'Archive 2', group: 'Archive' },\n { id: 'a03', label: 'Archive 3', group: 'Archive' },\n { id: 'a04', label: 'Archive 4', group: 'Archive' },\n { id: 'a05', label: 'Archive 5', group: 'Archive' },\n { id: 'a06', label: 'Archive 6', group: 'Archive' },\n { id: 'a07', label: 'Archive 7', group: 'Archive' },\n { id: 'a08', label: 'Archive 8', group: 'Archive' },\n { id: 'a09', label: 'Archive 9', group: 'Archive' },\n { id: 'a10', label: 'Archive 10', group: 'Archive' },\n { id: 's01', label: 'Studio 1', group: 'Studio' },\n { id: 's02', label: 'Studio 2', group: 'Studio' },\n { id: 's03', label: 'Studio 3', group: 'Studio' },\n { id: 's04', label: 'Studio 4', group: 'Studio' },\n { id: 's05', label: 'Studio 5', group: 'Studio' },\n { id: 's06', label: 'Studio 6', group: 'Studio' },\n { id: 's07', label: 'Studio 7', group: 'Studio' },\n { id: 's08', label: 'Studio 8', group: 'Studio' },\n { id: 's09', label: 'Studio 9', group: 'Studio' },\n { id: 's10', label: 'Studio 10', group: 'Studio' },\n { id: 'l01', label: 'Lab 1', group: 'Lab' },\n { id: 'l02', label: 'Lab 2', group: 'Lab' },\n { id: 'l03', label: 'Lab 3', group: 'Lab' },\n { id: 'l04', label: 'Lab 4', group: 'Lab' },\n { id: 'l05', label: 'Lab 5', group: 'Lab' },\n { id: 'l06', label: 'Lab 6', group: 'Lab' },\n { id: 'l07', label: 'Lab 7', group: 'Lab' },\n { id: 'l08', label: 'Lab 8', group: 'Lab' },\n { id: 'l09', label: 'Lab 9', group: 'Lab' },\n { id: 'l10', label: 'Lab 10', group: 'Lab' },\n { id: 'p01', label: 'Press 1', group: 'Press' },\n { id: 'p02', label: 'Press 2', group: 'Press' },\n { id: 'p03', label: 'Press 3', group: 'Press' },\n { id: 'p04', label: 'Press 4', group: 'Press' },\n { id: 'p05', label: 'Press 5', group: 'Press' },\n { id: 'p06', label: 'Press 6', group: 'Press' },\n { id: 'p07', label: 'Press 7', group: 'Press' },\n { id: 'p08', label: 'Press 8', group: 'Press' },\n { id: 'p09', label: 'Press 9', group: 'Press' },\n { id: 'p10', label: 'Press 10', group: 'Press' },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const NETWORK_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n sourceKey: 'source',\n targetKey: 'target',\n valueKey: 'weight',\n} as const);\n","import { resolveSeed } from '../../render/seed';\nimport type { ChartModel, ChartRecipe, HitArea, NetworkChartProps, NetworkNode, RecipeContext, Rect, Stroke, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { PLOT_INSET } from '../shared/cartesian';\nimport { inset } from '../shared/cells';\nimport { checkCeiling, checkIterations, readNetwork } from '../shared/contracts';\nimport { accessorName, circlePath, formatNumber } from '../shared/format';\nimport { layoutNetwork } from '../shared/network';\nimport { ringTone, sectorLegend } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { NETWORK_CHART_DEMO, NETWORK_CHART_DEMO_KEYS, NETWORK_CHART_DEMO_NODES } from './demo';\n\nconst CHART = 'NetworkChart';\nconst ITERATIONS = 300;\nconst NODE_RADIUS = 4;\nconst HEIGHTEN_RADIUS = NODE_RADIUS + 1.5;\n/** A self-link is a loop of this radius above its node. */\nconst LOOP = 6;\n/** The busiest nodes are named, this many at most. */\nconst NAMED = 3;\nconst LEGEND_GAP = 14;\nconst LEGEND_WIDTH = 110;\n\nconst clamp = (v: number, low: number, high: number) => Math.min(Math.max(v, low), high);\n\nfunction buildNetworkChart(props: NetworkChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? NETWORK_CHART_DEMO;\n const sourceKey = usesDemo ? NETWORK_CHART_DEMO_KEYS.sourceKey : (props.sourceKey ?? 'source');\n const targetKey = usesDemo ? NETWORK_CHART_DEMO_KEYS.targetKey : (props.targetKey ?? 'target');\n const valueKey = usesDemo ? NETWORK_CHART_DEMO_KEYS.valueKey : props.valueKey;\n // `nodes` is data: with the demo, the demo's nodes (API delta §2).\n const given = usesDemo ? NETWORK_CHART_DEMO_NODES : props.nodes;\n const iterations = checkIterations(CHART, props.iterations) ?? ITERATIONS;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = valueKey === undefined ? 'value' : accessorName(valueKey, 'value');\n\n const network = readNetwork(CHART, data, { source: sourceKey, target: targetKey, ...(valueKey === undefined ? {} : { value: valueKey }) }, given);\n const nodes: NetworkNode[] = network.nodes;\n const links = network.links;\n checkCeiling(CHART, 'nodes', 'networkNodes', nodes.length);\n checkCeiling(CHART, accessorName(sourceKey, 'source'), 'links', links.length);\n const position = new Map(nodes.map((n, k) => [n.id, k]));\n const nameOf = (id: string) => nodes[position.get(id) as number]?.label ?? id;\n const degree = nodes.map(() => 0);\n for (const link of links) {\n const s = position.get(link.source) as number;\n const t = position.get(link.target) as number;\n degree[s] = (degree[s] as number) + 1;\n if (t !== s) degree[t] = (degree[t] as number) + 1;\n }\n const groups = [...new Set(nodes.flatMap((n) => (n.group === undefined ? [] : [n.group])))];\n\n const base = modelBase(CHART, props, context, 'Network', {\n columns: ['node', 'group', 'degree', valueName],\n rows: [\n ...nodes.map((n, k) => [n.label ?? n.id, n.group ?? '', formatNumber(degree[k] as number, locale, undefined), '']),\n ...links.map((l) => [`${nameOf(l.source)} – ${nameOf(l.target)}`, '', '', formatNumber(l.value, locale, numberFormat)]),\n ],\n });\n const measured = measure(base, props, context);\n if ('deferred' in measured) return measured.deferred;\n const card = cardLayout(props, { width: measured.width, areaHeight: measured.height, chrome: props.chrome ?? 'card', locale });\n const area = card.area;\n const legendWidth = groups.length > 0 ? Math.min(LEGEND_WIDTH, area.width * 0.3) : 0;\n const plot: Rect = inset({ ...area, width: Math.max(area.width - legendWidth - (legendWidth > 0 ? LEGEND_GAP : 0), 1) }, PLOT_INSET);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n if (nodes.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n // Where the nodes go: the consumer's positions when every node has them (REQ-436), else the\n // layout, run on the nodes by id and the links by their ends, so the row order cannot move it.\n const room = inset(plot, NODE_RADIUS);\n const placed = nodes.every((n) => Number.isFinite(n.x) && Number.isFinite(n.y));\n let at: { x: number; y: number }[];\n if (placed) {\n const xs = nodes.map((n) => n.x as number);\n const ys = nodes.map((n) => n.y as number);\n const span = (values: number[]) => [Math.min(...values), Math.max(...values)] as const;\n const [x0, x1] = span(xs);\n const [y0, y1] = span(ys);\n // Up the page is +y, as in the data.\n at = nodes.map((n) => ({\n x: x1 > x0 ? room.x + (((n.x as number) - x0) / (x1 - x0)) * room.width : room.x + room.width / 2,\n y: y1 > y0 ? room.y + room.height - (((n.y as number) - y0) / (y1 - y0)) * room.height : room.y + room.height / 2,\n }));\n } else {\n const byId = nodes.map((n, k) => [n.id, k] as const).sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0));\n const rank = new Map(byId.map(([id], r) => [id, r]));\n const pulls = links\n .map((l) => ({ source: rank.get(l.source) as number, target: rank.get(l.target) as number }))\n .sort((a, b) => a.source - b.source || a.target - b.target);\n const laid = layoutNetwork(nodes.length, pulls, { iterations, seed: resolveSeed(props.seed, context.id) });\n at = nodes.map((n) => {\n const p = laid[rank.get(n.id) as number] as { x: number; y: number };\n return { x: room.x + p.x * room.width, y: room.y + p.y * room.height };\n });\n }\n const inPlot = (p: { x: number; y: number }) => ({ x: clamp(p.x, plot.x, plot.x + plot.width), y: clamp(p.y, plot.y, plot.y + plot.height) });\n\n // Links first, under the nodes: secondary ink, exact (REQ-441).\n const linkHits: HitArea[] = links.map((l, k) => {\n const s = at[position.get(l.source) as number] as { x: number; y: number };\n const t = at[position.get(l.target) as number] as { x: number; y: number };\n const loop = l.source === l.target;\n strokes.push({ d: loop ? circlePath(s.x, s.y - LOOP, LOOP) : `M${s.x},${s.y}L${t.x},${t.y}`, role: 'encoding', part: 'ink-secondary' });\n const mid = inPlot(loop ? { x: s.x, y: s.y - 2 * LOOP } : { x: (s.x + t.x) / 2, y: (s.y + t.y) / 2 });\n return { seriesKey: valueName, index: nodes.length + k, datum: Object.freeze({ source: l.source, target: l.target, value: l.value }), value: l.value, ...mid };\n });\n const nodeHits: HitArea[] = nodes.map((n, k) => {\n const p = at[k] as { x: number; y: number };\n const group = n.group === undefined ? -1 : groups.indexOf(n.group);\n const tone: ToneLevel | undefined = group < 0 ? undefined : ringTone(group, groups.length);\n strokes.push({ d: circlePath(p.x, p.y, NODE_RADIUS), role: 'encoding', part: 'ink', ...(tone === undefined ? {} : { tone }) });\n const summary = Object.freeze({ id: n.id, ...(n.label === undefined ? {} : { label: n.label }), ...(n.group === undefined ? {} : { group: n.group }), degree: degree[k] as number });\n return { seriesKey: 'degree', index: k, datum: summary, value: degree[k] as number, x: p.x, y: p.y, box: { x: p.x - NODE_RADIUS, y: p.y - NODE_RADIUS, width: 2 * NODE_RADIUS, height: 2 * NODE_RADIUS } };\n });\n\n // The keyboard (API delta §3): nodes in order by Right and Left; Down walks the links a node\n // starts, in data order, Up back towards it; Home and End reach the first and last node.\n const starts = nodes.map(() => [] as number[]);\n links.forEach((l, k) => starts[position.get(l.source) as number]?.push(nodes.length + k));\n const last = nodes.length - 1;\n const step = (v: number, by: number) => (v + by >= 0 && v + by <= last ? v + by : undefined);\n const movesOf = (v: number, own: Record<string, number | undefined>) =>\n Object.fromEntries(Object.entries({ ArrowRight: step(v, 1), ArrowLeft: step(v, -1), Home: 0, End: last, ...own }).filter(([, to]) => to !== undefined)) as HitArea['moves'];\n nodeHits.forEach((hit, v) => hitAreas.push({ ...hit, moves: movesOf(v, { ArrowDown: starts[v]?.[0] }) }));\n linkHits.forEach((hit, k) => {\n const v = position.get((links[k] as (typeof links)[number]).source) as number;\n const list = starts[v] as number[];\n const p = list.indexOf(hit.index);\n hitAreas.push({ ...hit, moves: movesOf(v, { ArrowDown: list[p + 1], ArrowUp: p > 0 ? list[p - 1] : v }) });\n });\n\n // The busiest nodes: highest degree, ties to the first id, so the row order cannot change them.\n const busiest = nodes\n .map((n, k) => k)\n .sort((a, b) => (degree[b] as number) - (degree[a] as number) || ((nodes[a] as NetworkNode).id < (nodes[b] as NetworkNode).id ? -1 : 1));\n for (const k of busiest.slice(0, NAMED)) {\n const p = at[k] as { x: number; y: number };\n const right = p.x < plot.x + plot.width * 0.8;\n labels.push({ x: p.x + (right ? 1 : -1) * (HEIGHTEN_RADIUS + 3), y: p.y + 3.5, text: (nodes[k] as NetworkNode).label ?? (nodes[k] as NetworkNode).id, kind: 'tick', part: 'axis', anchor: right ? 'start' : 'end' });\n }\n if (groups.length > 0) {\n const x = plot.x + plot.width + PLOT_INSET + LEGEND_GAP;\n const counts = groups.map((g) => nodes.filter((n) => n.group === g).length);\n const key = sectorLegend({ x, y: area.y, width: Math.max(area.x + area.width - x, 1), height: area.height }, groups.map((g, k) => ({ name: g, share: formatNumber(counts[k] as number, locale, undefined), tone: ringTone(k, groups.length) })));\n strokes.push(...key.strokes);\n labels.push(...key.labels);\n }\n\n // One heightened element (REQ-442): the node of highest degree.\n const top = busiest[0] as number;\n const spot = at[top] as { x: number; y: number };\n const mark = circlePath(spot.x, spot.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 const how = placed ? 'at the given positions' : `laid out by force (Fruchterman–Reingold, ${iterations} iterations from the seed)`;\n const description =\n props.description ??\n `${base.name}. ${nodes.length} nodes and ${links.length} links, ${how}${groups.length > 0 ? `, in ${groups.length} groups` : ''}; the busiest, ${(nodes[top] as NetworkNode).label ?? (nodes[top] as NetworkNode).id}, has ${formatNumber(degree[top] as number, locale, undefined)} links.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `NetworkChart` recipe (REQ-426): a node-link graph, laid out deterministically or placed by the consumer. */\nexport const networkChart: ChartRecipe<NetworkChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildNetworkChart });\n","import type { ActiveItem, Geometry } from '../types';\n\n/**\n * What `onRootChange` carries when a node of a `SunburstChart` or a `SquarifiedTreemap` is\n * activated (REQ-439, API delta §4): the node's id, or, for the drawn root, the id its centre or\n * frame returns to — `null` for the data root, which has nothing above it. The adapters map their\n * `select` through it and keep no root of their own (REQ-108, I-30).\n *\n * The node is read where `geometry`, the drawing as it is now, has the item: the shared reducer\n * keeps an item by its place, so after the consumer passes a new `rootId` back the item's own\n * summary may still be the old drawing's.\n */\nexport function rootChangeOf(geometry: Geometry, item: ActiveItem): string | null {\n const hit = geometry.hitAreas.find((h) => h.seriesKey === item.seriesKey && h.index === item.index);\n const summary = (hit?.datum ?? item.datum) as { readonly id?: unknown; readonly path?: readonly unknown[]; readonly up?: string | null };\n if ('up' in summary) return summary.up ?? null;\n // The data root drawn as root: its path is itself alone.\n if ((summary.path?.length ?? 0) <= 1) return null;\n return String(summary.id);\n}\n"]}
1
+ {"version":3,"sources":["../src/charts/shared/contracts.ts","../src/charts/shared/stats.ts","../src/charts/histogram-chart/demo.ts","../src/charts/histogram-chart/histogram-chart.ts","../src/charts/ecdf-chart/demo.ts","../src/charts/ecdf-chart/ecdf-chart.ts","../src/charts/shared/distribution.ts","../src/charts/box-plot-chart/demo.ts","../src/charts/box-plot-chart/box-plot-chart.ts","../src/charts/shared/density.ts","../src/charts/violin-chart/demo.ts","../src/charts/violin-chart/violin-chart.ts","../src/charts/ridgeline-chart/demo.ts","../src/charts/ridgeline-chart/ridgeline-chart.ts","../src/charts/shared/beeswarm.ts","../src/charts/beeswarm-chart/demo.ts","../src/charts/beeswarm-chart/beeswarm-chart.ts","../src/charts/lollipop-chart/demo.ts","../src/charts/lollipop-chart/lollipop-chart.ts","../src/charts/dumbbell-chart/demo.ts","../src/charts/dumbbell-chart/dumbbell-chart.ts","../src/charts/slope-chart/demo.ts","../src/charts/slope-chart/slope-chart.ts","../src/charts/bump-chart/demo.ts","../src/charts/bump-chart/bump-chart.ts","../src/charts/error-bar-chart/demo.ts","../src/charts/error-bar-chart/error-bar-chart.ts","../src/charts/interval-chart/demo.ts","../src/charts/interval-chart/interval-chart.ts","../src/charts/diverging-bar-chart/demo.ts","../src/charts/diverging-bar-chart/diverging-bar-chart.ts","../src/charts/connected-scatter-chart/demo.ts","../src/charts/connected-scatter-chart/connected-scatter-chart.ts","../src/charts/shared/hierarchy.ts","../src/interaction/tree.ts","../src/charts/shared/nodes.ts","../src/charts/squarified-treemap/demo.ts","../src/charts/squarified-treemap/squarified-treemap.ts","../src/charts/sunburst-chart/demo.ts","../src/charts/sunburst-chart/sunburst-chart.ts","../src/charts/tree-chart/demo.ts","../src/charts/tree-chart/tree-chart.ts","../src/charts/waffle-chart/demo.ts","../src/charts/waffle-chart/waffle-chart.ts","../src/charts/marimekko-chart/demo.ts","../src/charts/marimekko-chart/marimekko-chart.ts","../src/charts/parallel-coordinates-chart/demo.ts","../src/charts/parallel-coordinates-chart/parallel-coordinates-chart.ts","../src/charts/shared/radial.ts","../src/charts/polar-line-chart/demo.ts","../src/charts/polar-line-chart/polar-line-chart.ts","../src/charts/polar-scatter-chart/demo.ts","../src/charts/polar-scatter-chart/polar-scatter-chart.ts","../src/charts/shared/field.ts","../src/charts/shared/xy.ts","../src/charts/density-bin-chart/demo.ts","../src/charts/density-bin-chart/density-bin-chart.ts","../src/charts/contour-chart/demo.ts","../src/charts/contour-chart/contour-chart.ts","../src/charts/shared/delaunay.ts","../src/charts/delaunay-chart/demo.ts","../src/charts/delaunay-chart/delaunay-chart.ts","../src/charts/vector-field-chart/demo.ts","../src/charts/vector-field-chart/vector-field-chart.ts","../src/charts/shared/network.ts","../src/charts/network-chart/demo.ts","../src/charts/network-chart/network-chart.ts","../src/interaction/root-change.ts"],"names":["value","chain","bins","family","worst","along","text","CHART","HEIGHTEN_RADIUS","read","ROW_LABELS","band","p","POINT_RADIUS","MINIMUM","area","areaShape","method","bandwidthOf","curveMonotoneX","spacing","v","inset","falls","line","best","PERCENT","DOT_RADIUS","byValue","tiles","toneOf","LABEL_GAP","GAP","LEGEND_GAP","TURN","ordered","MIN_RADIUS","DEGREES","extent","LABEL_ROOM","round2","d","rank","HEAD","arrowPath","k","NODE_RADIUS"],"mappings":"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,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC7D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAC7D,KAAA;AAAA,IAAO,MAAA;AAAA,IAAQ,IAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,MAAA;AAAA,IAC/D,MAAA;AAAA,IAAQ,MAAA;AAAA,IAAQ,MAAA;AAAA,IAAQ,MAAA;AAAA,IAAQ,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,K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,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,IAAA;AAAA,IAAM,KAAA;AAAA,IAC7D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAC5D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC9D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC9D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAC7D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAC9D,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC7D,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC9D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAC9D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,GAAA;AAAA,IAAK,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC7D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAC9D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC7D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAC9D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAC/D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC9D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC/D,IAAA;AAAA,IAAM,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC7D,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAC7D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC9D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,IAAA;AAAA,IAAM,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA;AAAA,IAC9D,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,KAAA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AAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,IAC1C,EAAE,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,QA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","file":"catalog.js","sourcesContent":["import { diagnose } from '../../diagnostics/diagnose';\nimport type { Accessor, Datum, NetworkNode } from '../../types';\nimport { finite, warnValue } from './cells';\nimport { parseIsoDate } from './dates';\nimport { accessorName, read } from './format';\n\n/**\n * The input contracts of the second catalog (Data Model §2.15..§2.24): one reader per shape. Each\n * reads through the chart's accessors, drops, swaps or corrects what its contract row says, and\n * warns once per render and property, naming the first offending row (T-164).\n */\n\n/**\n * Counts the rows a reader rejected or corrected, and warns once per render (SP002), naming the\n * property and row of the first of them.\n */\nclass Rejections {\n private first: { property: string; index: number; why: string } | undefined;\n private count = 0;\n\n constructor(\n private readonly chart: string,\n private readonly total: number,\n ) {}\n\n add(property: string, index: number, why: string): void {\n this.count += 1;\n this.first ??= { property, index, why };\n }\n\n report(): void {\n if (!this.first) return;\n const { property, index, why } = this.first;\n warnValue(this.chart, property, `${this.count} of ${this.total} rows break the data contract; the first is row ${index}, which ${why}.`);\n }\n}\n\n/** A text field: a string, or a number printed as given; anything else is missing. */\nfunction text(raw: unknown): string | undefined {\n if (typeof raw === 'string') return raw;\n if (typeof raw === 'number' && Number.isFinite(raw)) return String(raw);\n return undefined;\n}\n\n/** First-appearance order of a list of keys. */\nfunction ordered<T>(keys: Iterable<T>): T[] {\n return [...new Set(keys)];\n}\n\n// --- §2.15 Observations ----------------------------------------------------------------------\n\nexport interface Observation {\n readonly value: number;\n /** `''` when the chart has no group accessor. */\n readonly group: string;\n readonly label?: string;\n readonly index: number;\n readonly datum: Datum;\n}\n\nexport function readObservations(\n chart: string,\n data: readonly Datum[],\n keys: { value: Accessor<unknown>; group?: Accessor<unknown>; label?: Accessor<unknown> },\n): { observations: Observation[]; groups: string[] } {\n const rejected = new Rejections(chart, data.length);\n const valueName = accessorName(keys.value, 'value');\n const groupName = keys.group === undefined ? 'group' : accessorName(keys.group, 'group');\n const observations: Observation[] = [];\n data.forEach((datum, index) => {\n const value = finite(read(keys.value, datum, index));\n if (value === undefined) return rejected.add(valueName, index, 'has no finite value');\n const group = keys.group === undefined ? '' : text(read(keys.group, datum, index));\n if (group === undefined) return rejected.add(groupName, index, 'has no group');\n const label = keys.label === undefined ? undefined : text(read(keys.label, datum, index));\n observations.push(label === undefined ? { value, group, index, datum } : { value, group, label, index, datum });\n });\n rejected.report();\n return { observations, groups: keys.group === undefined ? [''] : ordered(observations.map((o) => o.group)) };\n}\n\n// --- §2.16 Paired ----------------------------------------------------------------------------\n\nexport interface PairedRow {\n readonly label: string;\n readonly start: number;\n readonly end: number;\n readonly index: number;\n readonly datum: Datum;\n}\n\nexport function readPaired(\n chart: string,\n data: readonly Datum[],\n keys: { label: Accessor<unknown>; start: Accessor<unknown>; end: Accessor<unknown> },\n): PairedRow[] {\n const rejected = new Rejections(chart, data.length);\n const seen = new Set<string>();\n const rows: PairedRow[] = [];\n data.forEach((datum, index) => {\n const label = text(read(keys.label, datum, index));\n if (label === undefined || seen.has(label)) return rejected.add(accessorName(keys.label, 'label'), index, 'repeats a label or has none');\n const start = finite(read(keys.start, datum, index));\n const end = finite(read(keys.end, datum, index));\n if (start === undefined) return rejected.add(accessorName(keys.start, 'start'), index, 'has no finite value');\n if (end === undefined) return rejected.add(accessorName(keys.end, 'end'), index, 'has no finite value');\n seen.add(label);\n rows.push({ label, start, end, index, datum });\n });\n rejected.report();\n return rows;\n}\n\n// --- §2.17 Ranked ----------------------------------------------------------------------------\n\nexport interface RankedRow {\n readonly x: string | number;\n readonly series: string;\n readonly value: number;\n readonly index: number;\n readonly datum: Datum;\n}\n\nexport function readRanked(\n chart: string,\n data: readonly Datum[],\n keys: { x: Accessor<unknown>; series: Accessor<unknown>; value: Accessor<unknown> },\n): { rows: RankedRow[]; xs: (string | number)[]; series: string[] } {\n const rejected = new Rejections(chart, data.length);\n const pairs = new Set<string>();\n const rows: RankedRow[] = [];\n data.forEach((datum, index) => {\n const rawX = read(keys.x, datum, index);\n const x = typeof rawX === 'number' && Number.isFinite(rawX) ? rawX : text(rawX);\n const series = text(read(keys.series, datum, index));\n if (x === undefined) return rejected.add(accessorName(keys.x, 'x'), index, 'has no x');\n if (series === undefined) return rejected.add(accessorName(keys.series, 'series'), index, 'has no series');\n const value = finite(read(keys.value, datum, index));\n if (value === undefined) return rejected.add(accessorName(keys.value, 'value'), index, 'has no finite value');\n const pair = `${typeof x}:${x}\\u0000${series}`;\n if (pairs.has(pair)) return rejected.add(accessorName(keys.series, 'series'), index, 'repeats an (x, series) pair');\n pairs.add(pair);\n rows.push({ x, series, value, index, datum });\n });\n rejected.report();\n return { rows, xs: ordered(rows.map((r) => r.x)), series: ordered(rows.map((r) => r.series)) };\n}\n\n// --- §2.18 Estimates -------------------------------------------------------------------------\n\nexport interface EstimateRow {\n readonly label: string;\n readonly estimate: number;\n readonly low: number;\n readonly high: number;\n /** The estimate falls outside its own interval: drawn, and warned. */\n readonly outside: boolean;\n readonly index: number;\n readonly datum: Datum;\n}\n\nexport function readEstimates(\n chart: string,\n data: readonly Datum[],\n keys: { label: Accessor<unknown>; estimate: Accessor<unknown>; low: Accessor<unknown>; high: Accessor<unknown> },\n): EstimateRow[] {\n const rejected = new Rejections(chart, data.length);\n const rows: EstimateRow[] = [];\n data.forEach((datum, index) => {\n const label = text(read(keys.label, datum, index)) ?? '';\n const estimate = finite(read(keys.estimate, datum, index));\n let low = finite(read(keys.low, datum, index));\n let high = finite(read(keys.high, datum, index));\n if (estimate === undefined || low === undefined || high === undefined) {\n return rejected.add(accessorName(keys.estimate, 'estimate'), index, 'has no finite estimate and interval');\n }\n if (low > high) {\n rejected.add(accessorName(keys.low, 'low'), index, 'has `low` above `high`, swapped');\n [low, high] = [high, low];\n }\n const outside = estimate < low || estimate > high;\n if (outside) rejected.add(accessorName(keys.estimate, 'estimate'), index, 'has an estimate outside its interval, drawn as given');\n rows.push({ label, estimate, low, high, outside, index, datum });\n });\n rejected.report();\n return rows;\n}\n\n// --- §2.19 Intervals -------------------------------------------------------------------------\n\nexport interface IntervalRow {\n readonly lane: string;\n /** A number, or whole UTC days since 1970-01-01 on a date axis. */\n readonly start: number;\n readonly end: number;\n readonly label?: string;\n readonly index: number;\n readonly datum: Datum;\n}\n\nexport function readIntervals(\n chart: string,\n data: readonly Datum[],\n keys: { lane: Accessor<unknown>; start: Accessor<unknown>; end: Accessor<unknown>; label?: Accessor<unknown> },\n axis: 'number' | 'date',\n): { rows: IntervalRow[]; lanes: string[] } {\n const rejected = new Rejections(chart, data.length);\n const parse = (raw: unknown) => {\n if (axis === 'date') return typeof raw === 'string' ? finite(parseIsoDate(raw)) : undefined;\n return finite(raw);\n };\n const rows: IntervalRow[] = [];\n data.forEach((datum, index) => {\n const lane = text(read(keys.lane, datum, index));\n if (lane === undefined) return rejected.add(accessorName(keys.lane, 'lane'), index, 'has no lane');\n let start = parse(read(keys.start, datum, index));\n let end = parse(read(keys.end, datum, index));\n if (start === undefined || end === undefined) {\n return rejected.add(accessorName(keys.start, 'start'), index, axis === 'date' ? 'has no ISO start and end' : 'has no finite start and end');\n }\n if (start > end) {\n rejected.add(accessorName(keys.start, 'start'), index, 'starts after it ends, swapped');\n [start, end] = [end, start];\n }\n const label = keys.label === undefined ? undefined : text(read(keys.label, datum, index));\n rows.push(label === undefined ? { lane, start, end, index, datum } : { lane, start, end, label, index, datum });\n });\n rejected.report();\n return { rows, lanes: ordered(rows.map((r) => r.lane)) };\n}\n\n// --- §2.20 Likert, WideRows ------------------------------------------------------------------\n\nexport interface LikertRow {\n readonly label: string;\n /** One count per level, in level order; a negative or missing count is 0. */\n readonly values: readonly number[];\n /** The values normalised to 100 with `percent`, else the values. */\n readonly shares: readonly number[];\n readonly total: number;\n readonly index: number;\n readonly datum: Datum;\n}\n\nexport function readLikert(\n chart: string,\n data: readonly Datum[],\n label: Accessor<unknown>,\n levels: readonly string[],\n percent: boolean,\n): LikertRow[] {\n const rejected = new Rejections(chart, data.length);\n return withReport(rejected, () =>\n data.map((datum, index) => {\n const values = levels.map((level) => {\n const raw = finite(datum[level]);\n if (raw === undefined || raw < 0) {\n rejected.add(level, index, 'has a negative or missing count, taken as 0');\n return 0;\n }\n return raw;\n });\n const total = values.reduce((sum, v) => sum + v, 0);\n const shares = percent ? values.map((v) => (total > 0 ? (v / total) * 100 : 0)) : values;\n return { label: text(read(label, datum, index)) ?? '', values, shares, total, index, datum };\n }),\n );\n}\n\nexport interface WideRow {\n readonly label?: string;\n /** One value per dimension, in dimension order. */\n readonly values: readonly number[];\n readonly index: number;\n readonly datum: Datum;\n}\n\nexport function readWideRows(\n chart: string,\n data: readonly Datum[],\n label: Accessor<unknown> | undefined,\n dimensions: readonly string[],\n): WideRow[] {\n const rejected = new Rejections(chart, data.length);\n const rows: WideRow[] = [];\n data.forEach((datum, index) => {\n const values = dimensions.map((dimension) => finite(datum[dimension]));\n const missing = values.findIndex((v) => v === undefined);\n if (missing >= 0) return rejected.add(dimensions[missing] as string, index, 'has no finite value for a dimension');\n const name = label === undefined ? undefined : text(read(label, datum, index));\n rows.push(name === undefined ? { values: values as number[], index, datum } : { label: name, values: values as number[], index, datum });\n });\n rejected.report();\n return rows;\n}\n\n// --- §2.21 PathPoints, PolarPoints -----------------------------------------------------------\n\nexport interface PathPoint {\n readonly x: number;\n readonly y: number;\n readonly label?: string;\n readonly index: number;\n readonly datum: Datum;\n}\n\n/** Points in data order, which is the path's order. */\nexport function readPathPoints(\n chart: string,\n data: readonly Datum[],\n keys: { x: Accessor<unknown>; y: Accessor<unknown>; label?: Accessor<unknown> },\n): PathPoint[] {\n const rejected = new Rejections(chart, data.length);\n const points: PathPoint[] = [];\n data.forEach((datum, index) => {\n const x = finite(read(keys.x, datum, index));\n const y = finite(read(keys.y, datum, index));\n if (x === undefined) return rejected.add(accessorName(keys.x, 'x'), index, 'has no finite x');\n if (y === undefined) return rejected.add(accessorName(keys.y, 'y'), index, 'has no finite y');\n const label = keys.label === undefined ? undefined : text(read(keys.label, datum, index));\n points.push(label === undefined ? { x, y, index, datum } : { x, y, label, index, datum });\n });\n rejected.report();\n return points;\n}\n\n/** §2.24's point cloud has the path points' contract, without the order. */\nexport const readPointCloud = readPathPoints;\n\nexport interface PolarPoint {\n /** In `[0, period)`. */\n readonly angle: number;\n readonly value: number;\n readonly size?: number;\n readonly index: number;\n readonly datum: Datum;\n}\n\nexport function readPolarPoints(\n chart: string,\n data: readonly Datum[],\n keys: { angle: Accessor<unknown>; value: Accessor<unknown>; size?: Accessor<unknown> },\n period: number,\n): PolarPoint[] {\n const rejected = new Rejections(chart, data.length);\n const points: PolarPoint[] = [];\n data.forEach((datum, index) => {\n const raw = finite(read(keys.angle, datum, index));\n const value = finite(read(keys.value, datum, index));\n if (raw === undefined) return rejected.add(accessorName(keys.angle, 'angle'), index, 'has no finite angle');\n if (value === undefined || value < 0) return rejected.add(accessorName(keys.value, 'value'), index, 'has no radius at or above 0');\n const angle = ((raw % period) + period) % period;\n const size = keys.size === undefined ? undefined : finite(read(keys.size, datum, index));\n points.push(size === undefined ? { angle, value, index, datum } : { angle, value, size, index, datum });\n });\n rejected.report();\n return points;\n}\n\n// --- §2.22 Mosaic ----------------------------------------------------------------------------\n\nexport interface Mosaic {\n readonly columns: readonly string[];\n readonly segments: readonly string[];\n /** `values[column][segment]`; a missing pair is 0. */\n readonly values: readonly (readonly number[])[];\n /** The row behind each pair, when there is one. */\n readonly rows: readonly (readonly ({ readonly index: number; readonly datum: Datum } | undefined)[])[];\n}\n\nexport function readMosaic(\n chart: string,\n data: readonly Datum[],\n keys: { column: Accessor<unknown>; segment: Accessor<unknown>; value: Accessor<unknown> },\n): Mosaic {\n const rejected = new Rejections(chart, data.length);\n const cells = new Map<string, { column: string; segment: string; value: number; index: number; datum: Datum }>();\n data.forEach((datum, index) => {\n const column = text(read(keys.column, datum, index));\n const segment = text(read(keys.segment, datum, index));\n if (column === undefined || segment === undefined) return rejected.add(accessorName(keys.column, 'column'), index, 'has no column and segment');\n const value = finite(read(keys.value, datum, index));\n if (value === undefined || value < 0) return rejected.add(accessorName(keys.value, 'value'), index, 'has no value at or above 0');\n const key = `${column}\\u0000${segment}`;\n if (cells.has(key)) return rejected.add(accessorName(keys.segment, 'segment'), index, 'repeats a (column, segment) pair');\n cells.set(key, { column, segment, value, index, datum });\n });\n rejected.report();\n const kept = [...cells.values()];\n const columns = ordered(kept.map((c) => c.column));\n const segments = ordered(kept.map((c) => c.segment));\n const cell = (column: string, segment: string) => cells.get(`${column}\\u0000${segment}`);\n return {\n columns,\n segments,\n values: columns.map((c) => segments.map((s) => cell(c, s)?.value ?? 0)),\n rows: columns.map((c) => segments.map((s) => {\n const found = cell(c, s);\n return found ? { index: found.index, datum: found.datum } : undefined;\n })),\n };\n}\n\n// --- §2.23 Hierarchy -------------------------------------------------------------------------\n\n/** Id of the root added when the data has several (Data Model §2.23). */\nexport const SYNTHETIC_ROOT = '∅';\n\nexport interface HierarchyRow {\n readonly id: string;\n readonly parent: string | null;\n /** A leaf's own value; 0 on internal nodes, whose value is the sum of their children. */\n readonly value: number;\n readonly label: string;\n /** `-1` for the synthetic root. */\n readonly index: number;\n readonly datum: Datum;\n}\n\n/**\n * Validates flat `{ id, parent }` rows (REQ-437): duplicate or empty ids, missing parents and\n * cycles are dropped with their descendants, several roots get a synthetic one. `SP020` is raised\n * once, naming the first offending id. Rows keep their input order, the synthetic root first.\n */\nexport function readHierarchy(\n chart: string,\n data: readonly Datum[],\n keys: { id: Accessor<unknown>; parent: Accessor<unknown>; value?: Accessor<unknown>; label?: Accessor<unknown> },\n rootLabel: string,\n): { rows: HierarchyRow[]; root: string | undefined } {\n let offender: { id: string; why: string } | undefined;\n const offend = (id: string, why: string) => {\n offender ??= { id, why };\n };\n const byId = new Map<string, { parent: string | null; index: number; datum: Datum }>();\n data.forEach((datum, index) => {\n const id = text(read(keys.id, datum, index));\n if (id === undefined || id === '') return offend(id ?? '', 'has an empty id');\n if (byId.has(id)) return offend(id, 'repeats an id');\n const rawParent = read(keys.parent, datum, index);\n const parent = rawParent === null || rawParent === undefined ? null : (text(rawParent) ?? null);\n byId.set(id, { parent, index, datum });\n });\n\n // A row is kept when its chain of parents reaches a root; a missing parent or a cycle never does.\n const reaches = new Map<string, boolean>();\n const resolve = (start: string): boolean => {\n const chain: string[] = [];\n const onChain = new Set<string>();\n let id: string | null = start;\n let verdict = false;\n while (id !== null) {\n const known = reaches.get(id);\n if (known !== undefined) {\n verdict = known;\n break;\n }\n const row = byId.get(id);\n if (!row || onChain.has(id)) break;\n chain.push(id);\n onChain.add(id);\n if (row.parent === null) {\n verdict = true;\n break;\n }\n id = row.parent;\n }\n for (const link of chain) reaches.set(link, verdict);\n return verdict;\n };\n for (const [id, row] of byId) {\n if (resolve(id)) continue;\n const parent = row.parent;\n offend(id, parent !== null && !byId.has(parent) ? `names a parent, \"${parent}\", that does not exist` : 'is in a cycle or under a dropped row');\n }\n\n const kept = [...byId].filter(([id]) => reaches.get(id));\n const roots = kept.filter(([, row]) => row.parent === null).map(([id]) => id);\n if (roots.length > 1) offend(roots[1] as string, 'is a second root; a synthetic root holds them all');\n const synthetic = roots.length > 1;\n const children = new Set(kept.map(([, row]) => row.parent).filter((p): p is string => p !== null));\n\n const valueName = keys.value === undefined ? 'value' : accessorName(keys.value, 'value');\n let badLeaf: { index: number; count: number } | undefined;\n const rows: HierarchyRow[] = kept.map(([id, row]) => {\n let value = 0;\n if (!children.has(id) && keys.value !== undefined) {\n const raw = finite(read(keys.value, row.datum, row.index));\n if (raw === undefined || raw < 0) {\n badLeaf = badLeaf ? { index: badLeaf.index, count: badLeaf.count + 1 } : { index: row.index, count: 1 };\n } else {\n value = raw;\n }\n }\n const label = (keys.label === undefined ? undefined : text(read(keys.label, row.datum, row.index))) ?? id;\n return { id, parent: synthetic && row.parent === null ? SYNTHETIC_ROOT : row.parent, value, label, index: row.index, datum: row.datum };\n });\n if (synthetic) {\n rows.unshift({ id: SYNTHETIC_ROOT, parent: null, value: 0, label: rootLabel, index: -1, datum: Object.freeze({}) });\n }\n\n if (offender && process.env.NODE_ENV !== 'production') {\n diagnose('SP020', chart, { property: accessorName(keys.id, 'id'), message: `The row \"${offender.id}\" ${offender.why}.` });\n }\n if (badLeaf) warnValue(chart, valueName, `${badLeaf.count} leaves have no value at or above 0, taken as 0; the first is row ${badLeaf.index}.`);\n return { rows, root: synthetic ? SYNTHETIC_ROOT : roots[0] };\n}\n\n// --- §2.24 GridField, VectorField, Network ---------------------------------------------------\n\nexport interface Grid<T> {\n /** The distinct x values, ascending. */\n readonly xs: readonly number[];\n /** The distinct y values, ascending. */\n readonly ys: readonly number[];\n /** Row-major, `cells[j * xs.length + i]` at `(xs[i], ys[j])`; `undefined` is a hole. */\n readonly cells: readonly (T | undefined)[];\n}\n\nfunction readCells<T>(\n chart: string,\n data: readonly Datum[],\n keys: { x: Accessor<unknown>; y: Accessor<unknown> },\n cell: (datum: Datum, index: number) => T | undefined,\n property: string,\n): Grid<T> {\n const rejected = new Rejections(chart, data.length);\n const found: { x: number; y: number; cell: T }[] = [];\n data.forEach((datum, index) => {\n const x = finite(read(keys.x, datum, index));\n const y = finite(read(keys.y, datum, index));\n if (x === undefined || y === undefined) return rejected.add(accessorName(keys.x, 'x'), index, 'has no finite position');\n const value = cell(datum, index);\n if (value === undefined) return rejected.add(property, index, 'has no finite value, left as a hole');\n found.push({ x, y, cell: value });\n });\n const xs = [...new Set(found.map((f) => f.x))].sort((a, b) => a - b);\n const ys = [...new Set(found.map((f) => f.y))].sort((a, b) => a - b);\n const column = new Map(xs.map((x, i) => [x, i]));\n const row = new Map(ys.map((y, j) => [y, j]));\n const cells: (T | undefined)[] = Array.from({ length: xs.length * ys.length }, () => undefined);\n found.forEach((f, k) => {\n const at = (row.get(f.y) as number) * xs.length + (column.get(f.x) as number);\n if (cells[at] !== undefined) return rejected.add(accessorName(keys.y, 'y'), k, 'repeats a grid cell; the first is kept');\n cells[at] = f.cell;\n });\n rejected.report();\n return { xs, ys, cells };\n}\n\nexport function readGrid(\n chart: string,\n data: readonly Datum[],\n keys: { x: Accessor<unknown>; y: Accessor<unknown>; value: Accessor<unknown> },\n): Grid<number> & { readonly values: readonly (number | undefined)[] } {\n const grid = readCells(chart, data, keys, (datum, index) => finite(read(keys.value, datum, index)), accessorName(keys.value, 'value'));\n return { ...grid, values: grid.cells };\n}\n\nexport interface Vector {\n readonly u: number;\n readonly v: number;\n}\n\nexport function readVectorField(\n chart: string,\n data: readonly Datum[],\n keys: { x: Accessor<unknown>; y: Accessor<unknown>; u: Accessor<unknown>; v: Accessor<unknown> },\n): Grid<Vector> & { readonly vectors: readonly (Vector | undefined)[] } {\n const grid = readCells(\n chart,\n data,\n keys,\n (datum, index) => {\n const u = finite(read(keys.u, datum, index));\n const v = finite(read(keys.v, datum, index));\n return u === undefined || v === undefined ? undefined : { u, v };\n },\n accessorName(keys.u, 'u'),\n );\n return { ...grid, vectors: grid.cells };\n}\n\nexport interface NetworkLink {\n readonly source: string;\n readonly target: string;\n readonly value: number;\n readonly index: number;\n readonly datum: Datum;\n}\n\nexport function readNetwork(\n chart: string,\n data: readonly Datum[],\n keys: { source: Accessor<unknown>; target: Accessor<unknown>; value?: Accessor<unknown> },\n nodes: readonly NetworkNode[] | undefined,\n): { nodes: NetworkNode[]; links: NetworkLink[] } {\n const rejected = new Rejections(chart, data.length);\n const given = new Map<string, NetworkNode>();\n let repeated: string | undefined;\n for (const node of nodes ?? []) {\n if (given.has(node.id)) repeated ??= node.id;\n else given.set(node.id, node);\n }\n if (repeated !== undefined) warnValue(chart, 'nodes', `The node \"${repeated}\" is repeated; the first is kept.`);\n const links: NetworkLink[] = [];\n data.forEach((datum, index) => {\n const source = text(read(keys.source, datum, index));\n const target = text(read(keys.target, datum, index));\n if (source === undefined || target === undefined) return rejected.add(accessorName(keys.source, 'source'), index, 'has no source and target');\n if (nodes !== undefined && (!given.has(source) || !given.has(target))) {\n return rejected.add(accessorName(keys.target, 'target'), index, 'links a node not in `nodes`');\n }\n let value = 1;\n if (keys.value !== undefined) {\n const raw = read(keys.value, datum, index);\n if (raw !== undefined && raw !== null) {\n const parsed = finite(raw);\n if (parsed === undefined || parsed <= 0) return rejected.add(accessorName(keys.value, 'value'), index, 'has no value above 0');\n value = parsed;\n }\n }\n links.push({ source, target, value, index, datum });\n });\n rejected.report();\n const drawn = nodes === undefined ? ordered(links.flatMap((l) => [l.source, l.target])).map((id) => ({ id })) : [...given.values()];\n return { nodes: drawn, links };\n}\n\n// --- Statistic parameters (REQ-433, SP021) and small groups (REQ-434, SP022) -----------------\n\nfunction invalid(chart: string, property: string, raw: unknown): undefined {\n if (process.env.NODE_ENV !== 'production') {\n diagnose('SP021', chart, { property, message: `${JSON.stringify(raw)} is not valid.` });\n }\n return undefined;\n}\n\nconst increasing = (values: readonly number[]) =>\n values.every((v, i) => Number.isFinite(v) && (i === 0 || v > (values[i - 1] as number)));\n\n/** A bin count `≥ 1`, or at least two increasing thresholds; `undefined` asks for the default. */\nexport function checkBins(chart: string, bins: number | readonly number[] | undefined): number | readonly number[] | undefined {\n if (bins === undefined) return undefined;\n if (typeof bins === 'number') return Number.isFinite(bins) && bins >= 1 ? Math.floor(bins) : invalid(chart, 'bins', bins);\n return bins.length >= 2 && increasing(bins) ? bins : invalid(chart, 'bins', bins);\n}\n\n/** A finite bandwidth above 0, in data units. */\nexport function checkBandwidth(chart: string, bandwidth: number | undefined): number | undefined {\n if (bandwidth === undefined) return undefined;\n return Number.isFinite(bandwidth) && bandwidth > 0 ? bandwidth : invalid(chart, 'bandwidth', bandwidth);\n}\n\n/** A finite whisker multiple at or above 0. */\nexport function checkWhisker(chart: string, whisker: number | undefined): number | undefined {\n if (whisker === undefined) return undefined;\n return Number.isFinite(whisker) && whisker >= 0 ? whisker : invalid(chart, 'whisker', whisker);\n}\n\n/** An overlap in 0-1. */\nexport function checkOverlap(chart: string, overlap: number | undefined): number | undefined {\n if (overlap === undefined) return undefined;\n return Number.isFinite(overlap) && overlap >= 0 && overlap <= 1 ? overlap : invalid(chart, 'overlap', overlap);\n}\n\n/** A whole number of iterations at or above 0. */\nexport function checkIterations(chart: string, iterations: number | undefined): number | undefined {\n if (iterations === undefined) return undefined;\n return Number.isInteger(iterations) && iterations >= 0 ? iterations : invalid(chart, 'iterations', iterations);\n}\n\n/** A level count `≥ 1`, or increasing thresholds. */\nexport function checkLevels(chart: string, levels: number | readonly number[] | undefined): number | readonly number[] | undefined {\n if (levels === undefined) return undefined;\n if (typeof levels === 'number') return Number.isInteger(levels) && levels >= 1 ? levels : invalid(chart, 'levels', levels);\n return levels.length >= 1 && increasing(levels) ? levels : invalid(chart, 'levels', levels);\n}\n\n/** Quantiles, each in 0-1, to mark on an ECDF. */\nexport function checkQuantiles(chart: string, markers: readonly number[] | undefined): readonly number[] | undefined {\n if (markers === undefined) return undefined;\n return markers.every((m) => Number.isFinite(m) && m >= 0 && m <= 1) ? markers : invalid(chart, 'markers', markers);\n}\n\n/** A finite point radius above 0, in px. */\nexport function checkRadius(chart: string, radius: number | undefined): number | undefined {\n if (radius === undefined) return undefined;\n return Number.isFinite(radius) && radius > 0 ? radius : invalid(chart, 'radius', radius);\n}\n\n/** A whole number at or above `min` — a depth, a cell count, a column count. */\nexport function checkWhole(chart: string, property: string, value: number | undefined, min: number): number | undefined {\n if (value === undefined) return undefined;\n return Number.isInteger(value) && value >= min ? value : invalid(chart, property, value);\n}\n\n/** A finite number above 0 — a period. */\nexport function checkPositive(chart: string, property: string, value: number | undefined): number | undefined {\n if (value === undefined) return undefined;\n return Number.isFinite(value) && value > 0 ? value : invalid(chart, property, value);\n}\n\n/** A group below its statistic's minimum is drawn as points (REQ-434). */\nexport function warnTooSmall(chart: string, group: string, count: number, need: number): void {\n if (process.env.NODE_ENV !== 'production') {\n diagnose('SP022', chart, { property: 'group', message: `The group \"${group}\" has ${count} observations; its statistic needs ${need}.` });\n }\n}\n\n// --- Volume (REQ-443, SP008) -----------------------------------------------------------------\n\n/** The second catalog's volume ceilings (API Spec §12). */\nexport const CEILINGS = /* @__PURE__ */ Object.freeze({\n /** Observations of a binned or density chart. */\n observations: 10_000,\n /** Drawn points: beeswarm, polar scatter, connected scatter, Delaunay. */\n points: 500,\n intervals: 200,\n /** Hierarchy nodes. */\n nodes: 500,\n networkNodes: 150,\n links: 600,\n /** Field grid cells, 60 × 60. */\n gridCells: 3_600,\n});\n\n/** Warns SP008 above the family's ceiling; the chart is still drawn in full (REQ-443). */\nexport function checkCeiling(chart: string, property: string, family: keyof typeof CEILINGS, count: number): void {\n if (process.env.NODE_ENV === 'production' || count <= CEILINGS[family]) return;\n diagnose('SP008', chart, { property, message: `${count} ${family}; the ceiling is ${CEILINGS[family]}.` });\n}\n\nfunction withReport<T>(rejected: Rejections, build: () => T): T {\n const result = build();\n rejected.report();\n return result;\n}\n","/**\n * Statistics of the distribution charts (DD-029, REQ-432). Every function takes a sorted copy of\n * the values, returns plain data and rounds nothing: geometry is rounded where it is emitted\n * (REQ-002). Inside every sum and loop only correctly rounded operations are used (`+ − × ÷`,\n * `Math.sqrt`, comparisons), so Node and every browser agree to the last bit (REQ-435); the one\n * power is `rootOf`, rounded before use.\n */\n\n/** An ascending copy of `values`; the input is left untouched. */\nexport function sortedValues(values: readonly number[]): number[] {\n return [...values].sort((a, b) => a - b);\n}\n\n/**\n * `n^(1/k)`, through the one `Math.pow` call DD-029 allows, rounded to 6 significant digits so\n * a last-bit difference between engines cannot reach the drawing (A-03).\n */\nexport function rootOf(n: number, k: number): number {\n // eslint-disable-next-line silverpoint/no-transcendental -- DD-029: the single reviewed power, rounded to 6 digits.\n return Number(Math.pow(n, 1 / k).toPrecision(6));\n}\n\n/** Quantile `p` of a sorted sample by linear interpolation, Hyndman–Fan type 7 (R's and NumPy's default). */\nexport function quantile(sorted: readonly number[], p: number): number {\n const n = sorted.length;\n if (n === 0) return Number.NaN;\n const h = (n - 1) * p;\n const lo = Math.floor(h);\n const a = sorted[lo] as number;\n if (lo >= n - 1) return sorted[n - 1] as number;\n const b = sorted[lo + 1] as number;\n return a + (b - a) * (h - lo);\n}\n\n/** The box plot's summary: quartiles, median, and whisker ends as `min` and `max` (Data Model §2.15). */\nexport interface FiveNumber {\n /** The lowest observation at or above the lower fence, never above `q1`. */\n readonly min: number;\n readonly q1: number;\n readonly median: number;\n readonly q3: number;\n /** The highest observation at or below the upper fence, never below `q3`. */\n readonly max: number;\n /** Observations past the fences, ascending. */\n readonly outliers: readonly number[];\n}\n\n/** Tukey's summary of a sorted, non-empty sample, whiskers at `whisker` × IQR (1.5 by default). */\nexport function fiveNumber(sorted: readonly number[], whisker = 1.5): FiveNumber {\n const q1 = quantile(sorted, 0.25);\n const median = quantile(sorted, 0.5);\n const q3 = quantile(sorted, 0.75);\n const reach = (q3 - q1) * whisker;\n const low = q1 - reach;\n const high = q3 + reach;\n const inside = sorted.filter((v) => v >= low && v <= high);\n // An interpolated quartile can lie past the last observation inside its fence; the whisker\n // then has no length, and stops at the box (I-24).\n return {\n min: Math.min(inside[0] ?? q1, q1),\n q1,\n median,\n q3,\n max: Math.max(inside.at(-1) ?? q3, q3),\n outliers: sorted.filter((v) => v < low || v > high),\n };\n}\n\n/** A step of the 1-2-5 ladder as an exact ratio: the step is `num / den`, both whole. */\ninterface Step {\n readonly num: number;\n readonly den: number;\n}\n\nconst value = (step: Step) => step.num / step.den;\n/** The `k`-th multiple of a step, correctly rounded from the exact decimal. */\nconst multiple = (step: Step, k: number) => (k * step.num) / step.den;\n\n/**\n * The 1-2-5 × 10^k step nearest `width` by ratio (`ceil`: the smallest one at or above it). Powers\n * of ten are built by whole multiplications, so every step is an exact decimal (no `Math.log10`).\n */\nfunction ladder(width: number, ceil = false): Step {\n let num = 1;\n let den = 1;\n while (num / den > width) {\n if (num > 1) num /= 10;\n else den *= 10;\n }\n while ((num * 10) / den <= width) {\n if (den > 1) den /= 10;\n else num *= 10;\n }\n const candidates = [1, 2, 5, 10].map((m) => ({ num: num * m, den }));\n if (ceil) return candidates.find((c) => value(c) >= width) as Step;\n let best = candidates[0] as Step;\n let worst = Number.POSITIVE_INFINITY;\n for (const c of candidates) {\n const ratio = value(c) > width ? value(c) / width : width / value(c);\n if (ratio < worst) {\n worst = ratio;\n best = c;\n }\n }\n return best;\n}\n\n/** The nice step nearest `width`: 1, 2 or 5 × 10^k. */\nexport function niceStep(width: number): number {\n return value(ladder(width));\n}\n\n/** Sturges' bin count, `⌈log₂ n⌉ + 1`, by doubling. */\nexport function sturges(n: number): number {\n let bits = 0;\n for (let reach = 1; reach < n; reach *= 2) bits += 1;\n return bits + 1;\n}\n\n/** A bin: `x0` inclusive, `x1` exclusive except on the last bin (Data Model §2.15). */\nexport interface Bin {\n readonly x0: number;\n readonly x1: number;\n readonly count: number;\n}\n\n/** Bins drawn at most: past it the step widens, so a long tail cannot ask for millions of bins. */\nconst MAX_BINS = 1000;\n\n/** Edges on multiples of `step` that cover `[min, max]`. */\nfunction steppedEdges(min: number, max: number, step: Step): number[] {\n let k = Math.floor((min * step.den) / step.num);\n while (multiple(step, k) > min) k -= 1;\n while (multiple(step, k + 1) <= min) k += 1;\n const edges = [multiple(step, k)];\n while ((edges.at(-1) as number) < max) edges.push(multiple(step, k + edges.length));\n return edges;\n}\n\n/** The edges of `bins` for a sorted sample with a non-zero span. */\nfunction edgesOf(sorted: readonly number[], spec: number | readonly number[] | undefined): number[] {\n const min = sorted[0] as number;\n const max = sorted.at(-1) as number;\n const span = max - min;\n if (Array.isArray(spec)) {\n const thresholds = spec as readonly number[];\n const edges = [...thresholds];\n if (min < (edges[0] as number)) edges.unshift(min);\n if (max > (edges.at(-1) as number)) edges.push(max);\n return edges;\n }\n if (typeof spec === 'number') {\n const step = ladder(span / spec, true);\n const lo = steppedEdges(min, min, step)[0] as number;\n let hi = lo;\n for (let k = 1; hi < max; k += 1) hi = lo + multiple(step, k);\n return Array.from({ length: spec + 1 }, (_, i) => (i === spec ? hi : lo + (i * (hi - lo)) / spec));\n }\n const iqr = quantile(sorted, 0.75) - quantile(sorted, 0.25);\n const width = iqr > 0 ? (2 * iqr) / rootOf(sorted.length, 3) : span / sturges(sorted.length);\n return steppedEdges(min, max, ladder(Math.max(width, span / MAX_BINS)));\n}\n\n/**\n * Bins of a sorted sample (REQ-400, REQ-432). Omitted, Freedman–Diaconis' width `2·IQR·n^(−1/3)`\n * (Sturges' count when the IQR is 0), snapped to the nearest nice step so the edges fall on axis\n * ticks. A number asks for that many equal bins over the extent niced to a step; an array gives\n * the edges, closed by the data's extent when the sample reaches past them.\n */\nexport function bins(sorted: readonly number[], spec?: number | readonly number[]): Bin[] {\n if (sorted.length === 0) return [];\n const min = sorted[0] as number;\n const max = sorted.at(-1) as number;\n if (max === min && !Array.isArray(spec)) return [{ x0: min, x1: max, count: sorted.length }];\n const edges = edgesOf(sorted, spec);\n const counts = new Array<number>(edges.length - 1).fill(0);\n const last = counts.length - 1;\n let b = 0;\n for (const v of sorted) {\n while (b < last && v >= (edges[b + 1] as number)) b += 1;\n counts[b] = (counts[b] as number) + 1;\n }\n return counts.map((count, i) => ({ x0: edges[i] as number, x1: edges[i + 1] as number, count }));\n}\n\n/** A step of the empirical cumulative distribution: the share of observations at or below `value`. */\nexport interface EcdfStep {\n readonly value: number;\n readonly p: number;\n}\n\n/** The ECDF of a sorted sample: one step per distinct value, ending at exactly 1 (REQ-401). */\nexport function ecdf(sorted: readonly number[]): EcdfStep[] {\n const n = sorted.length;\n const steps: EcdfStep[] = [];\n sorted.forEach((v, i) => {\n if (i + 1 < n && sorted[i + 1] === v) return;\n steps.push({ value: v, p: (i + 1) / n });\n });\n return steps;\n}\n\n/** A rank and the line's slot at one x: ties share a rank, and are slotted by series order. */\nexport interface Rank {\n readonly rank: number;\n readonly slot: number;\n}\n\n/**\n * Competition ranks (\"1224\") of long-format rows, per x (REQ-409, DD-029). `descending` gives rank\n * 1 to the highest value. Equal values share a rank; for the drawing only, ties are slotted by the\n * series' first appearance (`seriesOrder`), so the result does not depend on row order (I-23).\n */\nexport function rank(\n rows: readonly { readonly x: unknown; readonly series: string; readonly value: number }[],\n seriesOrder: readonly string[],\n order: 'descending' | 'ascending',\n): Rank[] {\n const position = new Map(seriesOrder.map((s, i) => [s, i]));\n const sign = order === 'descending' ? -1 : 1;\n const groups = new Map<string, number[]>();\n rows.forEach((row, i) => {\n const key = `${typeof row.x}:${String(row.x)}`;\n const group = groups.get(key);\n if (group) group.push(i);\n else groups.set(key, [i]);\n });\n const result = new Array<Rank>(rows.length);\n for (const members of groups.values()) {\n const sorted = [...members].sort((a, b) => {\n const ra = rows[a] as (typeof rows)[number];\n const rb = rows[b] as (typeof rows)[number];\n return sign * (ra.value - rb.value) || (position.get(ra.series) ?? 0) - (position.get(rb.series) ?? 0);\n });\n sorted.forEach((i, slot) => {\n const v = (rows[i] as (typeof rows)[number]).value;\n const better = sorted.findIndex((j) => (rows[j] as (typeof rows)[number]).value === v);\n result[i] = { rank: better + 1, slot: slot + 1 };\n });\n }\n return result;\n}\n\n/**\n * Whole cells for each value, summing exactly to `cells` (REQ-414, I-26): Hamilton's largest\n * remainder — each takes the whole part of its share, and the cells left go to the largest\n * remainders, ties to the earlier value. Then, while there are enough cells, a positive value left\n * with none takes one from the value holding the most (the later one on a tie).\n */\nexport function allocateCells(values: readonly number[], cells: number): number[] {\n const total = values.reduce((sum, v) => sum + (v > 0 ? v : 0), 0);\n if (total <= 0) return values.map(() => 0);\n const exact = values.map((v) => (v > 0 ? (v * cells) / total : 0));\n const counts = exact.map((e) => Math.floor(e));\n let left = cells - counts.reduce((sum, c) => sum + c, 0);\n const order = exact.map((e, i) => [e - (counts[i] as number), i] as const).sort((a, b) => b[0] - a[0] || a[1] - b[1]);\n for (const [, i] of order) {\n if (left <= 0) break;\n counts[i] = (counts[i] as number) + 1;\n left -= 1;\n }\n const positive = values.filter((v) => v > 0).length;\n if (cells >= positive) {\n values.forEach((v, i) => {\n if (v <= 0 || (counts[i] as number) > 0) return;\n let donor = 0;\n counts.forEach((c, j) => {\n if (c >= (counts[donor] as number)) donor = j;\n });\n counts[donor] = (counts[donor] as number) - 1;\n counts[i] = 1;\n });\n }\n return counts;\n}\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `HistogramChart` (REQ-400): 240 right-skewed reading times in minutes, rounded to half minutes so values tie. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const HISTOGRAM_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { reader: 'R001', device: 'desktop', minutes: 4 },\n { reader: 'R002', device: 'phone', minutes: 17 },\n { reader: 'R003', device: 'phone', minutes: 3 },\n { reader: 'R004', device: 'phone', minutes: 6.5 },\n { reader: 'R005', device: 'phone', minutes: 3.5 },\n { reader: 'R006', device: 'phone', minutes: 3 },\n { reader: 'R007', device: 'phone', minutes: 4.5 },\n { reader: 'R008', device: 'desktop', minutes: 23.5 },\n { reader: 'R009', device: 'phone', minutes: 1 },\n { reader: 'R010', device: 'desktop', minutes: 1 },\n { reader: 'R011', device: 'phone', minutes: 6.5 },\n { reader: 'R012', device: 'desktop', minutes: 4.5 },\n { reader: 'R013', device: 'desktop', minutes: 1.5 },\n { reader: 'R014', device: 'phone', minutes: 7 },\n { reader: 'R015', device: 'desktop', minutes: 8.5 },\n { reader: 'R016', device: 'phone', minutes: 3 },\n { reader: 'R017', device: 'phone', minutes: 3 },\n { reader: 'R018', device: 'desktop', minutes: 8 },\n { reader: 'R019', device: 'desktop', minutes: 3 },\n { reader: 'R020', device: 'phone', minutes: 4 },\n { reader: 'R021', device: 'desktop', minutes: 8 },\n { reader: 'R022', device: 'phone', minutes: 6.5 },\n { reader: 'R023', device: 'phone', minutes: 10.5 },\n { reader: 'R024', device: 'desktop', minutes: 16.5 },\n { reader: 'R025', device: 'phone', minutes: 3.5 },\n { reader: 'R026', device: 'phone', minutes: 5 },\n { reader: 'R027', device: 'phone', minutes: 8 },\n { reader: 'R028', device: 'phone', minutes: 5 },\n { reader: 'R029', device: 'desktop', minutes: 2 },\n { reader: 'R030', device: 'desktop', minutes: 1.5 },\n { reader: 'R031', device: 'phone', minutes: 10 },\n { reader: 'R032', device: 'desktop', minutes: 4.5 },\n { reader: 'R033', device: 'desktop', minutes: 18.5 },\n { reader: 'R034', device: 'phone', minutes: 3.5 },\n { reader: 'R035', device: 'phone', minutes: 3 },\n { reader: 'R036', device: 'desktop', minutes: 9.5 },\n { reader: 'R037', device: 'phone', minutes: 11.5 },\n { reader: 'R038', device: 'desktop', minutes: 11 },\n { reader: 'R039', device: 'desktop', minutes: 4.5 },\n { reader: 'R040', device: 'phone', minutes: 3 },\n { reader: 'R041', device: 'phone', minutes: 4.5 },\n { reader: 'R042', device: 'phone', minutes: 11 },\n { reader: 'R043', device: 'phone', minutes: 4 },\n { reader: 'R044', device: 'phone', minutes: 5 },\n { reader: 'R045', device: 'desktop', minutes: 5.5 },\n { reader: 'R046', device: 'desktop', minutes: 6 },\n { reader: 'R047', device: 'phone', minutes: 2.5 },\n { reader: 'R048', device: 'phone', minutes: 4 },\n { reader: 'R049', device: 'phone', minutes: 1 },\n { reader: 'R050', device: 'phone', minutes: 1.5 },\n { reader: 'R051', device: 'phone', minutes: 2.5 },\n { reader: 'R052', device: 'phone', minutes: 4 },\n { reader: 'R053', device: 'desktop', minutes: 21.5 },\n { reader: 'R054', device: 'phone', minutes: 5 },\n { reader: 'R055', device: 'desktop', minutes: 16.5 },\n { reader: 'R056', device: 'phone', minutes: 6 },\n { reader: 'R057', device: 'desktop', minutes: 27.5 },\n { reader: 'R058', device: 'phone', minutes: 3.5 },\n { reader: 'R059', device: 'phone', minutes: 1.5 },\n { reader: 'R060', device: 'desktop', minutes: 20 },\n { reader: 'R061', device: 'desktop', minutes: 6.5 },\n { reader: 'R062', device: 'phone', minutes: 11.5 },\n { reader: 'R063', device: 'phone', minutes: 11 },\n { reader: 'R064', device: 'phone', minutes: 4 },\n { reader: 'R065', device: 'phone', minutes: 2 },\n { reader: 'R066', device: 'phone', minutes: 1.5 },\n { reader: 'R067', device: 'phone', minutes: 6 },\n { reader: 'R068', device: 'desktop', minutes: 14 },\n { reader: 'R069', device: 'desktop', minutes: 2 },\n { reader: 'R070', device: 'phone', minutes: 4.5 },\n { reader: 'R071', device: 'phone', minutes: 10.5 },\n { reader: 'R072', device: 'desktop', minutes: 3.5 },\n { reader: 'R073', device: 'desktop', minutes: 7.5 },\n { reader: 'R074', device: 'phone', minutes: 4 },\n { reader: 'R075', device: 'phone', minutes: 3.5 },\n { reader: 'R076', device: 'desktop', minutes: 7.5 },\n { reader: 'R077', device: 'phone', minutes: 3 },\n { reader: 'R078', device: 'phone', minutes: 2 },\n { reader: 'R079', device: 'desktop', minutes: 6 },\n { reader: 'R080', device: 'phone', minutes: 4 },\n { reader: 'R081', device: 'phone', minutes: 4 },\n { reader: 'R082', device: 'phone', minutes: 4 },\n { reader: 'R083', device: 'phone', minutes: 9.5 },\n { reader: 'R084', device: 'desktop', minutes: 13.5 },\n { reader: 'R085', device: 'desktop', minutes: 2 },\n { reader: 'R086', device: 'phone', minutes: 2.5 },\n { reader: 'R087', device: 'desktop', minutes: 6 },\n { reader: 'R088', device: 'desktop', minutes: 12 },\n { reader: 'R089', device: 'phone', minutes: 5 },\n { reader: 'R090', device: 'phone', minutes: 5.5 },\n { reader: 'R091', device: 'phone', minutes: 5 },\n { reader: 'R092', device: 'desktop', minutes: 14 },\n { reader: 'R093', device: 'phone', minutes: 5 },\n { reader: 'R094', device: 'desktop', minutes: 3 },\n { reader: 'R095', device: 'phone', minutes: 12.5 },\n { reader: 'R096', device: 'desktop', minutes: 6.5 },\n { reader: 'R097', device: 'phone', minutes: 14 },\n { reader: 'R098', device: 'phone', minutes: 8.5 },\n { reader: 'R099', device: 'desktop', minutes: 3.5 },\n { reader: 'R100', device: 'desktop', minutes: 9 },\n { reader: 'R101', device: 'phone', minutes: 10 },\n { reader: 'R102', device: 'phone', minutes: 8.5 },\n { reader: 'R103', device: 'desktop', minutes: 8.5 },\n { reader: 'R104', device: 'phone', minutes: 6.5 },\n { reader: 'R105', device: 'desktop', minutes: 12 },\n { reader: 'R106', device: 'phone', minutes: 4.5 },\n { reader: 'R107', device: 'phone', minutes: 10.5 },\n { reader: 'R108', device: 'phone', minutes: 8.5 },\n { reader: 'R109', device: 'phone', minutes: 6 },\n { reader: 'R110', device: 'phone', minutes: 9 },\n { reader: 'R111', device: 'phone', minutes: 4 },\n { reader: 'R112', device: 'phone', minutes: 7 },\n { reader: 'R113', device: 'desktop', minutes: 4 },\n { reader: 'R114', device: 'desktop', minutes: 2.5 },\n { reader: 'R115', device: 'phone', minutes: 11.5 },\n { reader: 'R116', device: 'desktop', minutes: 2 },\n { reader: 'R117', device: 'phone', minutes: 21.5 },\n { reader: 'R118', device: 'desktop', minutes: 14.5 },\n { reader: 'R119', device: 'phone', minutes: 4.5 },\n { reader: 'R120', device: 'desktop', minutes: 8 },\n { reader: 'R121', device: 'desktop', minutes: 6.5 },\n { reader: 'R122', device: 'desktop', minutes: 5.5 },\n { reader: 'R123', device: 'phone', minutes: 4 },\n { reader: 'R124', device: 'desktop', minutes: 9.5 },\n { reader: 'R125', device: 'phone', minutes: 15.5 },\n { reader: 'R126', device: 'phone', minutes: 11 },\n { reader: 'R127', device: 'desktop', minutes: 27 },\n { reader: 'R128', device: 'phone', minutes: 1 },\n { reader: 'R129', device: 'phone', minutes: 12 },\n { reader: 'R130', device: 'phone', minutes: 8.5 },\n { reader: 'R131', device: 'desktop', minutes: 4 },\n { reader: 'R132', device: 'desktop', minutes: 3.5 },\n { reader: 'R133', device: 'phone', minutes: 3 },\n { reader: 'R134', device: 'desktop', minutes: 15.5 },\n { reader: 'R135', device: 'phone', minutes: 9 },\n { reader: 'R136', device: 'phone', minutes: 17 },\n { reader: 'R137', device: 'phone', minutes: 5.5 },\n { reader: 'R138', device: 'desktop', minutes: 6 },\n { reader: 'R139', device: 'phone', minutes: 2 },\n { reader: 'R140', device: 'phone', minutes: 10.5 },\n { reader: 'R141', device: 'phone', minutes: 2 },\n { reader: 'R142', device: 'desktop', minutes: 12.5 },\n { reader: 'R143', device: 'desktop', minutes: 4 },\n { reader: 'R144', device: 'phone', minutes: 1.5 },\n { reader: 'R145', device: 'phone', minutes: 9.5 },\n { reader: 'R146', device: 'phone', minutes: 5.5 },\n { reader: 'R147', device: 'phone', minutes: 3.5 },\n { reader: 'R148', device: 'phone', minutes: 11.5 },\n { reader: 'R149', device: 'desktop', minutes: 6 },\n { reader: 'R150', device: 'desktop', minutes: 4 },\n { reader: 'R151', device: 'phone', minutes: 8 },\n { reader: 'R152', device: 'phone', minutes: 9 },\n { reader: 'R153', device: 'desktop', minutes: 13 },\n { reader: 'R154', device: 'phone', minutes: 2 },\n { reader: 'R155', device: 'desktop', minutes: 12 },\n { reader: 'R156', device: 'phone', minutes: 1 },\n { reader: 'R157', device: 'phone', minutes: 4.5 },\n { reader: 'R158', device: 'phone', minutes: 2 },\n { reader: 'R159', device: 'desktop', minutes: 2 },\n { reader: 'R160', device: 'phone', minutes: 5 },\n { reader: 'R161', device: 'phone', minutes: 4.5 },\n { reader: 'R162', device: 'phone', minutes: 1.5 },\n { reader: 'R163', device: 'desktop', minutes: 9.5 },\n { reader: 'R164', device: 'phone', minutes: 6 },\n { reader: 'R165', device: 'phone', minutes: 10 },\n { reader: 'R166', device: 'desktop', minutes: 7.5 },\n { reader: 'R167', device: 'phone', minutes: 14.5 },\n { reader: 'R168', device: 'phone', minutes: 5 },\n { reader: 'R169', device: 'phone', minutes: 9.5 },\n { reader: 'R170', device: 'phone', minutes: 3 },\n { reader: 'R171', device: 'desktop', minutes: 10.5 },\n { reader: 'R172', device: 'phone', minutes: 8 },\n { reader: 'R173', device: 'phone', minutes: 7.5 },\n { reader: 'R174', device: 'phone', minutes: 4.5 },\n { reader: 'R175', device: 'phone', minutes: 6 },\n { reader: 'R176', device: 'desktop', minutes: 1.5 },\n { reader: 'R177', device: 'desktop', minutes: 5 },\n { reader: 'R178', device: 'phone', minutes: 2 },\n { reader: 'R179', device: 'desktop', minutes: 19.5 },\n { reader: 'R180', device: 'phone', minutes: 3 },\n { reader: 'R181', device: 'phone', minutes: 2.5 },\n { reader: 'R182', device: 'phone', minutes: 5.5 },\n { reader: 'R183', device: 'phone', minutes: 4.5 },\n { reader: 'R184', device: 'phone', minutes: 3.5 },\n { reader: 'R185', device: 'desktop', minutes: 2 },\n { reader: 'R186', device: 'phone', minutes: 5.5 },\n { reader: 'R187', device: 'phone', minutes: 5.5 },\n { reader: 'R188', device: 'phone', minutes: 3 },\n { reader: 'R189', device: 'desktop', minutes: 2.5 },\n { reader: 'R190', device: 'phone', minutes: 10 },\n { reader: 'R191', device: 'phone', minutes: 9.5 },\n { reader: 'R192', device: 'desktop', minutes: 3 },\n { reader: 'R193', device: 'phone', minutes: 3 },\n { reader: 'R194', device: 'phone', minutes: 2.5 },\n { reader: 'R195', device: 'phone', minutes: 3 },\n { reader: 'R196', device: 'phone', minutes: 11 },\n { reader: 'R197', device: 'phone', minutes: 13 },\n { reader: 'R198', device: 'desktop', minutes: 10.5 },\n { reader: 'R199', device: 'desktop', minutes: 5 },\n { reader: 'R200', device: 'phone', minutes: 6 },\n { reader: 'R201', device: 'desktop', minutes: 13.5 },\n { reader: 'R202', device: 'phone', minutes: 6 },\n { reader: 'R203', device: 'phone', minutes: 8.5 },\n { reader: 'R204', device: 'phone', minutes: 7.5 },\n { reader: 'R205', device: 'desktop', minutes: 5 },\n { reader: 'R206', device: 'desktop', minutes: 3.5 },\n { reader: 'R207', device: 'phone', minutes: 9 },\n { reader: 'R208', device: 'desktop', minutes: 5 },\n { reader: 'R209', device: 'phone', minutes: 4.5 },\n { reader: 'R210', device: 'phone', minutes: 7.5 },\n { reader: 'R211', device: 'phone', minutes: 11.5 },\n { reader: 'R212', device: 'desktop', minutes: 18 },\n { reader: 'R213', device: 'desktop', minutes: 12 },\n { reader: 'R214', device: 'phone', minutes: 2.5 },\n { reader: 'R215', device: 'desktop', minutes: 15 },\n { reader: 'R216', device: 'desktop', minutes: 9 },\n { reader: 'R217', device: 'phone', minutes: 10 },\n { reader: 'R218', device: 'desktop', minutes: 3.5 },\n { reader: 'R219', device: 'desktop', minutes: 5 },\n { reader: 'R220', device: 'desktop', minutes: 8 },\n { reader: 'R221', device: 'desktop', minutes: 6.5 },\n { reader: 'R222', device: 'phone', minutes: 15 },\n { reader: 'R223', device: 'phone', minutes: 6.5 },\n { reader: 'R224', device: 'phone', minutes: 3 },\n { reader: 'R225', device: 'phone', minutes: 4 },\n { reader: 'R226', device: 'phone', minutes: 2 },\n { reader: 'R227', device: 'desktop', minutes: 4 },\n { reader: 'R228', device: 'phone', minutes: 8 },\n { reader: 'R229', device: 'phone', minutes: 7 },\n { reader: 'R230', device: 'phone', minutes: 6.5 },\n { reader: 'R231', device: 'phone', minutes: 1.5 },\n { reader: 'R232', device: 'phone', minutes: 9 },\n { reader: 'R233', device: 'phone', minutes: 6 },\n { reader: 'R234', device: 'desktop', minutes: 6.5 },\n { reader: 'R235', device: 'phone', minutes: 11.5 },\n { reader: 'R236', device: 'phone', minutes: 5 },\n { reader: 'R237', device: 'phone', minutes: 3.5 },\n { reader: 'R238', device: 'desktop', minutes: 4 },\n { reader: 'R239', device: 'phone', minutes: 4.5 },\n { reader: 'R240', device: 'desktop', minutes: 4.5 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const HISTOGRAM_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n valueKey: 'minutes',\n} as const);\n","import { linearScale } from '../../scales/scales';\nimport type { ChartModel, ChartRecipe, HistogramChartProps, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, TICK_CHAR, cartesianPlot, horizontalValueAxis, valueAxis } from '../shared/cartesian';\nimport { rectPath } from '../shared/cells';\nimport { checkBins, checkCeiling, readObservations } from '../shared/contracts';\nimport { accessorName, circlePath, formatNumber } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { bins as binsOf, quantile, sortedValues, type Bin } from '../shared/stats';\nimport { HISTOGRAM_CHART_DEMO, HISTOGRAM_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'HistogramChart';\nconst HEIGHTEN_RADIUS = 3.5;\n/** Room at the left for the bin edges when bins run in rows. */\nconst ROW_LABELS = 48;\n/** Minimum room per printed bin edge. */\nconst EDGE_SPACING = 36;\n\n/** The rule the bins came from, for the description (REQ-431). */\nfunction method(spec: number | readonly number[] | undefined, sorted: readonly number[]): string {\n if (Array.isArray(spec)) return 'at the given thresholds';\n if (typeof spec === 'number') return `as ${spec} equal bins`;\n const iqr = quantile(sorted, 0.75) - quantile(sorted, 0.25);\n return iqr > 0 ? 'by the Freedman–Diaconis rule' : \"by Sturges' rule\";\n}\n\nfunction buildHistogramChart(props: HistogramChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? HISTOGRAM_CHART_DEMO;\n const valueKey = usesDemo ? HISTOGRAM_CHART_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n const rows = props.orientation === 'rows';\n const cumulative = props.cumulative === true;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n\n const { observations } = readObservations(CHART, data, { value: valueKey });\n checkCeiling(CHART, valueName, 'observations', observations.length);\n const spec = checkBins(CHART, props.bins);\n const sorted = sortedValues(observations.map((o) => o.value));\n let running = 0;\n const bins: Bin[] = binsOf(sorted, spec).map((bin) => (cumulative ? { ...bin, count: (running += bin.count) } : bin));\n const countName = cumulative ? 'cumulative count' : 'count';\n const range = (bin: Bin) => `${formatNumber(bin.x0, locale, numberFormat)}–${formatNumber(bin.x1, locale, numberFormat)}`;\n\n const base = modelBase(CHART, props, context, 'Histogram', {\n columns: [valueName, countName],\n rows: bins.map((bin) => [range(bin), formatNumber(bin.count, locale, undefined)]),\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 area = card.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];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (bins.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const largest = Math.max(...bins.map((b) => b.count));\n const axisOptions = { chart: CHART, property: countName, padding: context.domainPadding, locale, numberFormat: undefined };\n const axis = rows ? horizontalValueAxis(plot, area, [0, largest], axisOptions) : valueAxis(plot, [0, largest], axisOptions);\n const count = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n // The bins sit on their own edges, which are already nice: the scale is not niced again.\n const first = (bins[0] as Bin).x0;\n const last = (bins.at(-1) as Bin).x1;\n const along = rows ? ([plot.y, plot.y + plot.height] as const) : ([plot.x, plot.x + plot.width] as const);\n const at = linearScale([first, last], along, { chart: CHART, property: valueName, padding: context.domainPadding });\n\n const tops: string[] = [];\n bins.forEach((bin, index) => {\n const a = at(bin.x0);\n const b = at(bin.x1);\n const end = count(bin.count);\n const zero = count(0);\n const box: Rect = rows ? { x: zero, y: a, width: end - zero, height: b - a } : { x: a, y: end, width: b - a, height: zero - end };\n strokes.push({ d: rectPath(box), role: 'encoding', part: 'ink', tone: cumulative ? 1 : 2 });\n // The running total's top edge: across each bin, then up (or out) to the next one.\n if (rows) tops.push(index === 0 ? `M${end},${a}V${b}` : `H${end}V${b}`);\n else tops.push(index === 0 ? `M${a},${end}H${b}` : `V${end}H${b}`);\n const centre = (a + b) / 2;\n hitAreas.push({\n seriesKey: countName,\n index,\n datum: Object.freeze({ x0: bin.x0, x1: bin.x1, count: bin.count }),\n value: bin.count,\n x: rows ? end : centre,\n y: rows ? centre : end,\n box,\n });\n const text = formatNumber(bin.count, locale, undefined);\n if (!rows && b - a >= text.length * TICK_CHAR + 2 && bin.count > 0) {\n // Clear of the heightened mark, which may sit on this bin's top.\n labels.push({ x: centre, y: end - HEIGHTEN_RADIUS - 3, text, kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n });\n // The running total's top edge, one exact line over the toned bins (DD-035).\n if (cumulative) strokes.push({ d: tops.join(''), role: 'encoding', part: 'ink' });\n\n // Ticks at the bin edges, thinned so they never crowd.\n const edges = [first, ...bins.map((b) => b.x1)];\n const room = rows ? plot.height : plot.width;\n const step = Math.max(1, Math.ceil(edges.length / Math.max(2, Math.floor(room / EDGE_SPACING))));\n edges.forEach((edge, i) => {\n if (i % step !== 0 && i !== edges.length - 1) return;\n const text = formatNumber(edge, locale, numberFormat);\n labels.push(rows\n ? { x: area.x + PLOT_INSET, y: at(edge) + 3, text, kind: 'tick', part: 'axis', anchor: 'start' }\n : { x: at(edge), y: area.y + area.height - 5, text, kind: 'tick', part: 'axis', anchor: 'middle' });\n });\n\n // One heightened element (REQ-442): the modal bin's top, or the last bin's when cumulative.\n const raised = cumulative ? (hitAreas.at(-1) as HitArea) : hitAreas.reduce((best, hit) => (hit.value > best.value ? hit : best));\n const mark = circlePath(raised.x, raised.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 const modal = bins.reduce((best, bin) => (bin.count > best.count ? bin : best));\n const description =\n props.description ??\n `${base.name}. Histogram of ${observations.length} ${valueName} observations in ${bins.length} bins ${method(spec, sorted)}, from ${formatNumber(first, locale, numberFormat)} to ${formatNumber(last, locale, numberFormat)}; ${\n cumulative ? `the counts run up to ${observations.length}` : `the fullest bin, ${range(modal)}, holds ${modal.count}`\n }.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `HistogramChart` recipe (REQ-400): raw observations binned in the core, abutting bins. */\nexport const histogramChart: ChartRecipe<HistogramChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildHistogramChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\n/** Demo dataset of `EcdfChart` (REQ-401): the histogram's reading times, by device. */\nexport { HISTOGRAM_CHART_DEMO as ECDF_CHART_DEMO } from '../histogram-chart/demo';\n\nexport const ECDF_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n valueKey: 'minutes',\n groupKey: 'device',\n} as const);\n","import { linearScale } from '../../scales/scales';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, EcdfChartProps, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot, legend } from '../shared/cartesian';\nimport { warnValue } from '../shared/cells';\nimport { checkCeiling, checkQuantiles, readObservations } from '../shared/contracts';\nimport { accessorName, circlePath, formatNumber, numberFormatter } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { ecdf, quantile, sortedValues, type EcdfStep } from '../shared/stats';\nimport { ECDF_CHART_DEMO, ECDF_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'EcdfChart';\nconst HEIGHTEN_RADIUS = 3.5;\n/** Groups drawn: the catalog's two-series grammar, `ink` and `ink-secondary` dotted (DD-035). */\nconst MAX_GROUPS = 2;\n/** The share grid: the quartiles and the whole (DD-035). */\nconst SHARES = [0.25, 0.5, 0.75, 1] as const;\nconst PERCENT: Intl.NumberFormatOptions = { style: 'percent', maximumFractionDigits: 1 };\n\ninterface Group {\n readonly name: string;\n readonly sorted: readonly number[];\n readonly steps: readonly EcdfStep[];\n}\n\nfunction buildEcdfChart(props: EcdfChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? ECDF_CHART_DEMO;\n const valueKey = usesDemo ? ECDF_CHART_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n const groupKey = usesDemo ? ECDF_CHART_DEMO_KEYS.groupKey : props.groupKey;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n\n const read = readObservations(CHART, data, { value: valueKey, ...(groupKey === undefined ? {} : { group: groupKey }) });\n checkCeiling(CHART, valueName, 'observations', read.observations.length);\n if (read.groups.length > MAX_GROUPS) {\n warnValue(CHART, groupKey === undefined ? 'group' : accessorName(groupKey, 'group'), `${read.groups.length} groups; the ECDF draws the first ${MAX_GROUPS}.`);\n }\n const markers = checkQuantiles(CHART, props.markers) ?? [];\n const groups: Group[] = read.groups.slice(0, MAX_GROUPS).map((name, i) => {\n const sorted = sortedValues(read.observations.filter((o) => o.group === name).map((o) => o.value));\n return { name: groupKey === undefined && i === 0 ? 'cumulative share' : name, sorted, steps: ecdf(sorted) };\n });\n\n // One row per distinct value across the groups; each cell is that group's share at or below it.\n const values = sortedValues([...new Set(groups.flatMap((g) => g.steps.map((s) => s.value)))]);\n const row = new Map(values.map((v, i) => [v, i]));\n // Each group's share at every row, in one pass: values and steps are both sorted (REQ-445).\n const shares = groups.map((group) => {\n let k = 0;\n let p = 0;\n return values.map((v) => {\n while (k < group.steps.length && (group.steps[k] as EcdfStep).value <= v) p = (group.steps[k++] as EcdfStep).p;\n return p;\n });\n });\n // A row per distinct value: each column's formatter is resolved once (REQ-445).\n const value = numberFormatter(locale, numberFormat);\n const percent = numberFormatter(locale, PERCENT);\n const base = modelBase(CHART, props, context, 'Cumulative distribution', {\n columns: [valueName, ...groups.map((g) => g.name)],\n rows: values.map((v, i) => [value(v), ...shares.map((column) => percent(column[i] as number))]),\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 = groups.length > 1\n ? legend(card.area, groups.map((g, i) => (i === 0 ? { name: g.name, part: 'ink' as const } : { name: g.name, part: 'ink-secondary' as const, dash: 'dotted' as const })))\n : { area: card.area, strokes: [], labels: [] };\n const area = key.area;\n const plot = cartesianPlot(area);\n const strokes: Stroke[] = [...card.strokes, ...key.strokes];\n const labels: TextLabel[] = [...card.labels, ...key.labels];\n const hitAreas: HitArea[] = [];\n\n const domain = extent(values);\n if (domain === undefined) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const right = plot.x + plot.width;\n const bottom = plot.y + plot.height;\n const x = linearScale(domain, [plot.x, right], { chart: CHART, property: valueName, padding: context.domainPadding, nice: true });\n const y = linearScale([0, 1], [bottom, plot.y], { chart: CHART, property: 'share', padding: context.domainPadding });\n for (const share of SHARES) {\n strokes.push({ d: `M${plot.x},${y(share)}H${right}`, role: 'ornament', part: 'grid' });\n labels.push({ x: plot.x, y: y(share) - 3, text: formatNumber(share, locale, PERCENT), kind: 'tick', part: 'axis', anchor: 'start' });\n }\n strokes.push({ d: `M${plot.x},${bottom}H${right}`, role: 'ornament', part: 'rule' });\n for (const tick of x.ticks(4)) {\n labels.push({ x: x(tick), y: area.y + area.height - 5, text: formatNumber(tick, locale, numberFormat), kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n // A quantile marker is a dotted rule across the plot at its share.\n for (const p of markers) strokes.push({ d: `M${plot.x},${y(p)}H${right}`, role: 'ornament', part: 'rule', dash: 'dotted' });\n\n groups.forEach((group, series) => {\n // The step function: zero until the first value, up at each value, held to the end.\n let d = '';\n group.steps.forEach((step, i) => {\n d += i === 0 ? `M${x(step.value)},${bottom}V${y(step.p)}` : `H${x(step.value)}V${y(step.p)}`;\n });\n d += `H${right}`;\n strokes.push({ d, role: 'encoding', part: series === 0 ? 'ink' : 'ink-secondary', ...(series === 0 ? {} : { dash: 'dotted' as const }) });\n group.steps.forEach((step, column) => {\n hitAreas.push({\n seriesKey: group.name,\n index: row.get(step.value) as number,\n datum: Object.freeze({ value: step.value, p: step.p, group: group.name }),\n value: step.p,\n x: x(step.value),\n y: y(step.p),\n cell: { column, row: series },\n });\n });\n });\n\n // One heightened element (REQ-442): where the first group crosses its median.\n const first = groups[0] as Group;\n const median = quantile(first.sorted, 0.5);\n const mark = circlePath(x(median), y(0.5), 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 const summary = groups.map((g) => `${g.name}: ${g.sorted.length} values, median ${formatNumber(quantile(g.sorted, 0.5), locale, numberFormat)}`).join('; ');\n const description =\n props.description ??\n `${base.name}. Empirical cumulative distribution of ${valueName}, the share of observations at or below each value, from ${formatNumber(domain[0], locale, numberFormat)} to ${formatNumber(domain[1], locale, numberFormat)}; ${summary}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `EcdfChart` recipe (REQ-401): the empirical cumulative distribution as an exact step line. */\nexport const ecdfChart: ChartRecipe<EcdfChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildEcdfChart });\n","import { bandScale, type LinearScale } from '../../scales/scales';\nimport { extent } from '../../scales/util';\nimport type { Accessor, ChartModel, ChartOrientation, CommonChartProps, Datum, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from './card';\nimport { AXIS_BAND, PLOT_INSET, cartesianPlot, categoryLabels, horizontalValueAxis, valueAxis } from './cartesian';\nimport { checkCeiling, readObservations, warnTooSmall } from './contracts';\nimport { accessorName, fitText, formatNumber } from './format';\nimport { emptyModel, measure, modelBase, readyModel } from './shell';\nimport { sortedValues } from './stats';\n\n/**\n * The skeleton the box plot, the violin and the ridgeline share (DD-036), as `points.ts` serves\n * the scatter and the bubble: observations read and grouped, a sorted sample per group, the derived\n * table, the card, the empty state; each family then draws its groups on the frame.\n */\n\n/** A group's observations, ascending. */\nexport interface DistributionGroup {\n readonly name: string;\n readonly sorted: readonly number[];\n /** Fewer observations than the family's statistic needs: drawn as points (REQ-434). */\n readonly small: boolean;\n}\n\nexport interface DistributionProps extends CommonChartProps {\n valueKey?: Accessor<number | null | undefined>;\n groupKey?: Accessor<string | null | undefined>;\n orientation?: ChartOrientation;\n}\n\n/** What a family draws on the frame; every coordinate in it comes from the frame's scales. */\nexport interface DistributionDrawing {\n readonly plot: Rect;\n readonly strokes: readonly Stroke[];\n readonly labels: readonly TextLabel[];\n readonly hitAreas: readonly HitArea[];\n /** What the description says after the chart's name and its groups. */\n readonly summary: string;\n}\n\nexport interface DistributionFamily<P extends DistributionProps> {\n readonly chart: string;\n readonly fallbackName: string;\n readonly demo: readonly Datum[];\n readonly demoKeys: { readonly valueKey: string; readonly groupKey: string };\n /** Observations a group needs for the statistic (REQ-434). */\n readonly minimum: number;\n /** The derived columns after the group's name, and a group's cells (REQ-431). */\n readonly columns: readonly string[];\n row(group: DistributionGroup, props: P, format: (v: number) => string, groups: readonly DistributionGroup[]): readonly string[];\n draw(frame: { readonly props: P; readonly context: RecipeContext; readonly groups: readonly DistributionGroup[]; readonly area: Rect; readonly valueName: string; readonly format: (v: number) => string }): DistributionDrawing;\n}\n\nexport function buildDistribution<P extends DistributionProps>(family: DistributionFamily<P>, props: P, context: RecipeContext): ChartModel {\n const { chart } = family;\n const usesDemo = props.data === undefined;\n const data = props.data ?? family.demo;\n const valueKey = usesDemo ? family.demoKeys.valueKey : (props.valueKey ?? 'value');\n const groupKey = usesDemo ? family.demoKeys.groupKey : props.groupKey;\n const { locale } = context;\n const format = (v: number) => formatNumber(v, locale, props.numberFormat);\n const valueName = accessorName(valueKey, 'value');\n const groupName = groupKey === undefined ? 'group' : accessorName(groupKey, 'group');\n\n const read = readObservations(chart, data, { value: valueKey, ...(groupKey === undefined ? {} : { group: groupKey }) });\n checkCeiling(chart, valueName, 'observations', read.observations.length);\n const groups: DistributionGroup[] = read.groups.map((name) => {\n const sorted = sortedValues(read.observations.filter((o) => o.group === name).map((o) => o.value));\n return { name: groupKey === undefined ? valueName : name, sorted, small: sorted.length < family.minimum };\n });\n for (const g of groups) if (g.small && g.sorted.length > 0) warnTooSmall(chart, g.name, g.sorted.length, family.minimum);\n\n const base = modelBase(chart, props, context, family.fallbackName, {\n columns: [groupName, ...family.columns],\n rows: groups.map((g) => [g.name, ...family.row(g, props, format, groups)]),\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 if (read.observations.length === 0) {\n return emptyModel(base, props, context, { viewBox: card.viewBox, plot: cartesianPlot(card.area), strokes: [...card.strokes], labels: [...card.labels] }, data.length === 0);\n }\n const drawing = family.draw({ props, context, groups, area: card.area, valueName, format });\n const description = props.description ?? `${base.name}. ${family.fallbackName} of ${valueName} in ${groups.length} ${groups.length === 1 ? 'group' : 'groups'}; ${drawing.summary}.`;\n return readyModel(base, description, {\n viewBox: card.viewBox,\n plot: drawing.plot,\n strokes: [...card.strokes, ...drawing.strokes],\n labels: [...card.labels, ...drawing.labels],\n hitAreas: drawing.hitAreas,\n });\n}\n\n/** Room at the left for the group names when groups run in rows. */\nexport const ROW_LABELS = 56;\n\n/** The frame of the box plot and the violin: a band per group, a value scale across them. */\nexport interface BandFrame {\n readonly plot: Rect;\n readonly rows: boolean;\n /** Data value → px along the value axis. */\n readonly value: LinearScale;\n /** Centre of group `i` across the value axis. */\n centre(i: number): number;\n readonly bandwidth: number;\n readonly strokes: readonly Stroke[];\n readonly labels: readonly TextLabel[];\n}\n\nexport function bandFrame(\n area: Rect,\n groups: readonly DistributionGroup[],\n domain: readonly [number, number],\n options: { readonly chart: string; readonly property: string; readonly padding: number; readonly locale: string; readonly numberFormat: Intl.NumberFormatOptions | undefined; readonly orientation: ChartOrientation | undefined },\n): BandFrame {\n const rows = options.orientation === 'rows';\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 axisOptions = { chart: options.chart, property: options.property, padding: options.padding, locale: options.locale, numberFormat: options.numberFormat };\n const axis = rows ? horizontalValueAxis(plot, area, domain, axisOptions) : valueAxis(plot, domain, { ...axisOptions, zero: false });\n const across = rows ? ([plot.y, plot.y + plot.height] as const) : ([plot.x, plot.x + plot.width] as const);\n const band = bandScale(groups.map((_, i) => String(i)), across, { paddingInner: 0.3, paddingOuter: 0.15 });\n const centre = (i: number) => band.center(String(i)) ?? across[0];\n const names = groups.map((g) => g.name);\n const labels: TextLabel[] = [...axis.labels];\n if (rows) names.forEach((text, i) => labels.push({ x: area.x + PLOT_INSET, y: centre(i) + 4, text: fitText(text, ROW_LABELS - PLOT_INSET - 6), kind: 'tick', part: 'axis', anchor: 'start' }));\n else labels.push(...categoryLabels(names, centre, area, plot));\n return { plot, rows, value: axis.scale, centre, bandwidth: band.bandwidth, strokes: axis.strokes, labels };\n}\n\n/** The value extent of every group, for a shared scale. */\nexport function valueExtent(groups: readonly DistributionGroup[], pad = 0): [number, number] {\n const [low, high] = extent(groups.flatMap((g) => g.sorted)) ?? [0, 0];\n return [low - pad, high + pad];\n}\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `BoxPlotChart` (REQ-402): response times in ms of five services, 24 to 60 each: one bimodal, one with outliers. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const BOX_PLOT_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { service: 'Search', ms: 220 },\n { service: 'Search', ms: 177 },\n { service: 'Search', ms: 158 },\n { service: 'Search', ms: 199 },\n { service: 'Search', ms: 171 },\n { service: 'Search', ms: 138 },\n { service: 'Search', ms: 186 },\n { service: 'Search', ms: 207 },\n { service: 'Search', ms: 181 },\n { service: 'Search', ms: 187 },\n { service: 'Search', ms: 176 },\n { service: 'Search', ms: 187 },\n { service: 'Search', ms: 203 },\n { service: 'Search', ms: 161 },\n { service: 'Search', ms: 184 },\n { service: 'Search', ms: 143 },\n { service: 'Search', ms: 140 },\n { service: 'Search', ms: 191 },\n { service: 'Search', ms: 189 },\n { service: 'Search', ms: 203 },\n { service: 'Search', ms: 208 },\n { service: 'Search', ms: 162 },\n { service: 'Search', ms: 229 },\n { service: 'Search', ms: 165 },\n { service: 'Search', ms: 167 },\n { service: 'Search', ms: 161 },\n { service: 'Search', ms: 151 },\n { service: 'Search', ms: 168 },\n { service: 'Search', ms: 189 },\n { service: 'Search', ms: 208 },\n { service: 'Search', ms: 180 },\n { service: 'Search', ms: 139 },\n { service: 'Search', ms: 184 },\n { service: 'Search', ms: 154 },\n { service: 'Search', ms: 170 },\n { service: 'Search', ms: 175 },\n { service: 'Search', ms: 176 },\n { service: 'Search', ms: 154 },\n { service: 'Search', ms: 162 },\n { service: 'Search', ms: 176 },\n { service: 'Search', ms: 189 },\n { service: 'Search', ms: 185 },\n { service: 'Search', ms: 147 },\n { service: 'Search', ms: 183 },\n { service: 'Search', ms: 213 },\n { service: 'Search', ms: 194 },\n { service: 'Search', ms: 186 },\n { service: 'Search', ms: 162 },\n { service: 'Search', ms: 184 },\n { service: 'Search', ms: 170 },\n { service: 'Search', ms: 192 },\n { service: 'Search', ms: 180 },\n { service: 'Search', ms: 158 },\n { service: 'Search', ms: 156 },\n { service: 'Search', ms: 172 },\n { service: 'Search', ms: 203 },\n { service: 'Search', ms: 216 },\n { service: 'Search', ms: 161 },\n { service: 'Search', ms: 194 },\n { service: 'Search', ms: 134 },\n { service: 'Checkout', ms: 116 },\n { service: 'Checkout', ms: 247 },\n { service: 'Checkout', ms: 154 },\n { service: 'Checkout', ms: 242 },\n { service: 'Checkout', ms: 142 },\n { service: 'Checkout', ms: 241 },\n { service: 'Checkout', ms: 129 },\n { service: 'Checkout', ms: 248 },\n { service: 'Checkout', ms: 147 },\n { service: 'Checkout', ms: 241 },\n { service: 'Checkout', ms: 148 },\n { service: 'Checkout', ms: 264 },\n { service: 'Checkout', ms: 132 },\n { service: 'Checkout', ms: 283 },\n { service: 'Checkout', ms: 127 },\n { service: 'Checkout', ms: 252 },\n { service: 'Checkout', ms: 130 },\n { service: 'Checkout', ms: 247 },\n { service: 'Checkout', ms: 133 },\n { service: 'Checkout', ms: 263 },\n { service: 'Checkout', ms: 163 },\n { service: 'Checkout', ms: 265 },\n { service: 'Checkout', ms: 149 },\n { service: 'Checkout', ms: 288 },\n { service: 'Checkout', ms: 144 },\n { service: 'Checkout', ms: 271 },\n { service: 'Checkout', ms: 123 },\n { service: 'Checkout', ms: 296 },\n { service: 'Checkout', ms: 123 },\n { service: 'Checkout', ms: 224 },\n { service: 'Checkout', ms: 141 },\n { service: 'Checkout', ms: 292 },\n { service: 'Checkout', ms: 121 },\n { service: 'Checkout', ms: 300 },\n { service: 'Checkout', ms: 177 },\n { service: 'Checkout', ms: 252 },\n { service: 'Checkout', ms: 141 },\n { service: 'Checkout', ms: 251 },\n { service: 'Checkout', ms: 130 },\n { service: 'Checkout', ms: 237 },\n { service: 'Checkout', ms: 154 },\n { service: 'Checkout', ms: 242 },\n { service: 'Checkout', ms: 132 },\n { service: 'Checkout', ms: 263 },\n { service: 'Checkout', ms: 163 },\n { service: 'Checkout', ms: 257 },\n { service: 'Checkout', ms: 142 },\n { service: 'Checkout', ms: 311 },\n { service: 'Checkout', ms: 145 },\n { service: 'Checkout', ms: 266 },\n { service: 'Checkout', ms: 134 },\n { service: 'Checkout', ms: 255 },\n { service: 'Checkout', ms: 154 },\n { service: 'Checkout', ms: 254 },\n { service: 'Checkout', ms: 122 },\n { service: 'Checkout', ms: 268 },\n { service: 'Checkout', ms: 144 },\n { service: 'Checkout', ms: 284 },\n { service: 'Checkout', ms: 128 },\n { service: 'Checkout', ms: 282 },\n { service: 'Profile', ms: 136 },\n { service: 'Profile', ms: 121 },\n { service: 'Profile', ms: 127 },\n { service: 'Profile', ms: 122 },\n { service: 'Profile', ms: 121 },\n { service: 'Profile', ms: 250 },\n { service: 'Profile', ms: 135 },\n { service: 'Profile', ms: 114 },\n { service: 'Profile', ms: 109 },\n { service: 'Profile', ms: 103 },\n { service: 'Profile', ms: 110 },\n { service: 'Profile', ms: 114 },\n { service: 'Profile', ms: 124 },\n { service: 'Profile', ms: 117 },\n { service: 'Profile', ms: 116 },\n { service: 'Profile', ms: 132 },\n { service: 'Profile', ms: 124 },\n { service: 'Profile', ms: 246 },\n { service: 'Profile', ms: 110 },\n { service: 'Profile', ms: 135 },\n { service: 'Profile', ms: 125 },\n { service: 'Profile', ms: 148 },\n { service: 'Profile', ms: 125 },\n { service: 'Profile', ms: 113 },\n { service: 'Profile', ms: 104 },\n { service: 'Profile', ms: 128 },\n { service: 'Profile', ms: 127 },\n { service: 'Profile', ms: 119 },\n { service: 'Profile', ms: 110 },\n { service: 'Profile', ms: 290 },\n { service: 'Profile', ms: 114 },\n { service: 'Profile', ms: 127 },\n { service: 'Profile', ms: 117 },\n { service: 'Profile', ms: 101 },\n { service: 'Profile', ms: 118 },\n { service: 'Profile', ms: 126 },\n { service: 'Profile', ms: 130 },\n { service: 'Profile', ms: 111 },\n { service: 'Profile', ms: 100 },\n { service: 'Profile', ms: 107 },\n { service: 'Profile', ms: 111 },\n { service: 'Profile', ms: 287 },\n { service: 'Profile', ms: 119 },\n { service: 'Profile', ms: 115 },\n { service: 'Profile', ms: 139 },\n { service: 'Profile', ms: 114 },\n { service: 'Profile', ms: 133 },\n { service: 'Profile', ms: 119 },\n { service: 'Reports', ms: 364 },\n { service: 'Reports', ms: 313 },\n { service: 'Reports', ms: 363 },\n { service: 'Reports', ms: 310 },\n { service: 'Reports', ms: 344 },\n { service: 'Reports', ms: 332 },\n { service: 'Reports', ms: 319 },\n { service: 'Reports', ms: 340 },\n { service: 'Reports', ms: 303 },\n { service: 'Reports', ms: 308 },\n { service: 'Reports', ms: 345 },\n { service: 'Reports', ms: 360 },\n { service: 'Reports', ms: 376 },\n { service: 'Reports', ms: 334 },\n { service: 'Reports', ms: 304 },\n { service: 'Reports', ms: 348 },\n { service: 'Reports', ms: 411 },\n { service: 'Reports', ms: 330 },\n { service: 'Reports', ms: 323 },\n { service: 'Reports', ms: 408 },\n { service: 'Reports', ms: 339 },\n { service: 'Reports', ms: 353 },\n { service: 'Reports', ms: 380 },\n { service: 'Reports', ms: 443 },\n { service: 'Reports', ms: 306 },\n { service: 'Reports', ms: 314 },\n { service: 'Reports', ms: 518 },\n { service: 'Reports', ms: 317 },\n { service: 'Reports', ms: 464 },\n { service: 'Reports', ms: 464 },\n { service: 'Reports', ms: 308 },\n { service: 'Reports', ms: 358 },\n { service: 'Reports', ms: 355 },\n { service: 'Reports', ms: 309 },\n { service: 'Reports', ms: 429 },\n { service: 'Reports', ms: 347 },\n { service: 'Login', ms: 89 },\n { service: 'Login', ms: 100 },\n { service: 'Login', ms: 84 },\n { service: 'Login', ms: 90 },\n { service: 'Login', ms: 88 },\n { service: 'Login', ms: 80 },\n { service: 'Login', ms: 82 },\n { service: 'Login', ms: 88 },\n { service: 'Login', ms: 98 },\n { service: 'Login', ms: 103 },\n { service: 'Login', ms: 83 },\n { service: 'Login', ms: 85 },\n { service: 'Login', ms: 109 },\n { service: 'Login', ms: 86 },\n { service: 'Login', ms: 90 },\n { service: 'Login', ms: 84 },\n { service: 'Login', ms: 99 },\n { service: 'Login', ms: 76 },\n { service: 'Login', ms: 81 },\n { service: 'Login', ms: 82 },\n { service: 'Login', ms: 87 },\n { service: 'Login', ms: 95 },\n { service: 'Login', ms: 109 },\n { service: 'Login', ms: 95 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const BOX_PLOT_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n valueKey: 'ms',\n groupKey: 'service',\n} as const);\n","import type { BoxPlotChartProps, ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke } from '../../types';\nimport { rectPath } from '../shared/cells';\nimport { checkWhisker } from '../shared/contracts';\nimport { bandFrame, buildDistribution, valueExtent, type DistributionFamily, type DistributionGroup } from '../shared/distribution';\nimport { circlePath } from '../shared/format';\nimport { fiveNumber, type FiveNumber } from '../shared/stats';\nimport { BOX_PLOT_CHART_DEMO, BOX_PLOT_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'BoxPlotChart';\nconst HEIGHTEN_RADIUS = 3.5;\nconst POINT_RADIUS = 2.5;\n/** Tukey's reach (REQ-432). */\nconst DEFAULT_WHISKER = 1.5;\n/** A box needs five observations (REQ-434). */\nconst MINIMUM = 5;\n/** Share of a group's band the box fills, and the most it may be in px. */\nconst BOX_FILL = 0.6;\nconst BOX_MAX = 40;\n\n/** The whisker reach; an invalid one is the default, warned once per render (SP021, REQ-433). */\nconst whiskerOf = (props: BoxPlotChartProps) => checkWhisker(CHART, props.whisker) ?? DEFAULT_WHISKER;\nconst summaryOf = (group: DistributionGroup, props: BoxPlotChartProps): FiveNumber => fiveNumber(group.sorted, whiskerOf(props));\n\nconst family: DistributionFamily<BoxPlotChartProps> = {\n chart: CHART,\n fallbackName: 'Box plot',\n demo: BOX_PLOT_CHART_DEMO,\n demoKeys: BOX_PLOT_CHART_DEMO_KEYS,\n minimum: MINIMUM,\n columns: ['n', 'min', 'q1', 'median', 'q3', 'max', 'outliers'],\n row(group, props, format) {\n if (group.sorted.length === 0) return [String(0), '—', '—', '—', '—', '—', '—'];\n const s = summaryOf(group, props);\n return [String(group.sorted.length), format(s.min), format(s.q1), format(s.median), format(s.q3), format(s.max), s.outliers.length > 0 ? s.outliers.map(format).join(', ') : '—'];\n },\n draw({ props, context, groups, area, valueName, format }) {\n const frame = bandFrame(area, groups, valueExtent(groups), { chart: CHART, property: valueName, padding: context.domainPadding, locale: context.locale, numberFormat: props.numberFormat, orientation: props.orientation });\n const { rows, value: v } = frame;\n const strokes: Stroke[] = [...frame.strokes];\n const hitAreas: HitArea[] = [];\n const showOutliers = props.outliers !== false;\n const half = Math.min(frame.bandwidth * BOX_FILL, BOX_MAX) / 2;\n // (along, across) → (x, y): the value runs up a column, or across a row.\n const at = (along: number, across: number) => (rows ? { x: along, y: across } : { x: across, y: along });\n const segment = (a0: number, c0: number, a1: number, c1: number) => {\n const p = at(a0, c0);\n const q = at(a1, c1);\n return `M${p.x},${p.y}L${q.x},${q.y}`;\n };\n const summaries = groups.map((g) => (g.small ? undefined : summaryOf(g, props)));\n let best: { index: number; median: number } | undefined;\n\n groups.forEach((group, g) => {\n const c = frame.centre(g);\n const s = summaries[g];\n const cell = (k: number) => (rows ? { column: k, row: g } : { column: g, row: k });\n if (!s) {\n // Too few for a box: every observation is a point; one stop names the group.\n for (const value of group.sorted) {\n const p = at(v(value), c);\n strokes.push({ d: circlePath(p.x, p.y, POINT_RADIUS), role: 'encoding', part: 'ink' });\n }\n const middle = group.sorted[Math.floor((group.sorted.length - 1) / 2)] ?? 0;\n const p = at(v(middle), c);\n hitAreas.push({ seriesKey: 'median', index: g, datum: Object.freeze({ group: group.name, values: Object.freeze([...group.sorted]) }), value: middle, x: p.x, y: p.y, cell: cell(0) });\n return;\n }\n const low = v(s.q1);\n const high = v(s.q3);\n const lo = Math.min(low, high);\n const box = rows ? { x: lo, y: c - half, width: Math.abs(high - low), height: 2 * half } : { x: c - half, y: lo, width: 2 * half, height: Math.abs(high - low) };\n strokes.push({ d: rectPath(box), role: 'encoding', part: 'ink', tone: 1 });\n strokes.push({ d: segment(v(s.median), c - half, v(s.median), c + half), role: 'encoding', part: 'ink', weight: 2 });\n // Whiskers out to the extreme observations inside the fences, each with its cap.\n for (const [from, to] of [[s.q3, s.max], [s.q1, s.min]] as const) {\n strokes.push({ d: segment(v(from), c, v(to), c) + segment(v(to), c - half / 2, v(to), c + half / 2), role: 'encoding', part: 'ink' });\n }\n const m = at(v(s.median), c);\n const whiskerLow = at(v(s.min), c - half);\n const whiskerHigh = at(v(s.max), c + half);\n hitAreas.push({\n seriesKey: 'median',\n index: g,\n datum: Object.freeze({ group: group.name, min: s.min, q1: s.q1, median: s.median, q3: s.q3, max: s.max, outliers: Object.freeze([...s.outliers]) }),\n value: s.median,\n x: m.x,\n y: m.y,\n box: { x: Math.min(whiskerLow.x, whiskerHigh.x), y: Math.min(whiskerLow.y, whiskerHigh.y), width: Math.abs(whiskerHigh.x - whiskerLow.x), height: Math.abs(whiskerHigh.y - whiskerLow.y) },\n cell: cell(0),\n });\n if (showOutliers) {\n s.outliers.forEach((value, k) => {\n const p = at(v(value), c);\n strokes.push({ d: circlePath(p.x, p.y, POINT_RADIUS), role: 'encoding', part: 'ink' });\n hitAreas.push({ seriesKey: 'outliers', index: g, datum: Object.freeze({ group: group.name, value }), value, x: p.x, y: p.y, cell: cell(k + 1) });\n });\n }\n if (!best || s.median > best.median) best = { index: g, median: s.median };\n });\n\n // One heightened element (REQ-442): the highest median, on its line.\n const raised = best ? hitAreas.find((h) => h.seriesKey === 'median' && h.index === best?.index) : hitAreas[0];\n if (raised) {\n const mark = circlePath(raised.x, raised.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 const whisker = whiskerOf(props);\n const medians = groups.map((g, i) => `${g.name} median ${summaries[i] ? format(summaries[i].median) : 'not drawn, too few observations'}`).join(', ');\n return { plot: frame.plot, strokes, labels: frame.labels, hitAreas, summary: `quartiles by linear interpolation, Tukey whiskers at ${format(whisker)} IQR; ${medians}` };\n },\n};\n\nfunction buildBoxPlotChart(props: BoxPlotChartProps, context: RecipeContext): ChartModel {\n return buildDistribution(family, props, context);\n}\n\n/** `BoxPlotChart` recipe (REQ-402): quartiles, median, Tukey whiskers and outliers per group. */\nexport const boxPlotChart: ChartRecipe<BoxPlotChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildBoxPlotChart });\n","import { quantile, rootOf } from './stats';\n\n/**\n * Kernel density of the violin and ridgeline charts (DD-029, REQ-432): the Epanechnikov kernel,\n * `K(u) = ¾(1 − u²)` on `|u| ≤ 1`, is polynomial, so the density sum needs only correctly rounded\n * operations and Node and every browser produce the same samples (REQ-435). A Gaussian kernel\n * would call `Math.exp`, which ECMAScript does not require to be correctly rounded.\n */\n\n/** Points at which a density is evaluated, over the shared value domain. */\nexport const DENSITY_SAMPLES = 64;\n\n/** A density sample. */\nexport interface DensityPoint {\n readonly at: number;\n readonly value: number;\n}\n\n/**\n * Silverman's rule of thumb, `0.9 · min(σ, IQR/1.34) · n^(−1/5)`, of a sorted sample. When the\n * spread is 0 it falls back to σ, then to |x₀|, then to 1 (as R's `bw.nrd0`), so it is never 0.\n */\nexport function silverman(sorted: readonly number[]): number {\n const n = sorted.length;\n let sum = 0;\n for (const v of sorted) sum += v;\n const mean = sum / n;\n let squares = 0;\n for (const v of sorted) squares += (v - mean) * (v - mean);\n const sigma = n > 1 ? Math.sqrt(squares / (n - 1)) : 0;\n const iqr = quantile(sorted, 0.75) - quantile(sorted, 0.25);\n let spread = Math.min(sigma, iqr / 1.34);\n if (!(spread > 0)) spread = sigma > 0 ? sigma : Math.abs(sorted[0] ?? 0) || 1;\n return (0.9 * spread) / rootOf(n, 5);\n}\n\n/**\n * The Epanechnikov density of a sorted sample at `samples` evenly spaced points of `domain`, both\n * ends included. Terms are summed in ascending order of the observations.\n */\nexport function kde(sorted: readonly number[], bandwidth: number, domain: readonly [number, number], samples = DENSITY_SAMPLES): DensityPoint[] {\n const [lo, hi] = domain;\n const n = sorted.length;\n const scale = n * bandwidth;\n const points: DensityPoint[] = [];\n let first = 0;\n for (let k = 0; k < samples; k += 1) {\n const at = k === samples - 1 ? hi : lo + (k * (hi - lo)) / (samples - 1);\n while (first < n && (sorted[first] as number) < at - bandwidth) first += 1;\n let sum = 0;\n for (let i = first; i < n; i += 1) {\n const u = (at - (sorted[i] as number)) / bandwidth;\n if (u < -1) break;\n if (u <= 1) sum += 0.75 * (1 - u * u);\n }\n points.push({ at, value: n > 0 ? sum / scale : 0 });\n }\n return points;\n}\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\n/** Demo dataset of `ViolinChart` (REQ-403): the box plot's service response times. */\nexport { BOX_PLOT_CHART_DEMO as VIOLIN_CHART_DEMO } from '../box-plot-chart/demo';\n\nexport const VIOLIN_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n valueKey: 'ms',\n groupKey: 'service',\n} as const);\n","import { area as areaShape, curveMonotoneX, curveMonotoneY } from 'd3-shape';\nimport type { ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke, ViolinChartProps } from '../../types';\nimport { checkBandwidth } from '../shared/contracts';\nimport { kde, silverman, type DensityPoint } from '../shared/density';\nimport { bandFrame, buildDistribution, valueExtent, type DistributionFamily, type DistributionGroup } from '../shared/distribution';\nimport { circlePath } from '../shared/format';\nimport { quantile } from '../shared/stats';\nimport { VIOLIN_CHART_DEMO, VIOLIN_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'ViolinChart';\nconst HEIGHTEN_RADIUS = 3.5;\nconst POINT_RADIUS = 2.5;\n/** A density needs two observations (REQ-434). */\nconst MINIMUM = 2;\n/** Share of a group's band the widest violin fills, and the most it may be in px. */\nconst VIOLIN_FILL = 0.9;\nconst VIOLIN_MAX = 60;\n/** Half-length of the quartile and median marks, as a share of the band. */\nconst MARK = 0.15;\n\n/**\n * One bandwidth for every group, so the shapes compare (API delta §3): the prop, or the mean of the\n * groups' Silverman bandwidths. An invalid prop is the default, warned once (SP021).\n */\nfunction bandwidthOf(groups: readonly DistributionGroup[], props: ViolinChartProps): { value: number; given: boolean } {\n const given = checkBandwidth(CHART, props.bandwidth);\n if (given !== undefined) return { value: given, given: true };\n const rules = groups.filter((g) => !g.small).map((g) => silverman(g.sorted));\n return { value: rules.length > 0 ? rules.reduce((s, h) => s + h, 0) / rules.length : 1, given: false };\n}\n\n/** The density's samples from just before it rises to just after it falls: the violin's outline. */\nfunction trimmed(points: readonly DensityPoint[]): DensityPoint[] {\n const first = points.findIndex((p) => p.value > 0);\n let last = points.length - 1;\n while (last > 0 && (points[last] as DensityPoint).value <= 0) last -= 1;\n return points.slice(Math.max(first - 1, 0), Math.min(last + 2, points.length));\n}\n\nconst family: DistributionFamily<ViolinChartProps> = {\n chart: CHART,\n fallbackName: 'Violin chart',\n demo: VIOLIN_CHART_DEMO,\n demoKeys: VIOLIN_CHART_DEMO_KEYS,\n minimum: MINIMUM,\n columns: ['n', 'min', 'q1', 'median', 'q3', 'max'],\n row(group, _props, format) {\n const s = group.sorted;\n return [String(s.length), format(s[0] as number), format(quantile(s, 0.25)), format(quantile(s, 0.5)), format(quantile(s, 0.75)), format(s.at(-1) as number)];\n },\n draw({ props, context, groups, area, valueName, format }) {\n const h = bandwidthOf(groups, props);\n const domain = valueExtent(groups, h.value);\n const frame = bandFrame(area, groups, domain, { chart: CHART, property: valueName, padding: context.domainPadding, locale: context.locale, numberFormat: props.numberFormat, orientation: props.orientation });\n const { rows, value: v } = frame;\n const strokes: Stroke[] = [...frame.strokes];\n const hitAreas: HitArea[] = [];\n const densities = groups.map((g) => (g.small ? undefined : trimmed(kde(g.sorted, h.value, domain))));\n const peak = Math.max(...densities.flatMap((d) => (d ?? []).map((p) => p.value)), 0);\n const half = Math.min(frame.bandwidth * VIOLIN_FILL, VIOLIN_MAX) / 2;\n const width = (density: number) => (peak > 0 ? (density / peak) * half : 0);\n const mark = frame.bandwidth * MARK;\n const at = (along: number, across: number) => (rows ? { x: along, y: across } : { x: across, y: along });\n const rule = (value: number, c: number) => {\n const p = at(v(value), c - mark);\n const q = at(v(value), c + mark);\n return `M${p.x},${p.y}L${q.x},${q.y}`;\n };\n let best: { index: number; median: number } | undefined;\n\n groups.forEach((group, g) => {\n const c = frame.centre(g);\n const cell = rows ? { column: 0, row: g } : { column: g, row: 0 };\n const median = quantile(group.sorted, 0.5);\n const m = at(v(median), c);\n const density = densities[g];\n if (!density) {\n for (const value of group.sorted) {\n const p = at(v(value), c);\n strokes.push({ d: circlePath(p.x, p.y, POINT_RADIUS), role: 'encoding', part: 'ink' });\n }\n hitAreas.push({ seriesKey: 'median', index: g, datum: Object.freeze({ group: group.name, n: group.sorted.length, median }), value: median, x: m.x, y: m.y, cell });\n return;\n }\n // The mirrored density, closed: out on one side of the centre, back on the other.\n const outline = rows\n ? areaShape<DensityPoint>().x((p) => v(p.at)).y0((p) => c - width(p.value)).y1((p) => c + width(p.value)).curve(curveMonotoneX)(density)\n : areaShape<DensityPoint>().y((p) => v(p.at)).x0((p) => c - width(p.value)).x1((p) => c + width(p.value)).curve(curveMonotoneY)(density);\n if (outline) strokes.push({ d: outline, role: 'encoding', part: 'ink', tone: 1 });\n const q1 = quantile(group.sorted, 0.25);\n const q3 = quantile(group.sorted, 0.75);\n if (props.quartiles !== false) {\n for (const q of [q1, q3]) strokes.push({ d: rule(q, c), role: 'encoding', part: 'ink-secondary', dash: 'dotted' });\n }\n strokes.push({ d: rule(median, c), role: 'encoding', part: 'ink' });\n const lo = at(v(domain[0]), c - half);\n const hi = at(v(domain[1]), c + half);\n hitAreas.push({\n seriesKey: 'median',\n index: g,\n datum: Object.freeze({ group: group.name, n: group.sorted.length, q1, median, q3 }),\n value: median,\n x: m.x,\n y: m.y,\n box: { x: Math.min(lo.x, hi.x), y: Math.min(lo.y, hi.y), width: Math.abs(hi.x - lo.x), height: Math.abs(hi.y - lo.y) },\n cell,\n });\n if (!best || median > best.median) best = { index: g, median };\n });\n\n // One heightened element (REQ-442): the median mark of the highest median.\n const raised = hitAreas.find((hit) => hit.index === (best?.index ?? 0));\n if (raised) {\n const markPath = circlePath(raised.x, raised.y, HEIGHTEN_RADIUS);\n strokes.push({ d: markPath, role: 'encoding', part: 'heighten', paint: 'fill' });\n strokes.push({ d: markPath, role: 'encoding', part: 'ink', paint: 'stroke' });\n }\n const method = h.given ? 'as given' : \"the mean of the groups' Silverman rules\";\n return {\n plot: frame.plot,\n strokes,\n labels: frame.labels,\n hitAreas,\n summary: `densities by an Epanechnikov kernel of bandwidth ${format(h.value)}, ${method}, at 64 points; ${groups.map((g) => `${g.name} median ${format(quantile(g.sorted, 0.5))}`).join(', ')}`,\n };\n },\n};\n\nfunction buildViolinChart(props: ViolinChartProps, context: RecipeContext): ChartModel {\n return buildDistribution(family, props, context);\n}\n\n/** `ViolinChart` recipe (REQ-403): a mirrored kernel density per group, quartiles marked inside. */\nexport const violinChart: ChartRecipe<ViolinChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildViolinChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\n/** Demo dataset of `RidgelineChart` (REQ-404): the box plot's service response times. */\nexport { BOX_PLOT_CHART_DEMO as RIDGELINE_CHART_DEMO } from '../box-plot-chart/demo';\n\nexport const RIDGELINE_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n valueKey: 'ms',\n groupKey: 'service',\n} as const);\n","import { curveMonotoneX, line } from 'd3-shape';\nimport { linearScale } from '../../scales/scales';\nimport type { ChartModel, ChartRecipe, HitArea, Rect, RecipeContext, RidgelineChartProps, Stroke, TextLabel } from '../../types';\nimport { AXIS_BAND, PLOT_INSET } from '../shared/cartesian';\nimport { checkBandwidth, checkOverlap } from '../shared/contracts';\nimport { kde, silverman, type DensityPoint } from '../shared/density';\nimport { buildDistribution, ROW_LABELS, valueExtent, type DistributionFamily, type DistributionGroup } from '../shared/distribution';\nimport { circlePath, fitText, formatNumber } from '../shared/format';\nimport { quantile } from '../shared/stats';\nimport { RIDGELINE_CHART_DEMO, RIDGELINE_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'RidgelineChart';\nconst HEIGHTEN_RADIUS = 3.5;\nconst POINT_RADIUS = 2.5;\n/** A density needs two observations (REQ-434). */\nconst MINIMUM = 2;\nconst DEFAULT_OVERLAP = 0.5;\n\n/** The shared bandwidth: the prop, or the mean of the groups' Silverman rules (as the violin). */\nfunction bandwidthOf(groups: readonly DistributionGroup[], props: RidgelineChartProps): { value: number; given: boolean } {\n const given = checkBandwidth(CHART, props.bandwidth);\n if (given !== undefined) return { value: given, given: true };\n const rules = groups.filter((g) => !g.small).map((g) => silverman(g.sorted));\n return { value: rules.length > 0 ? rules.reduce((s, h) => s + h, 0) / rules.length : 1, given: false };\n}\n\n/** Where a density peaks: the first sample of its largest value. */\nconst peakOf = (density: readonly DensityPoint[]) => density.reduce((best, p) => (p.value > best.value ? p : best));\n\nconst family: DistributionFamily<RidgelineChartProps> = {\n chart: CHART,\n fallbackName: 'Ridgeline chart',\n demo: RIDGELINE_CHART_DEMO,\n demoKeys: RIDGELINE_CHART_DEMO_KEYS,\n minimum: MINIMUM,\n columns: ['n', 'median', 'peak'],\n row(group, props, format, groups) {\n const s = group.sorted;\n if (group.small) return [String(s.length), format(quantile(s, 0.5)), '—'];\n // The same bandwidth and domain the drawing uses, so the table and the readout say the same.\n const h = bandwidthOf(groups, props).value;\n return [String(s.length), format(quantile(s, 0.5)), format(peakOf(kde(s, h, valueExtent(groups, h))).at)];\n },\n draw({ props, context, groups, area, valueName, format }) {\n const h = bandwidthOf(groups, props);\n const overlap = checkOverlap(CHART, props.overlap) ?? DEFAULT_OVERLAP;\n const domain = valueExtent(groups, h.value);\n const plot: Rect = { 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 const right = plot.x + plot.width;\n const x = linearScale(domain, [plot.x, right], { chart: CHART, property: valueName, padding: context.domainPadding });\n const strokes: Stroke[] = [];\n const labels: TextLabel[] = [];\n const hitAreas: HitArea[] = [];\n\n // n baselines a step apart; each ridge rises (1 + overlap) steps, into the one behind it.\n const n = groups.length;\n const step = plot.height / (n + overlap);\n const rise = step * (1 + overlap);\n const baseline = (g: number) => plot.y + rise + g * step;\n const densities = groups.map((g) => (g.small ? undefined : kde(g.sorted, h.value, domain)));\n const tallest = Math.max(...densities.flatMap((d) => (d ?? []).map((p) => p.value)), 0);\n const heightOf = (density: number) => (tallest > 0 ? (density / tallest) * rise : 0);\n\n for (const tick of x.ticks(4)) {\n labels.push({ x: x(tick), y: area.y + area.height - 5, text: formatNumber(tick, context.locale, props.numberFormat), kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n // Back to front: the ridge nearest the reader is drawn last.\n groups.forEach((group, g) => {\n const base = baseline(g);\n strokes.push({ d: `M${plot.x},${base}H${right}`, role: 'ornament', part: 'rule' });\n labels.push({ x: area.x + PLOT_INSET, y: base - 2, text: fitText(group.name, ROW_LABELS - PLOT_INSET - 6), kind: 'tick', part: 'axis', anchor: 'start' });\n const density = densities[g];\n if (!density) {\n for (const value of group.sorted) strokes.push({ d: circlePath(x(value), base, POINT_RADIUS), role: 'encoding', part: 'ink' });\n const value = quantile(group.sorted, 0.5);\n hitAreas.push({ seriesKey: 'peak', index: g, datum: Object.freeze({ group: group.name, n: group.sorted.length, median: value }), value, x: x(value), y: base });\n return;\n }\n // An open profile, outline only: overlapping hatch would read as value (DD-035).\n const d = line<DensityPoint>().x((p) => x(p.at)).y((p) => base - heightOf(p.value)).curve(curveMonotoneX)(density);\n if (d) strokes.push({ d, role: 'encoding', part: 'ink' });\n const top = peakOf(density);\n hitAreas.push({\n seriesKey: 'peak',\n index: g,\n datum: Object.freeze({ group: group.name, n: group.sorted.length, median: quantile(group.sorted, 0.5), peak: top.at }),\n value: top.at,\n x: x(top.at),\n y: base - heightOf(top.value),\n });\n });\n\n // One heightened element (REQ-442): the front ridge's peak.\n const front = hitAreas.at(-1);\n if (front) {\n const mark = circlePath(front.x, front.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 return {\n plot,\n strokes,\n labels,\n hitAreas,\n summary: `densities by an Epanechnikov kernel of bandwidth ${format(h.value)}, ${h.given ? 'as given' : \"the mean of the groups' Silverman rules\"}, overlapping by ${format(overlap)}; ${hitAreas.map((hit, g) => `${groups[g]?.name ?? ''} peaks at ${format(hit.value)}`).join(', ')}`,\n };\n },\n};\n\nfunction buildRidgelineChart(props: RidgelineChartProps, context: RecipeContext): ChartModel {\n return buildDistribution(family, props, context);\n}\n\n/** `RidgelineChart` recipe (REQ-404): a kernel density per group on overlapping baselines. */\nexport const ridgelineChart: ChartRecipe<RidgelineChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildRidgelineChart });\n","/**\n * The beeswarm's packing (DD-030, REQ-405): not iterative, and a pure function of the positions,\n * the radius and the side the seed picks. Points are placed in ascending order along the value\n * axis; each takes the smallest offset across it at which it touches no placed point. Candidates\n * are the axis itself and the exact tangencies with each nearby placed point, `y ± √(4r² − dx²)`,\n * so only `+ − × ÷` and `Math.sqrt` are used (REQ-435).\n */\n\n/**\n * Offsets across the axis for points at sorted positions `xs` (px), of radius `r`. Off-axis\n * placements alternate sides, starting on `side` (1 or −1): of two equally small offsets, a point\n * takes the side opposite to the last point placed off the axis.\n */\nexport function packSwarm(xs: readonly number[], r: number, side: 1 | -1): number[] {\n const reach = 2 * r;\n const touch = reach * reach;\n // Below this a squared distance counts as touching: tangent candidates carry rounding error.\n const slack = touch * 1e-12;\n const ys: number[] = [];\n let prefer: number = side;\n let first = 0;\n for (let i = 0; i < xs.length; i += 1) {\n const x = xs[i] as number;\n while (first < i && x - (xs[first] as number) >= reach) first += 1;\n const fits = (y: number) => {\n for (let j = first; j < i; j += 1) {\n const dx = x - (xs[j] as number);\n const dy = y - (ys[j] as number);\n if (dx * dx + dy * dy < touch - slack) return false;\n }\n return true;\n };\n // The smallest offset that fits wins; of two equal ones, the preferred side. Candidates are\n // tried in that order and the first that fits is taken, so a dense column costs one pass.\n let best = 0;\n if (!fits(0)) {\n const candidates: number[] = [];\n for (let j = first; j < i; j += 1) {\n const dx = x - (xs[j] as number);\n const rise = Math.sqrt(Math.max(touch - dx * dx, 0));\n candidates.push((ys[j] as number) + rise, (ys[j] as number) - rise);\n }\n candidates.sort((a, b) => (a < 0 ? -a : a) - (b < 0 ? -b : b) || b * prefer - a * prefer);\n best = candidates.find(fits) ?? 0;\n }\n ys.push(best);\n if (best !== 0) prefer = best > 0 ? -1 : 1;\n }\n return ys;\n}\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\n/** Demo dataset of `BeeswarmChart` (REQ-405): the histogram's reading times, one point per reader. */\nexport { HISTOGRAM_CHART_DEMO as BEESWARM_CHART_DEMO } from '../histogram-chart/demo';\n\nexport const BEESWARM_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n valueKey: 'minutes',\n labelKey: 'reader',\n} as const);\n","import { linearScale } from '../../scales/scales';\nimport { extent } from '../../scales/util';\nimport { resolveSeed } from '../../render/seed';\nimport type { BeeswarmChartProps, ChartModel, ChartRecipe, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { packSwarm } from '../shared/beeswarm';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, cartesianPlot } from '../shared/cartesian';\nimport { checkCeiling, checkRadius, readObservations, type Observation } from '../shared/contracts';\nimport { ROW_LABELS } from '../shared/distribution';\nimport { accessorName, circlePath, fitText, formatNumber, formatValue, numberFormatter, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { BEESWARM_CHART_DEMO, BEESWARM_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'BeeswarmChart';\nconst DEFAULT_RADIUS = 3;\n/** A swarm that outgrows its band is packed again at a smaller radius, at most this many times. */\nconst FIT_ATTEMPTS = 8;\nconst SHRINK = 0.8;\nconst MIN_RADIUS = 1;\n\n/** Value order, ties by row: the order points are packed, drawn and walked by keyboard. */\nconst byValue = (a: Observation, b: Observation) => a.value - b.value || a.index - b.index;\n\nfunction buildBeeswarmChart(props: BeeswarmChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? BEESWARM_CHART_DEMO;\n const valueKey = usesDemo ? BEESWARM_CHART_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n const labelKey = usesDemo ? BEESWARM_CHART_DEMO_KEYS.labelKey : props.labelKey;\n const groupKey = usesDemo ? undefined : props.groupKey;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n const labelName = labelKey === undefined ? 'observation' : accessorName(labelKey, 'label');\n const groupName = groupKey === undefined ? undefined : accessorName(groupKey, 'group');\n\n const { observations, groups } = readObservations(CHART, data, {\n value: valueKey,\n ...(groupKey === undefined ? {} : { group: groupKey }),\n ...(labelKey === undefined ? {} : { label: labelKey }),\n });\n checkCeiling(CHART, valueName, 'points', observations.length);\n const asked = checkRadius(CHART, props.radius) ?? DEFAULT_RADIUS;\n\n // A row per observation: the value column's formatter is resolved once (REQ-445); a value that\n // is not a finite number reads `—`, as formatValue prints it.\n const value = numberFormatter(locale, numberFormat);\n const cell = (raw: unknown) => (typeof raw === 'number' && Number.isFinite(raw) ? value(raw) : formatValue(raw, locale, numberFormat));\n const base = modelBase(CHART, props, context, 'Beeswarm', {\n columns: [labelName, valueName, ...(groupName ? [groupName] : [])],\n rows: data.map((datum, index) => [\n labelKey === undefined ? `#${index + 1}` : formatValue(read(labelKey, datum, index), locale, undefined),\n cell(read(valueKey, datum, index)),\n ...(groupKey ? [formatValue(read(groupKey, datum, index), locale, undefined)] : []),\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 area = card.area;\n const grouped = groupKey !== undefined;\n const plot: Rect = grouped\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];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const range = extent(observations.map((o) => o.value));\n if (range === undefined) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n // The value axis runs inside the plot by the radius, so no point is clipped at the ends.\n const x = linearScale(range, [plot.x + asked, plot.x + plot.width - asked], { chart: CHART, property: valueName, padding: context.domainPadding, nice: true });\n for (const tick of x.ticks(4)) {\n labels.push({ x: x(tick), y: area.y + area.height - 5, text: formatNumber(tick, locale, numberFormat), kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n strokes.push({ d: `M${plot.x},${plot.y + plot.height}H${plot.x + plot.width}`, role: 'ornament', part: 'rule' });\n\n // The side the first point off the axis takes is the seed's (DD-030).\n const side = (resolveSeed(props.seed, context.id) & 1) === 0 ? 1 : -1;\n const band = plot.height / groups.length;\n const placed: { o: Observation; x: number; y: number; r: number }[] = [];\n groups.forEach((group, g) => {\n const members = observations.filter((o) => o.group === group).sort(byValue);\n const xs = members.map((o) => x(o.value));\n const centre = plot.y + band * (g + 0.5);\n // A swarm taller than its band is packed again at a smaller radius: points never overlap.\n let r = asked;\n let ys = packSwarm(xs, r, side);\n for (let attempt = 0; attempt < FIT_ATTEMPTS && r > MIN_RADIUS && Math.max(0, ...ys.map((y) => (y < 0 ? -y : y))) + r > band / 2; attempt += 1) {\n r = Math.max(r * SHRINK, MIN_RADIUS);\n ys = packSwarm(xs, r, side);\n }\n members.forEach((o, k) => placed.push({ o, x: xs[k] as number, y: centre + (ys[k] as number), r }));\n if (grouped) labels.push({ x: area.x + PLOT_INSET, y: centre + 4, text: fitText(group, ROW_LABELS - PLOT_INSET - 6), kind: 'tick', part: 'axis', anchor: 'start' });\n });\n\n for (const p of [...placed].sort((a, b) => byValue(a.o, b.o))) {\n strokes.push({ d: circlePath(p.x, p.y, p.r), role: 'encoding', part: 'ink' });\n hitAreas.push({ seriesKey: valueName, index: p.o.index, datum: p.o.datum, value: p.o.value, x: p.x, y: p.y, box: { x: p.x - p.r, y: p.y - p.r, width: 2 * p.r, height: 2 * p.r } });\n }\n\n // One heightened element (REQ-442): the maximum observation, the point itself.\n const top = [...placed].sort((a, b) => byValue(a.o, b.o)).at(-1);\n if (top) strokes.push({ d: circlePath(top.x, top.y, top.r), role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const description =\n props.description ??\n `${base.name}. Beeswarm of ${observations.length} ${valueName} observations${grouped ? ` in ${groups.length} groups` : ''}, one point each, packed without overlap; 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/** `BeeswarmChart` recipe (REQ-405): one point per observation, packed without overlap. */\nexport const beeswarmChart: ChartRecipe<BeeswarmChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildBeeswarmChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `LollipopChart` (REQ-406): loans at 12 library branches, unsorted, some names long. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const LOLLIPOP_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { branch: 'Northgate', loans: 2969 },\n { branch: 'Riverside Commons', loans: 2695 },\n { branch: 'Old Mill', loans: 6096 },\n { branch: 'Harbour View Annex', loans: 7785 },\n { branch: 'Elm Street', loans: 3499 },\n { branch: 'Quarry Hill', loans: 7698 },\n { branch: 'Saint Brigid Reading Rooms', loans: 7279 },\n { branch: 'Westfield', loans: 3294 },\n { branch: 'Lantern Square', loans: 7695 },\n { branch: 'Copper Beech', loans: 5301 },\n { branch: 'Marsh Lane', loans: 3486 },\n { branch: 'Upper Fenwick Community Library', loans: 3917 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const LOLLIPOP_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n xKey: 'branch',\n valueKey: 'loans',\n} as const);\n","import { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, HitArea, LollipopChartProps, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, TICK_CHAR, cartesianPlot, categoryAxis, checkVolume, horizontalValueAxis, readSeries, seriesValues, valueAxis } from '../shared/cartesian';\nimport { warnValue } from '../shared/cells';\nimport { accessorName, circlePath, fitText, formatCategory, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { LOLLIPOP_CHART_DEMO, LOLLIPOP_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'LollipopChart';\nconst HEAD_RADIUS = 4;\n/** Room at the left for the category names when lollipops run in rows. */\nconst ROW_LABELS = 96;\n/** Room, in px, a category name needs under a column before names are thinned. */\nconst MIN_LABEL_ROOM = 48;\n\nfunction buildLollipopChart(props: LollipopChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? LOLLIPOP_CHART_DEMO;\n const xKey = usesDemo ? LOLLIPOP_CHART_DEMO_KEYS.xKey : (props.xKey ?? 'x');\n const valueKey = usesDemo ? LOLLIPOP_CHART_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n const rows = props.orientation === 'rows';\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 xLabels = data.map((datum, index) => formatCategory(read(xKey, datum, index), locale));\n\n const base = modelBase(CHART, props, context, 'Lollipop 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 area = card.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];\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; their lollipops are omitted.`);\n const range = extent(seriesValues([series]));\n if (data.length === 0 || range === undefined) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const axisOptions = { chart: CHART, property: series.key, 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\n // The drawing order: data order, or sorted by value (ties by row); the table keeps data order.\n const drawn = series.points.filter((p) => p.value !== undefined);\n if (props.sort === 'ascending' || props.sort === 'descending') {\n const sign = props.sort === 'ascending' ? 1 : -1;\n drawn.sort((a, b) => sign * ((a.value as number) - (b.value as number)) || a.index - b.index);\n }\n const along = rows ? { x: plot.y, y: plot.x, width: plot.height, height: plot.width } : plot;\n const slots = categoryAxis(drawn.map((_, i) => i), along, { chart: CHART, property: xName, padding: context.domainPadding, numeric: false, paddingInner: 0.3, paddingOuter: 0.15 });\n const zero = v(0);\n\n drawn.forEach((p, slot) => {\n const value = p.value as number;\n const c = slots.at(slot);\n const end = v(value);\n const head = rows ? { x: end, y: c } : { x: c, y: end };\n // The stem stops at the head's edge, so the head's tone is never crossed by it.\n const toward = end > zero ? -HEAD_RADIUS : HEAD_RADIUS;\n const tip = Math.abs(end - zero) > HEAD_RADIUS ? end + toward : zero;\n strokes.push({ d: rows ? `M${zero},${c}H${tip}` : `M${c},${zero}V${tip}`, role: 'encoding', part: 'ink' });\n strokes.push({ d: circlePath(head.x, head.y, HEAD_RADIUS), role: 'encoding', part: 'ink', tone: 2 });\n hitAreas.push({ seriesKey: series.key, index: p.index, datum: p.datum, value, x: head.x, y: head.y, box: { x: head.x - HEAD_RADIUS, y: head.y - HEAD_RADIUS, width: 2 * HEAD_RADIUS, height: 2 * HEAD_RADIUS } });\n const text = formatNumber(value, locale, numberFormat);\n // The value at the head when the band holds it (DD-035).\n if (!rows && slots.bandwidth >= text.length * TICK_CHAR + 2) {\n labels.push({ x: c, y: value >= 0 ? end - HEAD_RADIUS - 4 : end + HEAD_RADIUS + 10, text, kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n });\n const names = drawn.map((p) => xLabels[p.index] ?? '');\n if (rows) names.forEach((text, slot) => labels.push({ x: area.x + PLOT_INSET, y: slots.at(slot) + 4, text: fitText(text, ROW_LABELS - PLOT_INSET - 6), kind: 'tick', part: 'axis', anchor: 'start' }));\n else {\n // Long names are thinned to one every `step` slots and cut to the room that leaves; the table\n // and the readout carry them whole.\n const spacing = plot.width / Math.max(drawn.length, 1);\n const step = Math.max(1, Math.ceil(MIN_LABEL_ROOM / spacing));\n names.forEach((text, slot) => {\n if (slot % step !== 0) return;\n labels.push({ x: slots.at(slot), y: area.y + area.height - 5, text: fitText(text, spacing * step - 6), kind: 'tick', part: 'axis', anchor: 'middle' });\n });\n }\n\n // One heightened element (REQ-442): the largest head, the head itself.\n const largest = hitAreas.reduce((best, hit) => (hit.value > best.value ? hit : best));\n strokes.push({ d: circlePath(largest.x, largest.y, HEAD_RADIUS), role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const description =\n props.description ??\n `${base.name}. Lollipop chart in ${rows ? 'rows' : 'columns'} of ${drawn.length} ${xName} values${props.sort && props.sort !== 'none' ? `, sorted ${props.sort}` : ''}; ${series.key} from ${formatNumber(range[0], locale, numberFormat)} to ${formatNumber(range[1], locale, numberFormat)}, the largest ${xLabels[largest.index] ?? ''}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `LollipopChart` recipe (REQ-406): a stem from the baseline and a head at the value. */\nexport const lollipopChart: ChartRecipe<LollipopChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildLollipopChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `DumbbellChart` (REQ-407): average wait in minutes at 10 clinics, 2024 and 2025; two of them improve. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const DUMBBELL_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { clinic: 'Ashford', y2024: 59, y2025: 66 },\n { clinic: 'Brook Lane', y2024: 24, y2025: 30 },\n { clinic: 'Castlegate', y2024: 33, y2025: 47 },\n { clinic: 'Dunmore', y2024: 23, y2025: 16 },\n { clinic: 'Eastwick', y2024: 52, y2025: 60 },\n { clinic: 'Fairholm', y2024: 28, y2025: 43 },\n { clinic: 'Glenbrook', y2024: 32, y2025: 40 },\n { clinic: 'Hollins', y2024: 33, y2025: 25 },\n { clinic: 'Ivybridge', y2024: 25, y2025: 31 },\n { clinic: 'Juniper Row', y2024: 25, y2025: 32 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const DUMBBELL_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n labelKey: 'clinic',\n startKey: 'y2024',\n endKey: 'y2025',\n names: /* @__PURE__ */ Object.freeze(['2024', '2025']),\n} as const);\n","import { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, DumbbellChartProps, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, cartesianPlot, categoryAxis, categoryLabels, horizontalValueAxis, legend, valueAxis } from '../shared/cartesian';\nimport { readPaired } from '../shared/contracts';\nimport { accessorName, circlePath, fitText, formatNumber, signedChange } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { DUMBBELL_CHART_DEMO, DUMBBELL_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'DumbbellChart';\nconst MARK_RADIUS = 4;\n/** Length of the arrowhead along the segment, and its half-width. */\nconst ARROW_LENGTH = 9;\nconst ARROW_HALF = 4.5;\n/** Room at the left for the category names when dumbbells run in rows. */\nconst ROW_LABELS = 88;\n\n/** A closed arrowhead whose tip is at `(x, y)`, pointing along `direction` (±1 on the value axis). */\nfunction arrowPath(rows: boolean, tip: number, across: number, direction: number): string {\n const back = tip - direction * ARROW_LENGTH;\n return rows\n ? `M${tip},${across}L${back},${across - ARROW_HALF}L${back},${across + ARROW_HALF}Z`\n : `M${across},${tip}L${across - ARROW_HALF},${back}L${across + ARROW_HALF},${back}Z`;\n}\n\nfunction buildDumbbellChart(props: DumbbellChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? DUMBBELL_CHART_DEMO;\n const labelKey = usesDemo ? DUMBBELL_CHART_DEMO_KEYS.labelKey : (props.labelKey ?? 'label');\n const startKey = usesDemo ? DUMBBELL_CHART_DEMO_KEYS.startKey : (props.startKey ?? 'start');\n const endKey = usesDemo ? DUMBBELL_CHART_DEMO_KEYS.endKey : (props.endKey ?? 'end');\n const [first = 'start', second = 'end'] = usesDemo ? DUMBBELL_CHART_DEMO_KEYS.names : (props.names ?? []);\n const names = [first, second] as const;\n // Dumbbells read best in rows: long category names, values along one axis.\n const rows = props.orientation !== 'columns';\n const arrow = props.endMarker === 'arrow';\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const format = (v: number) => formatNumber(v, locale, numberFormat);\n const labelName = accessorName(labelKey, 'label');\n\n const pairs = readPaired(CHART, data, { label: labelKey, start: startKey, end: endKey });\n const base = modelBase(CHART, props, context, 'Dumbbell chart', {\n columns: [labelName, names[0], names[1], 'change'],\n rows: pairs.map((p) => [p.label, format(p.start), format(p.end), signedChange(p.end - p.start, format)]),\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: names[0], part: 'ink-secondary', dash: 'dotted' },\n { name: names[1], part: 'ink', tone: 2 },\n ]);\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 const range = extent(pairs.flatMap((p) => [p.start, p.end]));\n if (range === undefined) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const axisOptions = { chart: CHART, property: accessorName(endKey, 'end'), padding: context.domainPadding, locale, numberFormat };\n const axis = rows ? horizontalValueAxis(plot, area, range, axisOptions) : valueAxis(plot, range, { ...axisOptions, zero: false });\n const v = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n const along = rows ? { x: plot.y, y: plot.x, width: plot.height, height: plot.width } : plot;\n const slots = categoryAxis(pairs.map((_, i) => i), along, { chart: CHART, property: labelName, padding: context.domainPadding, numeric: false, paddingInner: 0.3, paddingOuter: 0.15 });\n const point = (value: number, c: number) => (rows ? { x: v(value), y: c } : { x: c, y: v(value) });\n\n let largest: { row: number; size: number } | undefined;\n const ends: string[] = [];\n pairs.forEach((pair, row) => {\n const c = slots.at(row);\n const a = point(pair.start, c);\n const b = point(pair.end, c);\n const direction = Math.sign(v(pair.end) - v(pair.start));\n // The segment runs between the marks' edges, so neither mark is crossed by it.\n const inset = (from: { x: number; y: number }, sign: number, by: number) => (rows ? { x: from.x + sign * by, y: from.y } : { x: from.x, y: from.y + sign * by });\n const gap = Math.abs(v(pair.end) - v(pair.start));\n if (gap > MARK_RADIUS + (arrow ? ARROW_LENGTH : MARK_RADIUS)) {\n const p = inset(a, direction, MARK_RADIUS);\n const q = inset(b, -direction, arrow ? ARROW_LENGTH : MARK_RADIUS);\n strokes.push({ d: `M${p.x},${p.y}L${q.x},${q.y}`, role: 'encoding', part: 'ink' });\n } else {\n strokes.push({ d: `M${a.x},${a.y}L${b.x},${b.y}`, role: 'encoding', part: 'ink' });\n }\n strokes.push({ d: circlePath(a.x, a.y, MARK_RADIUS), role: 'encoding', part: 'ink-secondary', dash: 'dotted' });\n const end = arrow && direction !== 0 ? arrowPath(rows, v(pair.end), c, direction) : circlePath(b.x, b.y, MARK_RADIUS);\n strokes.push({ d: end, role: 'encoding', part: 'ink', tone: 2 });\n ends.push(end);\n const datum = Object.freeze({ label: pair.label, start: pair.start, end: pair.end, change: pair.end - pair.start });\n const cell = (column: number) => ({ column, row });\n hitAreas.push({ seriesKey: names[0], index: row, datum, value: pair.start, x: a.x, y: a.y, cell: cell(0) });\n hitAreas.push({ seriesKey: names[1], index: row, datum, value: pair.end, x: b.x, y: b.y, cell: cell(1) });\n const change = Math.abs(pair.end - pair.start);\n if (!largest || change > largest.size) largest = { row, size: change };\n });\n const texts = pairs.map((p) => p.label);\n if (rows) texts.forEach((text, row) => labels.push({ x: area.x + PLOT_INSET, y: slots.at(row) + 4, text: fitText(text, ROW_LABELS - PLOT_INSET - 6), kind: 'tick', part: 'axis', anchor: 'start' }));\n else labels.push(...categoryLabels(texts, slots.at, area, plot));\n\n // One heightened element (REQ-442): the end mark of the largest change.\n if (largest) strokes.push({ d: ends[largest.row] as string, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const rises = pairs.filter((p) => p.end > p.start).length;\n const falls = pairs.filter((p) => p.end < p.start).length;\n const description =\n props.description ??\n `${base.name}. Dumbbell chart of ${pairs.length} ${labelName} values from ${names[0]} to ${names[1]}; ${rises} rise, ${falls} fall${\n largest ? `; the largest change is ${pairs[largest.row]?.label ?? ''}, ${signedChange((pairs[largest.row]?.end ?? 0) - (pairs[largest.row]?.start ?? 0), format)}` : ''\n }.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `DumbbellChart` recipe (REQ-407): two values per category joined by a segment. */\nexport const dumbbellChart: ChartRecipe<DumbbellChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildDumbbellChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\n/** Demo dataset of `SlopeChart` (REQ-408): the dumbbell's clinic waits. */\nexport { DUMBBELL_CHART_DEMO as SLOPE_CHART_DEMO } from '../dumbbell-chart/demo';\n\nexport const SLOPE_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n labelKey: 'clinic',\n startKey: 'y2024',\n endKey: 'y2025',\n names: /* @__PURE__ */ Object.freeze(['2024', '2025']),\n} as const);\n","import { linearScale } from '../../scales/scales';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, HitArea, Rect, RecipeContext, SlopeChartProps, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, TICK_CHAR, spreadLabels } from '../shared/cartesian';\nimport { readPaired } from '../shared/contracts';\nimport { accessorName, circlePath, formatNumber, signedChange } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { SLOPE_CHART_DEMO, SLOPE_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'SlopeChart';\nconst HEIGHTEN_RADIUS = 3.5;\n/** Vertical room one end label needs. */\nconst LABEL_GAP = 11;\n/** The two period axes keep at least this share of the width between them. */\nconst MIN_SPAN = 0.4;\n\nfunction buildSlopeChart(props: SlopeChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? SLOPE_CHART_DEMO;\n const labelKey = usesDemo ? SLOPE_CHART_DEMO_KEYS.labelKey : (props.labelKey ?? 'label');\n const startKey = usesDemo ? SLOPE_CHART_DEMO_KEYS.startKey : (props.startKey ?? 'start');\n const endKey = usesDemo ? SLOPE_CHART_DEMO_KEYS.endKey : (props.endKey ?? 'end');\n const [first = 'start', second = 'end'] = usesDemo ? SLOPE_CHART_DEMO_KEYS.names : (props.names ?? []);\n const names = [first, second] as const;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const format = (v: number) => formatNumber(v, locale, numberFormat);\n const labelName = accessorName(labelKey, 'label');\n\n const pairs = readPaired(CHART, data, { label: labelKey, start: startKey, end: endKey });\n const base = modelBase(CHART, props, context, 'Slopegraph', {\n columns: [labelName, names[0], names[1], 'change'],\n rows: pairs.map((p) => [p.label, format(p.start), format(p.end), signedChange(p.end - p.start, format)]),\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 area = card.area;\n const leftTexts = pairs.map((p) => `${p.label} ${format(p.start)}`);\n const rightTexts = pairs.map((p) => `${format(p.end)} ${p.label}`);\n const room = (texts: readonly string[]) => Math.max(0, ...texts.map((t) => t.length * TICK_CHAR)) + 8;\n const budget = (area.width * (1 - MIN_SPAN)) / 2;\n const left = area.x + Math.min(room(leftTexts), budget);\n const right = area.x + area.width - Math.min(room(rightTexts), budget);\n // The period names sit above the plot; the plot spans the two axes.\n const plot: Rect = { x: left, y: area.y + AXIS_BAND, width: Math.max(right - left, 1), height: Math.max(area.height - AXIS_BAND - PLOT_INSET, 1) };\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const range = extent(pairs.flatMap((p) => [p.start, p.end]));\n if (range === undefined) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const bottom = plot.y + plot.height;\n const y = linearScale(range, [bottom, plot.y], { chart: CHART, property: accessorName(endKey, 'end'), padding: context.domainPadding });\n for (const [x, name, anchor] of [[left, names[0], 'start'], [right, names[1], 'end']] as const) {\n strokes.push({ d: `M${x},${plot.y}V${bottom}`, role: 'ornament', part: 'axis' });\n labels.push({ x, y: area.y + 11, text: name, kind: 'tick', part: 'axis', anchor });\n }\n\n let largest: { row: number; size: number } | undefined;\n pairs.forEach((pair, row) => {\n const a = { x: left, y: y(pair.start) };\n const b = { x: right, y: y(pair.end) };\n const falls = pair.end < pair.start;\n strokes.push({ d: `M${a.x},${a.y}L${b.x},${b.y}`, role: 'encoding', part: falls ? 'ink-secondary' : 'ink', ...(falls ? { dash: 'dotted' as const } : {}) });\n const datum = Object.freeze({ label: pair.label, start: pair.start, end: pair.end, change: pair.end - pair.start });\n hitAreas.push({ seriesKey: names[0], index: row, datum, value: pair.start, x: a.x, y: a.y, cell: { column: 0, row } });\n hitAreas.push({ seriesKey: names[1], index: row, datum, value: pair.end, x: b.x, y: b.y, cell: { column: 1, row } });\n const change = Math.abs(pair.end - pair.start);\n if (!largest || change > largest.size) largest = { row, size: change };\n });\n // Name and value at both ends, spread so they never overlap (no legend: DD-035).\n const lefts = spreadLabels(pairs.map((p) => y(p.start)), LABEL_GAP, plot.y, bottom);\n const rights = spreadLabels(pairs.map((p) => y(p.end)), LABEL_GAP, plot.y, bottom);\n pairs.forEach((_, row) => {\n labels.push({ x: left - 6, y: (lefts[row] as number) + 3, text: leftTexts[row] as string, kind: 'tick', part: 'axis', anchor: 'end' });\n labels.push({ x: right + 6, y: (rights[row] as number) + 3, text: rightTexts[row] as string, kind: 'tick', part: 'axis', anchor: 'start' });\n });\n\n // One heightened element (REQ-442): the end of the largest change.\n if (largest) {\n const mark = circlePath(right, y(pairs[largest.row]?.end ?? 0), 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\n const rises = pairs.filter((p) => p.end > p.start).length;\n const falls = pairs.filter((p) => p.end < p.start).length;\n const description =\n props.description ??\n `${base.name}. Slopegraph of ${pairs.length} ${labelName} values from ${names[0]} to ${names[1]}; ${rises} rise, ${falls} fall, ${pairs.length - rises - falls} hold${\n largest ? `; the largest change is ${pairs[largest.row]?.label ?? ''}, ${signedChange((pairs[largest.row]?.end ?? 0) - (pairs[largest.row]?.start ?? 0), format)}` : ''\n }.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `SlopeChart` recipe (REQ-408): two period axes, one segment per category, labelled at both ends. */\nexport const slopeChart: ChartRecipe<SlopeChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildSlopeChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `BumpChart` (REQ-409): six teams' points over eight seasons, with one tie. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const BUMP_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { season: 2018, team: 'Kestrel', points: 57 },\n { season: 2018, team: 'Otter', points: 53 },\n { season: 2018, team: 'Lynx', points: 52 },\n { season: 2018, team: 'Heron', points: 54 },\n { season: 2018, team: 'Badger', points: 73 },\n { season: 2018, team: 'Marten', points: 62 },\n { season: 2019, team: 'Kestrel', points: 65 },\n { season: 2019, team: 'Otter', points: 49 },\n { season: 2019, team: 'Lynx', points: 44 },\n { season: 2019, team: 'Heron', points: 58 },\n { season: 2019, team: 'Badger', points: 81 },\n { season: 2019, team: 'Marten', points: 66 },\n { season: 2020, team: 'Kestrel', points: 73 },\n { season: 2020, team: 'Otter', points: 47 },\n { season: 2020, team: 'Lynx', points: 43 },\n { season: 2020, team: 'Heron', points: 51 },\n { season: 2020, team: 'Badger', points: 83 },\n { season: 2020, team: 'Marten', points: 70 },\n { season: 2021, team: 'Kestrel', points: 81 },\n { season: 2021, team: 'Otter', points: 81 },\n { season: 2021, team: 'Lynx', points: 42 },\n { season: 2021, team: 'Heron', points: 51 },\n { season: 2021, team: 'Badger', points: 75 },\n { season: 2021, team: 'Marten', points: 77 },\n { season: 2022, team: 'Kestrel', points: 81 },\n { season: 2022, team: 'Otter', points: 48 },\n { season: 2022, team: 'Lynx', points: 47 },\n { season: 2022, team: 'Heron', points: 49 },\n { season: 2022, team: 'Badger', points: 83 },\n { season: 2022, team: 'Marten', points: 80 },\n { season: 2023, team: 'Kestrel', points: 89 },\n { season: 2023, team: 'Otter', points: 55 },\n { season: 2023, team: 'Lynx', points: 49 },\n { season: 2023, team: 'Heron', points: 44 },\n { season: 2023, team: 'Badger', points: 87 },\n { season: 2023, team: 'Marten', points: 84 },\n { season: 2024, team: 'Kestrel', points: 92 },\n { season: 2024, team: 'Otter', points: 62 },\n { season: 2024, team: 'Lynx', points: 49 },\n { season: 2024, team: 'Heron', points: 36 },\n { season: 2024, team: 'Badger', points: 93 },\n { season: 2024, team: 'Marten', points: 81 },\n { season: 2025, team: 'Kestrel', points: 97 },\n { season: 2025, team: 'Otter', points: 64 },\n { season: 2025, team: 'Lynx', points: 53 },\n { season: 2025, team: 'Heron', points: 41 },\n { season: 2025, team: 'Badger', points: 101 },\n { season: 2025, team: 'Marten', points: 78 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const BUMP_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n xKey: 'season',\n seriesKey: 'team',\n valueKey: 'points',\n} as const);\n","import { curveBumpX, line } from 'd3-shape';\nimport type { BumpChartProps, ChartModel, ChartRecipe, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, TICK_CHAR, categoryAxis, categoryLabels, spreadLabels } from '../shared/cartesian';\nimport { readRanked } from '../shared/contracts';\nimport { accessorName, circlePath, formatCategory } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { rank, type Rank } from '../shared/stats';\nimport { BUMP_CHART_DEMO, BUMP_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'BumpChart';\nconst DOT_RADIUS = 3;\nconst HEIGHTEN_RADIUS = 3.5;\nconst NAME_GAP = 11;\n\ninterface Place {\n readonly x: number;\n readonly y: number;\n readonly rank: number;\n readonly value: number;\n}\n\nfunction buildBumpChart(props: BumpChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? BUMP_CHART_DEMO;\n const xKey = usesDemo ? BUMP_CHART_DEMO_KEYS.xKey : (props.xKey ?? 'x');\n const seriesKey = usesDemo ? BUMP_CHART_DEMO_KEYS.seriesKey : (props.seriesKey ?? 'series');\n const valueKey = usesDemo ? BUMP_CHART_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n const order = props.order ?? 'descending';\n const { locale } = context;\n const xName = accessorName(xKey, 'x');\n\n const read = readRanked(CHART, data, { x: xKey, series: seriesKey, value: valueKey });\n const ranks = rank(read.rows, read.series, order);\n const xIndex = new Map(read.xs.map((x, i) => [`${typeof x}:${String(x)}`, i]));\n /** `places[series][x]`: where a series stands at each x, when it has a value there. */\n const at = new Map<string, (Rank & { value: number } | undefined)[]>(read.series.map((s) => [s, read.xs.map(() => undefined)]));\n read.rows.forEach((row, i) => {\n const list = at.get(row.series) as (Rank & { value: number } | undefined)[];\n list[xIndex.get(`${typeof row.x}:${String(row.x)}`) as number] = { ...(ranks[i] as Rank), value: row.value };\n });\n // Best-ranked first, at the last x each series reaches; `series` caps how many are drawn.\n const standing = (s: string) => {\n const list = at.get(s) ?? [];\n for (let i = list.length - 1; i >= 0; i -= 1) if (list[i]) return [read.xs.length - i, (list[i] as Rank).slot];\n return [Number.POSITIVE_INFINITY, 0];\n };\n const best = [...read.series].sort((a, b) => {\n const [ga, sa] = standing(a);\n const [gb, sb] = standing(b);\n return (ga as number) - (gb as number) || (sa as number) - (sb as number);\n });\n const cap = props.series !== undefined && Number.isInteger(props.series) && props.series > 0 ? props.series : best.length;\n const drawn = read.series.filter((s) => best.slice(0, cap).includes(s));\n const tied = (xi: number, r: number) => read.series.filter((s) => at.get(s)?.[xi]?.rank === r).length > 1;\n const rankText = (xi: number, s: string) => {\n const place = at.get(s)?.[xi];\n return place ? `${place.rank}${tied(xi, place.rank) ? '=' : ''}` : '—';\n };\n\n const xLabels = read.xs.map((x) => formatCategory(x, locale));\n const base = modelBase(CHART, props, context, 'Bump chart', {\n columns: [xName, ...drawn],\n rows: read.xs.map((_, xi) => [xLabels[xi] ?? '', ...drawn.map((s) => rankText(xi, s))]),\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 area = card.area;\n const room = Math.min(Math.max(0, ...drawn.map((s) => s.length * TICK_CHAR)) + 10, area.width / 4);\n const plot: Rect = { x: area.x + room, y: area.y + PLOT_INSET, width: Math.max(area.width - 2 * room, 1), height: Math.max(area.height - AXIS_BAND - PLOT_INSET, 1) };\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (read.rows.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const columns = categoryAxis(read.xs.map((_, i) => i), plot, { chart: CHART, property: xName, padding: context.domainPadding, numeric: false, paddingInner: 0, paddingOuter: 0.1 });\n const slots = Math.max(1, ...drawn.flatMap((s) => (at.get(s) ?? []).map((p) => p?.slot ?? 0)));\n const rowHeight = plot.height / slots;\n const y = (slot: number) => plot.y + (slot - 0.5) * rowHeight;\n // The rank rows, as grid lines: a line keeps its slot between them.\n for (let slot = 1; slot <= slots; slot += 1) strokes.push({ d: `M${plot.x},${y(slot)}H${plot.x + plot.width}`, role: 'ornament', part: 'grid' });\n labels.push(...categoryLabels(xLabels, columns.at, area, plot));\n\n const ends: { first: Place; last: Place; series: string }[] = [];\n drawn.forEach((series, row) => {\n const places: (Place | undefined)[] = (at.get(series) ?? []).map((p, xi) => (p ? { x: columns.at(xi), y: y(p.slot), rank: p.rank, value: p.value } : undefined));\n const d = line<Place | undefined>().defined((p) => p !== undefined).x((p) => (p as Place).x).y((p) => (p as Place).y).curve(curveBumpX)(places);\n if (d) strokes.push({ d, role: 'encoding', part: 'ink' });\n places.forEach((p, xi) => {\n if (!p) return;\n strokes.push({ d: circlePath(p.x, p.y, DOT_RADIUS), role: 'encoding', part: 'ink' });\n hitAreas.push({ seriesKey: series, index: xi, datum: Object.freeze({ x: read.xs[xi], series, value: p.value, rank: p.rank }), value: p.rank, x: p.x, y: p.y, cell: { column: xi, row } });\n });\n const present = places.filter((p): p is Place => p !== undefined);\n if (present.length > 0) ends.push({ first: present[0] as Place, last: present.at(-1) as Place, series });\n });\n // The series' names at both ends, as direct labels, spread apart (DD-035).\n const lefts = spreadLabels(ends.map((e) => e.first.y), NAME_GAP, plot.y, plot.y + plot.height);\n const rights = spreadLabels(ends.map((e) => e.last.y), NAME_GAP, plot.y, plot.y + plot.height);\n ends.forEach((e, k) => {\n labels.push({ x: e.first.x - 7, y: (lefts[k] as number) + 3, text: e.series, kind: 'tick', part: 'axis', anchor: 'end' });\n labels.push({ x: e.last.x + 7, y: (rights[k] as number) + 3, text: e.series, kind: 'tick', part: 'axis', anchor: 'start' });\n });\n\n // One heightened element (REQ-442): the last point of the rank-1 series.\n const last = read.xs.length - 1;\n const leader = hitAreas.filter((h) => h.index === last).sort((a, b) => a.y - b.y)[0] ?? hitAreas.at(-1);\n if (leader) {\n const mark = circlePath(leader.x, leader.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\n const description =\n props.description ??\n `${base.name}. Bump chart of the rank of ${drawn.length} series over ${read.xs.length} ${xName} values, rank 1 the ${order === 'descending' ? 'highest' : 'lowest'} ${accessorName(valueKey, 'value')}, competition ranking with ties shared${\n leader ? `; ${leader.seriesKey} leads at ${xLabels[last] ?? ''}` : ''\n }.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `BumpChart` recipe (REQ-409): the rank of each series at each x, computed in the core. */\nexport const bumpChart: ChartRecipe<BumpChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildBumpChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `ErrorBarChart` (REQ-410): eight effect estimates with asymmetric intervals, read against 0. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const ERROR_BAR_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { arm: 'Arm A', effect: 1.61, low: 1.01, high: 2.07 },\n { arm: 'Arm B', effect: 0.2, low: -0.16, high: 1.04 },\n { arm: 'Arm C', effect: 1.25, low: 0.35, high: 2.79 },\n { arm: 'Arm D', effect: 1.64, low: 0.74, high: 2.26 },\n { arm: 'Arm E', effect: 0.45, low: -0.52, high: 2.54 },\n { arm: 'Arm F', effect: 0.34, low: -0.57, high: 2.41 },\n { arm: 'Arm G', effect: 1.03, low: 0.14, high: 1.85 },\n { arm: 'Arm H', effect: 1.04, low: -0.44, high: 2.67 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const ERROR_BAR_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n labelKey: 'arm',\n estimateKey: 'effect',\n lowKey: 'low',\n highKey: 'high',\n} as const);\n","import { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, ErrorBarChartProps, HitArea, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, TICK_CHAR, cartesianPlot, categoryAxis, categoryLabels, horizontalValueAxis, valueAxis } from '../shared/cartesian';\nimport { finite } from '../shared/cells';\nimport { readEstimates } from '../shared/contracts';\nimport { accessorName, circlePath, fitText, formatNumber } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { ERROR_BAR_CHART_DEMO, ERROR_BAR_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'ErrorBarChart';\nconst ESTIMATE_RADIUS = 3.5;\nconst CAP = 4;\n/** Room at the left for the category names when estimates run in rows. */\nconst ROW_LABELS = 64;\n\nfunction buildErrorBarChart(props: ErrorBarChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? ERROR_BAR_CHART_DEMO;\n const labelKey = usesDemo ? ERROR_BAR_CHART_DEMO_KEYS.labelKey : (props.labelKey ?? 'label');\n const estimateKey = usesDemo ? ERROR_BAR_CHART_DEMO_KEYS.estimateKey : (props.estimateKey ?? 'estimate');\n const lowKey = usesDemo ? ERROR_BAR_CHART_DEMO_KEYS.lowKey : (props.lowKey ?? 'low');\n const highKey = usesDemo ? ERROR_BAR_CHART_DEMO_KEYS.highKey : (props.highKey ?? 'high');\n const rows = props.orientation !== 'columns';\n const reference = finite(props.reference);\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const format = (v: number) => formatNumber(v, locale, numberFormat);\n const labelName = accessorName(labelKey, 'label');\n const estimateName = accessorName(estimateKey, 'estimate');\n\n const estimates = readEstimates(CHART, data, { label: labelKey, estimate: estimateKey, low: lowKey, high: highKey });\n const base = modelBase(CHART, props, context, 'Error bars', {\n columns: [labelName, estimateName, accessorName(lowKey, 'low'), accessorName(highKey, 'high')],\n rows: estimates.map((e) => [e.label, format(e.estimate), format(e.low), format(e.high)]),\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 area = card.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];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const range = extent([...estimates.flatMap((e) => [e.low, e.high, e.estimate]), ...(reference === undefined || estimates.length === 0 ? [] : [reference])]);\n if (range === undefined) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const axisOptions = { chart: CHART, property: estimateName, padding: context.domainPadding, locale, numberFormat };\n const axis = rows ? horizontalValueAxis(plot, area, range, axisOptions) : valueAxis(plot, range, { ...axisOptions, zero: false });\n const v = axis.scale;\n strokes.push(...axis.strokes);\n labels.push(...axis.labels);\n if (reference !== undefined) {\n const r = v(reference);\n strokes.push({ d: rows ? `M${r},${plot.y}V${plot.y + plot.height}` : `M${plot.x},${r}H${plot.x + plot.width}`, role: 'ornament', part: 'rule', dash: 'dotted' });\n }\n const along = rows ? { x: plot.y, y: plot.x, width: plot.height, height: plot.width } : plot;\n const slots = categoryAxis(estimates.map((_, i) => i), along, { chart: CHART, property: labelName, padding: context.domainPadding, numeric: false, paddingInner: 0.3, paddingOuter: 0.15 });\n\n const marks: string[] = [];\n estimates.forEach((e, row) => {\n const c = slots.at(row);\n const lo = v(e.low);\n const hi = v(e.high);\n const mid = v(e.estimate);\n // The interval with a cap at each end, one exact path.\n const d = rows\n ? `M${lo},${c}H${hi}M${lo},${c - CAP}V${c + CAP}M${hi},${c - CAP}V${c + CAP}`\n : `M${c},${lo}V${hi}M${c - CAP},${lo}H${c + CAP}M${c - CAP},${hi}H${c + CAP}`;\n strokes.push({ d, role: 'encoding', part: 'ink' });\n const point = rows ? { x: mid, y: c } : { x: c, y: mid };\n const mark = circlePath(point.x, point.y, ESTIMATE_RADIUS);\n marks.push(mark);\n strokes.push({ d: mark, role: 'encoding', part: 'ink', tone: 2 });\n hitAreas.push({\n seriesKey: estimateName,\n index: row,\n datum: Object.freeze({ label: e.label, estimate: e.estimate, low: e.low, high: e.high }),\n value: e.estimate,\n x: point.x,\n y: point.y,\n box: rows ? { x: Math.min(lo, hi), y: c - CAP, width: Math.abs(hi - lo), height: 2 * CAP } : { x: c - CAP, y: Math.min(lo, hi), width: 2 * CAP, height: Math.abs(hi - lo) },\n });\n const text = format(e.estimate);\n // The estimate is printed past the interval's end when the plot holds it (DD-035).\n if (rows && Math.max(lo, hi) + 6 + text.length * TICK_CHAR <= plot.x + plot.width) {\n labels.push({ x: Math.max(lo, hi) + 6, y: c + 3, text, kind: 'tick', part: 'axis', anchor: 'start' });\n }\n });\n const names = estimates.map((e) => e.label);\n if (rows) names.forEach((text, row) => labels.push({ x: area.x + PLOT_INSET, y: slots.at(row) + 4, text: fitText(text, ROW_LABELS - PLOT_INSET - 6), kind: 'tick', part: 'axis', anchor: 'start' }));\n else labels.push(...categoryLabels(names, slots.at, area, plot));\n\n // One heightened element (REQ-442): the estimate furthest from the reference, or the largest.\n const distance = (value: number) => (reference === undefined ? value : Math.abs(value - reference));\n let raised = 0;\n estimates.forEach((e, row) => {\n if (distance(e.estimate) > distance((estimates[raised] as (typeof estimates)[number]).estimate)) raised = row;\n });\n if (marks.length > 0) strokes.push({ d: marks[raised] as string, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const crossing = reference === undefined ? 0 : estimates.filter((e) => e.low <= reference && reference <= e.high).length;\n const description =\n props.description ??\n `${base.name}. ${estimates.length} estimates of ${estimateName} with their intervals${\n reference === undefined ? '' : `, read against ${format(reference)}; ${crossing} of them include it`\n }; estimates from ${format(Math.min(...estimates.map((e) => e.estimate)))} to ${format(Math.max(...estimates.map((e) => e.estimate)))}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `ErrorBarChart` recipe (REQ-410): a point estimate with its interval per category. */\nexport const errorBarChart: ChartRecipe<ErrorBarChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildErrorBarChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `IntervalChart` (REQ-411): four crews' jobs over the first quarter of 2026, ISO dates in UTC, some overlapping. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const INTERVAL_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { crew: 'North crew', task: 'Signage', from: '2026-03-15', to: '2026-03-21' },\n { crew: 'North crew', task: 'Grading', from: '2026-02-17', to: '2026-03-07' },\n { crew: 'North crew', task: 'Signage', from: '2026-03-09', to: '2026-03-31' },\n { crew: 'North crew', task: 'Drainage', from: '2026-02-19', to: '2026-02-24' },\n { crew: 'North crew', task: 'Grading', from: '2026-02-21', to: '2026-03-16' },\n { crew: 'South crew', task: 'Fencing', from: '2026-02-20', to: '2026-03-05' },\n { crew: 'South crew', task: 'Paving', from: '2026-01-02', to: '2026-01-16' },\n { crew: 'South crew', task: 'Paving', from: '2026-03-03', to: '2026-03-09' },\n { crew: 'South crew', task: 'Formwork', from: '2026-03-06', to: '2026-03-10' },\n { crew: 'Bridge team', task: 'Lighting', from: '2026-01-26', to: '2026-02-08' },\n { crew: 'Bridge team', task: 'Drainage', from: '2026-02-26', to: '2026-03-16' },\n { crew: 'Bridge team', task: 'Fencing', from: '2026-02-04', to: '2026-02-19' },\n { crew: 'Bridge team', task: 'Grading', from: '2026-03-14', to: '2026-03-31' },\n { crew: 'Survey', task: 'Formwork', from: '2026-03-22', to: '2026-03-31' },\n { crew: 'Survey', task: 'Signage', from: '2026-02-21', to: '2026-03-08' },\n { crew: 'Survey', task: 'Grading', from: '2026-03-17', to: '2026-03-26' },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const INTERVAL_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n laneKey: 'crew',\n startKey: 'from',\n endKey: 'to',\n labelKey: 'task',\n axis: 'date',\n} as const);\n","import { linearScale } from '../../scales/scales';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, HitArea, IntervalChartProps, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, TICK_CHAR, pillPath } from '../shared/cartesian';\nimport { checkCeiling, readIntervals, type IntervalRow } from '../shared/contracts';\nimport { isoDate } from '../shared/dates';\nimport { accessorName, fitText, formatNumber } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { INTERVAL_CHART_DEMO, INTERVAL_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'IntervalChart';\n/** Room at the left for the lane names. */\nconst ROW_LABELS = 72;\n/** Height of a pill as a share of its track, and the most it may be. */\nconst PILL_FILL = 0.7;\nconst PILL_MAX = 14;\n/** An interval that starts where it ends is drawn this wide, centred. */\nconst MIN_WIDTH = 3;\n\n/**\n * Tracks within a lane, so overlapping intervals never cover each other: in start order, each\n * takes the first track whose last interval has ended before it starts.\n */\nfunction tracksOf(rows: readonly IntervalRow[]): { track: number[]; count: number } {\n const order = rows.map((r, i) => [r, i] as const).sort((a, b) => a[0].start - b[0].start || a[1] - b[1]);\n const ends: number[] = [];\n const track = new Array<number>(rows.length);\n for (const [r, i] of order) {\n let t = ends.findIndex((end) => end <= r.start);\n if (t < 0) t = ends.push(r.end) - 1;\n else ends[t] = r.end;\n track[i] = t;\n }\n return { track, count: Math.max(ends.length, 1) };\n}\n\nfunction buildIntervalChart(props: IntervalChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? INTERVAL_CHART_DEMO;\n const laneKey = usesDemo ? INTERVAL_CHART_DEMO_KEYS.laneKey : (props.laneKey ?? 'lane');\n const startKey = usesDemo ? INTERVAL_CHART_DEMO_KEYS.startKey : (props.startKey ?? 'start');\n const endKey = usesDemo ? INTERVAL_CHART_DEMO_KEYS.endKey : (props.endKey ?? 'end');\n const labelKey = usesDemo ? INTERVAL_CHART_DEMO_KEYS.labelKey : props.labelKey;\n const axisKind = usesDemo ? INTERVAL_CHART_DEMO_KEYS.axis : (props.axis ?? 'number');\n const dates = axisKind === 'date';\n const { locale } = context;\n const numberFormat = props.numberFormat;\n // A date axis prints ISO days, never through the host's time zone or locale (REQ-103).\n const at = (value: number) => (dates ? isoDate(value) : formatNumber(value, locale, numberFormat));\n const tick = (value: number) => (dates ? isoDate(value).slice(5) : formatNumber(value, locale, numberFormat));\n const laneName = accessorName(laneKey, 'lane');\n\n const { rows: intervals, lanes } = readIntervals(CHART, data, { lane: laneKey, start: startKey, end: endKey, ...(labelKey === undefined ? {} : { label: labelKey }) }, dates ? 'date' : 'number');\n checkCeiling(CHART, laneName, 'intervals', intervals.length);\n const base = modelBase(CHART, props, context, 'Interval chart', {\n columns: [...(labelKey === undefined ? [] : [accessorName(labelKey, 'label')]), laneName, accessorName(startKey, 'start'), accessorName(endKey, 'end'), 'length'],\n rows: intervals.map((r) => [...(labelKey === undefined ? [] : [r.label ?? '—']), r.lane, at(r.start), at(r.end), formatNumber(r.end - r.start, 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 area = card.area;\n const plot: Rect = { 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 const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n const range = extent(intervals.flatMap((r) => [r.start, r.end]));\n if (range === undefined) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const right = plot.x + plot.width;\n const x = linearScale(range, [plot.x, right], { chart: CHART, property: accessorName(startKey, 'start'), padding: context.domainPadding, nice: !dates });\n for (const t of x.ticks(4)) {\n if (dates && !Number.isInteger(t)) continue;\n strokes.push({ d: `M${x(t)},${plot.y}V${plot.y + plot.height}`, role: 'ornament', part: 'grid' });\n labels.push({ x: x(t), y: area.y + area.height - 5, text: tick(t), kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n const laneHeight = plot.height / lanes.length;\n const pills: string[] = [];\n lanes.forEach((lane, l) => {\n const top = plot.y + l * laneHeight;\n strokes.push({ d: `M${plot.x},${top + laneHeight}H${right}`, role: 'ornament', part: 'rule' });\n labels.push({ x: area.x + PLOT_INSET, y: top + laneHeight / 2 + 4, text: fitText(lane, ROW_LABELS - PLOT_INSET - 6), kind: 'tick', part: 'axis', anchor: 'start' });\n const members = intervals.map((r, i) => [r, i] as const).filter(([r]) => r.lane === lane);\n const { track, count } = tracksOf(members.map(([r]) => r));\n const trackHeight = laneHeight / count;\n const height = Math.min(trackHeight * PILL_FILL, PILL_MAX);\n members.forEach(([r, i], k) => {\n const centre = top + trackHeight * ((track[k] as number) + 0.5);\n let x0 = x(r.start);\n let x1 = x(r.end);\n if (x1 - x0 < MIN_WIDTH) {\n const mid = (x0 + x1) / 2;\n x0 = mid - MIN_WIDTH / 2;\n x1 = mid + MIN_WIDTH / 2;\n }\n const box = { x: x0, y: centre - height / 2, width: x1 - x0, height };\n const d = pillPath(box);\n pills[i] = d;\n strokes.push({ d, role: 'encoding', part: 'ink', tone: 2 });\n hitAreas.push({\n seriesKey: 'length',\n index: i,\n datum: Object.freeze({ label: r.label ?? r.lane, lane: r.lane, start: r.start, end: r.end, length: r.end - r.start }),\n value: r.end - r.start,\n x: (x0 + x1) / 2,\n y: centre,\n box,\n cell: { column: k, row: l },\n });\n // The interval's own label inside it, when it fits (DD-035).\n if (r.label !== undefined && r.label.length * TICK_CHAR + 8 <= x1 - x0 && height >= 9) {\n labels.push({ x: (x0 + x1) / 2, y: centre + 3, text: r.label, kind: 'tick', part: 'text', anchor: 'middle' });\n }\n });\n });\n\n // One heightened element (REQ-442): the longest interval, the pill itself.\n let longest = 0;\n intervals.forEach((r, i) => {\n const best = intervals[longest] as IntervalRow;\n if (r.end - r.start > best.end - best.start) longest = i;\n });\n strokes.push({ d: pills[longest] as string, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const best = intervals[longest] as IntervalRow;\n const description =\n props.description ??\n `${base.name}. ${intervals.length} intervals on ${lanes.length} ${laneName} lanes, from ${at(range[0])} to ${at(range[1])}${dates ? ' (UTC days)' : ''}; the longest is ${best.label ?? best.lane}, ${formatNumber(best.end - best.start, locale, numberFormat)}${dates ? ' days' : ''}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `IntervalChart` recipe (REQ-411): floating bars from start to end on lanes. */\nexport const intervalChart: ChartRecipe<IntervalChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildIntervalChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `DivergingBarChart` (REQ-412): 200 answers to each of six questions on a five-level scale. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const DIVERGING_BAR_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { question: 'The site is easy to use', 'Strongly disagree': 43, Disagree: 53, Neutral: 50, Agree: 24, 'Strongly agree': 29 },\n { question: 'Prices are fair', 'Strongly disagree': 38, Disagree: 36, Neutral: 62, Agree: 42, 'Strongly agree': 21 },\n { question: 'Delivery was on time', 'Strongly disagree': 40, Disagree: 42, Neutral: 45, Agree: 31, 'Strongly agree': 41 },\n { question: 'Support solved my issue', 'Strongly disagree': 37, Disagree: 39, Neutral: 43, Agree: 41, 'Strongly agree': 39 },\n { question: 'I would recommend it', 'Strongly disagree': 55, Disagree: 36, Neutral: 50, Agree: 20, 'Strongly agree': 38 },\n { question: 'The app is reliable', 'Strongly disagree': 49, Disagree: 33, Neutral: 46, Agree: 40, 'Strongly agree': 31 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const DIVERGING_BAR_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n labelKey: 'question',\n levels: /* @__PURE__ */ Object.freeze(['Strongly disagree', 'Disagree', 'Neutral', 'Agree', 'Strongly agree']),\n} as const);\n","import { linearScale } from '../../scales/scales';\nimport type { ChartModel, ChartRecipe, DivergingBarChartProps, HitArea, Rect, RecipeContext, Stroke, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, TICK_CHAR, categoryAxis, legend } from '../shared/cartesian';\nimport { rectPath } from '../shared/cells';\nimport { readLikert } from '../shared/contracts';\nimport { accessorName, fitText, formatNumber } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { niceStep } from '../shared/stats';\nimport { DIVERGING_BAR_CHART_DEMO, DIVERGING_BAR_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'DivergingBarChart';\n/** The deepest tone a level takes: the darkest steps of the ramp stay for the heaviest marks. */\nconst MAX_TONE = 3;\nconst PERCENT: Intl.NumberFormatOptions = { style: 'percent', maximumFractionDigits: 1 };\n\n/** Where each level sits: its side of the centre, its tone, and whether it is the split neutral. */\ninterface Placement {\n readonly side: -1 | 0 | 1;\n readonly tone: ToneLevel;\n}\n\n/**\n * Levels left of the neutral run left of the centre, the rest right; the neutral is split across\n * it. The side carries the sign; the tone, the distance from neutral (REQ-412, REQ-440).\n */\nfunction placements(count: number, neutral: number | null): Placement[] {\n const tone = (distance: number) => Math.min(distance, MAX_TONE) as ToneLevel;\n if (neutral === null) {\n const middle = Math.floor(count / 2);\n return Array.from({ length: count }, (_, i) => (i < middle ? { side: -1, tone: tone(middle - i) } : { side: 1, tone: tone(i - middle + 1) }));\n }\n return Array.from({ length: count }, (_, i) => (i < neutral ? { side: -1, tone: tone(neutral - i) } : i > neutral ? { side: 1, tone: tone(i - neutral) } : { side: 0, tone: 0 }));\n}\n\nfunction buildDivergingBarChart(props: DivergingBarChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? DIVERGING_BAR_CHART_DEMO;\n const labelKey = usesDemo ? DIVERGING_BAR_CHART_DEMO_KEYS.labelKey : (props.labelKey ?? 'label');\n const levels = usesDemo ? DIVERGING_BAR_CHART_DEMO_KEYS.levels : props.levels;\n const percent = props.percent !== false;\n // The middle level of an odd scale by default; a given index is held to the scale.\n const neutral =\n props.neutral === null\n ? null\n : props.neutral === undefined\n ? levels.length % 2 === 1 ? (levels.length - 1) / 2 : null\n : Math.min(Math.max(Math.round(Number.isFinite(props.neutral) ? props.neutral : 0), 0), levels.length - 1);\n const { locale } = context;\n const share = (v: number) => (percent ? formatNumber(v / 100, locale, PERCENT) : formatNumber(v, locale, props.numberFormat));\n const labelName = accessorName(labelKey, 'label');\n\n const rows = readLikert(CHART, data, labelKey, levels, percent);\n const base = modelBase(CHART, props, context, 'Diverging bar chart', {\n columns: [labelName, ...levels],\n rows: rows.map((r) => [r.label, ...r.shares.map(share)]),\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 place = placements(levels.length, neutral);\n const key = legend(card.area, levels.map((name, i) => ({ name, part: 'ink' as const, ...(place[i]?.tone ? { tone: place[i]?.tone } : {}) })));\n const area = key.area;\n const room = Math.min(Math.max(0, ...rows.map((r) => r.label.length * TICK_CHAR)) + 10, area.width * 0.35);\n const plot: Rect = { x: area.x + room, y: area.y + PLOT_INSET, width: Math.max(area.width - room - PLOT_INSET, 1), height: Math.max(area.height - AXIS_BAND - PLOT_INSET, 1) };\n const strokes: Stroke[] = [...card.strokes, ...key.strokes];\n const labels: TextLabel[] = [...card.labels, ...key.labels];\n const hitAreas: HitArea[] = [];\n\n if (rows.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const sideTotal = (shares: readonly number[], side: -1 | 1) =>\n shares.reduce((sum, s, i) => sum + (place[i]?.side === side ? s : place[i]?.side === 0 ? s / 2 : 0), 0);\n const left = Math.max(...rows.map((r) => sideTotal(r.shares, -1)), 0);\n const rightTotal = Math.max(...rows.map((r) => sideTotal(r.shares, 1)), 0);\n // Symmetric about the centre, so the two sides read on one scale, to the next step of the\n // 1-2-5 ladder: d3's nice would round ±55 % out to ±100 %.\n const reach = Math.max(left, rightTotal, 1e-9);\n const step = niceStep(reach / 2);\n const bound = Math.ceil(reach / step - 1e-9) * step;\n const x = linearScale([-bound, bound], [plot.x, plot.x + plot.width], { chart: CHART, property: labelName, padding: context.domainPadding });\n for (let k = -Math.round(bound / step); k <= Math.round(bound / step); k += 1) {\n const t = k * step;\n if (k !== 0) strokes.push({ d: `M${x(t)},${plot.y}V${plot.y + plot.height}`, role: 'ornament', part: 'grid' });\n labels.push({ x: x(t), y: area.y + area.height - 5, text: share(Math.abs(t)), kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n const centre = x(0);\n strokes.push({ d: `M${centre},${plot.y}V${plot.y + plot.height}`, role: 'ornament', part: 'rule' });\n const band = categoryAxis(rows.map((_, i) => i), { x: plot.y, y: plot.x, width: plot.height, height: plot.width }, { chart: CHART, property: labelName, padding: context.domainPadding, numeric: false, paddingInner: 0.3, paddingOuter: 0.15 });\n const thickness = Math.min(band.bandwidth, 22);\n\n let raised: { d: string; share: number } | undefined;\n rows.forEach((row, r) => {\n const c = band.at(r);\n const top = c - thickness / 2;\n labels.push({ x: area.x + PLOT_INSET, y: c + 4, text: fitText(row.label, room - PLOT_INSET - 4), kind: 'tick', part: 'axis', anchor: 'start' });\n // Out from the centre on each side: the neutral half first, then outward by distance.\n let leftEdge = centre;\n let rightEdge = centre;\n const segment = (from: number, to: number, tone: ToneLevel) => {\n const box = { x: Math.min(from, to), y: top, width: Math.abs(to - from), height: thickness };\n const d = rectPath(box);\n strokes.push({ d, role: 'encoding', part: 'ink', tone });\n return { box, d };\n };\n const order = levels.map((_, i) => i).sort((a, b) => (place[a]?.tone ?? 0) - (place[b]?.tone ?? 0) || a - b);\n for (const i of order) {\n const s = row.shares[i] as number;\n const p = place[i] as Placement;\n if (!(s > 0)) continue;\n let box: Rect;\n let d: string;\n if (p.side === 0) {\n const half = x(s / 2) - x(0);\n const a = segment(leftEdge - half, leftEdge, 0);\n const b = segment(rightEdge, rightEdge + half, 0);\n leftEdge -= half;\n rightEdge += half;\n box = { x: a.box.x, y: top, width: a.box.width + b.box.width, height: thickness };\n d = b.d;\n } else {\n const width = x(s) - x(0);\n const from = p.side < 0 ? leftEdge - width : rightEdge;\n const drawn = segment(from, from + width, p.tone);\n if (p.side < 0) leftEdge -= width;\n else rightEdge += width;\n box = drawn.box;\n d = drawn.d;\n if (p.side > 0 && (!raised || s > raised.share)) raised = { d, share: s };\n }\n hitAreas.push({\n seriesKey: levels[i] as string,\n index: row.index,\n datum: Object.freeze({ label: row.label, level: levels[i], share: s, count: row.values[i] }),\n value: s,\n x: box.x + box.width / 2,\n y: c,\n box,\n cell: { column: i, row: r },\n });\n const text = share(s);\n if (text.length * TICK_CHAR + 4 <= box.width && thickness >= 9) labels.push({ x: box.x + box.width / 2, y: c + 3, text, kind: 'tick', part: 'text', anchor: 'middle' });\n }\n });\n\n // One heightened element (REQ-442): the largest positive share, the segment itself.\n if (raised) strokes.push({ d: raised.d, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const description =\n props.description ??\n `${base.name}. Diverging bars of ${rows.length} ${labelName} rows on a ${levels.length}-level scale from ${levels[0] ?? ''} to ${levels.at(-1) ?? ''}${\n neutral === null ? '' : `, ${levels[neutral] ?? ''} split across the centre`\n }; ${percent ? 'each row as shares of 100 %' : 'counts'}, levels before the centre to its left.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `DivergingBarChart` recipe (REQ-412): ordered levels stacked on both sides of a neutral centre. */\nexport const divergingBarChart: ChartRecipe<DivergingBarChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildDivergingBarChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `ConnectedScatterChart` (REQ-413): fare and riders over 14 years, the path crossing itself once. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const CONNECTED_SCATTER_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { year: 2012, fare: 1.5, riders: 39.8 },\n { year: 2013, fare: 1.62, riders: 41.8 },\n { year: 2014, fare: 1.72, riders: 42.7 },\n { year: 2015, fare: 1.85, riders: 44.7 },\n { year: 2016, fare: 1.97, riders: 45.9 },\n { year: 2017, fare: 2.09, riders: 47.6 },\n { year: 2018, fare: 2.73, riders: 53.1 },\n { year: 2019, fare: 2.42, riders: 58.2 },\n { year: 2020, fare: 1.87, riders: 55.9 },\n { year: 2021, fare: 2.26, riders: 48.6 },\n { year: 2022, fare: 2.7, riders: 55.2 },\n { year: 2023, fare: 2.83, riders: 56.3 },\n { year: 2024, fare: 2.93, riders: 58.1 },\n { year: 2025, fare: 3.05, riders: 59.6 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const CONNECTED_SCATTER_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n xKey: 'fare',\n yKey: 'riders',\n labelKey: 'year',\n} as const);\n","import { linearScale } from '../../scales/scales';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, ConnectedScatterChartProps, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { TICK_CHAR, cartesianPlot, valueAxis } from '../shared/cartesian';\nimport { inset } from '../shared/cells';\nimport { checkCeiling, readPathPoints } from '../shared/contracts';\nimport { accessorName, circlePath, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { CONNECTED_SCATTER_CHART_DEMO, CONNECTED_SCATTER_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'ConnectedScatterChart';\nconst DOT_RADIUS = 2.5;\nconst HEIGHTEN_RADIUS = 3.5;\n/** A chevron's length back along the path and its half-width; segments shorter than `CHEVRON_ROOM` get none. */\nconst CHEVRON_BACK = 4;\nconst CHEVRON_HALF = 3;\nconst CHEVRON_ROOM = 14;\n/** Two labels closer than this, in px, would collide: the later one is left to the table. */\nconst LABEL_ROOM = 22;\n\nfunction buildConnectedScatterChart(props: ConnectedScatterChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? CONNECTED_SCATTER_CHART_DEMO;\n const xKey = usesDemo ? CONNECTED_SCATTER_CHART_DEMO_KEYS.xKey : (props.xKey ?? 'x');\n const yKey = usesDemo ? CONNECTED_SCATTER_CHART_DEMO_KEYS.yKey : (props.yKey ?? 'y');\n const labelKey = usesDemo ? CONNECTED_SCATTER_CHART_DEMO_KEYS.labelKey : props.labelKey;\n const arrows = props.arrows !== false;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const xName = accessorName(xKey, 'x');\n const yName = accessorName(yKey, 'y');\n\n const points = readPathPoints(CHART, data, { x: xKey, y: yKey, ...(labelKey === undefined ? {} : { label: labelKey }) });\n checkCeiling(CHART, yName, 'points', points.length);\n const base = modelBase(CHART, props, context, 'Connected scatter', {\n columns: [...(labelKey === undefined ? [] : [accessorName(labelKey, 'label')]), xName, yName],\n rows: data.map((datum, index) => [\n ...(labelKey === undefined ? [] : [formatValue(read(labelKey, datum, index), locale, { useGrouping: false, maximumFractionDigits: 2 })]),\n formatValue(read(xKey, datum, index), locale, numberFormat),\n formatValue(read(yKey, 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) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n const inner = inset(plot, HEIGHTEN_RADIUS);\n const axis = valueAxis(inner, extent(points.map((p) => p.y)) ?? [0, 0], { chart: 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 marks start after the value labels at the plot's left edge, as the scatter's do.\n const gutter = Math.min(Math.max(0, ...axis.labels.map((l) => l.text.length * TICK_CHAR)) + 6, inner.width / 3);\n const x = linearScale(extent(points.map((p) => p.x)) ?? [0, 0], [inner.x + gutter, inner.x + inner.width], { chart: 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 const at = points.map((p) => ({ x: x(p.x), y: y(p.y) }));\n strokes.push({ d: at.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x},${p.y}`).join(''), role: 'encoding', part: 'ink' });\n // A chevron at each segment's middle, pointing the way the path runs: exact, encoding.\n if (arrows) {\n for (let i = 1; i < at.length; i += 1) {\n const a = at[i - 1] as { x: number; y: number };\n const b = at[i] as { x: number; y: number };\n const dx = b.x - a.x;\n const dy = b.y - a.y;\n const length = Math.sqrt(dx * dx + dy * dy);\n if (length < CHEVRON_ROOM) continue;\n const ux = dx / length;\n const uy = dy / length;\n const mx = (a.x + b.x) / 2;\n const my = (a.y + b.y) / 2;\n const bx = mx - ux * CHEVRON_BACK;\n const by = my - uy * CHEVRON_BACK;\n strokes.push({ d: `M${bx - uy * CHEVRON_HALF},${by + ux * CHEVRON_HALF}L${mx},${my}L${bx + uy * CHEVRON_HALF},${by - ux * CHEVRON_HALF}`, role: 'encoding', part: 'ink' });\n }\n }\n points.forEach((p, i) => {\n const q = at[i] as { x: number; y: number };\n strokes.push({ d: circlePath(q.x, q.y, DOT_RADIUS), role: 'encoding', part: 'ink' });\n hitAreas.push({ seriesKey: yName, index: p.index, datum: p.datum, value: p.y, x: q.x, y: q.y, box: { x: q.x - DOT_RADIUS, y: q.y - DOT_RADIUS, width: 2 * DOT_RADIUS, height: 2 * DOT_RADIUS } });\n });\n\n // Labels at both ends always, and where given, unless one would sit on another.\n const placed: { x: number; y: number }[] = [];\n const name = (i: number) => {\n const label = points[i]?.label;\n if (label !== undefined) return label;\n return i === 0 ? 'start' : i === points.length - 1 ? 'end' : undefined;\n };\n const ends = points.length > 1 ? [0, points.length - 1] : [0];\n const order = [...ends, ...points.map((_, i) => i).filter((i) => !ends.includes(i))];\n for (const i of order) {\n const text = name(i);\n const q = at[i] as { x: number; y: number };\n if (text === undefined || placed.some((p) => Math.abs(p.x - q.x) < LABEL_ROOM && Math.abs(p.y - q.y) < LABEL_ROOM / 2)) continue;\n placed.push(q);\n labels.push({ x: q.x + 5, y: q.y - 5, text, kind: 'tick', part: 'axis', anchor: q.x > plot.x + plot.width * 0.8 ? 'end' : 'start' });\n }\n\n // One heightened element (REQ-442): the path's last point.\n const last = at.at(-1) as { x: number; y: number };\n const mark = circlePath(last.x, last.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 const first = points[0] as (typeof points)[number];\n const end = points.at(-1) as (typeof points)[number];\n const description =\n props.description ??\n `${base.name}. A path through ${points.length} points in data order, ${xName} across and ${yName} up; it starts at ${formatNumber(first.x, locale, numberFormat)}, ${formatNumber(first.y, locale, numberFormat)} and ends at ${formatNumber(end.x, locale, numberFormat)}, ${formatNumber(end.y, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `ConnectedScatterChart` recipe (REQ-413): an ordered path through x-y points, with direction marks. */\nexport const connectedScatterChart: ChartRecipe<ConnectedScatterChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildConnectedScatterChart });\n","/**\n * The hierarchy layouts of the treemap, the sunburst and the tree (DD-028, REQ-416..REQ-418): the\n * tree built from validated rows, a subtree drawn as root (DD-033), squarify, partition and the\n * tidy tree — all owned, with only `+ − × ÷` and comparisons inside them (REQ-435). Rows are\n * validated before they get here (`readHierarchy`, REQ-437).\n */\nimport type { Datum, Rect } from '../../types';\nimport type { HierarchyRow } from './contracts';\n\n/** A node of the tree, with what is derived from its rows (Data Model §2.23). */\nexport interface TreeNode {\n readonly id: string;\n readonly label: string;\n /** The row it came from; `-1` for a synthetic root. */\n readonly index: number;\n readonly datum: Datum;\n readonly parent: TreeNode | null;\n readonly children: readonly TreeNode[];\n readonly depth: number;\n /** Depth-first pre-order, from 0: the keyboard's order (REQ-438). */\n readonly order: number;\n /** A leaf's own value; an internal node's is the sum of its children (I-25). */\n readonly value: number;\n /** The node's value over its parent's; 1 for the root, 0 under a parent of value 0. */\n readonly share: number;\n /** Labels from the data root to the node, for the announcement (DD-031). */\n readonly path: readonly string[];\n}\n\ninterface Building {\n id: string;\n label: string;\n index: number;\n datum: Datum;\n parent: Building | null;\n children: Building[];\n depth: number;\n order: number;\n value: number;\n share: number;\n path: string[];\n}\n\n/** Largest first, ties by id: an order no shuffle of the rows can change (I-23). */\nconst byValue = (a: Building, b: Building) => b.value - a.value || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0);\n\n/** Depth, pre-order, share and path, from `node` down; `path` is the path of its parent. */\nfunction number(node: Building, depth: number, path: readonly string[], counter: { next: number }): void {\n node.depth = depth;\n node.order = counter.next++;\n node.path = [...path, node.label];\n for (const child of node.children) {\n child.share = node.value > 0 ? child.value / node.value : 0;\n number(child, depth + 1, node.path, counter);\n }\n}\n\n/**\n * The tree of validated rows. Siblings keep the data order (`data`), or run largest first with\n * ties by id (`value`), so a value-ordered layout does not depend on the order of the rows.\n */\nexport function stratify(rows: readonly HierarchyRow[], siblings: 'data' | 'value'): TreeNode | undefined {\n const nodes = new Map<string, Building>();\n for (const row of rows) {\n nodes.set(row.id, { id: row.id, label: row.label, index: row.index, datum: row.datum, parent: null, children: [], depth: 0, order: 0, value: row.value, share: 1, path: [] });\n }\n let root: Building | undefined;\n for (const row of rows) {\n const node = nodes.get(row.id) as Building;\n const parent = row.parent === null ? undefined : nodes.get(row.parent);\n if (parent) {\n node.parent = parent;\n parent.children.push(node);\n } else root ??= node;\n }\n if (!root) return undefined;\n // Post-order sums: an internal node's own value is ignored (Data Model §2.23).\n const sum = (node: Building): number => {\n if (node.children.length > 0) node.value = node.children.reduce((total, child) => total + sum(child), 0);\n return node.value;\n };\n sum(root);\n if (siblings === 'value') {\n const sort = (node: Building): void => {\n node.children.sort(byValue);\n node.children.forEach(sort);\n };\n sort(root);\n }\n root.share = 1;\n number(root, 0, [], { next: 0 });\n return root;\n}\n\n/** Every node, in pre-order. */\nexport function flatten(root: TreeNode): TreeNode[] {\n const out: TreeNode[] = [];\n const walk = (node: TreeNode) => {\n out.push(node);\n node.children.forEach(walk);\n };\n walk(root);\n return out;\n}\n\n/**\n * The subtree of `rootId` drawn as root (DD-033): a copy renumbered from its own root — depth 0,\n * share 1, pre-order from 0 — whose paths still run from the data root, and `up`, the node the\n * centre or the frame returns to. The input is not touched. An unknown or absent id is the data root.\n */\nexport function reroot(root: TreeNode, rootId: string | null | undefined): { root: TreeNode; up: TreeNode | null } {\n const found = rootId === null || rootId === undefined ? undefined : flatten(root).find((n) => n.id === rootId);\n if (!found || found === root) return { root, up: null };\n const copy = (node: TreeNode, parent: Building | null): Building => {\n const made: Building = { ...node, parent, children: [], path: [...node.path] } as Building;\n made.children = node.children.map((child) => copy(child, made));\n return made;\n };\n const top = copy(found, null);\n top.share = 1;\n number(top, 0, found.path.slice(0, -1), { next: 0 });\n return { root: top, up: found.parent };\n}\n\n/** Each node's span of its root, `[start, end]` in 0–1, children in order inside their parent's (I-25). */\nexport function partition(root: TreeNode): Map<string, readonly [number, number]> {\n const spans = new Map<string, readonly [number, number]>();\n const walk = (node: TreeNode, start: number, end: number) => {\n spans.set(node.id, [start, end]);\n let at = start;\n for (const child of node.children) {\n const width = node.value > 0 ? ((end - start) * child.value) / node.value : 0;\n // The last child ends exactly where its parent does, whatever the sum's last bit says.\n const next = child === node.children.at(-1) ? end : at + width;\n walk(child, at, next);\n at = next;\n }\n };\n walk(root, 0, 1);\n return spans;\n}\n\n/** The worst aspect ratio of a row of `areas` laid along a side of length `side` (Bruls et al.). */\nfunction worst(areas: readonly number[], side: number): number {\n let sum = 0;\n let max = 0;\n let min = Number.POSITIVE_INFINITY;\n for (const a of areas) {\n sum += a;\n if (a > max) max = a;\n if (a < min) min = a;\n }\n const s2 = sum * sum;\n const w2 = side * side;\n return Math.max((w2 * max) / s2, s2 / (w2 * min));\n}\n\n/**\n * Squarified tiles of `rect` for `values`, in the given order (Bruls, Huizing and van Wijk): rows\n * are laid along the shorter side, and a tile joins the row while it does not worsen the row's\n * worst aspect ratio. Tile areas are proportional to the values (I-25); a zero value gets a tile of\n * no area at the row's end.\n */\nexport function squarify(values: readonly number[], rect: Rect): Rect[] {\n const total = values.reduce((sum, v) => sum + (v > 0 ? v : 0), 0);\n const tiles: Rect[] = values.map(() => ({ x: rect.x, y: rect.y, width: 0, height: 0 }));\n if (total <= 0) return values.length === 0 ? [] : tiles;\n const scale = (rect.width * rect.height) / total;\n const queue = values.map((v, i) => [v > 0 ? v * scale : 0, i] as const).filter(([a]) => a > 0);\n let free = { ...rect };\n let k = 0;\n while (k < queue.length) {\n const side = Math.min(free.width, free.height);\n const row = [queue[k] as readonly [number, number]];\n k += 1;\n while (k < queue.length) {\n const next = queue[k] as readonly [number, number];\n if (worst([...row, next].map(([a]) => a), side) > worst(row.map(([a]) => a), side)) break;\n row.push(next);\n k += 1;\n }\n const sum = row.reduce((s, [a]) => s + a, 0);\n const last = k === queue.length;\n if (free.width >= free.height) {\n // A column along the left edge, as tall as the free rectangle.\n const width = last ? free.width : sum / free.height;\n let y = free.y;\n row.forEach(([a, i], j) => {\n const height = j === row.length - 1 ? free.y + free.height - y : a / width;\n tiles[i] = { x: free.x, y, width, height };\n y += height;\n });\n free = { x: free.x + width, y: free.y, width: free.width - width, height: free.height };\n } else {\n // A row along the top edge, as wide as the free rectangle.\n const height = last ? free.height : sum / free.width;\n let x = free.x;\n row.forEach(([a, i], j) => {\n const width = j === row.length - 1 ? free.x + free.width - x : a / height;\n tiles[i] = { x, y: free.y, width, height };\n x += width;\n });\n free = { x: free.x, y: free.y + height, width: free.width, height: free.height - height };\n }\n }\n return tiles;\n}\n\n/** Walker's per-node state, as Buchheim, Jünger and Leipert name it. */\ninterface Walk {\n readonly node: TreeNode;\n readonly children: Walk[];\n readonly parent: Walk | null;\n /** 1-based position among its siblings. */\n readonly number: number;\n prelim: number;\n mod: number;\n shift: number;\n change: number;\n thread: Walk | null;\n ancestor: Walk;\n}\n\n/** The gap between neighbouring nodes of one depth, in layout units. */\nconst GAP = 1;\n\n/**\n * The tidy tree of `root` (REQ-418): Buchheim, Jünger and Leipert's linear-time version of the\n * Reingold–Tilford algorithm with Walker's spreading of the smaller subtrees. `x` is the position\n * across the depth, in node gaps from the leftmost node; `y` is the depth. No two nodes of one depth\n * are closer than one gap, and every parent is centred over its children.\n */\nexport function tidyTree(root: TreeNode): Map<string, { x: number; y: number }> {\n const build = (node: TreeNode, parent: Walk | null, n: number): Walk => {\n const walk = { node, children: [] as Walk[], parent, number: n, prelim: 0, mod: 0, shift: 0, change: 0, thread: null } as unknown as Walk;\n walk.ancestor = walk;\n node.children.forEach((child, i) => walk.children.push(build(child, walk, i + 1)));\n return walk;\n };\n const top = build(root, null, 1);\n const leftSibling = (v: Walk) => (v.parent && v.number > 1 ? (v.parent.children[v.number - 2] as Walk) : null);\n const leftmostSibling = (v: Walk) => (v.parent && v.number > 1 ? (v.parent.children[0] as Walk) : null);\n const nextLeft = (v: Walk) => v.children[0] ?? v.thread;\n const nextRight = (v: Walk) => v.children.at(-1) ?? v.thread;\n\n const moveSubtree = (wm: Walk, wp: Walk, shift: number) => {\n const subtrees = wp.number - wm.number;\n wp.change -= shift / subtrees;\n wp.shift += shift;\n wm.change += shift / subtrees;\n wp.prelim += shift;\n wp.mod += shift;\n };\n const executeShifts = (v: Walk) => {\n let shift = 0;\n let change = 0;\n for (let i = v.children.length - 1; i >= 0; i -= 1) {\n const w = v.children[i] as Walk;\n w.prelim += shift;\n w.mod += shift;\n change += w.change;\n shift += w.shift + change;\n }\n };\n const ancestorOf = (vim: Walk, v: Walk, fallback: Walk) => (vim.ancestor.parent === v.parent ? vim.ancestor : fallback);\n\n const apportion = (v: Walk, defaultAncestor: Walk): Walk => {\n const w = leftSibling(v);\n if (!w) return defaultAncestor;\n let vip: Walk = v;\n let vop: Walk = v;\n let vim: Walk = w;\n let vom: Walk = leftmostSibling(v) as Walk;\n let sip = vip.mod;\n let sop = vop.mod;\n let sim = vim.mod;\n let som = vom.mod;\n let ancestor = defaultAncestor;\n while (nextRight(vim) && nextLeft(vip)) {\n vim = nextRight(vim) as Walk;\n vip = nextLeft(vip) as Walk;\n vom = nextLeft(vom) as Walk;\n vop = nextRight(vop) as Walk;\n vop.ancestor = v;\n const shift = vim.prelim + sim - (vip.prelim + sip) + GAP;\n if (shift > 0) {\n moveSubtree(ancestorOf(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.mod;\n sip += vip.mod;\n som += vom.mod;\n sop += vop.mod;\n }\n if (nextRight(vim) && !nextRight(vop)) {\n vop.thread = nextRight(vim);\n vop.mod += sim - sop;\n }\n if (nextLeft(vip) && !nextLeft(vom)) {\n vom.thread = nextLeft(vip);\n vom.mod += sip - som;\n ancestor = v;\n }\n return ancestor;\n };\n\n const firstWalk = (v: Walk) => {\n const w = leftSibling(v);\n if (v.children.length === 0) {\n v.prelim = w ? w.prelim + GAP : 0;\n return;\n }\n let defaultAncestor = v.children[0] as Walk;\n for (const child of v.children) {\n firstWalk(child);\n defaultAncestor = apportion(child, defaultAncestor);\n }\n executeShifts(v);\n const midpoint = ((v.children[0] as Walk).prelim + (v.children.at(-1) as Walk).prelim) / 2;\n if (w) {\n v.prelim = w.prelim + GAP;\n v.mod = v.prelim - midpoint;\n } else v.prelim = midpoint;\n };\n\n const at = new Map<string, { x: number; y: number }>();\n const secondWalk = (v: Walk, m: number) => {\n at.set(v.node.id, { x: v.prelim + m, y: v.node.depth - root.depth });\n for (const child of v.children) secondWalk(child, m + v.mod);\n };\n firstWalk(top);\n secondWalk(top, -top.prelim);\n // From the leftmost node: every x at or above 0.\n let left = Number.POSITIVE_INFINITY;\n for (const p of at.values()) if (p.x < left) left = p.x;\n for (const p of at.values()) p.x -= left;\n return at;\n}\n","import type { HitArea } from '../types';\n\n/**\n * The tree keyboard model, the WAI-ARIA tree pattern (REQ-438, DD-031), as `moves` on each hit\n * area: Down and Up to the next and previous node in depth-first pre-order, Right to the first\n * child (a leaf stays), Left to the parent (the root stays), Home and End to the first and last\n * node. Right always descends and Left always ascends, whatever the writing direction: the model\n * takes none, as the APG trees do. Only a chart that lays out a hierarchy imports this module, so\n * no other chart carries it (REQ-444); `stepActive` follows the moves.\n */\nexport function treeMoves(hits: readonly HitArea[]): HitArea[] {\n const order = hits.map((hit, i) => [hit, i] as const).sort((a, b) => (a[0].node?.order ?? 0) - (b[0].node?.order ?? 0));\n const indexOf = (id: string | null | undefined) => order.find(([hit]) => id !== null && hit.node?.id === id)?.[1];\n const first = order[0]?.[1];\n const last = order.at(-1)?.[1];\n return hits.map((hit, i) => {\n const position = order.findIndex(([, k]) => k === i);\n const id = hit.node?.id;\n const moves = {\n ArrowDown: order[position + 1]?.[1],\n ArrowUp: order[position - 1]?.[1],\n ArrowRight: order.find(([h]) => id !== undefined && h.node?.parent === id)?.[1],\n ArrowLeft: indexOf(hit.node?.parent),\n Home: first,\n End: last,\n };\n return { ...hit, moves: Object.fromEntries(Object.entries(moves).filter(([, to]) => to !== undefined)) as HitArea['moves'] };\n });\n}\n\n/**\n * The label a hierarchy item announces (DD-031): its path from the root, its value and, below the\n * root, its share of its parent — \"Budget › Operations › Travel: 12,400, 8% of Operations\". The\n * parts arrive formatted, so the readout, the table and the announcement say the same.\n */\nexport function treeLabel(path: readonly string[], value: string, share?: string): string {\n const head = `${path.join(' › ')}: ${value}`;\n const parent = path.at(-2);\n return share === undefined || parent === undefined ? head : `${head}, ${share} of ${parent}`;\n}\n","/**\n * What the three hierarchy charts share (REQ-416..REQ-418, DD-031, DD-033): rows validated and\n * built into a tree, the controlled root and the depth drawn, the tabular alternative in pre-order,\n * and each drawn node's hit area — its frozen summary, its place in the tree and its moves.\n */\nimport { warnValue } from './cells';\nimport { checkCeiling, checkWhole, readHierarchy } from './contracts';\nimport { accessorName, formatNumber, numberFormatter } from './format';\nimport { flatten, reroot, stratify, type TreeNode } from './hierarchy';\nimport { treeMoves } from '../../interaction/tree';\nimport type { Accessor, CommonChartProps, DataTable, Datum, HitArea, RecipeContext } from '../../types';\n\n/** A column name and a share of the parent, as the table and the announcement print it. */\nconst SHARE: Intl.NumberFormatOptions = { style: 'percent', maximumFractionDigits: 1 };\n\nexport interface HierarchyKeys {\n readonly id: Accessor<unknown>;\n readonly parent: Accessor<unknown>;\n readonly label?: Accessor<unknown>;\n readonly value?: Accessor<unknown>;\n}\n\nexport interface ReadTree {\n /** The tree drawn: the data root, or the subtree of `rootId`. `undefined` with no valid row. */\n readonly root: TreeNode | undefined;\n /** Where the centre or the frame returns to: the drawn root's parent, `null` at the data root. */\n readonly up: TreeNode | null;\n /** Every node of the drawn tree, in pre-order: `nodes[i].order === i`, the table's row `i`. */\n readonly nodes: readonly TreeNode[];\n /** Levels drawn below the root. */\n readonly depth: number;\n readonly valueName: string;\n readonly table: Omit<DataTable, 'caption'>;\n /** The value cell of a node: its value and, below the root, its share of its parent. */\n readonly valueText: (node: TreeNode) => string;\n}\n\n/**\n * Reads a hierarchy chart's rows into the tree it draws. `siblings` orders children; `rootId` and\n * `depth` are the chart's view props (an unknown `rootId` is the data root, warned `SP002`).\n */\nexport function readTree(\n chart: string,\n data: readonly Datum[],\n keys: HierarchyKeys,\n props: CommonChartProps & { readonly rootId?: string | null; readonly depth?: number },\n context: RecipeContext,\n siblings: 'data' | 'value',\n): ReadTree {\n const { locale } = context;\n const valueName = keys.value === undefined ? 'leaves' : accessorName(keys.value, 'value');\n const rows = readHierarchy(chart, data, keys, props.title ?? 'All').rows;\n checkCeiling(chart, accessorName(keys.id, 'id'), 'nodes', rows.length);\n // Without a value key, a node counts its leaves: every leaf is 1 (TreeChart).\n const tree = stratify(keys.value === undefined ? rows.map((r) => ({ ...r, value: 1 })) : rows, siblings);\n let root = tree;\n let up: TreeNode | null = null;\n if (tree && props.rootId !== undefined && props.rootId !== null) {\n const rerooted = reroot(tree, props.rootId);\n if (rerooted.root === tree && props.rootId !== tree.id) warnValue(chart, 'rootId', `\"${props.rootId}\" names no node; the data root is drawn.`);\n root = rerooted.root;\n up = rerooted.up;\n }\n const nodes = root ? flatten(root) : [];\n const deepest = nodes.reduce((max, n) => Math.max(max, n.depth), 0);\n const depth = Math.min(checkWhole(chart, 'depth', props.depth, 1) ?? deepest, deepest);\n\n const value = numberFormatter(locale, props.numberFormat);\n const share = numberFormatter(locale, SHARE);\n const valueText = (node: TreeNode) => {\n const parent = node === root ? null : node.parent;\n return parent ? `${value(node.value)}, ${share(node.share)} of ${parent.label}` : value(node.value);\n };\n return {\n root,\n up,\n nodes,\n depth,\n valueName,\n valueText,\n table: { columns: ['node', valueName], rows: nodes.map((n) => [n.path.join(' › '), valueText(n)]) },\n };\n}\n\n/**\n * Hit areas for the drawn nodes, given where each sits: the frozen summary of API delta §4, the\n * node's place in the tree (`index` is its pre-order), and the tree's moves (REQ-438). The drawn\n * root's summary names `up`, the id its centre or frame returns to (`null`: the data root).\n */\nexport function nodeHitAreas(\n read: ReadTree,\n placed: readonly { readonly node: TreeNode; readonly x: number; readonly y: number; readonly box?: HitArea['box'] }[],\n): HitArea[] {\n const { root, up } = read;\n const hits = placed.map(({ node, x, y, box }): HitArea => {\n const summary: Record<string, unknown> = { id: node.id, path: node.path, value: node.value, share: node.share };\n if (node === root && up) summary.up = up.parent === null ? null : up.id;\n return {\n seriesKey: read.valueName,\n index: node.order,\n datum: Object.freeze(summary),\n value: node.value,\n x,\n y,\n ...(box ? { box } : {}),\n node: { id: node.id, parent: node === root ? null : (node.parent?.id ?? null), depth: node.depth, order: node.order },\n };\n });\n return treeMoves(hits);\n}\n\n/** \"3 levels, 38 nodes, 24 leaves, totalling 150,000\", for a description. */\nexport function treeSummary(read: ReadTree, locale: string, numberFormat: Intl.NumberFormatOptions | undefined): string {\n const leaves = read.nodes.filter((n) => n.children.length === 0).length;\n const root = read.root as TreeNode;\n return `${read.depth + 1} levels, ${read.nodes.length} nodes, ${leaves} leaves, rooted at ${root.path.join(' › ')}, totalling ${formatNumber(root.value, locale, numberFormat)}`;\n}\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `SquarifiedTreemap` (REQ-416): a fictional city budget: a root, 5 departments, 16 programmes and 16 budget lines, values on the 24 leaves. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const SQUARIFIED_TREEMAP_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { id: 'budget', parent: null, name: 'City budget' },\n { id: 'works', parent: 'budget', name: 'Public works' },\n { id: 'works-01', parent: 'works', name: 'Roads' },\n { id: 'works-01-a', parent: 'works-01', name: 'Roads: staff', amount: 1760 },\n { id: 'works-01-b', parent: 'works-01', name: 'Roads: materials', amount: 390 },\n { id: 'works-02', parent: 'works', name: 'Bridges', amount: 6154 },\n { id: 'works-03', parent: 'works', name: 'Water mains' },\n { id: 'works-03-a', parent: 'works-03', name: 'Water mains: staff', amount: 2069 },\n { id: 'works-03-b', parent: 'works-03', name: 'Water mains: materials', amount: 809 },\n { id: 'works-04', parent: 'works', name: 'Street lighting', amount: 8015 },\n { id: 'parks', parent: 'budget', name: 'Parks' },\n { id: 'parks-05', parent: 'parks', name: 'Playgrounds' },\n { id: 'parks-05-a', parent: 'parks-05', name: 'Playgrounds: staff', amount: 2165 },\n { id: 'parks-05-b', parent: 'parks-05', name: 'Playgrounds: materials', amount: 2865 },\n { id: 'parks-06', parent: 'parks', name: 'Tree care', amount: 2835 },\n { id: 'parks-07', parent: 'parks', name: 'Sports fields' },\n { id: 'parks-07-a', parent: 'parks-07', name: 'Sports fields: staff', amount: 2455 },\n { id: 'parks-07-b', parent: 'parks-07', name: 'Sports fields: materials', amount: 306 },\n { id: 'safety', parent: 'budget', name: 'Safety' },\n { id: 'safety-08', parent: 'safety', name: 'Fire service', amount: 1805 },\n { id: 'safety-09', parent: 'safety', name: 'Lifeguards' },\n { id: 'safety-09-a', parent: 'safety-09', name: 'Lifeguards: staff', amount: 2271 },\n { id: 'safety-09-b', parent: 'safety-09', name: 'Lifeguards: materials', amount: 2953 },\n { id: 'safety-10', parent: 'safety', name: 'Emergency planning', amount: 6265 },\n { id: 'culture', parent: 'budget', name: 'Culture' },\n { id: 'culture-11', parent: 'culture', name: 'Libraries' },\n { id: 'culture-11-a', parent: 'culture-11', name: 'Libraries: staff', amount: 912 },\n { id: 'culture-11-b', parent: 'culture-11', name: 'Libraries: materials', amount: 2265 },\n { id: 'culture-12', parent: 'culture', name: 'Museum', amount: 2999 },\n { id: 'culture-13', parent: 'culture', name: 'Festivals' },\n { id: 'culture-13-a', parent: 'culture-13', name: 'Festivals: staff', amount: 1275 },\n { id: 'culture-13-b', parent: 'culture-13', name: 'Festivals: materials', amount: 185 },\n { id: 'admin', parent: 'budget', name: 'Administration' },\n { id: 'admin-14', parent: 'admin', name: 'Payroll', amount: 6768 },\n { id: 'admin-15', parent: 'admin', name: 'Records' },\n { id: 'admin-15-a', parent: 'admin-15', name: 'Records: staff', amount: 3281 },\n { id: 'admin-15-b', parent: 'admin-15', name: 'Records: materials', amount: 310 },\n { id: 'admin-16', parent: 'admin', name: 'IT services', amount: 8252 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const SQUARIFIED_TREEMAP_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n idKey: 'id',\n parentKey: 'parent',\n labelKey: 'name',\n valueKey: 'amount',\n} as const);\n","import type { ChartModel, ChartRecipe, HitArea, Rect, RecipeContext, SquarifiedTreemapProps, Stroke, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { TICK_CHAR } from '../shared/cartesian';\nimport { inset, rectPath, ringTone, warnValue } from '../shared/cells';\nimport { fitText, formatNumber } from '../shared/format';\nimport { squarify, type TreeNode } from '../shared/hierarchy';\nimport { nodeHitAreas, readTree, treeSummary } from '../shared/nodes';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { SQUARIFIED_TREEMAP_DEMO, SQUARIFIED_TREEMAP_DEMO_KEYS } from './demo';\n\nconst CHART = 'SquarifiedTreemap';\n/** A label's line: its baseline below the line's top, and the line's height. */\nconst BASELINE = 10;\nconst LINE = 13;\n/** A tile narrower or shorter than this carries no label; the table and the readout name it. */\nconst LABEL_WIDTH = 28;\n\nconst PERCENT: Intl.NumberFormatOptions = { style: 'percent', maximumFractionDigits: 0 };\n\nfunction buildSquarifiedTreemap(props: SquarifiedTreemapProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? SQUARIFIED_TREEMAP_DEMO;\n const k = SQUARIFIED_TREEMAP_DEMO_KEYS;\n const keys = usesDemo\n ? { id: k.idKey, parent: k.parentKey, label: k.labelKey, value: k.valueKey }\n : { id: props.idKey ?? 'id', parent: props.parentKey ?? 'parent', value: props.valueKey ?? 'value', ...(props.labelKey === undefined ? {} : { label: props.labelKey }) };\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n // Largest first, ties by id: squarify's order, and one no shuffle of the rows can change (I-23).\n const read = readTree(CHART, data, keys, props, context, 'value');\n const base = modelBase(CHART, props, context, 'Treemap', read.table);\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, 2);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const root = read.root;\n\n if (root && root.value <= 0) warnValue(CHART, read.valueName, 'Every leaf is zero; a treemap has nothing to divide.');\n if (!root || root.value <= 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n // Every drawn node's rectangle: the root is the plot, children squarified inside their parent.\n const rects = new Map<TreeNode, Rect>([[root, plot]]);\n const drawn: TreeNode[] = [root];\n const lay = (node: TreeNode) => {\n if (node.depth >= read.depth) return;\n const children = node.children.filter((c) => c.value > 0);\n const tiles = squarify(children.map((c) => c.value), rects.get(node) as Rect);\n children.forEach((child, i) => {\n rects.set(child, tiles[i] as Rect);\n drawn.push(child);\n lay(child);\n });\n };\n lay(root);\n drawn.sort((a, b) => a.order - b.order);\n\n // Tone by the first level below the root, the ring's rule (DD-032, REQ-440): leaves inherit it.\n const first = root.children.filter((c) => c.value > 0);\n const toneOf = new Map<TreeNode, ToneLevel>();\n const tone = (node: TreeNode): ToneLevel => {\n const known = toneOf.get(node);\n if (known) return known;\n const own = node.depth <= 1 ? ringTone(Math.max(first.indexOf(node), 0), first.length) : tone(node.parent as TreeNode);\n toneOf.set(node, own);\n return own;\n };\n // A root drawn alone (a leaf as `rootId`) is its own tile.\n const isTile = (node: TreeNode) => (node !== root || drawn.length === 1) && (node.depth === read.depth || node.children.every((c) => c.value <= 0));\n\n const share = (node: TreeNode) => formatNumber(node.value / root.value, locale, PERCENT);\n /** Where a first-level frame's name sits, so a leaf label below it does not cover it. */\n const headers: Rect[] = [];\n for (const node of drawn) {\n if (node === root && !isTile(node)) continue;\n const r = rects.get(node) as Rect;\n if (isTile(node)) {\n strokes.push({ d: rectPath(r), role: 'encoding', part: 'ink', tone: tone(node) });\n } else {\n // An internal node: its frame, heavier for the first level, over its tiles.\n strokes.push({ d: rectPath(r), role: 'encoding', part: 'ink', paint: 'stroke', ...(node.depth === 1 ? { weight: 2 } : {}) });\n }\n if (node.depth === 1 && r.width >= LABEL_WIDTH && r.height >= LINE) {\n labels.push({ x: r.x + 3, y: r.y + BASELINE, text: fitText(`${node.label} ${share(node)}`, r.width - 6), kind: 'tick', part: 'text', anchor: 'start' });\n headers.push({ x: r.x, y: r.y, width: r.width, height: LINE });\n }\n }\n // Leaf names, where the tile holds them: below a first-level name when they would meet it.\n for (const node of drawn) {\n if (node.depth < 2 || !isTile(node)) continue;\n const r = rects.get(node) as Rect;\n const covered = headers.some((h) => r.x < h.x + h.width && h.x < r.x + r.width && r.y < h.y + h.height);\n const top = covered ? r.y + LINE : r.y;\n if (r.width < LABEL_WIDTH || r.y + r.height - top < LINE || node.label.length * TICK_CHAR > r.width * 3) continue;\n labels.push({ x: r.x + 3, y: top + BASELINE, text: fitText(node.label, r.width - 6), kind: 'tick', part: 'text', anchor: 'start' });\n }\n\n const hitAreas: HitArea[] = nodeHitAreas(\n read,\n drawn.map((node) => {\n const r = rects.get(node) as Rect;\n return { node, x: r.x + r.width / 2, y: r.y + r.height / 2, box: r };\n }),\n );\n\n // One heightened element (REQ-442): the largest tile, the tile itself.\n const tiles = drawn.filter(isTile);\n const largest = tiles.reduce((a, b) => (b.value > a.value ? b : a));\n strokes.push({ d: rectPath(rects.get(largest) as Rect), role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const description =\n props.description ??\n `${base.name}. Squarified treemap of ${treeSummary(read, locale, numberFormat)}; each tile's area is its value. The largest tile is ${largest.path.join(' › ')}, ${share(largest)} of the whole.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `SquarifiedTreemap` recipe (REQ-416): a hierarchy laid out by the squarified algorithm, frames per level. */\nexport const squarifiedTreemap: ChartRecipe<SquarifiedTreemapProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildSquarifiedTreemap });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\n/** Demo dataset of `SunburstChart` (REQ-417): the treemap's city budget. */\nexport { SQUARIFIED_TREEMAP_DEMO as SUNBURST_CHART_DEMO } from '../squarified-treemap/demo';\n\nexport const SUNBURST_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n idKey: 'id',\n parentKey: 'parent',\n labelKey: 'name',\n valueKey: 'amount',\n} as const);\n","import type { ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke, SunburstChartProps, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { TICK_CHAR } from '../shared/cartesian';\nimport { ringTone, warnValue } from '../shared/cells';\nimport { circlePath, fitText, formatNumber } from '../shared/format';\nimport { partition, type TreeNode } from '../shared/hierarchy';\nimport { nodeHitAreas, readTree, treeSummary } from '../shared/nodes';\nimport { pointAt, polarFrame, sectorLegend, sectorPath } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { SUNBURST_CHART_DEMO, SUNBURST_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'SunburstChart';\n/** The legend sits beside the rings when the area is at least this much wider than tall (as the donut's). */\nconst LEGEND_ASPECT = 1.5;\nconst LEGEND_GAP = 14;\nconst TURN = 2 * Math.PI;\nconst PERCENT: Intl.NumberFormatOptions = { style: 'percent', maximumFractionDigits: 0 };\n\nfunction buildSunburstChart(props: SunburstChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? SUNBURST_CHART_DEMO;\n const k = SUNBURST_CHART_DEMO_KEYS;\n const keys = usesDemo\n ? { id: k.idKey, parent: k.parentKey, label: k.labelKey, value: k.valueKey }\n : { id: props.idKey ?? 'id', parent: props.parentKey ?? 'parent', value: props.valueKey ?? 'value', ...(props.labelKey === undefined ? {} : { label: props.labelKey }) };\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n // Largest first, ties by id, clockwise from 12 o'clock: no shuffle of the rows moves an arc (I-23).\n const read = readTree(CHART, data, keys, props, context, 'value');\n const base = modelBase(CHART, props, context, 'Sunburst', read.table);\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 root = read.root;\n\n if (root && root.value <= 0) warnValue(CHART, read.valueName, 'Every leaf is zero; a sunburst has nothing to divide.');\n if (!root || root.value <= 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 ringArea = withLegend ? { x: plot.x, y: plot.y, width: plot.height, height: plot.height } : plot;\n const frame = polarFrame(ringArea);\n // The drawn root is the centre disc; each level below it a ring of equal width.\n const ring = frame.radius / (read.depth + 1);\n const spans = partition(root);\n const drawn = read.nodes.filter((n) => n.depth <= read.depth && n.value > 0);\n const first = root.children.filter((c) => c.value > 0);\n const share = (node: TreeNode) => formatNumber(node.value / root.value, locale, PERCENT);\n\n // Tone by the first ring, the ring's rule (DD-032, REQ-440): an outer arc takes its ancestor's.\n const toneOf = new Map<TreeNode, ToneLevel>();\n const tone = (node: TreeNode): ToneLevel => {\n const known = toneOf.get(node);\n if (known) return known;\n const own = node.depth <= 1 ? ringTone(Math.max(first.indexOf(node), 0), first.length) : tone(node.parent as TreeNode);\n toneOf.set(node, own);\n return own;\n };\n\n const centre = circlePath(frame.cx, frame.cy, ring);\n strokes.push({ d: centre, role: 'encoding', part: 'ink', paint: 'stroke' });\n const paths = new Map<TreeNode, string>();\n const placed = drawn.map((node) => {\n if (node === root) return { node, x: frame.cx, y: frame.cy };\n const [s, e] = spans.get(node.id) as readonly [number, number];\n const start = s * TURN;\n const end = e * TURN;\n const shape = { inner: node.depth * ring, outer: (node.depth + 1) * ring, start, end };\n const d = sectorPath(frame, shape);\n paths.set(node, d);\n if (d) strokes.push({ d, role: 'encoding', part: 'ink', tone: tone(node) });\n const middle = pointAt(frame, (start + end) / 2, (shape.inner + shape.outer) / 2);\n // A first-ring arc long enough for its name carries it, centred on the arc (REQ-440).\n const text = node.label;\n if (node.depth === 1 && ((end - start) * (shape.inner + shape.outer)) / 2 >= Math.min(text.length, 10) * TICK_CHAR && ring >= 12) {\n labels.push({ x: middle.x, y: middle.y + 3, text: fitText(text, ((end - start) * (shape.inner + shape.outer)) / 2), kind: 'tick', part: 'text', anchor: 'middle' });\n }\n return { node, x: middle.x, y: middle.y };\n });\n // The centre names the drawn root and its total; activating it returns to `up` (DD-033).\n labels.push({ x: frame.cx, y: frame.cy + 3, text: fitText(root.label, ring * 2 - 6), kind: 'tick', part: 'text', anchor: 'middle' });\n\n if (withLegend) {\n const x = ringArea.x + ringArea.width + LEGEND_GAP;\n const key = sectorLegend({ x, y: plot.y, width: Math.max(plot.x + plot.width - x, 1), height: plot.height }, first.map((n) => ({ name: n.label, share: share(n), tone: tone(n) })));\n strokes.push(...key.strokes);\n labels.push(...key.labels);\n }\n\n const hitAreas: HitArea[] = nodeHitAreas(read, placed);\n\n // One heightened element (REQ-442): the largest first-ring arc, the arc itself.\n // A root drawn alone (a leaf as `rootId`) heightens the centre.\n const largest = first.length > 0 ? first.reduce((a, b) => (b.value > a.value ? b : a)) : root;\n const raised = paths.get(largest) ?? centre;\n strokes.push({ d: raised, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const description =\n props.description ??\n `${base.name}. Sunburst of ${treeSummary(read, locale, numberFormat)}; each arc's angle is its value, each ring a level.${largest === root ? '' : ` The largest first-level arc is ${largest.label}, ${share(largest)} of the whole.`}`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `SunburstChart` recipe (REQ-417): a hierarchy as concentric rings of arcs, angle ∝ value, with a controlled root. */\nexport const sunburstChart: ChartRecipe<SunburstChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildSunburstChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\n/** Demo dataset of `TreeChart` (REQ-418): the treemap's city budget. */\nexport { SQUARIFIED_TREEMAP_DEMO as TREE_CHART_DEMO } from '../squarified-treemap/demo';\n\nexport const TREE_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n idKey: 'id',\n parentKey: 'parent',\n labelKey: 'name',\n valueKey: 'amount',\n} as const);\n","import type { ChartModel, ChartRecipe, HitArea, Rect, RecipeContext, Stroke, TextLabel, TreeChartProps } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { PLOT_INSET, TICK_CHAR } from '../shared/cartesian';\nimport { circlePath, fitText } from '../shared/format';\nimport { tidyTree, type TreeNode } from '../shared/hierarchy';\nimport { nodeHitAreas, readTree, treeSummary } from '../shared/nodes';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { TREE_CHART_DEMO, TREE_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'TreeChart';\nconst NODE_RADIUS = 3;\nconst HEIGHTEN_RADIUS = 3.5;\n/** Two labels nearer than this across the depth would collide: the later one is left to the table. */\nconst LABEL_GAP = 10;\n\nfunction buildTreeChart(props: TreeChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? TREE_CHART_DEMO;\n const k = TREE_CHART_DEMO_KEYS;\n const keys = usesDemo\n ? { id: k.idKey, parent: k.parentKey, label: k.labelKey, value: k.valueKey }\n : {\n id: props.idKey ?? 'id',\n parent: props.parentKey ?? 'parent',\n ...(props.labelKey === undefined ? {} : { label: props.labelKey }),\n ...(props.valueKey === undefined ? {} : { value: props.valueKey }),\n };\n const horizontal = props.orientation !== 'vertical';\n const { locale } = context;\n const numberFormat = props.numberFormat;\n\n // A tree keeps the data's sibling order: an organisation reads in the order it is given.\n const read = readTree(CHART, data, keys, props, context, 'data');\n const base = modelBase(CHART, props, context, 'Tree', read.table);\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 area = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const root = read.root;\n if (!root) return emptyModel(base, props, context, { viewBox: card.viewBox, plot: area, strokes, labels }, data.length === 0);\n\n const at = tidyTree(root);\n const depth = Math.max(read.depth, 1);\n let breadth = 0;\n for (const p of at.values()) if (p.x > breadth) breadth = p.x;\n // Room for the names: the root's before it and the leaves' after them (horizontal), or the\n // leaves' below them (vertical).\n const longest = (nodes: readonly TreeNode[]) => Math.max(0, ...nodes.map((n) => n.label.length * TICK_CHAR));\n const leaves = read.nodes.filter((n) => n.children.length === 0 && n.depth === read.depth);\n const before = horizontal ? Math.min(longest([root]) + 8, area.width / 5) : 0;\n const after = horizontal ? Math.min(longest(leaves) + 8, area.width / 3) : 14;\n const plot: Rect = horizontal\n ? { x: area.x + PLOT_INSET + before, y: area.y + PLOT_INSET, width: Math.max(area.width - 2 * PLOT_INSET - before - after, 1), height: Math.max(area.height - 2 * PLOT_INSET, 1) }\n : { x: area.x + PLOT_INSET, y: area.y + PLOT_INSET + 6, width: Math.max(area.width - 2 * PLOT_INSET, 1), height: Math.max(area.height - 2 * PLOT_INSET - 6 - after, 1) };\n const across = (x: number) => (breadth > 0 ? x / breadth : 0.5);\n const position = (node: TreeNode) => {\n const p = at.get(node.id) as { x: number; y: number };\n return horizontal\n ? { x: plot.x + (p.y / depth) * plot.width, y: plot.y + across(p.x) * plot.height }\n : { x: plot.x + across(p.x) * plot.width, y: plot.y + (p.y / depth) * plot.height };\n };\n const place = new Map(read.nodes.map((n) => [n, position(n)] as const));\n\n // Links, parent to child: an exact cubic with its tangents along the depth (encoding: the tree is the data).\n for (const node of read.nodes) {\n if (node === root) continue;\n const a = place.get(node.parent as TreeNode) as { x: number; y: number };\n const b = place.get(node) as { x: number; y: number };\n const d = horizontal\n ? `M${a.x},${a.y}C${(a.x + b.x) / 2},${a.y},${(a.x + b.x) / 2},${b.y},${b.x},${b.y}`\n : `M${a.x},${a.y}C${a.x},${(a.y + b.y) / 2},${b.x},${(a.y + b.y) / 2},${b.x},${b.y}`;\n strokes.push({ d, role: 'encoding', part: 'ink' });\n }\n for (const node of read.nodes) {\n const p = place.get(node) as { x: number; y: number };\n strokes.push({ d: circlePath(p.x, p.y, NODE_RADIUS), role: 'encoding', part: 'ink' });\n }\n\n // Names: each leaf past its node, the root before it, an inner node beside it; thinned so none\n // collide (the table and the announcement name every node, REQ-121).\n const lastAt = new Map<number, number>();\n for (const node of read.nodes) {\n const p = place.get(node) as { x: number; y: number };\n // Only the deepest leaves have the room past them; a shallower leaf is named as an inner node is.\n const leaf = node.children.length === 0 && node.depth === read.depth;\n const lane = horizontal ? (leaf ? Number.POSITIVE_INFINITY : node.depth) : leaf ? Number.POSITIVE_INFINITY : node.depth;\n const along = horizontal ? p.y : p.x;\n const room = horizontal ? LABEL_GAP : Math.min(node.label.length, 12) * TICK_CHAR;\n const previous = lastAt.get(lane);\n if (previous !== undefined && Math.abs(along - previous) < room) continue;\n lastAt.set(lane, along);\n if (horizontal) {\n const text = fitText(node.label, leaf ? after - 8 : node === root ? before - 4 : plot.width / depth - 12);\n labels.push(leaf ? { x: p.x + 6, y: p.y + 3, text, kind: 'tick', part: 'axis', anchor: 'start' } : { x: p.x - 6, y: p.y - 4, text, kind: 'tick', part: 'axis', anchor: 'end' });\n } else {\n const text = fitText(node.label, 12 * TICK_CHAR);\n labels.push(leaf ? { x: p.x, y: p.y + 13, text, kind: 'tick', part: 'axis', anchor: 'middle' } : { x: p.x + 6, y: p.y - 4, text, kind: 'tick', part: 'axis', anchor: 'start' });\n }\n }\n\n const hitAreas: HitArea[] = nodeHitAreas(\n read,\n read.nodes.map((node) => {\n const p = place.get(node) as { x: number; y: number };\n return { node, x: p.x, y: p.y, box: { x: p.x - NODE_RADIUS, y: p.y - NODE_RADIUS, width: 2 * NODE_RADIUS, height: 2 * NODE_RADIUS } };\n }),\n );\n\n // One heightened element (REQ-442): the root.\n const r = place.get(root) as { x: number; y: number };\n const mark = circlePath(r.x, r.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 const description = props.description ?? `${base.name}. Tidy tree, ${horizontal ? 'left to right' : 'top to bottom'}, of ${treeSummary(read, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `TreeChart` recipe (REQ-418): a tidy node-link tree, horizontal or vertical. */\nexport const treeChart: ChartRecipe<TreeChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildTreeChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `WaffleChart` (REQ-414): 1 000 kWh of household energy in five uses. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const WAFFLE_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { use: 'Heating', kwh: 412 },\n { use: 'Water heating', kwh: 263 },\n { use: 'Appliances', kwh: 158 },\n { use: 'Lighting', kwh: 97 },\n { use: 'Cooking', kwh: 70 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const WAFFLE_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n nameKey: 'use',\n valueKey: 'kwh',\n} as const);\n","import type { ChartModel, ChartRecipe, HitArea, Rect, RecipeContext, Stroke, TextLabel, ToneLevel, WaffleChartProps } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { PLOT_INSET } from '../shared/cartesian';\nimport { rectPath, warnValue } from '../shared/cells';\nimport { checkWhole } from '../shared/contracts';\nimport { accessorName, formatNumber, formatValue } from '../shared/format';\nimport { checkSectors, readSectors, ringTones, sectorLegend } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { allocateCells } from '../shared/stats';\nimport { WAFFLE_CHART_DEMO, WAFFLE_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'WaffleChart';\nconst DEFAULT_CELLS = 100;\nconst DEFAULT_COLUMNS = 10;\n/** Cells drawn at most: past it a cell is too small to see (the field ceiling, API delta §12). */\nconst MAX_CELLS = 3600;\n/** The gap between cells, as a share of a cell's side. */\nconst GAP = 0.18;\nconst LEGEND_GAP = 14;\nconst PERCENT: Intl.NumberFormatOptions = { style: 'percent', maximumFractionDigits: 0 };\n\nfunction buildWaffleChart(props: WaffleChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? WAFFLE_CHART_DEMO;\n const nameKey = usesDemo ? WAFFLE_CHART_DEMO_KEYS.nameKey : (props.nameKey ?? 'name');\n const valueKey = usesDemo ? WAFFLE_CHART_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = accessorName(valueKey, 'value');\n const cells = Math.min(checkWhole(CHART, 'cells', props.cells, 1) ?? DEFAULT_CELLS, MAX_CELLS);\n const columns = Math.min(checkWhole(CHART, 'columns', props.columns, 1) ?? DEFAULT_COLUMNS, cells);\n checkSectors(CHART, valueName, data.length);\n\n const sectors = readSectors(data, nameKey, valueKey, CHART, locale);\n const counts = allocateCells(sectors.map((s) => s.value), cells);\n const total = sectors.reduce((sum, s) => sum + s.value, 0);\n const share = (value: number) => (total > 0 ? formatNumber(value / total, locale, PERCENT) : '—');\n const byRow = new Map(sectors.map((s, k) => [s.index, k]));\n const base = modelBase(CHART, props, context, 'Waffle chart', {\n columns: [accessorName(nameKey, 'name'), valueName, 'cells', 'share'],\n rows: data.map((_, index) => {\n const k = byRow.get(index);\n if (k === undefined) return ['—', '—', '—', '—'];\n const s = sectors[k] as (typeof sectors)[number];\n return [s.name, formatValue(s.value, locale, numberFormat), String(counts[k]), 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 area = 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 waffle has nothing to divide.');\n if (sectors.length === 0 || total <= 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot: area, strokes, labels }, data.length === 0);\n\n // Square cells, as large as the area allows; the legend beside them names every category.\n const rows = Math.ceil(cells / columns);\n const inner = { x: area.x + PLOT_INSET, y: area.y + PLOT_INSET, width: Math.max(area.width - 2 * PLOT_INSET, 1), height: Math.max(area.height - 2 * PLOT_INSET, 1) };\n const side = Math.min(inner.width / 2 / columns, inner.height / rows);\n const plot: Rect = { x: inner.x, y: inner.y, width: side * columns, height: side * rows };\n const gap = side * GAP;\n const cell = (n: number): Rect => ({ x: plot.x + (n % columns) * side + gap / 2, y: plot.y + Math.floor(n / columns) * side + gap / 2, width: side - gap, height: side - gap });\n\n // Reading order, category by category: each category's cells are one path (I-4 counts elements).\n const tones = ringTones(counts);\n const paths: string[] = [];\n let next = 0;\n sectors.forEach((s, k) => {\n const n = counts[k] as number;\n const own = Array.from({ length: n }, (_, j) => cell(next + j));\n const d = own.map(rectPath).join('');\n paths.push(d);\n if (d) strokes.push({ d, role: 'encoding', part: 'ink', tone: tones[k] as ToneLevel });\n const first = own[0] ?? cell(Math.min(next, cells - 1));\n hitAreas.push({ seriesKey: valueName, index: s.index, datum: s.datum, value: s.value, x: first.x + first.width / 2, y: first.y + first.height / 2, ...(own[0] ? { box: own[0] } : {}) });\n next += n;\n });\n\n const x = plot.x + plot.width + LEGEND_GAP;\n const key = sectorLegend({ x, y: area.y, width: Math.max(area.x + area.width - x, 1), height: area.height }, sectors.map((s, k) => ({ name: s.name, share: share(s.value), tone: tones[k] as ToneLevel })));\n strokes.push(...key.strokes);\n labels.push(...key.labels);\n\n // One heightened element (REQ-442): the largest category's cells, as one path (I-4).\n let largest = 0;\n sectors.forEach((s, k) => {\n if (s.value > (sectors[largest] as (typeof sectors)[number]).value) largest = k;\n });\n strokes.push({ d: paths[largest] as string, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const top = sectors[largest] as (typeof sectors)[number];\n const description =\n props.description ??\n `${base.name}. Waffle of ${cells} cells in ${columns} columns, filled in reading order by ${sectors.length} categories totalling ${formatNumber(total, locale, numberFormat)}; one cell is about ${formatNumber(total / cells, locale, numberFormat)}. The largest is ${top.name}, ${counts[largest]} cells, ${share(top.value)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `WaffleChart` recipe (REQ-414): a unit grid filled in reading order by category, cells by largest remainder. */\nexport const waffleChart: ChartRecipe<WaffleChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildWaffleChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `MarimekkoChart` (REQ-415): sales by region and channel, columns of unequal totals. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const MARIMEKKO_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { region: 'North', channel: 'Retail', sales: 115 },\n { region: 'North', channel: 'Online', sales: 80 },\n { region: 'North', channel: 'Wholesale', sales: 37 },\n { region: 'North', channel: 'Direct', sales: 67 },\n { region: 'South', channel: 'Retail', sales: 178 },\n { region: 'South', channel: 'Online', sales: 133 },\n { region: 'South', channel: 'Wholesale', sales: 168 },\n { region: 'South', channel: 'Direct', sales: 108 },\n { region: 'East', channel: 'Retail', sales: 90 },\n { region: 'East', channel: 'Online', sales: 72 },\n { region: 'East', channel: 'Wholesale', sales: 21 },\n { region: 'East', channel: 'Direct', sales: 213 },\n { region: 'West', channel: 'Retail', sales: 257 },\n { region: 'West', channel: 'Online', sales: 301 },\n { region: 'West', channel: 'Wholesale', sales: 387 },\n { region: 'West', channel: 'Direct', sales: 171 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const MARIMEKKO_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n columnKey: 'region',\n segmentKey: 'channel',\n valueKey: 'sales',\n} as const);\n","import type { ChartModel, ChartRecipe, HitArea, MarimekkoChartProps, Rect, RecipeContext, Stroke, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET, legend } from '../shared/cartesian';\nimport { rectPath, ringTone, warnValue } from '../shared/cells';\nimport { readMosaic } from '../shared/contracts';\nimport { accessorName, fitText, formatNumber } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { MARIMEKKO_CHART_DEMO, MARIMEKKO_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'MarimekkoChart';\n/** Room at the left for the share ticks. */\nconst TICKS = 30;\n/** The gap between columns, in px: the columns' widths still sum to the plot's less the gaps. */\nconst GAP = 2;\nconst PERCENT: Intl.NumberFormatOptions = { style: 'percent', maximumFractionDigits: 0 };\n\nfunction buildMarimekkoChart(props: MarimekkoChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? MARIMEKKO_CHART_DEMO;\n const k = MARIMEKKO_CHART_DEMO_KEYS;\n const columnKey = usesDemo ? k.columnKey : (props.columnKey ?? 'column');\n const segmentKey = usesDemo ? k.segmentKey : (props.segmentKey ?? 'segment');\n const valueKey = usesDemo ? k.valueKey : (props.valueKey ?? 'value');\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const format = (v: number) => formatNumber(v, locale, numberFormat);\n const percent = (v: number) => formatNumber(v, locale, PERCENT);\n\n const mosaic = readMosaic(CHART, data, { column: columnKey, segment: segmentKey, value: valueKey });\n const totals = mosaic.values.map((row) => row.reduce((sum, v) => sum + v, 0));\n const grand = totals.reduce((sum, t) => sum + t, 0);\n const base = modelBase(CHART, props, context, 'Marimekko chart', {\n columns: [accessorName(columnKey, 'column'), ...mosaic.segments, 'total'],\n rows: mosaic.columns.map((column, c) => [column, ...(mosaic.values[c] ?? []).map(format), `${format(totals[c] as number)}, ${grand > 0 ? percent((totals[c] as number) / grand) : '—'}`]),\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 segments' legend names every segment above the plot (REQ-440): tone only repeats it.\n const tones = mosaic.segments.map((_, s) => ringTone(s, mosaic.segments.length));\n const key = legend(card.area, mosaic.segments.map((name, s) => ({ name, part: 'ink' as const, tone: tones[s] as ToneLevel })));\n const area = key.area;\n const plot: Rect = { x: area.x + TICKS, y: area.y + PLOT_INSET, width: Math.max(area.width - TICKS - PLOT_INSET, 1), height: Math.max(area.height - AXIS_BAND - PLOT_INSET, 1) };\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (mosaic.columns.length > 0 && grand <= 0) warnValue(CHART, accessorName(valueKey, 'value'), 'Every value is zero; a Marimekko has nothing to divide.');\n if (mosaic.columns.length === 0 || grand <= 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n strokes.push(...key.strokes);\n labels.push(...key.labels);\n\n // Both axes at 100 %: the share ticks of every column.\n for (const share of [0, 0.5, 1]) {\n const y = plot.y + plot.height * (1 - share);\n labels.push({ x: plot.x - 4, y: y + 3, text: percent(share), kind: 'tick', part: 'axis', anchor: 'end' });\n }\n const drawn = mosaic.columns.filter((_, c) => (totals[c] as number) > 0).length;\n const room = plot.width - GAP * Math.max(drawn - 1, 0);\n const cells: { d: string; value: number }[] = [];\n let x = plot.x;\n mosaic.columns.forEach((column, c) => {\n const total = totals[c] as number;\n if (total <= 0) return;\n const width = (room * total) / grand;\n // Segments top to bottom in their order; each one's height is its share of the column.\n let y = plot.y;\n mosaic.segments.forEach((segment, s) => {\n const value = (mosaic.values[c] as number[])[s] as number;\n if (value <= 0) return;\n const height = (plot.height * value) / total;\n const box = { x, y, width, height };\n const d = rectPath(box);\n strokes.push({ d, role: 'encoding', part: 'ink', tone: tones[s] as ToneLevel });\n cells.push({ d, value });\n hitAreas.push({\n seriesKey: segment,\n index: c,\n datum: Object.freeze({ column, segment, value, share: value / total, columnShare: total / grand }),\n value,\n x: x + width / 2,\n y: y + height / 2,\n box,\n cell: { column: c, row: s },\n });\n y += height;\n });\n labels.push({ x: x + width / 2, y: area.y + area.height - 5, text: fitText(`${column} ${percent(total / grand)}`, width), kind: 'tick', part: 'axis', anchor: 'middle' });\n x += width + GAP;\n });\n\n // One heightened element (REQ-442): the largest cell, the cell itself.\n const largest = cells.reduce((a, b) => (b.value > a.value ? b : a), cells[0] as { d: string; value: number });\n strokes.push({ d: largest.d, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const widest = mosaic.columns[totals.indexOf(Math.max(...totals))] ?? '';\n const description =\n props.description ??\n `${base.name}. Marimekko of ${mosaic.columns.length} columns by ${mosaic.segments.length} segments, totalling ${format(grand)}: each column is as wide as its share of the whole, each segment as tall as its share of the column. The widest column is ${widest}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `MarimekkoChart` recipe (REQ-415): column width ∝ total, segment height ∝ share, both axes at 100 %. */\nexport const marimekkoChart: ChartRecipe<MarimekkoChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildMarimekkoChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `ParallelCoordinatesChart` (REQ-419): 30 bicycles on five dimensions of very different scales. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const PARALLEL_COORDINATES_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { model: 'Model 01', mass: 13.9, gears: 15, price: 3434, range: 125, rating: 1.5 },\n { model: 'Model 02', mass: 8.6, gears: 22, price: 3897, range: 29, rating: 3.8 },\n { model: 'Model 03', mass: 19.5, gears: 13, price: 3202, range: 62, rating: 2.9 },\n { model: 'Model 04', mass: 12.7, gears: 15, price: 2760, range: 28, rating: 2.2 },\n { model: 'Model 05', mass: 22.8, gears: 21, price: 485, range: 39, rating: 2.9 },\n { model: 'Model 06', mass: 20.1, gears: 22, price: 1178, range: 60, rating: 3.1 },\n { model: 'Model 07', mass: 22.5, gears: 8, price: 3952, range: 40, rating: 4.8 },\n { model: 'Model 08', mass: 22.6, gears: 16, price: 1407, range: 133, rating: 1.7 },\n { model: 'Model 09', mass: 18.3, gears: 18, price: 2982, range: 126, rating: 3.4 },\n { model: 'Model 10', mass: 19.1, gears: 11, price: 2060, range: 24, rating: 2.1 },\n { model: 'Model 11', mass: 13.9, gears: 9, price: 2430, range: 78, rating: 2.5 },\n { model: 'Model 12', mass: 18.4, gears: 11, price: 1046, range: 42, rating: 1.3 },\n { model: 'Model 13', mass: 9, gears: 5, price: 343, range: 55, rating: 4 },\n { model: 'Model 14', mass: 16.7, gears: 13, price: 3837, range: 36, rating: 4 },\n { model: 'Model 15', mass: 20.8, gears: 18, price: 3644, range: 107, rating: 4.8 },\n { model: 'Model 16', mass: 16.2, gears: 14, price: 4053, range: 28, rating: 1.5 },\n { model: 'Model 17', mass: 15.9, gears: 13, price: 1664, range: 114, rating: 1.3 },\n { model: 'Model 18', mass: 10.4, gears: 4, price: 3600, range: 75, rating: 1.9 },\n { model: 'Model 19', mass: 20.6, gears: 14, price: 1052, range: 124, rating: 3.5 },\n { model: 'Model 20', mass: 17, gears: 4, price: 2367, range: 50, rating: 3.5 },\n { model: 'Model 21', mass: 21, gears: 6, price: 2545, range: 96, rating: 3.1 },\n { model: 'Model 22', mass: 20.1, gears: 22, price: 3674, range: 115, rating: 3.2 },\n { model: 'Model 23', mass: 18.7, gears: 13, price: 2686, range: 108, rating: 1.8 },\n { model: 'Model 24', mass: 21.4, gears: 7, price: 863, range: 60, rating: 2.6 },\n { model: 'Model 25', mass: 12.8, gears: 12, price: 4163, range: 95, rating: 2.4 },\n { model: 'Model 26', mass: 22.9, gears: 3, price: 3148, range: 135, rating: 3.5 },\n { model: 'Model 27', mass: 12.6, gears: 12, price: 3104, range: 124, rating: 4.2 },\n { model: 'Model 28', mass: 18.2, gears: 10, price: 2765, range: 131, rating: 2.3 },\n { model: 'Model 29', mass: 18.3, gears: 8, price: 922, range: 106, rating: 3.9 },\n { model: 'Model 30', mass: 9, gears: 9, price: 886, range: 32, rating: 2 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const PARALLEL_COORDINATES_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n labelKey: 'model',\n dimensions: /* @__PURE__ */ Object.freeze(['mass', 'gears', 'price', 'range', 'rating']),\n} as const);\n","import { linearScale } from '../../scales/scales';\nimport { extent } from '../../scales/util';\nimport type { ChartModel, ChartRecipe, HitArea, ParallelCoordinatesChartProps, Rect, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { AXIS_BAND, PLOT_INSET } from '../shared/cartesian';\nimport { warnValue } from '../shared/cells';\nimport { readWideRows } from '../shared/contracts';\nimport { accessorName, circlePath, fitText, formatNumber, numberFormatter } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { PARALLEL_COORDINATES_CHART_DEMO, PARALLEL_COORDINATES_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'ParallelCoordinatesChart';\nconst HEIGHTEN_RADIUS = 3.5;\n/** Room above the axes for the dimension names and below them for the minimum ticks. */\nconst HEAD = 14;\n/** Room at each side, so the first and last axes' ticks are not clipped. */\nconst SIDE = 22;\n\n/** A valid domain: two finite, increasing bounds. */\nconst validDomain = (raw: unknown): readonly [number, number] | undefined =>\n Array.isArray(raw) && raw.length === 2 && Number.isFinite(raw[0]) && Number.isFinite(raw[1]) && (raw[0] as number) < (raw[1] as number) ? [raw[0] as number, raw[1] as number] : undefined;\n\nfunction buildParallelCoordinatesChart(props: ParallelCoordinatesChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? PARALLEL_COORDINATES_CHART_DEMO;\n const labelKey = usesDemo ? PARALLEL_COORDINATES_CHART_DEMO_KEYS.labelKey : props.labelKey;\n const dimensions = usesDemo ? PARALLEL_COORDINATES_CHART_DEMO_KEYS.dimensions : (props.dimensions ?? []);\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const format = numberFormatter(locale, numberFormat);\n const labelName = labelKey === undefined ? 'row' : accessorName(labelKey, 'label');\n\n const rows = readWideRows(CHART, data, labelKey, dimensions);\n const byIndex = new Map(rows.map((r) => [r.index, r]));\n const base = modelBase(CHART, props, context, 'Parallel coordinates', {\n columns: [labelName, ...dimensions],\n rows: data.map((_, index) => {\n const row = byIndex.get(index);\n return row ? [row.label ?? `#${index + 1}`, ...row.values.map(format)] : ['—', ...dimensions.map(() => '—')];\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 area = card.area;\n const plot: Rect = { x: area.x + SIDE, y: area.y + HEAD + PLOT_INSET, width: Math.max(area.width - 2 * SIDE, 1), height: Math.max(area.height - HEAD - AXIS_BAND - PLOT_INSET, 1) };\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (dimensions.length < 2) warnValue(CHART, 'dimensions', `${dimensions.length} dimensions; parallel coordinates need at least 2.`);\n if (rows.length === 0 || dimensions.length < 2) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n // Each axis' domain: the one given (REQ-097), else the data's extent, niced.\n const given = props.domains ?? {};\n let outside = 0;\n const axes = dimensions.map((name, d) => {\n const x = plot.x + (plot.width * d) / (dimensions.length - 1);\n const domain = validDomain(given[name]);\n const scale = linearScale(domain ?? extent(rows.map((r) => r.values[d] as number)) ?? [0, 1], [plot.y + plot.height, plot.y], { chart: CHART, property: name, padding: 0, nice: domain === undefined });\n const [lo, hi] = scale.domain;\n strokes.push({ d: `M${x},${plot.y}V${plot.y + plot.height}`, role: 'ornament', part: 'axis' });\n labels.push({ x, y: area.y + 10, text: fitText(name, plot.width / Math.max(dimensions.length - 1, 1)), kind: 'tick', part: 'axis', anchor: 'middle' });\n labels.push({ x: x + 3, y: plot.y + 3, text: formatNumber(hi, locale, numberFormat), kind: 'tick', part: 'axis', anchor: 'start' });\n labels.push({ x: x + 3, y: plot.y + plot.height + 10, text: formatNumber(lo, locale, numberFormat), kind: 'tick', part: 'axis', anchor: 'start' });\n // A value outside a given domain is drawn at the axis' end (SP002).\n const y = (v: number) => {\n if (v < lo || v > hi) outside += 1;\n return scale(Math.min(Math.max(v, lo), hi));\n };\n return { x, y, given: domain !== undefined };\n });\n\n // One polyline per row, in data order; the first row's drawn heavier, as the one heightened.\n const vertices = rows.map((row) => row.values.map((v, d) => ({ x: (axes[d] as (typeof axes)[number]).x, y: (axes[d] as (typeof axes)[number]).y(v) })));\n if (outside > 0) warnValue(CHART, 'domains', `${outside} values lie outside their given domain; they are drawn at the axis' end.`);\n rows.forEach((row, r) => {\n const at = vertices[r] as { x: number; y: number }[];\n strokes.push({ d: at.map((p, d) => `${d === 0 ? 'M' : 'L'}${p.x},${p.y}`).join(''), role: 'encoding', part: 'ink', ...(r === 0 ? { weight: 2 } : {}) });\n row.values.forEach((value, d) => {\n const p = at[d] as { x: number; y: number };\n hitAreas.push({ seriesKey: dimensions[d] as string, index: row.index, datum: row.datum, value, x: p.x, y: p.y, cell: { column: d, row: r } });\n });\n });\n\n // One heightened element (REQ-442): the first row, marked where it meets the first axis. A\n // heightening is a fill (the grounds' rule), so an open line carries it as a mark at its start.\n const start = (vertices[0] as { x: number; y: number }[])[0] as { x: number; y: number };\n const mark = circlePath(start.x, start.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 const derived = axes.filter((a) => !a.given).length;\n const description =\n props.description ??\n `${base.name}. Parallel coordinates of ${rows.length} rows on ${dimensions.length} axes, ${dimensions.join(', ')}; ${\n derived === dimensions.length ? 'every axis spans its data, niced' : derived === 0 ? 'every axis spans its given domain' : `${derived} axes span their data, niced, the rest their given domain`\n }. The first row, ${rows[0]?.label ?? '#1'}, is drawn heavier.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `ParallelCoordinatesChart` recipe (REQ-419): one axis per dimension, one polyline per row. */\nexport const parallelCoordinatesChart: ChartRecipe<ParallelCoordinatesChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildParallelCoordinatesChart });\n","/**\n * The grid of the polar line and the polar scatter (REQ-420, REQ-421): a radius scale from 0 with a\n * ring at each tick, and spokes at the angle's natural steps, named at the rim. The grid carries no\n * data (ornament); the angle is in the units of `period`, clockwise from `startAngle`.\n */\nimport { linearScale, type LinearScale } from '../../scales/scales';\nimport type { Stroke, TextLabel } from '../../types';\nimport { circlePath, formatNumber } from './format';\nimport { RIM_LABELS, pointAt, polarLabel, type PolarFrame } from './polar';\n\nconst TURN = 2 * Math.PI;\n\n/** The angle in radians, clockwise from 12 o'clock, of `angle` in units of `period`. */\nexport function angleOf(angle: number, period: number, startAngle: number): number {\n return (startAngle / 360) * TURN + (angle / period) * TURN;\n}\n\n/**\n * A radius scale from 0 to the largest value, niced, with a ring and its value at each tick (the\n * values at 12 o'clock, as the radar's).\n */\nexport function radialAxis(\n frame: PolarFrame,\n largest: number,\n options: { readonly chart: string; readonly property: string; readonly locale: string; readonly numberFormat: Intl.NumberFormatOptions | undefined },\n): { scale: LinearScale; strokes: Stroke[]; labels: TextLabel[] } {\n const scale = linearScale([0, largest > 0 ? largest : 1], [0, frame.radius], { chart: options.chart, property: options.property, padding: 0, nice: true, fromZero: true });\n const strokes: Stroke[] = [];\n const labels: TextLabel[] = [];\n for (const tick of scale.ticks(3)) {\n const r = scale(tick);\n if (r <= 0) continue;\n strokes.push({ d: circlePath(frame.cx, frame.cy, r), role: 'ornament', part: 'grid', paint: 'stroke' });\n // A ring by the rim would put its value under the angle named 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, options.locale, options.numberFormat), kind: 'tick', part: 'axis', anchor: 'start' });\n }\n return { scale, strokes, labels };\n}\n\n/**\n * Spokes at the angle's steps: one per unit when the period is a whole number up to 24 (months,\n * hours), else every eighth of a turn; each named at the rim in the angle's own units.\n */\nexport function angleSpokes(frame: PolarFrame, period: number, startAngle: number, locale: string): { strokes: Stroke[]; labels: TextLabel[] } {\n const steps = Number.isInteger(period) && period <= 24 ? period : 8;\n const strokes: Stroke[] = [];\n const labels: TextLabel[] = [];\n for (let k = 0; k < steps; k += 1) {\n const value = (period * k) / steps;\n const angle = angleOf(value, period, startAngle);\n const end = pointAt(frame, angle, frame.radius);\n strokes.push({ d: `M${frame.cx},${frame.cy}L${end.x},${end.y}`, role: 'ornament', part: 'grid' });\n labels.push(polarLabel(frame, angle, frame.radius + 7, formatNumber(value, locale, { maximumFractionDigits: 1 })));\n }\n return { strokes, labels };\n}\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `PolarLineChart` (REQ-420): rainfall in mm by month, 0 to 11, closed over `period: 12`. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const POLAR_LINE_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { month: 0, rain: 82 },\n { month: 1, rain: 62 },\n { month: 2, rain: 54 },\n { month: 3, rain: 45 },\n { month: 4, rain: 57 },\n { month: 5, rain: 38 },\n { month: 6, rain: 27 },\n { month: 7, rain: 30 },\n { month: 8, rain: 48 },\n { month: 9, rain: 71 },\n { month: 10, rain: 91 },\n { month: 11, rain: 86 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const POLAR_LINE_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n angleKey: 'month',\n valueKey: 'rain',\n period: 12,\n} as const);\n","import type { ChartModel, ChartRecipe, HitArea, PolarLineChartProps, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { finite } from '../shared/cells';\nimport { checkCeiling, checkPositive, readPolarPoints } from '../shared/contracts';\nimport { accessorName, circlePath, formatNumber, formatValue, read } from '../shared/format';\nimport { RIM_LABELS, pointAt, polarFrame } from '../shared/polar';\nimport { angleOf, angleSpokes, radialAxis } from '../shared/radial';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { POLAR_LINE_CHART_DEMO, POLAR_LINE_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'PolarLineChart';\nconst DOT_RADIUS = 2.5;\nconst HEIGHTEN_RADIUS = 3.5;\n/** The turn when no `period` is given: degrees (Data Model §2.21). */\nconst DEGREES = 360;\n\nfunction buildPolarLineChart(props: PolarLineChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? POLAR_LINE_CHART_DEMO;\n const angleKey = usesDemo ? POLAR_LINE_CHART_DEMO_KEYS.angleKey : (props.angleKey ?? 'angle');\n const valueKey = usesDemo ? POLAR_LINE_CHART_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n // `period` says the angle's units, so it goes with the data (REQ-099); given, the line closes.\n const given = usesDemo ? POLAR_LINE_CHART_DEMO_KEYS.period : checkPositive(CHART, 'period', props.period);\n const period = given ?? DEGREES;\n const closed = given !== undefined;\n const startAngle = finite(props.startAngle) ?? 0;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const angleName = accessorName(angleKey, 'angle');\n const valueName = accessorName(valueKey, 'value');\n\n const points = readPolarPoints(CHART, data, { angle: angleKey, value: valueKey }, period);\n checkCeiling(CHART, valueName, 'points', points.length);\n const base = modelBase(CHART, props, context, 'Polar line', {\n columns: [angleName, valueName],\n rows: data.map((datum, index) => [formatValue(read(angleKey, datum, index), locale, { maximumFractionDigits: 2 }), formatValue(read(valueKey, 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 = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (points.length === 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 axis = radialAxis(frame, Math.max(...points.map((p) => p.value)), { chart: CHART, property: valueName, locale, numberFormat });\n const spokes = angleSpokes(frame, period, startAngle, locale);\n strokes.push(...spokes.strokes, ...axis.strokes);\n labels.push(...spokes.labels, ...axis.labels);\n\n // In angle order, ties by row: the line runs round the circle, closing when the angle is cyclic.\n const ordered = [...points].sort((a, b) => a.angle - b.angle || a.index - b.index);\n const at = ordered.map((p) => pointAt(frame, angleOf(p.angle, period, startAngle), axis.scale(p.value)));\n strokes.push({ d: at.map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x},${p.y}`).join('') + (closed && at.length > 2 ? 'Z' : ''), role: 'encoding', part: 'ink' });\n ordered.forEach((p, i) => {\n const q = at[i] as { x: number; y: number };\n strokes.push({ d: circlePath(q.x, q.y, DOT_RADIUS), role: 'encoding', part: 'ink' });\n hitAreas.push({ seriesKey: valueName, index: p.index, datum: p.datum, value: p.value, x: q.x, y: q.y });\n });\n\n // One heightened element (REQ-442): the maximum point.\n let top = 0;\n ordered.forEach((p, i) => {\n if (p.value > (ordered[top] as (typeof ordered)[number]).value) top = i;\n });\n const peak = at[top] as { x: number; y: number };\n const mark = circlePath(peak.x, peak.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 const best = ordered[top] as (typeof ordered)[number];\n const description =\n props.description ??\n `${base.name}. Polar line of ${points.length} ${valueName} values by ${angleName}, one turn being ${formatNumber(period, locale, undefined)}${closed ? ', closed' : ''}; radius from 0, the maximum ${formatNumber(best.value, locale, numberFormat)} at ${formatNumber(best.angle, locale, { maximumFractionDigits: 2 })}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `PolarLineChart` recipe (REQ-420): a line over angle × radius, closed when the angle is cyclic. */\nexport const polarLineChart: ChartRecipe<PolarLineChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildPolarLineChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `PolarScatterChart` (REQ-421): 150 sightings by bearing in degrees and distance in km, one cluster across north. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const POLAR_SCATTER_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { bearing: 28, distance: 2.5 },\n { bearing: 149.6, distance: 1.4 },\n { bearing: 229.3, distance: 19.6 },\n { bearing: 15.5, distance: 1.6 },\n { bearing: 130.5, distance: 16.6 },\n { bearing: 250.7, distance: 7 },\n { bearing: 348.7, distance: 2.6 },\n { bearing: 115.9, distance: 16.3 },\n { bearing: 242.6, distance: 3.8 },\n { bearing: 39.1, distance: 2.3 },\n { bearing: 136.4, distance: 1.6 },\n { bearing: 243.8, distance: 1.7 },\n { bearing: 26.8, distance: 2.2 },\n { bearing: 132.6, distance: 4.6 },\n { bearing: 260.3, distance: 6.5 },\n { bearing: 0.3, distance: 13.4 },\n { bearing: 130, distance: 2 },\n { bearing: 241.4, distance: 13.4 },\n { bearing: 10.2, distance: 3 },\n { bearing: 121.9, distance: 1.4 },\n { bearing: 279.5, distance: 8.1 },\n { bearing: 28.3, distance: 4.4 },\n { bearing: 116.7, distance: 3.5 },\n { bearing: 201.4, distance: 2.9 },\n { bearing: 7.7, distance: 1.7 },\n { bearing: 106.7, distance: 1 },\n { bearing: 279.8, distance: 5.8 },\n { bearing: 348.5, distance: 4.8 },\n { bearing: 136.8, distance: 8 },\n { bearing: 259.4, distance: 12.2 },\n { bearing: 344.1, distance: 3.5 },\n { bearing: 139.9, distance: 3.9 },\n { bearing: 241.5, distance: 11.7 },\n { bearing: 359.7, distance: 5.3 },\n { bearing: 117.4, distance: 5.3 },\n { bearing: 272, distance: 1.9 },\n { bearing: 355.2, distance: 5.2 },\n { bearing: 103.6, distance: 2 },\n { bearing: 271.4, distance: 3.5 },\n { bearing: 25, distance: 6.3 },\n { bearing: 120.3, distance: 1.9 },\n { bearing: 277.2, distance: 8 },\n { bearing: 13.8, distance: 11.4 },\n { bearing: 138.6, distance: 2.5 },\n { bearing: 255.4, distance: 4.1 },\n { bearing: 14.4, distance: 3.4 },\n { bearing: 135.8, distance: 4.2 },\n { bearing: 242.7, distance: 11.6 },\n { bearing: 20.5, distance: 2.4 },\n { bearing: 113.3, distance: 1.2 },\n { bearing: 248.6, distance: 12.8 },\n { bearing: 3.8, distance: 8 },\n { bearing: 129.6, distance: 1.3 },\n { bearing: 214.4, distance: 3.8 },\n { bearing: 20.8, distance: 3.4 },\n { bearing: 135.3, distance: 3.3 },\n { bearing: 244.8, distance: 1.4 },\n { bearing: 2.8, distance: 3.1 },\n { bearing: 128.1, distance: 0.9 },\n { bearing: 219.5, distance: 4.2 },\n { bearing: 3.5, distance: 5.4 },\n { bearing: 138.4, distance: 17.1 },\n { bearing: 246.4, distance: 3.2 },\n { bearing: 345.8, distance: 6.3 },\n { bearing: 141.1, distance: 3.4 },\n { bearing: 262.5, distance: 6.6 },\n { bearing: 356.7, distance: 4.8 },\n { bearing: 154.3, distance: 3.5 },\n { bearing: 237.3, distance: 2.6 },\n { bearing: 23.5, distance: 6.1 },\n { bearing: 136.7, distance: 3.4 },\n { bearing: 242.9, distance: 2.3 },\n { bearing: 0.8, distance: 4.1 },\n { bearing: 94.1, distance: 6.5 },\n { bearing: 253.1, distance: 1.1 },\n { bearing: 346.2, distance: 6.7 },\n { bearing: 137.3, distance: 2.6 },\n { bearing: 258, distance: 7.2 },\n { bearing: 1.5, distance: 3.4 },\n { bearing: 140.7, distance: 4.5 },\n { bearing: 226.8, distance: 4 },\n { bearing: 4.2, distance: 1.2 },\n { bearing: 114.4, distance: 5 },\n { bearing: 247.3, distance: 3.9 },\n { bearing: 34.7, distance: 14.8 },\n { bearing: 125.9, distance: 6 },\n { bearing: 231.7, distance: 12 },\n { bearing: 31.6, distance: 3 },\n { bearing: 131.9, distance: 3.1 },\n { bearing: 242, distance: 3.9 },\n { bearing: 5.2, distance: 1.5 },\n { bearing: 130.1, distance: 13.1 },\n { bearing: 260.9, distance: 2.5 },\n { bearing: 334.1, distance: 7.7 },\n { bearing: 159.8, distance: 13.9 },\n { bearing: 252.2, distance: 12.1 },\n { bearing: 18.4, distance: 5.3 },\n { bearing: 115, distance: 6.6 },\n { bearing: 259.5, distance: 0.7 },\n { bearing: 357.6, distance: 4.6 },\n { bearing: 157.5, distance: 3.7 },\n { bearing: 224.4, distance: 2.9 },\n { bearing: 23.9, distance: 1.9 },\n { bearing: 127.8, distance: 10.5 },\n { bearing: 221.4, distance: 1.8 },\n { bearing: 345.5, distance: 2.5 },\n { bearing: 110.7, distance: 0.9 },\n { bearing: 253.7, distance: 2.6 },\n { bearing: 9.8, distance: 14.9 },\n { bearing: 125.6, distance: 3.4 },\n { bearing: 264.6, distance: 3.1 },\n { bearing: 333, distance: 1.4 },\n { bearing: 132.9, distance: 9 },\n { bearing: 230.3, distance: 1.9 },\n { bearing: 4.4, distance: 8.2 },\n { bearing: 122.8, distance: 3.2 },\n { bearing: 277.7, distance: 1.2 },\n { bearing: 3.6, distance: 1.4 },\n { bearing: 133.9, distance: 3.1 },\n { bearing: 231.6, distance: 1.1 },\n { bearing: 8.6, distance: 3.4 },\n { bearing: 112.6, distance: 9.2 },\n { bearing: 250.7, distance: 2.4 },\n { bearing: 4.5, distance: 8.1 },\n { bearing: 125.2, distance: 1 },\n { bearing: 246.6, distance: 3.5 },\n { bearing: 338.9, distance: 5.4 },\n { bearing: 121.7, distance: 6.3 },\n { bearing: 273.2, distance: 3 },\n { bearing: 1.9, distance: 10.2 },\n { bearing: 122.1, distance: 5.7 },\n { bearing: 258.2, distance: 3.9 },\n { bearing: 10.1, distance: 5.7 },\n { bearing: 163.7, distance: 10.7 },\n { bearing: 222.6, distance: 3.5 },\n { bearing: 329.1, distance: 3.5 },\n { bearing: 160.5, distance: 5.1 },\n { bearing: 228.5, distance: 3.9 },\n { bearing: 356, distance: 1.9 },\n { bearing: 94.4, distance: 1.5 },\n { bearing: 255.2, distance: 7.6 },\n { bearing: 347.7, distance: 2.5 },\n { bearing: 144.5, distance: 1.7 },\n { bearing: 258.2, distance: 4.4 },\n { bearing: 19.8, distance: 12 },\n { bearing: 151.7, distance: 4.4 },\n { bearing: 266, distance: 2.8 },\n { bearing: 0.9, distance: 5.1 },\n { bearing: 145.4, distance: 3.5 },\n { bearing: 250.4, distance: 2.5 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const POLAR_SCATTER_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n angleKey: 'bearing',\n radiusKey: 'distance',\n} as const);\n","import type { ChartModel, ChartRecipe, HitArea, PolarScatterChartProps, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { checkCeiling, checkPositive, readPolarPoints } from '../shared/contracts';\nimport { accessorName, circlePath, formatNumber, formatValue, read } from '../shared/format';\nimport { RIM_LABELS, pointAt, polarFrame } from '../shared/polar';\nimport { angleOf, angleSpokes, radialAxis } from '../shared/radial';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { POLAR_SCATTER_CHART_DEMO, POLAR_SCATTER_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'PolarScatterChart';\nconst DOT_RADIUS = 2.5;\n/** With a size key, a point's area is its size: radii from the smallest to the largest here. */\nconst MIN_RADIUS = 1.5;\nconst MAX_RADIUS = 7;\nconst DEGREES = 360;\n\nfunction buildPolarScatterChart(props: PolarScatterChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? POLAR_SCATTER_CHART_DEMO;\n const angleKey = usesDemo ? POLAR_SCATTER_CHART_DEMO_KEYS.angleKey : (props.angleKey ?? 'angle');\n const radiusKey = usesDemo ? POLAR_SCATTER_CHART_DEMO_KEYS.radiusKey : (props.radiusKey ?? 'radius');\n const sizeKey = usesDemo ? undefined : props.sizeKey;\n // `period` says the angle's units, so it goes with the data (REQ-099).\n const period = (usesDemo ? undefined : checkPositive(CHART, 'period', props.period)) ?? DEGREES;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const angleName = accessorName(angleKey, 'angle');\n const radiusName = accessorName(radiusKey, 'radius');\n\n const points = readPolarPoints(CHART, data, { angle: angleKey, value: radiusKey, ...(sizeKey === undefined ? {} : { size: sizeKey }) }, period);\n checkCeiling(CHART, radiusName, 'points', points.length);\n const base = modelBase(CHART, props, context, 'Polar scatter', {\n columns: [angleName, radiusName, ...(sizeKey === undefined ? [] : [accessorName(sizeKey, 'size')])],\n rows: data.map((datum, index) => [\n formatValue(read(angleKey, datum, index), locale, { maximumFractionDigits: 2 }),\n formatValue(read(radiusKey, datum, index), locale, numberFormat),\n ...(sizeKey === undefined ? [] : [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 = card.area;\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n\n if (points.length === 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 axis = radialAxis(frame, Math.max(...points.map((p) => p.value)), { chart: CHART, property: radiusName, locale, numberFormat });\n const spokes = angleSpokes(frame, period, 0, locale);\n strokes.push(...spokes.strokes, ...axis.strokes);\n labels.push(...spokes.labels, ...axis.labels);\n\n // A point's area is its size, when there is one: the radius goes with its square root.\n const largestSize = Math.max(0, ...points.map((p) => (p.size !== undefined && p.size > 0 ? p.size : 0)));\n const radiusOf = (s: number | undefined) => (sizeKey === undefined || s === undefined || s <= 0 || largestSize <= 0 ? DOT_RADIUS : Math.max(MAX_RADIUS * Math.sqrt(s / largestSize), MIN_RADIUS));\n // In angle order, ties by row: the order the keyboard walks round the circle.\n const ordered = [...points].sort((a, b) => a.angle - b.angle || a.index - b.index);\n const marks = ordered.map((p) => {\n const q = pointAt(frame, angleOf(p.angle, period, 0), axis.scale(p.value));\n const r = radiusOf(p.size);\n const d = circlePath(q.x, q.y, r);\n strokes.push({ d, role: 'encoding', part: 'ink' });\n hitAreas.push({ seriesKey: radiusName, index: p.index, datum: p.datum, value: p.value, x: q.x, y: q.y, box: { x: q.x - r, y: q.y - r, width: 2 * r, height: 2 * r } });\n return d;\n });\n\n // One heightened element (REQ-442): the point of largest radius, the point itself.\n let far = 0;\n ordered.forEach((p, i) => {\n if (p.value > (ordered[far] as (typeof ordered)[number]).value) far = i;\n });\n strokes.push({ d: marks[far] as string, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const farthest = ordered[far] as (typeof ordered)[number];\n const description =\n props.description ??\n `${base.name}. Polar scatter of ${points.length} points, ${angleName} round the circle (one turn being ${formatNumber(period, locale, undefined)}) and ${radiusName} out from the centre${sizeKey === undefined ? '' : `, each point's area its ${accessorName(sizeKey, 'size')}`}; the farthest at ${formatNumber(farthest.value, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `PolarScatterChart` recipe (REQ-421): points over angle × radius, unbinned. */\nexport const polarScatterChart: ChartRecipe<PolarScatterChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildPolarScatterChart });\n","/**\n * The field engine of the contour and density-bin charts (DD-028, REQ-430): marching squares,\n * the Epanechnikov density splat and the 2-D bins, all owned. Only correctly rounded operations\n * are used (`+ − × ÷`, `Math.sqrt`, comparisons), so Node and every browser produce the same\n * coordinates (REQ-435).\n */\n\n/** A regular grid of values, row-major: `values[j * nx + i]`; `undefined` is a hole. */\nexport interface ScalarGrid {\n readonly nx: number;\n readonly ny: number;\n readonly values: readonly (number | undefined)[];\n}\n\nexport interface GridPoint {\n readonly x: number;\n readonly y: number;\n}\n\n/** A closed ring in grid coordinates (`x` along `i`, `y` along `j`); the first point is not repeated. */\nexport type Ring = readonly GridPoint[];\n\n/** A crossing of a level on a grid edge; `exact` when both ends of the edge are values. */\ninterface Crossing extends GridPoint {\n readonly exact: boolean;\n}\n\n/**\n * The rings bounding `{ value ≥ level }` (marching squares). The grid is read as padded by a ring\n * of holes, so every ring closes; a hole is below every level, its crossing put on the value\n * beside it. A saddle is resolved by the cell's centre, the mean of its corners. Rings are\n * oriented: walking along one, the region is always on the same side, so a hole turns the other\n * way and a region fills under the non-zero rule.\n */\nexport function isoRings(grid: ScalarGrid, level: number): Ring[] {\n return trace(grid, level).map(plain);\n}\n\n/**\n * The iso-lines at `level`: the rings' runs between exact crossings, so the grid's border and a\n * hole's edge, which bound the region but are not at the level, are not drawn. A closed line\n * repeats its first point at its end.\n */\nexport function isoLines(grid: ScalarGrid, level: number): GridPoint[][] {\n return linesOf(trace(grid, level));\n}\n\n/**\n * The rings of the band `[low, high)`: the region above `low` with the region above `high`\n * turned the other way inside it. Their signed areas sum to the band's.\n */\nexport function bandRings(grid: ScalarGrid, low: number, high?: number): Ring[] {\n return band(isoRings(grid, low), high === undefined ? undefined : isoRings(grid, high));\n}\n\n/** One level's contour: its region's rings, its iso-lines, and its band up to the next level. */\nexport interface Contour {\n readonly level: number;\n readonly rings: readonly Ring[];\n readonly lines: readonly GridPoint[][];\n readonly band: readonly Ring[];\n}\n\n/** The contours of increasing `levels`, each level traced once (REQ-445). */\nexport function contours(grid: ScalarGrid, levels: readonly number[]): Contour[] {\n const traced = levels.map((level) => trace(grid, level));\n const rings = traced.map((t) => t.map(plain));\n return levels.map((level, k) => ({\n level,\n rings: rings[k] as Ring[],\n lines: linesOf(traced[k] as Crossing[][]),\n band: band(rings[k] as Ring[], rings[k + 1]),\n }));\n}\n\nconst plain = (ring: readonly Crossing[]): Ring => ring.map(({ x, y }) => ({ x, y }));\n\nfunction band(outer: readonly Ring[], inner: readonly Ring[] | undefined): Ring[] {\n return inner === undefined ? [...outer] : [...outer, ...inner.map((ring) => [...ring].reverse())];\n}\n\nfunction linesOf(rings: readonly Crossing[][]): GridPoint[][] {\n const lines: GridPoint[][] = [];\n for (const ring of rings) {\n const n = ring.length;\n const breakAt = ring.findIndex((p, k) => !p.exact || !(ring[(k + 1) % n] as Crossing).exact);\n if (breakAt < 0) {\n lines.push([...plain(ring), { x: (ring[0] as Crossing).x, y: (ring[0] as Crossing).y }]);\n continue;\n }\n // Walk once round from the first break, cutting at every segment with an inexact end.\n let run: GridPoint[] = [];\n for (let s = 1; s <= n; s += 1) {\n const a = ring[(breakAt + s) % n] as Crossing;\n const b = ring[(breakAt + s + 1) % n] as Crossing;\n if (a.exact && b.exact) {\n if (run.length === 0) run.push({ x: a.x, y: a.y });\n run.push({ x: b.x, y: b.y });\n } else if (run.length > 0) {\n lines.push(run);\n run = [];\n }\n }\n if (run.length > 0) lines.push(run);\n }\n return lines;\n}\n\n/** Signed area of a ring (shoelace). */\nexport function ringArea(ring: Ring): number {\n let twice = 0;\n for (let k = 0; k < ring.length; k += 1) {\n const a = ring[k] as GridPoint;\n const b = ring[(k + 1) % ring.length] as GridPoint;\n twice += a.x * b.y - b.x * a.y;\n }\n return twice / 2;\n}\n\nfunction trace(grid: ScalarGrid, level: number): Crossing[][] {\n const { nx, ny, values } = grid;\n const value = (i: number, j: number) => (i < 0 || j < 0 || i >= nx || j >= ny ? undefined : values[j * nx + i]);\n const inside = (v: number | undefined) => v !== undefined && v >= level;\n // Edges of the padded grid: a key per edge, so a crossing is computed once and shared by the two\n // cells either side of it (their segments then meet to the last bit).\n const width = nx + 2;\n const edgeKey = (i: number, j: number, vertical: boolean) => ((j + 1) * width + (i + 1)) * 2 + (vertical ? 1 : 0);\n const crossings = new Map<number, Crossing>();\n const crossing = (i: number, j: number, vertical: boolean): number => {\n const key = edgeKey(i, j, vertical);\n if (!crossings.has(key)) {\n const i1 = vertical ? i : i + 1;\n const j1 = vertical ? j + 1 : j;\n const a = value(i, j);\n const b = value(i1, j1);\n let f: number;\n if (a === undefined) f = 1;\n else if (b === undefined) f = 0;\n else f = (level - a) / (b - a);\n crossings.set(key, { x: i + f * (i1 - i), y: j + f * (j1 - j), exact: a !== undefined && b !== undefined });\n }\n return key;\n };\n\n // Which vertices of the padded grid are inside, so a cell all in or all out costs four reads.\n const status = new Uint8Array(width * (ny + 2));\n for (let j = 0; j < ny; j += 1) for (let i = 0; i < nx; i += 1) if (inside(values[j * nx + i])) status[(j + 1) * width + i + 1] = 1;\n\n // Segments, each from an exit (inside to outside, walking a cell clockwise) to an entry.\n const next = new Map<number, number>();\n for (let j = -1; j < ny; j += 1) {\n for (let i = -1; i < nx; i += 1) {\n const top = (j + 1) * width + i + 1;\n const sum = (status[top] as number) + (status[top + 1] as number) + (status[top + width + 1] as number) + (status[top + width] as number);\n if (sum === 0 || sum === 4) continue;\n const corners = [value(i, j), value(i + 1, j), value(i + 1, j + 1), value(i, j + 1)];\n const ins = corners.map(inside);\n // The cell's edges clockwise: top, right, bottom (right to left), left (bottom to top).\n const edges: (() => number)[] = [() => crossing(i, j, false), () => crossing(i + 1, j, true), () => crossing(i, j + 1, false), () => crossing(i, j, true)];\n const exits: number[] = [];\n const entries: number[] = [];\n for (let k = 0; k < 4; k += 1) {\n if (ins[k] && !ins[(k + 1) % 4]) exits.push(k);\n if (!ins[k] && ins[(k + 1) % 4]) entries.push(k);\n }\n if (exits.length === 0) continue;\n let centre = false;\n if (exits.length === 2 && corners.every((c) => c !== undefined)) {\n centre = ((corners[0] as number) + (corners[1] as number) + (corners[2] as number) + (corners[3] as number)) / 4 >= level;\n }\n for (const exit of exits) {\n // Joined through the centre: the next entry clockwise; apart: the one before.\n let entry = entries[0] as number;\n if (exits.length === 2) {\n const after = entries.find((e) => e > exit) ?? (entries[0] as number);\n const before = [...entries].reverse().find((e) => e < exit) ?? (entries.at(-1) as number);\n entry = centre ? after : before;\n }\n next.set((edges[exit] as () => number)(), (edges[entry] as () => number)());\n }\n }\n }\n\n const rings: Crossing[][] = [];\n const seen = new Set<number>();\n for (const start of [...next.keys()].sort((a, b) => a - b)) {\n if (seen.has(start)) continue;\n const ring: Crossing[] = [];\n let at: number | undefined = start;\n while (at !== undefined && !seen.has(at)) {\n seen.add(at);\n const point = crossings.get(at) as Crossing;\n const last = ring.at(-1);\n // Crossings put on the same value (beside a hole or the border) collapse into one.\n if (!last || last.x !== point.x || last.y !== point.y) ring.push(point);\n at = next.get(at);\n }\n while (ring.length > 1 && (ring[0] as Crossing).x === (ring.at(-1) as Crossing).x && (ring[0] as Crossing).y === (ring.at(-1) as Crossing).y) ring.pop();\n if (ring.length >= 3) rings.push(ring);\n }\n return rings;\n}\n\n/**\n * The density of a point cloud on a regular grid of `nx × ny` nodes spanning `domain`, with the\n * product Epanechnikov kernel `¾(1 − u²) · ¾(1 − v²)` and bandwidths in data units (DD-029): a\n * splat, polynomial, summed over the points in `(x, y)` order so the result does not depend on the\n * order of the rows (I-23). Rows run along `y`, ascending.\n */\nexport function densityGrid(\n points: readonly GridPoint[],\n domain: { readonly x: readonly [number, number]; readonly y: readonly [number, number] },\n nx: number,\n ny: number,\n bandwidth: { readonly x: number; readonly y: number },\n): ScalarGrid & { readonly values: readonly number[] } {\n const [x0, x1] = domain.x;\n const [y0, y1] = domain.y;\n const dx = nx > 1 ? (x1 - x0) / (nx - 1) : 1;\n const dy = ny > 1 ? (y1 - y0) / (ny - 1) : 1;\n const hx = bandwidth.x;\n const hy = bandwidth.y;\n const values = new Float64Array(nx * ny);\n const sorted = [...points].sort((a, b) => a.x - b.x || a.y - b.y);\n const scale = sorted.length * hx * hy;\n for (const p of sorted) {\n const iLow = Math.max(0, Math.ceil((p.x - hx - x0) / dx));\n const iHigh = Math.min(nx - 1, Math.floor((p.x + hx - x0) / dx));\n const jLow = Math.max(0, Math.ceil((p.y - hy - y0) / dy));\n const jHigh = Math.min(ny - 1, Math.floor((p.y + hy - y0) / dy));\n // The kernel's two factors, once per column and per row of the point's footprint.\n const across: number[] = [];\n for (let i = iLow; i <= iHigh; i += 1) {\n const u = (x0 + i * dx - p.x) / hx;\n across.push(u < -1 || u > 1 ? 0 : 0.75 * (1 - u * u));\n }\n for (let j = jLow; j <= jHigh; j += 1) {\n const v = (y0 + j * dy - p.y) / hy;\n if (v < -1 || v > 1) continue;\n const kv = (0.75 * (1 - v * v)) / scale;\n const row = j * nx;\n for (let i = iLow; i <= iHigh; i += 1) values[row + i] = (values[row + i] as number) + (across[i - iLow] as number) * kv;\n }\n }\n return { nx, ny, values: Array.from(values) };\n}\n\n/** A 2-D bin: its centre, its place (row, then column), the points in it by index. */\nexport interface Bin2D {\n readonly cx: number;\n readonly cy: number;\n readonly column: number;\n readonly row: number;\n readonly count: number;\n readonly indices: readonly number[];\n}\n\ninterface Indexed extends GridPoint {\n readonly index: number;\n}\n\nfunction collect(points: readonly Indexed[], place: (p: Indexed) => { column: number; row: number; cx: number; cy: number }): Bin2D[] {\n const bins = new Map<string, { column: number; row: number; cx: number; cy: number; indices: number[] }>();\n for (const p of points) {\n const at = place(p);\n const key = `${at.row},${at.column}`;\n const bin = bins.get(key);\n if (bin) bin.indices.push(p.index);\n else bins.set(key, { ...at, indices: [p.index] });\n }\n return [...bins.values()]\n .sort((a, b) => a.row - b.row || a.column - b.column)\n .map((b) => ({ cx: b.cx, cy: b.cy, column: b.column, row: b.row, count: b.indices.length, indices: b.indices.sort((x, y) => x - y) }));\n}\n\n/**\n * Hexagonal bins, pointy-top, `size` px across the flats, the lattice anchored at `origin`. A\n * point goes to the nearer of the two candidate centres, so each hexagon is exactly the set of\n * points nearest its centre.\n */\nexport function hexBins(points: readonly Indexed[], size: number, origin: GridPoint): Bin2D[] {\n const r = size / Math.sqrt(3);\n const dy = 1.5 * r;\n const centre = (column: number, row: number) => ({ column, row, cx: origin.x + (column + (row & 1) / 2) * size, cy: origin.y + row * dy });\n return collect(points, (p) => {\n // The rectangle of rows `row` and `row + 1` holds the point: its centre is one of four.\n const row = Math.floor((p.y - origin.y) / dy);\n let best = centre(0, 0);\n let distance = Number.POSITIVE_INFINITY;\n for (const j of [row, row + 1]) {\n const column = Math.round((p.x - origin.x) / size - (j & 1) / 2);\n for (const i of [column - 1, column, column + 1]) {\n const c = centre(i, j);\n const d = (p.x - c.cx) * (p.x - c.cx) + (p.y - c.cy) * (p.y - c.cy);\n if (d < distance) {\n distance = d;\n best = c;\n }\n }\n }\n return best;\n });\n}\n\n/** Square bins of side `size` px, anchored at `origin`. */\nexport function rectBins(points: readonly Indexed[], size: number, origin: GridPoint): Bin2D[] {\n return collect(points, (p) => {\n const column = Math.floor((p.x - origin.x) / size);\n const row = Math.floor((p.y - origin.y) / size);\n return { column, row, cx: origin.x + (column + 0.5) * size, cy: origin.y + (row + 0.5) * size };\n });\n}\n\n/**\n * A pointy-top hexagon `size` px across the flats, centred at `(cx, cy)`; its two vertical sides\n * are written as `V`, so a cloud of bins weighs less (NFR §7).\n */\nexport function hexagonPath(cx: number, cy: number, size: number): string {\n const r = size / Math.sqrt(3);\n const h = size / 2;\n return `M${cx},${cy - r}L${cx + h},${cy - r / 2}V${cy + r / 2}L${cx},${cy + r}L${cx - h},${cy + r / 2}V${cy - r / 2}Z`;\n}\n","import { linearScale, type LinearScale } from '../../scales/scales';\nimport type { Rect, Stroke, TextLabel } from '../../types';\nimport { TICK_CHAR, valueAxis } from './cartesian';\nimport { inset } from './cells';\nimport { formatNumber } from './format';\n\n/**\n * The x-y frame the field charts share (DD-036) — density bins, contours, Delaunay, vector field —\n * as the connected scatter draws it: the value axis up the left with its grid, `x` niced across\n * after the value labels, its ticks under the plot. `region` is where the data's extent maps.\n */\nexport interface XYFrame {\n readonly x: LinearScale;\n readonly y: LinearScale;\n readonly region: Rect;\n readonly strokes: readonly Stroke[];\n readonly labels: readonly TextLabel[];\n}\n\nexport function xyFrame(\n area: Rect,\n plot: Rect,\n domain: { readonly x: readonly [number, number]; readonly y: readonly [number, number] },\n options: {\n readonly chart: string;\n readonly xName: string;\n readonly yName: string;\n readonly padding: number;\n readonly locale: string;\n readonly numberFormat: Intl.NumberFormatOptions | undefined;\n /** Room inside the plot for marks centred on its edge. */\n readonly inset: number;\n },\n): XYFrame {\n const inner = inset(plot, options.inset);\n const { chart, padding, locale, numberFormat } = options;\n const axis = valueAxis(inner, domain.y, { chart, property: options.yName, padding, locale, numberFormat, zero: false });\n const gutter = Math.min(Math.max(0, ...axis.labels.map((l) => l.text.length * TICK_CHAR)) + 6, inner.width / 3);\n const x = linearScale(domain.x, [inner.x + gutter, inner.x + inner.width], { chart, property: options.xName, padding, nice: true });\n const labels: TextLabel[] = [...axis.labels];\n for (const tick of x.ticks(4)) {\n labels.push({ x: x(tick), y: area.y + area.height - 5, text: formatNumber(tick, locale, numberFormat), kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n const region = { x: inner.x + gutter, y: inner.y, width: Math.max(inner.width - gutter, 1), height: inner.height };\n return { x, y: axis.scale, region, strokes: axis.strokes, labels };\n}\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `DensityBinChart` (REQ-422): 1 200 points from two overlapping clusters. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const DENSITY_BIN_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 18.48, y: 44.44 },\n { x: 38.26, y: 64.71 },\n { x: 39.92, y: 61.68 },\n { x: 38.71, y: 58.23 },\n { x: 42.91, y: 56.15 },\n { x: 47.49, y: 71.55 },\n { x: 26.68, y: 41.44 },\n { x: 31.44, y: 62.22 },\n { x: 32.33, y: 55.33 },\n { x: 44.8, y: 73.12 },\n { x: 25.8, y: 32.3 },\n { x: 33.77, y: 60.57 },\n { x: 51.08, y: 57.14 },\n { x: 26.63, y: 53.5 },\n { x: 47.35, y: 78.81 },\n { x: 29.94, y: 62.06 },\n { x: 39.28, y: 53.69 },\n { x: 40.55, y: 56.85 },\n { x: 32.99, y: 44.73 },\n { x: 17.73, y: 55.74 },\n { x: 39.31, y: 64.48 },\n { x: 16.32, y: 42.02 },\n { x: 28.1, y: 63.13 },\n { x: 16.85, y: 50.77 },\n { x: 26.81, y: 53.85 },\n { x: 20.75, y: 57.7 },\n { x: 23.21, y: 64.42 },\n { x: 32.3, y: 43.5 },\n { x: 32.52, y: 66.57 },\n { x: 20.16, y: 57.82 },\n { x: 27.08, y: 52.77 },\n { x: 44.9, y: 48.23 },\n { x: 44.27, y: 66.62 },\n { x: 31.8, y: 57.41 },\n { x: 51.2, y: 71.63 },\n { x: 47.49, y: 62.7 },\n { x: 39.6, y: 62.4 },\n { x: 37.24, y: 63.31 },\n { x: 40.53, y: 66.45 },\n { x: 25.04, y: 53.54 },\n { x: 28.57, y: 58.54 },\n { x: 26.96, y: 48.12 },\n { x: 52.53, y: 63.56 },\n { x: 44.78, y: 81.02 },\n { x: 29.58, y: 50.75 },\n { x: 39.49, y: 63.42 },\n { x: 21.95, y: 48.31 },\n { x: 50.2, y: 79.32 },\n { x: 34.37, y: 57.6 },\n { x: 32.77, y: 66.83 },\n { x: 37.41, y: 63.5 },\n { x: 31.2, y: 63.89 },\n { x: 37.97, y: 56.3 },\n { x: 24.51, y: 46.3 },\n { x: 52.19, y: 72.84 },\n { x: 19.17, y: 36.52 },\n { x: 32.75, y: 56.59 },\n { x: 31.38, y: 51.94 },\n { x: 23.08, y: 51.87 },\n { x: 38.62, y: 80.32 },\n { x: 22.22, y: 48.3 },\n { x: 10.68, y: 45.69 },\n { x: 38.78, y: 83.52 },\n { x: 38.66, y: 54.91 },\n { x: 47.56, y: 69.77 },\n { x: 46.21, y: 69.54 },\n { x: 54.63, y: 77.76 },\n { x: 41.15, y: 77.16 },\n { x: 48.52, y: 72.72 },\n { x: 21.73, y: 42.52 },\n { x: 27.44, y: 69.05 },\n { x: 32.89, y: 72.07 },\n { x: 26.88, y: 36.81 },\n { x: 27.27, y: 54.97 },\n { x: 18.48, y: 53.01 },\n { x: 25.58, y: 60.46 },\n { x: 23.17, y: 51.32 },\n { x: 20.83, y: 31.96 },\n { x: 31.99, y: 70.88 },\n { x: 28.63, y: 55.39 },\n { x: 34.9, y: 49.27 },\n { x: 32, y: 57.31 },\n { x: 24.29, y: 61.51 },\n { x: 31.14, y: 44.41 },\n { x: 34.29, y: 53.53 },\n { x: 22.42, y: 47.7 },\n { x: 41.77, y: 65.87 },\n { x: 32, y: 54.17 },\n { x: 45.74, y: 57.44 },\n { x: 32.17, y: 55.47 },\n { x: 44.76, y: 65.43 },\n { x: 40.7, y: 77.45 },\n { x: 22.41, y: 28.25 },\n { x: 44.61, y: 69.09 },\n { x: 30.23, y: 51.25 },\n { x: 48.2, y: 59.76 },\n { x: 31.89, y: 47.52 },\n { x: 22.48, y: 51 },\n { x: 34.02, y: 59.42 },\n { x: 24.56, y: 58.9 },\n { x: 32.97, y: 44.71 },\n { x: 44.87, y: 59.64 },\n { x: 28.53, y: 43.48 },\n { x: 28, y: 56.22 },\n { x: 51.96, y: 74.48 },\n { x: 45.45, y: 52.24 },\n { x: 36.13, y: 51.18 },\n { x: 47.5, y: 83.25 },\n { x: 29.84, y: 62.32 },\n { x: 29.93, y: 59.02 },\n { x: 32.21, y: 52.02 },\n { x: 40.74, y: 67.59 },\n { x: 38.98, y: 65.14 },\n { x: 24.68, y: 46.18 },\n { x: 29.5, y: 52.85 },\n { x: 40.33, y: 75.04 },\n { x: 32.67, y: 52.62 },\n { x: 35.41, y: 55.17 },\n { x: 24.83, y: 50.29 },\n { x: 24.54, y: 40.21 },\n { x: 26.22, y: 56.08 },\n { x: 21.89, y: 53.74 },\n { x: 45.31, y: 71.79 },\n { x: 28.63, y: 60.24 },\n { x: 39.03, y: 63.02 },\n { x: 42.69, y: 53.38 },\n { x: 37.97, y: 71.04 },\n { x: 49.03, y: 79.35 },\n { x: 19.03, y: 54.85 },\n { x: 43.57, y: 48.67 },\n { x: 30.89, y: 72.9 },\n { x: 36.33, y: 50.95 },\n { x: 25.24, y: 47.84 },\n { x: 38.6, y: 55.99 },\n { x: 50.78, y: 68.03 },\n { x: 33.12, y: 73.23 },\n { x: 32.17, y: 75.32 },\n { x: 38.68, y: 43.81 },\n { x: 25.14, y: 47.07 },\n { x: 36.03, y: 69.7 },\n { x: 30.93, y: 52.22 },\n { x: 37.27, y: 51.75 },\n { x: 43.22, y: 63.73 },\n { x: 33.53, y: 54.54 },\n { x: 39.85, y: 59.85 },\n { x: 26.44, y: 52.68 },\n { x: 43.48, y: 50.42 },\n { x: 43.94, y: 56.13 },\n { x: 30.87, y: 58.51 },\n { x: 25.68, y: 53.77 },\n { x: 33.92, y: 59.48 },\n { x: 43.71, y: 66.53 },\n { x: 31.47, y: 43.77 },\n { x: 20.35, y: 33.36 },\n { x: 34.68, y: 48.8 },\n { x: 32.67, y: 50.24 },\n { x: 44.52, y: 59.13 },\n { x: 21.38, y: 52.15 },\n { x: 18.98, y: 50.59 },\n { x: 53.96, y: 80.18 },\n { x: 33.71, y: 58.13 },\n { x: 36.89, y: 77.92 },\n { x: 29.81, y: 59.44 },\n { x: 37.44, y: 49.48 },\n { x: 48.11, y: 65.74 },\n { x: 42.34, y: 71.44 },\n { x: 44.65, y: 59.27 },\n { x: 26.27, y: 57.86 },\n { x: 33.35, y: 48.1 },\n { x: 33.81, y: 46.03 },\n { x: 42.08, y: 79.78 },\n { x: 47.91, y: 68.98 },\n { x: 39.32, y: 65.57 },\n { x: 32.09, y: 61.53 },\n { x: 44.04, y: 57.78 },\n { x: 23.98, y: 52.25 },\n { x: 32.74, y: 70.21 },\n { x: 46.59, y: 72.18 },\n { x: 36.87, y: 39.41 },\n { x: 39.62, y: 61.5 },\n { x: 27.47, y: 42.47 },\n { x: 20.63, y: 54.07 },\n { x: 23.78, y: 48.48 },\n { x: 34.9, y: 53.82 },\n { x: 25.95, y: 77.94 },\n { x: 47.35, y: 59.89 },\n { x: 42.99, y: 62.02 },\n { x: 34.7, y: 53.06 },\n { x: 27.85, y: 48.85 },\n { x: 23.97, y: 61.95 },\n { x: 21.2, y: 67.03 },\n { x: 35.1, y: 61.23 },\n { x: 38.61, y: 66.79 },\n { x: 28.61, y: 43.93 },\n { x: 44.83, y: 70.63 },\n { x: 25.26, y: 56.97 },\n { x: 35.75, y: 67.29 },\n { x: 41.72, y: 61.28 },\n { x: 30.71, y: 54.38 },\n { x: 22.65, y: 56.16 },\n { x: 29.86, y: 45.36 },\n { x: 46.68, y: 59.62 },\n { x: 40.99, y: 67.75 },\n { x: 51.53, y: 77.33 },\n { x: 29.86, y: 74.61 },\n { x: 22.8, y: 50.46 },\n { x: 28.02, y: 56.07 },\n { x: 30.82, y: 64.72 },\n { x: 28.12, y: 64.08 },\n { x: 33.65, y: 63.48 },\n { x: 15.76, y: 56.61 },\n { x: 30.73, y: 59.74 },\n { x: 39.42, y: 49.98 },\n { x: 45.87, y: 69.07 },\n { x: 44.27, y: 61.19 },\n { x: 30.53, y: 55.59 },\n { x: 46.63, y: 52.83 },\n { x: 30.42, y: 51.58 },\n { x: 31.67, y: 57.39 },\n { x: 25.04, y: 56.83 },\n { x: 26.6, y: 53.01 },\n { x: 39.05, y: 69.3 },\n { x: 39.91, y: 77.76 },\n { x: 31.06, y: 47.63 },\n { x: 34.72, y: 53.43 },\n { x: 44.85, y: 62.92 },\n { x: 42.66, y: 67.49 },\n { x: 30.95, y: 66.27 },\n { x: 38.37, y: 70.35 },\n { x: 43.05, y: 60.83 },\n { x: 43.89, y: 67.5 },\n { x: 42.25, y: 65.71 },\n { x: 30.1, y: 40.65 },\n { x: 31.47, y: 59.56 },\n { x: 41.36, y: 59.41 },\n { x: 20.64, y: 50.99 },\n { x: 31.3, y: 65.1 },\n { x: 18.78, y: 41.06 },\n { x: 25.97, y: 48.98 },\n { x: 15.75, y: 32.86 },\n { x: 13.84, y: 26.3 },\n { x: 29.48, y: 67.96 },\n { x: 25.77, y: 58.25 },\n { x: 33, y: 47.53 },\n { x: 42.17, y: 50.98 },\n { x: 42.99, y: 57.97 },\n { x: 36.43, y: 79.15 },\n { x: 24.33, y: 48.18 },\n { x: 33.88, y: 56.07 },\n { x: 43.23, y: 56.78 },\n { x: 33.88, y: 56.12 },\n { x: 27.01, y: 41.23 },\n { x: 37.65, y: 66.65 },\n { x: 49.72, y: 73.77 },\n { x: 25.56, y: 38.54 },\n { x: 30.79, y: 36.75 },\n { x: 39.54, y: 67.51 },\n { x: 30.23, y: 50.04 },\n { x: 47.51, y: 71.64 },\n { x: 28.03, y: 69.65 },\n { x: 45.44, y: 59.79 },\n { x: 24.8, y: 61.04 },\n { x: 60.38, y: 56.02 },\n { x: 39.05, y: 60.48 },\n { x: 39.95, y: 70.41 },\n { x: 25.77, y: 60.89 },\n { x: 35.9, y: 65.27 },\n { x: 29.34, y: 55.84 },\n { x: 35.49, y: 52.44 },\n { x: 30.9, y: 54.15 },\n { x: 26.34, y: 47.82 },\n { x: 24.56, y: 59.85 },\n { x: 29.81, y: 63.01 },\n { x: 20.71, y: 64.37 },\n { x: 34.17, y: 73.09 },\n { x: 26.8, y: 50.58 },\n { x: 19.9, y: 41.12 },\n { x: 28.52, y: 61.26 },\n { x: 42.81, y: 70.8 },\n { x: 36.07, y: 51.75 },\n { x: 33.18, y: 66.69 },\n { x: 32.15, y: 56.04 },\n { x: 41.98, y: 62.6 },\n { x: 29.58, y: 48.12 },\n { x: 43.88, y: 63.19 },\n { x: 39.65, y: 70.24 },\n { x: 25.2, y: 51.74 },\n { x: 50.2, y: 82.21 },\n { x: 44.03, y: 59.16 },\n { x: 31.93, y: 61.96 },\n { x: 28.07, y: 55.49 },\n { x: 35.22, y: 62.71 },\n { x: 19.34, y: 58.11 },\n { x: 36.53, y: 70.95 },\n { x: 41.26, y: 81.35 },\n { x: 14.71, y: 44.04 },\n { x: 50.11, y: 61.78 },\n { x: 19.26, y: 47.02 },\n { x: 42.55, y: 56.89 },\n { x: 18.69, y: 33.04 },\n { x: 21.95, y: 43.8 },\n { x: 33.21, y: 52.5 },\n { x: 44.73, y: 43.43 },\n { x: 37.93, y: 58.67 },\n { x: 43.83, y: 65.93 },\n { x: 45.66, y: 46.99 },\n { x: 21.84, y: 48.34 },\n { x: 24.66, y: 52.25 },\n { x: 38.18, y: 61.11 },\n { x: 36.99, y: 67.75 },\n { x: 43.48, y: 74.82 },\n { x: 31.37, y: 53.5 },\n { x: 42.46, y: 55.25 },\n { x: 29.04, y: 44.44 },\n { x: 24.83, y: 47.12 },\n { x: 41.66, y: 63.88 },\n { x: 34.18, y: 67.91 },\n { x: 43.41, y: 71.74 },\n { x: 36.72, y: 67.46 },\n { x: 30.95, y: 48.41 },\n { x: 34.99, y: 63.71 },\n { x: 25.43, y: 46.92 },\n { x: 26.6, y: 49.55 },\n { x: 23.37, y: 54.84 },\n { x: 34.39, y: 69.55 },\n { x: 31.99, y: 72.18 },\n { x: 29.32, y: 62.81 },\n { x: 37.73, y: 70.11 },\n { x: 44.63, y: 57.88 },\n { x: 42.28, y: 52.71 },\n { x: 34.2, y: 70.06 },\n { x: 36.39, y: 55 },\n { x: 26.81, y: 56.73 },\n { x: 38.18, y: 73.95 },\n { x: 39.44, y: 69.15 },\n { x: 41.71, y: 60.03 },\n { x: 24.63, y: 49.26 },\n { x: 31.52, y: 43.76 },\n { x: 50.46, y: 93.71 },\n { x: 28.76, y: 45.87 },\n { x: 46.95, y: 73.87 },\n { x: 49.23, y: 78.51 },\n { x: 37.98, y: 61.61 },\n { x: 31.7, y: 74.29 },\n { x: 38.35, y: 58.84 },\n { x: 43.31, y: 65.5 },\n { x: 29.7, y: 47.19 },\n { x: 38.75, y: 59.67 },\n { x: 20.03, y: 41.74 },\n { x: 37.71, y: 51.88 },\n { x: 35.29, y: 59.98 },\n { x: 36.62, y: 51.84 },\n { x: 42.36, y: 53.81 },\n { x: 46.32, y: 54.87 },\n { x: 32.93, y: 62.47 },\n { x: 37.93, y: 54.87 },\n { x: 33.93, y: 51.89 },\n { x: 22.77, y: 58.83 },\n { x: 6.55, y: 35.34 },\n { x: 24.46, y: 43.93 },\n { x: 25.17, y: 37.24 },\n { x: 31.04, y: 69.97 },\n { x: 35.47, y: 60.56 },\n { x: 22.51, y: 47.67 },\n { x: 26.78, y: 58.5 },\n { x: 20.71, y: 38.47 },\n { x: 32.06, y: 68.03 },\n { x: 41.22, y: 61.84 },\n { x: 37.96, y: 55.06 },\n { x: 41.9, y: 76.87 },\n { x: 34.05, y: 70.4 },\n { x: 35.17, y: 60.75 },\n { x: 48.5, y: 61.31 },\n { x: 15.96, y: 50.43 },\n { x: 50.44, y: 81.97 },\n { x: 36.15, y: 72.83 },\n { x: 29.8, y: 71.72 },\n { x: 37.81, y: 64.11 },\n { x: 22.56, y: 59.03 },\n { x: 45.01, y: 73.41 },\n { x: 32.56, y: 38.6 },\n { x: 42.77, y: 63.68 },\n { x: 45.83, y: 60.08 },\n { x: 39.2, y: 53.41 },\n { x: 46.12, y: 51.28 },\n { x: 37.35, y: 51.19 },\n { x: 25.01, y: 53.55 },\n { x: 20.92, y: 38.11 },\n { x: 24.41, y: 52.89 },\n { x: 29.5, y: 60.57 },\n { x: 42.79, y: 61.27 },\n { x: 34.15, y: 53.29 },\n { x: 17.92, y: 51.26 },\n { x: 36.56, y: 47.34 },\n { x: 39.29, y: 70.84 },\n { x: 23.44, y: 64.99 },\n { x: 39.11, y: 49.11 },\n { x: 39.64, y: 77.26 },\n { x: 30.88, y: 75.93 },\n { x: 23.03, y: 37.94 },\n { x: 36.9, y: 59.28 },\n { x: 31.55, y: 49.32 },\n { x: 35.29, y: 61.61 },\n { x: 12.15, y: 53.44 },\n { x: 36.32, y: 42.95 },\n { x: 35.57, y: 54.84 },\n { x: 53.2, y: 80.97 },\n { x: 37.45, y: 80.01 },\n { x: 42.65, y: 71.37 },\n { x: 14.51, y: 61.16 },\n { x: 39.42, y: 71.73 },\n { x: 53.5, y: 62.02 },\n { x: 36.97, y: 62.15 },\n { x: 35.31, y: 73.55 },\n { x: 31.19, y: 64.27 },\n { x: 38.15, y: 53.74 },\n { x: 39.58, y: 73.86 },\n { x: 26.99, y: 48.57 },\n { x: 43.75, y: 75.87 },\n { x: 38.82, y: 72.91 },\n { x: 36.67, y: 57.63 },\n { x: 42.7, y: 78.68 },\n { x: 12.27, y: 43.9 },\n { x: 39.02, y: 62.95 },\n { x: 38.2, y: 74.67 },\n { x: 41.94, y: 63.5 },\n { x: 14.76, y: 49.11 },\n { x: 41.12, y: 51.33 },\n { x: 26.3, y: 56.02 },\n { x: 31.64, y: 53.93 },\n { x: 44.75, y: 60.14 },\n { x: 26.62, y: 49.02 },\n { x: 54.2, y: 92.21 },\n { x: 37.27, y: 76.45 },\n { x: 26.89, y: 40.45 },\n { x: 37.36, y: 80.37 },\n { x: 28.8, y: 57.19 },\n { x: 39.32, y: 65.36 },\n { x: 35, y: 58.64 },\n { x: 20.06, y: 64.8 },\n { x: 43.28, y: 62.04 },\n { x: 39.18, y: 69.22 },\n { x: 45.77, y: 59.73 },\n { x: 29.32, y: 66.99 },\n { x: 19.69, y: 58 },\n { x: 36.26, y: 63.36 },\n { x: 27.84, y: 52.85 },\n { x: 34.72, y: 74.23 },\n { x: 50.94, y: 61.8 },\n { x: 33.07, y: 52.68 },\n { x: 29.74, y: 67.69 },\n { x: 45.55, y: 75.19 },\n { x: 31.52, y: 47.03 },\n { x: 42.55, y: 62.25 },\n { x: 38.49, y: 47.73 },\n { x: 13.08, y: 55.99 },\n { x: 30.82, y: 66.36 },\n { x: 31.2, y: 49.83 },\n { x: 28.6, y: 47.64 },\n { x: 44.66, y: 53.51 },\n { x: 32.06, y: 44.37 },\n { x: 41.61, y: 57.38 },\n { x: 31.31, y: 71.28 },\n { x: 36.71, y: 75.18 },\n { x: 41.67, y: 69.93 },\n { x: 38.85, y: 63.5 },\n { x: 28.06, y: 59.49 },\n { x: 36.35, y: 72.71 },\n { x: 30.66, y: 59.39 },\n { x: 21.47, y: 54.42 },\n { x: 30.14, y: 49.52 },\n { x: 46.19, y: 83.73 },\n { x: 41.21, y: 44.9 },\n { x: 29.47, y: 41.77 },\n { x: 38.18, y: 74.84 },\n { x: 28.25, y: 54.02 },\n { x: 38.95, y: 72.89 },\n { x: 30.98, y: 50.28 },\n { x: 40.41, y: 57.79 },\n { x: 35.75, y: 41.34 },\n { x: 37.83, y: 69.88 },\n { x: 15.96, y: 52.74 },\n { x: 18.93, y: 57.49 },\n { x: 52.5, y: 55.18 },\n { x: 15.17, y: 25.07 },\n { x: 36.24, y: 66.16 },\n { x: 38.54, y: 60.4 },\n { x: 23.26, y: 45.25 },\n { x: 35.77, y: 51.87 },\n { x: 32.37, y: 64.55 },\n { x: 37.35, y: 61.98 },\n { x: 30.96, y: 49.99 },\n { x: 41.22, y: 62.62 },\n { x: 23.44, y: 54.36 },\n { x: 46.9, y: 58.63 },\n { x: 34.03, y: 43.82 },\n { x: 33.36, y: 47.04 },\n { x: 33.04, y: 44.76 },\n { x: 45.25, y: 61.86 },\n { x: 43.46, y: 63.25 },\n { x: 36.86, y: 54.46 },\n { x: 36.54, y: 55.71 },\n { x: 31.32, y: 48.43 },\n { x: 39.64, y: 55.12 },\n { x: 32.12, y: 45.5 },\n { x: 30.79, y: 64.26 },\n { x: 24.17, y: 46.62 },\n { x: 24.57, y: 58.18 },\n { x: 33.84, y: 43.52 },\n { x: 34.45, y: 63.52 },\n { x: 18.43, y: 39.14 },\n { x: 26.62, y: 62.94 },\n { x: 30.9, y: 62.2 },\n { x: 43.97, y: 87.12 },\n { x: 42.61, y: 70.76 },\n { x: 28.55, y: 50 },\n { x: 16.64, y: 57.92 },\n { x: 16.51, y: 56.4 },\n { x: 42.38, y: 66.18 },\n { x: 27.73, y: 56.71 },\n { x: 34.37, y: 57.78 },\n { x: 40.1, y: 45.25 },\n { x: 30.56, y: 42.02 },\n { x: 22.05, y: 51.67 },\n { x: 32.95, y: 61.06 },\n { x: 21.02, y: 66.85 },\n { x: 23.84, y: 52.58 },\n { x: 48.93, y: 64.94 },\n { x: 40.59, y: 59.14 },\n { x: 23.95, y: 42.65 },\n { x: 25.14, y: 61.69 },\n { x: 30.9, y: 69.86 },\n { x: 32.88, y: 57.93 },\n { x: 45.71, y: 59.95 },\n { x: 39.48, y: 67.76 },\n { x: 29.78, y: 41.77 },\n { x: 35.03, y: 82.35 },\n { x: 47.09, y: 72.79 },\n { x: 37.95, y: 73.95 },\n { x: 41.96, y: 65.12 },\n { x: 23.9, y: 44.55 },\n { x: 41.22, y: 64.34 },\n { x: 22.58, y: 59.15 },\n { x: 36.68, y: 73.13 },\n { x: 26.03, y: 60.9 },\n { x: 57.26, y: 84.66 },\n { x: 25.53, y: 54.84 },\n { x: 35.49, y: 46.45 },\n { x: 42.59, y: 72.57 },\n { x: 42.83, y: 59.2 },\n { x: 44.45, y: 86.36 },\n { x: 39.91, y: 59.21 },\n { x: 40.22, y: 63.99 },\n { x: 27.46, y: 63.2 },\n { x: 50.02, y: 72.78 },\n { x: 19.53, y: 39.72 },\n { x: 42.81, y: 65.57 },\n { x: 27.46, y: 55.63 },\n { x: 47.21, y: 74.3 },\n { x: 47.91, y: 69.27 },\n { x: 43.69, y: 61.94 },\n { x: 32.39, y: 80.17 },\n { x: 43.87, y: 81.03 },\n { x: 13.9, y: 40.55 },\n { x: 44.22, y: 72.34 },\n { x: 37.06, y: 59.19 },\n { x: 31.34, y: 39.39 },\n { x: 45.27, y: 69.53 },\n { x: 34.86, y: 62.47 },\n { x: 55.18, y: 84.27 },\n { x: 10.14, y: 29.14 },\n { x: 22.98, y: 37.28 },\n { x: 37.56, y: 69.15 },\n { x: 54.71, y: 93.12 },\n { x: 45.34, y: 66.31 },\n { x: 32.33, y: 69.28 },\n { x: 36.14, y: 70.33 },\n { x: 24.05, y: 53.3 },\n { x: 47.37, y: 47.28 },\n { x: 40.94, y: 53.83 },\n { x: 36.02, y: 59.22 },\n { x: 43.02, y: 66.23 },\n { x: 41.04, y: 72.49 },\n { x: 32.68, y: 43.99 },\n { x: 31, y: 48.56 },\n { x: 33.45, y: 40.86 },\n { x: 36.76, y: 57.1 },\n { x: 40.59, y: 68.82 },\n { x: 40.55, y: 58.53 },\n { x: 35.4, y: 50.95 },\n { x: 23.34, y: 54.59 },\n { x: 20.69, y: 66.08 },\n { x: 35.15, y: 56.46 },\n { x: 22.2, y: 58.9 },\n { x: 42.44, y: 67.64 },\n { x: 36.23, y: 60.05 },\n { x: 46.19, y: 63.69 },\n { x: 53.98, y: 81.3 },\n { x: 33.41, y: 76.56 },\n { x: 35.54, y: 51.82 },\n { x: 46.54, y: 89.9 },\n { x: 40.21, y: 51.82 },\n { x: 33.24, y: 66.93 },\n { x: 29.93, y: 51.52 },\n { x: 48.25, y: 62.55 },\n { x: 28.12, y: 56.15 },\n { x: 28.67, y: 62.63 },\n { x: 31.68, y: 41.1 },\n { x: 35.14, y: 52.82 },\n { x: 57.36, y: 62.11 },\n { x: 41.19, y: 53.68 },\n { x: 30.49, y: 52.54 },\n { x: 36.14, y: 73.45 },\n { x: 58.56, y: 75 },\n { x: 36.42, y: 67.7 },\n { x: 30.84, y: 49.83 },\n { x: 31.1, y: 62.45 },\n { x: 33.03, y: 41.98 },\n { x: 38.58, y: 62.48 },\n { x: 46.22, y: 73.91 },\n { x: 39.75, y: 59.91 },\n { x: 51.08, y: 73.41 },\n { x: 16.09, y: 49.54 },\n { x: 46.28, y: 63.35 },\n { x: 28.79, y: 61.01 },\n { x: 42.28, y: 81.13 },\n { x: 29.86, y: 55.29 },\n { x: 35.76, y: 62.56 },\n { x: 35.06, y: 71.36 },\n { x: 29.19, y: 57.03 },\n { x: 42.75, y: 66.4 },\n { x: 22.04, y: 37.41 },\n { x: 43.99, y: 61.54 },\n { x: 49.86, y: 66.66 },\n { x: 40.76, y: 72.14 },\n { x: 46.11, y: 72.02 },\n { x: 29.56, y: 54.55 },\n { x: 22.67, y: 38.56 },\n { x: 26.86, y: 37.61 },\n { x: 47.41, y: 72.04 },\n { x: 25.16, y: 46.84 },\n { x: 48.97, y: 77.62 },\n { x: 31.19, y: 62.28 },\n { x: 37.94, y: 76.89 },\n { x: 31.63, y: 53.71 },\n { x: 33.47, y: 49.74 },\n { x: 51.63, y: 66.68 },\n { x: 29.99, y: 49.27 },\n { x: 19.08, y: 51.39 },\n { x: 41.17, y: 54.77 },\n { x: 44.12, y: 69.52 },\n { x: 33.05, y: 66.7 },\n { x: 38.54, y: 52.42 },\n { x: 19.78, y: 65.06 },\n { x: 43.74, y: 76 },\n { x: 32.17, y: 59.28 },\n { x: 47.92, y: 63.21 },\n { x: 31.4, y: 82.39 },\n { x: 50.78, y: 79.01 },\n { x: 39.39, y: 58.66 },\n { x: 19.64, y: 47.27 },\n { x: 54.48, y: 74.67 },\n { x: 39.33, y: 59.13 },\n { x: 31.68, y: 52.3 },\n { x: 30.79, y: 58.17 },\n { x: 31.89, y: 68.51 },\n { x: 39.89, y: 60.12 },\n { x: 30.15, y: 41.22 },\n { x: 36.72, y: 59.34 },\n { x: 38.18, y: 66.3 },\n { x: 40.29, y: 62.57 },\n { x: 34.18, y: 56.64 },\n { x: 33.49, y: 52.52 },\n { x: 46.75, y: 63.12 },\n { x: 48.6, y: 64.71 },\n { x: 33.72, y: 64.07 },\n { x: 24.51, y: 49.99 },\n { x: 38.02, y: 73.54 },\n { x: 33.58, y: 47.65 },\n { x: 45.31, y: 70.1 },\n { x: 36.2, y: 57.27 },\n { x: 32.56, y: 62.73 },\n { x: 40.66, y: 68.08 },\n { x: 44.35, y: 80.22 },\n { x: 46.93, y: 78.72 },\n { x: 40.26, y: 74.88 },\n { x: 42.95, y: 67.4 },\n { x: 25.44, y: 63.33 },\n { x: 33.01, y: 49.47 },\n { x: 34.57, y: 67.55 },\n { x: 30.85, y: 71.5 },\n { x: 30.17, y: 49.77 },\n { x: 33.99, y: 54.03 },\n { x: 33.58, y: 49.87 },\n { x: 25.65, y: 59.65 },\n { x: 22.62, y: 51.22 },\n { x: 31.52, y: 66.76 },\n { x: 32.39, y: 71.82 },\n { x: 20.96, y: 56.98 },\n { x: 41.71, y: 60.85 },\n { x: 67.58, y: 36.11 },\n { x: 74.2, y: 38.3 },\n { x: 65.2, y: 30.1 },\n { x: 75.63, y: 36.56 },\n { x: 57.91, y: 31.67 },\n { x: 71.45, y: 37.46 },\n { x: 64.44, y: 33.42 },\n { x: 59.83, y: 32.28 },\n { x: 53.81, y: 36.24 },\n { x: 47.69, y: 52.39 },\n { x: 68.81, y: 29.36 },\n { x: 51.98, y: 44.33 },\n { x: 70.89, y: 25.27 },\n { x: 46.48, y: 44.66 },\n { x: 63.7, y: 39.18 },\n { x: 80.33, y: 13.1 },\n { x: 52.44, y: 47.6 },\n { x: 43.24, y: 31.06 },\n { x: 55.16, y: 34.24 },\n { x: 63.46, y: 29.21 },\n { x: 67.24, y: 37.64 },\n { x: 54.87, y: 42.81 },\n { x: 51.51, y: 51.97 },\n { x: 64.13, y: 34.26 },\n { x: 78.04, y: 16.76 },\n { x: 52.16, y: 34.85 },\n { x: 55.69, y: 37.04 },\n { x: 65.21, y: 32.4 },\n { x: 70.43, y: 41.79 },\n { x: 53.54, y: 38.85 },\n { x: 55.28, y: 44.88 },\n { x: 57.32, y: 26.41 },\n { x: 63.78, y: 35.03 },\n { x: 63.02, y: 38.2 },\n { x: 60.58, y: 30.31 },\n { x: 68.54, y: 30.89 },\n { x: 62.97, y: 27.91 },\n { x: 62.88, y: 26.99 },\n { x: 55.78, y: 43.49 },\n { x: 73.7, y: 27.65 },\n { x: 52.48, y: 48.33 },\n { x: 61.09, y: 37.04 },\n { x: 72.32, y: 37.1 },\n { x: 53.86, y: 22.44 },\n { x: 70.67, y: 27.06 },\n { x: 79.59, y: 34.62 },\n { x: 69.73, y: 29.99 },\n { x: 44.76, y: 41.28 },\n { x: 56.84, y: 52.56 },\n { x: 71.34, y: 42.29 },\n { x: 49.63, y: 50.86 },\n { x: 64.43, y: 42.76 },\n { x: 69.72, y: 53.44 },\n { x: 65.74, y: 38.11 },\n { x: 48.86, y: 41.64 },\n { x: 58.27, y: 30.1 },\n { x: 51.73, y: 48.05 },\n { x: 62.04, y: 39.31 },\n { x: 39.92, y: 44.56 },\n { x: 64.31, y: 49.04 },\n { x: 62.05, y: 40.24 },\n { x: 54.5, y: 33.44 },\n { x: 83.13, y: 23.51 },\n { x: 66.71, y: 37 },\n { x: 73.41, y: 31.45 },\n { x: 65.49, y: 24.63 },\n { x: 46.27, y: 28.74 },\n { x: 60.42, y: 32.2 },\n { x: 72.91, y: 33.12 },\n { x: 51.46, y: 14.41 },\n { x: 62.04, y: 33.69 },\n { x: 56.6, y: 43.47 },\n { x: 64.85, y: 45.76 },\n { x: 70.18, y: 37.74 },\n { x: 51.94, y: 32.65 },\n { x: 62.03, y: 37.97 },\n { x: 72.13, y: 22.08 },\n { x: 68.86, y: 39.9 },\n { x: 57.35, y: 42.39 },\n { x: 74.54, y: 41.95 },\n { x: 56.51, y: 55.53 },\n { x: 51.01, y: 37.76 },\n { x: 47.6, y: 23.9 },\n { x: 62, y: 32.85 },\n { x: 58.18, y: 22.65 },\n { x: 68.03, y: 28.16 },\n { x: 62.82, y: 53.84 },\n { x: 63.2, y: 39.35 },\n { x: 44.48, y: 35.16 },\n { x: 79.54, y: 34.09 },\n { x: 65.22, y: 35.18 },\n { x: 56.73, y: 49.33 },\n { x: 60.47, y: 53.5 },\n { x: 59.53, y: 39.04 },\n { x: 77.67, y: 33.14 },\n { x: 85.01, y: 37.81 },\n { x: 56.6, y: 31.12 },\n { x: 72.21, y: 46.13 },\n { x: 66.85, y: 29.19 },\n { x: 70.58, y: 39.31 },\n { x: 66.81, y: 16.61 },\n { x: 61.47, y: 38.56 },\n { x: 78.63, y: 35.87 },\n { x: 70.89, y: 22.17 },\n { x: 51.11, y: 53.1 },\n { x: 68.24, y: 28.01 },\n { x: 67.63, y: 36.36 },\n { x: 48.23, y: 38.48 },\n { x: 63.64, y: 26.1 },\n { x: 66.4, y: 29.56 },\n { x: 44.18, y: 29.31 },\n { x: 65.29, y: 42.52 },\n { x: 68.23, y: 25.84 },\n { x: 74.29, y: 30.52 },\n { x: 65.43, y: 46.6 },\n { x: 76.59, y: 23.27 },\n { x: 52.35, y: 41.86 },\n { x: 62.51, y: 31.67 },\n { x: 61.97, y: 37.54 },\n { x: 83.38, y: 39.16 },\n { x: 71.37, y: 42.95 },\n { x: 63.02, y: 41.41 },\n { x: 62.77, y: 23 },\n { x: 75.39, y: 39.06 },\n { x: 45.81, y: 34.6 },\n { x: 67.8, y: 47.76 },\n { x: 49.81, y: 38.9 },\n { x: 73.09, y: 50.15 },\n { x: 80.91, y: 36.36 },\n { x: 74.45, y: 27.99 },\n { x: 68.92, y: 27.29 },\n { x: 58.5, y: 34.07 },\n { x: 62.8, y: 37.55 },\n { x: 79.32, y: 35.12 },\n { x: 67.32, y: 47.94 },\n { x: 50.15, y: 30.25 },\n { x: 54.99, y: 39.79 },\n { x: 46.24, y: 31.71 },\n { x: 61.04, y: 35.05 },\n { x: 71.67, y: 29.43 },\n { x: 55.47, y: 48.29 },\n { x: 57.17, y: 41.76 },\n { x: 69.16, y: 36.35 },\n { x: 57.27, y: 36.5 },\n { x: 63.45, y: 44.51 },\n { x: 45.11, y: 52.28 },\n { x: 73.64, y: 35.07 },\n { x: 77.66, y: 17.1 },\n { x: 65.72, y: 32.63 },\n { x: 59.72, y: 27.44 },\n { x: 71.6, y: 19.48 },\n { x: 35.16, y: 29.44 },\n { x: 57.68, y: 49.43 },\n { x: 63.01, y: 32 },\n { x: 34.79, y: 43.45 },\n { x: 73.78, y: 43.09 },\n { x: 61.19, y: 34.32 },\n { x: 67.61, y: 33.99 },\n { x: 66.92, y: 42.14 },\n { x: 70.52, y: 36.61 },\n { x: 42.46, y: 38.85 },\n { x: 85.9, y: 34.44 },\n { x: 64.47, y: 47.19 },\n { x: 51.69, y: 45.78 },\n { x: 50.65, y: 43.42 },\n { x: 51.87, y: 44.31 },\n { x: 66.1, y: 34.37 },\n { x: 60.9, y: 43.52 },\n { x: 46.89, y: 54.71 },\n { x: 56.07, y: 31.21 },\n { x: 56.02, y: 51.59 },\n { x: 85.42, y: 24.08 },\n { x: 74.38, y: 19.84 },\n { x: 59.06, y: 43.55 },\n { x: 52.59, y: 36.51 },\n { x: 60.08, y: 41.51 },\n { x: 51.5, y: 41.19 },\n { x: 58.4, y: 51.39 },\n { x: 69.54, y: 32.92 },\n { x: 70.54, y: 27.96 },\n { x: 64.14, y: 38.09 },\n { x: 64.39, y: 41.36 },\n { x: 68.21, y: 17.16 },\n { x: 47.42, y: 43.35 },\n { x: 49.31, y: 47.05 },\n { x: 42.64, y: 42.23 },\n { x: 90.42, y: 37.19 },\n { x: 76.11, y: 26.58 },\n { x: 60, y: 35.58 },\n { x: 58.34, y: 40.09 },\n { x: 47.21, y: 53.44 },\n { x: 76.48, y: 21.59 },\n { x: 60.36, y: 37.77 },\n { x: 69.23, y: 32.19 },\n { x: 53.45, y: 42.14 },\n { x: 46.82, y: 53.86 },\n { x: 65.54, y: 46.03 },\n { x: 64.47, y: 34.68 },\n { x: 57.83, y: 26.5 },\n { x: 51.27, y: 36.74 },\n { x: 79.79, y: 35.78 },\n { x: 87.28, y: 36.13 },\n { x: 67.5, y: 33.51 },\n { x: 80.02, y: 31.57 },\n { x: 69.47, y: 50.79 },\n { x: 53.66, y: 39.29 },\n { x: 60.58, y: 47.73 },\n { x: 68.64, y: 40.98 },\n { x: 38.66, y: 51.27 },\n { x: 72.21, y: 26.35 },\n { x: 73.86, y: 42.09 },\n { x: 67.39, y: 24.27 },\n { x: 51.02, y: 44.41 },\n { x: 61.53, y: 25.3 },\n { x: 55.43, y: 42.93 },\n { x: 73.84, y: 37.6 },\n { x: 70.28, y: 35.33 },\n { x: 64.25, y: 35.89 },\n { x: 60.26, y: 28.92 },\n { x: 73.23, y: 37.79 },\n { x: 54.18, y: 43.4 },\n { x: 62.22, y: 26.21 },\n { x: 43.01, y: 62.93 },\n { x: 65.83, y: 49.05 },\n { x: 52.29, y: 48.9 },\n { x: 55.48, y: 45.57 },\n { x: 49.58, y: 43.09 },\n { x: 51.17, y: 42.44 },\n { x: 53.71, y: 36.93 },\n { x: 62.36, y: 28.07 },\n { x: 52.95, y: 35.8 },\n { x: 59.36, y: 39.47 },\n { x: 68.1, y: 34.38 },\n { x: 66.29, y: 31.42 },\n { x: 52.04, y: 49.59 },\n { x: 52.76, y: 42.31 },\n { x: 56.76, y: 28.73 },\n { x: 67.26, y: 39.85 },\n { x: 40.08, y: 40.46 },\n { x: 77.1, y: 27.65 },\n { x: 68.91, y: 22.39 },\n { x: 62.08, y: 42.31 },\n { x: 65.75, y: 28.26 },\n { x: 78.04, y: 22.12 },\n { x: 64.36, y: 25.71 },\n { x: 57.24, y: 36.04 },\n { x: 64.16, y: 38.13 },\n { x: 70.53, y: 41.53 },\n { x: 74.09, y: 32.62 },\n { x: 62.85, y: 33.26 },\n { x: 40.67, y: 46.25 },\n { x: 62.9, y: 35.8 },\n { x: 70.03, y: 35.2 },\n { x: 67.18, y: 38.78 },\n { x: 55.96, y: 57.23 },\n { x: 62.67, y: 48.59 },\n { x: 68.24, y: 40.07 },\n { x: 56.53, y: 42.39 },\n { x: 65.92, y: 18.1 },\n { x: 51.35, y: 31.69 },\n { x: 81.15, y: 31.22 },\n { x: 48.42, y: 42.38 },\n { x: 43.61, y: 50.94 },\n { x: 55.81, y: 34.82 },\n { x: 52.86, y: 31.74 },\n { x: 51.34, y: 48.64 },\n { x: 64.59, y: 26.39 },\n { x: 62.94, y: 28.9 },\n { x: 63.32, y: 39.37 },\n { x: 37.26, y: 32.42 },\n { x: 62.4, y: 39.42 },\n { x: 79.36, y: 24.78 },\n { x: 54.54, y: 56.06 },\n { x: 75.23, y: 13.17 },\n { x: 70.01, y: 16.07 },\n { x: 59.52, y: 36.32 },\n { x: 55.98, y: 26.28 },\n { x: 69.12, y: 33.92 },\n { x: 68.43, y: 31.31 },\n { x: 67.21, y: 35.54 },\n { x: 58.48, y: 50.02 },\n { x: 68, y: 35.65 },\n { x: 53, y: 38.45 },\n { x: 48.45, y: 29.09 },\n { x: 81.19, y: 36.96 },\n { x: 53.21, y: 34.66 },\n { x: 64.93, y: 36.31 },\n { x: 68.54, y: 29.39 },\n { x: 57.75, y: 32.71 },\n { x: 72.85, y: 40.66 },\n { x: 51.49, y: 58.72 },\n { x: 67.85, y: 47.76 },\n { x: 61.64, y: 27.38 },\n { x: 66.79, y: 51.79 },\n { x: 76.89, y: 31.36 },\n { x: 68.76, y: 29.73 },\n { x: 67.26, y: 36.64 },\n { x: 73.7, y: 27.11 },\n { x: 44.56, y: 44.44 },\n { x: 69.79, y: 32.72 },\n { x: 48.54, y: 44.64 },\n { x: 73.73, y: 37.1 },\n { x: 51.04, y: 57.37 },\n { x: 58.27, y: 41.53 },\n { x: 49.79, y: 43.46 },\n { x: 66.47, y: 43.56 },\n { x: 58.46, y: 35.38 },\n { x: 65.36, y: 35.34 },\n { x: 63.6, y: 40.94 },\n { x: 66.66, y: 40.99 },\n { x: 57.75, y: 39.45 },\n { x: 73.68, y: 37.69 },\n { x: 39.7, y: 37.79 },\n { x: 54.61, y: 44.3 },\n { x: 73.68, y: 37.46 },\n { x: 48.78, y: 30.18 },\n { x: 73.6, y: 51.91 },\n { x: 67.96, y: 27.78 },\n { x: 49.61, y: 41.9 },\n { x: 67.94, y: 25.39 },\n { x: 49.7, y: 45.05 },\n { x: 62.54, y: 26.92 },\n { x: 63.03, y: 29.45 },\n { x: 79.76, y: 26.38 },\n { x: 72.45, y: 48.19 },\n { x: 60.5, y: 36.69 },\n { x: 74.43, y: 27.13 },\n { x: 59.91, y: 38.93 },\n { x: 54.47, y: 49.46 },\n { x: 61, y: 37.45 },\n { x: 49.31, y: 41.78 },\n { x: 58.41, y: 41.76 },\n { x: 48.81, y: 30.06 },\n { x: 64.93, y: 43.56 },\n { x: 58.81, y: 22.95 },\n { x: 57.54, y: 42.81 },\n { x: 59.12, y: 39.3 },\n { x: 72.09, y: 30.92 },\n { x: 58.49, y: 50.3 },\n { x: 67.55, y: 38.72 },\n { x: 50.4, y: 47.44 },\n { x: 61.97, y: 41.44 },\n { x: 72.28, y: 47.5 },\n { x: 55.24, y: 45.44 },\n { x: 57.84, y: 43.46 },\n { x: 72.68, y: 33.08 },\n { x: 74.66, y: 36.53 },\n { x: 56.35, y: 41.36 },\n { x: 68.67, y: 29.74 },\n { x: 52.7, y: 45.68 },\n { x: 43.86, y: 35.18 },\n { x: 61.36, y: 52.68 },\n { x: 66.44, y: 39.03 },\n { x: 61.9, y: 17.55 },\n { x: 62.63, y: 42.91 },\n { x: 61.2, y: 42.65 },\n { x: 60.13, y: 41.67 },\n { x: 56.27, y: 36.11 },\n { x: 74.5, y: 28.55 },\n { x: 62.22, y: 40.66 },\n { x: 54.04, y: 45.76 },\n { x: 70.85, y: 40.33 },\n { x: 53.02, y: 40.65 },\n { x: 59.04, y: 41.98 },\n { x: 50.12, y: 49.21 },\n { x: 65.5, y: 33.55 },\n { x: 63.48, y: 45.74 },\n { x: 72.6, y: 44.72 },\n { x: 56.99, y: 33.71 },\n { x: 61.15, y: 40.18 },\n { x: 57.37, y: 46.48 },\n { x: 75.14, y: 35.3 },\n { x: 67.88, y: 18.32 },\n { x: 61.43, y: 39.51 },\n { x: 85.32, y: 16.43 },\n { x: 69.69, y: 40.11 },\n { x: 76.99, y: 26.84 },\n { x: 58.61, y: 21.89 },\n { x: 64.7, y: 33.93 },\n { x: 57.47, y: 31.35 },\n { x: 68.74, y: 45.97 },\n { x: 70.64, y: 37.12 },\n { x: 61.73, y: 45.14 },\n { x: 68.32, y: 33.45 },\n { x: 59.39, y: 49.73 },\n { x: 61.8, y: 39.35 },\n { x: 54.62, y: 30.26 },\n { x: 71.29, y: 24.42 },\n { x: 53.86, y: 41.75 },\n { x: 62.12, y: 36.3 },\n { x: 57.38, y: 36.63 },\n { x: 63.6, y: 42.2 },\n { x: 79.54, y: 38.53 },\n { x: 53.9, y: 51.62 },\n { x: 71.32, y: 30.12 },\n { x: 62.96, y: 33.76 },\n { x: 58.76, y: 46.79 },\n { x: 63.79, y: 35.74 },\n { x: 55.55, y: 35.9 },\n { x: 59.94, y: 42.52 },\n { x: 43.58, y: 57.33 },\n { x: 61.61, y: 20.37 },\n { x: 62.62, y: 42.48 },\n { x: 53.63, y: 39.67 },\n { x: 61.59, y: 29.04 },\n { x: 56.23, y: 37.45 },\n { x: 48.77, y: 46.25 },\n { x: 66.32, y: 43.04 },\n { x: 45.38, y: 26.08 },\n { x: 58.66, y: 35.52 },\n { x: 67.73, y: 18.06 },\n { x: 57.96, y: 42.16 },\n { x: 78.18, y: 37.51 },\n { x: 70.31, y: 35.79 },\n { x: 60.26, y: 38.1 },\n { x: 47.84, y: 38.86 },\n { x: 55.2, y: 37.06 },\n { x: 62.57, y: 46.28 },\n { x: 34.87, y: 37.82 },\n { x: 58.69, y: 38.78 },\n { x: 62.34, y: 31.03 },\n { x: 72.01, y: 35.98 },\n { x: 58.6, y: 46.14 },\n { x: 81.96, y: 42.02 },\n { x: 75.59, y: 24.88 },\n { x: 73.32, y: 24.79 },\n { x: 59.99, y: 37.24 },\n { x: 79.63, y: 13.6 },\n { x: 48.55, y: 33.26 },\n { x: 52.8, y: 53.59 },\n { x: 65.98, y: 39.86 },\n { x: 50.15, y: 33.5 },\n { x: 54.54, y: 46.75 },\n { x: 61.74, y: 49.83 },\n { x: 55.99, y: 33.51 },\n { x: 72.35, y: 39.27 },\n { x: 53.48, y: 37.1 },\n { x: 69.57, y: 27.72 },\n { x: 67.27, y: 27.15 },\n { x: 49.11, y: 49.87 },\n { x: 49.04, y: 35.21 },\n { x: 69.45, y: 36.41 },\n { x: 74.44, y: 33.34 },\n { x: 66.16, y: 32.41 },\n { x: 71.28, y: 28.64 },\n { x: 54.03, y: 45.87 },\n { x: 60.8, y: 30.58 },\n { x: 46.85, y: 46.94 },\n { x: 64.74, y: 31.28 },\n { x: 53.56, y: 38.34 },\n { x: 79.48, y: 22.27 },\n { x: 57.22, y: 39.67 },\n { x: 61.37, y: 46.59 },\n { x: 50.53, y: 34.52 },\n { x: 63.21, y: 40.95 },\n { x: 65.98, y: 29.64 },\n { x: 60.01, y: 37.44 },\n { x: 56, y: 45.48 },\n { x: 50.71, y: 47.63 },\n { x: 53.65, y: 56.11 },\n { x: 62.54, y: 38.09 },\n { x: 56.64, y: 48.38 },\n { x: 68.34, y: 37.32 },\n { x: 50.1, y: 42.1 },\n { x: 72.13, y: 36.93 },\n { x: 65.89, y: 35.66 },\n { x: 71.95, y: 33.05 },\n { x: 54.98, y: 26.48 },\n { x: 78, y: 30.45 },\n { x: 80.2, y: 17.92 },\n { x: 80, y: 23.68 },\n { x: 57.4, y: 26.59 },\n { x: 60.45, y: 34.79 },\n { x: 72.4, y: 32.83 },\n { x: 82.33, y: 25.78 },\n { x: 51.06, y: 30.83 },\n { x: 52.07, y: 38.26 },\n { x: 68.19, y: 22.41 },\n { x: 60.39, y: 36.5 },\n { x: 58.78, y: 33.45 },\n { x: 68.66, y: 31.45 },\n { x: 56.41, y: 35.5 },\n { x: 48.36, y: 40.84 },\n { x: 58.4, y: 29.11 },\n { x: 62.03, y: 44.12 },\n { x: 49.84, y: 40.39 },\n { x: 62.05, y: 15.03 },\n { x: 64.23, y: 19.95 },\n { x: 61.17, y: 38.4 },\n { x: 69.18, y: 44.24 },\n { x: 51.31, y: 57.31 },\n { x: 68.63, y: 43.05 },\n { x: 46.97, y: 42.48 },\n { x: 58.45, y: 36.35 },\n { x: 72.55, y: 34.21 },\n { x: 58.46, y: 42.99 },\n { x: 63.99, y: 29.56 },\n { x: 60.72, y: 34.13 },\n { x: 48.09, y: 38.17 },\n { x: 84.3, y: 33.99 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const DENSITY_BIN_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n xKey: 'x',\n yKey: 'y',\n} as const);\n","import type { LinearScale } from '../../scales/scales';\nimport type { ChartModel, ChartRecipe, DensityBinChartProps, HitArea, RecipeContext, Stroke, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { LEGEND_BAND, cartesianPlot, legend } from '../shared/cartesian';\nimport { TONE_SCALE, rectPath, toneOf } from '../shared/cells';\nimport { checkCeiling, checkPositive, readPointCloud } from '../shared/contracts';\nimport { hexBins, hexagonPath, rectBins, type Bin2D } from '../shared/field';\nimport { accessorName, formatNumber } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { xyFrame } from '../shared/xy';\nimport { DENSITY_BIN_CHART_DEMO, DENSITY_BIN_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'DensityBinChart';\nconst BIN_SIZE = 14;\n/** Room inside the plot for the bins along its edge. */\nconst EDGE = 4;\n\n/** The data value at a position of a scale (its inverse, piecewise linear like the scale). */\nfunction valueAt(scale: LinearScale, at: number): number {\n const [d0, d1] = scale.domain;\n const r0 = scale(d0);\n const r1 = scale(d1);\n return r1 === r0 ? d0 : d0 + ((at - r0) * (d1 - d0)) / (r1 - r0);\n}\n\nconst round2 = (v: number) => Math.round(v * 100) / 100;\n\n/**\n * The key of the four tones: the counts each level holds, `toneOf(count / max)` read backwards.\n * Levels that hold no whole count are left out.\n */\nfunction keyEntries(max: number): { tone: ToneLevel; text: string }[] {\n const entries: { tone: ToneLevel; text: string }[] = [];\n for (let level = 1; level <= 4; level += 1) {\n const low = Math.floor((max * (level - 1)) / 4) + 1;\n const high = Math.floor((max * level) / 4);\n if (low <= high) entries.push({ tone: level as ToneLevel, text: low === high ? `${low}` : `${low}–${high}` });\n }\n return entries;\n}\n\nfunction buildDensityBinChart(props: DensityBinChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? DENSITY_BIN_CHART_DEMO;\n const xKey = usesDemo ? DENSITY_BIN_CHART_DEMO_KEYS.xKey : (props.xKey ?? 'x');\n const yKey = usesDemo ? DENSITY_BIN_CHART_DEMO_KEYS.yKey : (props.yKey ?? 'y');\n const hexagons = props.binShape !== 'rect';\n const size = checkPositive(CHART, 'binSize', props.binSize) ?? BIN_SIZE;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const xName = accessorName(xKey, 'x');\n const yName = accessorName(yKey, 'y');\n const pointName = `${xName}, ${yName}`;\n\n const points = readPointCloud(CHART, data, { x: xKey, y: yKey });\n checkCeiling(CHART, yName, 'observations', points.length);\n // The bins are cut in pixels, so the table waits for the layout; this one names the chart until then.\n const named = modelBase(CHART, props, context, 'Density bins', { columns: [pointName, 'count'], rows: [] });\n const measured = measure(named, props, context);\n if ('deferred' in measured) return measured.deferred;\n const card = cardLayout(props, { width: measured.width, areaHeight: measured.height, chrome: props.chrome ?? 'card', locale });\n if (points.length === 0) return emptyModel(named, props, context, { viewBox: card.viewBox, plot: cartesianPlot(card.area), strokes: [...card.strokes], labels: [...card.labels] }, data.length === 0);\n\n // A pre-pass for the bins, so the key above the plot knows the counts.\n const keyArea = { ...card.area, y: card.area.y, height: LEGEND_BAND };\n const below = { ...card.area, y: card.area.y + LEGEND_BAND, height: Math.max(card.area.height - LEGEND_BAND, 1) };\n const plot = cartesianPlot(below);\n const extent = (values: number[]) => [Math.min(...values), Math.max(...values)] as const;\n const frame = xyFrame(below, plot, { x: extent(points.map((p) => p.x)), y: extent(points.map((p) => p.y)) }, { chart: CHART, xName, yName, padding: context.domainPadding, locale, numberFormat, inset: EDGE });\n const at = points.map((p) => ({ x: frame.x(p.x), y: frame.y(p.y), index: p.index }));\n const origin = { x: frame.region.x, y: frame.region.y };\n const bins: Bin2D[] = hexagons ? hexBins(at, size, origin) : rectBins(at, size, origin);\n const max = Math.max(...bins.map((b) => b.count));\n\n const summaries = bins.map((b) => Object.freeze({ x: round2(valueAt(frame.x, b.cx)), y: round2(valueAt(frame.y, b.cy)), count: b.count }));\n const base = modelBase(CHART, props, context, 'Density bins', {\n columns: [pointName, 'count'],\n rows: summaries.map((s) => [`${formatNumber(s.x, locale, numberFormat)}, ${formatNumber(s.y, locale, numberFormat)}`, formatNumber(s.count, locale, undefined)]),\n });\n\n const strokes: Stroke[] = [...card.strokes, ...frame.strokes];\n const labels: TextLabel[] = [...card.labels, ...frame.labels];\n const hitAreas: HitArea[] = [];\n const key = legend(keyArea, keyEntries(max).map((e) => ({ name: e.text, part: 'ink' as const, tone: e.tone })));\n strokes.push(...key.strokes);\n labels.push(...key.labels);\n\n // The keyboard's grid: rows that hold a bin, in order, and the bins of a row side by side, so\n // the first of every row lines up and a sparse lattice walls nothing off (I-29).\n const rows = [...new Set(bins.map((b) => b.row))];\n const rowOf = new Map(rows.map((row, r) => [row, r]));\n const columnOf = bins.map((b, k) => bins.slice(0, k).filter((o) => o.row === b.row).length);\n const half = size / 2;\n // The densest bin, the first of them in reading order, is the heightened one (REQ-442).\n const densest = bins.findIndex((b) => b.count === max);\n // Tone by count against the densest bin, as the heatmap tones by value (DD-032); the bin's size\n // repeats the level, so the count survives `precision` mode (REQ-124). Bins of one tone are one\n // path, as the waffle's cells of one category are, so a dense cloud stays light (NFR §7).\n const byTone = new Map<ToneLevel, string[]>();\n let lone = '';\n bins.forEach((bin, k) => {\n const tone = toneOf(bin.count / max);\n const drawn = size * TONE_SCALE[tone];\n const d = hexagons ? hexagonPath(bin.cx, bin.cy, drawn) : rectPath({ x: bin.cx - drawn / 2, y: bin.cy - drawn / 2, width: drawn, height: drawn });\n if (k === densest) lone = d;\n else byTone.set(tone, [...(byTone.get(tone) ?? []), d]);\n // The readout's mark stays in the plot, whatever the lattice does at its edge.\n const x = Math.min(Math.max(bin.cx, plot.x), plot.x + plot.width);\n const y = Math.min(Math.max(bin.cy, plot.y), plot.y + plot.height);\n hitAreas.push({ seriesKey: 'count', index: k, datum: summaries[k] as (typeof summaries)[number], value: bin.count, x, y, box: { x: bin.cx - half, y: bin.cy - half, width: size, height: size }, cell: { column: columnOf[k] as number, row: rowOf.get(bin.row) as number } });\n });\n for (const tone of [1, 2, 3, 4] as const) {\n const paths = byTone.get(tone);\n if (paths) strokes.push({ d: paths.join(''), role: 'encoding', part: 'ink', tone });\n }\n strokes.push({ d: lone, role: 'encoding', part: 'ink', tone: 4 });\n strokes.push({ d: lone, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const peak = summaries[densest] as (typeof summaries)[number];\n const description =\n props.description ??\n `${base.name}. ${points.length} points of ${xName} across and ${yName} up, counted in ${bins.length} ${hexagons ? 'hexagonal' : 'square'} bins ${formatNumber(size, locale, undefined)} px across and toned by count against the densest, which holds ${formatNumber(max, locale, undefined)} near ${formatNumber(peak.x, locale, numberFormat)}, ${formatNumber(peak.y, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `DensityBinChart` recipe (REQ-422): x-y points counted in hexagonal or square bins, toned by count. */\nexport const densityBinChart: ChartRecipe<DensityBinChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildDensityBinChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `ContourChart` (REQ-423), `source: 'points'`: the density bins' two clusters. */\nexport { DENSITY_BIN_CHART_DEMO as CONTOUR_CHART_DEMO } from '../density-bin-chart/demo';\n\nexport const CONTOUR_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n xKey: 'x',\n yKey: 'y',\n} as const);\n\n/** Demo dataset of `ContourChart` (REQ-423), `source: 'grid'`: a smooth surface of two hills and a pit on a 40 × 30 grid. Its values row by row, 40 to a row; a row is `{ x, y, value }`, `x` the column and `y` the row. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const CONTOUR_CHART_GRID_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n 0.999, 1.079, 1.166, 1.259, 1.357, 1.457, 1.558, 1.656, 1.747, 1.827,\n 1.89, 1.932, 1.949, 1.942, 1.91, 1.856, 1.784, 1.697, 1.6, 1.495,\n 1.386, 1.273, 1.158, 1.039, 0.918, 0.795, 0.672, 0.553, 0.446, 0.359,\n 0.299, 0.27, 0.267, 0.283, 0.309, 0.337, 0.362, 0.382, 0.397, 0.405,\n 1.065, 1.158, 1.259, 1.369, 1.486, 1.608, 1.733, 1.856, 1.973, 2.075,\n 2.157, 2.212, 2.235, 2.225, 2.182, 2.111, 2.018, 1.907, 1.786, 1.657,\n 1.524, 1.389, 1.251, 1.109, 0.961, 0.809, 0.652, 0.497, 0.354, 0.239,\n 0.167, 0.141, 0.158, 0.2, 0.252, 0.303, 0.346, 0.378, 0.401, 0.415,\n 1.133, 1.239, 1.357, 1.486, 1.626, 1.774, 1.929, 2.084, 2.233, 2.367,\n 2.474, 2.547, 2.577, 2.563, 2.505, 2.411, 2.289, 2.148, 1.996, 1.838,\n 1.678, 1.517, 1.353, 1.185, 1.008, 0.82, 0.621, 0.415, 0.22, 0.062,\n -0.03, -0.045, 0.005, 0.09, 0.182, 0.264, 0.329, 0.377, 0.409, 0.429,\n 1.201, 1.322, 1.458, 1.608, 1.775, 1.955, 2.146, 2.341, 2.532, 2.706,\n 2.849, 2.945, 2.986, 2.965, 2.887, 2.762, 2.602, 2.422, 2.231, 2.039,\n 1.847, 1.658, 1.467, 1.271, 1.063, 0.835, 0.584, 0.314, 0.044, -0.179,\n -0.301, -0.296, -0.191, -0.042, 0.105, 0.226, 0.317, 0.381, 0.422, 0.447,\n 1.268, 1.404, 1.559, 1.734, 1.929, 2.146, 2.38, 2.625, 2.869, 3.097,\n 3.286, 3.415, 3.468, 3.439, 3.332, 3.165, 2.956, 2.726, 2.49, 2.257,\n 2.031, 1.811, 1.594, 1.371, 1.132, 0.866, 0.561, 0.215, -0.148, -0.46,\n -0.624, -0.587, -0.403, -0.171, 0.039, 0.202, 0.318, 0.395, 0.444, 0.472,\n 1.332, 1.483, 1.657, 1.857, 2.085, 2.342, 2.625, 2.928, 3.238, 3.533,\n 3.782, 3.955, 4.026, 3.984, 3.839, 3.616, 3.346, 3.055, 2.765, 2.487,\n 2.225, 1.976, 1.733, 1.488, 1.225, 0.927, 0.578, 0.167, -0.285, -0.689,\n -0.896, -0.826, -0.562, -0.251, 0.013, 0.208, 0.341, 0.427, 0.479, 0.507,\n 1.39, 1.556, 1.749, 1.974, 2.234, 2.533, 2.87, 3.238, 3.624, 3.999,\n 4.323, 4.551, 4.644, 4.586, 4.393, 4.101, 3.756, 3.396, 3.047, 2.722,\n 2.424, 2.148, 1.886, 1.624, 1.347, 1.035, 0.666, 0.225, -0.267, -0.714,\n -0.945, -0.863, -0.565, -0.226, 0.057, 0.26, 0.394, 0.479, 0.527, 0.552,\n 1.44, 1.619, 1.829, 2.077, 2.368, 2.707, 3.097, 3.533, 3.999, 4.463,\n 4.872, 5.164, 5.283, 5.206, 4.955, 4.585, 4.159, 3.726, 3.319, 2.949,\n 2.62, 2.323, 2.048, 1.78, 1.502, 1.195, 0.838, 0.419, -0.04, -0.452,\n -0.67, -0.612, -0.361, -0.065, 0.184, 0.364, 0.482, 0.553, 0.592, 0.608,\n 1.479, 1.668, 1.893, 2.159, 2.476, 2.85, 3.286, 3.782, 4.323, 4.872,\n 5.365, 5.721, 5.867, 5.771, 5.464, 5.018, 4.515, 4.017, 3.559, 3.155,\n 2.803, 2.494, 2.215, 1.951, 1.686, 1.401, 1.082, 0.724, 0.346, 0.016,\n -0.168, -0.156, 0.001, 0.204, 0.383, 0.515, 0.601, 0.649, 0.671, 0.674,\n 1.505, 1.702, 1.936, 2.215, 2.549, 2.947, 3.415, 3.954, 4.55, 5.162,\n 5.72, 6.128, 6.295, 6.186, 5.836, 5.335, 4.779, 4.237, 3.748, 3.324,\n 2.963, 2.654, 2.382, 2.133, 1.891, 1.641, 1.372, 1.085, 0.795, 0.546,\n 0.392, 0.36, 0.423, 0.527, 0.626, 0.699, 0.744, 0.763, 0.763, 0.749,\n 1.518, 1.718, 1.955, 2.24, 2.581, 2.988, 3.469, 4.025, 4.641, 5.279,\n 5.863, 6.293, 6.471, 6.36, 5.998, 5.481, 4.91, 4.359, 3.867, 3.446,\n 3.093, 2.797, 2.544, 2.319, 2.108, 1.899, 1.682, 1.459, 1.239, 1.048,\n 0.913, 0.847, 0.838, 0.859, 0.885, 0.9, 0.901, 0.888, 0.864, 0.831,\n 1.517, 1.715, 1.95, 2.232, 2.568, 2.968, 3.44, 3.983, 4.583, 5.2,\n 5.764, 6.179, 6.355, 6.256, 5.919, 5.433, 4.894, 4.373, 3.909, 3.515,\n 3.189, 2.92, 2.697, 2.506, 2.333, 2.166, 1.998, 1.827, 1.658, 1.503,\n 1.375, 1.282, 1.221, 1.178, 1.143, 1.107, 1.066, 1.02, 0.97, 0.918,\n 1.501, 1.694, 1.922, 2.192, 2.513, 2.893, 3.335, 3.838, 4.388, 4.947,\n 5.453, 5.823, 5.986, 5.911, 5.628, 5.212, 4.744, 4.287, 3.879, 3.533,\n 3.25, 3.023, 2.841, 2.69, 2.56, 2.438, 2.315, 2.187, 2.054, 1.92,\n 1.792, 1.676, 1.573, 1.481, 1.395, 1.313, 1.233, 1.154, 1.079, 1.006,\n 1.473, 1.657, 1.872, 2.126, 2.424, 2.771, 3.17, 3.616, 4.095, 4.574,\n 5.002, 5.315, 5.459, 5.412, 5.198, 4.871, 4.497, 4.126, 3.792, 3.509,\n 3.283, 3.107, 2.973, 2.871, 2.789, 2.713, 2.635, 2.544, 2.437, 2.315,\n 2.181, 2.042, 1.903, 1.767, 1.637, 1.513, 1.396, 1.287, 1.186, 1.093,\n 1.434, 1.606, 1.806, 2.038, 2.307, 2.616, 2.965, 3.348, 3.751, 4.145,\n 4.493, 4.749, 4.874, 4.856, 4.71, 4.475, 4.197, 3.918, 3.665, 3.454,\n 3.291, 3.173, 3.094, 3.046, 3.017, 2.992, 2.958, 2.902, 2.817, 2.701,\n 2.557, 2.393, 2.217, 2.04, 1.868, 1.705, 1.554, 1.415, 1.29, 1.177,\n 1.387, 1.545, 1.727, 1.936, 2.175, 2.444, 2.742, 3.063, 3.393, 3.712,\n 3.989, 4.196, 4.307, 4.313, 4.226, 4.071, 3.883, 3.69, 3.517, 3.378,\n 3.28, 3.223, 3.204, 3.214, 3.24, 3.269, 3.281, 3.261, 3.196, 3.082,\n 2.923, 2.73, 2.517, 2.299, 2.086, 1.885, 1.701, 1.535, 1.387, 1.255,\n 1.333, 1.477, 1.641, 1.827, 2.035, 2.266, 2.517, 2.782, 3.05, 3.305,\n 3.527, 3.696, 3.795, 3.821, 3.781, 3.693, 3.579, 3.462, 3.362, 3.29,\n 3.254, 3.257, 3.297, 3.366, 3.451, 3.535, 3.596, 3.612, 3.566, 3.451,\n 3.274, 3.049, 2.798, 2.538, 2.285, 2.049, 1.834, 1.642, 1.473, 1.325,\n 1.275, 1.405, 1.551, 1.714, 1.895, 2.091, 2.301, 2.519, 2.737, 2.942,\n 3.121, 3.262, 3.354, 3.395, 3.391, 3.354, 3.3, 3.245, 3.206, 3.193,\n 3.214, 3.273, 3.368, 3.493, 3.636, 3.774, 3.883, 3.934, 3.906, 3.79,\n 3.593, 3.337, 3.046, 2.747, 2.458, 2.189, 1.947, 1.733, 1.546, 1.384,\n 1.215, 1.332, 1.461, 1.603, 1.759, 1.926, 2.101, 2.281, 2.459, 2.626,\n 2.774, 2.893, 2.98, 3.032, 3.055, 3.056, 3.048, 3.043, 3.054, 3.09,\n 3.159, 3.265, 3.408, 3.583, 3.775, 3.963, 4.115, 4.199, 4.187, 4.069,\n 3.854, 3.569, 3.246, 2.914, 2.594, 2.299, 2.036, 1.804, 1.603, 1.429,\n 1.155, 1.259, 1.373, 1.497, 1.63, 1.772, 1.92, 2.069, 2.216, 2.355,\n 2.479, 2.584, 2.667, 2.727, 2.769, 2.798, 2.824, 2.856, 2.905, 2.979,\n 3.085, 3.228, 3.409, 3.621, 3.852, 4.077, 4.262, 4.37, 4.372, 4.254,\n 4.028, 3.724, 3.378, 3.023, 2.683, 2.372, 2.094, 1.851, 1.641, 1.46,\n 1.096, 1.188, 1.288, 1.396, 1.512, 1.632, 1.757, 1.883, 2.006, 2.123,\n 2.23, 2.324, 2.404, 2.469, 2.524, 2.573, 2.623, 2.682, 2.758, 2.859,\n 2.991, 3.159, 3.364, 3.599, 3.851, 4.096, 4.299, 4.422, 4.432, 4.317,\n 4.09, 3.78, 3.428, 3.066, 2.719, 2.402, 2.119, 1.872, 1.658, 1.474,\n 1.038, 1.12, 1.209, 1.303, 1.402, 1.506, 1.613, 1.72, 1.825, 1.925,\n 2.019, 2.105, 2.181, 2.25, 2.313, 2.375, 2.441, 2.517, 2.611, 2.729,\n 2.876, 3.057, 3.27, 3.512, 3.768, 4.014, 4.218, 4.342, 4.356, 4.249,\n 4.031, 3.733, 3.391, 3.039, 2.7, 2.388, 2.11, 1.866, 1.654, 1.472,\n 0.983, 1.056, 1.134, 1.216, 1.303, 1.393, 1.485, 1.577, 1.668, 1.756,\n 1.839, 1.918, 1.991, 2.061, 2.129, 2.198, 2.274, 2.36, 2.464, 2.59,\n 2.742, 2.923, 3.133, 3.366, 3.61, 3.841, 4.03, 4.145, 4.159, 4.062,\n 3.863, 3.59, 3.275, 2.947, 2.629, 2.334, 2.069, 1.835, 1.631, 1.454,\n 0.93, 0.995, 1.064, 1.137, 1.213, 1.291, 1.371, 1.451, 1.531, 1.609,\n 1.684, 1.757, 1.827, 1.896, 1.965, 2.038, 2.118, 2.21, 2.316, 2.442,\n 2.591, 2.764, 2.961, 3.174, 3.393, 3.598, 3.763, 3.862, 3.873, 3.788,\n 3.615, 3.375, 3.096, 2.803, 2.515, 2.245, 2, 1.782, 1.589, 1.422,\n 0.88, 0.939, 1, 1.064, 1.131, 1.2, 1.27, 1.341, 1.411, 1.481,\n 1.549, 1.617, 1.683, 1.75, 1.819, 1.893, 1.973, 2.064, 2.168, 2.289,\n 2.429, 2.588, 2.764, 2.952, 3.14, 3.313, 3.45, 3.53, 3.536, 3.464,\n 3.318, 3.115, 2.877, 2.623, 2.371, 2.131, 1.91, 1.711, 1.534, 1.378,\n 0.834, 0.886, 0.941, 0.998, 1.057, 1.118, 1.18, 1.242, 1.305, 1.368,\n 1.431, 1.493, 1.556, 1.62, 1.687, 1.758, 1.837, 1.924, 2.023, 2.135,\n 2.261, 2.403, 2.556, 2.715, 2.872, 3.013, 3.122, 3.183, 3.185, 3.124,\n 3.004, 2.837, 2.638, 2.424, 2.208, 2, 1.805, 1.627, 1.467, 1.324,\n 0.79, 0.837, 0.886, 0.937, 0.989, 1.044, 1.099, 1.155, 1.211, 1.268,\n 1.325, 1.383, 1.442, 1.502, 1.566, 1.634, 1.708, 1.789, 1.88, 1.982,\n 2.094, 2.216, 2.346, 2.478, 2.605, 2.717, 2.801, 2.846, 2.845, 2.794,\n 2.697, 2.561, 2.398, 2.221, 2.039, 1.861, 1.692, 1.536, 1.393, 1.265,\n 0.749, 0.791, 0.835, 0.881, 0.928, 0.976, 1.026, 1.076, 1.127, 1.179,\n 1.231, 1.284, 1.339, 1.396, 1.455, 1.518, 1.587, 1.661, 1.743, 1.833,\n 1.931, 2.035, 2.142, 2.25, 2.351, 2.438, 2.502, 2.534, 2.531, 2.488,\n 2.409, 2.3, 2.168, 2.022, 1.871, 1.721, 1.576, 1.44, 1.315, 1.2,\n 0.71, 0.748, 0.788, 0.829, 0.872, 0.915, 0.96, 1.005, 1.051, 1.098,\n 1.146, 1.195, 1.245, 1.298, 1.353, 1.411, 1.473, 1.54, 1.613, 1.691,\n 1.775, 1.862, 1.951, 2.037, 2.117, 2.183, 2.231, 2.254, 2.248, 2.213,\n 2.149, 2.061, 1.954, 1.835, 1.71, 1.584, 1.462, 1.345, 1.236, 1.135,\n 0.674, 0.709, 0.745, 0.782, 0.82, 0.859, 0.9, 0.941, 0.983, 1.025,\n 1.069, 1.114, 1.16, 1.208, 1.258, 1.311, 1.367, 1.427, 1.491, 1.558,\n 1.629, 1.701, 1.773, 1.842, 1.904, 1.955, 1.99, 2.006, 1.999, 1.969,\n 1.917, 1.846, 1.76, 1.663, 1.56, 1.455, 1.352, 1.252, 1.157, 1.068,\n ].map((value, k) => Object.freeze({ x: k % 40, y: Math.floor(k / 40), value })),\n);\n\nexport const CONTOUR_CHART_GRID_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n xKey: 'x',\n yKey: 'y',\n valueKey: 'value',\n} as const);\n","import { linearScale } from '../../scales/scales';\nimport type { ChartModel, ChartRecipe, ContourChartProps, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot } from '../shared/cartesian';\nimport { toneOf } from '../shared/cells';\nimport { checkCeiling, checkLevels, readGrid, readPointCloud } from '../shared/contracts';\nimport { silverman } from '../shared/density';\nimport { contours, densityGrid, type GridPoint, type ScalarGrid } from '../shared/field';\nimport { accessorName, formatNumber } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { sortedValues } from '../shared/stats';\nimport { xyFrame } from '../shared/xy';\nimport { CONTOUR_CHART_DEMO, CONTOUR_CHART_DEMO_KEYS, CONTOUR_CHART_GRID_DEMO, CONTOUR_CHART_GRID_DEMO_KEYS } from './demo';\n\nconst CHART = 'ContourChart';\nconst LEVELS = 4;\n/** Density nodes per px of the plot, and their bounds per axis (a 60 × 60 field at most, REQ-445). */\nconst NODE_SPACING = 6;\nconst MIN_NODES = 10;\nconst MAX_NODES = 60;\n/** A level is named on its longest line when the line is at least this long, in px. */\nconst LABEL_ROOM = 20;\n/** Two level names closer than this, in px, would collide: the later one is left to the table. */\nconst LABEL_GAP = 28;\n\nconst PERCENT: Intl.NumberFormatOptions = { style: 'percent', maximumFractionDigits: 0 };\n\n/** The field to contour, in grid coordinates, and how a grid coordinate maps to data. */\ninterface Field {\n readonly grid: ScalarGrid;\n readonly xAt: (i: number) => number;\n readonly yAt: (j: number) => number;\n}\n\n/** A fractional index along sorted node values, as the data value it stands for. */\nconst along = (nodes: readonly number[]) => (t: number) => {\n const i = Math.min(Math.max(Math.floor(t), 0), nodes.length - 1);\n const next = nodes[i + 1];\n return next === undefined ? (nodes[i] as number) : (nodes[i] as number) + (t - i) * (next - (nodes[i] as number));\n};\n\n/** The nice ticks strictly inside `(low, high)`, about `count` of them. */\nfunction ticksInside(low: number, high: number, count: number): number[] {\n if (!(high > low)) return [];\n const scale = linearScale([low, high], [0, 1], { chart: CHART, property: 'levels', padding: 0 });\n return scale.ticks(count + 1).filter((t) => t > low && t < high);\n}\n\nfunction buildContourChart(props: ContourChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const fromGrid = props.source === 'grid';\n const data = props.data ?? (fromGrid ? CONTOUR_CHART_GRID_DEMO : CONTOUR_CHART_DEMO);\n const demoKeys = fromGrid ? CONTOUR_CHART_GRID_DEMO_KEYS : CONTOUR_CHART_DEMO_KEYS;\n const xKey = usesDemo ? demoKeys.xKey : (props.xKey ?? 'x');\n const yKey = usesDemo ? demoKeys.yKey : (props.yKey ?? 'y');\n const valueKey = usesDemo ? CONTOUR_CHART_GRID_DEMO_KEYS.valueKey : (props.valueKey ?? 'value');\n // `levels` says how the data's values are read, so it goes with the data (REQ-099).\n const levels = (usesDemo ? undefined : checkLevels(CHART, props.levels)) ?? LEVELS;\n const filled = props.filled !== false;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const xName = accessorName(xKey, 'x');\n const yName = accessorName(yKey, 'y');\n const valueName = fromGrid ? accessorName(valueKey, 'value') : 'density';\n\n const values = fromGrid ? readGrid(CHART, data, { x: xKey, y: yKey, value: valueKey }) : undefined;\n const points = fromGrid ? [] : readPointCloud(CHART, data, { x: xKey, y: yKey });\n if (values) checkCeiling(CHART, valueName, 'gridCells', values.xs.length * values.ys.length);\n else checkCeiling(CHART, yName, 'observations', points.length);\n const format = (level: number) => (fromGrid ? formatNumber(level, locale, numberFormat) : formatNumber(level, locale, PERCENT));\n\n // The levels are known before the layout: of the grid's values, or as shares of the density's peak.\n const known = values ? values.values.filter((v): v is number => v !== undefined) : [];\n let thresholds: readonly number[];\n if (Array.isArray(levels)) thresholds = levels;\n else if (values) thresholds = ticksInside(Math.min(...known), Math.max(...known), levels as number);\n else thresholds = Array.from({ length: levels as number }, (_, k) => (k + 1) / ((levels as number) + 1));\n\n const named = modelBase(CHART, props, context, 'Contours', { columns: [valueName, 'band'], rows: [] });\n const measured = measure(named, props, context);\n if ('deferred' in measured) return measured.deferred;\n const card = cardLayout(props, { width: measured.width, areaHeight: measured.height, chrome: props.chrome ?? 'card', locale });\n const plot = cartesianPlot(card.area);\n const empty = values ? known.length === 0 : points.length === 0;\n if (empty) return emptyModel(named, props, context, { viewBox: card.viewBox, plot, strokes: [...card.strokes], labels: [...card.labels] }, data.length === 0);\n\n let field: Field;\n let method: string;\n let frame: ReturnType<typeof xyFrame>;\n const site = { chart: CHART, xName, yName, padding: context.domainPadding, locale, numberFormat, inset: 0 };\n if (values) {\n frame = xyFrame(card.area, plot, { x: [values.xs[0] as number, values.xs.at(-1) as number], y: [values.ys[0] as number, values.ys.at(-1) as number] }, site);\n field = { grid: { nx: values.xs.length, ny: values.ys.length, values: values.values }, xAt: along(values.xs), yAt: along(values.ys) };\n method = `over a ${values.xs.length} × ${values.ys.length} grid of ${xName} and ${yName}`;\n } else {\n // An Epanechnikov density (DD-029), each axis' bandwidth by Silverman's rule; the field\n // reaches a bandwidth past the points so every contour closes inside it.\n const bx = silverman(sortedValues(points.map((p) => p.x)));\n const by = silverman(sortedValues(points.map((p) => p.y)));\n const xs = points.map((p) => p.x);\n const ys = points.map((p) => p.y);\n frame = xyFrame(card.area, plot, { x: [Math.min(...xs) - bx, Math.max(...xs) + bx], y: [Math.min(...ys) - by, Math.max(...ys) + by] }, site);\n const nodes = (px: number) => Math.min(Math.max(Math.round(px / NODE_SPACING) + 1, MIN_NODES), MAX_NODES);\n const nx = nodes(frame.region.width);\n const ny = nodes(frame.region.height);\n const [x0, x1] = frame.x.domain;\n const [y0, y1] = frame.y.domain;\n const density = densityGrid(points, { x: [x0, x1], y: [y0, y1] }, nx, ny, { x: bx, y: by });\n const peak = Math.max(...density.values);\n field = {\n grid: { nx, ny, values: density.values.map((v) => (peak > 0 ? (v ?? 0) / peak : 0)) },\n xAt: (i) => x0 + (i * (x1 - x0)) / (nx - 1),\n yAt: (j) => y0 + (j * (y1 - y0)) / (ny - 1),\n };\n method = `of the density of ${points.length} points of ${xName} and ${yName}, estimated with an Epanechnikov kernel (bandwidths ${formatNumber(bx, locale, undefined)} and ${formatNumber(by, locale, undefined)}, Silverman's rule) and read as a share of its peak`;\n }\n const toPx = (p: GridPoint) => ({ x: frame.x(field.xAt(p.x)), y: frame.y(field.yAt(p.y)) });\n const pathOf = (polylines: readonly (readonly GridPoint[])[], close: boolean) =>\n polylines\n .map((line) =>\n line\n .map(toPx)\n .map((q, k) => `${k === 0 ? 'M' : 'L'}${q.x},${q.y}`)\n .join('') + (close ? 'Z' : ''),\n )\n .join('');\n\n const strokes: Stroke[] = [...card.strokes, ...frame.strokes];\n const labels: TextLabel[] = [...card.labels, ...frame.labels];\n const hitAreas: HitArea[] = [];\n const traced = contours(field.grid, thresholds);\n const drawn = traced.map((c, k) => ({ ...c, k })).filter((c) => c.rings.length > 0);\n const summaries = thresholds.map((level, k) => Object.freeze({ level, next: thresholds[k + 1] ?? null }));\n const base = modelBase(CHART, props, context, 'Contours', {\n columns: [valueName, 'band'],\n rows: summaries.map((s) => [format(s.level), s.next === null ? `${format(s.level)} and above` : `${format(s.level)} to ${format(s.next)}`]),\n });\n\n let top = '';\n const placed: { x: number; y: number }[] = [];\n drawn.forEach((c, n) => {\n const band = pathOf(c.band, true);\n top = filled ? band : pathOf(c.rings, true);\n if (filled) strokes.push({ d: band, role: 'encoding', part: 'ink', tone: toneOf((n + 1) / drawn.length) });\n else if (c.lines.length > 0) strokes.push({ d: pathOf(c.lines, false), role: 'encoding', part: 'ink' });\n // The level is named and reached on its longest line, or its first ring when it draws none.\n const lines = c.lines.length > 0 ? c.lines : c.rings;\n const length = (line: readonly GridPoint[]) => line.map(toPx).reduce((s, q, i, all) => (i === 0 ? 0 : s + Math.sqrt((q.x - (all[i - 1] as typeof q).x) ** 2 + (q.y - (all[i - 1] as typeof q).y) ** 2)), 0);\n // Levels are named at staggered places along their lines, longest line first, and not where a\n // name already is.\n const byLength = [...lines].sort((a, b) => length(b) - length(a));\n const longest = byLength[0] as readonly GridPoint[];\n const at = (line: readonly GridPoint[], f: number) => toPx(line[Math.min(Math.floor(line.length * f), line.length - 1)] as GridPoint);\n const fractions = [(n + 1) / (drawn.length + 1), 0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875];\n const spots = byLength.filter((line) => length(line) >= LABEL_ROOM).flatMap((line) => fractions.map((f) => at(line, f)));\n const free = spots.find((q) => placed.every((o) => (o.x - q.x) * (o.x - q.x) + (o.y - q.y) * (o.y - q.y) >= LABEL_GAP * LABEL_GAP));\n const mid = free ?? at(longest, fractions[0] as number);\n if (free && c.lines.length > 0) {\n placed.push(free);\n labels.push({ x: free.x, y: free.y - 3, text: format(c.level), kind: 'tick', part: 'axis', anchor: 'middle' });\n }\n hitAreas.push({ seriesKey: 'band', index: c.k, datum: summaries[c.k] as (typeof summaries)[number], value: c.level, x: mid.x, y: mid.y });\n });\n // One heightened element (REQ-442): the highest band — the region above the top level drawn.\n if (top !== '') {\n strokes.push({ d: top, role: 'encoding', part: 'heighten', paint: 'fill' });\n if (!filled) strokes.push({ d: top, role: 'encoding', part: 'ink', paint: 'stroke' });\n }\n\n const shown = drawn.map((c) => format(c.level));\n const description =\n props.description ??\n `${base.name}. Contours ${method}, ${filled ? 'filled in bands' : 'as lines'} at ${shown.length} levels${shown.length > 0 ? `: ${shown.join(', ')}; the highest band is ${shown.at(-1) as string} and above` : ''}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `ContourChart` recipe (REQ-423): iso-lines and filled bands of a point density or a regular grid. */\nexport const contourChart: ChartRecipe<ContourChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildContourChart });\n","/**\n * The Delaunay triangulation and its Voronoi dual (DD-028, REQ-424), owned. Points are snapped to\n * the 2-decimal output grid, so they are integers in hundredths, and inserted in `(x, y, index)`\n * order (Bowyer–Watson). The predicates are exact: each is evaluated in doubles with an error\n * bound and, when the bound cannot settle its sign, again with `BigInt`. Degenerate inputs —\n * duplicates, collinear and co-circular points — are handled by the predicates, never by\n * perturbation, so Node and every browser produce the same mesh (REQ-435).\n */\n\ninterface Point {\n readonly x: number;\n readonly y: number;\n}\n\n/** Relative error bounds of the double evaluations, with a margin over Shewchuk's. */\nconst ORIENT_BOUND = 1e-15;\nconst CIRCLE_BOUND = 1e-14;\n\n/**\n * Twice the signed area of `a, b, c` for integer coordinates: positive when they turn\n * counter-clockwise (y up), 0 when collinear; exact in sign.\n */\nexport function orient2d(a: Point, b: Point, c: Point): number {\n const left = (b.x - a.x) * (c.y - a.y);\n const right = (b.y - a.y) * (c.x - a.x);\n const det = left - right;\n if (Math.abs(det) > ORIENT_BOUND * (Math.abs(left) + Math.abs(right))) return det;\n const big = (BigInt(b.x) - BigInt(a.x)) * (BigInt(c.y) - BigInt(a.y)) - (BigInt(b.y) - BigInt(a.y)) * (BigInt(c.x) - BigInt(a.x));\n return big === 0n ? 0 : big > 0n ? 1 : -1;\n}\n\n/**\n * For counter-clockwise `a, b, c` with integer coordinates: positive when `d` is strictly inside\n * their circumcircle, 0 on it, negative outside; exact in sign.\n */\nexport function inCircle(a: Point, b: Point, c: Point, d: Point): number {\n // Translating by `d` is exact: the coordinates are integers.\n const adx = a.x - d.x;\n const ady = a.y - d.y;\n const bdx = b.x - d.x;\n const bdy = b.y - d.y;\n const cdx = c.x - d.x;\n const cdy = c.y - d.y;\n const alift = adx * adx + ady * ady;\n const blift = bdx * bdx + bdy * bdy;\n const clift = cdx * cdx + cdy * cdy;\n const bc = bdx * cdy - cdx * bdy;\n const ca = cdx * ady - adx * cdy;\n const ab = adx * bdy - bdx * ady;\n const det = alift * bc + blift * ca + clift * ab;\n const permanent =\n alift * (Math.abs(bdx * cdy) + Math.abs(cdx * bdy)) + blift * (Math.abs(cdx * ady) + Math.abs(adx * cdy)) + clift * (Math.abs(adx * bdy) + Math.abs(bdx * ady));\n if (Math.abs(det) > CIRCLE_BOUND * permanent) return det;\n const [Ax, Ay, Bx, By, Cx, Cy] = [adx, ady, bdx, bdy, cdx, cdy].map((v) => BigInt(v)) as [bigint, bigint, bigint, bigint, bigint, bigint];\n const big = (Ax * Ax + Ay * Ay) * (Bx * Cy - Cx * By) + (Bx * Bx + By * By) * (Cx * Ay - Ax * Cy) + (Cx * Cx + Cy * Cy) * (Ax * By - Bx * Ay);\n return big === 0n ? 0 : big > 0n ? 1 : -1;\n}\n\nexport interface Triangulation {\n /** Three indices of the input per triangle, counter-clockwise in hundredths (y up). */\n readonly triangles: readonly number[];\n /** The mesh's edges once each, `[u, v]` with `u < v`, sorted. */\n readonly edges: readonly (readonly [number, number])[];\n /** The indices drawn, ascending: the first of each point on the 2-decimal grid. */\n readonly kept: readonly number[];\n /** The indices dropped as repeating a kept point, ascending. */\n readonly duplicates: readonly number[];\n}\n\n/** Bowyer–Watson inside a super-triangle far beyond the points, removed at the end. */\nexport function triangulate(points: readonly Point[]): Triangulation {\n const n = points.length;\n const q = points.map((p) => ({ x: Math.round(p.x * 100), y: Math.round(p.y * 100) }));\n const order = q.map((_, k) => k).sort((a, b) => (q[a] as Point).x - (q[b] as Point).x || (q[a] as Point).y - (q[b] as Point).y || a - b);\n const kept: number[] = [];\n const duplicates: number[] = [];\n order.forEach((k, s) => {\n const prev = s > 0 ? (q[order[s - 1] as number] as Point) : undefined;\n const p = q[k] as Point;\n if (prev && prev.x === p.x && prev.y === p.y) duplicates.push(k);\n else kept.push(k);\n });\n duplicates.sort((a, b) => a - b);\n\n const sortedKept = [...kept].sort((a, b) => a - b);\n if (kept.length < 3) return { triangles: [], edges: chain(kept), kept: sortedKept, duplicates };\n\n // The super-triangle: vertices n, n + 1, n + 2, a million spans away.\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n for (const k of kept) {\n const p = q[k] as Point;\n minX = Math.min(minX, p.x);\n minY = Math.min(minY, p.y);\n maxX = Math.max(maxX, p.x);\n maxY = Math.max(maxY, p.y);\n }\n const span = Math.max(maxX - minX, maxY - minY, 1) * 1_000_000;\n const mx = Math.floor((minX + maxX) / 2);\n const my = Math.floor((minY + maxY) / 2);\n const vertex: Point[] = [...q, { x: mx - 3 * span, y: my - span }, { x: mx + 3 * span, y: my - span }, { x: mx, y: my + 3 * span }];\n const width = n + 3;\n\n const corners: number[] = [];\n const alive: boolean[] = [];\n const owner = new Map<number, number>();\n const add = (a: number, b: number, c: number): number => {\n const t = alive.length;\n corners.push(a, b, c);\n alive.push(true);\n owner.set(a * width + b, t);\n owner.set(b * width + c, t);\n owner.set(c * width + a, t);\n return t;\n };\n const remove = (t: number) => {\n alive[t] = false;\n const [a, b, c] = [corners[3 * t] as number, corners[3 * t + 1] as number, corners[3 * t + 2] as number];\n for (const [u, v] of [[a, b], [b, c], [c, a]] as const) if (owner.get(u * width + v) === t) owner.delete(u * width + v);\n };\n const at = (k: number) => vertex[k] as Point;\n\n let last = add(n, n + 1, n + 2);\n for (const k of kept) {\n const p = at(k);\n // Walk from the last triangle made towards the point (a visibility walk ends in a Delaunay mesh).\n let t = last;\n for (let steps = 0; steps <= alive.length; steps += 1) {\n let moved = false;\n for (let e = 0; e < 3; e += 1) {\n const a = corners[3 * t + e] as number;\n const b = corners[3 * t + ((e + 1) % 3)] as number;\n if (orient2d(at(a), at(b), p) < 0) {\n const across = owner.get(b * width + a);\n if (across !== undefined) {\n t = across;\n moved = true;\n break;\n }\n }\n }\n if (!moved) break;\n }\n // The cavity: the triangle holding the point, and every triangle reached across an edge whose\n // circumcircle holds it strictly.\n const cavity = new Set([t]);\n const stack = [t];\n const boundary: [number, number][] = [];\n while (stack.length > 0) {\n const u = stack.pop() as number;\n for (let e = 0; e < 3; e += 1) {\n const a = corners[3 * u + e] as number;\n const b = corners[3 * u + ((e + 1) % 3)] as number;\n const across = owner.get(b * width + a);\n if (across !== undefined && !cavity.has(across)) {\n const [x, y, z] = [corners[3 * across] as number, corners[3 * across + 1] as number, corners[3 * across + 2] as number];\n if (inCircle(at(x), at(y), at(z), p) > 0) {\n cavity.add(across);\n stack.push(across);\n continue;\n }\n }\n if (across === undefined || !cavity.has(across)) boundary.push([a, b]);\n }\n }\n for (const u of cavity) remove(u);\n // An edge first seen as boundary may have joined the cavity later: keep only true borders.\n for (const [a, b] of boundary) {\n const across = owner.get(b * width + a);\n if (across !== undefined && cavity.has(across)) continue;\n last = add(a, b, k);\n }\n }\n\n const triangles: number[] = [];\n for (let t = 0; t < alive.length; t += 1) {\n if (!alive[t]) continue;\n const tri = [corners[3 * t] as number, corners[3 * t + 1] as number, corners[3 * t + 2] as number];\n if (tri.some((v) => v >= n)) continue;\n triangles.push(...tri);\n }\n const sides = new Map<string, readonly [number, number]>();\n for (let t = 0; t < triangles.length; t += 3) {\n for (let e = 0; e < 3; e += 1) {\n const u = triangles[t + e] as number;\n const v = triangles[t + ((e + 1) % 3)] as number;\n const edge = [Math.min(u, v), Math.max(u, v)] as const;\n sides.set(`${edge[0]},${edge[1]}`, edge);\n }\n }\n const edges = triangles.length === 0 ? chain(kept) : [...sides.values()].sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n return { triangles, edges, kept: sortedKept, duplicates };\n}\n\n/** Points with no triangle — two, or all on one line — are joined in `(x, y)` order. */\nfunction chain(order: readonly number[]): [number, number][] {\n const edges: [number, number][] = [];\n for (let s = 1; s < order.length; s += 1) {\n const u = order[s - 1] as number;\n const v = order[s] as number;\n edges.push([Math.min(u, v), Math.max(u, v)]);\n }\n return edges.sort((a, b) => a[0] - b[0] || a[1] - b[1]);\n}\n\n/**\n * The Voronoi cell of each kept point inside `rect`: the rectangle clipped (Sutherland–Hodgman) by\n * the half-plane nearer the site than each of its mesh neighbours. Keyed by the site's index, in\n * `kept` order.\n */\nexport function voronoiCells(\n points: readonly Point[],\n mesh: Triangulation,\n rect: { readonly x: number; readonly y: number; readonly width: number; readonly height: number },\n): Map<number, Point[]> {\n const neighbours = new Map<number, number[]>(mesh.kept.map((k) => [k, []]));\n for (const [u, v] of mesh.edges) {\n neighbours.get(u)?.push(v);\n neighbours.get(v)?.push(u);\n }\n const cells = new Map<number, Point[]>();\n for (const k of mesh.kept) {\n const s = points[k] as Point;\n let cell: Point[] = [\n { x: rect.x, y: rect.y },\n { x: rect.x + rect.width, y: rect.y },\n { x: rect.x + rect.width, y: rect.y + rect.height },\n { x: rect.x, y: rect.y + rect.height },\n ];\n for (const m of neighbours.get(k) ?? []) {\n const o = points[m] as Point;\n // Keep the side of the bisector nearer `s`: (p − mid) · (o − s) ≤ 0.\n const nx = o.x - s.x;\n const ny = o.y - s.y;\n const offset = (nx * (o.x + s.x) + ny * (o.y + s.y)) / 2;\n const side = (p: Point) => p.x * nx + p.y * ny - offset;\n const clipped: Point[] = [];\n for (let e = 0; e < cell.length; e += 1) {\n const a = cell[e] as Point;\n const b = cell[(e + 1) % cell.length] as Point;\n const sa = side(a);\n const sb = side(b);\n if (sa <= 0) clipped.push(a);\n if ((sa < 0 && sb > 0) || (sa > 0 && sb < 0)) {\n const f = sa / (sa - sb);\n clipped.push({ x: a.x + f * (b.x - a.x), y: a.y + f * (b.y - a.y) });\n }\n }\n cell = clipped;\n }\n cells.set(k, cell);\n }\n return cells;\n}\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `DelaunayChart` (REQ-424): 60 distinct labelled points. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const DELAUNAY_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { label: 'P01', x: 45, y: 27.3 },\n { label: 'P02', x: 37.4, y: 55.6 },\n { label: 'P03', x: 90.6, y: 39.1 },\n { label: 'P04', x: 27.4, y: 1.7 },\n { label: 'P05', x: 0.2, y: 31.8 },\n { label: 'P06', x: 40.8, y: 17.6 },\n { label: 'P07', x: 63.2, y: 56.9 },\n { label: 'P08', x: 65.5, y: 52.9 },\n { label: 'P09', x: 38.7, y: 42.3 },\n { label: 'P10', x: 6.1, y: 17.1 },\n { label: 'P11', x: 92.8, y: 39 },\n { label: 'P12', x: 54.3, y: 58 },\n { label: 'P13', x: 80, y: 54.1 },\n { label: 'P14', x: 9.6, y: 49.1 },\n { label: 'P15', x: 92.2, y: 44.5 },\n { label: 'P16', x: 98.8, y: 7.8 },\n { label: 'P17', x: 85.5, y: 35.4 },\n { label: 'P18', x: 92.9, y: 40.9 },\n { label: 'P19', x: 71.3, y: 8.3 },\n { label: 'P20', x: 44.5, y: 13 },\n { label: 'P21', x: 39, y: 36 },\n { label: 'P22', x: 96, y: 33.3 },\n { label: 'P23', x: 54.1, y: 33.8 },\n { label: 'P24', x: 70.5, y: 8.9 },\n { label: 'P25', x: 22.6, y: 12.9 },\n { label: 'P26', x: 25.6, y: 14.8 },\n { label: 'P27', x: 63.9, y: 55.5 },\n { label: 'P28', x: 83.9, y: 43.3 },\n { label: 'P29', x: 3.8, y: 13.3 },\n { label: 'P30', x: 34, y: 12.3 },\n { label: 'P31', x: 98, y: 57.4 },\n { label: 'P32', x: 50.4, y: 23.7 },\n { label: 'P33', x: 34.6, y: 31.4 },\n { label: 'P34', x: 17.7, y: 34.2 },\n { label: 'P35', x: 62.2, y: 52.3 },\n { label: 'P36', x: 26.3, y: 22.5 },\n { label: 'P37', x: 13, y: 9.5 },\n { label: 'P38', x: 95.2, y: 50.7 },\n { label: 'P39', x: 42.2, y: 32.6 },\n { label: 'P40', x: 94.5, y: 8.4 },\n { label: 'P41', x: 46.2, y: 28.2 },\n { label: 'P42', x: 86.6, y: 0.2 },\n { label: 'P43', x: 15.6, y: 46.7 },\n { label: 'P44', x: 45.5, y: 18.3 },\n { label: 'P45', x: 38.5, y: 39.8 },\n { label: 'P46', x: 28.6, y: 6.2 },\n { label: 'P47', x: 24.2, y: 39.6 },\n { label: 'P48', x: 22.8, y: 37.7 },\n { label: 'P49', x: 38.6, y: 58.7 },\n { label: 'P50', x: 16.2, y: 44.6 },\n { label: 'P51', x: 66.9, y: 40.6 },\n { label: 'P52', x: 40.3, y: 2.6 },\n { label: 'P53', x: 34.3, y: 52.2 },\n { label: 'P54', x: 6.4, y: 28.8 },\n { label: 'P55', x: 37.2, y: 30.1 },\n { label: 'P56', x: 34, y: 17.1 },\n { label: 'P57', x: 23.4, y: 24.1 },\n { label: 'P58', x: 56.9, y: 45.3 },\n { label: 'P59', x: 14.2, y: 56.2 },\n { label: 'P60', x: 21.3, y: 38 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const DELAUNAY_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n xKey: 'x',\n yKey: 'y',\n labelKey: 'label',\n} as const);\n","import type { ChartModel, ChartRecipe, DelaunayChartProps, HitArea, RecipeContext, Stroke, TextLabel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { cartesianPlot } from '../shared/cartesian';\nimport { warnValue } from '../shared/cells';\nimport { checkCeiling, readPointCloud } from '../shared/contracts';\nimport { triangulate, voronoiCells } from '../shared/delaunay';\nimport { accessorName, circlePath, formatNumber, formatValue, read } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { xyFrame } from '../shared/xy';\nimport { DELAUNAY_CHART_DEMO, DELAUNAY_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'DelaunayChart';\nconst DOT_RADIUS = 2.5;\nconst HEIGHTEN_RADIUS = 3.5;\n/** Up to this many points every given label is printed; past it, only the heightened point's. */\nconst LABELLED = 24;\n\nconst round2 = (v: number) => Math.round(v * 100) / 100;\n\ntype Spot = { readonly x: number; readonly y: number };\n\nfunction buildDelaunayChart(props: DelaunayChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? DELAUNAY_CHART_DEMO;\n const xKey = usesDemo ? DELAUNAY_CHART_DEMO_KEYS.xKey : (props.xKey ?? 'x');\n const yKey = usesDemo ? DELAUNAY_CHART_DEMO_KEYS.yKey : (props.yKey ?? 'y');\n const labelKey = usesDemo ? DELAUNAY_CHART_DEMO_KEYS.labelKey : props.labelKey;\n const voronoi = props.mesh === 'voronoi';\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const xName = accessorName(xKey, 'x');\n const yName = accessorName(yKey, 'y');\n const labelName = labelKey === undefined ? 'point' : accessorName(labelKey, 'label');\n\n const points = readPointCloud(CHART, data, { x: xKey, y: yKey, ...(labelKey === undefined ? {} : { label: labelKey }) });\n checkCeiling(CHART, yName, 'points', points.length);\n // Degrees are known after the layout; until then the table names the chart.\n const named = modelBase(CHART, props, context, voronoi ? 'Voronoi cells' : 'Delaunay triangulation', { columns: [labelName, xName, yName, 'degree'], rows: [] });\n const measured = measure(named, props, context);\n if ('deferred' in measured) return measured.deferred;\n const card = cardLayout(props, { width: measured.width, areaHeight: measured.height, chrome: props.chrome ?? 'card', locale });\n const plot = cartesianPlot(card.area);\n if (points.length === 0) return emptyModel(named, props, context, { viewBox: card.viewBox, plot, strokes: [...card.strokes], labels: [...card.labels] }, data.length === 0);\n\n const extent = (values: number[]) => [Math.min(...values), Math.max(...values)] as const;\n const frame = xyFrame(card.area, plot, { x: extent(points.map((p) => p.x)), y: extent(points.map((p) => p.y)) }, { chart: CHART, xName, yName, padding: context.domainPadding, locale, numberFormat, inset: HEIGHTEN_RADIUS });\n // The mesh is built on the drawn positions, rounded as they are emitted (REQ-002), so it is the\n // triangulation of what the reader sees.\n const at = points.map((p) => ({ x: round2(frame.x(p.x)), y: round2(frame.y(p.y)) }));\n const mesh = triangulate(at);\n if (mesh.duplicates.length > 0) {\n warnValue(CHART, yName, `${mesh.duplicates.length} points fall on another; the first row is drawn. The first repeat is row ${(points[mesh.duplicates[0] as number] as (typeof points)[number]).index}.`);\n }\n const degree = new Map<number, number>(mesh.kept.map((k) => [k, 0]));\n for (const [u, v] of mesh.edges) {\n degree.set(u, (degree.get(u) as number) + 1);\n degree.set(v, (degree.get(v) as number) + 1);\n }\n\n const byRow = new Map(points.map((p, k) => [p.index, k]));\n const base = modelBase(CHART, props, context, voronoi ? 'Voronoi cells' : 'Delaunay triangulation', {\n columns: [labelName, xName, yName, 'degree'],\n rows: data.map((datum, index) => {\n const k = byRow.get(index);\n const d = k === undefined ? undefined : degree.get(k);\n return [\n labelKey === undefined ? String(index + 1) : formatValue(read(labelKey, datum, index), locale, { useGrouping: false, maximumFractionDigits: 2 }),\n formatValue(read(xKey, datum, index), locale, numberFormat),\n formatValue(read(yKey, datum, index), locale, numberFormat),\n d === undefined ? '—' : formatNumber(d, locale, undefined),\n ];\n }),\n });\n\n const strokes: Stroke[] = [...card.strokes, ...frame.strokes];\n const labels: TextLabel[] = [...card.labels, ...frame.labels];\n const hitAreas: HitArea[] = [];\n // The mesh as one secondary stroke, drawn in the order of its coordinates, so the row order does\n // not move it (I-23).\n const key = (q: { x: number; y: number }) => `${q.x},${q.y}`;\n let d = '';\n if (voronoi) {\n const cells = voronoiCells(at, mesh, frame.region);\n d = [...cells.entries()]\n .sort(([a], [b]) => (at[a] as { x: number }).x - (at[b] as { x: number }).x || (at[a] as { y: number }).y - (at[b] as { y: number }).y)\n .map(([, cell]) => `${cell.map((q, i) => `${i === 0 ? 'M' : 'L'}${key({ x: round2(q.x), y: round2(q.y) })}`).join('')}Z`)\n .join('');\n } else {\n d = mesh.edges\n .map(([u, v]) => [at[u], at[v]].sort((a, b) => (a as Spot).x - (b as Spot).x || (a as Spot).y - (b as Spot).y) as [Spot, Spot])\n .sort(([a, b], [c, e]) => a.x - c.x || a.y - c.y || b.x - e.x || b.y - e.y)\n .map(([a, b]) => `M${key(a)}L${key(b)}`)\n .join('');\n }\n if (d !== '') strokes.push({ d, role: 'encoding', part: 'ink-secondary' });\n\n // Points in data order, which the keyboard walks (API delta §3).\n const kept = [...mesh.kept].sort((a, b) => (points[a] as { index: number }).index - (points[b] as { index: number }).index);\n // The busiest point: the highest degree; a tie goes to the lowest x, then y, so the row order\n // cannot change it (I-23).\n const rank = (k: number) => [-(degree.get(k) as number), (points[k] as { x: number }).x, (points[k] as { y: number }).y];\n const before = (a: number, b: number) => {\n const [ra, rb] = [rank(a), rank(b)];\n return (ra[0] as number) - (rb[0] as number) || (ra[1] as number) - (rb[1] as number) || (ra[2] as number) - (rb[2] as number);\n };\n const busiest = kept.reduce((best, k) => (before(k, best) < 0 ? k : best), kept[0] as number);\n for (const k of kept) {\n const p = points[k] as (typeof points)[number];\n const q = at[k] as { x: number; y: number };\n strokes.push({ d: circlePath(q.x, q.y, DOT_RADIUS), role: 'encoding', part: 'ink' });\n hitAreas.push({ seriesKey: 'degree', index: p.index, datum: p.datum, value: degree.get(k) as number, x: q.x, y: q.y, box: { x: q.x - DOT_RADIUS, y: q.y - DOT_RADIUS, width: 2 * DOT_RADIUS, height: 2 * DOT_RADIUS } });\n if (p.label !== undefined && (kept.length <= LABELLED || k === busiest)) {\n labels.push({ x: q.x + 5, y: q.y - 5, text: p.label, kind: 'tick', part: 'axis', anchor: q.x > plot.x + plot.width * 0.8 ? 'end' : 'start' });\n }\n }\n const top = points[busiest] as (typeof points)[number];\n const spot = at[busiest] as { x: number; y: number };\n\n // One heightened element (REQ-442): the point of highest degree.\n const mark = circlePath(spot.x, spot.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 const triangles = mesh.triangles.length / 3;\n const name = top.label ?? `point ${top.index + 1}`;\n const description =\n props.description ??\n `${base.name}. ${voronoi ? `The Voronoi cells of ${kept.length} points` : `The Delaunay triangulation of ${kept.length} points, ${triangles} triangles`}, ${xName} across and ${yName} up; ${name} has the most neighbours, ${formatNumber(degree.get(busiest) as number, locale, undefined)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `DelaunayChart` recipe (REQ-424): the triangulation of x-y points, or its Voronoi cells. */\nexport const delaunayChart: ChartRecipe<DelaunayChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildDelaunayChart });\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum } from '../../types';\n\n/** Demo dataset of `VectorFieldChart` (REQ-425): a vortex on a 20 × 14 grid, its speed falling off with distance. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const VECTOR_FIELD_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { x: 0, y: 0, u: 0.852, v: -1.246 },\n { x: 1, y: 0, u: 0.967, v: -1.264 },\n { x: 2, y: 0, u: 1.097, v: -1.266 },\n { x: 3, y: 0, u: 1.244, v: -1.244 },\n { x: 4, y: 0, u: 1.405, v: -1.189 },\n { x: 5, y: 0, u: 1.576, v: -1.091 },\n { x: 6, y: 0, u: 1.745, v: -0.94 },\n { x: 7, y: 0, u: 1.898, v: -0.73 },\n { x: 8, y: 0, u: 2.016, v: -0.465 },\n { x: 9, y: 0, u: 2.08, v: -0.16 },\n { x: 10, y: 0, u: 2.08, v: 0.16 },\n { x: 11, y: 0, u: 2.016, v: 0.465 },\n { x: 12, y: 0, u: 1.898, v: 0.73 },\n { x: 13, y: 0, u: 1.745, v: 0.94 },\n { x: 14, y: 0, u: 1.576, v: 1.091 },\n { x: 15, y: 0, u: 1.405, v: 1.189 },\n { x: 16, y: 0, u: 1.244, v: 1.244 },\n { x: 17, y: 0, u: 1.097, v: 1.266 },\n { x: 18, y: 0, u: 0.967, v: 1.264 },\n { x: 19, y: 0, u: 0.852, v: 1.246 },\n { x: 0, y: 1, u: 0.783, v: -1.352 },\n { x: 1, y: 1, u: 0.898, v: -1.388 },\n { x: 2, y: 1, u: 1.033, v: -1.408 },\n { x: 3, y: 1, u: 1.189, v: -1.405 },\n { x: 4, y: 1, u: 1.366, v: -1.366 },\n { x: 5, y: 1, u: 1.56, v: -1.277 },\n { x: 6, y: 1, u: 1.76, v: -1.12 },\n { x: 7, y: 1, u: 1.947, v: -0.885 },\n { x: 8, y: 1, u: 2.095, v: -0.571 },\n { x: 9, y: 1, u: 2.178, v: -0.198 },\n { x: 10, y: 1, u: 2.178, v: 0.198 },\n { x: 11, y: 1, u: 2.095, v: 0.571 },\n { x: 12, y: 1, u: 1.947, v: 0.885 },\n { x: 13, y: 1, u: 1.76, v: 1.12 },\n { x: 14, y: 1, u: 1.56, v: 1.277 },\n { x: 15, y: 1, u: 1.366, v: 1.366 },\n { x: 16, y: 1, u: 1.189, v: 1.405 },\n { x: 17, y: 1, u: 1.033, v: 1.408 },\n { x: 18, y: 1, u: 0.898, v: 1.388 },\n { x: 19, y: 1, u: 0.783, v: 1.352 },\n { x: 0, y: 2, u: 0.69, v: -1.456 },\n { x: 1, y: 2, u: 0.8, v: -1.511 },\n { x: 2, y: 2, u: 0.933, v: -1.554 },\n { x: 3, y: 2, u: 1.091, v: -1.576 },\n { x: 4, y: 2, u: 1.277, v: -1.56 },\n { x: 5, y: 2, u: 1.488, v: -1.488 },\n { x: 6, y: 2, u: 1.714, v: -1.333 },\n { x: 7, y: 2, u: 1.935, v: -1.075 },\n { x: 8, y: 2, u: 2.118, v: -0.706 },\n { x: 9, y: 2, u: 2.222, v: -0.247 },\n { x: 10, y: 2, u: 2.222, v: 0.247 },\n { x: 11, y: 2, u: 2.118, v: 0.706 },\n { x: 12, y: 2, u: 1.935, v: 1.075 },\n { x: 13, y: 2, u: 1.714, v: 1.333 },\n { x: 14, y: 2, u: 1.488, v: 1.488 },\n { x: 15, y: 2, u: 1.277, v: 1.56 },\n { x: 16, y: 2, u: 1.091, v: 1.576 },\n { x: 17, y: 2, u: 0.933, v: 1.554 },\n { x: 18, y: 2, u: 0.8, v: 1.511 },\n { x: 19, y: 2, u: 0.69, v: 1.456 },\n { x: 0, y: 3, u: 0.571, v: -1.551 },\n { x: 1, y: 3, u: 0.67, v: -1.627 },\n { x: 2, y: 3, u: 0.791, v: -1.695 },\n { x: 3, y: 3, u: 0.94, v: -1.745 },\n { x: 4, y: 3, u: 1.12, v: -1.76 },\n { x: 5, y: 3, u: 1.333, v: -1.714 },\n { x: 6, y: 3, u: 1.573, v: -1.573 },\n { x: 7, y: 3, u: 1.818, v: -1.299 },\n { x: 8, y: 3, u: 2.029, v: -0.87 },\n { x: 9, y: 3, u: 2.154, v: -0.308 },\n { x: 10, y: 3, u: 2.154, v: 0.308 },\n { x: 11, y: 3, u: 2.029, v: 0.87 },\n { x: 12, y: 3, u: 1.818, v: 1.299 },\n { x: 13, y: 3, u: 1.573, v: 1.573 },\n { x: 14, y: 3, u: 1.333, v: 1.714 },\n { x: 15, y: 3, u: 1.12, v: 1.76 },\n { x: 16, y: 3, u: 0.94, v: 1.745 },\n { x: 17, y: 3, u: 0.791, v: 1.695 },\n { x: 18, y: 3, u: 0.67, v: 1.627 },\n { x: 19, y: 3, u: 0.571, v: 1.551 },\n { x: 0, y: 4, u: 0.429, v: -1.631 },\n { x: 1, y: 4, u: 0.508, v: -1.726 },\n { x: 2, y: 4, u: 0.606, v: -1.818 },\n { x: 3, y: 4, u: 0.73, v: -1.898 },\n { x: 4, y: 4, u: 0.885, v: -1.947 },\n { x: 5, y: 4, u: 1.075, v: -1.935 },\n { x: 6, y: 4, u: 1.299, v: -1.818 },\n { x: 7, y: 4, u: 1.538, v: -1.538 },\n { x: 8, y: 4, u: 1.754, v: -1.053 },\n { x: 9, y: 4, u: 1.887, v: -0.377 },\n { x: 10, y: 4, u: 1.887, v: 0.377 },\n { x: 11, y: 4, u: 1.754, v: 1.053 },\n { x: 12, y: 4, u: 1.538, v: 1.538 },\n { x: 13, y: 4, u: 1.299, v: 1.818 },\n { x: 14, y: 4, u: 1.075, v: 1.935 },\n { x: 15, y: 4, u: 0.885, v: 1.947 },\n { x: 16, y: 4, u: 0.73, v: 1.898 },\n { x: 17, y: 4, u: 0.606, v: 1.818 },\n { x: 18, y: 4, u: 0.508, v: 1.726 },\n { x: 19, y: 4, u: 0.429, v: 1.631 },\n { x: 0, y: 5, u: 0.267, v: -1.689 },\n { x: 1, y: 5, u: 0.317, v: -1.799 },\n { x: 2, y: 5, u: 0.382, v: -1.911 },\n { x: 3, y: 5, u: 0.465, v: -2.016 },\n { x: 4, y: 5, u: 0.571, v: -2.095 },\n { x: 5, y: 5, u: 0.706, v: -2.118 },\n { x: 6, y: 5, u: 0.87, v: -2.029 },\n { x: 7, y: 5, u: 1.053, v: -1.754 },\n { x: 8, y: 5, u: 1.224, v: -1.224 },\n { x: 9, y: 5, u: 1.333, v: -0.444 },\n { x: 10, y: 5, u: 1.333, v: 0.444 },\n { x: 11, y: 5, u: 1.224, v: 1.224 },\n { x: 12, y: 5, u: 1.053, v: 1.754 },\n { x: 13, y: 5, u: 0.87, v: 2.029 },\n { x: 14, y: 5, u: 0.706, v: 2.118 },\n { x: 15, y: 5, u: 0.571, v: 2.095 },\n { x: 16, y: 5, u: 0.465, v: 2.016 },\n { x: 17, y: 5, u: 0.382, v: 1.911 },\n { x: 18, y: 5, u: 0.317, v: 1.799 },\n { x: 19, y: 5, u: 0.267, v: 1.689 },\n { x: 0, y: 6, u: 0.09, v: -1.719 },\n { x: 1, y: 6, u: 0.108, v: -1.838 },\n { x: 2, y: 6, u: 0.131, v: -1.961 },\n { x: 3, y: 6, u: 0.16, v: -2.08 },\n { x: 4, y: 6, u: 0.198, v: -2.178 },\n { x: 5, y: 6, u: 0.247, v: -2.222 },\n { x: 6, y: 6, u: 0.308, v: -2.154 },\n { x: 7, y: 6, u: 0.377, v: -1.887 },\n { x: 8, y: 6, u: 0.444, v: -1.333 },\n { x: 9, y: 6, u: 0.488, v: -0.488 },\n { x: 10, y: 6, u: 0.488, v: 0.488 },\n { x: 11, y: 6, u: 0.444, v: 1.333 },\n { x: 12, y: 6, u: 0.377, v: 1.887 },\n { x: 13, y: 6, u: 0.308, v: 2.154 },\n { x: 14, y: 6, u: 0.247, v: 2.222 },\n { x: 15, y: 6, u: 0.198, v: 2.178 },\n { x: 16, y: 6, u: 0.16, v: 2.08 },\n { x: 17, y: 6, u: 0.131, v: 1.961 },\n { x: 18, y: 6, u: 0.108, v: 1.838 },\n { x: 19, y: 6, u: 0.09, v: 1.719 },\n { x: 0, y: 7, u: -0.09, v: -1.719 },\n { x: 1, y: 7, u: -0.108, v: -1.838 },\n { x: 2, y: 7, u: -0.131, v: -1.961 },\n { x: 3, y: 7, u: -0.16, v: -2.08 },\n { x: 4, y: 7, u: -0.198, v: -2.178 },\n { x: 5, y: 7, u: -0.247, v: -2.222 },\n { x: 6, y: 7, u: -0.308, v: -2.154 },\n { x: 7, y: 7, u: -0.377, v: -1.887 },\n { x: 8, y: 7, u: -0.444, v: -1.333 },\n { x: 9, y: 7, u: -0.488, v: -0.488 },\n { x: 10, y: 7, u: -0.488, v: 0.488 },\n { x: 11, y: 7, u: -0.444, v: 1.333 },\n { x: 12, y: 7, u: -0.377, v: 1.887 },\n { x: 13, y: 7, u: -0.308, v: 2.154 },\n { x: 14, y: 7, u: -0.247, v: 2.222 },\n { x: 15, y: 7, u: -0.198, v: 2.178 },\n { x: 16, y: 7, u: -0.16, v: 2.08 },\n { x: 17, y: 7, u: -0.131, v: 1.961 },\n { x: 18, y: 7, u: -0.108, v: 1.838 },\n { x: 19, y: 7, u: -0.09, v: 1.719 },\n { x: 0, y: 8, u: -0.267, v: -1.689 },\n { x: 1, y: 8, u: -0.317, v: -1.799 },\n { x: 2, y: 8, u: -0.382, v: -1.911 },\n { x: 3, y: 8, u: -0.465, v: -2.016 },\n { x: 4, y: 8, u: -0.571, v: -2.095 },\n { x: 5, y: 8, u: -0.706, v: -2.118 },\n { x: 6, y: 8, u: -0.87, v: -2.029 },\n { x: 7, y: 8, u: -1.053, v: -1.754 },\n { x: 8, y: 8, u: -1.224, v: -1.224 },\n { x: 9, y: 8, u: -1.333, v: -0.444 },\n { x: 10, y: 8, u: -1.333, v: 0.444 },\n { x: 11, y: 8, u: -1.224, v: 1.224 },\n { x: 12, y: 8, u: -1.053, v: 1.754 },\n { x: 13, y: 8, u: -0.87, v: 2.029 },\n { x: 14, y: 8, u: -0.706, v: 2.118 },\n { x: 15, y: 8, u: -0.571, v: 2.095 },\n { x: 16, y: 8, u: -0.465, v: 2.016 },\n { x: 17, y: 8, u: -0.382, v: 1.911 },\n { x: 18, y: 8, u: -0.317, v: 1.799 },\n { x: 19, y: 8, u: -0.267, v: 1.689 },\n { x: 0, y: 9, u: -0.429, v: -1.631 },\n { x: 1, y: 9, u: -0.508, v: -1.726 },\n { x: 2, y: 9, u: -0.606, v: -1.818 },\n { x: 3, y: 9, u: -0.73, v: -1.898 },\n { x: 4, y: 9, u: -0.885, v: -1.947 },\n { x: 5, y: 9, u: -1.075, v: -1.935 },\n { x: 6, y: 9, u: -1.299, v: -1.818 },\n { x: 7, y: 9, u: -1.538, v: -1.538 },\n { x: 8, y: 9, u: -1.754, v: -1.053 },\n { x: 9, y: 9, u: -1.887, v: -0.377 },\n { x: 10, y: 9, u: -1.887, v: 0.377 },\n { x: 11, y: 9, u: -1.754, v: 1.053 },\n { x: 12, y: 9, u: -1.538, v: 1.538 },\n { x: 13, y: 9, u: -1.299, v: 1.818 },\n { x: 14, y: 9, u: -1.075, v: 1.935 },\n { x: 15, y: 9, u: -0.885, v: 1.947 },\n { x: 16, y: 9, u: -0.73, v: 1.898 },\n { x: 17, y: 9, u: -0.606, v: 1.818 },\n { x: 18, y: 9, u: -0.508, v: 1.726 },\n { x: 19, y: 9, u: -0.429, v: 1.631 },\n { x: 0, y: 10, u: -0.571, v: -1.551 },\n { x: 1, y: 10, u: -0.67, v: -1.627 },\n { x: 2, y: 10, u: -0.791, v: -1.695 },\n { x: 3, y: 10, u: -0.94, v: -1.745 },\n { x: 4, y: 10, u: -1.12, v: -1.76 },\n { x: 5, y: 10, u: -1.333, v: -1.714 },\n { x: 6, y: 10, u: -1.573, v: -1.573 },\n { x: 7, y: 10, u: -1.818, v: -1.299 },\n { x: 8, y: 10, u: -2.029, v: -0.87 },\n { x: 9, y: 10, u: -2.154, v: -0.308 },\n { x: 10, y: 10, u: -2.154, v: 0.308 },\n { x: 11, y: 10, u: -2.029, v: 0.87 },\n { x: 12, y: 10, u: -1.818, v: 1.299 },\n { x: 13, y: 10, u: -1.573, v: 1.573 },\n { x: 14, y: 10, u: -1.333, v: 1.714 },\n { x: 15, y: 10, u: -1.12, v: 1.76 },\n { x: 16, y: 10, u: -0.94, v: 1.745 },\n { x: 17, y: 10, u: -0.791, v: 1.695 },\n { x: 18, y: 10, u: -0.67, v: 1.627 },\n { x: 19, y: 10, u: -0.571, v: 1.551 },\n { x: 0, y: 11, u: -0.69, v: -1.456 },\n { x: 1, y: 11, u: -0.8, v: -1.511 },\n { x: 2, y: 11, u: -0.933, v: -1.554 },\n { x: 3, y: 11, u: -1.091, v: -1.576 },\n { x: 4, y: 11, u: -1.277, v: -1.56 },\n { x: 5, y: 11, u: -1.488, v: -1.488 },\n { x: 6, y: 11, u: -1.714, v: -1.333 },\n { x: 7, y: 11, u: -1.935, v: -1.075 },\n { x: 8, y: 11, u: -2.118, v: -0.706 },\n { x: 9, y: 11, u: -2.222, v: -0.247 },\n { x: 10, y: 11, u: -2.222, v: 0.247 },\n { x: 11, y: 11, u: -2.118, v: 0.706 },\n { x: 12, y: 11, u: -1.935, v: 1.075 },\n { x: 13, y: 11, u: -1.714, v: 1.333 },\n { x: 14, y: 11, u: -1.488, v: 1.488 },\n { x: 15, y: 11, u: -1.277, v: 1.56 },\n { x: 16, y: 11, u: -1.091, v: 1.576 },\n { x: 17, y: 11, u: -0.933, v: 1.554 },\n { x: 18, y: 11, u: -0.8, v: 1.511 },\n { x: 19, y: 11, u: -0.69, v: 1.456 },\n { x: 0, y: 12, u: -0.783, v: -1.352 },\n { x: 1, y: 12, u: -0.898, v: -1.388 },\n { x: 2, y: 12, u: -1.033, v: -1.408 },\n { x: 3, y: 12, u: -1.189, v: -1.405 },\n { x: 4, y: 12, u: -1.366, v: -1.366 },\n { x: 5, y: 12, u: -1.56, v: -1.277 },\n { x: 6, y: 12, u: -1.76, v: -1.12 },\n { x: 7, y: 12, u: -1.947, v: -0.885 },\n { x: 8, y: 12, u: -2.095, v: -0.571 },\n { x: 9, y: 12, u: -2.178, v: -0.198 },\n { x: 10, y: 12, u: -2.178, v: 0.198 },\n { x: 11, y: 12, u: -2.095, v: 0.571 },\n { x: 12, y: 12, u: -1.947, v: 0.885 },\n { x: 13, y: 12, u: -1.76, v: 1.12 },\n { x: 14, y: 12, u: -1.56, v: 1.277 },\n { x: 15, y: 12, u: -1.366, v: 1.366 },\n { x: 16, y: 12, u: -1.189, v: 1.405 },\n { x: 17, y: 12, u: -1.033, v: 1.408 },\n { x: 18, y: 12, u: -0.898, v: 1.388 },\n { x: 19, y: 12, u: -0.783, v: 1.352 },\n { x: 0, y: 13, u: -0.852, v: -1.246 },\n { x: 1, y: 13, u: -0.967, v: -1.264 },\n { x: 2, y: 13, u: -1.097, v: -1.266 },\n { x: 3, y: 13, u: -1.244, v: -1.244 },\n { x: 4, y: 13, u: -1.405, v: -1.189 },\n { x: 5, y: 13, u: -1.576, v: -1.091 },\n { x: 6, y: 13, u: -1.745, v: -0.94 },\n { x: 7, y: 13, u: -1.898, v: -0.73 },\n { x: 8, y: 13, u: -2.016, v: -0.465 },\n { x: 9, y: 13, u: -2.08, v: -0.16 },\n { x: 10, y: 13, u: -2.08, v: 0.16 },\n { x: 11, y: 13, u: -2.016, v: 0.465 },\n { x: 12, y: 13, u: -1.898, v: 0.73 },\n { x: 13, y: 13, u: -1.745, v: 0.94 },\n { x: 14, y: 13, u: -1.576, v: 1.091 },\n { x: 15, y: 13, u: -1.405, v: 1.189 },\n { x: 16, y: 13, u: -1.244, v: 1.244 },\n { x: 17, y: 13, u: -1.097, v: 1.266 },\n { x: 18, y: 13, u: -0.967, v: 1.264 },\n { x: 19, y: 13, u: -0.852, v: 1.246 },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const VECTOR_FIELD_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n xKey: 'x',\n yKey: 'y',\n uKey: 'u',\n vKey: 'v',\n} as const);\n","import type { ChartModel, ChartRecipe, HitArea, RecipeContext, Stroke, TextLabel, VectorFieldChartProps } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { LEGEND_BAND, PLOT_INSET, cartesianPlot } from '../shared/cartesian';\nimport { checkCeiling, checkPositive, readVectorField, type Vector } from '../shared/contracts';\nimport { accessorName, circlePath, formatNumber } from '../shared/format';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { xyFrame } from '../shared/xy';\nimport { VECTOR_FIELD_CHART_DEMO, VECTOR_FIELD_CHART_DEMO_KEYS } from './demo';\n\nconst CHART = 'VectorFieldChart';\n/** By default the longest arrow spans this share of the grid's spacing. */\nconst FILL = 0.9;\n/** Spacing assumed along an axis with a single value. */\nconst LONE_SPACING = 24;\n/** The head: at most this long, its half-width a share of its length. */\nconst HEAD = 5;\nconst HEAD_WIDTH = 0.6;\nconst DOT_RADIUS = 1.2;\n/** Length of the key's arrow, at most, in px. */\nconst KEY_ROOM = 40;\n\n/** Arrow from `tail` to `tip`: the shaft, then the head as a closed triangle (heightening fills it). */\nfunction arrowPath(tail: { x: number; y: number }, tip: { x: number; y: number }): string {\n const dx = tip.x - tail.x;\n const dy = tip.y - tail.y;\n const length = Math.sqrt(dx * dx + dy * dy);\n const head = Math.min(HEAD, length * 0.4);\n const ux = dx / length;\n const uy = dy / length;\n const bx = tip.x - ux * head;\n const by = tip.y - uy * head;\n const w = head * HEAD_WIDTH;\n return `M${tail.x},${tail.y}L${bx},${by}M${tip.x},${tip.y}L${bx - uy * w},${by + ux * w}L${bx + uy * w},${by - ux * w}Z`;\n}\n\n/** The smallest gap between neighbouring positions, in px. */\nfunction spacing(positions: readonly number[]): number {\n let gap = Number.POSITIVE_INFINITY;\n for (let k = 1; k < positions.length; k += 1) gap = Math.min(gap, Math.abs((positions[k] as number) - (positions[k - 1] as number)));\n return gap;\n}\n\nfunction buildVectorFieldChart(props: VectorFieldChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? VECTOR_FIELD_CHART_DEMO;\n const keys = VECTOR_FIELD_CHART_DEMO_KEYS;\n const xKey = usesDemo ? keys.xKey : (props.xKey ?? 'x');\n const yKey = usesDemo ? keys.yKey : (props.yKey ?? 'y');\n const uKey = usesDemo ? keys.uKey : (props.uKey ?? 'u');\n const vKey = usesDemo ? keys.vKey : (props.vKey ?? 'v');\n const given = checkPositive(CHART, 'scale', props.scale);\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const xName = accessorName(xKey, 'x');\n const yName = accessorName(yKey, 'y');\n const uName = accessorName(uKey, 'u');\n const vName = accessorName(vKey, 'v');\n\n const field = readVectorField(CHART, data, { x: xKey, y: yKey, u: uKey, v: vKey });\n const nx = field.xs.length;\n const ny = field.ys.length;\n checkCeiling(CHART, uName, 'gridCells', nx * ny);\n // Grid order, top row first and left to right: the order of the table and of the keyboard.\n const cells: { i: number; j: number; vector: Vector; magnitude: number }[] = [];\n for (let j = ny - 1; j >= 0; j -= 1) {\n for (let i = 0; i < nx; i += 1) {\n const vector = field.vectors[j * nx + i];\n if (vector) cells.push({ i, j, vector, magnitude: Math.sqrt(vector.u * vector.u + vector.v * vector.v) });\n }\n }\n const summaries = cells.map((c) => Object.freeze({ x: field.xs[c.i] as number, y: field.ys[c.j] as number, u: c.vector.u, v: c.vector.v, magnitude: c.magnitude }));\n const base = modelBase(CHART, props, context, 'Vector field', {\n columns: [`${xName}, ${yName}`, uName, vName, 'magnitude'],\n rows: summaries.map((s) => [\n `${formatNumber(s.x, locale, numberFormat)}, ${formatNumber(s.y, locale, numberFormat)}`,\n formatNumber(s.u, locale, numberFormat),\n formatNumber(s.v, locale, numberFormat),\n formatNumber(s.magnitude, locale, numberFormat),\n ]),\n });\n const measured = measure(base, props, context);\n if ('deferred' in measured) return measured.deferred;\n const card = cardLayout(props, { width: measured.width, areaHeight: measured.height, chrome: props.chrome ?? 'card', locale });\n if (cells.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot: cartesianPlot(card.area), strokes: [...card.strokes], labels: [...card.labels] }, data.length === 0);\n\n // The key above the plot: one arrow of a stated magnitude.\n const keyArea = { ...card.area, height: LEGEND_BAND };\n const below = { ...card.area, y: card.area.y + LEGEND_BAND, height: Math.max(card.area.height - LEGEND_BAND, 1) };\n const plot = cartesianPlot(below);\n const frame = xyFrame(below, plot, { x: [field.xs[0] as number, field.xs.at(-1) as number], y: [field.ys[0] as number, field.ys.at(-1) as number] }, { chart: CHART, xName, yName, padding: context.domainPadding, locale, numberFormat, inset: 0 });\n const across = nx > 1 ? spacing(field.xs.map((x) => frame.x(x))) : LONE_SPACING;\n const down = ny > 1 ? spacing(field.ys.map((y) => frame.y(y))) : LONE_SPACING;\n const largest = Math.max(...cells.map((c) => c.magnitude));\n // Px per unit of magnitude: given, or the longest arrow filling the grid's spacing.\n const scale = given ?? (largest > 0 ? (FILL * Math.min(across, down)) / largest : 1);\n\n const strokes: Stroke[] = [...card.strokes, ...frame.strokes];\n const labels: TextLabel[] = [...card.labels, ...frame.labels];\n const hitAreas: HitArea[] = [];\n const marks = cells.map((c, k) => {\n const cx = frame.x(field.xs[c.i] as number);\n const cy = frame.y(field.ys[c.j] as number);\n // Up the page is +v: the screen's y runs down.\n const hx = (c.vector.u * scale) / 2;\n const hy = (-c.vector.v * scale) / 2;\n const d = c.magnitude > 0 ? arrowPath({ x: cx - hx, y: cy - hy }, { x: cx + hx, y: cy + hy }) : circlePath(cx, cy, DOT_RADIUS);\n strokes.push({ d, role: 'encoding', part: 'ink' });\n hitAreas.push({ seriesKey: 'magnitude', index: k, datum: summaries[k] as (typeof summaries)[number], value: c.magnitude, x: cx, y: cy, cell: { column: c.i, row: ny - 1 - c.j } });\n return d;\n });\n\n if (largest > 0) {\n // The key's magnitude: the largest, to two significant digits, at a length that fits.\n const unit = Number(largest.toPrecision(2));\n const shown = Math.min(unit * scale, KEY_ROOM);\n const stated = shown / scale;\n const y = keyArea.y + 8;\n const x = keyArea.x + PLOT_INSET;\n strokes.push({ d: arrowPath({ x, y }, { x: x + shown, y }), role: 'ornament', part: 'ink' });\n labels.push({ x: x + shown + 6, y: y + 3.5, text: `${formatNumber(stated, locale, numberFormat)} ${uName}, ${vName}`, kind: 'tick', part: 'axis', anchor: 'start' });\n }\n\n // One heightened element (REQ-442): the arrow of largest magnitude, the first in grid order.\n const strongest = cells.findIndex((c) => c.magnitude === largest);\n strokes.push({ d: marks[strongest] as string, role: 'encoding', part: 'heighten', paint: 'fill' });\n\n const top = summaries[strongest] as (typeof summaries)[number];\n const description =\n props.description ??\n `${base.name}. ${cells.length} arrows on a ${nx} × ${ny} grid of ${xName} across and ${yName} up, each along (${uName}, ${vName}), its length its magnitude at ${formatNumber(scale, locale, undefined)} px per unit; the largest, ${formatNumber(largest, locale, numberFormat)}, at ${formatNumber(top.x, locale, numberFormat)}, ${formatNumber(top.y, locale, numberFormat)}.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `VectorFieldChart` recipe (REQ-425): an arrow per grid point, its direction and length the vector's. */\nexport const vectorFieldChart: ChartRecipe<VectorFieldChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildVectorFieldChart });\n","import { createPrng } from '../../render/prng';\n\n/**\n * The network layout (DD-030, REQ-426): Fruchterman–Reingold over a fixed number of iterations,\n * the temperature cooling linearly to 0, then fitted to the unit square. The start is a square grid, its\n * cells dealt to the nodes by the chart's seed, so no trigonometry is needed; inside the\n * iterations only `+ − × ÷` and `Math.sqrt` are used, so Node and every browser produce the same\n * coordinates (REQ-435, I-27).\n */\n\nexport interface LayoutLink {\n readonly source: number;\n readonly target: number;\n}\n\n/** The step a node may take in the first iteration, as a share of the square's side. */\nconst START_TEMPERATURE = 0.1;\n/** Two nodes closer than this (squared) are pushed apart along x, the lower index leftwards. */\nconst COINCIDENT = 1e-12;\n\nexport function layoutNetwork(\n count: number,\n links: readonly LayoutLink[],\n options: { readonly iterations: number; readonly seed: number },\n): { x: number; y: number }[] {\n const side = Math.ceil(Math.sqrt(count));\n // Fisher–Yates with the seeded PRNG: node `v` starts in cell `cells[v]`.\n const random = createPrng(options.seed);\n const cells = Array.from({ length: count }, (_, k) => k);\n for (let k = count - 1; k > 0; k -= 1) {\n const r = Math.floor(random() * (k + 1));\n const swap = cells[k] as number;\n cells[k] = cells[r] as number;\n cells[r] = swap;\n }\n const xs = new Float64Array(count);\n const ys = new Float64Array(count);\n cells.forEach((cell, v) => {\n xs[v] = ((cell % side) + 0.5) / side;\n ys[v] = (Math.floor(cell / side) + 0.5) / side;\n });\n\n const pulls = links.filter((l) => l.source !== l.target);\n // The ideal distance of FR for the unit area; its square is what repulsion needs.\n const k2 = 1 / Math.max(count, 1);\n const k = Math.sqrt(k2);\n const dx = new Float64Array(count);\n const dy = new Float64Array(count);\n for (let it = 0; it < options.iterations; it += 1) {\n const temperature = START_TEMPERATURE * (1 - it / options.iterations);\n dx.fill(0);\n dy.fill(0);\n // Repulsion k²/d along the unit vector: (Δ / d) · k² / d = Δ · k² / d².\n for (let a = 0; a < count; a += 1) {\n const xa = xs[a] as number;\n const ya = ys[a] as number;\n let sx = dx[a] as number;\n let sy = dy[a] as number;\n for (let b = a + 1; b < count; b += 1) {\n let ex = xa - (xs[b] as number);\n let ey = ya - (ys[b] as number);\n let d2 = ex * ex + ey * ey;\n if (d2 < COINCIDENT) {\n ex = -1e-6;\n ey = 0;\n d2 = 1e-12;\n }\n const f = k2 / d2;\n const fx = ex * f;\n const fy = ey * f;\n sx += fx;\n sy += fy;\n dx[b] = (dx[b] as number) - fx;\n dy[b] = (dy[b] as number) - fy;\n }\n dx[a] = sx;\n dy[a] = sy;\n }\n // Attraction d²/k along the unit vector: Δ · d / k.\n for (const { source, target } of pulls) {\n const ex = (xs[source] as number) - (xs[target] as number);\n const ey = (ys[source] as number) - (ys[target] as number);\n const f = Math.sqrt(ex * ex + ey * ey) / k;\n dx[source] = (dx[source] as number) - ex * f;\n dy[source] = (dy[source] as number) - ey * f;\n dx[target] = (dx[target] as number) + ex * f;\n dy[target] = (dy[target] as number) + ey * f;\n }\n // Each node moves along its displacement, at most the temperature. No wall stops it: walls\n // pile the outer nodes along the edges; the layout is fitted to the square at the end.\n for (let v = 0; v < count; v += 1) {\n const mx = dx[v] as number;\n const my = dy[v] as number;\n const length = Math.sqrt(mx * mx + my * my);\n if (!(length > 0)) continue;\n const step = Math.min(length, temperature) / length;\n xs[v] = (xs[v] as number) + mx * step;\n ys[v] = (ys[v] as number) + my * step;\n }\n }\n const fit = fitter(xs);\n const fitY = fitter(ys);\n return Array.from(xs, (x, v) => ({ x: fit(x), y: fitY(ys[v] as number) }));\n}\n\n/** Maps an axis' extent onto 0–1; a single position goes to the middle. */\nfunction fitter(values: Float64Array): (v: number) => number {\n let low = Number.POSITIVE_INFINITY;\n let high = Number.NEGATIVE_INFINITY;\n for (const v of values) {\n low = Math.min(low, v);\n high = Math.max(high, v);\n }\n return high > low ? (v) => (v - low) / (high - low) : () => 0.5;\n}\n","// Generated by tools/demo-gen (T-167, REQ-446): synthetic, original, frozen. Do not edit by hand.\n\nimport type { Datum, NetworkNode } from '../../types';\n\n/** Demo dataset of `NetworkChart` (REQ-426): 90 links between 40 people in four teams, most within a team. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const NETWORK_CHART_DEMO: readonly Datum[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { source: 's05', target: 's02', weight: 5 },\n { source: 'p10', target: 'a06', weight: 1 },\n { source: 'p01', target: 'p07', weight: 5 },\n { source: 's06', target: 's04', weight: 1 },\n { source: 'p03', target: 'l06', weight: 1 },\n { source: 's08', target: 's05', weight: 5 },\n { source: 'a05', target: 'a07', weight: 2 },\n { source: 'p02', target: 'p01', weight: 3 },\n { source: 'a04', target: 'a02', weight: 5 },\n { source: 'l08', target: 's08', weight: 2 },\n { source: 'a04', target: 'a01', weight: 1 },\n { source: 'p03', target: 's09', weight: 5 },\n { source: 'l01', target: 's05', weight: 5 },\n { source: 's07', target: 's09', weight: 4 },\n { source: 'p01', target: 'p04', weight: 5 },\n { source: 'a02', target: 'a09', weight: 1 },\n { source: 'a03', target: 'a05', weight: 2 },\n { source: 'p10', target: 'p08', weight: 3 },\n { source: 'p04', target: 'a10', weight: 1 },\n { source: 'p04', target: 'p10', weight: 2 },\n { source: 'l10', target: 's09', weight: 4 },\n { source: 'l06', target: 'l02', weight: 4 },\n { source: 'a01', target: 's03', weight: 4 },\n { source: 'l09', target: 'l02', weight: 2 },\n { source: 'p03', target: 'p06', weight: 2 },\n { source: 'p06', target: 'p01', weight: 4 },\n { source: 's08', target: 's02', weight: 4 },\n { source: 'a09', target: 'a08', weight: 3 },\n { source: 'l02', target: 'l01', weight: 3 },\n { source: 'a03', target: 's10', weight: 3 },\n { source: 'p09', target: 'p02', weight: 3 },\n { source: 'p04', target: 'p07', weight: 1 },\n { source: 's06', target: 's05', weight: 4 },\n { source: 's03', target: 's05', weight: 5 },\n { source: 'a10', target: 'a04', weight: 3 },\n { source: 's01', target: 's09', weight: 1 },\n { source: 'a02', target: 'a07', weight: 3 },\n { source: 's08', target: 's09', weight: 4 },\n { source: 'a06', target: 'a04', weight: 1 },\n { source: 'p03', target: 'p01', weight: 2 },\n { source: 's07', target: 's05', weight: 4 },\n { source: 'a02', target: 'a05', weight: 1 },\n { source: 'p08', target: 'p01', weight: 4 },\n { source: 'a02', target: 'a01', weight: 2 },\n { source: 's06', target: 's07', weight: 5 },\n { source: 'a04', target: 'p08', weight: 3 },\n { source: 's04', target: 's01', weight: 1 },\n { source: 'p03', target: 'a10', weight: 2 },\n { source: 'a03', target: 'a06', weight: 1 },\n { source: 's01', target: 's02', weight: 4 },\n { source: 'a05', target: 'a10', weight: 4 },\n { source: 'l07', target: 'l04', weight: 1 },\n { source: 'a04', target: 'a05', weight: 2 },\n { source: 'a07', target: 's04', weight: 3 },\n { source: 'p07', target: 'l08', weight: 3 },\n { source: 'p02', target: 'p03', weight: 3 },\n { source: 'l09', target: 'l04', weight: 5 },\n { source: 'p08', target: 'a06', weight: 1 },\n { source: 'l06', target: 'l09', weight: 2 },\n { source: 'p09', target: 'p08', weight: 3 },\n { source: 's10', target: 'l05', weight: 3 },\n { source: 'p08', target: 'p03', weight: 3 },\n { source: 's09', target: 's10', weight: 4 },\n { source: 'l01', target: 'l03', weight: 5 },\n { source: 'a03', target: 'a02', weight: 4 },\n { source: 'l06', target: 'l05', weight: 3 },\n { source: 'l02', target: 's07', weight: 2 },\n { source: 'a08', target: 'a04', weight: 1 },\n { source: 'p04', target: 'a03', weight: 2 },\n { source: 'l08', target: 'a07', weight: 4 },\n { source: 'p05', target: 'p03', weight: 5 },\n { source: 'p06', target: 'p09', weight: 2 },\n { source: 'p07', target: 'p10', weight: 3 },\n { source: 'a06', target: 'a02', weight: 4 },\n { source: 'a09', target: 'a04', weight: 1 },\n { source: 'l01', target: 'a10', weight: 1 },\n { source: 'p08', target: 'p06', weight: 4 },\n { source: 'a02', target: 'a10', weight: 5 },\n { source: 'l02', target: 'l10', weight: 5 },\n { source: 'a08', target: 'a07', weight: 2 },\n { source: 'p03', target: 's06', weight: 2 },\n { source: 'p04', target: 'p06', weight: 3 },\n { source: 'l08', target: 's05', weight: 4 },\n { source: 's02', target: 's03', weight: 3 },\n { source: 'l09', target: 'l01', weight: 4 },\n { source: 'a09', target: 'a06', weight: 5 },\n { source: 'p07', target: 'p03', weight: 2 },\n { source: 'p07', target: 'p02', weight: 1 },\n { source: 'a07', target: 'a09', weight: 5 },\n { source: 'l07', target: 'a02', weight: 4 },\n ].map((row) => Object.freeze(row)),\n);\n\n/** Demo dataset of `NetworkChart` (REQ-426): its 40 nodes, in four groups. Part of the stable surface: changing it is never a patch (Data Model §4). */\nexport const NETWORK_CHART_DEMO_NODES: readonly NetworkNode[] = /* @__PURE__ */ Object.freeze(\n /* @__PURE__ */ [\n { id: 'a01', label: 'Archive 1', group: 'Archive' },\n { id: 'a02', label: 'Archive 2', group: 'Archive' },\n { id: 'a03', label: 'Archive 3', group: 'Archive' },\n { id: 'a04', label: 'Archive 4', group: 'Archive' },\n { id: 'a05', label: 'Archive 5', group: 'Archive' },\n { id: 'a06', label: 'Archive 6', group: 'Archive' },\n { id: 'a07', label: 'Archive 7', group: 'Archive' },\n { id: 'a08', label: 'Archive 8', group: 'Archive' },\n { id: 'a09', label: 'Archive 9', group: 'Archive' },\n { id: 'a10', label: 'Archive 10', group: 'Archive' },\n { id: 's01', label: 'Studio 1', group: 'Studio' },\n { id: 's02', label: 'Studio 2', group: 'Studio' },\n { id: 's03', label: 'Studio 3', group: 'Studio' },\n { id: 's04', label: 'Studio 4', group: 'Studio' },\n { id: 's05', label: 'Studio 5', group: 'Studio' },\n { id: 's06', label: 'Studio 6', group: 'Studio' },\n { id: 's07', label: 'Studio 7', group: 'Studio' },\n { id: 's08', label: 'Studio 8', group: 'Studio' },\n { id: 's09', label: 'Studio 9', group: 'Studio' },\n { id: 's10', label: 'Studio 10', group: 'Studio' },\n { id: 'l01', label: 'Lab 1', group: 'Lab' },\n { id: 'l02', label: 'Lab 2', group: 'Lab' },\n { id: 'l03', label: 'Lab 3', group: 'Lab' },\n { id: 'l04', label: 'Lab 4', group: 'Lab' },\n { id: 'l05', label: 'Lab 5', group: 'Lab' },\n { id: 'l06', label: 'Lab 6', group: 'Lab' },\n { id: 'l07', label: 'Lab 7', group: 'Lab' },\n { id: 'l08', label: 'Lab 8', group: 'Lab' },\n { id: 'l09', label: 'Lab 9', group: 'Lab' },\n { id: 'l10', label: 'Lab 10', group: 'Lab' },\n { id: 'p01', label: 'Press 1', group: 'Press' },\n { id: 'p02', label: 'Press 2', group: 'Press' },\n { id: 'p03', label: 'Press 3', group: 'Press' },\n { id: 'p04', label: 'Press 4', group: 'Press' },\n { id: 'p05', label: 'Press 5', group: 'Press' },\n { id: 'p06', label: 'Press 6', group: 'Press' },\n { id: 'p07', label: 'Press 7', group: 'Press' },\n { id: 'p08', label: 'Press 8', group: 'Press' },\n { id: 'p09', label: 'Press 9', group: 'Press' },\n { id: 'p10', label: 'Press 10', group: 'Press' },\n ].map((row) => Object.freeze(row)),\n);\n\nexport const NETWORK_CHART_DEMO_KEYS = /* @__PURE__ */ Object.freeze({\n sourceKey: 'source',\n targetKey: 'target',\n valueKey: 'weight',\n} as const);\n","import { resolveSeed } from '../../render/seed';\nimport type { ChartModel, ChartRecipe, HitArea, NetworkChartProps, NetworkNode, RecipeContext, Rect, Stroke, TextLabel, ToneLevel } from '../../types';\nimport { cardLayout } from '../shared/card';\nimport { PLOT_INSET } from '../shared/cartesian';\nimport { inset } from '../shared/cells';\nimport { checkCeiling, checkIterations, readNetwork } from '../shared/contracts';\nimport { accessorName, circlePath, formatNumber } from '../shared/format';\nimport { layoutNetwork } from '../shared/network';\nimport { ringTone, sectorLegend } from '../shared/polar';\nimport { emptyModel, measure, modelBase, readyModel } from '../shared/shell';\nimport { NETWORK_CHART_DEMO, NETWORK_CHART_DEMO_KEYS, NETWORK_CHART_DEMO_NODES } from './demo';\n\nconst CHART = 'NetworkChart';\nconst ITERATIONS = 300;\nconst NODE_RADIUS = 4;\nconst HEIGHTEN_RADIUS = NODE_RADIUS + 1.5;\n/** A self-link is a loop of this radius above its node. */\nconst LOOP = 6;\n/** The busiest nodes are named, this many at most. */\nconst NAMED = 3;\nconst LEGEND_GAP = 14;\nconst LEGEND_WIDTH = 110;\n\nconst clamp = (v: number, low: number, high: number) => Math.min(Math.max(v, low), high);\n\nfunction buildNetworkChart(props: NetworkChartProps, context: RecipeContext): ChartModel {\n const usesDemo = props.data === undefined;\n const data = props.data ?? NETWORK_CHART_DEMO;\n const sourceKey = usesDemo ? NETWORK_CHART_DEMO_KEYS.sourceKey : (props.sourceKey ?? 'source');\n const targetKey = usesDemo ? NETWORK_CHART_DEMO_KEYS.targetKey : (props.targetKey ?? 'target');\n const valueKey = usesDemo ? NETWORK_CHART_DEMO_KEYS.valueKey : props.valueKey;\n // `nodes` is data: with the demo, the demo's nodes (API delta §2).\n const given = usesDemo ? NETWORK_CHART_DEMO_NODES : props.nodes;\n const iterations = checkIterations(CHART, props.iterations) ?? ITERATIONS;\n const { locale } = context;\n const numberFormat = props.numberFormat;\n const valueName = valueKey === undefined ? 'value' : accessorName(valueKey, 'value');\n\n const network = readNetwork(CHART, data, { source: sourceKey, target: targetKey, ...(valueKey === undefined ? {} : { value: valueKey }) }, given);\n const nodes: NetworkNode[] = network.nodes;\n const links = network.links;\n checkCeiling(CHART, 'nodes', 'networkNodes', nodes.length);\n checkCeiling(CHART, accessorName(sourceKey, 'source'), 'links', links.length);\n const position = new Map(nodes.map((n, k) => [n.id, k]));\n const nameOf = (id: string) => nodes[position.get(id) as number]?.label ?? id;\n const degree = nodes.map(() => 0);\n for (const link of links) {\n const s = position.get(link.source) as number;\n const t = position.get(link.target) as number;\n degree[s] = (degree[s] as number) + 1;\n if (t !== s) degree[t] = (degree[t] as number) + 1;\n }\n const groups = [...new Set(nodes.flatMap((n) => (n.group === undefined ? [] : [n.group])))];\n\n const base = modelBase(CHART, props, context, 'Network', {\n columns: ['node', 'group', 'degree', valueName],\n rows: [\n ...nodes.map((n, k) => [n.label ?? n.id, n.group ?? '', formatNumber(degree[k] as number, locale, undefined), '']),\n ...links.map((l) => [`${nameOf(l.source)} – ${nameOf(l.target)}`, '', '', formatNumber(l.value, locale, numberFormat)]),\n ],\n });\n const measured = measure(base, props, context);\n if ('deferred' in measured) return measured.deferred;\n const card = cardLayout(props, { width: measured.width, areaHeight: measured.height, chrome: props.chrome ?? 'card', locale });\n const area = card.area;\n const legendWidth = groups.length > 0 ? Math.min(LEGEND_WIDTH, area.width * 0.3) : 0;\n const plot: Rect = inset({ ...area, width: Math.max(area.width - legendWidth - (legendWidth > 0 ? LEGEND_GAP : 0), 1) }, PLOT_INSET);\n const strokes: Stroke[] = [...card.strokes];\n const labels: TextLabel[] = [...card.labels];\n const hitAreas: HitArea[] = [];\n if (nodes.length === 0) return emptyModel(base, props, context, { viewBox: card.viewBox, plot, strokes, labels }, data.length === 0);\n\n // Where the nodes go: the consumer's positions when every node has them (REQ-436), else the\n // layout, run on the nodes by id and the links by their ends, so the row order cannot move it.\n const room = inset(plot, NODE_RADIUS);\n const placed = nodes.every((n) => Number.isFinite(n.x) && Number.isFinite(n.y));\n let at: { x: number; y: number }[];\n if (placed) {\n const xs = nodes.map((n) => n.x as number);\n const ys = nodes.map((n) => n.y as number);\n const span = (values: number[]) => [Math.min(...values), Math.max(...values)] as const;\n const [x0, x1] = span(xs);\n const [y0, y1] = span(ys);\n // Up the page is +y, as in the data.\n at = nodes.map((n) => ({\n x: x1 > x0 ? room.x + (((n.x as number) - x0) / (x1 - x0)) * room.width : room.x + room.width / 2,\n y: y1 > y0 ? room.y + room.height - (((n.y as number) - y0) / (y1 - y0)) * room.height : room.y + room.height / 2,\n }));\n } else {\n const byId = nodes.map((n, k) => [n.id, k] as const).sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0));\n const rank = new Map(byId.map(([id], r) => [id, r]));\n const pulls = links\n .map((l) => ({ source: rank.get(l.source) as number, target: rank.get(l.target) as number }))\n .sort((a, b) => a.source - b.source || a.target - b.target);\n const laid = layoutNetwork(nodes.length, pulls, { iterations, seed: resolveSeed(props.seed, context.id) });\n at = nodes.map((n) => {\n const p = laid[rank.get(n.id) as number] as { x: number; y: number };\n return { x: room.x + p.x * room.width, y: room.y + p.y * room.height };\n });\n }\n const inPlot = (p: { x: number; y: number }) => ({ x: clamp(p.x, plot.x, plot.x + plot.width), y: clamp(p.y, plot.y, plot.y + plot.height) });\n\n // Links first, under the nodes: secondary ink, exact (REQ-441).\n const linkHits: HitArea[] = links.map((l, k) => {\n const s = at[position.get(l.source) as number] as { x: number; y: number };\n const t = at[position.get(l.target) as number] as { x: number; y: number };\n const loop = l.source === l.target;\n strokes.push({ d: loop ? circlePath(s.x, s.y - LOOP, LOOP) : `M${s.x},${s.y}L${t.x},${t.y}`, role: 'encoding', part: 'ink-secondary' });\n const mid = inPlot(loop ? { x: s.x, y: s.y - 2 * LOOP } : { x: (s.x + t.x) / 2, y: (s.y + t.y) / 2 });\n return { seriesKey: valueName, index: nodes.length + k, datum: Object.freeze({ source: l.source, target: l.target, value: l.value }), value: l.value, ...mid };\n });\n const nodeHits: HitArea[] = nodes.map((n, k) => {\n const p = at[k] as { x: number; y: number };\n const group = n.group === undefined ? -1 : groups.indexOf(n.group);\n const tone: ToneLevel | undefined = group < 0 ? undefined : ringTone(group, groups.length);\n strokes.push({ d: circlePath(p.x, p.y, NODE_RADIUS), role: 'encoding', part: 'ink', ...(tone === undefined ? {} : { tone }) });\n const summary = Object.freeze({ id: n.id, ...(n.label === undefined ? {} : { label: n.label }), ...(n.group === undefined ? {} : { group: n.group }), degree: degree[k] as number });\n return { seriesKey: 'degree', index: k, datum: summary, value: degree[k] as number, x: p.x, y: p.y, box: { x: p.x - NODE_RADIUS, y: p.y - NODE_RADIUS, width: 2 * NODE_RADIUS, height: 2 * NODE_RADIUS } };\n });\n\n // The keyboard (API delta §3): nodes in order by Right and Left; Down walks the links a node\n // starts, in data order, Up back towards it; Home and End reach the first and last node.\n const starts = nodes.map(() => [] as number[]);\n links.forEach((l, k) => starts[position.get(l.source) as number]?.push(nodes.length + k));\n const last = nodes.length - 1;\n const step = (v: number, by: number) => (v + by >= 0 && v + by <= last ? v + by : undefined);\n const movesOf = (v: number, own: Record<string, number | undefined>) =>\n Object.fromEntries(Object.entries({ ArrowRight: step(v, 1), ArrowLeft: step(v, -1), Home: 0, End: last, ...own }).filter(([, to]) => to !== undefined)) as HitArea['moves'];\n nodeHits.forEach((hit, v) => hitAreas.push({ ...hit, moves: movesOf(v, { ArrowDown: starts[v]?.[0] }) }));\n linkHits.forEach((hit, k) => {\n const v = position.get((links[k] as (typeof links)[number]).source) as number;\n const list = starts[v] as number[];\n const p = list.indexOf(hit.index);\n hitAreas.push({ ...hit, moves: movesOf(v, { ArrowDown: list[p + 1], ArrowUp: p > 0 ? list[p - 1] : v }) });\n });\n\n // The busiest nodes: highest degree, ties to the first id, so the row order cannot change them.\n const busiest = nodes\n .map((n, k) => k)\n .sort((a, b) => (degree[b] as number) - (degree[a] as number) || ((nodes[a] as NetworkNode).id < (nodes[b] as NetworkNode).id ? -1 : 1));\n for (const k of busiest.slice(0, NAMED)) {\n const p = at[k] as { x: number; y: number };\n const right = p.x < plot.x + plot.width * 0.8;\n labels.push({ x: p.x + (right ? 1 : -1) * (HEIGHTEN_RADIUS + 3), y: p.y + 3.5, text: (nodes[k] as NetworkNode).label ?? (nodes[k] as NetworkNode).id, kind: 'tick', part: 'axis', anchor: right ? 'start' : 'end' });\n }\n if (groups.length > 0) {\n const x = plot.x + plot.width + PLOT_INSET + LEGEND_GAP;\n const counts = groups.map((g) => nodes.filter((n) => n.group === g).length);\n const key = sectorLegend({ x, y: area.y, width: Math.max(area.x + area.width - x, 1), height: area.height }, groups.map((g, k) => ({ name: g, share: formatNumber(counts[k] as number, locale, undefined), tone: ringTone(k, groups.length) })));\n strokes.push(...key.strokes);\n labels.push(...key.labels);\n }\n\n // One heightened element (REQ-442): the node of highest degree.\n const top = busiest[0] as number;\n const spot = at[top] as { x: number; y: number };\n const mark = circlePath(spot.x, spot.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 const how = placed ? 'at the given positions' : `laid out by force (Fruchterman–Reingold, ${iterations} iterations from the seed)`;\n const description =\n props.description ??\n `${base.name}. ${nodes.length} nodes and ${links.length} links, ${how}${groups.length > 0 ? `, in ${groups.length} groups` : ''}; the busiest, ${(nodes[top] as NetworkNode).label ?? (nodes[top] as NetworkNode).id}, has ${formatNumber(degree[top] as number, locale, undefined)} links.`;\n return readyModel(base, description, { viewBox: card.viewBox, plot, strokes, labels, hitAreas });\n}\n\n/** `NetworkChart` recipe (REQ-426): a node-link graph, laid out deterministically or placed by the consumer. */\nexport const networkChart: ChartRecipe<NetworkChartProps> = /* @__PURE__ */ Object.freeze({ name: CHART, build: buildNetworkChart });\n","import type { ActiveItem, Geometry } from '../types';\n\n/**\n * What `onRootChange` carries when a node of a `SunburstChart` or a `SquarifiedTreemap` is\n * activated (REQ-439, API delta §4): the node's id, or, for the drawn root, the id its centre or\n * frame returns to — `null` for the data root, which has nothing above it. The adapters map their\n * `select` through it and keep no root of their own (REQ-108, I-30).\n *\n * The node is read where `geometry`, the drawing as it is now, has the item: the shared reducer\n * keeps an item by its place, so after the consumer passes a new `rootId` back the item's own\n * summary may still be the old drawing's.\n */\nexport function rootChangeOf(geometry: Geometry, item: ActiveItem): string | null {\n const hit = geometry.hitAreas.find((h) => h.seriesKey === item.seriesKey && h.index === item.index);\n const summary = (hit?.datum ?? item.datum) as { readonly id?: unknown; readonly path?: readonly unknown[]; readonly up?: string | null };\n if ('up' in summary) return summary.up ?? null;\n // The data root drawn as root: its path is itself alone.\n if ((summary.path?.length ?? 0) <= 1) return null;\n return String(summary.id);\n}\n"]}