velo-plot 1.12.0 → 1.19.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 (153) hide show
  1. package/README.md +14 -0
  2. package/dist/{index.core-xiNcuFfJ.js → ChartCore-DQ691eXH.js} +1807 -1287
  3. package/dist/ChartCore-DQ691eXH.js.map +1 -0
  4. package/dist/assets/downsample.worker-C70QJ04y.js +2 -0
  5. package/dist/assets/downsample.worker-C70QJ04y.js.map +1 -0
  6. package/dist/assets/indicator.worker-bv0zC4EX.js +2 -0
  7. package/dist/assets/indicator.worker-bv0zC4EX.js.map +1 -0
  8. package/dist/core/OverlayRenderer.d.ts +2 -0
  9. package/dist/core/chart/ChartAlerts.d.ts +42 -0
  10. package/dist/core/chart/ChartCore.d.ts +20 -1
  11. package/dist/core/chart/ChartRenderLoop.d.ts +4 -2
  12. package/dist/core/chart/ChartRenderer.d.ts +3 -2
  13. package/dist/core/chart/candlestickMarkers.d.ts +23 -0
  14. package/dist/core/chart/exporter/SVGExporter.d.ts +7 -2
  15. package/dist/core/chart/heikinAshi.d.ts +10 -0
  16. package/dist/core/chart/series/types.d.ts +2 -2
  17. package/dist/core/chart/types.d.ts +9 -0
  18. package/dist/core/indicator/addIndicator.d.ts +36 -0
  19. package/dist/core/indicator/index.d.ts +2 -0
  20. package/dist/core/indicator/indicatorPresets.d.ts +37 -0
  21. package/dist/core/render/pixelSnap.d.ts +8 -0
  22. package/dist/core/series/Series.d.ts +3 -0
  23. package/dist/core/stacked/index.d.ts +3 -1
  24. package/dist/core/stacked/paneResize.d.ts +15 -18
  25. package/dist/core/stacked/stackExport.d.ts +18 -0
  26. package/dist/core/stacked/types.d.ts +42 -5
  27. package/dist/core/time/TimeScale.d.ts +31 -0
  28. package/dist/createStackedChart-BPooTQ9z.js +1164 -0
  29. package/dist/createStackedChart-BPooTQ9z.js.map +1 -0
  30. package/dist/gpu/adapter/gpuRenderer.d.ts +21 -0
  31. package/dist/gpu/backends/webgpu/WebGPUBackend.d.ts +2 -1
  32. package/dist/gpuRenderer-BpaMYz-k.js +1848 -0
  33. package/dist/gpuRenderer-BpaMYz-k.js.map +1 -0
  34. package/dist/index-CUGS98p4.js +277 -0
  35. package/dist/index-CUGS98p4.js.map +1 -0
  36. package/dist/index-D7dTq6VB.js +503 -0
  37. package/dist/index-D7dTq6VB.js.map +1 -0
  38. package/dist/{index-Ce2JgkH_.js → index-DoYxf1cV.js} +86 -43
  39. package/dist/{index-Ce2JgkH_.js.map → index-DoYxf1cV.js.map} +1 -1
  40. package/dist/index.core-BtGFYMOu.js +167 -0
  41. package/dist/index.core-BtGFYMOu.js.map +1 -0
  42. package/dist/index.d.ts +12 -4
  43. package/dist/indicators--eJGmVox.js +302 -0
  44. package/dist/indicators--eJGmVox.js.map +1 -0
  45. package/dist/math-Ddm2EZjj.js +85 -0
  46. package/dist/math-Ddm2EZjj.js.map +1 -0
  47. package/dist/plugins/analysis.js +543 -818
  48. package/dist/plugins/analysis.js.map +1 -1
  49. package/dist/plugins/anomaly-detection.d.ts +1 -0
  50. package/dist/plugins/anomaly-detection.js +221 -0
  51. package/dist/plugins/anomaly-detection.js.map +1 -0
  52. package/dist/plugins/broken-axis.d.ts +3 -0
  53. package/dist/plugins/broken-axis.js +262 -0
  54. package/dist/plugins/broken-axis.js.map +1 -0
  55. package/dist/plugins/caching.d.ts +3 -0
  56. package/dist/plugins/caching.js +187 -0
  57. package/dist/plugins/caching.js.map +1 -0
  58. package/dist/plugins/data-transform.d.ts +3 -0
  59. package/dist/plugins/data-transform.js +146 -0
  60. package/dist/plugins/data-transform.js.map +1 -0
  61. package/dist/plugins/debug.js +12 -11
  62. package/dist/plugins/debug.js.map +1 -1
  63. package/dist/plugins/drawing-tools/index.d.ts +16 -0
  64. package/dist/plugins/forecasting.d.ts +1 -0
  65. package/dist/plugins/forecasting.js +236 -0
  66. package/dist/plugins/forecasting.js.map +1 -0
  67. package/dist/plugins/gpu.js +202 -1895
  68. package/dist/plugins/gpu.js.map +1 -1
  69. package/dist/plugins/index.d.ts +2 -0
  70. package/dist/plugins/keyboard/index.d.ts +1 -7
  71. package/dist/plugins/keyboard.js +1 -1
  72. package/dist/plugins/latex.d.ts +1 -0
  73. package/dist/plugins/latex.js +454 -0
  74. package/dist/plugins/latex.js.map +1 -0
  75. package/dist/plugins/lazy-load/types.d.ts +7 -0
  76. package/dist/plugins/lazy-load.d.ts +3 -0
  77. package/dist/plugins/lazy-load.js +212 -0
  78. package/dist/plugins/lazy-load.js.map +1 -0
  79. package/dist/plugins/ml-integration.d.ts +3 -0
  80. package/dist/plugins/ml-integration.js +355 -0
  81. package/dist/plugins/ml-integration.js.map +1 -0
  82. package/dist/plugins/offscreen.d.ts +3 -0
  83. package/dist/plugins/offscreen.js +169 -0
  84. package/dist/plugins/offscreen.js.map +1 -0
  85. package/dist/plugins/pattern-recognition.d.ts +3 -0
  86. package/dist/plugins/pattern-recognition.js +690 -0
  87. package/dist/plugins/pattern-recognition.js.map +1 -0
  88. package/dist/plugins/radar.d.ts +3 -0
  89. package/dist/plugins/radar.js +103 -0
  90. package/dist/plugins/radar.js.map +1 -0
  91. package/dist/plugins/regression.d.ts +3 -0
  92. package/dist/plugins/regression.js +634 -0
  93. package/dist/plugins/regression.js.map +1 -0
  94. package/dist/plugins/replay/index.d.ts +19 -0
  95. package/dist/plugins/roi.d.ts +1 -0
  96. package/dist/plugins/roi.js +223 -0
  97. package/dist/plugins/roi.js.map +1 -0
  98. package/dist/plugins/snapshot/types.d.ts +1 -1
  99. package/dist/plugins/snapshot.d.ts +3 -0
  100. package/dist/plugins/snapshot.js +90 -0
  101. package/dist/plugins/snapshot.js.map +1 -0
  102. package/dist/plugins/sync/index.d.ts +2 -1
  103. package/dist/plugins/sync.js +13 -269
  104. package/dist/plugins/sync.js.map +1 -1
  105. package/dist/plugins/video-recorder.d.ts +3 -0
  106. package/dist/plugins/video-recorder.js +104 -0
  107. package/dist/plugins/video-recorder.js.map +1 -0
  108. package/dist/plugins/virtualization/types.d.ts +12 -0
  109. package/dist/plugins/virtualization.d.ts +3 -0
  110. package/dist/plugins/virtualization.js +6 -0
  111. package/dist/plugins/virtualization.js.map +1 -0
  112. package/dist/pool-15HMCNv8.js +88 -0
  113. package/dist/pool-15HMCNv8.js.map +1 -0
  114. package/dist/react.d.ts +1 -0
  115. package/dist/react.js +31 -0
  116. package/dist/react.js.map +1 -0
  117. package/dist/renderer/CandlestickRenderer.d.ts +1 -1
  118. package/dist/renderer/ChartSeriesRenderer.d.ts +6 -0
  119. package/dist/renderer/GpuChartRenderer.d.ts +23 -0
  120. package/dist/renderer/index.d.ts +3 -0
  121. package/dist/renderer/spike/WebGLGridSpike.d.ts +40 -0
  122. package/dist/testing/baselines/v1.15.0.json.d.ts +51 -0
  123. package/dist/testing/gridSpikeBenchmark.d.ts +49 -0
  124. package/dist/testing/index.d.ts +5 -0
  125. package/dist/testing/rendererBenchmark.d.ts +13 -0
  126. package/dist/testing/stage1BrowserBench.d.ts +42 -0
  127. package/dist/types.d.ts +21 -1
  128. package/dist/utils-BK5UUXxj.js +172 -0
  129. package/dist/utils-BK5UUXxj.js.map +1 -0
  130. package/dist/velo-plot.full.js +1382 -5932
  131. package/dist/velo-plot.full.js.map +1 -1
  132. package/dist/velo-plot.js +26 -25
  133. package/dist/velo-plot.js.map +1 -1
  134. package/dist/workers/downsample.d.ts +38 -0
  135. package/dist/workers/downsampleAsync.d.ts +6 -0
  136. package/dist/workers/indicator.worker.d.ts +32 -0
  137. package/dist/workers/indicatorsAsync.d.ts +26 -0
  138. package/dist/workers/pool.d.ts +36 -0
  139. package/package.json +19 -2
  140. package/dist/core/OverlayRenderer.test.d.ts +0 -1
  141. package/dist/core/chart/ChartScaling.test.d.ts +0 -1
  142. package/dist/core/chart/NavigationUtils.test.d.ts +0 -1
  143. package/dist/core/format/axisFormat.test.d.ts +0 -1
  144. package/dist/core/indicator/buildIndicatorSeries.test.d.ts +0 -1
  145. package/dist/core/series/SeriesBounds.test.d.ts +0 -1
  146. package/dist/core/stacked/createStackedChart.test.d.ts +0 -1
  147. package/dist/core/stacked/paneAxis.test.d.ts +0 -1
  148. package/dist/core/stacked/paneResize.test.d.ts +0 -1
  149. package/dist/core/sync/index.test.d.ts +0 -1
  150. package/dist/index.core-xiNcuFfJ.js.map +0 -1
  151. package/dist/plugins/tools/tooltip/format.test.d.ts +0 -1
  152. package/dist/utils-Dbro9-qM.js +0 -254
  153. package/dist/utils-Dbro9-qM.js.map +0 -1
