@howells/hairline 0.0.0-stage → 0.2.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 (456) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +21 -0
  3. package/README.md +148 -2
  4. package/lib/charts/axes.js +5 -0
  5. package/lib/charts/basics/candlestick.data.js +44 -0
  6. package/lib/charts/basics/candlestick.js +180 -0
  7. package/lib/charts/basics/daily-empty.js +24 -0
  8. package/lib/charts/basics/daily-readings.js +16 -0
  9. package/lib/charts/basics/dot-heat.data.js +225 -0
  10. package/lib/charts/basics/dot-heat.js +174 -0
  11. package/lib/charts/basics/dumbbell-queue.js +203 -0
  12. package/lib/charts/basics/hairline-area.js +208 -0
  13. package/lib/charts/basics/hairline-line.js +195 -0
  14. package/lib/charts/basics/nested-treemap.data.js +55 -0
  15. package/lib/charts/basics/nested-treemap.js +191 -0
  16. package/lib/charts/basics/paired-rungs.data.js +31 -0
  17. package/lib/charts/basics/paired-rungs.js +151 -0
  18. package/lib/charts/basics/plumb-scatter.js +229 -0
  19. package/lib/charts/basics/rung-bars.js +178 -0
  20. package/lib/charts/basics/rung-geometry.js +6 -0
  21. package/lib/charts/basics/rung-histogram.data.js +73 -0
  22. package/lib/charts/basics/rung-histogram.js +153 -0
  23. package/lib/charts/basics/rung-waterfall.data.js +30 -0
  24. package/lib/charts/basics/rung-waterfall.js +150 -0
  25. package/lib/charts/basics/rungs.js +22 -0
  26. package/lib/charts/basics/series-key.js +26 -0
  27. package/lib/charts/basics/stacked-rungs.data.js +42 -0
  28. package/lib/charts/basics/stacked-rungs.js +174 -0
  29. package/lib/charts/basics/stream-ribbon.data.js +124 -0
  30. package/lib/charts/basics/stream-ribbon.js +336 -0
  31. package/lib/charts/basics/tick-box.data.js +50 -0
  32. package/lib/charts/basics/tick-box.js +226 -0
  33. package/lib/charts/basics/tick-donut.data.js +30 -0
  34. package/lib/charts/basics/tick-donut.js +210 -0
  35. package/lib/charts/basics/tick-gauge.data.js +8 -0
  36. package/lib/charts/basics/tick-gauge.js +169 -0
  37. package/lib/charts/basics/tick-rows.data.js +30 -0
  38. package/lib/charts/basics/tick-rows.js +121 -0
  39. package/lib/charts/basics/util-a.js +15 -0
  40. package/lib/charts/basics/util-b.js +13 -0
  41. package/lib/charts/big/circular-graph.data.js +827 -0
  42. package/lib/charts/big/circular-graph.js +289 -0
  43. package/lib/charts/big/force-galaxy-model.js +167 -0
  44. package/lib/charts/big/force-galaxy.data.js +813 -0
  45. package/lib/charts/big/force-galaxy.js +276 -0
  46. package/lib/charts/big/thread-triptych.data.js +204 -0
  47. package/lib/charts/big/thread-triptych.js +334 -0
  48. package/lib/charts/board/room.js +6 -0
  49. package/lib/charts/board/slope.js +176 -0
  50. package/lib/charts/board/spread.js +28 -0
  51. package/lib/charts/control.js +18 -0
  52. package/lib/charts/core.js +84 -0
  53. package/lib/charts/data-table.js +34 -0
  54. package/lib/charts/fills.js +153 -0
  55. package/lib/charts/forms/area-difference.data.js +62 -0
  56. package/lib/charts/forms/area-difference.js +192 -0
  57. package/lib/charts/forms/brush-math.js +42 -0
  58. package/lib/charts/forms/brush-strip.js +199 -0
  59. package/lib/charts/forms/brushed-overview.data.js +374 -0
  60. package/lib/charts/forms/brushed-overview.js +162 -0
  61. package/lib/charts/forms/chord-ring.data.js +140 -0
  62. package/lib/charts/forms/chord-ring.js +167 -0
  63. package/lib/charts/forms/circle-pack.data.js +80 -0
  64. package/lib/charts/forms/circle-pack.js +99 -0
  65. package/lib/charts/forms/hatched-stack.data.js +71 -0
  66. package/lib/charts/forms/hatched-stack.js +228 -0
  67. package/lib/charts/forms/radial-year.data.js +13 -0
  68. package/lib/charts/forms/radial-year.js +156 -0
  69. package/lib/charts/frame.js +73 -0
  70. package/lib/charts/glance/aggregate-sankey.data.js +74 -0
  71. package/lib/charts/glance/aggregate-sankey.js +242 -0
  72. package/lib/charts/glance/bar-race.data.js +122 -0
  73. package/lib/charts/glance/bar-race.js +246 -0
  74. package/lib/charts/glance/big-slice.data.js +41 -0
  75. package/lib/charts/glance/big-slice.js +238 -0
  76. package/lib/charts/glance/chunky-bars.data.js +22 -0
  77. package/lib/charts/glance/chunky-bars.js +113 -0
  78. package/lib/charts/glance/circular-graph.data.js +146 -0
  79. package/lib/charts/glance/circular-graph.js +138 -0
  80. package/lib/charts/glance/control-slot.js +9 -0
  81. package/lib/charts/glance/diverging-bar.data.js +34 -0
  82. package/lib/charts/glance/diverging-bar.js +154 -0
  83. package/lib/charts/glance/dot-waffle.data.js +26 -0
  84. package/lib/charts/glance/dot-waffle.js +179 -0
  85. package/lib/charts/glance/draw-in.data.js +9 -0
  86. package/lib/charts/glance/draw-in.goals.json.js +289 -0
  87. package/lib/charts/glance/draw-in.js +214 -0
  88. package/lib/charts/glance/dynamic-stream.data.js +6 -0
  89. package/lib/charts/glance/dynamic-stream.js +189 -0
  90. package/lib/charts/glance/force-graph.data.js +77 -0
  91. package/lib/charts/glance/force-graph.js +211 -0
  92. package/lib/charts/glance/jitter-strip.data.js +10 -0
  93. package/lib/charts/glance/jitter-strip.easter.json.js +430 -0
  94. package/lib/charts/glance/jitter-strip.js +157 -0
  95. package/lib/charts/glance/link-bundle.js +51 -0
  96. package/lib/charts/glance/matrix-heat-glance.data.js +108 -0
  97. package/lib/charts/glance/matrix-heat-glance.js +170 -0
  98. package/lib/charts/glance/pictorial-bar.data.js +22 -0
  99. package/lib/charts/glance/pictorial-bar.js +180 -0
  100. package/lib/charts/glance/rainfall-dual-area.data.js +177 -0
  101. package/lib/charts/glance/rainfall-dual-area.js +192 -0
  102. package/lib/charts/glance/rank-strip.data.js +76 -0
  103. package/lib/charts/glance/rank-strip.js +172 -0
  104. package/lib/charts/glance/scatter-labels.js +60 -0
  105. package/lib/charts/glance/scatter-morph.data.js +78 -0
  106. package/lib/charts/glance/scatter-morph.js +338 -0
  107. package/lib/charts/glance/single-axis.data.js +6 -0
  108. package/lib/charts/glance/single-axis.js +150 -0
  109. package/lib/charts/glance/single-axis.tides.json.js +180 -0
  110. package/lib/charts/glance/stagger-wave.data.js +66 -0
  111. package/lib/charts/glance/stagger-wave.js +132 -0
  112. package/lib/charts/glance/tree-lr.data.js +41 -0
  113. package/lib/charts/glance/tree-lr.js +135 -0
  114. package/lib/charts/glance/util-a.js +49 -0
  115. package/lib/charts/glance/util-b.js +19 -0
  116. package/lib/charts/glance/violin.data.js +9 -0
  117. package/lib/charts/glance/violin.js +185 -0
  118. package/lib/charts/glance/violin.tenors.json.js +5 -0
  119. package/lib/charts/hooks.js +154 -0
  120. package/lib/charts/hover.js +19 -0
  121. package/lib/charts/lupi/arc-matrix.data.js +83 -0
  122. package/lib/charts/lupi/arc-matrix.js +146 -0
  123. package/lib/charts/lupi/ballot-tally.data.js +22 -0
  124. package/lib/charts/lupi/ballot-tally.js +125 -0
  125. package/lib/charts/lupi/barcode-lollipop.data.js +195 -0
  126. package/lib/charts/lupi/barcode-lollipop.js +161 -0
  127. package/lib/charts/lupi/brand-spectrum.data.js +70 -0
  128. package/lib/charts/lupi/brand-spectrum.js +233 -0
  129. package/lib/charts/lupi/bubble-almanac.data.js +689 -0
  130. package/lib/charts/lupi/bubble-almanac.js +164 -0
  131. package/lib/charts/lupi/calendar-heat.data.js +399 -0
  132. package/lib/charts/lupi/calendar-heat.js +175 -0
  133. package/lib/charts/lupi/cluster-field.data.js +83 -0
  134. package/lib/charts/lupi/cluster-field.js +173 -0
  135. package/lib/charts/lupi/dot-cascade.data.js +54 -0
  136. package/lib/charts/lupi/dot-cascade.js +124 -0
  137. package/lib/charts/lupi/dotty-matrix.data.js +170 -0
  138. package/lib/charts/lupi/dotty-matrix.js +126 -0
  139. package/lib/charts/lupi/hourglass-stream.data.js +30 -0
  140. package/lib/charts/lupi/hourglass-stream.js +158 -0
  141. package/lib/charts/lupi/hundred-field.data.js +38 -0
  142. package/lib/charts/lupi/hundred-field.js +237 -0
  143. package/lib/charts/lupi/launch-fan.data.js +315 -0
  144. package/lib/charts/lupi/launch-fan.js +198 -0
  145. package/lib/charts/lupi/matrix-heat.data.js +97 -0
  146. package/lib/charts/lupi/matrix-heat.js +246 -0
  147. package/lib/charts/lupi/parallel-coordinates.data.js +54 -0
  148. package/lib/charts/lupi/parallel-coordinates.js +218 -0
  149. package/lib/charts/lupi/radial-convergence.data.js +178 -0
  150. package/lib/charts/lupi/radial-convergence.js +208 -0
  151. package/lib/charts/lupi/radial-patchwork.data.js +454 -0
  152. package/lib/charts/lupi/radial-patchwork.js +181 -0
  153. package/lib/charts/lupi/ridgeline.data.js +1834 -0
  154. package/lib/charts/lupi/ridgeline.js +195 -0
  155. package/lib/charts/lupi/trend-lineage.data.js +51 -0
  156. package/lib/charts/lupi/trend-lineage.js +198 -0
  157. package/lib/charts/lupi/type-colonnade.data.js +18 -0
  158. package/lib/charts/lupi/type-colonnade.js +198 -0
  159. package/lib/charts/lupi/util-a.js +14 -0
  160. package/lib/charts/lupi/util-b.js +12 -0
  161. package/lib/charts/maps/choropleth.js +295 -0
  162. package/lib/charts/maps/geo.js +84 -0
  163. package/lib/charts/maps/legend.js +83 -0
  164. package/lib/charts/maps/step-fill.js +9 -0
  165. package/lib/charts/maps/us-choropleth.data.js +249 -0
  166. package/lib/charts/maps/us-choropleth.js +41 -0
  167. package/lib/charts/maps/world-choropleth.data.js +681 -0
  168. package/lib/charts/maps/world-choropleth.js +46 -0
  169. package/lib/charts/markers.js +35 -0
  170. package/lib/charts/marks.js +31 -0
  171. package/lib/charts/motion.js +11 -0
  172. package/lib/charts/originals/daily-users.data.js +101 -0
  173. package/lib/charts/originals/daily-users.js +203 -0
  174. package/lib/charts/originals/feature-rank.data.js +92 -0
  175. package/lib/charts/originals/feature-rank.js +167 -0
  176. package/lib/charts/originals/format.js +5 -0
  177. package/lib/charts/originals/key.js +26 -0
  178. package/lib/charts/originals/response-time.data.js +98 -0
  179. package/lib/charts/originals/response-time.js +187 -0
  180. package/lib/charts/originals/revenue-by-plan.data.js +26 -0
  181. package/lib/charts/originals/revenue-by-plan.js +248 -0
  182. package/lib/charts/playback.js +68 -0
  183. package/lib/charts/plot-note.js +27 -0
  184. package/lib/charts/roles.js +5 -0
  185. package/lib/charts/rules.js +66 -0
  186. package/lib/charts/scale-context.js +6 -0
  187. package/lib/charts/shapes.js +8 -0
  188. package/lib/charts/shared-options.js +25 -0
  189. package/lib/charts/svg.js +43 -0
  190. package/lib/charts/text.js +30 -0
  191. package/lib/charts/texture-ids.js +20 -0
  192. package/lib/charts/texture.js +286 -0
  193. package/lib/charts/util.js +43 -0
  194. package/lib/charts/value-grid.js +26 -0
  195. package/lib/draw.js +27 -0
  196. package/lib/entries/dumbbell-queue.js +2 -0
  197. package/lib/entries/hairline-area.js +2 -0
  198. package/lib/entries/hairline-line.js +2 -0
  199. package/lib/entries/plumb-scatter.js +2 -0
  200. package/lib/entries/rung-bars.js +2 -0
  201. package/lib/entries/slope.js +2 -0
  202. package/lib/frame.js +2 -0
  203. package/lib/hairline.css +1385 -0
  204. package/lib/index.js +72 -0
  205. package/lib/json-schema/dumbbell-queue.json +258 -0
  206. package/lib/json-schema/hairline-area.json +262 -0
  207. package/lib/json-schema/hairline-line.json +256 -0
  208. package/lib/json-schema/index.json +50 -0
  209. package/lib/json-schema/plumb-scatter.json +363 -0
  210. package/lib/json-schema/rung-bars.json +230 -0
  211. package/lib/json-schema/slope.json +333 -0
  212. package/lib/kit.js +16 -0
  213. package/lib/lib/format.js +29 -0
  214. package/lib/lib/random.js +8 -0
  215. package/lib/maps.js +4 -0
  216. package/lib/schema/daily.js +9 -0
  217. package/lib/schema/dumbbell-queue.js +28 -0
  218. package/lib/schema/format.js +72 -0
  219. package/lib/schema/hairline-area.js +24 -0
  220. package/lib/schema/hairline-line.js +23 -0
  221. package/lib/schema/key.js +4 -0
  222. package/lib/schema/metrics.js +26 -0
  223. package/lib/schema/motion.js +12 -0
  224. package/lib/schema/options.js +21 -0
  225. package/lib/schema/plumb-scatter.js +48 -0
  226. package/lib/schema/registry.js +132 -0
  227. package/lib/schema/rung-bars.js +25 -0
  228. package/lib/schema/scale.js +9 -0
  229. package/lib/schema/slope.js +28 -0
  230. package/lib/schema/validate.js +25 -0
  231. package/lib/schema.js +16 -0
  232. package/lib/theme/derive.js +98 -0
  233. package/lib/theme.css +443 -0
  234. package/lib/theme.js +1 -0
  235. package/lib/tokens.css +306 -0
  236. package/lib/types/charts/axes.d.ts +14 -0
  237. package/lib/types/charts/basics/candlestick.d.ts +22 -0
  238. package/lib/types/charts/basics/candlestick.data.d.ts +10 -0
  239. package/lib/types/charts/basics/daily-empty.d.ts +7 -0
  240. package/lib/types/charts/basics/daily-readings.d.ts +38 -0
  241. package/lib/types/charts/basics/dot-heat.d.ts +19 -0
  242. package/lib/types/charts/basics/dot-heat.data.d.ts +28 -0
  243. package/lib/types/charts/basics/dumbbell-queue.d.ts +15 -0
  244. package/lib/types/charts/basics/hairline-area.d.ts +18 -0
  245. package/lib/types/charts/basics/hairline-line.d.ts +18 -0
  246. package/lib/types/charts/basics/nested-treemap.d.ts +18 -0
  247. package/lib/types/charts/basics/nested-treemap.data.d.ts +30 -0
  248. package/lib/types/charts/basics/paired-rungs.d.ts +21 -0
  249. package/lib/types/charts/basics/paired-rungs.data.d.ts +43 -0
  250. package/lib/types/charts/basics/plumb-scatter.d.ts +14 -0
  251. package/lib/types/charts/basics/rung-bars.d.ts +16 -0
  252. package/lib/types/charts/basics/rung-geometry.d.ts +6 -0
  253. package/lib/types/charts/basics/rung-histogram.d.ts +22 -0
  254. package/lib/types/charts/basics/rung-histogram.data.d.ts +34 -0
  255. package/lib/types/charts/basics/rung-waterfall.d.ts +19 -0
  256. package/lib/types/charts/basics/rung-waterfall.data.d.ts +31 -0
  257. package/lib/types/charts/basics/rungs.d.ts +28 -0
  258. package/lib/types/charts/basics/series-key.d.ts +19 -0
  259. package/lib/types/charts/basics/stacked-rungs.d.ts +20 -0
  260. package/lib/types/charts/basics/stacked-rungs.data.d.ts +26 -0
  261. package/lib/types/charts/basics/stream-ribbon.d.ts +19 -0
  262. package/lib/types/charts/basics/stream-ribbon.data.d.ts +29 -0
  263. package/lib/types/charts/basics/tick-box.d.ts +19 -0
  264. package/lib/types/charts/basics/tick-box.data.d.ts +30 -0
  265. package/lib/types/charts/basics/tick-donut.d.ts +24 -0
  266. package/lib/types/charts/basics/tick-donut.data.d.ts +25 -0
  267. package/lib/types/charts/basics/tick-gauge.d.ts +22 -0
  268. package/lib/types/charts/basics/tick-gauge.data.d.ts +24 -0
  269. package/lib/types/charts/basics/tick-rows.d.ts +18 -0
  270. package/lib/types/charts/basics/tick-rows.data.d.ts +23 -0
  271. package/lib/types/charts/basics/util-a.d.ts +10 -0
  272. package/lib/types/charts/basics/util-b.d.ts +13 -0
  273. package/lib/types/charts/big/circular-graph.d.ts +20 -0
  274. package/lib/types/charts/big/circular-graph.data.d.ts +46 -0
  275. package/lib/types/charts/big/force-galaxy-model.d.ts +109 -0
  276. package/lib/types/charts/big/force-galaxy.d.ts +18 -0
  277. package/lib/types/charts/big/force-galaxy.data.d.ts +48 -0
  278. package/lib/types/charts/big/thread-triptych.d.ts +17 -0
  279. package/lib/types/charts/big/thread-triptych.data.d.ts +41 -0
  280. package/lib/types/charts/board/room.d.ts +18 -0
  281. package/lib/types/charts/board/slope.d.ts +14 -0
  282. package/lib/types/charts/board/spread.d.ts +5 -0
  283. package/lib/types/charts/control.d.ts +17 -0
  284. package/lib/types/charts/core.d.ts +77 -0
  285. package/lib/types/charts/data-table.d.ts +18 -0
  286. package/lib/types/charts/fills.d.ts +103 -0
  287. package/lib/types/charts/forms/area-difference.d.ts +9 -0
  288. package/lib/types/charts/forms/area-difference.data.d.ts +26 -0
  289. package/lib/types/charts/forms/brush-math.d.ts +19 -0
  290. package/lib/types/charts/forms/brush-strip.d.ts +19 -0
  291. package/lib/types/charts/forms/brushed-overview.d.ts +12 -0
  292. package/lib/types/charts/forms/brushed-overview.data.d.ts +16 -0
  293. package/lib/types/charts/forms/chord-ring.d.ts +12 -0
  294. package/lib/types/charts/forms/chord-ring.data.d.ts +29 -0
  295. package/lib/types/charts/forms/circle-pack.d.ts +9 -0
  296. package/lib/types/charts/forms/circle-pack.data.d.ts +23 -0
  297. package/lib/types/charts/forms/hatched-stack.d.ts +10 -0
  298. package/lib/types/charts/forms/hatched-stack.data.d.ts +36 -0
  299. package/lib/types/charts/forms/radial-year.d.ts +8 -0
  300. package/lib/types/charts/forms/radial-year.data.d.ts +17 -0
  301. package/lib/types/charts/frame.d.ts +21 -0
  302. package/lib/types/charts/glance/aggregate-sankey.d.ts +23 -0
  303. package/lib/types/charts/glance/aggregate-sankey.data.d.ts +32 -0
  304. package/lib/types/charts/glance/bar-race.d.ts +20 -0
  305. package/lib/types/charts/glance/bar-race.data.d.ts +32 -0
  306. package/lib/types/charts/glance/big-slice.d.ts +27 -0
  307. package/lib/types/charts/glance/big-slice.data.d.ts +30 -0
  308. package/lib/types/charts/glance/chunky-bars.d.ts +18 -0
  309. package/lib/types/charts/glance/chunky-bars.data.d.ts +24 -0
  310. package/lib/types/charts/glance/circular-graph.d.ts +19 -0
  311. package/lib/types/charts/glance/circular-graph.data.d.ts +43 -0
  312. package/lib/types/charts/glance/control-slot.d.ts +9 -0
  313. package/lib/types/charts/glance/diverging-bar.d.ts +19 -0
  314. package/lib/types/charts/glance/diverging-bar.data.d.ts +27 -0
  315. package/lib/types/charts/glance/dot-waffle.d.ts +19 -0
  316. package/lib/types/charts/glance/dot-waffle.data.d.ts +31 -0
  317. package/lib/types/charts/glance/draw-in.d.ts +20 -0
  318. package/lib/types/charts/glance/draw-in.data.d.ts +6 -0
  319. package/lib/types/charts/glance/dynamic-stream.d.ts +22 -0
  320. package/lib/types/charts/glance/dynamic-stream.data.d.ts +7 -0
  321. package/lib/types/charts/glance/force-graph.d.ts +16 -0
  322. package/lib/types/charts/glance/force-graph.data.d.ts +45 -0
  323. package/lib/types/charts/glance/jitter-strip.d.ts +24 -0
  324. package/lib/types/charts/glance/jitter-strip.data.d.ts +27 -0
  325. package/lib/types/charts/glance/link-bundle.d.ts +22 -0
  326. package/lib/types/charts/glance/matrix-heat-glance.d.ts +22 -0
  327. package/lib/types/charts/glance/matrix-heat-glance.data.d.ts +35 -0
  328. package/lib/types/charts/glance/pictorial-bar.d.ts +20 -0
  329. package/lib/types/charts/glance/pictorial-bar.data.d.ts +27 -0
  330. package/lib/types/charts/glance/rainfall-dual-area.d.ts +19 -0
  331. package/lib/types/charts/glance/rainfall-dual-area.data.d.ts +32 -0
  332. package/lib/types/charts/glance/rank-strip.d.ts +19 -0
  333. package/lib/types/charts/glance/rank-strip.data.d.ts +36 -0
  334. package/lib/types/charts/glance/scatter-labels.d.ts +23 -0
  335. package/lib/types/charts/glance/scatter-morph.d.ts +22 -0
  336. package/lib/types/charts/glance/scatter-morph.data.d.ts +30 -0
  337. package/lib/types/charts/glance/single-axis.d.ts +27 -0
  338. package/lib/types/charts/glance/single-axis.data.d.ts +6 -0
  339. package/lib/types/charts/glance/stagger-wave.d.ts +18 -0
  340. package/lib/types/charts/glance/stagger-wave.data.d.ts +26 -0
  341. package/lib/types/charts/glance/tree-lr.d.ts +16 -0
  342. package/lib/types/charts/glance/tree-lr.data.d.ts +27 -0
  343. package/lib/types/charts/glance/util-a.d.ts +31 -0
  344. package/lib/types/charts/glance/util-b.d.ts +12 -0
  345. package/lib/types/charts/glance/violin.d.ts +22 -0
  346. package/lib/types/charts/glance/violin.data.d.ts +24 -0
  347. package/lib/types/charts/hooks.d.ts +109 -0
  348. package/lib/types/charts/hover.d.ts +26 -0
  349. package/lib/types/charts/lupi/arc-matrix.d.ts +18 -0
  350. package/lib/types/charts/lupi/arc-matrix.data.d.ts +28 -0
  351. package/lib/types/charts/lupi/ballot-tally.d.ts +19 -0
  352. package/lib/types/charts/lupi/ballot-tally.data.d.ts +28 -0
  353. package/lib/types/charts/lupi/barcode-lollipop.d.ts +19 -0
  354. package/lib/types/charts/lupi/barcode-lollipop.data.d.ts +26 -0
  355. package/lib/types/charts/lupi/brand-spectrum.d.ts +28 -0
  356. package/lib/types/charts/lupi/brand-spectrum.data.d.ts +34 -0
  357. package/lib/types/charts/lupi/bubble-almanac.d.ts +22 -0
  358. package/lib/types/charts/lupi/bubble-almanac.data.d.ts +45 -0
  359. package/lib/types/charts/lupi/calendar-heat.d.ts +19 -0
  360. package/lib/types/charts/lupi/calendar-heat.data.d.ts +20 -0
  361. package/lib/types/charts/lupi/cluster-field.d.ts +21 -0
  362. package/lib/types/charts/lupi/cluster-field.data.d.ts +52 -0
  363. package/lib/types/charts/lupi/dot-cascade.d.ts +22 -0
  364. package/lib/types/charts/lupi/dot-cascade.data.d.ts +24 -0
  365. package/lib/types/charts/lupi/dotty-matrix.d.ts +17 -0
  366. package/lib/types/charts/lupi/dotty-matrix.data.d.ts +32 -0
  367. package/lib/types/charts/lupi/hourglass-stream.d.ts +18 -0
  368. package/lib/types/charts/lupi/hourglass-stream.data.d.ts +27 -0
  369. package/lib/types/charts/lupi/hundred-field.d.ts +18 -0
  370. package/lib/types/charts/lupi/hundred-field.data.d.ts +24 -0
  371. package/lib/types/charts/lupi/launch-fan.d.ts +37 -0
  372. package/lib/types/charts/lupi/launch-fan.data.d.ts +41 -0
  373. package/lib/types/charts/lupi/matrix-heat.d.ts +20 -0
  374. package/lib/types/charts/lupi/matrix-heat.data.d.ts +29 -0
  375. package/lib/types/charts/lupi/parallel-coordinates.d.ts +23 -0
  376. package/lib/types/charts/lupi/parallel-coordinates.data.d.ts +40 -0
  377. package/lib/types/charts/lupi/radial-convergence.d.ts +15 -0
  378. package/lib/types/charts/lupi/radial-convergence.data.d.ts +24 -0
  379. package/lib/types/charts/lupi/radial-patchwork.d.ts +16 -0
  380. package/lib/types/charts/lupi/radial-patchwork.data.d.ts +35 -0
  381. package/lib/types/charts/lupi/ridgeline.d.ts +23 -0
  382. package/lib/types/charts/lupi/ridgeline.data.d.ts +19 -0
  383. package/lib/types/charts/lupi/trend-lineage.d.ts +18 -0
  384. package/lib/types/charts/lupi/trend-lineage.data.d.ts +56 -0
  385. package/lib/types/charts/lupi/type-colonnade.d.ts +20 -0
  386. package/lib/types/charts/lupi/type-colonnade.data.d.ts +30 -0
  387. package/lib/types/charts/lupi/util-a.d.ts +9 -0
  388. package/lib/types/charts/lupi/util-b.d.ts +11 -0
  389. package/lib/types/charts/maps/choropleth.d.ts +33 -0
  390. package/lib/types/charts/maps/geo.d.ts +48 -0
  391. package/lib/types/charts/maps/legend.d.ts +14 -0
  392. package/lib/types/charts/maps/step-fill.d.ts +6 -0
  393. package/lib/types/charts/maps/us-choropleth.d.ts +25 -0
  394. package/lib/types/charts/maps/us-choropleth.data.d.ts +23 -0
  395. package/lib/types/charts/maps/world-choropleth.d.ts +22 -0
  396. package/lib/types/charts/maps/world-choropleth.data.d.ts +35 -0
  397. package/lib/types/charts/markers.d.ts +42 -0
  398. package/lib/types/charts/marks.d.ts +58 -0
  399. package/lib/types/charts/motion.d.ts +12 -0
  400. package/lib/types/charts/originals/daily-users.d.ts +13 -0
  401. package/lib/types/charts/originals/daily-users.data.d.ts +17 -0
  402. package/lib/types/charts/originals/feature-rank.d.ts +13 -0
  403. package/lib/types/charts/originals/feature-rank.data.d.ts +29 -0
  404. package/lib/types/charts/originals/format.d.ts +2 -0
  405. package/lib/types/charts/originals/key.d.ts +16 -0
  406. package/lib/types/charts/originals/response-time.d.ts +11 -0
  407. package/lib/types/charts/originals/response-time.data.d.ts +24 -0
  408. package/lib/types/charts/originals/revenue-by-plan.d.ts +12 -0
  409. package/lib/types/charts/originals/revenue-by-plan.data.d.ts +26 -0
  410. package/lib/types/charts/playback.d.ts +42 -0
  411. package/lib/types/charts/plot-note.d.ts +37 -0
  412. package/lib/types/charts/roles.d.ts +28 -0
  413. package/lib/types/charts/rules.d.ts +62 -0
  414. package/lib/types/charts/scale-context.d.ts +3 -0
  415. package/lib/types/charts/shapes.d.ts +9 -0
  416. package/lib/types/charts/shared-options.d.ts +25 -0
  417. package/lib/types/charts/svg.d.ts +24 -0
  418. package/lib/types/charts/text.d.ts +36 -0
  419. package/lib/types/charts/texture-ids.d.ts +24 -0
  420. package/lib/types/charts/texture.d.ts +185 -0
  421. package/lib/types/charts/util.d.ts +66 -0
  422. package/lib/types/charts/value-grid.d.ts +22 -0
  423. package/lib/types/draw.d.ts +279 -0
  424. package/lib/types/entries/dumbbell-queue.d.ts +2 -0
  425. package/lib/types/entries/hairline-area.d.ts +2 -0
  426. package/lib/types/entries/hairline-line.d.ts +2 -0
  427. package/lib/types/entries/plumb-scatter.d.ts +2 -0
  428. package/lib/types/entries/rung-bars.d.ts +2 -0
  429. package/lib/types/entries/slope.d.ts +2 -0
  430. package/lib/types/frame.d.ts +2 -0
  431. package/lib/types/index.d.ts +82 -0
  432. package/lib/types/kit.d.ts +22 -0
  433. package/lib/types/lib/format.d.ts +58 -0
  434. package/lib/types/lib/random.d.ts +5 -0
  435. package/lib/types/maps.d.ts +2 -0
  436. package/lib/types/schema/daily.d.ts +14 -0
  437. package/lib/types/schema/dumbbell-queue.d.ts +91 -0
  438. package/lib/types/schema/format.d.ts +101 -0
  439. package/lib/types/schema/hairline-area.d.ts +83 -0
  440. package/lib/types/schema/hairline-line.d.ts +85 -0
  441. package/lib/types/schema/key.d.ts +12 -0
  442. package/lib/types/schema/metrics.d.ts +26 -0
  443. package/lib/types/schema/motion.d.ts +22 -0
  444. package/lib/types/schema/options.d.ts +51 -0
  445. package/lib/types/schema/plumb-scatter.d.ts +124 -0
  446. package/lib/types/schema/registry.d.ts +309 -0
  447. package/lib/types/schema/rung-bars.d.ts +84 -0
  448. package/lib/types/schema/scale.d.ts +36 -0
  449. package/lib/types/schema/slope.d.ts +120 -0
  450. package/lib/types/schema/validate.d.ts +29 -0
  451. package/lib/types/schema.d.ts +30 -0
  452. package/lib/types/theme/derive.d.ts +23 -0
  453. package/lib/types/theme.d.ts +2 -0
  454. package/lib/vendor/us-atlas/states-10m.json.js +13855 -0
  455. package/lib/vendor/world-atlas/countries-110m.json.js +9357 -0
  456. package/package.json +160 -3
