@363045841yyt/klinechart 0.1.0 → 0.1.2

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 (43) hide show
  1. package/README.md +286 -48
  2. package/dist/App.vue.d.ts +1 -1
  3. package/dist/components/KLineChart.vue.d.ts +19 -6
  4. package/dist/components/KLineTooltip.vue.d.ts +15 -0
  5. package/dist/composables/useKLineInteraction.d.ts +50 -0
  6. package/dist/composables/useKLineRenderer.d.ts +49 -0
  7. package/dist/core/chart.d.ts +145 -0
  8. package/dist/core/controller/interaction.d.ts +50 -0
  9. package/dist/core/layout/pane.d.ts +72 -0
  10. package/dist/core/renderers/candle.d.ts +6 -0
  11. package/dist/core/renderers/crosshair.d.ts +13 -0
  12. package/dist/core/renderers/crosshairLabels.d.ts +17 -0
  13. package/dist/core/renderers/extremaMarkers.d.ts +8 -0
  14. package/dist/core/renderers/grid.d.ts +6 -0
  15. package/dist/core/renderers/gridLines.d.ts +7 -0
  16. package/dist/core/renderers/lastPrice.d.ts +5 -0
  17. package/dist/core/renderers/ma.d.ts +11 -0
  18. package/dist/core/renderers/maLegend.d.ts +9 -0
  19. package/dist/core/renderers/paneBorder.d.ts +14 -0
  20. package/dist/core/renderers/paneSeparator.d.ts +10 -0
  21. package/dist/core/renderers/paneTitle.d.ts +6 -0
  22. package/dist/core/renderers/timeAxis.d.ts +15 -0
  23. package/dist/core/renderers/yAxis.d.ts +11 -0
  24. package/dist/core/scale/price.d.ts +11 -0
  25. package/dist/core/scale/priceScale.d.ts +18 -0
  26. package/dist/core/viewport/viewport.d.ts +31 -0
  27. package/dist/index.cjs +1 -1
  28. package/dist/index.js +1036 -121
  29. package/dist/klinechart.css +1 -1
  30. package/dist/types/price.d.ts +14 -0
  31. package/dist/utils/dateFormat.d.ts +68 -0
  32. package/dist/utils/kLineDraw/MA.d.ts +8 -0
  33. package/dist/utils/kLineDraw/axis.d.ts +113 -0
  34. package/dist/utils/kLineDraw/grid.d.ts +30 -0
  35. package/dist/utils/{draw → kLineDraw}/kLine.d.ts +6 -8
  36. package/dist/utils/kLineDraw/pixelAlign.d.ts +48 -0
  37. package/dist/utils/kline/format.d.ts +14 -0
  38. package/dist/utils/kline/ma.d.ts +2 -0
  39. package/dist/utils/kline/viewport.d.ts +10 -0
  40. package/dist/utils/logger.d.ts +1 -1
  41. package/dist/utils/priceToY.d.ts +6 -0
  42. package/package.json +57 -55
  43. package/dist/utils/draw/MA.d.ts +0 -5