package/dist/velo-plot.js CHANGED
@@ -1,31 +1,32 @@
1
- import { A as s, n as r, D as n, t, o as i, L as g, i as l, N as E, T as c, S as o, c as T, a0 as m, N as u, $ as A, R as N, l as L, j as P, u as d, d as R, e as S, U as f, f as p, v as C, p as I, V as M } from "./index.core-xiNcuFfJ.js";
2
- import { E as h } from "./axisFormat-B7o_uIEA.js";
1
+ import { A as r, D as s, h as t, x as n, u as i, L as g, n as o, N as c, a3 as l, S as E, c as m, N as u, a2 as T, o as A, y as N, f, j as L, z as P, t as d } from "./ChartCore-DQ691eXH.js";
2
+ import { E as S } from "./axisFormat-B7o_uIEA.js";
3
+ import { h as x, f as C, c as I, d as M, g as R, r as _ } from "./index.core-BtGFYMOu.js";
3
4
  export {
4
- s as AnimationEngine,
5
- r as DARK_THEME,
6
- n as DEFAULT_ANIMATION_CONFIG,
7
- t as DEFAULT_THEME,
8
- h as EventEmitter,
5
+ r as AnimationEngine,
6
+ s as DARK_THEME,
7
+ t as DEFAULT_ANIMATION_CONFIG,
8
+ n as DEFAULT_THEME,
9
+ S as EventEmitter,
9
10
  i as LIGHT_THEME,
10
11
  g as LinearScale,
11
- l as LogScale,
12
- E as NativeWebGLRenderer,
13
- c as PluginManagerImpl,
14
- o as Series,
15
- T as createChart,
16
- m as createConfigurablePlugin,
12
+ o as LogScale,
13
+ c as NativeWebGLRenderer,
14
+ l as PluginManagerImpl,
15
+ E as Series,
16
+ m as createChart,
17
+ x as createConfigurablePlugin,
17
18
  u as createNativeRenderer,
18
- A as createPlugin,
19
- N as createPluginContext,
20
- L as createRenderer,
21
- P as createScale,
22
- d as createTheme,
23
- R as definePlugin,
24
- S as easings,
25
- f as getPluginRegistry,
26
- p as getSharedAnimationEngine,
27
- C as getThemeByName,
28
- I as parseColor,
29
- M as registerPlugin
19
+ C as createPlugin,
20
+ T as createPluginContext,
21
+ I as createRenderer,
22
+ A as createScale,
23
+ N as createTheme,
24
+ M as definePlugin,
25
+ f as easings,
26
+ R as getPluginRegistry,
27
+ L as getSharedAnimationEngine,
28
+ P as getThemeByName,
29
+ d as parseColor,
30
+ _ as registerPlugin
30
31
  };