@@ -0,0 +1,109 @@
1
+ import type { ReactNode, KeyboardEvent, PointerEvent, RefObject } from "react";
2
+ /**
3
+ * Width of an element, kept current with a ResizeObserver. The first width is
4
+ * read during layout, so a chart is drawn at its final size in the first
5
+ * painted frame rather than one frame later, which would shift the page.
6
+ *
7
+ * `initial` is the width before the first measure (0: draw nothing yet). It
8
+ * is also what the server renders, so a responsive chart given an
9
+ * `initialWidth` has real marks in its first HTML. `enabled: false` is fixed
10
+ * mode: the width stays `initial` and nothing is observed.
11
+ */
12
+ export declare const useMeasure: <T extends HTMLElement>(initial?: number, enabled?: boolean) => readonly [RefObject<T | null>, number];
13
+ /** Flips to true once the element scrolls into view; drives the entry animation. */
14
+ export declare const useReveal: (ref: RefObject<HTMLElement | null>) => boolean;
15
+ /** The reader's live preference, or null until the client snapshot is available. */
16
+ export declare const useMotionPreference: () => boolean | null;
17
+ /** Assume reduced motion until hydration supplies the reader's preference. */
18
+ export declare const useReducedMotion: () => boolean;
19
+ /**
20
+ * Separates one React root's SVG ids from another's. React's `useId` is only
21
+ * unique within a root, so charts rendered in separate roots on one page give
22
+ * each root its own prefix. Every chart inside it prefixes all its ids.
23
+ */
24
+ export declare const IdScope: (props: {
25
+ children?: ReactNode;
26
+ prefix: string;
27
+ }) => import("react").FunctionComponentElement<import("react").ProviderProps<string>>;
28
+ /**
29
+ * The one source of SVG ids (patterns, clips, masks, gradients): React's
30
+ * `useId`, made safe for url(#id) references, led by the surrounding
31
+ * `IdScope` prefix. Every chart derives its ids from this.
32
+ */
33
+ export declare const useSvgId: (prefix: string) => string;
34
+ export type Animate = "mount" | "off" | "scroll";
35
+ interface EntryOptions {
36
+ animate?: Animate;
37
+ onReady?: () => void;
38
+ replayKey?: number | string;
39
+ }
40
+ type Phase = "hidden" | "shown" | "still";
41
+ /**
42
+ * The entry animation and the ready signal for a Plot.
43
+ *
44
+ * `phase` is the class state: "hidden" until revealed (on scroll, or at once
45
+ * for animate="mount"), then "shown"; "still" when nothing animates (animate
46
+ * "off", or the reader prefers reduced motion), so the chart is simply drawn.
47
+ * The server and the first client render always agree: hidden, or still for
48
+ * "off"; the reader's motion preference is only known after hydration. Until
49
+ * then the stylesheet already draws the plot under reduced motion (nothing is
50
+ * hidden there), and `ready` follows hydration.
51
+ *
52
+ * `ready` turns true once the entry has finished (at once when still);
53
+ * `onReady` is called at that moment. A new `replayKey` starts a new cycle:
54
+ * the plot is hidden again and the entry replays in place.
55
+ */
56
+ export declare const useEntry: (ref: RefObject<HTMLElement | null>, options: EntryOptions) => {
57
+ readonly phase: Phase;
58
+ readonly ready: boolean;
59
+ };
60
+ /** Shared hover time, so small multiples scrub together. */
61
+ export interface Sync {
62
+ setTime: (t: number | null) => void;
63
+ time: number | null;
64
+ }
65
+ /**
66
+ * One cursor index per chart. Hover or arrow keys move it; leaving restores
67
+ * the resting index. Marks left of the cursor read as "past", right as "future".
68
+ */
69
+ export declare const useScrub: (restIndex: number, dates: Date[], sync?: Sync) => {
70
+ bind: (positions: number[]) => {
71
+ onBlur: () => void;
72
+ onKeyDown: (e: KeyboardEvent<SVGSVGElement>) => void;
73
+ onPointerLeave: () => void;
74
+ onPointerMove: (e: PointerEvent<SVGSVGElement>) => void;
75
+ style: {
76
+ touchAction: "pan-y";
77
+ };
78
+ tabIndex: number;
79
+ };
80
+ index: number;
81
+ isHovering: boolean;
82
+ };
83
+ /** The hovered record and where its tooltip is anchored. */
84
+ export interface HoverAt<K> {
85
+ key: K;
86
+ x: number;
87
+ y: number;
88
+ }
89
+ /**
90
+ * The one hover state: a record key (an index, an id) plus a tooltip anchor.
91
+ * `dim(key)` is true for every record but the hovered one, and only while
92
+ * something is hovered. `enter(key, x, y)` makes the pointer handler for a
93
+ * record, `showAt(key)` the `(x, y)` callback for a mark that finds its own
94
+ * anchor; `set` takes a key or null, as a nearest-point search returns.
95
+ * Re-showing the same record at the same spot does not re-render.
96
+ */
97
+ export declare const useHover: <K>() => {
98
+ at: HoverAt<K> | null;
99
+ clear: () => void;
100
+ dim: (key: K) => boolean;
101
+ enter: (key: K, x?: number, y?: number) => () => void;
102
+ key: K | null;
103
+ set: (key: K | null, x?: number, y?: number) => void;
104
+ show: (key: K, x?: number, y?: number) => void;
105
+ showAt: (key: K) => (x: number, y: number) => void;
106
+ };
107
+ /** What useHover returns, for parts that take a chart's hover. */
108
+ export type Hover<K> = ReturnType<typeof useHover<K>>;
109
+ export {};
@@ -0,0 +1,26 @@
1
+ import type { SVGProps } from "react";
2
+ type GroupProps = SVGProps<SVGGElement> & {
3
+ /** Another record is hovered: drop this one back. */
4
+ dim: boolean;
5
+ };
6
+ /**
7
+ * A hoverable record's group. It always carries the opacity transition, so
8
+ * it eases both ways, and drops to the shared dim level while another
9
+ * record is hovered.
10
+ */
11
+ export declare const DimGroup: ({ className, dim, ...rest }: GroupProps) => import("react").JSX.Element;
12
+ /** An invisible rect that widens a record's hover target. */
13
+ export declare const HitRect: ({ className, ...rest }: Omit<SVGProps<SVGRectElement>, "fill">) => import("react").JSX.Element;
14
+ /** An invisible disc that widens a point's hover target. */
15
+ export declare const HitCircle: ({ className, ...rest }: Omit<SVGProps<SVGCircleElement>, "fill">) => import("react").JSX.Element;
16
+ /** An invisible path (a wedge, a sector) that widens a record's hover target. */
17
+ export declare const HitPath: ({ className, ...rest }: Omit<SVGProps<SVGPathElement>, "fill">) => import("react").JSX.Element;
18
+ /**
19
+ * The tooltip's one sentence: the record's name in bold, then its facts,
20
+ * each after a middle dot.
21
+ */
22
+ export declare const TipText: (props: {
23
+ facts?: readonly string[];
24
+ lead: string;
25
+ }) => import("react").JSX.Element;
26
+ export {};
@@ -0,0 +1,18 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { ArcMatrixData } from "./arc-matrix.data.js";
3
+ interface ArcMatrixProps extends NoteProps {
4
+ data?: ArcMatrixData;
5
+ height?: number;
6
+ format?: (v: number) => string;
7
+ /** Words after the value in the tooltip, e.g. "of new woodland". */
8
+ noun?: string;
9
+ /** How many top cells to label; the largest is inked. Default 3. */
10
+ top?: number;
11
+ }
12
+ /**
13
+ * L4 New woodland. Category × category with a magnitude. Each row bows like a
14
+ * horizon; the bubble at each crossing has area proportional to the value.
15
+ * The top few cells are labelled; only the largest is inked.
16
+ */
17
+ export declare const ArcMatrix: (props: ArcMatrixProps) => import("react").JSX.Element;
18
+ export {};
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Hectares of new woodland planted each year in the four countries of the UK,
3
+ * 2014/15 to 2025/26.
4
+ *
5
+ * Source: Forest Research, Provisional Woodland Statistics 2026 (Official
6
+ * Statistics, published 25 June 2026, updated 16 July 2026), workbook
7
+ * pws_2026-06-25.ods, sheet "Data_for_Figure_3" (area of new planting, UK,
8
+ * thousands of hectares, years ending 31 March): Crown copyright, Open
9
+ * Government Licence v3.0.
10
+ * https://cdn.forestresearch.gov.uk/2026/07/pws_2026-06-25.ods
11
+ * (publication page: https://www.forestresearch.gov.uk/tools-and-resources/statistics/publications/woodland-statistics/)
12
+ * Fetched 2026-10-15 (saved to reference/raw/L4/).
13
+ *
14
+ * Transform: the rows for years ending March 2015 to March 2026 are read, so
15
+ * "2014/15" is the year ending 31 March 2015. Each figure, in thousands of
16
+ * hectares to two decimals, is multiplied by 1,000 to give hectares. Rows are
17
+ * ordered by their twelve-year total: Scotland 106.4 thousand ha, England
18
+ * 33.2, Wales 5.8, Northern Ireland 3.7. The workbook marks 2023/24 as
19
+ * revised ([r]); the figures are used as published.
20
+ * Script: reference/scripts/L4/emit.py.
21
+ */
22
+ export interface ArcMatrixData {
23
+ rows: string[];
24
+ cols: string[];
25
+ /** values[row][col] */
26
+ values: number[][];
27
+ }
28
+ export declare const arcMatrixDemo: ArcMatrixData;
@@ -0,0 +1,19 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { TallyDatum } from "./ballot-tally.data.js";
3
+ interface BallotTallyProps extends NoteProps {
4
+ data?: TallyDatum[];
5
+ /** The whole sample, for the tooltip: "44 of 100 went". */
6
+ total?: number;
7
+ height?: number;
8
+ format?: (v: number) => string;
9
+ /** Index of the row drawn in the hero colour. Defaults to the largest. */
10
+ highlight?: number;
11
+ }
12
+ /**
13
+ * L15 Days out. Multi-select answers as rulers: every person who went is
14
+ * one tall 1px tick at one whole-pixel pitch, standing on a faint shared
15
+ * ruler (longer every ten) that runs to the next ten above the largest
16
+ * value, so the rows compare at the widest scale. Rows are independent.
17
+ */
18
+ export declare const BallotTally: (props: BallotTallyProps) => import("react").JSX.Element;
19
+ export {};
@@ -0,0 +1,28 @@
1
+ /**
2
+ * L15 Days out: how many people in the European Union went to each kind of
3
+ * outing in the previous twelve months. Each person could have done any or
4
+ * all of them, so the four rows are independent.
5
+ *
6
+ * Source: Eurostat, ilc_scp03 "Persons participating in cultural or sport
7
+ * activities in the last 12 months by sex, age, educational attainment,
8
+ * activity type and frequency" (EU-SILC 2015 ad hoc module).
9
+ * Dataset: https://ec.europa.eu/eurostat/databrowser/view/ilc_scp03/
10
+ * Query: https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data/ilc_scp03?format=JSON&lang=en&geo=EU27_2020&sex=T&age=Y_GE16&isced11=TOTAL&frequenc=GE1
11
+ * Fetched 2026-10-15. Eurostat data are reusable with attribution (Commission
12
+ * Decision 2011/833/EU).
13
+ *
14
+ * Transform: geo EU27_2020, 2015 (the only year with an EU aggregate), both
15
+ * sexes, aged 16 or over, all education levels, frequency "At least once",
16
+ * unit percentage. The four activity rows are copied (Cinema 44.4, Live
17
+ * performances 40.7, Cultural sites 40.9, Sports events 29.6) and rounded to
18
+ * whole numbers per hundred. The combined "cultural activities" row (62.7) is
19
+ * left out because it overlaps the first three.
20
+ * Script: reference/scripts/L15/outings.py.
21
+ */
22
+ /** One option on a multi-select ballot and how many of the sample ticked it. */
23
+ export interface TallyDatum {
24
+ label: string;
25
+ value: number;
26
+ }
27
+ /** Of every hundred people aged 16 or over in the EU, those who went, 2015. */
28
+ export declare const ballotTallyDemo: TallyDatum[];
@@ -0,0 +1,19 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { BarcodeDatum } from "./barcode-lollipop.data.js";
3
+ interface BarcodeLollipopProps extends NoteProps {
4
+ data?: BarcodeDatum[];
5
+ height?: number;
6
+ format?: (v: number) => string;
7
+ /** Ignored: the margin paragraph is no longer drawn. */
8
+ aside?: string;
9
+ /** How many top days to label. Default 3. */
10
+ top?: number;
11
+ }
12
+ /**
13
+ * L3 Autumn tides. A vertical hairline for every day (the barcode), a
14
+ * lollipop dot at each day's high water with a stem down to its low water, so
15
+ * the stem is the day's range and the fortnightly spring and neap swell shows
16
+ * in the stem lengths. The highest high waters are labelled.
17
+ */
18
+ export declare const BarcodeLollipop: (props: BarcodeLollipopProps) => import("react").JSX.Element;
19
+ export {};
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Autumn 2026 high and low water at Eastport, Maine, a day at a time.
3
+ *
4
+ * Source: NOAA CO-OPS tide predictions (Center for Operational Oceanographic
5
+ * Products and Services), station 8410140 (Eastport), the coming autumn: 1
6
+ * October to 31 December 2026, 92 days. Query:
7
+ * https://api.tidesandcurrents.noaa.gov/api/prod/datagetter?product=predictions&application=hairline&begin_date=20261001&end_date=20261231&datum=MLLW&station=8410140&time_zone=lst&units=metric&interval=hilo&format=json
8
+ * The station ID was looked up in NOAA's station list:
9
+ * https://api.tidesandcurrents.noaa.gov/mdapi/prod/webapi/stations.json?type=tidepredictions
10
+ * Fetched 2026-10-15. Heights are predictions in metres above MLLW (mean lower
11
+ * low water), so a low can read below zero.
12
+ *
13
+ * Transform: the file lists every high ("H") and low ("L") tide with its time
14
+ * in local standard time ("lst", no daylight saving). Each calendar day takes
15
+ * its highest "H" height as `value` and its lowest "L" height as `low`, so
16
+ * the stem is that day's range. Nothing else changes: the heights are the
17
+ * file's own, with trailing zeros dropped. All 92 days have a high and a low.
18
+ */
19
+ export interface BarcodeDatum {
20
+ date: Date;
21
+ /** The day's high water, in metres above MLLW. */
22
+ value: number;
23
+ /** Where the stem ends: the day's low water. Defaults to 90% of the value. */
24
+ low?: number;
25
+ }
26
+ export declare const barcodeLollipopDemo: BarcodeDatum[];
@@ -0,0 +1,28 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { SpectrumRow } from "./brand-spectrum.data.js";
3
+ interface BrandSpectrumProps extends NoteProps {
4
+ data?: SpectrumRow[];
5
+ /** Names for the `others` positions, in order. */
6
+ competitors?: string[];
7
+ /** Name for the inked position. */
8
+ us?: string;
9
+ /** The gap bar's name in the key. Defaults to "Gap to their mean". */
10
+ gapLabel?: string;
11
+ height?: number;
12
+ /**
13
+ * A position in words, for the tooltip and the accessible label. Defaults
14
+ * to how far it leans toward a pole ("74% toward Authority"); pass this
15
+ * when the poles are measured values and the reading is a value too.
16
+ */
17
+ describe?: (row: SpectrumRow, position: number) => string;
18
+ /** The drawing's accessible title. */
19
+ title?: string;
20
+ }
21
+ /**
22
+ * L7 Four summits. Bipolar scales where both ends are valid: one row per
23
+ * pair of opposing poles, each rail a seven-stop ruler. One hill (ink dot)
24
+ * and the others (hollow 1px rings, named on hover) sit along it, and a short
25
+ * hatched bar draws the gap from the first to the others' mean.
26
+ */
27
+ export declare const BrandSpectrum: (props: BrandSpectrumProps) => import("react").JSX.Element;
28
+ export {};
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Ben Nevis against Snowdon, Scafell Pike and Slieve Donard, on six measures
3
+ * of a hill.
4
+ *
5
+ * Source: The Database of British and Irish Hills v18.6 (Creative Commons
6
+ * Attribution 4.0; cite as "The Database of British and Irish Hills v18.6",
7
+ * www.hill-bagging.co.uk/dobih), file hillcsv.zip, DoBIH_v18_6.csv, 21,576
8
+ * hills: https://www.hill-bagging.co.uk/dobih-downloads/hillcsv.zip
9
+ * (licence and downloads page: https://www.hill-bagging.co.uk/dobih/downloads/).
10
+ * Fetched 2026-10-15 (saved to reference/raw/L7/).
11
+ *
12
+ * Transform: the four hills are rows 278 (Ben Nevis), 1963 (Snowdon - Yr
13
+ * Wyddfa), 2359 (Scafell Pike) and 20016 (Slieve Donard). Each position is
14
+ * (value - lowest in the file) / (highest - lowest) over all 21,576 hills,
15
+ * to two decimals, so 0 is the least and 1 the most of any hill in the
16
+ * database. Measures, left pole to right pole: Metres (Low to High, 2 to
17
+ * 1,344.53); Drop (Minor to Prominent, 0 to 1,344.5 m); Col height (Low col
18
+ * to High col, 0 to 1,275.9 m); Latitude (Southern to Northern, 49.17 to
19
+ * 60.86); Longitude (Western to Eastern, -10.65 to 1.74); Lists (Few lists to
20
+ * Many lists, the number of classifications in the "Classification" column,
21
+ * 1 to 13). Script: reference/scripts/L7/hills.py.
22
+ */
23
+ export interface SpectrumRow {
24
+ left: string;
25
+ right: string;
26
+ /** The inked hill's position, 0 = fully left pole, 1 = fully right pole. */
27
+ us: number;
28
+ /** One position per other hill, in the order of the `competitors` prop. */
29
+ others: number[];
30
+ }
31
+ /** The three other hills, in the order of each row's `others`. */
32
+ export declare const brandSpectrumCompetitors: string[];
33
+ /** Where each hill sits on six measures, across all the hills in the database. */
34
+ export declare const brandSpectrumDemo: SpectrumRow[];
@@ -0,0 +1,22 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { AlmanacCell, AlmanacEvent, AlmanacNote } from "./bubble-almanac.data.js";
3
+ interface BubbleAlmanacProps extends NoteProps {
4
+ data?: AlmanacCell[];
5
+ /** Ignored: margin notes are no longer drawn. */
6
+ notes?: AlmanacNote[];
7
+ /** Ignored: the events footer is no longer drawn. */
8
+ events?: AlmanacEvent[];
9
+ /** Cells to print values on, as "Category-Year". */
10
+ labelled?: string[];
11
+ height?: number;
12
+ format?: (v: number) => string;
13
+ noun?: string;
14
+ }
15
+ /**
16
+ * L9 Coffee growers. Category × year with an amount and a status: veiled
17
+ * circles (area = amount) that build up where years overlap, a solid core
18
+ * sized by the yield and a ring dotted at pitch 3 round the
19
+ * flagged. The largest cell is the hero, filled with a fine halftone screen.
20
+ */
21
+ export declare const BubbleAlmanac: (props: BubbleAlmanacProps) => import("react").JSX.Element;
22
+ export {};
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Twelve coffee-growing countries over nine years, 2016 to 2024: tonnes of
3
+ * green coffee produced (size), the yield per hectare (the dark core) and
4
+ * whether that year's crop fell from the year before (a dotted ring).
5
+ *
6
+ * Source: FAO, FAOSTAT "Crops and livestock products" (QCL), bulk file
7
+ * Production_Crops_Livestock_E_All_Data_(Normalized).csv, item "Coffee,
8
+ * green", elements Production (tonnes) and Yield (kg/ha), CC BY 4.0:
9
+ * https://bulks-faostat.fao.org/production/Production_Crops_Livestock_E_All_Data_(Normalized).zip
10
+ * (catalogue: https://www.fao.org/faostat/en/#data/QCL).
11
+ * Fetched 2026-10-15 (saved to reference/raw/L9/).
12
+ *
13
+ * Transform: the twelve countries with the largest 2024 production, leaving
14
+ * out regional and income-group aggregates. `value` is Production in millions
15
+ * of tonnes to three decimals; `core` is Yield in tonnes per hectare (kg/ha
16
+ * divided by 1,000) to two decimals; `flag` is true when the year's production
17
+ * is below the previous year's (2015 is read for 2016). "Central African
18
+ * Republic" is shortened to "Central African Rep." to fit the column head. A country-year with
19
+ * no figure is left out. FAOSTAT revises past years, so a refetch can differ.
20
+ * Script: reference/scripts/L9/coffee.py and emit.py.
21
+ */
22
+ export interface AlmanacCell {
23
+ category: string;
24
+ year: number;
25
+ /** Size of the circle: millions of tonnes produced. */
26
+ value: number;
27
+ /** Drawn as the dark core: yield, tonnes per hectare. */
28
+ core: number;
29
+ /** Drawn as a dotted ring: production fell on the year before. */
30
+ flag?: boolean;
31
+ }
32
+ export interface AlmanacNote {
33
+ category: string;
34
+ year: number;
35
+ text: string;
36
+ /** Offset of the note text from the bubble centre, in px. */
37
+ dx: number;
38
+ dy: number;
39
+ }
40
+ export interface AlmanacEvent {
41
+ label: string;
42
+ text: string;
43
+ }
44
+ export declare const bubbleAlmanacDemo: AlmanacCell[];
45
+ export declare const bubbleAlmanacLabelled: never[];
@@ -0,0 +1,19 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { DayDatum } from "./calendar-heat.data.js";
3
+ interface CalendarHeatProps extends NoteProps {
4
+ data?: DayDatum[];
5
+ /** Plural noun for the count, e.g. "births". */
6
+ unit?: string;
7
+ /** Ignored: the busiest-day callout text is no longer drawn. */
8
+ annotation?: string;
9
+ /** Upper bound on the overall height; the cells shrink to fit. */
10
+ height?: number;
11
+ }
12
+ /**
13
+ * L17 A year of births. A year as an engraved almanac: week columns × weekday
14
+ * rows in stacked bands of months, each day a square halftone whose dot
15
+ * steps with its count (quieter on weekends, an empty box for none), each
16
+ * month ringed by a stepped 1px contour, the busiest day crosshatched in ink.
17
+ */
18
+ export declare const CalendarHeat: (props: CalendarHeatProps) => import("react").JSX.Element;
19
+ export {};
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Live births by date of birth, every day of 2016, England and Wales.
3
+ *
4
+ * Source: Office for National Statistics, "Number of live births by date,
5
+ * 1995 to 2016, in England and Wales" (ad hoc request 009036).
6
+ * Page: https://www.ons.gov.uk/aboutus/transparencyandgovernance/freedomofinformationfoi/dailybirthsdata
7
+ * File: https://www.ons.gov.uk/file?uri=/peoplepopulationandcommunity/birthsdeathsandmarriages/livebirths/adhocs/009036numberoflivebirthsbydate1995to2016inenglandandwales/adhocbirthsbydate1995to2016.xls
8
+ * Fetched 2026-10-15.
9
+ *
10
+ * Transform: sheet "Data", column "2016", rows 01/01 to 31/12 (366 rows,
11
+ * including 29/02), copied unchanged and grouped by month below. Code adds
12
+ * the ISO date of each value; no count is altered.
13
+ */
14
+ /** One calendar day (ISO date) and its count. */
15
+ export interface DayDatum {
16
+ date: string;
17
+ value: number;
18
+ }
19
+ /** The births in England and Wales on every day of 2016. */
20
+ export declare const calendarHeatDemo: DayDatum[];
@@ -0,0 +1,21 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { ClusterField as ClusterFieldData } from "./cluster-field.data.js";
3
+ interface ClusterFieldProps extends NoteProps {
4
+ data?: ClusterFieldData;
5
+ /** Noun for one member, e.g. "variety". */
6
+ noun?: string;
7
+ /** Plural of `noun`, e.g. "varieties". */
8
+ nouns?: string;
9
+ /** Unit of a member's size, e.g. "ha". */
10
+ sizeNoun?: string;
11
+ /** Defaults to a height that fits the poster at the measured width. */
12
+ height?: number;
13
+ }
14
+ /**
15
+ * L6 Grape families. A core-plus-satellites network: a big core
16
+ * cluster with radial spokes, satellite islands around hollow hubs, and pale
17
+ * arcs between them. Spokes sit at an even angular pitch around each hub.
18
+ * Hovering a cluster names it, with its members and their total size.
19
+ */
20
+ export declare const ClusterField: (props: ClusterFieldProps) => import("react").JSX.Element;
21
+ export {};
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Wine grape varieties grouped by the parent they descend from, each dot a
3
+ * variety sized by its hectares of vineyard worldwide in 2023; the paths are
4
+ * varieties that descend from two of the families.
5
+ *
6
+ * Sources:
7
+ * - Areas: Kym Anderson and Signe Nelgen, University of Adelaide, "Which
8
+ * winegrape varieties are grown where?", database of winegrape bearing areas
9
+ * by variety, 2000 to 2023, sheet "World ranking 2023" (area2023, hectares):
10
+ * https://economics.adelaide.edu.au/wine-economics/databases
11
+ * (file varieties_2000_to_2023.xlsx, saved to reference/raw/L6/).
12
+ * - Parentage: the Vitis International Variety Catalogue (VIVC), the
13
+ * passport page of each variety and of every ancestor, "Prime name of
14
+ * parent 1" and "parent 2": https://www.vivc.de/index.php?r=passport%2Fview&id=<VIVC number>
15
+ * (saved to reference/raw/L6/vivc/). VIVC numbers were looked up by name
16
+ * through Wikidata property P3904 (https://query.wikidata.org/); only the
17
+ * number is taken from Wikidata, never a parent.
18
+ * Fetched 2026-10-15.
19
+ *
20
+ * Transform (scripts in reference/scripts/L6/): take the 90 varieties with
21
+ * the largest 2023 area, dropping the "other" rows; follow each one's VIVC
22
+ * parents back to the founders. Five founders are used, the ones with the most
23
+ * descendants among the 90: Savagnin blanc, Heunisch weiss, Hebén, Muscat
24
+ * blanc (VIVC "Muscat a petits grains blancs") and Cabernet franc. A variety
25
+ * joins the family of the founder nearest to it in generations (ties go to
26
+ * the earlier of the five in that order); a variety that also descends from
27
+ * a second founder draws a path between the two families. Varieties with no
28
+ * recorded pedigree, or none from these founders, are left out. Areas are
29
+ * rounded to whole hectares; each family's members are sorted by size.
30
+ * Members: Savagnin blanc has Sauvignon Blanc, Pinot Noir, Chenin Blanc,
31
+ * Verdejo, Grüner Veltliner, Mencía and Castelão; Heunisch weiss has
32
+ * Chardonnay, Riesling, Colombard, Aligoté, Isabella, Müller-Thurgau,
33
+ * Blaufränkisch, Fetească Regală, Moldova and Zweigelt; Hebén has
34
+ * Tempranillo, Airén, Macabeo, Fernão Pires, Xarello and Parellada; Muscat
35
+ * blanc has Muscat of Alexandria, Cereza, Muscat Ottonel, Criolla Grande,
36
+ * Pedro Giménez, Grillo, Bianca and Torrontés Riojano; Cabernet franc has
37
+ * Cabernet Sauvignon, Merlot and Marselan.
38
+ */
39
+ export interface ClusterDatum {
40
+ id: string;
41
+ label: string;
42
+ /** One size per member (e.g. hectares); sizes the member dot by area. */
43
+ members: number[];
44
+ /** Hub position in frame units; the frame is cropped to the hubs and scaled to the width. */
45
+ at?: [number, number];
46
+ }
47
+ export interface ClusterField {
48
+ clusters: ClusterDatum[];
49
+ /** Paths between cluster ids: a member descending from both. */
50
+ links: [string, string][];
51
+ }
52
+ export declare const clusterFieldDemo: ClusterField;
@@ -0,0 +1,22 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { DotCascadeDatum } from "./dot-cascade.data.js";
3
+ interface DotCascadeProps extends NoteProps {
4
+ data?: DotCascadeDatum[];
5
+ /** Puzzles per tick. */
6
+ unit?: number;
7
+ /** Sort ascending (the staircase). Default true. */
8
+ sort?: boolean;
9
+ height?: number;
10
+ format?: (v: number) => string;
11
+ /** Words after the value in the tooltip, e.g. "puzzles". */
12
+ noun?: string;
13
+ /** Label of the column drawn in ink. Defaults to the last (largest). */
14
+ highlight?: string;
15
+ }
16
+ /**
17
+ * L2 Named mates. Ranked counts as columns of 1px unit ticks (one tick =
18
+ * `unit` puzzles) at one even pitch, rising off a slanted floor, so the
19
+ * ranking reads as a staircase. A 2px cap tops each column, its value above.
20
+ */
21
+ export declare const DotCascade: (props: DotCascadeProps) => import("react").JSX.Element;
22
+ export {};
@@ -0,0 +1,24 @@
1
+ /**
2
+ * The twelve most common named checkmates among Lichess's puzzles.
3
+ *
4
+ * Source: the Lichess open database of puzzles (CC0),
5
+ * https://database.lichess.org/lichess_db_puzzle.csv.zst, 6,157,341 rated
6
+ * puzzles, last updated 2026-10-05 by the site. Fetched 2026-10-15 (saved to
7
+ * reference/raw/L2/).
8
+ *
9
+ * Transform: each puzzle carries a space-separated list of themes. Every
10
+ * theme is counted once per puzzle that carries it. Of the themes that name a
11
+ * mating pattern (those ending "Mate", leaving out the "mateIn1" to "mateIn5"
12
+ * depth themes), the twelve with the most puzzles are kept: backRankMate,
13
+ * pillsburysMate, operaMate, smotheredMate, epauletteMate, cornerMate,
14
+ * hookMate, swallowstailMate, triangleMate, arabianMate, anastasiaMate and
15
+ * morphysMate. `value` is the count of puzzles. A puzzle can carry more than
16
+ * one theme, so the counts overlap. Scripts: reference/scripts/L2/themes.py
17
+ * and emit.py.
18
+ */
19
+ export interface DotCascadeDatum {
20
+ label: string;
21
+ value: number;
22
+ }
23
+ /** Puzzles carrying each named mate. */
24
+ export declare const dotCascadeDemo: DotCascadeDatum[];
@@ -0,0 +1,17 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { DottyGroup } from "./dotty-matrix.data.js";
3
+ interface DottyMatrixProps extends NoteProps {
4
+ data?: DottyGroup[];
5
+ height?: number;
6
+ format?: (v: number) => string;
7
+ /** Name of grid cell `k` (0-based) for the tooltip, e.g. "Jan 2023". */
8
+ cellLabel?: (k: number) => string;
9
+ /** Unit after the value, e.g. "years gained". */
10
+ noun?: string;
11
+ }
12
+ /**
13
+ * L8 Years gained. Groups × grid × amount: each group is an isometric plane
14
+ * of dots (area = amount) on a fine stipple screen, stacked in space with the most important on top.
15
+ */
16
+ export declare const DottyMatrix: (props: DottyMatrixProps) => import("react").JSX.Element;
17
+ export {};
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Years of life expectancy gained by men at birth since 1980-82, in each of
3
+ * the 36 three-year periods from 1987-89 to 2022-24, in the four countries of
4
+ * the UK, the biggest gain first.
5
+ *
6
+ * Source: ONS national life tables, one reference workbook per country, each a
7
+ * sheet per three-year period with "ex" (period expectation of life) by age
8
+ * for males and females (OGL):
9
+ * https://www.ons.gov.uk/peoplepopulationandcommunity/birthsdeathsandmarriages/lifeexpectancies/datasets/nationallifetablesenglandreferencetables
10
+ * and the same path ending nationallifetableswalesreferencetables,
11
+ * nationallifetablesscotlandreferencetables and
12
+ * nationallifetablesnorthernirelandreferencetables (files nlte, nltw, nlts and
13
+ * nltni 198020223.xlsx, published 10 December 2025).
14
+ * Fetched 2026-10-15 (saved to reference/raw/L8/).
15
+ *
16
+ * Transform: in each country's workbook, the male "ex" at age 0 is read from
17
+ * every period sheet. `values` is that figure minus the same country's
18
+ * figure for 1980-82 (England 71.08, Wales 70.52, Scotland 69.11, Northern
19
+ * Ireland 69.15), to two decimals, so a dot's area is the gain. Periods run
20
+ * oldest first, six to a row of the plane. The periods overlap (each shares
21
+ * two years with the next). The dip in 2020-22 is the pandemic. Groups are
22
+ * ordered by the gain in 2022-24. Script: reference/scripts/L8/extract.py.
23
+ */
24
+ export interface DottyGroup {
25
+ label: string;
26
+ /** grid × grid values, row-major (e.g. 36 periods for a 6 × 6 plane). */
27
+ values: number[];
28
+ }
29
+ /** The period of cell `k` (0 is 1987-89): "1987–89". */
30
+ export declare const dottyPeriodLabel: (k: number) => string;
31
+ /** Years gained by men at birth since 1980-82, by country and period. */
32
+ export declare const dottyMatrixDemo: DottyGroup[];
@@ -0,0 +1,18 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { StageDatum } from "./hourglass-stream.data.js";
3
+ interface HourglassStreamProps extends NoteProps {
4
+ data?: StageDatum[];
5
+ height?: number;
6
+ format?: (v: number) => string;
7
+ /** Index of the stage drawn in the hero colour. Defaults to the last. */
8
+ highlight?: number;
9
+ }
10
+ /**
11
+ * L13 Library earnings. A funnel poured top to bottom: each stage is a
12
+ * barcode strip of evenly pitched bars whose width is the count at that
13
+ * stage, ordered fans of hairline threads pour from one strip to the next,
14
+ * and the share that gets through each step sits in the left margin, its
15
+ * leader running into that step's fan.
16
+ */
17
+ export declare const HourglassStream: (props: HourglassStreamProps) => import("react").JSX.Element;
18
+ export {};