@363045841yyt/klinechart 0.6.0 → 0.6.1
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/README.md +1 -0
- package/dist/index.cjs +9 -9
- package/dist/index.js +2726 -2596
- package/dist/src/core/chart.d.ts +14 -6
- package/dist/src/core/indicators/scheduler.d.ts +7 -0
- package/dist/src/core/layout/pane.d.ts +11 -0
- package/dist/src/core/paneRenderer.d.ts +2 -1
- package/dist/src/core/theme/fonts.d.ts +1 -0
- package/dist/src/debug/canvasProfiler.d.ts +21 -0
- package/dist/src/plugin/rendererPluginManager.d.ts +3 -2
- package/dist/src/plugin/types.d.ts +9 -0
- package/dist/src/utils/kLineDraw/axis.d.ts +0 -16
- package/package.json +2 -1
package/dist/src/core/chart.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { KLineData } from '../types/price';
|
|
2
|
-
import { VisibleRange } from './layout/pane';
|
|
2
|
+
import { VisibleRange, UpdateLevel } from './layout/pane';
|
|
3
3
|
import { InteractionController } from './controller/interaction';
|
|
4
4
|
import { PaneRenderer } from './paneRenderer';
|
|
5
5
|
import { MarkerManager, CustomMarkerEntity } from './marker/registry';
|
|
@@ -40,7 +40,8 @@ export type PaneSpec = {
|
|
|
40
40
|
capabilities?: Partial<PaneCapabilities>;
|
|
41
41
|
};
|
|
42
42
|
export type PaneRendererDom = {
|
|
43
|
-
|
|
43
|
+
mainCanvas: HTMLCanvasElement;
|
|
44
|
+
overlayCanvas: HTMLCanvasElement;
|
|
44
45
|
yAxisCanvas: HTMLCanvasElement;
|
|
45
46
|
};
|
|
46
47
|
export type ChartOptions = {
|
|
@@ -91,6 +92,7 @@ export declare class Chart {
|
|
|
91
92
|
private opt;
|
|
92
93
|
private data;
|
|
93
94
|
private raf;
|
|
95
|
+
private pendingUpdateLevel;
|
|
94
96
|
private viewport;
|
|
95
97
|
private paneRenderers;
|
|
96
98
|
private markerManager;
|
|
@@ -153,8 +155,11 @@ export declare class Chart {
|
|
|
153
155
|
getAllRenderers(): RendererPlugin[];
|
|
154
156
|
/** 更新用户设置(触发重绘) */
|
|
155
157
|
updateSettings(settings: Record<string, boolean>): void;
|
|
156
|
-
/**
|
|
157
|
-
|
|
158
|
+
/**
|
|
159
|
+
* 绘制一帧
|
|
160
|
+
* @param level 更新级别,决定渲染哪些层
|
|
161
|
+
*/
|
|
162
|
+
draw(level?: UpdateLevel): void;
|
|
158
163
|
/**
|
|
159
164
|
* 应用渲染状态(由 Vue/Store 层在状态更新后调用)
|
|
160
165
|
* Chart 不拥有业务 SSOT,只负责接收参数并渲染
|
|
@@ -280,8 +285,11 @@ export declare class Chart {
|
|
|
280
285
|
getContentWidth(): number;
|
|
281
286
|
/** 容器尺寸变化时调用 */
|
|
282
287
|
resize(): void;
|
|
283
|
-
/**
|
|
284
|
-
|
|
288
|
+
/**
|
|
289
|
+
* 请求下一帧重绘(RAF 合并,支持分层更新)
|
|
290
|
+
* @param level 更新级别,默认为 All
|
|
291
|
+
*/
|
|
292
|
+
scheduleDraw(level?: UpdateLevel): void;
|
|
285
293
|
/** 销毁图表实例 */
|
|
286
294
|
destroy(): Promise<void>;
|
|
287
295
|
/** 初始化所有 pane */
|
|
@@ -150,6 +150,13 @@ export declare class IndicatorScheduler {
|
|
|
150
150
|
private dirtyWmsrConfig;
|
|
151
151
|
private dirtyKstConfig;
|
|
152
152
|
private dirtyFastkConfig;
|
|
153
|
+
private dirtyRsiState;
|
|
154
|
+
private dirtyCciState;
|
|
155
|
+
private dirtyStochState;
|
|
156
|
+
private dirtyMomState;
|
|
157
|
+
private dirtyWmsrState;
|
|
158
|
+
private dirtyKstState;
|
|
159
|
+
private dirtyFastkState;
|
|
153
160
|
/**
|
|
154
161
|
* 设置 PluginHost,用于读写 StateStore
|
|
155
162
|
*/
|
|
@@ -3,6 +3,17 @@ import { PriceRange } from '../scale/price';
|
|
|
3
3
|
import { PriceScale } from '../scale/priceScale';
|
|
4
4
|
import { MarkerManager } from '../marker/registry';
|
|
5
5
|
import { PaneCapabilities, PaneRole } from '../../plugin';
|
|
6
|
+
/**
|
|
7
|
+
* 更新级别枚举 - 用于双层 Canvas 架构
|
|
8
|
+
* Main: 只更新主画布(K线、指标等静态内容)
|
|
9
|
+
* Overlay: 只更新覆盖层(十字线、Tooltip等动态内容)
|
|
10
|
+
* All: 更新所有层
|
|
11
|
+
*/
|
|
12
|
+
export declare enum UpdateLevel {
|
|
13
|
+
Main = "main",
|
|
14
|
+
Overlay = "overlay",
|
|
15
|
+
All = "all"
|
|
16
|
+
}
|
|
6
17
|
export type VisibleRange = {
|
|
7
18
|
start: number;
|
|
8
19
|
end: number;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type MetricEntry = {
|
|
2
|
+
count: number;
|
|
3
|
+
totalTime: number;
|
|
4
|
+
};
|
|
5
|
+
type MetricBucket = Record<string, MetricEntry>;
|
|
6
|
+
type CanvasProfilerMetrics = {
|
|
7
|
+
ctxMethods: MetricBucket;
|
|
8
|
+
ctxProps: MetricBucket;
|
|
9
|
+
canvasProps: MetricBucket;
|
|
10
|
+
ctxMethodSources: Record<string, MetricBucket>;
|
|
11
|
+
};
|
|
12
|
+
declare global {
|
|
13
|
+
interface Window {
|
|
14
|
+
__KMAP_CANVAS_PROFILER_INSTALLED__?: boolean;
|
|
15
|
+
__KMAP_CANVAS_PROFILER_METRICS__?: CanvasProfilerMetrics;
|
|
16
|
+
showCanvasReport?: () => void;
|
|
17
|
+
resetCanvasReport?: () => void;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export declare function installCanvasProfiler(): void;
|
|
21
|
+
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RendererPlugin, RenderContext, PaneInfo, RendererPluginWithHost, PluginHost } from './types';
|
|
2
|
+
import { UpdateLevel } from '../core/layout/pane';
|
|
2
3
|
/** 渲染器错误事件(裁剪后,不含大数据) */
|
|
3
4
|
export interface RendererErrorEvent {
|
|
4
5
|
name: string;
|
|
@@ -55,8 +56,8 @@ export declare class RendererPluginManager {
|
|
|
55
56
|
private getMergedRenderers;
|
|
56
57
|
/** 获取指定 pane 的渲染器(已缓存,无穿透) */
|
|
57
58
|
getRenderers(paneId: string): RendererPlugin[];
|
|
58
|
-
/** 渲染指定 pane
|
|
59
|
-
render(paneId: string, context: RenderContext): RendererErrorEvent[];
|
|
59
|
+
/** 渲染指定 pane(带错误隔离,支持按 UpdateLevel 过滤) */
|
|
60
|
+
render(paneId: string, context: RenderContext, level?: UpdateLevel): RendererErrorEvent[];
|
|
60
61
|
/** 渲染指定名称的插件(带错误隔离,用于系统渲染器) */
|
|
61
62
|
renderPlugin(name: string, context: RenderContext): RendererErrorEvent[];
|
|
62
63
|
/** 启用/禁用渲染器(修改独立状态,不影响原始插件对象) */
|
|
@@ -226,6 +226,8 @@ export interface RenderContext {
|
|
|
226
226
|
yAxisCtx?: CanvasRenderingContext2D;
|
|
227
227
|
xAxisCtx?: CanvasRenderingContext2D;
|
|
228
228
|
borderCtx?: CanvasRenderingContext2D;
|
|
229
|
+
/** 覆盖层 Canvas 上下文(用于十字线、Tooltip 等动态内容) */
|
|
230
|
+
overlayCtx?: CanvasRenderingContext2D;
|
|
229
231
|
/** 当前缩放级别(1 ~ zoomLevels) */
|
|
230
232
|
zoomLevel?: number;
|
|
231
233
|
/** 总缩放级别数 */
|
|
@@ -396,6 +398,13 @@ export interface RendererPlugin {
|
|
|
396
398
|
* 用于时间轴、全局边框等需要单独控制渲染时机的场景
|
|
397
399
|
*/
|
|
398
400
|
isSystem?: boolean;
|
|
401
|
+
/**
|
|
402
|
+
* 渲染器所属层,决定 UpdateLevel 过滤行为
|
|
403
|
+
* - 'main': 低频/静态内容,随主画布一起渲染
|
|
404
|
+
* - 'overlay': 高频/动态内容,可在 overlay-only 更新时独立重绘
|
|
405
|
+
* 未指定时默认为 'main'(向后兼容)
|
|
406
|
+
*/
|
|
407
|
+
layer?: 'main' | 'overlay';
|
|
399
408
|
/** 渲染方法 */
|
|
400
409
|
draw(context: RenderContext): void;
|
|
401
410
|
/** 数据更新时回调 */
|
|
@@ -113,15 +113,7 @@ export interface CrosshairTimeLabelOptions {
|
|
|
113
113
|
paddingX?: number;
|
|
114
114
|
paddingY?: number;
|
|
115
115
|
}
|
|
116
|
-
/**
|
|
117
|
-
* 在底部时间轴上绘制"十字线日期标签"
|
|
118
|
-
* 说明:该函数假设时间轴背景/刻度已绘制完(即 drawTimeAxis 之后调用)。
|
|
119
|
-
*/
|
|
120
116
|
export declare function drawCrosshairTimeLabel(ctx: CanvasRenderingContext2D, opts: CrosshairTimeLabelOptions): void;
|
|
121
|
-
/**
|
|
122
|
-
* 在右侧价格轴上绘制"十字线价格标签"
|
|
123
|
-
* 说明:该函数假设价格轴背景/刻度已绘制完(即 drawPriceAxis 之后调用)。
|
|
124
|
-
*/
|
|
125
117
|
export declare function drawCrosshairPriceLabel(ctx: CanvasRenderingContext2D, opts: CrosshairPriceLabelOptions): void;
|
|
126
118
|
/** 绘制"最新价水平虚线"(画在 plotCanvas 的 world 坐标系:需在 translate(-scrollLeft,0) 之后调用) */
|
|
127
119
|
export declare function drawLastPriceDashedLine(ctx: CanvasRenderingContext2D, opts: LastPriceLineOptions): void;
|
|
@@ -141,10 +133,6 @@ export interface AxisPriceLabelOptions {
|
|
|
141
133
|
textColor?: string;
|
|
142
134
|
fontSize?: number;
|
|
143
135
|
}
|
|
144
|
-
/**
|
|
145
|
-
* 在右侧价格轴上绘制价格标签
|
|
146
|
-
* 与 drawCrosshairPriceLabel 类似,但简化了参数(价格直接传入,无需计算)
|
|
147
|
-
*/
|
|
148
136
|
export declare function drawAxisPriceLabel(ctx: CanvasRenderingContext2D, opts: AxisPriceLabelOptions): void;
|
|
149
137
|
export interface AxisTimeLabelOptions {
|
|
150
138
|
x: number;
|
|
@@ -159,8 +147,4 @@ export interface AxisTimeLabelOptions {
|
|
|
159
147
|
fontSize?: number;
|
|
160
148
|
paddingX?: number;
|
|
161
149
|
}
|
|
162
|
-
/**
|
|
163
|
-
* 在底部时间轴上绘制时间标签
|
|
164
|
-
* 与 drawCrosshairTimeLabel 类似,但 labelX 是屏幕坐标(已处理 scrollLeft)
|
|
165
|
-
*/
|
|
166
150
|
export declare function drawAxisTimeLabel(ctx: CanvasRenderingContext2D, opts: AxisTimeLabelOptions): void;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@363045841yyt/klinechart",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"description": "A lightweight financial K-line charting library with first-class AI Agent support, crisp ResizeObserver-driven rendering, and plugin-based architecture. Focused on quantitative trading scenarios with TradingView-level interaction experience.",
|
|
5
5
|
"author": "363045841 <slslswbsy@qq.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
"build-only": "vite build",
|
|
52
52
|
"build:demo": "vite build --config vite.demo.config.ts",
|
|
53
53
|
"preview": "vite preview",
|
|
54
|
+
"preview:demo": "vite preview --config vite.demo.config.ts",
|
|
54
55
|
"type-check": "vue-tsc --build",
|
|
55
56
|
"test:unit": "vitest",
|
|
56
57
|
"format": "prettier --write --experimental-cli src/",
|