31
32
  //# sourceMappingURL=velo-plot.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"velo-plot.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
1
+ {"version":3,"file":"velo-plot.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -32,3 +32,41 @@ export declare function minMaxDownsample(x: Float32Array | Float64Array, y: Floa
32
32
  * Calculate optimal target points based on canvas width
33
33
  */
34
34
  export declare function calculateTargetPoints(dataLength: number, canvasWidth: number, pointsPerPixel?: number): number;
35
+ export interface OhlcDownsampleResult {
36
+ x: Float32Array;
37
+ open: Float32Array;
38
+ high: Float32Array;
39
+ low: Float32Array;
40
+ close: Float32Array;
41
+ indices: Uint32Array;
42
+ }
43
+ /**
44
+ * Aggregate OHLC bars into fewer buckets while preserving extremes.
45
+ * Each bucket: open=first open, close=last close, high=max high, low=min low, x=last x.
46
+ */
47
+ export declare function ohlcMinMaxDownsample(x: Float32Array | Float64Array, open: Float32Array | Float64Array, high: Float32Array | Float64Array, low: Float32Array | Float64Array, close: Float32Array | Float64Array, targetBars: number): OhlcDownsampleResult;
48
+ /** Binary search lower bound: first index where x[i] >= value */
49
+ export declare function lowerBoundX(x: Float32Array | Float64Array, value: number): number;
50
+ /** Binary search upper bound: first index where x[i] > value */
51
+ export declare function upperBoundX(x: Float32Array | Float64Array, value: number): number;
52
+ export interface ViewportSlice {
53
+ x: Float32Array;
54
+ y?: Float32Array;
55
+ open?: Float32Array;
56
+ high?: Float32Array;
57
+ low?: Float32Array;
58
+ close?: Float32Array;
59
+ start: number;
60
+ end: number;
61
+ }
62
+ /**
63
+ * Slice sorted x-series to visible range plus buffer (fraction of visible width).
64
+ */
65
+ export declare function sliceSeriesToViewport(source: {
66
+ x: Float32Array | Float64Array;
67
+ y?: Float32Array | Float64Array;
68
+ open?: Float32Array | Float64Array;
69
+ high?: Float32Array | Float64Array;
70
+ low?: Float32Array | Float64Array;
71
+ close?: Float32Array | Float64Array;
72
+ }, xMin: number, xMax: number, bufferRatio?: number): ViewportSlice;
@@ -0,0 +1,6 @@
1
+ import { OhlcDownsampleResult, DownsampleResult } from './downsample';
2
+
3
+ export declare function downsampleAsync(x: Float32Array, y: Float32Array, targetPoints: number, algorithm?: "lttb" | "minmax"): Promise<DownsampleResult>;
4
+ export declare function ohlcDownsampleAsync(x: Float32Array, open: Float32Array, high: Float32Array, low: Float32Array, close: Float32Array, targetBars: number): Promise<OhlcDownsampleResult>;
5
+ export declare function destroyDownsamplePool(): void;
6
+ export declare function getDownsamplePoolSize(): number;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Indicator calculations in a Web Worker.
3
+ * @module workers/indicator.worker
4
+ */
5
+ interface IndicatorTask {
6
+ id: string;
7
+ type: "indicator";
8
+ indicator: "rsi" | "macd" | "bollingerBands" | "sma" | "ema";
9
+ data: Float32Array | Float64Array;
10
+ period?: number;
11
+ fastPeriod?: number;
12
+ slowPeriod?: number;
13
+ signalPeriod?: number;
14
+ stdDev?: number;
15
+ }
16
+ interface IndicatorResultMessage {
17
+ id: string;
18
+ type: "indicator-result";
19
+ indicator: string;
20
+ values: Float32Array;
21
+ signal?: Float32Array;
22
+ upper?: Float32Array;
23
+ lower?: Float32Array;
24
+ histogram?: Float32Array;
25
+ duration: number;
26
+ }
27
+ interface ErrorMessage {
28
+ id: string;
29
+ type: "error";
30
+ error: string;
31
+ }
32
+ export type { IndicatorTask, IndicatorResultMessage, ErrorMessage };
@@ -0,0 +1,26 @@
1
+ import { IndicatorResult } from '../plugins/analysis/indicators';
2
+
3
+ /** Async RSI — non-blocking for large datasets */
4
+ export declare function rsiAsync(data: Float32Array | Float64Array | number[], period?: number): Promise<IndicatorResult & {
5
+ duration: number;
6
+ }>;
7
+ /** Async SMA */
8
+ export declare function smaAsync(data: Float32Array | Float64Array | number[], period?: number): Promise<IndicatorResult & {
9
+ duration: number;
10
+ }>;
11
+ /** Async EMA */
12
+ export declare function emaAsync(data: Float32Array | Float64Array | number[], period?: number): Promise<IndicatorResult & {
13
+ duration: number;
14
+ }>;
15
+ /** Async MACD */
16
+ export declare function macdAsync(data: Float32Array | Float64Array | number[], fastPeriod?: number, slowPeriod?: number, signalPeriod?: number): Promise<IndicatorResult & {
17
+ duration: number;
18
+ }>;
19
+ /** Async Bollinger Bands */
20
+ export declare function bollingerBandsAsync(data: Float32Array | Float64Array | number[], period?: number, stdDev?: number): Promise<IndicatorResult & {
21
+ duration: number;
22
+ }>;
23
+ /** Destroy the shared indicator worker pool (for tests) */
24
+ export declare function destroyIndicatorPool(): void;
25
+ /** Exposed for tests */
26
+ export declare function getIndicatorPoolSize(): number;
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Generic worker pool with round-robin dispatch and sync fallback.
3
+ * @module workers/pool
4
+ */
5
+ export interface WorkerPoolOptions {
6
+ /** Number of workers (default: 2) */
7
+ poolSize?: number;
8
+ /** Run tasks on main thread when Worker is unavailable */
9
+ syncFallback?: boolean;
10
+ }
11
+ export declare class WorkerPool<TMessage extends {
12
+ id: string;
13
+ }, TResult = unknown> {
14
+ private workers;
15
+ private pending;
16
+ private nextWorker;
17
+ private readonly poolSize;
18
+ private readonly syncFallback;
19
+ private readonly workerFactory;
20
+ private readonly syncHandler?;
21
+ private destroyed;
22
+ constructor(workerFactory: () => Worker, options?: WorkerPoolOptions & {
23
+ syncHandler?: (task: TMessage) => TResult | Promise<TResult>;
24
+ });
25
+ private removeWorker;
26
+ private workerErrorMessage;
27
+ private rejectPendingWithSyncFallback;
28
+ private spawnWorker;
29
+ /** Dispatch a task to the pool. Falls back to syncHandler when no workers exist. */
30
+ run(task: TMessage): Promise<TResult>;
31
+ size(): number;
32
+ pendingCount(): number;
33
+ destroy(): void;
34
+ }
35
+ /** Generate a unique task id */
36
+ export declare function nextTaskId(prefix?: string): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "velo-plot",
3
- "version": "1.12.0",
3
+ "version": "1.19.0",
4
4
  "author": "jigonzalez930209",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -34,6 +34,10 @@
34
34
  "types": "./dist/index.d.ts",
35
35
  "import": "./dist/velo-plot.full.js"
36
36
  },
