@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 { SimulationLinkDatum, SimulationNodeDatum } from "d3-force";
2
+ import type { GalaxyData } from "./force-galaxy.data.js";
3
+ /** A ramp step for a domain, or ink for the hero. */
4
+ export type Tone = "ink" | "l2" | "l3" | "l4" | "l5";
5
+ /** A node in the simulation. d3-force writes x, y, vx, vy, fx, fy. */
6
+ export interface Star extends SimulationNodeDatum {
7
+ domain: string;
8
+ hub: boolean;
9
+ id: string;
10
+ r: number;
11
+ tone: Tone;
12
+ volume: number;
13
+ }
14
+ export type EdgeKind = "cross" | "mesh" | "spoke";
15
+ /** A link in the simulation; `a`/`b` keep typed handles on its ends. */
16
+ export interface Edge extends SimulationLinkDatum<Star> {
17
+ a: Star;
18
+ b: Star;
19
+ id: string;
20
+ kind: EdgeKind;
21
+ weight: number;
22
+ }
23
+ /**
24
+ * How the hubs are laid out: `free` lets the forces find a layout across a
25
+ * wide plot; `ring` sets them on an ellipse (labels outside), for plots too
26
+ * narrow for the forces to settle without crowding.
27
+ */
28
+ export type GalaxyMode = "free" | "ring";
29
+ export interface Galaxy {
30
+ cx: number;
31
+ cy: number;
32
+ edges: Edge[];
33
+ floor: number;
34
+ mode: GalaxyMode;
35
+ neighbours: Map<string, string[]>;
36
+ /** Re-sets every satellite on its hub's ring (after a hub moves). */
37
+ orbit: () => void;
38
+ place: () => void;
39
+ /** Rings by hub id. */
40
+ rings: Map<string, Ring>;
41
+ scale: number;
42
+ /** Ring mode: each hub's home on the circle. */
43
+ slots: Map<string, Point>;
44
+ stars: Star[];
45
+ width: number;
46
+ }
47
+ /** A position in the plot, in px. */
48
+ export interface Point {
49
+ x: number;
50
+ y: number;
51
+ }
52
+ export interface StarTip {
53
+ degree: number;
54
+ id: string;
55
+ volume: number;
56
+ x: number;
57
+ y: number;
58
+ }
59
+ /** DOM handles, so the simulation writes positions without a React render per frame. */
60
+ export interface Handles {
61
+ edges: Map<string, SVGLineElement>;
62
+ /** The <svg> itself, under the key "root". */
63
+ frame: Map<"root", SVGSVGElement>;
64
+ labels: Map<string, SVGGElement>;
65
+ stars: Map<string, SVGCircleElement>;
66
+ }
67
+ /** A hub and its satellites, set on one ring at an even angular pitch. */
68
+ export interface Ring {
69
+ /** Room the ring and its label need, from the hub's centre. */
70
+ extent: number;
71
+ hub: Star;
72
+ /** The hub's name, as set in `t-label`. */
73
+ labelW: number;
74
+ /** Distance from the hub's centre to the satellites' centres. */
75
+ orbit: number;
76
+ /** Satellites, busiest first, clockwise from noon. */
77
+ sats: Star[];
78
+ }
79
+ /** Below this plot width the hubs sit on a ring rather than float free. */
80
+ export declare const RING_BELOW = 520;
81
+ export declare const buildGalaxy: (data: GalaxyData, width: number, floor: number) => Galaxy;
82
+ /**
83
+ * A hub's name, centred on its ring: under it on a free layout; on a ring
84
+ * layout, on the side away from the centre (above the upper half, below the
85
+ * lower), so every name sits outside the ring of hubs.
86
+ */
87
+ export declare const labelAt: (galaxy: Galaxy, ring: Ring) => Point;
88
+ /**
89
+ * Whether a hub's name, set at `spot`, lands on another hub's engraved disc:
90
+ * there it sits on a plate; over lines and satellites it keeps its halo.
91
+ */
92
+ export declare const labelOnEngraving: (galaxy: Galaxy, ring: Ring, spot: Point) => boolean;
93
+ /**
94
+ * The nearest hub centre to (x, y) that keeps the ring and its name inside
95
+ * the plot. A ring too big for the plot is centred in it.
96
+ */
97
+ export declare const fitHub: (galaxy: Galaxy, ring: Ring, x: number, y: number) => Point;
98
+ /** Pulls every hub back inside the plot, then sets the satellites on their rings. */
99
+ export declare const constrain: (galaxy: Galaxy) => void;
100
+ export declare const drawGalaxy: (galaxy: Galaxy, handles: Handles) => void;
101
+ /**
102
+ * Only hubs move. Free: the mesh pulls them together, charge and their
103
+ * rings keep them apart, and a pull to the centre keeps the whole inside the
104
+ * plot. Ring: each hub is pulled to its home on the ellipse. Every tick ends
105
+ * with `constrain`, so nothing leaves the plot.
106
+ */
107
+ export declare const makeSimulation: (galaxy: Galaxy, onTick: () => void) => import("d3-force").Simulation<Star, Edge>;
108
+ /** The settled layout at once, for reduced motion: manual ticks fire no tick events, so each is constrained here. */
109
+ export declare const settle: (galaxy: Galaxy, sim: ReturnType<typeof makeSimulation>) => void;
@@ -0,0 +1,18 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { GalaxyData } from "./force-galaxy.data.js";
3
+ interface ForceGalaxyProps extends NoteProps {
4
+ data?: GalaxyData;
5
+ format?: (v: number) => string;
6
+ height?: number;
7
+ /** Unit after the volume in the tooltip. */
8
+ unit?: string;
9
+ }
10
+ /**
11
+ * B2 Lines and stations. Stations round the lines they sit on: d3-force lays out the hubs,
12
+ * and each hub carries its satellites on one ring at an even angular pitch,
13
+ * busiest first from noon. Drag a hub (or any of its satellites) and it
14
+ * springs back when released; hover to focus a node and its neighbours;
15
+ * click empty space to replay the big bang.
16
+ */
17
+ export declare const ForceGalaxy: (props: ForceGalaxyProps) => import("react").JSX.Element;
18
+ export {};
@@ -0,0 +1,48 @@
1
+ /**
2
+ * B2 Lines and stations: each Underground line a hub, its busiest stations
3
+ * round it, and the interchanges that tie the lines together.
4
+ * Sources: Transport for London, annual station counts 2025,
5
+ * https://crowding.data.tfl.gov.uk/ (Annual Station Counts/2025/
6
+ * AC2025_AnnualisedEntryExit_public.xlsx, "Annualised En/Ex", entries plus
7
+ * exits in millions a year, TfL open data), and the TfL Unified API,
8
+ * https://api.tfl.gov.uk/Line/{id}/StopPoints for which lines serve which
9
+ * station (type NaptanMetroStation). Both fetched 2026-10-15.
10
+ * Transform: eight lines (Bakerloo, Central, District, Jubilee, Metropolitan,
11
+ * Northern, Piccadilly, Victoria; Circle, Hammersmith and City, and Waterloo
12
+ * and City are left out as they share nearly all their stations with the
13
+ * others). Station names are joined to the count rows by name, with these
14
+ * by-hand matches: Bank and Monument are one complex and one node; St. Paul's,
15
+ * St. James's Park and St. John's Wood lose the full stop; Edgware Road
16
+ * (Bakerloo) is "Edgware Road (Bak)" and Edgware Road (Circle Line) is
17
+ * "Edgware Road (DIS)"; Hammersmith (Dist&Picc Line) is "Hammersmith (DIS)";
18
+ * Heathrow Terminals 2 and 3 is "Heathrow Terminals 123 LU"; the rest of the
19
+ * "LU" and "TfL" suffixes are dropped. Kensington (Olympia) has no count
20
+ * ("---") and is left out. A station is kept if its count is at least 5
21
+ * million. It hangs from the line it serves that has the fewest stations,
22
+ * and also calls the hub of every other line that serves it. A hub's volume
23
+ * is the sum over all its stations (interchanges count once for each line).
24
+ * Hub-to-hub weight is the number of stations two lines share: 1 to 2 is 1,
25
+ * 3 to 4 is 2, 5 or more is 3. The station "Victoria" is renamed "Victoria
26
+ * station" so it differs from the Victoria line.
27
+ */
28
+ export interface GalaxyNode {
29
+ /** Group (cluster) the node belongs to. */
30
+ domain: string;
31
+ /** The group's hub: labelled, larger, anchors its satellites. */
32
+ hub?: boolean;
33
+ id: string;
34
+ /** Size measure, e.g. entries and exits a year. Drives the dot area. */
35
+ volume: number;
36
+ }
37
+ export interface GalaxyLink {
38
+ source: string;
39
+ target: string;
40
+ /** Relative strength; drives the hub-to-hub line weight. */
41
+ weight?: number;
42
+ }
43
+ export interface GalaxyData {
44
+ links: GalaxyLink[];
45
+ nodes: GalaxyNode[];
46
+ }
47
+ /** Eight Underground lines, each with the stations of 5 million or more entries and exits a year. */
48
+ export declare const forceGalaxyDemo: GalaxyData;
@@ -0,0 +1,17 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { TriptychData } from "./thread-triptych.data.js";
3
+ interface ThreadTriptychProps extends NoteProps {
4
+ data?: TriptychData;
5
+ height?: number;
6
+ /** Column titles, left to right, one per column. */
7
+ headings?: string[];
8
+ }
9
+ /**
10
+ * B3 Mammal tree. Columns from genus to superorder, one thread per genus;
11
+ * each stop after the first centres on the stops that feed it. Hover a
12
+ * thread to trace its route or a label to pull its whole bundle; click to
13
+ * pin, Escape or click empty space to release. Each column heading carries
14
+ * its count: all stops at rest, the lit ones under focus.
15
+ */
16
+ export declare const ThreadTriptych: (props: ThreadTriptychProps) => import("react").JSX.Element;
17
+ export {};
@@ -0,0 +1,41 @@
1
+ /**
2
+ * B3 Mammal tree: the largest genera of the largest families of the largest
3
+ * orders of living mammals, each one thread from genus to family to order to
4
+ * superorder.
5
+ * Source: GBIF Backbone Taxonomy (CC BY 4.0), species search,
6
+ * https://api.gbif.org/v1/species/search?highertaxonKey=359&rank=SPECIES&status=ACCEPTED&isExtinct=false
7
+ * (Mammalia is key 359). Fetched 2026-10-15; the raw pages are in
8
+ * reference/raw/B3/api.
9
+ * Rule: only accepted species the backbone flags extinct=false count as
10
+ * living (6,318 of them); each carries its genus, family and order. Species
11
+ * are counted per genus, family and order. The six orders with most living
12
+ * species (Rodentia, Chiroptera, Primates, Soricomorpha, Carnivora,
13
+ * Artiodactyla); of each, the three families with most; of each family, the
14
+ * two genera with most (ties broken alphabetically). Extinct genera and
15
+ * species, and any taxon with no extinct flag, are left out. Names follow the
16
+ * backbone, so the shrews and moles sit in Soricomorpha. Soricomorpha's third
17
+ * family, Solenodontidae, has one genus, so there are 35 paths.
18
+ *
19
+ * Superorders: the backbone has no superorder rank, so each family's comes
20
+ * from the Mammal Diversity Database v2.5 (CC BY 4.0),
21
+ * MDD_v2.5_6904species.csv, column "superorder", for its living species.
22
+ * https://doi.org/10.5281/zenodo.21654811
23
+ * Fetched 2026-10-16. Every living species of each of the 18 families has
24
+ * one superorder: Euarchontoglires for the rodent and primate families,
25
+ * Laurasiatheria for the rest (MDD files the shrews, moles and solenodons
26
+ * under Eulipotyphla). Orders are listed by superorder, then by size.
27
+ * Script: reference/scripts/B3-mdd/superorders.py.
28
+ */
29
+ /** One path: a genus and every rank above it, left to right. */
30
+ export interface ThreadPath {
31
+ id: string;
32
+ /** One name per column, e.g. genus, family, order, superorder. */
33
+ stops: string[];
34
+ }
35
+ export interface TriptychData {
36
+ /** Each column's names, top to bottom. */
37
+ columns: string[][];
38
+ paths: ThreadPath[];
39
+ }
40
+ /** 35 living genera, 18 families, 6 orders, 2 superorders: one thread per genus. */
41
+ export declare const threadTriptychDemo: TriptychData;
@@ -0,0 +1,18 @@
1
+ import type { FontMetrics } from "../../schema/metrics.js";
2
+ /** The widest label on a value scale, px (tabular figures: a 1 is as wide as a 0). */
3
+ export declare const scaleWidth: (axis: {
4
+ format?: (v: number) => string;
5
+ ticks?: readonly number[];
6
+ }) => number;
7
+ /**
8
+ * The widest of some category or series names, px. sansWidth runs a little
9
+ * wide for the medium weight, so it is shaved; `shave` lets a caller whose
10
+ * text is heavier (names with values) keep more of it.
11
+ */
12
+ export declare const nameWidth: (names: readonly string[], shave?: number, metrics?: FontMetrics) => number;
13
+ /** Gap between a plot's right edge and the names set beside it, px. */
14
+ export declare const SIDE_GAP = 12;
15
+ /** Right margin for labels set beside the plot: their gap and widest name. */
16
+ export declare const sideRoom: (items: readonly {
17
+ label?: string;
18
+ }[]) => number;
@@ -0,0 +1,14 @@
1
+ import type { SlopeProps } from "../../schema/slope.js";
2
+ /**
3
+ * Before/after slope chart, the bare plot: the biggest fall inked, the biggest
4
+ * rise red, or the `emphasis` row inked alone. Name, source and notes belong
5
+ * to the host.
6
+ *
7
+ * Props are the `slopeSchema` payload (src/schema/slope.ts); `rows` is
8
+ * required and never defaults to demo data. Give `width` and `height` for a
9
+ * fixed-size chart that is complete on the first (server) render. Bad input
10
+ * is tolerated: a row with a value that is not a finite number is skipped,
11
+ * duplicate names each get a line (give them `id`s to tell them apart), and
12
+ * no rows draws the two headed columns alone.
13
+ */
14
+ export declare const Slope: (props: SlopeProps) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Nudge label positions apart so none sit closer than `gap`, keeping order
3
+ * and staying within [min, max].
4
+ */
5
+ export declare const relax: (ys: number[], gap: number, min: number, max: number) => number[];
@@ -0,0 +1,17 @@
1
+ import type { ReactNode } from "react";
2
+ interface ControlProps {
3
+ children: ReactNode;
4
+ className?: string;
5
+ /** Accessible name when the visible text is not enough. */
6
+ label?: string;
7
+ onClick: () => void;
8
+ /** Set for a toggle or one of a set of views; omit for a plain action. */
9
+ pressed?: boolean;
10
+ }
11
+ /**
12
+ * The one chart control: a 28px pill (sentence case, the label
13
+ * role) inside a 44px-tall transparent hit area. Used for Play / Pause /
14
+ * Replay / Live and for view pickers.
15
+ */
16
+ export declare const Control: (props: ControlProps) => import("react").JSX.Element;
17
+ export {};
@@ -0,0 +1,77 @@
1
+ import type { CSSProperties, ReactNode } from "react";
2
+ import type { ScaleOptions } from "../schema/scale.js";
3
+ import type { Animate } from "./hooks.js";
4
+ interface ChartProps {
5
+ bottom?: ReactNode;
6
+ children: (width: number) => ReactNode;
7
+ className?: string;
8
+ top?: ReactNode;
9
+ }
10
+ /**
11
+ * The panel every board chart lives in: measures its width, plays the entry
12
+ * animation when it scrolls into view, and slots optional HTML above/below.
13
+ */
14
+ export declare const Chart: (props: ChartProps) => import("react").JSX.Element;
15
+ interface PlotProps {
16
+ /**
17
+ * When the entry draws in: "scroll" when scrolled into view, "mount" at
18
+ * once, "off" never. The default is "off" for a fixed-size chart (`width`
19
+ * given) and "scroll" for a responsive one. Off draws the chart and marks it
20
+ * ready (`data-hl-ready="true"`) in the first HTML. Under reduced motion the
21
+ * stylesheet draws the plot in the first paint; `ready` follows hydration,
22
+ * when the reader's preference is known.
23
+ */
24
+ animate?: Animate;
25
+ children: (width: number) => ReactNode;
26
+ className?: string;
27
+ /**
28
+ * Initial width for responsive mode: the first render (the server's too)
29
+ * draws at this width until the real one is measured. Ignored if `width` is set.
30
+ */
31
+ initialWidth?: number;
32
+ /** Called when the chart has settled, as `data-hl-ready` turns "true". */
33
+ onReady?: () => void;
34
+ overlay?: ReactNode;
35
+ /** Change it to replay the entry without remounting. */
36
+ replayKey?: number | string;
37
+ /** Slide scale (see schema/scale.ts), applied to every ChartSvg inside. */
38
+ scaling?: ScaleOptions;
39
+ style?: CSSProperties;
40
+ /**
41
+ * The chart's data table (<DataTable>), rendered after the marks whether or
42
+ * not a width is known yet, so it is in the first server HTML.
43
+ */
44
+ table?: ReactNode;
45
+ /**
46
+ * Fixed mode: draw at exactly this width, in px. Nothing is measured, so
47
+ * the first render, on the server too, is the complete chart. Leave it out
48
+ * for responsive mode, which measures the container.
49
+ */
50
+ width?: number;
51
+ }
52
+ export declare const Plot: (props: PlotProps) => import("react").JSX.Element;
53
+ interface TooltipProps {
54
+ below?: boolean;
55
+ children: ReactNode;
56
+ x: number;
57
+ y: number;
58
+ }
59
+ /** Dark pill tooltip, anchored at (x, y) inside the nearest Plot. */
60
+ export declare const Tooltip: (props: TooltipProps) => import("react").JSX.Element;
61
+ interface SplitClipsProps {
62
+ height: number;
63
+ id: string;
64
+ width: number;
65
+ x: number;
66
+ }
67
+ /**
68
+ * Clip paths splitting the plot at the cursor: `${id}-past` and `${id}-future`.
69
+ * Also defines `${id}-sweep`, the left-to-right entry reveal.
70
+ */
71
+ export declare const SplitClips: (props: SplitClipsProps) => import("react").JSX.Element;
72
+ export interface LegendItem {
73
+ color: string;
74
+ hollow?: boolean;
75
+ label: string;
76
+ }
77
+ export {};
@@ -0,0 +1,18 @@
1
+ interface DataTableProps {
2
+ /** Column headings; every row has one cell per heading. */
3
+ columns: string[];
4
+ /** Names the table for screen readers. */
5
+ caption: string;
6
+ rows: string[][];
7
+ /** Show the table to sighted readers. Otherwise it is visually hidden. */
8
+ visible?: boolean;
9
+ }
10
+ /**
11
+ * The chart's data as a table, made from the same validated payload as the
12
+ * marks. Every chart that adopts the accessible-data mechanism renders one
13
+ * through `Plot`'s `table` prop, so it is in the first server HTML. Hidden,
14
+ * it sits in an `sr-only` box and still reads out; `visible` is the opt-in
15
+ * table view.
16
+ */
17
+ export declare const DataTable: (props: DataTableProps) => import("react").JSX.Element;
18
+ export {};
@@ -0,0 +1,103 @@
1
+ /** The tone steps a fill may take, darkest first. */
2
+ export declare const FILL_TONES: readonly [{
3
+ readonly cls: "fill-hero";
4
+ readonly id: "ink";
5
+ readonly label: "Ink";
6
+ }, {
7
+ readonly cls: "fill-l2";
8
+ readonly id: "strong";
9
+ readonly label: "Strong";
10
+ }, {
11
+ readonly cls: "fill-l3";
12
+ readonly id: "mid";
13
+ readonly label: "Mid";
14
+ }, {
15
+ readonly cls: "fill-l4";
16
+ readonly id: "quiet";
17
+ readonly label: "Quiet";
18
+ }, {
19
+ readonly cls: "fill-l5";
20
+ readonly id: "faint";
21
+ readonly label: "Faint";
22
+ }, {
23
+ readonly cls: "fill-alert";
24
+ readonly id: "alert";
25
+ readonly label: "Alert";
26
+ }];
27
+ export type FillTone = (typeof FILL_TONES)[number]["id"];
28
+ /**
29
+ * The families, each with the tones it is drawn in. Hatch may run either
30
+ * diagonal (rising by default; falling to tell a neighbour apart); every
31
+ * engraved family sits on paper inside a 1px rule.
32
+ */
33
+ export declare const FILL_FAMILIES: readonly [{
34
+ readonly id: "solid";
35
+ readonly label: "Solid";
36
+ readonly tones: readonly ["ink", "strong", "mid", "quiet", "faint", "alert"];
37
+ }, {
38
+ readonly id: "hatch";
39
+ readonly label: "Hatch";
40
+ readonly pitch: 4;
41
+ readonly tones: readonly ["ink", "strong", "mid", "quiet", "faint", "alert"];
42
+ }, {
43
+ readonly id: "cross";
44
+ readonly label: "Crosshatch";
45
+ readonly pitch: 6;
46
+ readonly tones: readonly ["ink", "strong", "mid", "quiet", "alert"];
47
+ }, {
48
+ readonly id: "rules";
49
+ readonly label: "Rules";
50
+ readonly pitch: 3;
51
+ readonly tones: readonly ["ink", "strong", "mid", "quiet", "faint"];
52
+ }, {
53
+ readonly id: "upright";
54
+ readonly label: "Upright rules";
55
+ readonly pitch: 3;
56
+ readonly tones: readonly ["ink", "strong", "mid", "quiet", "faint"];
57
+ }, {
58
+ readonly id: "stipple";
59
+ readonly label: "Stipple";
60
+ readonly pitch: 4;
61
+ readonly tones: readonly ["strong", "mid", "quiet", "faint"];
62
+ }, {
63
+ readonly id: "dense";
64
+ readonly label: "Dense stipple";
65
+ readonly pitch: 3;
66
+ readonly tones: readonly ["strong", "mid", "quiet", "faint"];
67
+ }, {
68
+ readonly id: "beads";
69
+ readonly label: "Broken rungs";
70
+ readonly pitch: 3;
71
+ readonly tones: readonly ["mid"];
72
+ }];
73
+ export type FillFamily = (typeof FILL_FAMILIES)[number]["id"];
74
+ /**
75
+ * The value ladders: when a fill encodes a quantity, it steps along one of
76
+ * these, lightest first. Halftone grows its dots on a 4px screen; hatch
77
+ * density tightens its pitch.
78
+ */
79
+ export declare const FILL_LADDERS: readonly [{
80
+ readonly id: "halftone";
81
+ readonly label: "Halftone";
82
+ readonly steps: {
83
+ pitch: 4;
84
+ r: 0.75 | 1 | 1.3 | 1.6 | 1.85;
85
+ }[];
86
+ readonly tones: readonly ["mid", "quiet"];
87
+ }, {
88
+ readonly id: "density";
89
+ readonly label: "Hatch density";
90
+ readonly steps: readonly [{
91
+ readonly pitch: 6;
92
+ readonly r: 0;
93
+ }, {
94
+ readonly pitch: 4;
95
+ readonly r: 0;
96
+ }, {
97
+ readonly pitch: 3;
98
+ readonly r: 0;
99
+ }];
100
+ readonly tones: readonly ["mid"];
101
+ }];
102
+ /** Ramp class for a tone. */
103
+ export declare const toneClass: (tone: FillTone) => "fill-alert" | "fill-hero" | "fill-l2" | "fill-l3" | "fill-l4" | "fill-l5";
@@ -0,0 +1,9 @@
1
+ import type { PlanWeek } from "./area-difference.data.js";
2
+ /**
3
+ * O5 Against normal. Two weekly lines; the gap between them is an ink
4
+ * crosshatch where 2022 runs above the normal and a single grey hatch where
5
+ * it runs below.
6
+ */
7
+ export declare const AreaDifference: (props: {
8
+ data?: PlanWeek[];
9
+ }) => import("react").JSX.Element;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * O5 Against normal: weekly Central England temperature in 2022 against the
3
+ * 1991 to 2020 normal.
4
+ * Source: Met Office Hadley Centre Central England Temperature (HadCET),
5
+ * v2.1.1.0 + provisional, https://www.metoffice.gov.uk/hadobs/hadcet/data/download.html
6
+ * Fetched 2026-10-15.
7
+ * File: meantemp_daily_totals.txt (daily mean CET, date and value to 0.1 °C,
8
+ * -99.9 for a missing day; none are missing in the years used).
9
+ * Transform: 52 consecutive blocks of 7 days from 1 January 2022 (the last
10
+ * ends on 30 December; 31 December is left out). `actual` is the mean of the
11
+ * block's seven 2022 daily values. `plan` is the normal: for each calendar
12
+ * date in the block, the mean of that date's daily value over the 30 years
13
+ * 1991 to 2020, then the mean of those seven dates. Both are rounded to
14
+ * 0.1 °C once, at the end.
15
+ */
16
+ /** One week of Central England mean temperature against its normal, in °C. */
17
+ export interface PlanWeek {
18
+ /** The week's mean temperature in 2022. */
19
+ actual: number;
20
+ /** The 1991 to 2020 normal for the same seven dates. */
21
+ plan: number;
22
+ /** The week's first day. */
23
+ week: Date;
24
+ }
25
+ /** Central England weekly mean temperature against the 1991 to 2020 normal, 2022. */
26
+ export declare const planWeeksDemo: PlanWeek[];
@@ -0,0 +1,19 @@
1
+ /** The brushed window: first and last day index, inclusive. */
2
+ export interface Span {
3
+ a: number;
4
+ b: number;
5
+ }
6
+ /** What the pointer took hold of; "outside" recentres the window first. */
7
+ export type Grip = "body" | "end" | "outside" | "start";
8
+ /** A drag in progress: the window it started from, in day units. */
9
+ export interface Drag {
10
+ from: Span;
11
+ grip: Exclude<Grip, "outside">;
12
+ origin: number;
13
+ }
14
+ /** Where the window lands after a drag of `delta` days. */
15
+ export declare const dragTo: (d: Drag, delta: number, last: number) => Span;
16
+ /** The same window, centred as near `day` as the year allows. */
17
+ export declare const centreOn: (s: Span, day: number, last: number) => Span;
18
+ /** Arrow keys move the window a week; Home and End send it to either end. */
19
+ export declare const keyTo: (key: string, s: Span, last: number) => Span | null;
@@ -0,0 +1,19 @@
1
+ import type { Span } from "./brush-math.js";
2
+ import type { DayValue } from "./brushed-overview.data.js";
3
+ interface StripProps {
4
+ data: DayValue[];
5
+ /** Each day's 7-day mean: the strip draws this, a smooth silhouette. */
6
+ mean: number[];
7
+ onChange: (s: Span) => void;
8
+ span: Span;
9
+ width: number;
10
+ x0: number;
11
+ x1: number;
12
+ }
13
+ /**
14
+ * The overview: the whole year's 7-day mean as a quiet silhouette, the window an outlined
15
+ * rectangle to drag, resize at either edge, or move with the arrow keys.
16
+ * Keys go to a visually hidden range input; its focus thickens the outline.
17
+ */
18
+ export declare const BrushStrip: (props: StripProps) => import("react").JSX.Element;
19
+ export {};
@@ -0,0 +1,12 @@
1
+ import type { DayValue } from "./brushed-overview.data.js";
2
+ /**
3
+ * O8 Overview and detail. A year of daily maximum temperatures as a thin
4
+ * strip, drawn as its 7-day average so the year reads as one smooth
5
+ * silhouette; the outlined window on it chooses the days the detail above
6
+ * draws: the average as a calm line, each day a stem off it, the window's
7
+ * hottest day in ink, read off a right-hand scale. Opens on a two-month
8
+ * window centred on the year's hottest day.
9
+ */
10
+ export declare const BrushedOverview: (props: {
11
+ data?: DayValue[];
12
+ }) => import("react").JSX.Element;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * O8 Hot year: the daily maximum Central England temperature through 2022.
3
+ * Source: Met Office Hadley Centre Central England Temperature (HadCET),
4
+ * v2.1.1.0 + provisional, https://www.metoffice.gov.uk/hadobs/hadcet/data/download.html
5
+ * Fetched 2026-10-15.
6
+ * File: maxtemp_daily_totals.txt (date and value to 0.1 °C, -99.9 for a
7
+ * missing day; none are missing in 2022). Transform: the 365 values from
8
+ * 2022-01-01 to 2022-12-31, copied as they stand.
9
+ */
10
+ /** One day's maximum temperature, in °C. */
11
+ export interface DayValue {
12
+ date: Date;
13
+ value: number;
14
+ }
15
+ /** Central England daily maximum temperature, 2022. */
16
+ export declare const activeDaysDemo: DayValue[];
@@ -0,0 +1,12 @@
1
+ import type { SharedWork } from "./chord-ring.data.js";
2
+ /**
3
+ * O6 Goods exports. Partners and kinds of goods on a thin ring; every pair that trades is
4
+ * tied by a bundle of one to three hairlines through the centre, more
5
+ * threads for more pounds, so the ring reads as an engraved web on paper.
6
+ * The busiest group is the ink hero, its pairs drawn as ribbons in an ink
7
+ * hatch on paper; hovering another group crossfades the hatch to its pairs
8
+ * and dims the threads.
9
+ */
10
+ export declare const ChordRing: (props: {
11
+ data?: SharedWork;
12
+ }) => import("react").JSX.Element;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * O6 Goods exports: what the UK sold to its five largest export markets in
3
+ * 2025, by kind of goods.
4
+ * Source: Office for National Statistics, "Trade in goods: country by
5
+ * commodity" (Open Government Licence), dataset trade, edition time-series,
6
+ * version 65 (released 2026-02-18), https://www.ons.gov.uk/economy/nationalaccounts/balanceofpayments/datasets/uktradecountrybycommodityexports
7
+ * through the ONS API https://api.beta.ons.gov.uk/v1/datasets/trade/editions/time-series/versions/65/observations
8
+ * (UK, direction EX, monthly, GBP million, not seasonally adjusted). Fetched
9
+ * 2026-10-15; every response is saved in reference/raw/O6/api.
10
+ * Transform: each cell is the sum of the twelve months of 2025, rounded to
11
+ * GBP 1 million. Partners: the five countries with the largest 2025 goods
12
+ * exports total (United States including Puerto Rico, Germany, Netherlands,
13
+ * Ireland, France). Goods: the five SITC sections with the largest 2025
14
+ * exports to the whole world, leaving out section 9 (unspecified): 7 Machinery
15
+ * and transport equipment, 5 Chemicals, 8 Miscellaneous manufactures, 6
16
+ * Material manufactures, 3 Fuels; the names are shortened to Machinery,
17
+ * Chemicals, Manufactures, Materials and Fuels. The matrix is symmetric: the
18
+ * first five rows and columns are the partners, the last five the goods, and a
19
+ * ribbon joins a partner to a kind of goods, never two partners or two goods.
20
+ * A group's total is therefore its trade within these five by five.
21
+ */
22
+ /** Groups on a ring and the flows between them. */
23
+ export interface SharedWork {
24
+ /** Symmetric: `matrix[a][b]` is GBP million of exports between group a and group b. */
25
+ matrix: number[][];
26
+ teams: string[];
27
+ }
28
+ /** UK goods exports in 2025, GBP million: five partners, five kinds of goods. */
29
+ export declare const sharedWorkDemo: SharedWork;
@@ -0,0 +1,9 @@
1
+ import type { OrgNode } from "./circle-pack.data.js";
2
+ /**
3
+ * O9 Towers by county. Countries as stippled hairline circles, counties as
4
+ * paper discs on them; the county with most towers is the only ink mark.
5
+ * Hover any circle for its count.
6
+ */
7
+ export declare const CirclePack: (props: {
8
+ data?: OrgNode;
9
+ }) => import("react").JSX.Element;