@pond-ts/react 0.43.0 → 0.44.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 +82 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -8,7 +8,8 @@ The `@pond-ts` packages — `pond-ts`, `@pond-ts/react`, `@pond-ts/charts`,
|
|
|
8
8
|
tag, so this file covers them all. Pre-1.0: minor bumps may include new features
|
|
9
9
|
and type-level changes; patch bumps are strictly additive.
|
|
10
10
|
|
|
11
|
-
[Unreleased]: https://github.com/pjm17971/pond-ts/compare/v0.
|
|
11
|
+
[Unreleased]: https://github.com/pjm17971/pond-ts/compare/v0.44.0...HEAD
|
|
12
|
+
[0.44.0]: https://github.com/pjm17971/pond-ts/compare/v0.43.0...v0.44.0
|
|
12
13
|
[0.43.0]: https://github.com/pjm17971/pond-ts/compare/v0.42.0...v0.43.0
|
|
13
14
|
[0.42.0]: https://github.com/pjm17971/pond-ts/compare/v0.41.0...v0.42.0
|
|
14
15
|
[0.41.0]: https://github.com/pjm17971/pond-ts/compare/v0.40.0...v0.41.0
|
|
@@ -41,6 +42,86 @@ and type-level changes; patch bumps are strictly additive.
|
|
|
41
42
|
|
|
42
43
|
## [Unreleased]
|
|
43
44
|
|
|
45
|
+
## [0.44.0] — 2026-07-11
|
|
46
|
+
|
|
47
|
+
The **value-axis charts** release: cross-sectional data (a volatility smile keyed
|
|
48
|
+
by strike) becomes a first-class charting surface. `ValueSeries.fromColumns` is
|
|
49
|
+
the direct columnar door; `<ScatterChart>` and `<BoxPlot>` join `<LineChart>` on
|
|
50
|
+
the value axis; `<BoxPlot>` gains range-only (bid→ask) marks, `offset` pairing,
|
|
51
|
+
and `capWidth`; and the region cursor works on value axes and snaps to histogram
|
|
52
|
+
bins.
|
|
53
|
+
|
|
54
|
+
### Added
|
|
55
|
+
|
|
56
|
+
- **`<BoxPlot>` finished for the value axis + range-only marks** (`@pond-ts/charts`).
|
|
57
|
+
Four coordinated changes, driven by the volatility smile's per-strike bid/ask IV
|
|
58
|
+
segments (`docs/notes/vol-smile-followups-2026-07.md` §1):
|
|
59
|
+
- **Accepts a `ValueSeries`** (`series.byValue('strike')` /
|
|
60
|
+
`ValueSeries.fromColumns`) — boxes on a value axis, the same instanceof branch
|
|
61
|
+
as `<LineChart>` / `<ScatterChart>`. The box **width** now comes from neighbour
|
|
62
|
+
spacing for a **point** key (a `ValueSeries`, or a point-keyed `TimeSeries`) —
|
|
63
|
+
like bars/candles — instead of collapsing to the 1px floor; an interval-keyed
|
|
64
|
+
`TimeSeries` still uses its `[begin, end)`.
|
|
65
|
+
- **Optional `q1`/`median`/`q3`** — omit `q1`+`q3` for a **range-only** box: a
|
|
66
|
+
whisker-only `lower→upper` segment, no body (a bid→ask IV mark honestly named,
|
|
67
|
+
not a candlestick abuse). Omitting exactly one of `q1`/`q3` throws.
|
|
68
|
+
- **`offset` prop** (`<BoxPlot>` and `<ScatterChart>`) — a **pixel** shift for
|
|
69
|
+
pairing same-key marks (call/put at one strike) side by side, zoom-stable. On
|
|
70
|
+
the scatter it moves the draw **and** the click hit-test together; on the box
|
|
71
|
+
the readout hit-tests in un-shifted data space (keep the offset small).
|
|
72
|
+
- **`capWidth` prop** (`<BoxPlot>`) — the whisker end-cap width in **pixels**
|
|
73
|
+
(else half the box width). A small fixed cap keeps two `offset`-paired marks'
|
|
74
|
+
T-bars from overlapping when the value-axis slot is wide; clamped to the box
|
|
75
|
+
width, `'whisker'` shape only.
|
|
76
|
+
- **Readout labels** carry the series' `as` identity (`iv upper`, `iv median`)
|
|
77
|
+
when set, instead of bare column names — the `as ?? column` convention
|
|
78
|
+
Line/Scatter already use.
|
|
79
|
+
- **`<ScatterChart>` accepts a `ValueSeries`** (`@pond-ts/charts`) — scatter
|
|
80
|
+
marks on the value axis, the same instanceof-branched adapter as
|
|
81
|
+
`<LineChart>` (the container infers the x kind from the data). The
|
|
82
|
+
data-driven `radius` / `color` encodings work unchanged on a value axis;
|
|
83
|
+
the per-point `label` reads through a new columnar branch (a `ValueSeries`
|
|
84
|
+
has no per-row events) — IV marks keyed by strike with open-interest
|
|
85
|
+
radius is the driving composition (vol smile). New value-axis Storybook
|
|
86
|
+
fan-out (`ValueAxis` / `ValueAxisEncoded` / `ValueAxisSmile` /
|
|
87
|
+
`ValueAxisFlag`) + Linux visual baselines.
|
|
88
|
+
|
|
89
|
+
- **`ValueSeries.fromColumns({ name, schema, columns, sort? })`** (`pond-ts`) —
|
|
90
|
+
the direct columnar door into value-land, for data that is _natively_
|
|
91
|
+
value-keyed (cross-sectional): an options chain keyed by strike, a spectrum
|
|
92
|
+
keyed by frequency. Exact `TimeSeries.fromColumns` contract with the axis in
|
|
93
|
+
place of time — same polymorphic `number[]` / `Float64Array` inputs, same
|
|
94
|
+
zero-copy adoption, same stable opt-in `sort`, same gap rule — the two doors
|
|
95
|
+
share one ingest engine. Previously cross-sectional callers had to launder
|
|
96
|
+
the axis through a fake `time` column (`TimeSeries.fromColumns` +
|
|
97
|
+
`byValue`); that detour is no longer needed.
|
|
98
|
+
|
|
99
|
+
- **The region cursor snaps to a histogram's bins** (`@pond-ts/charts`). On a
|
|
100
|
+
`<BarChart>` histogram, `cursor="region"` now snaps **bar by bar** with no
|
|
101
|
+
`cursorSequence`: hovering highlights the bar under the pointer, a drag extends
|
|
102
|
+
across whole bars, and `onRegionSelect` reports the selected bin range
|
|
103
|
+
`[lo, hi]` at the bar edges. The bar layer publishes its `[begin, end)` spans
|
|
104
|
+
(a new internal `binIntervals` channel) as the region cursor's snap buckets —
|
|
105
|
+
the same machinery a `cursorSequence` drives on a time axis, so it also covers a
|
|
106
|
+
time-axis histogram. Only a **vertical** bar layer on a continuous (time /
|
|
107
|
+
value) x axis publishes bins; a horizontal chart (value on x) and a categorical
|
|
108
|
+
axis stay freeform / excluded. An explicit `cursorSequence` still takes
|
|
109
|
+
precedence. New `HistogramBins` region-cursor story.
|
|
110
|
+
|
|
111
|
+
### Changed
|
|
112
|
+
|
|
113
|
+
- **BREAKING (`@pond-ts/charts`): the region cursor works on a value x-axis, and
|
|
114
|
+
`onRegionSelect` reports a neutral `[lo, hi]` pair.** The drag-select callback
|
|
115
|
+
fired a `TimeRange`; it now fires `readonly [number, number]` in **axis units** —
|
|
116
|
+
epoch ms on a time axis, the axis value (strike, distance, …) on a value axis —
|
|
117
|
+
mirroring the container's polymorphic `range` input (which never takes the axis
|
|
118
|
+
_kind_ from its value). A time-axis consumer that wants a `TimeRange` builds one
|
|
119
|
+
from the pair (`new TimeRange({ start: lo, end: hi })`). The cursor itself is
|
|
120
|
+
ungated from time-only to any **continuous** x-axis (time **or** value; a
|
|
121
|
+
**category** axis stays excluded — an ordinal-slot select is a different gesture).
|
|
122
|
+
Bucket **snapping** stays time-only (a `cursorSequence` bucket is a time
|
|
123
|
+
interval), so a value axis is always **freeform** (hover line + raw-span drag).
|
|
124
|
+
|
|
44
125
|
## [0.43.0] — 2026-07-11
|
|
45
126
|
|
|
46
127
|
The **categorical x-axis** release: a first-class ordinal band scale (ticker /
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pond-ts/react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.44.0",
|
|
4
4
|
"description": "React hooks for pond-ts live time series",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"test:runtime": "vitest run"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
|
-
"pond-ts": "^0.
|
|
36
|
+
"pond-ts": "^0.44.0",
|
|
37
37
|
"react": "^18.0.0 || ^19.0.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|