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