velo-plot 1.12.0 → 1.15.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 (101) hide show
  1. package/README.md +14 -0
  2. package/dist/{index.core-xiNcuFfJ.js → ChartCore-BimVvUEg.js} +922 -929
  3. package/dist/ChartCore-BimVvUEg.js.map +1 -0
  4. package/dist/core/chart/ChartCore.d.ts +1 -0
  5. package/dist/core/chart/exporter/SVGExporter.d.ts +7 -2
  6. package/dist/core/chart/types.d.ts +2 -0
  7. package/dist/core/render/pixelSnap.d.ts +8 -0
  8. package/dist/core/stacked/index.d.ts +3 -1
  9. package/dist/core/stacked/paneResize.d.ts +15 -18
  10. package/dist/core/stacked/stackExport.d.ts +18 -0
  11. package/dist/core/stacked/types.d.ts +34 -5
  12. package/dist/createStackedChart-CjsKcOvX.js +1088 -0
  13. package/dist/createStackedChart-CjsKcOvX.js.map +1 -0
  14. package/dist/index-CUGS98p4.js +277 -0
  15. package/dist/index-CUGS98p4.js.map +1 -0
  16. package/dist/index-ChgIdk3N.js +229 -0
  17. package/dist/index-ChgIdk3N.js.map +1 -0
  18. package/dist/index.core-C_-CFftD.js +167 -0
  19. package/dist/index.core-C_-CFftD.js.map +1 -0
  20. package/dist/math-Ddm2EZjj.js +85 -0
  21. package/dist/math-Ddm2EZjj.js.map +1 -0
  22. package/dist/plugins/analysis.js +132 -130
  23. package/dist/plugins/analysis.js.map +1 -1
  24. package/dist/plugins/anomaly-detection.d.ts +1 -0
  25. package/dist/plugins/anomaly-detection.js +221 -0
  26. package/dist/plugins/anomaly-detection.js.map +1 -0
  27. package/dist/plugins/broken-axis.d.ts +3 -0
  28. package/dist/plugins/broken-axis.js +262 -0
  29. package/dist/plugins/broken-axis.js.map +1 -0
  30. package/dist/plugins/caching.d.ts +3 -0
  31. package/dist/plugins/caching.js +182 -0
  32. package/dist/plugins/caching.js.map +1 -0
  33. package/dist/plugins/data-transform.d.ts +3 -0
  34. package/dist/plugins/data-transform.js +146 -0
  35. package/dist/plugins/data-transform.js.map +1 -0
  36. package/dist/plugins/debug.js +12 -11
  37. package/dist/plugins/debug.js.map +1 -1
  38. package/dist/plugins/forecasting.d.ts +1 -0
  39. package/dist/plugins/forecasting.js +236 -0
  40. package/dist/plugins/forecasting.js.map +1 -0
  41. package/dist/plugins/latex.d.ts +1 -0
  42. package/dist/plugins/latex.js +454 -0
  43. package/dist/plugins/latex.js.map +1 -0
  44. package/dist/plugins/lazy-load.d.ts +3 -0
  45. package/dist/plugins/lazy-load.js +189 -0
  46. package/dist/plugins/lazy-load.js.map +1 -0
  47. package/dist/plugins/ml-integration.d.ts +3 -0
  48. package/dist/plugins/ml-integration.js +355 -0
  49. package/dist/plugins/ml-integration.js.map +1 -0
  50. package/dist/plugins/offscreen.d.ts +3 -0
  51. package/dist/plugins/offscreen.js +169 -0
  52. package/dist/plugins/offscreen.js.map +1 -0
  53. package/dist/plugins/pattern-recognition.d.ts +3 -0
  54. package/dist/plugins/pattern-recognition.js +690 -0
  55. package/dist/plugins/pattern-recognition.js.map +1 -0
  56. package/dist/plugins/radar.d.ts +3 -0
  57. package/dist/plugins/radar.js +103 -0
  58. package/dist/plugins/radar.js.map +1 -0
  59. package/dist/plugins/regression.d.ts +3 -0
  60. package/dist/plugins/regression.js +634 -0
  61. package/dist/plugins/regression.js.map +1 -0
  62. package/dist/plugins/roi.d.ts +1 -0
  63. package/dist/plugins/roi.js +223 -0
  64. package/dist/plugins/roi.js.map +1 -0
  65. package/dist/plugins/snapshot/types.d.ts +1 -1
  66. package/dist/plugins/snapshot.d.ts +3 -0
  67. package/dist/plugins/snapshot.js +90 -0
  68. package/dist/plugins/snapshot.js.map +1 -0
  69. package/dist/plugins/sync/index.d.ts +2 -1
  70. package/dist/plugins/sync.js +13 -269
  71. package/dist/plugins/sync.js.map +1 -1
  72. package/dist/plugins/video-recorder.d.ts +3 -0
  73. package/dist/plugins/video-recorder.js +104 -0
  74. package/dist/plugins/video-recorder.js.map +1 -0
  75. package/dist/plugins/virtualization.d.ts +3 -0
  76. package/dist/plugins/virtualization.js +6 -0
  77. package/dist/plugins/virtualization.js.map +1 -0
  78. package/dist/react.d.ts +1 -0
  79. package/dist/react.js +31 -0
  80. package/dist/react.js.map +1 -0
  81. package/dist/utils-BK5UUXxj.js +172 -0
  82. package/dist/utils-BK5UUXxj.js.map +1 -0
  83. package/dist/velo-plot.full.js +920 -6003
  84. package/dist/velo-plot.full.js.map +1 -1
  85. package/dist/velo-plot.js +23 -22
  86. package/dist/velo-plot.js.map +1 -1
  87. package/package.json +9 -2
  88. package/dist/core/OverlayRenderer.test.d.ts +0 -1
  89. package/dist/core/chart/ChartScaling.test.d.ts +0 -1
  90. package/dist/core/chart/NavigationUtils.test.d.ts +0 -1
  91. package/dist/core/format/axisFormat.test.d.ts +0 -1
  92. package/dist/core/indicator/buildIndicatorSeries.test.d.ts +0 -1
  93. package/dist/core/series/SeriesBounds.test.d.ts +0 -1
  94. package/dist/core/stacked/createStackedChart.test.d.ts +0 -1
  95. package/dist/core/stacked/paneAxis.test.d.ts +0 -1
  96. package/dist/core/stacked/paneResize.test.d.ts +0 -1
  97. package/dist/core/sync/index.test.d.ts +0 -1
  98. package/dist/index.core-xiNcuFfJ.js.map +0 -1
  99. package/dist/plugins/tools/tooltip/format.test.d.ts +0 -1
  100. package/dist/utils-Dbro9-qM.js +0 -254
  101. package/dist/utils-Dbro9-qM.js.map +0 -1
