@tranding-custom-chart/renderer-canvas 0.0.0-stage → 2.0.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 (104) hide show
  1. package/README.md +40 -2
  2. package/dist/canvas-engine.d.ts +82 -0
  3. package/dist/canvas-engine.d.ts.map +1 -0
  4. package/dist/canvas-engine.js +594 -0
  5. package/dist/dpi.d.ts +31 -0
  6. package/dist/dpi.d.ts.map +1 -0
  7. package/dist/dpi.js +65 -0
  8. package/dist/index.d.ts +38 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +37 -0
  11. package/dist/renderers/bar-renderer.d.ts +26 -0
  12. package/dist/renderers/bar-renderer.d.ts.map +1 -0
  13. package/dist/renderers/bar-renderer.js +45 -0
  14. package/dist/renderers/baseline-renderer.d.ts +20 -0
  15. package/dist/renderers/baseline-renderer.d.ts.map +1 -0
  16. package/dist/renderers/baseline-renderer.js +101 -0
  17. package/dist/renderers/box-plot-renderer.d.ts +14 -0
  18. package/dist/renderers/box-plot-renderer.d.ts.map +1 -0
  19. package/dist/renderers/box-plot-renderer.js +76 -0
  20. package/dist/renderers/bubble-renderer.d.ts +14 -0
  21. package/dist/renderers/bubble-renderer.d.ts.map +1 -0
  22. package/dist/renderers/bubble-renderer.js +37 -0
  23. package/dist/renderers/candlestick-renderer.d.ts +18 -0
  24. package/dist/renderers/candlestick-renderer.d.ts.map +1 -0
  25. package/dist/renderers/candlestick-renderer.js +87 -0
  26. package/dist/renderers/columns-renderer.d.ts +21 -0
  27. package/dist/renderers/columns-renderer.d.ts.map +1 -0
  28. package/dist/renderers/columns-renderer.js +35 -0
  29. package/dist/renderers/crosshair-renderer.d.ts +19 -0
  30. package/dist/renderers/crosshair-renderer.d.ts.map +1 -0
  31. package/dist/renderers/crosshair-renderer.js +71 -0
  32. package/dist/renderers/curved-line-renderer.d.ts +17 -0
  33. package/dist/renderers/curved-line-renderer.d.ts.map +1 -0
  34. package/dist/renderers/curved-line-renderer.js +46 -0
  35. package/dist/renderers/drawing-renderer.d.ts +19 -0
  36. package/dist/renderers/drawing-renderer.d.ts.map +1 -0
  37. package/dist/renderers/drawing-renderer.js +487 -0
  38. package/dist/renderers/grid-renderer.d.ts +26 -0
  39. package/dist/renderers/grid-renderer.d.ts.map +1 -0
  40. package/dist/renderers/grid-renderer.js +103 -0
  41. package/dist/renderers/heatmap-renderer.d.ts +16 -0
  42. package/dist/renderers/heatmap-renderer.d.ts.map +1 -0
  43. package/dist/renderers/heatmap-renderer.js +80 -0
  44. package/dist/renderers/high-low-renderer.d.ts +19 -0
  45. package/dist/renderers/high-low-renderer.d.ts.map +1 -0
  46. package/dist/renderers/high-low-renderer.js +28 -0
  47. package/dist/renderers/hlc-area-renderer.d.ts +22 -0
  48. package/dist/renderers/hlc-area-renderer.d.ts.map +1 -0
  49. package/dist/renderers/hlc-area-renderer.js +72 -0
  50. package/dist/renderers/hollow-candlestick-renderer.d.ts +26 -0
  51. package/dist/renderers/hollow-candlestick-renderer.d.ts.map +1 -0
  52. package/dist/renderers/hollow-candlestick-renderer.js +71 -0
  53. package/dist/renderers/horizontal-bar-renderer.d.ts +25 -0
  54. package/dist/renderers/horizontal-bar-renderer.d.ts.map +1 -0
  55. package/dist/renderers/horizontal-bar-renderer.js +52 -0
  56. package/dist/renderers/last-price-renderer.d.ts +17 -0
  57. package/dist/renderers/last-price-renderer.d.ts.map +1 -0
  58. package/dist/renderers/last-price-renderer.js +46 -0
  59. package/dist/renderers/line-renderer.d.ts +23 -0
  60. package/dist/renderers/line-renderer.d.ts.map +1 -0
  61. package/dist/renderers/line-renderer.js +80 -0
  62. package/dist/renderers/line-with-markers-renderer.d.ts +13 -0
  63. package/dist/renderers/line-with-markers-renderer.d.ts.map +1 -0
  64. package/dist/renderers/line-with-markers-renderer.js +35 -0
  65. package/dist/renderers/marker-renderer.d.ts +16 -0
  66. package/dist/renderers/marker-renderer.d.ts.map +1 -0
  67. package/dist/renderers/marker-renderer.js +91 -0
  68. package/dist/renderers/mixed-renderer.d.ts +18 -0
  69. package/dist/renderers/mixed-renderer.d.ts.map +1 -0
  70. package/dist/renderers/mixed-renderer.js +123 -0
  71. package/dist/renderers/ohlc-bar-renderer.d.ts +21 -0
  72. package/dist/renderers/ohlc-bar-renderer.d.ts.map +1 -0
  73. package/dist/renderers/ohlc-bar-renderer.js +73 -0
  74. package/dist/renderers/pie-renderer.d.ts +26 -0
  75. package/dist/renderers/pie-renderer.d.ts.map +1 -0
  76. package/dist/renderers/pie-renderer.js +71 -0
  77. package/dist/renderers/polar-area-renderer.d.ts +13 -0
  78. package/dist/renderers/polar-area-renderer.d.ts.map +1 -0
  79. package/dist/renderers/polar-area-renderer.js +44 -0
  80. package/dist/renderers/radar-renderer.d.ts +16 -0
  81. package/dist/renderers/radar-renderer.d.ts.map +1 -0
  82. package/dist/renderers/radar-renderer.js +99 -0
  83. package/dist/renderers/scatter-renderer.d.ts +14 -0
  84. package/dist/renderers/scatter-renderer.d.ts.map +1 -0
  85. package/dist/renderers/scatter-renderer.js +42 -0
  86. package/dist/renderers/stacked-bar-renderer.d.ts +14 -0
  87. package/dist/renderers/stacked-bar-renderer.d.ts.map +1 -0
  88. package/dist/renderers/stacked-bar-renderer.js +52 -0
  89. package/dist/renderers/step-line-renderer.d.ts +19 -0
  90. package/dist/renderers/step-line-renderer.d.ts.map +1 -0
  91. package/dist/renderers/step-line-renderer.js +52 -0
  92. package/dist/renderers/supertrend-renderer.d.ts +18 -0
  93. package/dist/renderers/supertrend-renderer.d.ts.map +1 -0
  94. package/dist/renderers/supertrend-renderer.js +80 -0
  95. package/dist/renderers/volume-profile-renderer.d.ts +25 -0
  96. package/dist/renderers/volume-profile-renderer.d.ts.map +1 -0
  97. package/dist/renderers/volume-profile-renderer.js +83 -0
  98. package/dist/renderers/watermark-renderer.d.ts +15 -0
  99. package/dist/renderers/watermark-renderer.d.ts.map +1 -0
  100. package/dist/renderers/watermark-renderer.js +26 -0
  101. package/dist/scheduler.d.ts +25 -0
  102. package/dist/scheduler.d.ts.map +1 -0
  103. package/dist/scheduler.js +77 -0
  104. package/package.json +33 -4