37
+ "./react": {
38
+ "types": "./dist/react/index.d.ts",
39
+ "import": "./dist/react.js"
40
+ },
37
41
  "./plugins/3d": {
38
42
  "types": "./dist/plugins/3d.d.ts",
39
43
  "import": "./dist/plugins/3d.js"
@@ -169,9 +173,13 @@
169
173
  "react-dom": ">=16.8.0"
170
174
  },
171
175
  "devDependencies": {
176
+ "@playwright/test": "^1.52.0",
172
177
  "@types/node": "^25.0.3",
173
178
  "@types/react": "^18.2.0",
174
179
  "@types/react-dom": "^18.2.0",
180
+ "@vitest/coverage-v8": "^3.2.6",
181
+ "happy-dom": "^20.10.6",
182
+ "playwright": "^1.52.0",
175
183
  "typescript": "^5.2.2",
176
184
  "vite": "^5.0.0",
177
185
  "vite-plugin-dts": "^3.6.0",
@@ -180,11 +188,20 @@
180
188
  },
181
189
  "scripts": {
182
190
  "dev": "vite",
183
- "build": "tsc && vite build -c vite.config.lib.ts",
191
+ "build": "tsc -p tsconfig.build.json && vite build -c vite.config.lib.ts",
184
192
  "preview": "vite preview",
185
193
  "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
186
194
  "test": "vitest run",
195
+ "test:coverage": "vitest run --coverage",
187
196
  "test:watch": "vitest",
197
+ "test:dom": "vitest run .dom.test.ts",
198
+ "test:e2e": "playwright test",
199
+ "test:e2e:ui": "playwright test --ui",
200
+ "test:e2e:headed": "playwright test --headed",
201
+ "test:browser-bench": "node scripts/browser-benchmark.mjs",
202
+ "test:browser-bench:headed": "HEADED=1 node scripts/browser-benchmark.mjs",
203
+ "test:all": "pnpm test && pnpm test:dom && pnpm test:e2e && pnpm test:browser-bench",
204
+ "test:bench-regression": "node scripts/compare-benchmark-regression.mjs",
188
205
  "docs:dev": "vitepress dev docs",
189
206
  "docs:build": "vitepress build docs",
190
207
  "docs:preview": "vitepress preview docs"
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};