@@ -0,0 +1,169 @@
1
+ var p = Object.defineProperty;
2
+ var m = (o, e, r) => e in o ? p(o, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : o[e] = r;
3
+ var f = (o, e, r) => m(o, typeof e != "symbol" ? e + "" : e, r);
4
+ class g {
5
+ // taskId => workerIndex
6
+ constructor(e) {
7
+ f(this, "workers", []);
8
+ f(this, "availableWorkers", /* @__PURE__ */ new Set());
9
+ f(this, "taskQueue", []);
10
+ f(this, "activeJobs", /* @__PURE__ */ new Map());
11
+ this.size = e, this.initialize();
12
+ }
13
+ initialize() {
14
+ const e = `
15
+ // Simple offscreen worker
16
+ self.onmessage = (e) => {
17
+ const { type, width, height, dpr } = e.data;
18
+
19
+ if (type === 'render') {
20
+ // Echo back - actual rendering logic would go here
21
+ self.postMessage({ type: 'response', taskId: e.data.taskId });
22
+ }
23
+ };
24
+ `, r = new Blob([e], { type: "application/javascript" }), t = URL.createObjectURL(r);
25
+ for (let s = 0; s < this.size; s++)
26
+ try {
27
+ const i = new Worker(t);
28
+ i.onmessage = (n) => this.handleWorkerMessage(s, n), i.onerror = (n) => this.handleWorkerError(s, n), this.workers.push(i), this.availableWorkers.add(s);
29
+ } catch (i) {
30
+ console.error(`Failed to create worker ${s}:`, i);
31
+ }
32
+ URL.revokeObjectURL(t);
33
+ }
34
+ handleWorkerMessage(e, r) {
35
+ const { type: t, taskId: s, imageData: i, error: n } = r.data;
36
+ if (t === "response") {
37
+ const l = this.findTask(s);
38
+ l && (n ? l.reject(new Error(n)) : i && l.resolve(i), this.activeJobs.delete(s), this.availableWorkers.add(e), this.processQueue());
39
+ }
40
+ }
41
+ handleWorkerError(e, r) {
42
+ console.error(`Worker ${e} error:`, r);
43
+ for (const [t, s] of this.activeJobs.entries())
44
+ if (s === e) {
45
+ const i = this.findTask(t);
46
+ i && (i.reject(new Error(`Worker error: ${r.message}`)), this.activeJobs.delete(t));
47
+ }
48
+ this.availableWorkers.add(e), this.processQueue();
49
+ }
50
+ findTask(e) {
51
+ return this.taskQueue.find((r) => r.id === e);
52
+ }
53
+ processQueue() {
54
+ for (; this.availableWorkers.size > 0 && this.taskQueue.length > 0; ) {
55
+ this.taskQueue.sort((t, s) => t.priority !== s.priority ? s.priority - t.priority : t.timestamp - s.timestamp);
56
+ const e = this.taskQueue.shift();
57
+ if (!e) break;
58
+ const r = Array.from(this.availableWorkers)[0];
59
+ this.availableWorkers.delete(r), this.activeJobs.set(e.id, r), this.workers[r].postMessage({
60
+ type: "render",
61
+ taskId: e.id
62
+ });
63
+ }
64
+ }
65
+ submit(e = 0) {
66
+ return new Promise((r, t) => {
67
+ const s = {
68
+ id: Math.random().toString(36).substring(7),
69
+ priority: e,
70
+ timestamp: Date.now(),
71
+ resolve: r,
72
+ reject: t
73
+ };
74
+ this.taskQueue.push(s), this.processQueue();
75
+ });
76
+ }
77
+ getStats() {
78
+ return {
79
+ total: this.workers.length,
80
+ active: this.activeJobs.size,
81
+ idle: this.availableWorkers.size,
82
+ queued: this.taskQueue.length
83
+ };
84
+ }
85
+ destroy() {
86
+ for (const e of this.workers)
87
+ e.terminate();
88
+ this.workers = [], this.availableWorkers.clear(), this.taskQueue = [], this.activeJobs.clear();
89
+ }
90
+ }
91
+ const w = {
92
+ name: "velo-plot-offscreen",
93
+ version: "1.0.0",
94
+ description: "Offscreen rendering support with worker-ready scaffolding",
95
+ provides: ["performance", "offscreen"],
96
+ tags: ["performance", "offscreen", "worker"]
97
+ }, v = {
98
+ enabled: !1,
99
+ mode: "auto",
100
+ workerPool: 1,
101
+ transfer: "offscreen",
102
+ fallback: "main-thread",
103
+ debug: !1
104
+ };
105
+ function y(o = {}) {
106
+ const e = { ...v, ...o };
107
+ let r = null, t = null, s = {
108
+ enabled: e.enabled,
109
+ frames: 0,
110
+ lastFrameTime: 0,
111
+ lastFrameTimestamp: 0
112
+ };
113
+ function i(a, ...c) {
114
+ e.debug && r && r.log.info(`[Offscreen] ${a}`, ...c);
115
+ }
116
+ function n() {
117
+ return typeof globalThis.OffscreenCanvas < "u";
118
+ }
119
+ function l() {
120
+ if (!n() && (i("OffscreenCanvas not supported. Falling back to main thread."), e.fallback === "disable")) {
121
+ s.enabled = !1;
122
+ return;
123
+ }
124
+ t || (t = new g(e.workerPool || 1)), s.enabled = !0, e.enabled = !0;
125
+ }
126
+ function d() {
127
+ t && (t.destroy(), t = null), s.enabled = !1, e.enabled = !1;
128
+ }
129
+ function h(a) {
130
+ Object.assign(e, a), e.enabled ? l() : d(), s.enabled = !!e.enabled;
131
+ }
132
+ function k() {
133
+ const a = t == null ? void 0 : t.getStats();
134
+ return {
135
+ ...s,
136
+ activeWorkers: (a == null ? void 0 : a.active) || 0,
137
+ queuedTasks: (a == null ? void 0 : a.queued) || 0
138
+ };
139
+ }
140
+ function b() {
141
+ r == null || r.requestRender();
142
+ }
143
+ const u = {
144
+ enable: l,
145
+ disable: d,
146
+ isEnabled: () => s.enabled,
147
+ updateConfig: h,
148
+ getStats: k,
149
+ flush: b
150
+ };
151
+ return {
152
+ manifest: w,
153
+ onInit(a) {
154
+ r = a, r.chart.offscreen = u, e.enabled && l(), i(`Initialized (pool=${e.workerPool})`);
155
+ },
156
+ onDestroy(a) {
157
+ d(), delete a.chart.offscreen, r = null;
158
+ },
159
+ onAfterRender(a, c) {
160
+ s.frames += 1, s.lastFrameTime = c.renderTime, s.lastFrameTimestamp = c.timestamp, e.enabled;
161
+ },
162
+ api: u
163
+ };
164
+ }
165
+ export {
166
+ y as PluginOffscreen,
167
+ y as default
168
+ };
169
+ //# sourceMappingURL=offscreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offscreen.js","sources":["../../src/plugins/offscreen/pool.ts","../../src/plugins/offscreen/index.ts"],"sourcesContent":["/**\n * @fileoverview Worker Pool Manager for Offscreen Rendering\n * @module plugins/offscreen/pool\n */\n\nexport interface WorkerTask {\n id: string;\n priority: number;\n timestamp: number;\n resolve: (value: ImageBitmap) => void;\n reject: (error: Error) => void;\n}\n\nexport class WorkerPool {\n private workers: Worker[] = [];\n private availableWorkers: Set<number> = new Set();\n private taskQueue: WorkerTask[] = [];\n private activeJobs: Map<string, number> = new Map(); // taskId => workerIndex\n\n constructor(private size: number) {\n this.initialize();\n }\n\n private initialize(): void {\n const workerCode = `\n // Simple offscreen worker\n self.onmessage = (e) => {\n const { type, width, height, dpr } = e.data;\n \n if (type === 'render') {\n // Echo back - actual rendering logic would go here\n self.postMessage({ type: 'response', taskId: e.data.taskId });\n }\n };\n `;\n\n const blob = new Blob([workerCode], { type: 'application/javascript' });\n const workerUrl = URL.createObjectURL(blob);\n\n for (let i = 0; i < this.size; i++) {\n try {\n const worker = new Worker(workerUrl);\n worker.onmessage = (e) => this.handleWorkerMessage(i, e);\n worker.onerror = (e) => this.handleWorkerError(i, e);\n this.workers.push(worker);\n this.availableWorkers.add(i);\n } catch (error) {\n console.error(`Failed to create worker ${i}:`, error);\n }\n }\n\n URL.revokeObjectURL(workerUrl);\n }\n\n private handleWorkerMessage(workerIndex: number, event: MessageEvent): void {\n const { type, taskId, imageData, error } = event.data;\n\n if (type === 'response') {\n const task = this.findTask(taskId);\n if (task) {\n if (error) {\n task.reject(new Error(error));\n } else if (imageData) {\n task.resolve(imageData);\n }\n this.activeJobs.delete(taskId);\n this.availableWorkers.add(workerIndex);\n this.processQueue();\n }\n }\n }\n\n private handleWorkerError(workerIndex: number, error: ErrorEvent): void {\n console.error(`Worker ${workerIndex} error:`, error);\n // Find and reject any active task for this worker\n for (const [taskId, wIndex] of this.activeJobs.entries()) {\n if (wIndex === workerIndex) {\n const task = this.findTask(taskId);\n if (task) {\n task.reject(new Error(`Worker error: ${error.message}`));\n this.activeJobs.delete(taskId);\n }\n }\n }\n this.availableWorkers.add(workerIndex);\n this.processQueue();\n }\n\n private findTask(taskId: string): WorkerTask | undefined {\n return this.taskQueue.find(t => t.id === taskId);\n }\n\n private processQueue(): void {\n while (this.availableWorkers.size > 0 && this.taskQueue.length > 0) {\n // Sort by priority and timestamp\n this.taskQueue.sort((a, b) => {\n if (a.priority !== b.priority) return b.priority - a.priority;\n return a.timestamp - b.timestamp;\n });\n\n const task = this.taskQueue.shift();\n if (!task) break;\n\n const workerIndex = Array.from(this.availableWorkers)[0];\n this.availableWorkers.delete(workerIndex);\n this.activeJobs.set(task.id, workerIndex);\n\n // Send task to worker\n this.workers[workerIndex].postMessage({\n type: 'render',\n taskId: task.id,\n });\n }\n }\n\n public submit(priority: number = 0): Promise<ImageBitmap> {\n return new Promise((resolve, reject) => {\n const task: WorkerTask = {\n id: Math.random().toString(36).substring(7),\n priority,\n timestamp: Date.now(),\n resolve,\n reject,\n };\n\n this.taskQueue.push(task);\n this.processQueue();\n });\n }\n\n public getStats() {\n return {\n total: this.workers.length,\n active: this.activeJobs.size,\n idle: this.availableWorkers.size,\n queued: this.taskQueue.length,\n };\n }\n\n public destroy(): void {\n for (const worker of this.workers) {\n worker.terminate();\n }\n this.workers = [];\n this.availableWorkers.clear();\n this.taskQueue = [];\n this.activeJobs.clear();\n }\n}\n","/**\n * @fileoverview Offscreen rendering plugin (skeleton with stats + feature detection)\n * @module plugins/offscreen\n */\n\nimport type {\n PluginOffscreenConfig,\n OffscreenAPI,\n OffscreenStats,\n} from \"./types\";\nimport type { ChartPlugin, PluginContext, PluginManifest } from \"../types\";\n\nconst manifest: PluginManifest = {\n name: \"velo-plot-offscreen\",\n version: \"1.0.0\",\n description: \"Offscreen rendering support with worker-ready scaffolding\",\n provides: [\"performance\", \"offscreen\"],\n tags: [\"performance\", \"offscreen\", \"worker\"],\n};\n\nconst DEFAULT_CONFIG: Required<PluginOffscreenConfig> = {\n enabled: false,\n mode: \"auto\",\n workerPool: 1,\n transfer: \"offscreen\",\n fallback: \"main-thread\",\n debug: false,\n};\n\nimport { WorkerPool } from \"./pool\";\n\nexport function PluginOffscreen(\n userConfig: Partial<PluginOffscreenConfig> = {}\n): ChartPlugin<PluginOffscreenConfig> {\n const config = { ...DEFAULT_CONFIG, ...userConfig };\n let ctx: PluginContext | null = null;\n let pool: WorkerPool | null = null;\n let stats: OffscreenStats = {\n enabled: config.enabled,\n frames: 0,\n lastFrameTime: 0,\n lastFrameTimestamp: 0,\n };\n\n function log(message: string, ...args: unknown[]) {\n if (config.debug && ctx) {\n ctx.log.info(`[Offscreen] ${message}`, ...args);\n }\n }\n\n function isSupported(): boolean {\n return typeof (globalThis as any).OffscreenCanvas !== \"undefined\";\n }\n\n function enable(): void {\n if (!isSupported()) {\n log(\"OffscreenCanvas not supported. Falling back to main thread.\");\n if (config.fallback === \"disable\") {\n stats.enabled = false;\n return;\n }\n }\n \n if (!pool) {\n pool = new WorkerPool(config.workerPool || 1);\n }\n \n stats.enabled = true;\n config.enabled = true;\n }\n\n function disable(): void {\n if (pool) {\n pool.destroy();\n pool = null;\n }\n stats.enabled = false;\n config.enabled = false;\n }\n\n function updateConfig(newConfig: Partial<PluginOffscreenConfig>): void {\n Object.assign(config, newConfig);\n if (config.enabled) enable();\n else disable();\n stats.enabled = !!config.enabled;\n }\n\n function getStats(): OffscreenStats {\n const poolStats = pool?.getStats();\n return { \n ...stats,\n activeWorkers: poolStats?.active || 0,\n queuedTasks: poolStats?.queued || 0\n } as any;\n }\n\n function flush(): void {\n ctx?.requestRender();\n }\n\n const api: OffscreenAPI & Record<string, unknown> = {\n enable,\n disable,\n isEnabled: () => stats.enabled,\n updateConfig,\n getStats,\n flush,\n };\n\n return {\n manifest,\n onInit(pluginCtx: PluginContext) {\n ctx = pluginCtx;\n (ctx.chart as any).offscreen = api;\n if (config.enabled) enable();\n log(`Initialized (pool=${config.workerPool})`);\n },\n onDestroy(pluginCtx: PluginContext) {\n disable();\n delete (pluginCtx.chart as any).offscreen;\n ctx = null;\n },\n onAfterRender(_ctx, event) {\n stats.frames += 1;\n stats.lastFrameTime = event.renderTime;\n stats.lastFrameTimestamp = event.timestamp;\n \n if (config.enabled && pool) {\n // In a real implementation, we would offload the next render piece here\n // For now, we just track that we could have used the pool\n }\n },\n api,\n };\n}\n\nexport default PluginOffscreen;\n\n// Type exports\nexport type {\n PluginOffscreenConfig,\n OffscreenAPI,\n OffscreenStats,\n OffscreenMode,\n OffscreenTransferMode,\n OffscreenFallbackMode,\n} from \"./types\";\n"],"names":["WorkerPool","size","__publicField","workerCode","blob","workerUrl","i","worker","e","error","workerIndex","event","type","taskId","imageData","task","wIndex","t","a","b","priority","resolve","reject","manifest","DEFAULT_CONFIG","PluginOffscreen","userConfig","config","ctx","pool","stats","log","message","args","isSupported","enable","disable","updateConfig","newConfig","getStats","poolStats","flush","api","pluginCtx","_ctx"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './pattern-recognition/index'
2
+ import SciPlot from './pattern-recognition/index'
3
+ export default SciPlot