@@ -1,2 +1,2 @@
1
- .chart-container[data-v-7f0057f3]{-webkit-overflow-scrolling:touch;background:#fff;width:100%;height:400px;overflow:auto hidden}.chart-canvas[data-v-7f0057f3]{display:block}
1
+ .kline-tooltip[data-v-8d05acf2]{z-index:10;color:#000000c7;pointer-events:none;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#ffffffeb;border:1px solid #0000001f;border-radius:8px;min-width:200px;max-width:260px;padding:10px 12px;font-size:12px;line-height:1.4;position:absolute;box-shadow:0 6px 18px #0000001f}.kline-tooltip__title[data-v-8d05acf2]{justify-content:space-between;gap:10px;margin-bottom:6px;font-weight:600;display:flex}.kline-tooltip__grid[data-v-8d05acf2]{grid-template-columns:1fr;gap:2px;display:grid}.kline-tooltip__grid .row[data-v-8d05acf2]{justify-content:space-between;gap:10px;display:flex}.kline-tooltip__grid .row span[data-v-8d05acf2]:first-child{color:#0000008f}.chart-wrapper[data-v-28c7f9b2]{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.chart-container[data-v-28c7f9b2]{scrollbar-width:none;-ms-overflow-style:none;-webkit-touch-callout:none;-webkit-user-select:none;user-select:none;touch-action:none;width:80%;height:80%;position:relative;overflow:auto hidden}.chart-container[data-v-28c7f9b2]::-webkit-scrollbar{display:none}.chart-container[data-v-28c7f9b2]:hover{cursor:grab}.chart-container[data-v-28c7f9b2]:active{cursor:grabbing}.scroll-content[data-v-28c7f9b2]{height:100%;min-height:inherit;position:relative}.canvas-layer[data-v-28c7f9b2]{pointer-events:none;position:sticky;top:0;left:0}.plot-canvas[data-v-28c7f9b2]{display:block;position:absolute;top:0;left:0}.y-axis-canvas[data-v-28c7f9b2]{display:block;position:absolute;top:0;right:0}.x-axis-canvas[data-v-28c7f9b2]{display:block;position:absolute;bottom:0;left:0}
2
2
  /*$vite$:1*/
@@ -4,6 +4,20 @@ export interface KLineData {
4
4
  high: number;
5
5
  low: number;
6
6
  close: number;
7
+ /** 股票代码(东财等数据源会提供) */
8
+ stockCode?: string;
9
+ /** 成交量 */
10
+ volume?: number;
11
+ /** 成交额 */
12
+ turnover?: number;
13
+ /** 振幅 */
14
+ amplitude?: number;
15
+ /** 涨跌幅 */
16
+ changePercent?: number;
17
+ /** 涨跌额 */
18
+ changeAmount?: number;
19
+ /** 换手率 */
20
+ turnoverRate?: number;
7
21
  }
8
22
  export interface KLineDailyDongCaiResponse extends KLineData {
9
23
  stockCode: string;
@@ -0,0 +1,68 @@
1
+ /**
2
+ * 日期格式化工具函数集合
3
+ * 统一管理项目中所有日期相关的格式化逻辑
4
+ */
5
+ /**
6
+ * 将时间戳格式化为 YYYYMMDD 格式(纯数字,无分隔符)
7
+ * @param timestamp - 时间戳(毫秒)
8
+ * @returns 格式化后的日期字符串,例如 "20250114"
9
+ *
10
+ * @example
11
+ * formatDateToYYYYMMDDNoDash(1736793600000) // "20250114"
12
+ */
13
+ export declare function formatDateToYYYYMMDDNoDash(timestamp: number): string;
14
+ /**
15
+ * 获取当前日期的 YYYYMMDD 格式(纯数字,无分隔符)
16
+ * @returns 当前日期的格式化字符串,例如 "20250114"
17
+ *
18
+ * @example
19
+ * getCurrentDateYYYYMMDD() // "20250114"(根据实际日期)
20
+ */
21
+ export declare function getCurrentDateYYYYMMDD(): string;
22
+ /**
23
+ * 将时间戳格式化为 YYYY-MM-DD 格式(上海时区)
24
+ * @param timestamp - 时间戳(毫秒)
25
+ * @returns 格式化后的日期字符串,例如 "2025-01-14"
26
+ *
27
+ * @example
28
+ * formatDateToYYYYMMDD(1736793600000) // "2025-01-14"
29
+ */
30
+ export declare function formatDateToYYYYMMDD(timestamp: number): string;
31
+ /**
32
+ * 格式化月份或年份用于显示
33
+ * 当年为 1 月时显示年份,其他月份显示月份号
34
+ * @param timestamp - 时间戳(毫秒)
35
+ * @returns 包含文本和是否为年份的标志
36
+ *
37
+ * @example
38
+ * formatMonthOrYear(1704067200000) // { text: "2024", isYear: true } (2024年1月)
39
+ * formatMonthOrYear(1706745600000) // { text: "02", isYear: false } (2024年2月)
40
+ */
41
+ export declare function formatMonthOrYear(timestamp: number): {
42
+ text: string;
43
+ isYear: boolean;
44
+ };
45
+ /**
46
+ * 生成月份键值用于比较(YYYY-M 格式)
47
+ * 注意:月份未补零,用于快速比较月份是否相同
48
+ * @param timestamp - 时间戳(毫秒)
49
+ * @returns 月份键值,例如 "2025-1"
50
+ *
51
+ * @example
52
+ * monthKey(1736793600000) // "2025-1"
53
+ */
54
+ export declare function monthKey(timestamp: number): string;
55
+ /**
56
+ * formatDateToYYYYMMDD 的别名,保持与历史代码的兼容性
57
+ * timestamp 是"上海时区当天 00:00:00"映射到 UTC 的值;显示时强制按上海时区格式化
58
+ * @param ts - 时间戳(毫秒)
59
+ * @returns 格式化后的日期字符串,例如 "2025-01-14"
60
+ */
61
+ export declare const formatShanghaiDate: typeof formatDateToYYYYMMDD;
62
+ /**
63
+ * formatDateToYYYYMMDD 的别名,用于十字线日期标签显示
64
+ * 按上海时区格式化,避免不同时区出现日期偏移
65
+ * @param ts - 时间戳(毫秒)
66
+ * @returns 格式化后的日期字符串,例如 "2025-01-14"
67
+ */
68
+ export declare const formatYMDShanghai: typeof formatDateToYYYYMMDD;
@@ -0,0 +1,8 @@
1
+ import { KLineData } from '../../types/price';
2
+ import { drawOption, PriceRange } from './kLine';
3
+ export declare const MA5_COLOR = "rgba(255, 193, 37, 1)";
4
+ export declare const MA10_COLOR = "rgba(190, 131, 12, 1)";
5
+ export declare const MA20_COLOR = "rgba(69, 112, 249, 1)";
6
+ export declare function drawMA5Line(ctx: CanvasRenderingContext2D, data: KLineData[], option: drawOption, logicHeight: number, dpr?: number, startIndex?: number, endIndex?: number, priceRange?: PriceRange): void;
7
+ export declare function drawMA10Line(ctx: CanvasRenderingContext2D, data: KLineData[], option: drawOption, logicHeight: number, dpr?: number, startIndex?: number, endIndex?: number, priceRange?: PriceRange): void;
8
+ export declare function drawMA20Line(ctx: CanvasRenderingContext2D, data: KLineData[], option: drawOption, logicHeight: number, dpr?: number, startIndex?: number, endIndex?: number, priceRange?: PriceRange): void;
@@ -0,0 +1,113 @@
1
+ import { KLineData } from '../../types/price';
2
+ export interface PriceAxisOptions {
3
+ x: number;
4
+ y: number;
5
+ width: number;
6
+ height: number;
7
+ priceRange: {
8
+ maxPrice: number;
9
+ minPrice: number;
10
+ };
11
+ yPaddingPx?: number;
12
+ dpr: number;
13
+ ticks?: number;
14
+ bgColor?: string;
15
+ textColor?: string;
16
+ lineColor?: string;
17
+ fontSize?: number;
18
+ paddingX?: number;
19
+ }
20
+ /** 右侧价格轴(固定,不随 translate/scroll 变化) */
21
+ export declare function drawPriceAxis(ctx: CanvasRenderingContext2D, opts: PriceAxisOptions): void;
22
+ export interface TimeAxisOptions {
23
+ x: number;
24
+ y: number;
25
+ width: number;
26
+ height: number;
27
+ data: KLineData[];
28
+ scrollLeft: number;
29
+ kWidth: number;
30
+ kGap: number;
31
+ startIndex: number;
32
+ endIndex: number;
33
+ dpr: number;
34
+ bgColor?: string;
35
+ textColor?: string;
36
+ lineColor?: string;
37
+ fontSize?: number;
38
+ /** 左右内边距(逻辑像素),避免月份/年份文字贴边 */
39
+ paddingX?: number;
40
+ }
41
+ export interface LastPriceLineOptions {
42
+ /** 绘图区宽度(逻辑像素) */
43
+ plotWidth: number;
44
+ /** 绘图区高度(逻辑像素) */
45
+ plotHeight: number;
46
+ /** 当前滚动位置(逻辑像素) */
47
+ scrollLeft: number;
48
+ /** 可视范围:用于确定虚线的起止 worldX */
49
+ startIndex: number;
50
+ endIndex: number;
51
+ /** K线布局 */
52
+ kWidth: number;
53
+ kGap: number;
54
+ /** 价格范围 */
55
+ priceRange: {
56
+ maxPrice: number;
57
+ minPrice: number;
58
+ };
59
+ /** 最新价 */
60
+ lastPrice: number;
61
+ /** Y轴 padding(与绘图区一致) */
62
+ yPaddingPx?: number;
63
+ dpr: number;
64
+ color?: string;
65
+ }
66
+ export interface CrosshairPriceLabelOptions {
67
+ x: number;
68
+ y: number;
69
+ width: number;
70
+ height: number;
71
+ /** 十字线的 y(相对该 canvas 的逻辑像素坐标) */
72
+ crosshairY: number;
73
+ priceRange: {
74
+ maxPrice: number;
75
+ minPrice: number;
76
+ };
77
+ yPaddingPx?: number;
78
+ dpr: number;
79
+ bgColor?: string;
80
+ textColor?: string;
81
+ fontSize?: number;
82
+ paddingX?: number;
83
+ }
84
+ export interface CrosshairTimeLabelOptions {
85
+ x: number;
86
+ y: number;
87
+ width: number;
88
+ height: number;
89
+ /** 十字线的 x(相对该 canvas 的逻辑像素坐标) */
90
+ crosshairX: number;
91
+ /** 命中的交易日时间戳(毫秒) */
92
+ timestamp: number;
93
+ dpr: number;
94
+ bgColor?: string;
95
+ textColor?: string;
96
+ fontSize?: number;
97
+ paddingX?: number;
98
+ paddingY?: number;
99
+ }
100
+ /**
101
+ * 在底部时间轴上绘制"十字线日期标签"
102
+ * 说明:该函数假设时间轴背景/刻度已绘制完(即 drawTimeAxis 之后调用)。
103
+ */
104
+ export declare function drawCrosshairTimeLabel(ctx: CanvasRenderingContext2D, opts: CrosshairTimeLabelOptions): void;
105
+ /**
106
+ * 在右侧价格轴上绘制"十字线价格标签"
107
+ * 说明:该函数假设价格轴背景/刻度已绘制完(即 drawPriceAxis 之后调用)。
108
+ */
109
+ export declare function drawCrosshairPriceLabel(ctx: CanvasRenderingContext2D, opts: CrosshairPriceLabelOptions): void;
110
+ /** 绘制"最新价水平虚线"(画在 plotCanvas 的 world 坐标系:需在 translate(-scrollLeft,0) 之后调用) */
111
+ export declare function drawLastPriceDashedLine(ctx: CanvasRenderingContext2D, opts: LastPriceLineOptions): void;
112
+ /** 底部时间轴(X方向随 scrollLeft 变化) */
113
+ export declare function drawTimeAxis(ctx: CanvasRenderingContext2D, opts: TimeAxisOptions): void;
@@ -0,0 +1,30 @@
1
+ import { KLineData } from '../../types/price';
2
+ import { drawOption, PriceRange } from './kLine';
3
+ export interface GridOption {
4
+ /** 网格线颜色 */
5
+ gridColor?: string;
6
+ /** 最新价线颜色 */
7
+ lastPriceColor?: string;
8
+ /** 文本颜色 */
9
+ textColor?: string;
10
+ /** 文字字号 */
11
+ fontSize?: number;
12
+ /** 右侧文字 padding */
13
+ rightTextPadding?: number;
14
+ /** 底部日期文字 padding */
15
+ bottomTextPadding?: number;
16
+ /** 价格刻度档位数(默认 10) */
17
+ priceTicks?: number;
18
+ }
19
+ /**
20
+ * 价格/日期网格层(绘制在平移后的坐标系:ctx 已 translate(-scrollLeft, 0))
21
+ * - Y轴:min/max 价格线 + 右侧价格文字
22
+ * - X轴:日期变更处画竖线 + 底部日期文字
23
+ * - 最新价:可视区最后一根 close 在[min,max]内则画横向虚线 + 右侧文字
24
+ */
25
+ export declare function drawGridLayer(ctx: CanvasRenderingContext2D, data: KLineData[], option: drawOption, logicHeight: number, dpr: number, startIndex: number, endIndex: number, priceRange: PriceRange,
26
+ /**
27
+ * 右侧价格轴所在的“世界坐标X”(在 translate(-scrollLeft, 0) 之后的坐标系里)
28
+ * 通常传入:scrollLeft + viewWidth
29
+ */
30
+ axisRightX: number, gridOpt?: GridOption): void;
@@ -4,13 +4,11 @@ export interface drawOption {
4
4
  kGap: number;
5
5
  yPaddingPx?: number;
6
6
  }
7
+ export interface PriceRange {
8
+ maxPrice: number;
9
+ minPrice: number;
10
+ }
7
11
  /**
8
- * K 线图绘制
9
- * @param ctx
10
- * @param data
11
- * @param option
12
- * @param logicHeight
13
- * @param dpr
14
- * @returns
12
+ * K线图绘制 - 影线固定为 1 物理像素宽
15
13
  */
16
- export declare function kLineDraw(ctx: CanvasRenderingContext2D, data: KLineData[], option: drawOption, logicHeight: number, dpr?: number): void;
14
+ export declare function kLineDraw(ctx: CanvasRenderingContext2D, data: KLineData[], option: drawOption, logicHeight: number, dpr?: number, startIndex?: number, endIndex?: number, priceRange?: PriceRange): void;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * 像素对齐工具函数 - 逻辑像素空间(配合 ctx.scale(dpr) 使用)
3
+ */
4
+ /**
5
+ * 将逻辑坐标对齐到物理像素边界(用于矩形填充)
6
+ */
7
+ export declare function roundToPhysicalPixel(value: number, dpr: number): number;
8
+ /**
9
+ * 将逻辑坐标对齐到物理像素中心(用于 1px 线条)
10
+ */
11
+ export declare function alignToPhysicalPixelCenter(value: number, dpr: number): number;
12
+ /**
13
+ * 对齐矩形到物理像素边界
14
+ */
15
+ export declare function alignRect(x: number, y: number, width: number, height: number, dpr: number): {
16
+ x: number;
17
+ y: number;
18
+ width: number;
19
+ height: number;
20
+ };
21
+ /**
22
+ * 创建用于绘制垂直线的矩形(1 物理像素宽)
23
+ * 所有坐标都对齐到物理像素边界,避免亚像素模糊
24
+ */
25
+ export declare function createVerticalLineRect(centerX: number, y1: number, y2: number, dpr: number): {
26
+ x: number;
27
+ y: number;
28
+ width: number;
29
+ height: number;
30
+ } | null;
31
+ /**
32
+ * 创建用于绘制水平线的矩形(1 物理像素高)
33
+ * 所有坐标都对齐到物理像素边界,避免亚像素模糊
34
+ *
35
+ * @param x1 - 水平线起始点的 X 坐标(逻辑像素)
36
+ * @param x2 - 水平线结束点的 X 坐标(逻辑像素)
37
+ * @param centerY - 水平线中心 Y 坐标(逻辑像素)
38
+ * @param dpr - 设备像素比,用于将逻辑像素转换为物理像素
39
+ * @returns 返回对齐到物理像素的矩形信息,如果 x1 和 x2 相等则返回 null
40
+ * 返回对象包含 x, y, width, height 属性,单位均为逻辑像素
41
+ * 高度(height)始终为 1/dpr(即 1 物理像素的高度)
42
+ */
43
+ export declare function createHorizontalLineRect(x1: number, x2: number, centerY: number, dpr: number): {
44
+ x: number;
45
+ y: number;
46
+ width: number;
47
+ height: number;
48
+ } | null;
@@ -0,0 +1,14 @@
1
+ import { KLineData } from '../../types/price';
2
+ export { formatShanghaiDate } from '../dateFormat';
3
+ export declare const UP_COLOR = "rgba(214, 10, 34, 1)";
4
+ export declare const DOWN_COLOR = "rgba(3, 123, 102, 1)";
5
+ export declare const NEUTRAL_COLOR = "rgba(0, 0, 0, 0.78)";
6
+ export declare function getUpDownColor(delta: number): string;
7
+ /** 成交量/成交额单位换算:万/亿 */
8
+ export declare function formatWanYi(n: number, digits?: number): string;
9
+ export declare function formatSignedNumber(n: number, digits?: number): string;
10
+ export declare function formatPercent(n: number, digits?: number): string;
11
+ export declare function formatSignedPercent(n: number, digits?: number): string;
12
+ export declare function calcOpenColor(k: KLineData, prev?: KLineData): string;
13
+ export declare function calcCloseColor(k: KLineData): string;
14
+ export declare function calcChangeColor(k: KLineData): string;
@@ -0,0 +1,2 @@
1
+ import { KLineData } from '../../types/price';
2
+ export declare function calcMAAtIndex(data: KLineData[], index: number, period: number): number | undefined;
@@ -0,0 +1,10 @@
1
+ import { KLineData } from '../../types/price';
2
+ export type PriceRange = {
3
+ maxPrice: number;
4
+ minPrice: number;
5
+ };
6
+ export declare function getVisibleRange(scrollLeft: number, viewWidth: number, kWidth: number, kGap: number, totalDataCount: number): {
7
+ start: number;
8
+ end: number;
9
+ };
10
+ export declare function getVisiblePriceRange(data: KLineData[], startIndex: number, endIndex: number): PriceRange;
@@ -1,3 +1,3 @@
1
1
  type TagLevel = 'info' | 'success' | 'warn' | 'error';
2
- export declare function tagLog(level: TagLevel, tag: string, value: unknown): void;
2
+ export declare function tagLog(level: TagLevel | string, value: unknown): void;
3
3
  export {};
@@ -1 +1,7 @@
1
1
  export declare function priceToY(price: number, maxPrice: number, minPrice: number, canvasHeight: number, paddingTop: number, paddingBottom: number): number;
2
+ /**
3
+ * 将逻辑像素 y 反算回价格
4
+ * - y 是相对于绘图区顶部的逻辑像素坐标(不含额外 translate)
5
+ * - paddingTop/paddingBottom 需与 priceToY 使用一致
6
+ */
7
+ export declare function yToPrice(y: number, maxPrice: number, minPrice: number, canvasHeight: number, paddingTop: number, paddingBottom: number): number;
package/package.json CHANGED
@@ -1,56 +1,58 @@
1
- {
2
- "name": "@363045841yyt/klinechart",
3
- "version": "0.1.0",
4
- "type": "module",
5
- "engines": {
6
- "node": "^20.19.0 || >=22.12.0"
7
- },
8
- "scripts": {
9
- "dev": "vite",
10
- "build": "run-p type-check \"build-only {@}\" --",
11
- "build-only": "vite build",
12
- "preview": "vite preview",
13
- "type-check": "vue-tsc --build",
14
- "test:unit": "vitest",
15
- "format": "prettier --write --experimental-cli src/",
16
- "prepublishOnly": "pnpm run build-only"
17
- },
18
- "main": "./dist/index.cjs",
19
- "module": "./dist/index.js",
20
- "types": "./dist/index.d.ts",
21
- "exports": {
22
- ".": {
23
- "types": "./dist/index.d.ts",
24
- "import": "./dist/index.js",
25
- "require": "./dist/index.cjs"
26
- },
27
- "./style.css": "./dist/kmap.css"
28
- },
29
- "files": [
30
- "dist"
31
- ],
32
- "peerDependencies": {
33
- "vue": "^3.5.0"
34
- },
35
- "dependencies": {
36
- "axios": "^1.13.2",
37
- "pinia": "^3.0.4"
38
- },
39
- "devDependencies": {
40
- "@tsconfig/node24": "^24.0.3",
41
- "@types/jsdom": "^27.0.0",
42
- "@types/node": "^24.10.4",
43
- "@vitejs/plugin-vue": "^6.0.3",
44
- "@vue/test-utils": "^2.4.6",
45
- "@vue/tsconfig": "^0.8.1",
46
- "jsdom": "^27.4.0",
47
- "npm-run-all2": "^8.0.4",
48
- "prettier": "3.7.4",
49
- "typescript": "~5.9.3",
50
- "vite": "npm:rolldown-vite@^7.3.0",
51
- "vite-plugin-dts": "^4.5.4",
52
- "vite-plugin-vue-devtools": "^8.0.5",
53
- "vitest": "^4.0.16",
54
- "vue-tsc": "^3.2.1"
55
- }
1
+ {
2
+ "name": "@363045841yyt/klinechart",
3
+ "version": "0.1.2",
4
+ "type": "module",
5
+ "engines": {
6
+ "node": "^20.19.0 || >=22.12.0"
7
+ },
8
+ "scripts": {
9
+ "dev": "vite",
10
+ "dev:lan": "vite --host 0.0.0.0",
11
+ "aktools": "cd .. && cd aktoolshttp && uv run python -m aktools",
12
+ "build": "run-p type-check \"build-only {@}\" --",
13
+ "build-only": "vite build",
14
+ "preview": "vite preview",
15
+ "type-check": "vue-tsc --build",
16
+ "test:unit": "vitest",
17
+ "format": "prettier --write --experimental-cli src/",
18
+ "prepublishOnly": "pnpm run build-only"
19
+ },
20
+ "main": "./dist/index.cjs",
21
+ "module": "./dist/index.js",
22
+ "types": "./dist/index.d.ts",
23
+ "exports": {
24
+ ".": {
25
+ "types": "./dist/index.d.ts",
26
+ "import": "./dist/index.js",
27
+ "require": "./dist/index.cjs"
28
+ },
29
+ "./style.css": "./dist/kmap.css"
30
+ },
31
+ "files": [
32
+ "dist"
33
+ ],
34
+ "peerDependencies": {
35
+ "vue": "^3.5.0"
36
+ },
37
+ "dependencies": {
38
+ "axios": "^1.13.2",
39
+ "pinia": "^3.0.4"
40
+ },
41
+ "devDependencies": {
42
+ "@tsconfig/node24": "^24.0.3",
43
+ "@types/jsdom": "^27.0.0",
44
+ "@types/node": "^24.10.4",
45
+ "@vitejs/plugin-vue": "^6.0.3",
46
+ "@vue/test-utils": "^2.4.6",
47
+ "@vue/tsconfig": "^0.8.1",
48
+ "jsdom": "^27.4.0",
49
+ "npm-run-all2": "^8.0.4",
50
+ "prettier": "3.7.4",
51
+ "typescript": "~5.9.3",
52
+ "vite": "npm:rolldown-vite@^7.3.0",
53
+ "vite-plugin-dts": "^4.5.4",
54
+ "vite-plugin-vue-devtools": "^8.0.5",
55
+ "vitest": "^4.0.16",
56
+ "vue-tsc": "^3.2.1"
57
+ }
56
58
  }
@@ -1,5 +0,0 @@
1
- import { KLineData } from '../../types/price';
2
- import { drawOption } from './kLine';
3
- export declare function drawMA10Line(ctx: CanvasRenderingContext2D, data: KLineData[], option: drawOption, logicHeight: number, dpr?: number): void;
4
- export declare function drawMA20Line(ctx: CanvasRenderingContext2D, data: KLineData[], option: drawOption, logicHeight: number, dpr?: number): void;
5
- export declare function drawMA5Line(ctx: CanvasRenderingContext2D, data: KLineData[], option: drawOption, logicHeight: number, dpr?: number): void;