@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,27 @@
1
+ /**
2
+ * L13 Library earnings: how many UK writers, illustrators and others were paid
3
+ * at least a given sum for library loans in one year.
4
+ *
5
+ * Source: British Library, Public Lending Right (PLR) page, "Shown below is
6
+ * how the UK PLR earnings were distributed amongst registered contributors for
7
+ * the 2024/25 year" (payments by pay band, rate 12.40p a loan, minimum payment
8
+ * £1, maximum £6,600).
9
+ * Page: https://www.bl.uk/plr
10
+ * Fetched 2026-10-15. The page is British Library web content; only the
11
+ * published counts are used.
12
+ *
13
+ * Transform: the page gives payments per band: £1 to £99.99 19,039; £100 to
14
+ * £499.99 3,399; £500 to £999.99 973; £1,000 to £2,499.99 877; £2,500 to
15
+ * £4,999.99 393; £5,000 to £6,600 311 (total 24,992, which the bands sum to).
16
+ * Each stage is the cumulative count of payments at or above its threshold:
17
+ * £1 or more 24,992; £100 or more 5,953; £500 or more 2,554; £1,000 or more
18
+ * 1,581; £2,500 or more 704; £5,000 or more 311.
19
+ * Script: reference/scripts/L13/bands.py.
20
+ */
21
+ /** One funnel stage and how many reached it. */
22
+ export interface StageDatum {
23
+ label: string;
24
+ value: number;
25
+ }
26
+ /** Payments at or above each sum, UK PLR 2024/25. */
27
+ export declare const hourglassDemo: StageDatum[];
@@ -0,0 +1,18 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { ShareDatum } from "./hundred-field.data.js";
3
+ interface HundredFieldProps extends NoteProps {
4
+ data?: ShareDatum[];
5
+ height?: number;
6
+ /** What one seed stands for, used in the tooltip ("donors"). */
7
+ unit?: string;
8
+ /** Group drawn in the hero colour. Defaults to the largest. */
9
+ highlight?: string;
10
+ }
11
+ /**
12
+ * L14 A hundred donors. A hundred donors as one engraved seed head: a
13
+ * sunflower of exactly a hundred seeds, cut into contiguous wedges by blood
14
+ * type, each with its own glyph. The largest is the hero, in solid
15
+ * ink seeds.
16
+ */
17
+ export declare const HundredField: (props: HundredFieldProps) => import("react").JSX.Element;
18
+ export {};
@@ -0,0 +1,24 @@
1
+ /**
2
+ * L14 A hundred donors: the blood types of a hundred blood donors in England.
3
+ *
4
+ * Source: NHS Blood and Transplant, "Blood types" page, the list "the
5
+ * percentage of donors with each blood type" (data accurate at February 2026;
6
+ * figures rounded to the nearest whole number by NHSBT).
7
+ * Page: https://www.blood.co.uk/why-give-blood/blood-types/
8
+ * Fetched 2026-10-15.
9
+ *
10
+ * Transform: the eight percentages are copied unchanged: O positive 36, O
11
+ * negative 14, A positive 28, A negative 8, B positive 8, B negative 3, AB
12
+ * positive 2, AB negative 1. They sum to exactly 100, so each is read as
13
+ * donors in a hundred. The page's prose says "just 2%" for B negative, which
14
+ * disagrees with its own list (3%); the list is used. The types are ordered
15
+ * around the head so that the three smallest wedges sit apart and their
16
+ * labels do not collide.
17
+ */
18
+ /** One group's share of the whole, in units (donors in a hundred). */
19
+ export interface ShareDatum {
20
+ label: string;
21
+ value: number;
22
+ }
23
+ /** The blood types of a hundred donors, NHS Blood and Transplant, 2026. */
24
+ export declare const hundredFieldDemo: ShareDatum[];
@@ -0,0 +1,37 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { LaunchFanDatum } from "./launch-fan.data.js";
3
+ /** The time unit of a fan: launches, readings and rings count these. */
4
+ export type FanUnit = "month" | "week";
5
+ interface LaunchFanProps extends NoteProps {
6
+ data?: LaunchFanDatum[];
7
+ /** The last week: where every spoke ends. Same as `periods`. */
8
+ weeks?: number;
9
+ /**
10
+ * The last period, in `unit`s: where every spoke ends. Defaults to
11
+ * `weeks`, else the demo's 24 weeks, else 20 weeks or 24 months.
12
+ */
13
+ periods?: number;
14
+ /**
15
+ * What `launch`, `weekly` and `periods` count. "month" (the default)
16
+ * spaces rings every 3, 6 or 12 months by span; "week" every five weeks.
17
+ */
18
+ unit?: FanUnit;
19
+ /**
20
+ * The calendar date of a period: rings then read in the broadsheet style
21
+ * ("Mar 2025 · Apr · May") and tooltips name the day (weeks) or month
22
+ * (months). Without it periods read "W14" or "M14".
23
+ */
24
+ periodDate?: (period: number) => Date;
25
+ height?: number;
26
+ format?: (v: number) => string;
27
+ /** Name of the spoke drawn in ink. Defaults to the largest. */
28
+ highlight?: string;
29
+ }
30
+ /**
31
+ * L1 Spring arrivals. One spoke per entity, fanned through a quarter turn and
32
+ * ordered by arrival. Distance along the spoke is time: the big dot sits at the
33
+ * arrival week or month (area = peak reading), and a 1px rung crosses the spoke
34
+ * at every one since, as long as that period's reading.
35
+ */
36
+ export declare const LaunchFan: (props: LaunchFanProps) => import("react").JSX.Element;
37
+ export {};
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Twelve summer migrants in Britain: the week each arrives and how its share of
3
+ * bird records climbs, March to August 2025.
4
+ *
5
+ * Source: GBIF occurrence search, the eBird Observation Dataset (Cornell Lab
6
+ * of Ornithology, CC BY 4.0, https://doi.org/10.15468/aomfnb) and the other
7
+ * datasets GBIF aggregates, restricted to country GB. Each count is
8
+ * https://api.gbif.org/v1/occurrence/search?country=GB&taxonKey=<key>&eventDate=<first day>,<last day>&limit=0
9
+ * for 24 consecutive 7-day weeks from 2025-03-01 to 2025-08-15, once for each
10
+ * species and once for all birds (taxonKey=212, class Aves). The species
11
+ * keys came from https://api.gbif.org/v1/species/match: Northern wheatear Oenanthe oenanthe (5231240), Sand martin Riparia riparia (2489160), Chiffchaff Phylloscopus collybita (2493091), Swallow Hirundo rustica (9515886), Willow warbler Phylloscopus trochilus (2493052), Cuckoo Cuculus canorus (5231918), Whitethroat Curruca communis (10507373), House martin Delichon urbicum (2489214), Nightingale Luscinia megarhynchos (7660710), Garden warbler Sylvia borin (2492942), Swift Apus apus (5228676), Spotted flycatcher Muscicapa striata (2492576).
12
+ * Fetched 2026-10-15 (saved to reference/raw/L1/gbif_weekly_2025.json).
13
+ * GBIF counts drift as records are added, so a refetch will differ a little.
14
+ * BTO BirdTrack reporting rates, the plan's first choice, are not offered as a
15
+ * download.
16
+ *
17
+ * Transform: a species' reading for a week is its record count divided by the
18
+ * count of all bird records that week, in per cent, to two decimals (a share
19
+ * of records, not a BirdTrack-style reporting rate). `size` is the largest
20
+ * weekly reading. `launch` is the 1-based week (1 is the week from 1 March)
21
+ * of the first reading at or above a quarter of the species' own peak. `weekly[t]` is the
22
+ * reading t weeks after that week, through week 24; weekly[0] is the arrival
23
+ * week itself. Spokes are sorted by `launch` in the chart. Chiffchaff, which
24
+ * winters here in small numbers, arrives in week 2 on this rule; the
25
+ * quarter-of-peak threshold is mine and is the one judgment in the transform.
26
+ * Script: reference/scripts/L1/emit.py.
27
+ */
28
+ export interface LaunchFanDatum {
29
+ name: string;
30
+ /** Week (or month, with `unit="month"`) of arrival, 1-based. */
31
+ launch: number;
32
+ /** Peak reading. Sizes the arrival dot. */
33
+ size: number;
34
+ /** One reading per week (or month) from arrival on; sizes the small dots. */
35
+ weekly?: number[];
36
+ }
37
+ /** Weeks in the demo span: 1 March 2025 starts week 1, week 24 ends 15 August. */
38
+ export declare const ARRIVAL_WEEKS = 24;
39
+ /** The first day of demo week `n` (week 1 starts on 1 March 2025). */
40
+ export declare const arrivalWeekDate: (n: number) => Date;
41
+ export declare const launchFanDemo: LaunchFanDatum[];
@@ -0,0 +1,20 @@
1
+ import type { MatrixData } from "./matrix-heat.data.js";
2
+ interface MatrixHeatProps {
3
+ data?: MatrixData;
4
+ /** Four lower bounds splitting values into five shades. */
5
+ thresholds?: [number, number, number, number];
6
+ /** Unit suffix for legend and tooltip, e.g. "%". */
7
+ unit?: string;
8
+ /** Cell to frame as the key cell: [row, col]. Defaults to the largest value. */
9
+ highlight?: [number, number];
10
+ height?: number;
11
+ format?: (v: number) => string;
12
+ }
13
+ /**
14
+ * L16 Letter pairs. Two discrete dimensions, one tile per pair: a halftone
15
+ * screen on paper whose dot grows in five steps with the value, the number
16
+ * set on it. The strongest pair is the one ink crosshatch, its number
17
+ * knocked out in paper; cells with no value (the diagonal) are a 4px hatch.
18
+ */
19
+ export declare const MatrixHeat: (props: MatrixHeatProps) => import("react").JSX.Element;
20
+ export {};
@@ -0,0 +1,29 @@
1
+ /**
2
+ * L16 Letter pairs: which letter comes next, for the eight commonest letters.
3
+ *
4
+ * Sources: Peter Norvig, "English Letter Frequency Counts: Mayzner Revisited"
5
+ * (letter ranking, from Google Books Ngrams, 3.56 trillion letters), and his
6
+ * two-letter sequence counts, count_2l.txt (data files used under his
7
+ * published terms; the counts are facts).
8
+ * Pages: https://norvig.com/mayzner.html
9
+ * File: https://norvig.com/ngrams/count_2l.txt
10
+ * Fetched 2026-10-15.
11
+ *
12
+ * Transform: the eight commonest letters are the first eight rows of the
13
+ * "Letter Counts" table (E T A O I N S R). For each, every count of that
14
+ * letter followed by another letter inside a word is totalled over all 26
15
+ * following letters; each of the eight following letters is then that count
16
+ * as a percentage of the total, rounded to a whole number. Row = the first
17
+ * letter, column = the letter after it, so rows do not sum to 100 (the other
18
+ * eighteen letters follow too). The diagonal is real (EE, TT and so on).
19
+ * Script: reference/scripts/L16/bigrams.py.
20
+ */
21
+ /** A grid of values over two discrete dimensions. */
22
+ export interface MatrixData {
23
+ /** Row labels; columns use the same labels unless `cols` is given. */
24
+ rows: string[];
25
+ cols?: string[];
26
+ /** values[row][col]; null = no value (e.g. the diagonal). */
27
+ values: (number | null)[][];
28
+ }
29
+ export declare const matrixHeatDemo: MatrixData;
@@ -0,0 +1,23 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { ParallelData } from "./parallel-coordinates.data.js";
3
+ interface ParallelCoordinatesProps extends NoteProps {
4
+ data?: ParallelData;
5
+ height?: number;
6
+ format?: (v: number) => string;
7
+ /** Name of the entity to draw in ink and label at the end. */
8
+ highlight?: string;
9
+ /**
10
+ * Widest the block of axes gets, in px. Defaults to 600, which suits a
11
+ * gallery card; pass `Infinity` to fill a full-width row.
12
+ */
13
+ maxWidth?: number;
14
+ }
15
+ /**
16
+ * L20 Twelve cheeses. Entities across three to six continuous axes, laid
17
+ * over an engraved ground: the full range of every entity between each pair
18
+ * of axes stippled, the middle half hatched, each axis carrying a rug of its
19
+ * values. The rest are faint hairlines; the highlighted entity is in ink,
20
+ * dotted at each axis and named.
21
+ */
22
+ export declare const ParallelCoordinates: (props: ParallelCoordinatesProps) => import("react").JSX.Element;
23
+ export {};
@@ -0,0 +1,40 @@
1
+ /**
2
+ * L20 Twelve cheeses: what is in 100 g of each.
3
+ *
4
+ * Source: Public Health England, McCance and Widdowson's The Composition of
5
+ * Foods Integrated Dataset (CoFID) 2021, workbook sheets "1.3 Proximates"
6
+ * (protein, fat) and "1.4 Inorganics" (calcium, sodium). Open Government
7
+ * Licence v3.0.
8
+ * Page: https://www.gov.uk/government/publications/composition-of-foods-integrated-dataset-cofid
9
+ * File: https://assets.publishing.service.gov.uk/media/60538b91e90e07527df82ae4/McCance_Widdowsons_Composition_of_Foods_Integrated_Dataset_2021..xlsx
10
+ * Fetched 2026-10-15.
11
+ *
12
+ * Transform: twelve foods of the cheese group (BL), chosen as a spread of
13
+ * styles and countries, taken by CoFID food code: Cheddar 12-346 (English),
14
+ * Stilton 12-367 (blue), Brie 12-344 (rind removed), Camembert 12-345, Edam
15
+ * 12-355, Emmental 12-493, Parmesan 12-526 (fresh), Feta 12-525, Mozzarella
16
+ * 12-360 (fresh), Roquefort 12-177, Mascarpone 12-490 and Cottage 12-539
17
+ * (plain). Fat and protein are in grams, calcium and sodium in milligrams, all
18
+ * per 100 g, copied unchanged. Sodium is shown, not salt, so no conversion is
19
+ * applied.
20
+ * Script: reference/scripts/L20/cheeses.py (with xl.py).
21
+ */
22
+ /** One vertical axis: which value it reads and the range it spans (bottom → top). */
23
+ export interface ParallelAxis {
24
+ key: string;
25
+ label: string;
26
+ domain: [number, number];
27
+ /** Suffix for this axis's values, e.g. "%" or "k". */
28
+ unit?: string;
29
+ }
30
+ /** One entity: a value for every axis key. */
31
+ export interface ParallelRow {
32
+ name: string;
33
+ values: Record<string, number>;
34
+ }
35
+ export interface ParallelData {
36
+ axes: ParallelAxis[];
37
+ rows: ParallelRow[];
38
+ }
39
+ /** Twelve cheeses, per 100 g. */
40
+ export declare const parallelDemo: ParallelData;
@@ -0,0 +1,15 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { ConvergenceItem } from "./radial-convergence.data.js";
3
+ interface RadialConvergenceProps extends NoteProps {
4
+ data?: ConvergenceItem[];
5
+ height?: number;
6
+ /** Noun for the tooltip, e.g. "storm". */
7
+ noun?: string;
8
+ }
9
+ /**
10
+ * L5 Named storms. Many items on one dotted ring, each claimed by one
11
+ * of a few themes; hairlines bundle inward to the theme's hub (area =
12
+ * count). Only the hubs are labelled; items name themselves on hover.
13
+ */
14
+ export declare const RadialConvergence: (props: RadialConvergenceProps) => import("react").JSX.Element;
15
+ export {};
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Every storm the Met Office lists as named for the UK, Ireland and the
3
+ * Netherlands in the six storm seasons from 2020/21 to 2025/26, each claimed
4
+ * by its season.
5
+ *
6
+ * Source: Met Office UK Storm Centre, one summary page per season:
7
+ * https://weather.metoffice.gov.uk/warnings-and-advice/uk-storm-centre/uk-storm-season-2020-21
8
+ * (and -2021-22, -2022-23, -2023-24, -2024-25, -202526 for 2025/26; index:
9
+ * https://www.metoffice.gov.uk/weather/warnings-and-advice/uk-storm-centre/index).
10
+ * Fetched 2026-10-15 (saved to reference/raw/L5/).
11
+ *
12
+ * Transform: the "Name" column of each season's table is read, in the order
13
+ * the page lists the storms (by date named), with the season as the theme.
14
+ * Storms named by a neighbouring service (for example Alex by Meteo France,
15
+ * Malik by DMI, Darcy by KNMI) are kept, because the Met Office lists them
16
+ * in its season tables. 43 storms in all. Seasons run September to August.
17
+ * Script: reference/scripts/L5/emit.py.
18
+ */
19
+ export interface ConvergenceItem {
20
+ id: string;
21
+ theme: string;
22
+ }
23
+ /** Named storms in order of naming, each with its season. */
24
+ export declare const radialConvergenceDemo: ConvergenceItem[];
@@ -0,0 +1,16 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { PatchworkEvent } from "./radial-patchwork.data.js";
3
+ interface RadialPatchworkProps extends NoteProps {
4
+ data?: PatchworkEvent[];
5
+ height?: number;
6
+ /** What a flagged (crosshatched) wedge means, e.g. "class M or stronger". */
7
+ outlined?: string;
8
+ }
9
+ /**
10
+ * L10 Solar flares. Events overlaid on a 24-hour dial: wedge angle = time
11
+ * of day, angular width = duration, reach = size (linear in `size`, which is
12
+ * already on a log scale). Overlap is read by hatch pitch, open to dense;
13
+ * flagged wedges are crosshatched in ink.
14
+ */
15
+ export declare const RadialPatchwork: (props: RadialPatchworkProps) => import("react").JSX.Element;
16
+ export {};
@@ -0,0 +1,35 @@
1
+ /**
2
+ * A week of solar flares on the 24-hour dial: the hour each began (UTC), how
3
+ * long it lasted, how strong its peak was, and the three of class M.
4
+ *
5
+ * Source: NOAA Space Weather Prediction Center, GOES X-ray flare list for the
6
+ * last seven days (primary satellite):
7
+ * https://services.swpc.noaa.gov/json/goes/primary/xray-flares-7-day.json
8
+ * Fetched 2026-10-15 (saved to reference/raw/L10b/). Public domain (US
9
+ * government work). Replaces the RNLI Return of Service, which has no
10
+ * duration, people-aided or life-saved fields.
11
+ *
12
+ * Transform: the list holds 57 flares from 2026-10-08 22:33 to 2026-10-15
13
+ * 21:31 UTC. One has no peak time, class or flux yet (begun 2026-10-14 08:22)
14
+ * and is dropped, leaving 56. For the rest: `hour` is the begin time as hours
15
+ * since midnight UTC, to three decimals (about a minute); `minutes` is
16
+ * end_time minus begin_time; `size` is log10 of the peak flux (max_xrlong, in
17
+ * watts per square metre) plus 8, so a B1 flare is 1, a C1 is 2 and an M1 is
18
+ * 3; `label` is max_class as given; `flagged` is true for class M or X
19
+ * (three flares, all M). Script: reference/scripts/L10/emit.py.
20
+ */
21
+ export interface PatchworkEvent {
22
+ id: string;
23
+ /** Start time as hours since midnight (0–24). */
24
+ hour: number;
25
+ /** Duration in minutes: sets the wedge's angular width. */
26
+ minutes: number;
27
+ /** Strength on a log scale: sets the wedge's reach. */
28
+ size: number;
29
+ /** Shown in the tooltip, e.g. the flare class "M6.4". */
30
+ label: string;
31
+ /** Crosshatched in the hero colour when true: class M or stronger. */
32
+ flagged?: boolean;
33
+ }
34
+ /** One week of flares, 8 to 15 October 2026. */
35
+ export declare const radialPatchworkDemo: PatchworkEvent[];
@@ -0,0 +1,23 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { RidgeSeries } from "./ridgeline.data.js";
3
+ interface RidgelineProps extends NoteProps {
4
+ data?: RidgeSeries[];
5
+ /** Value range of the shared x axis. */
6
+ domain?: [number, number];
7
+ /** Kernel bandwidth in data units; defaults to 1/26 of the domain. */
8
+ bandwidth?: number;
9
+ /** Number of axis intervals (ticks = intervals + 1). */
10
+ ticks?: number;
11
+ height?: number;
12
+ format?: (v: number) => string;
13
+ /** Ridge drawn in the hero colour. Defaults to the first. */
14
+ highlight?: string;
15
+ }
16
+ /**
17
+ * L19 January by decade. Three to eight distributions stacked with overlap.
18
+ * Each crest is a density outline over paper and a 4px diagonal hatch, so
19
+ * the rows overlap like terrain; the hero is crosshatched. A dot marks each
20
+ * peak, and its value sits at the right-hand end of the ridge's baseline.
21
+ */
22
+ export declare const Ridgeline: (props: RidgelineProps) => import("react").JSX.Element;
23
+ export {};
@@ -0,0 +1,19 @@
1
+ /**
2
+ * L19 January by decade: every January day in six decades, daily mean CET.
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: meantemp_daily_totals.txt (date and value to 0.1 °C, -99.9 for a
7
+ * missing day; none are missing in the years used).
8
+ * Transform: for each decade (1770s is 1772 to 1779, because the series
9
+ * starts on 1 January 1772; the others are the ten years from 1820, 1870,
10
+ * 1920, 1970 and 2010), all 31 days of January, the values as they stand.
11
+ * That is 248 values for the 1770s and 310 for each of the others.
12
+ */
13
+ /** One distribution: its name and the raw samples. */
14
+ export interface RidgeSeries {
15
+ label: string;
16
+ values: number[];
17
+ }
18
+ /** Daily mean Central England temperature (°C) on every January day, by decade. */
19
+ export declare const ridgelineDemo: RidgeSeries[];
@@ -0,0 +1,18 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { LineageDatum } from "./trend-lineage.data.js";
3
+ interface TrendLineageProps extends NoteProps {
4
+ data?: LineageDatum[];
5
+ /** First and last year on the axis; defaults to the data's span. */
6
+ years?: [number, number];
7
+ height?: number;
8
+ /** Area drawn in the hero colour. Defaults to the oldest still in use. */
9
+ highlight?: string;
10
+ }
11
+ /**
12
+ * L11 Sea areas. One column per sea area, time running down the page.
13
+ * Filled dot = added, hollow = renamed or redrawn, dotted = suspended years;
14
+ * the line runs on to the floor if the area is still in use today, and stops
15
+ * at a small dot where it was dropped. The oldest area in use is the hero.
16
+ */
17
+ export declare const TrendLineage: (props: TrendLineageProps) => import("react").JSX.Element;
18
+ export {};
@@ -0,0 +1,56 @@
1
+ /** One sea area's life: when it was added, changed, suspended or dropped. */
2
+ export interface LineageDatum {
3
+ name: string;
4
+ /** Year it was first added (fractions allowed: 2017.5 = mid-2017). */
5
+ shipped: number;
6
+ /** Years it was renamed, split or otherwise redrawn. */
7
+ reworked?: number[];
8
+ /** Spans when it sat out of use, drawn dotted. */
9
+ dormant?: [number, number][];
10
+ /** Year it was dropped from the forecast. Omit if it is still in use. */
11
+ retired?: number;
12
+ }
13
+ /**
14
+ * Ten shipping forecast sea areas, 1924 to today: when each was added,
15
+ * renamed or redrawn, and (Tay) dropped. One row per area under its current
16
+ * name; the years are those of the forecast chart, not of the name's first use
17
+ * in the broadcast.
18
+ *
19
+ * Sources (fetched 2026-10-15; every year below is read from these):
20
+ * [FS] Met Office, National Meteorological Library and Archive, "Factsheet 8
21
+ * The Shipping Forecast" (PDF, text and Figures 3 to 8):
22
+ * https://www.metoffice.gov.uk/api/assets/file/factsheet_8_shipping_forecast_2025pdf?prefix=assets
23
+ * (linked from https://www.metoffice.gov.uk/research/library-and-archive/publications/factsheets)
24
+ * [MO] Met Office, "Tragedy and warnings: the origins of the shipping forecast":
25
+ * https://www.metoffice.gov.uk/about-us/who-we-are/our-history/tragedy-and-warnings-the-origins-of-the-shipping-forecast
26
+ * [RMG] Royal Museums Greenwich, "History of the Shipping Forecast" (2002 rename):
27
+ * https://www.rmg.co.uk/stories/maritime-history/shipping-forecast
28
+ *
29
+ * Rows:
30
+ * Forties: added 1924 (FS Figure 3 map; MO lists it among seven areas "with us
31
+ * since the very first Shipping Forecast transmission"); divided in 1956, its northern half named Viking
32
+ * (FS "these changes were introduced in 1956"; MO).
33
+ * Dogger: added 1924 (FS Figure 3; MO); divided in 1956, its north-eastern half
34
+ * named Fisher (FS; MO).
35
+ * Tay: on the 1924 map (FS Figure 3) and the 1932 map (FS Figure 4), absent from
36
+ * the chart adopted in 1949 (FS Figure 5; FS text: the earlier divisions
37
+ * "were omitted and 18 new names added"). The Met Office gives no day for the
38
+ * drop, so 1949 is the first chart without it.
39
+ * German Bight: first on the 1949 chart as Heligoland (FS Figure 5); renamed
40
+ * German Bight in 1956 (FS; MO).
41
+ * FitzRoy: first on the 1949 chart as Finisterre (FS Figure 5); renamed FitzRoy
42
+ * in February 2002 (FS; MO; RMG).
43
+ * Rockall: added 1949 (MO "In 1949, many new areas ... were added, including
44
+ * Rockall, Bailey and Fast Net"; FS Figure 5).
45
+ * Fisher and Viking: new in 1956 (FS; MO).
46
+ * North Utsire and South Utsire: introduced August 1984 (FS; MO).
47
+ *
48
+ * Left out because no fetched source supports them: the Minches merging into
49
+ * Hebrides in 1983 (only Country Life and an uncited Wikipedia line say so, and
50
+ * the Met Office's 1949 and 1956 to 1984 charts, FS Figures 5 and 6, show no
51
+ * Minches area at all), and Viking being resized in 1984 (FS says only that
52
+ * common North Sea boundaries were introduced that August).
53
+ *
54
+ * Transform: none beyond reading each year off the sources above.
55
+ */
56
+ export declare const trendLineageDemo: LineageDatum[];
@@ -0,0 +1,20 @@
1
+ import type { NoteProps } from "../../schema/options.js";
2
+ import type { OwnershipDatum } from "./type-colonnade.data.js";
3
+ interface TypeColonnadeProps extends NoteProps {
4
+ data?: OwnershipDatum[];
5
+ height?: number;
6
+ /** How many of the largest owners to draw in the hero colour. Default 1. */
7
+ strong?: number;
8
+ /** Noun for the tooltip count, e.g. "lights". */
9
+ unit?: string;
10
+ /** Owner to draw in the hero colour. */
11
+ highlight?: string;
12
+ }
13
+ /**
14
+ * L12 Lights by keeper. Many-to-one keeping: every light is a hollow dot, strung
15
+ * at one even pitch and grouped by owner, and each dot runs a straight
16
+ * hairline to its owner on the right, so every owner gathers a clean fan.
17
+ * Owner disc area = how many it owns, engraved; light names are on hover.
18
+ */
19
+ export declare const TypeColonnade: (props: TypeColonnadeProps) => import("react").JSX.Element;
20
+ export {};
@@ -0,0 +1,30 @@
1
+ /**
2
+ * L12 Lights by keeper: the working lighthouses of England, by who keeps them.
3
+ *
4
+ * Source: Wikipedia, "List of lighthouses in England", the table of lighthouses
5
+ * (name, county, year built, operator). The page's NGA numbers refer to the US
6
+ * National Geospatial-Intelligence Agency's List of Lights.
7
+ * Page: https://en.wikipedia.org/wiki/List_of_lighthouses_in_England
8
+ * Fetched 2026-10-15.
9
+ *
10
+ * Transform: all 84 rows of the first table. The operator is the one named in
11
+ * the Operator column; where a cell names a change of hands the operator
12
+ * "from" the later date is the current one (Guile Point East: Trinity House;
13
+ * Happisburgh: Happisburgh Lighthouse Trust; Maryport New: Maryport Harbour
14
+ * Authority; Plymouth Breakwater: Ministry of Defence). Flamborough Head lists
15
+ * Trinity House and East Riding of Yorkshire Council together with no dates,
16
+ * so it is left out, leaving 83. Operators are grouped into keepers: Trinity
17
+ * House (43), Harbours (34: harbour boards and commissions, port companies
18
+ * and authorities, Gloucester Harbour Trustees, Watchet Marina, Associated
19
+ * British Ports), Councils (4: North Yorkshire, Somerset), Trust (1:
20
+ * Happisburgh Lighthouse Trust) and Defence (1: the Ministry of Defence).
21
+ * Lights are listed alphabetically.
22
+ * Script: reference/scripts/L12/keepers.py (and parse.py).
23
+ */
24
+ /** One owned thing and who owns it. */
25
+ export interface OwnershipDatum {
26
+ name: string;
27
+ owner: string;
28
+ }
29
+ /** 83 lights, listed alphabetically by name. */
30
+ export declare const typeColonnadeDemo: OwnershipDatum[];
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Point on a circle. `deg` is a clock angle: 0 = up (12 o'clock), increasing
3
+ * clockwise, so 90 = right.
4
+ */
5
+ export declare const clock: (cx: number, cy: number, r: number, deg: number) => [number, number];
6
+ /** Annular sector between two clock angles (degrees) and two radii. */
7
+ export declare const sectorPath: (cx: number, cy: number, r0: number, r1: number, a0: number, a1: number) => string;
8
+ /** Open arc between two clock angles. */
9
+ export declare const arcPath: (cx: number, cy: number, r: number, a0: number, a1: number) => string;
@@ -0,0 +1,11 @@
1
+ /** Smooth vertical S-curve between two points (tangents vertical at both ends). */
2
+ export declare const vCurve: (x1: number, y1: number, x2: number, y2: number, bend?: number) => string;
3
+ /** One threshold step for `byStep`. */
4
+ export interface Step<T> {
5
+ min: number;
6
+ out: T;
7
+ }
8
+ /** Pick a value by threshold without nested ternaries: the first step whose `min` is met wins. */
9
+ export declare const byStep: <T>(value: number, steps: readonly Step<T>[], fallback: T) => T;
10
+ /** Index of the largest value (the first, on a tie); 0 when empty. */
11
+ export declare const argMax: (values: readonly number[]) => number;
@@ -0,0 +1,33 @@
1
+ import type { GeoProjection } from "d3-geo";
2
+ import type { FeatureCollection } from "geojson";
3
+ import type { ChoroplethDatum, Region } from "./geo.js";
4
+ export interface ChoroplethProps {
5
+ ariaLabel: string;
6
+ data: ChoroplethDatum[];
7
+ /** Legend and tooltip text for regions without a value; omit to leave them out of the legend. */
8
+ emptyLabel?: string;
9
+ format: (v: number) => string;
10
+ /** Keys printed on the map. The first is the hero: set in solid ink when it is in the top step. */
11
+ labels: string[];
12
+ /** Upper cap on the map height. */
13
+ maxHeight?: number;
14
+ /** Map height as a share of width. */
15
+ aspect: number;
16
+ note?: string;
17
+ /** Fits a projection into [width, height] for the given outlines. */
18
+ project: (size: [number, number], outlines: FeatureCollection) => GeoProjection;
19
+ regions: Region[];
20
+ /** Short form for legend and in-map labels, e.g. 96k. */
21
+ short: (v: number) => string;
22
+ /** Four ascending breaks → five steps on the halftone ladder. */
23
+ thresholds: [number, number, number, number];
24
+ /** Unit after the value in the tooltip, e.g. "sign-ups". */
25
+ unit?: string;
26
+ }
27
+ /**
28
+ * Shared choropleth plot: real outlines, value in five quantized steps as
29
+ * an engraved dot screen (the hero alone in solid ink), no value as bare
30
+ * paper, 1px outlines, a hover tooltip and a key row whose keys isolate one
31
+ * step on hover.
32
+ */
33
+ export declare const Choropleth: (props: ChoroplethProps) => import("react").JSX.Element;
@@ -0,0 +1,48 @@
1
+ import type { geoPath } from "d3-geo";
2
+ import type { Feature } from "geojson";
3
+ /** One outline on a map: a stable key (postal code, country name), a display name and its geometry. */
4
+ export interface Region {
5
+ feature: Feature;
6
+ key: string;
7
+ name: string;
8
+ }
9
+ /** The parts of an imported TopoJSON file this module reads: geometry ids and names. */
10
+ interface TopologyJson<K extends string> {
11
+ objects: Record<K, {
12
+ geometries: {
13
+ id?: string;
14
+ properties: {
15
+ name: string;
16
+ };
17
+ }[];
18
+ }>;
19
+ type: string;
20
+ }
21
+ /** Turn an imported TopoJSON file into keyed regions, checking it is a topology at the boundary. */
22
+ export declare const regionsFrom: <K extends string>(raw: TopologyJson<K>, object: K, keyOf: (id: string, name: string) => string) => Region[];
23
+ /** Centroid of the largest polygon, so Alaska or Hawaii don't drag a label off the mainland. */
24
+ export declare const mainCentroid: (f: Feature, path: ReturnType<typeof geoPath>) => [number, number];
25
+ /** A region's value. `label` overrides the text printed on the map; dx/dy move that label off the region with a leader. */
26
+ export interface ChoroplethDatum {
27
+ dx?: number;
28
+ dy?: number;
29
+ key: string;
30
+ label?: string;
31
+ value: number;
32
+ }
33
+ /**
34
+ * Drops a region's remote specks: a cluster of its parts (pieces within 5°
35
+ * of each other) holding under 1% of its largest part's area and lying over
36
+ * 15° from every other part. On a world map Hawaii is such a cluster: a
37
+ * lone dot in the Pacific that reads as a stray mark, while the mainland
38
+ * already carries the value. With countries-110m this removes Hawaii only.
39
+ */
40
+ export declare const withoutRemoteIslets: (region: Region) => Region;
41
+ /**
42
+ * Drops a region's minor parts that straddle the antimeridian. A projection
43
+ * centred on Greenwich splits such a part and throws one half to the map's
44
+ * opposite edge (a sliver of Fiji alone at the far left), where it reads as
45
+ * a stray mark. The region's largest part is always kept.
46
+ */
47
+ export declare const withoutWrappedParts: (region: Region) => Region;
48
+ export {};