package/README.md CHANGED
@@ -1,3 +1,41 @@
1
- # Temporary Holding Version
1
+ # @tranding-custom-chart/renderer-canvas
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ > High-performance, multi-layer Canvas 2D rendering engine with sub-pixel crispness and high-DPI retina display support.
4
+
5
+ [![Version](https://img.shields.io/badge/version-2.0.0-blue.svg)](https://semver.org)
6
+ [![Canvas 2D](https://img.shields.io/badge/engine-canvas--2d-orange.svg)](#)
7
+
8
+ ## Features
9
+ - **Dual-Layer Architecture**: Dedicated data canvas and interactive overlay canvas for flicker-free 60+ FPS rendering.
10
+ - **High-DPI Retina Scaling**: Physical backing store scaled by DPR with half-pixel alignment (`snapLine`) and sharp borders (`snapRect`).
11
+ - **Coalesced Render Scheduler**: Batches high-frequency draw calls into single `requestAnimationFrame` passes.
12
+ - **20+ Visual Renderers**:
13
+ - Financial: Candlesticks, Hollow Candles, OHLC Bars, Columns, Line, Line with Markers, Step Line, Area, HLC Area, Baseline, Heikin-Ashi, High-Low, Renko Bricks.
14
+ - Pro Indicators: Visible Range Volume Profile (VRVP) with POC line & Value Area, Supertrend with buy/sell reversal markers.
15
+ - Business: Doughnut & Pie (cutout + hover explode), Stacked Bars, Horizontal Bars, Bezier Curved Splines, Radar Risk Grids.
16
+ - Overlays: Crosshairs, Watermarks, Last Price Lines, Cartesian Grids.
17
+
18
+ ## Installation
19
+ ```bash
20
+ npm install @tranding-custom-chart/renderer-canvas @tranding-custom-chart/core
21
+ ```
22
+
23
+ ## Quick Start
24
+ ```ts
25
+ import { CanvasChartEngine } from '@tranding-custom-chart/renderer-canvas';
26
+
27
+ const engine = new CanvasChartEngine({
28
+ container: document.getElementById('chart')!,
29
+ width: 800,
30
+ height: 450,
31
+ });
32
+
33
+ engine.registerDataLayer('main', (ctx) => {
34
+ // draw series
35
+ });
36
+
37
+ engine.requestRender();
38
+ ```
39
+
40
+ ## License
41
+ UNLICENSED (Internal / In-House Use)
@@ -0,0 +1,82 @@
1
+ /**
2
+ * @file packages/chart-renderer-canvas/src/canvas-engine.ts
3
+ * High-performance 2D Canvas Chart Engine.
4
+ * Manages layer creation, High-DPI backing store, rAF scheduling, and disposal.
5
+ */
6
+ import { type ChartTheme, type Dimension, type Padding, type Scale, type ChartOptions, type DeepPartial, type ChartPlugin, PluginManager, ChartEventEmitter, type ChartEvent, type ChartEventHandler, type ChartEventType, type ChartElementTarget, type Unsubscribe } from '@tranding-custom-chart/core';
7
+ export interface CanvasChartEngineConfig {
8
+ readonly container: HTMLElement;
9
+ readonly width?: number | undefined;
10
+ readonly height?: number | undefined;
11
+ readonly padding?: Padding | undefined;
12
+ readonly theme?: ChartTheme | undefined;
13
+ readonly plugins?: readonly ChartPlugin<any>[] | undefined;
14
+ readonly onHover?: ((pos: {
15
+ x: number;
16
+ y: number;
17
+ } | null) => void) | undefined;
18
+ readonly onRangeChange?: ((range: {
19
+ startRatio: number;
20
+ endRatio: number;
21
+ }) => void) | undefined;
22
+ }
23
+ export declare class CanvasChartEngine {
24
+ private readonly _container;
25
+ private readonly _bgCanvas;
26
+ private readonly _overlayCanvas;
27
+ private readonly _bgCtx;
28
+ private readonly _overlayCtx;
29
+ private readonly _scheduler;
30
+ private readonly _pluginManager;
31
+ private readonly _emitter;
32
+ private _chartId;
33
+ private _hitTestResolver;
34
+ private _isPointerDown;
35
+ private _hasDragged;
36
+ private _dragStartPos;
37
+ private _lastHoverTarget;
38
+ private _width;
39
+ private _height;
40
+ private _padding;
41
+ private _theme;
42
+ private _dpr;
43
+ private _disposed;
44
+ private _xScale;
45
+ private _yScale;
46
+ private _onHover?;
47
+ private _drawDataCallback?;
48
+ private _drawOverlayCallback?;
49
+ constructor(config: CanvasChartEngineConfig);
50
+ registerPlugin<O>(plugin: ChartPlugin<O>, options?: O): void;
51
+ unregisterPlugin(pluginId: string): boolean;
52
+ getPluginManager(): PluginManager;
53
+ getChartId(): string;
54
+ setChartId(id: string): void;
55
+ getEmitter(): ChartEventEmitter;
56
+ subscribe<T = unknown>(eventType: ChartEventType | '*', handler: ChartEventHandler<T>): Unsubscribe;
57
+ on<T = unknown>(eventType: ChartEventType | '*', handler: ChartEventHandler<T>): Unsubscribe;
58
+ off<T = unknown>(eventType: ChartEventType | '*', handler: ChartEventHandler<T>): void;
59
+ emit<T = unknown>(event: ChartEvent<T>): void;
60
+ setHitTestResolver(resolver: ((x: number, y: number) => ChartElementTarget | null) | null): void;
61
+ setScales(xScale: Scale<number> | null, yScale: Scale<number> | null): void;
62
+ setDrawCallbacks(drawData: (ctx: CanvasRenderingContext2D, bounds: Dimension, padding: Padding, dpr: number) => void, drawOverlay?: (ctx: CanvasRenderingContext2D, bounds: Dimension, padding: Padding, dpr: number) => void): void;
63
+ resize(width: number, height: number): void;
64
+ requestRender(): void;
65
+ renderOverlayOnly(): void;
66
+ applyOptions(options: DeepPartial<ChartOptions>): void;
67
+ getTheme(): ChartTheme;
68
+ getWidth(): number;
69
+ getHeight(): number;
70
+ getPadding(): Padding;
71
+ getDpr(): number;
72
+ dispose(): void;
73
+ private _paint;
74
+ private _handlePointerDown;
75
+ private _handlePointerMove;
76
+ private _handlePointerUp;
77
+ private _handleDoubleClick;
78
+ private _handlePointerLeave;
79
+ private _attachEventListeners;
80
+ private _detachEventListeners;
81
+ }
82
+ //# sourceMappingURL=canvas-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-engine.d.ts","sourceRoot":"","sources":["../src/canvas-engine.ts"],"names":[],"mappings":"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"}