@pond-ts/charts 0.34.0 → 0.35.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 CHANGED
@@ -8,7 +8,9 @@ The `@pond-ts` packages — `pond-ts`, `@pond-ts/react`, `@pond-ts/charts`, and
8
8
  them all. Pre-1.0: minor bumps may include new features and type-level changes;
9
9
  patch bumps are strictly additive.
10
10
 
11
- [Unreleased]: https://github.com/pjm17971/pond-ts/compare/v0.34.0...HEAD
11
+ [Unreleased]: https://github.com/pjm17971/pond-ts/compare/v0.35.0...HEAD
12
+ [0.35.0]: https://github.com/pjm17971/pond-ts/compare/v0.34.1...v0.35.0
13
+ [0.34.1]: https://github.com/pjm17971/pond-ts/compare/v0.34.0...v0.34.1
12
14
  [0.34.0]: https://github.com/pjm17971/pond-ts/compare/v0.33.0...v0.34.0
13
15
  [0.33.0]: https://github.com/pjm17971/pond-ts/compare/v0.32.0...v0.33.0
14
16
  [0.32.0]: https://github.com/pjm17971/pond-ts/compare/v0.31.2...v0.32.0
@@ -29,6 +31,46 @@ patch bumps are strictly additive.
29
31
  [0.19.0]: https://github.com/pjm17971/pond-ts/compare/v0.18.0...v0.19.0
30
32
  [0.18.0]: https://github.com/pjm17971/pond-ts/compare/v0.17.1...v0.18.0
31
33
 
34
+ ## [0.35.0] — 2026-07-02
35
+
36
+ A `@pond-ts/charts` release: per-series line dash patterns. `pond-ts`,
37
+ `@pond-ts/react`, and `@pond-ts/fit` carry no code changes — republished in
38
+ lock-step (their `pond-ts` / `@pond-ts/react` peer ranges widen to `^0.35.0`).
39
+
40
+ ### Added
41
+
42
+ - **Charts — per-series line dash (`LineStyle.dash`).** A theme's line style
43
+ accepts an optional `dash?: readonly number[]` — a px on/off pattern
44
+ (`[6, 4]` dashed, `[2, 3]` ≈ dotted; omit or `[]` = solid) applied to the
45
+ series stroke. Lets a theme set a **modeled / forecast** line (e.g. GARCH
46
+ vol) apart from an observed one at a glance. Distinct from a `GapMode`'s
47
+ inferred gap-bridge dashing (which marks *missing data*, not the whole
48
+ line). Additive: existing themes are unaffected; a solid line never touches
49
+ `setLineDash`. New `Charts/LineChart → LineStyles` story. (#313)
50
+
51
+ ## [0.34.1] — 2026-07-01
52
+
53
+ A `pond-ts` core patch: fixes a performance regression introduced in 0.34.0.
54
+ `@pond-ts/react`, `@pond-ts/charts`, and `@pond-ts/fit` carry no code
55
+ changes — republished in lock-step; their `^0.34.0` peer ranges already
56
+ admit this patch.
57
+
58
+ ### Fixed
59
+
60
+ - **`TimeSeries.fromColumns` — `number[]` column conversion was ~7-18x
61
+ slower than intended.** The `null`/`NaN`-gap parity fix in 0.34.0
62
+ converted `number[]` columns via `Float64Array.from(raw, mapFn)`.
63
+ Supplying a map function forces V8's generic iterable-protocol path even
64
+ for a plain array, dramatically slower than a manual loop into a
65
+ preallocated buffer at 100k-element scale. Found while pointing the
66
+ `pond-columnar-ingest` wire-format spike at the real published package
67
+ instead of a local build. Fixed with a manual `for` loop in both the
68
+ key-column and value-column conversion paths — no behavior change, same
69
+ gap semantics, all 12 `fromColumns` tests unchanged and green. Added
70
+ `scripts/perf-from-columns.mjs` as the durable regression benchmark.
71
+ Measured: 100k × 7 cols, `number[]` columns, dense — 21.5ms → 2.9ms.
72
+ (#311)
73
+
32
74
  ## [0.34.0] — 2026-07-01
33
75
 
34
76
  A `pond-ts` core release: the columnar/typed-array ingress driven by the
package/dist/line.js CHANGED
@@ -69,7 +69,19 @@ export function drawLine(ctx, cs, xScale, yScale, style, curve = curveLinear, ga
69
69
  gen(ys);
70
70
  ctx.strokeStyle = style.color;
71
71
  ctx.lineWidth = style.width;
72
- ctx.stroke();
72
+ // Per-series dash (a modeled/forecast line reads dashed). Applied only when
73
+ // set — a solid line never touches `setLineDash` — then reset to solid right
74
+ // after the stroke so it can't leak into the gap-bridge overlay below (which
75
+ // sets its own dash) or the next layer drawn on this context.
76
+ const dash = style.dash;
77
+ if (dash && dash.length > 0) {
78
+ ctx.setLineDash(dash.slice());
79
+ ctx.stroke();
80
+ ctx.setLineDash([]);
81
+ }
82
+ else {
83
+ ctx.stroke();
84
+ }
73
85
  // Overlay bridges for the inferred-gap modes. `dashed` / `step` are faint
74
86
  // dashed connectors (gapConnectorOpacity); only `fade` drops to the axis floor.
75
87
  if (gaps === 'dashed' || gaps === 'step' || gaps === 'fade') {
package/dist/theme.d.ts CHANGED
@@ -138,6 +138,15 @@ export interface ChartTheme {
138
138
  export interface LineStyle {
139
139
  readonly color: string;
140
140
  readonly width: number;
141
+ /**
142
+ * Optional dash pattern — px on/off lengths (`[6, 4]` = 6 on, 4 off; `[2, 3]`
143
+ * ≈ dotted). Omit or `[]` for a solid stroke. This is the *series'* own style
144
+ * — distinct from a {@link GapMode}'s inferred faint gap-bridge dashing (that
145
+ * marks missing data; this marks the whole line). Use it to set a **modeled**
146
+ * series (a forecast / smoothed estimate, e.g. GARCH vol) apart from an
147
+ * observed one at a glance.
148
+ */
149
+ readonly dash?: readonly number[];
141
150
  }
142
151
  /** A resolved band style: fill colour + opacity (0–1) for the variance envelope. */
143
152
  export interface BandStyle {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pond-ts/charts",
3
- "version": "0.34.0",
3
+ "version": "0.35.0",
4
4
  "private": false,
5
5
  "description": "Canvas-rendered, streaming-first time-series charts for pond-ts",
6
6
  "license": "MIT",
@@ -38,8 +38,8 @@
38
38
  "perf": "PERF_BENCH=1 playwright test perf.spec.ts --workers=1"
39
39
  },
40
40
  "peerDependencies": {
41
- "@pond-ts/react": "^0.34.0",
42
- "pond-ts": "^0.34.0",
41
+ "@pond-ts/react": "^0.35.0",
42
+ "pond-ts": "^0.35.0",
43
43
  "react": "^18.0.0 || ^19.0.0"
44
44
  },
45
45
  "devDependencies": {