kline-charts-react 0.0.1 → 0.0.3
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 +128 -29
- package/dist/SubPaneTitle-B2y5WQqq.js +2019 -0
- package/dist/SubPaneTitle-BAu9MdQQ.cjs +1 -0
- package/dist/components/IndicatorDisplay/IndicatorDisplay.d.ts +3 -2
- package/dist/hooks/useEcharts.d.ts +1 -1
- package/dist/hooks/useKlineData.d.ts +2 -2
- package/dist/index.cjs +7 -51
- package/dist/index.d.ts +2 -4
- package/dist/index.js +482 -26331
- package/dist/kline-charts-react.css +1 -1
- package/dist/types/props.d.ts +28 -23
- package/dist/types/theme.d.ts +4 -0
- package/dist/unstable.cjs +1 -0
- package/dist/unstable.d.ts +2 -0
- package/dist/unstable.js +53 -0
- package/dist/utils/controllable.d.ts +7 -0
- package/dist/utils/formatters.d.ts +4 -21
- package/dist/utils/indicatorMeta.d.ts +7 -0
- package/dist/utils/marketSessions.d.ts +2 -0
- package/dist/utils/optionBuilder.d.ts +20 -1
- package/package.json +32 -9
- package/dist/index.umd.js +0 -51
package/README.md
CHANGED
|
@@ -47,7 +47,7 @@ pnpm add kline-charts-react
|
|
|
47
47
|
### Peer Dependencies
|
|
48
48
|
|
|
49
49
|
```bash
|
|
50
|
-
npm install react react-dom
|
|
50
|
+
npm install react react-dom echarts
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
## 快速开始
|
|
@@ -82,12 +82,41 @@ function App() {
|
|
|
82
82
|
```tsx
|
|
83
83
|
<KLineChart
|
|
84
84
|
symbol="sh600519"
|
|
85
|
-
|
|
85
|
+
defaultPeriod="weekly" // 非受控模式下默认显示周 K
|
|
86
86
|
/>
|
|
87
87
|
```
|
|
88
88
|
|
|
89
89
|
可选周期:`timeline` | `timeline5` | `1` | `5` | `15` | `30` | `60` | `daily` | `weekly` | `monthly`
|
|
90
90
|
|
|
91
|
+
### 受控 / 非受控
|
|
92
|
+
|
|
93
|
+
`period`、`adjust`、`indicators` 支持受控模式;`defaultPeriod`、`defaultAdjust`、`defaultIndicators` 用于非受控默认值。
|
|
94
|
+
|
|
95
|
+
```tsx
|
|
96
|
+
// 非受控
|
|
97
|
+
<KLineChart
|
|
98
|
+
symbol="sh600519"
|
|
99
|
+
defaultPeriod="daily"
|
|
100
|
+
defaultAdjust="qfq"
|
|
101
|
+
defaultIndicators={['ma', 'volume', 'macd']}
|
|
102
|
+
/>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
```tsx
|
|
106
|
+
// 受控
|
|
107
|
+
function App() {
|
|
108
|
+
const [period, setPeriod] = useState<PeriodType>('daily');
|
|
109
|
+
|
|
110
|
+
return (
|
|
111
|
+
<KLineChart
|
|
112
|
+
symbol="sh600519"
|
|
113
|
+
period={period}
|
|
114
|
+
onPeriodChange={setPeriod}
|
|
115
|
+
/>
|
|
116
|
+
);
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
91
120
|
### 配置技术指标
|
|
92
121
|
|
|
93
122
|
```tsx
|
|
@@ -128,13 +157,16 @@ function App() {
|
|
|
128
157
|
import { KLineChart, type KLineDataProvider } from 'kline-charts-react';
|
|
129
158
|
|
|
130
159
|
const customProvider: KLineDataProvider = {
|
|
160
|
+
// K 线数据(必须实现)
|
|
131
161
|
getKline: async (params, signal) => {
|
|
132
|
-
|
|
133
|
-
|
|
162
|
+
// params: { symbol, market, period, adjust }
|
|
163
|
+
const res = await fetch(`/api/kline?symbol=${params.symbol}&period=${params.period}`, { signal });
|
|
164
|
+
return res.json(); // 返回 KlineData[]
|
|
134
165
|
},
|
|
166
|
+
// 分时数据(可选,仅分时模式使用)
|
|
135
167
|
getTimeline: async (params, signal) => {
|
|
136
168
|
const res = await fetch(`/api/timeline?symbol=${params.symbol}`, { signal });
|
|
137
|
-
return res.json();
|
|
169
|
+
return res.json(); // 返回 TimelineData[]
|
|
138
170
|
},
|
|
139
171
|
};
|
|
140
172
|
|
|
@@ -144,6 +176,42 @@ const customProvider: KLineDataProvider = {
|
|
|
144
176
|
/>
|
|
145
177
|
```
|
|
146
178
|
|
|
179
|
+
#### KlineData 数据结构
|
|
180
|
+
|
|
181
|
+
`getKline` 需要返回 `KlineData[]`,每条数据的字段如下:
|
|
182
|
+
|
|
183
|
+
```ts
|
|
184
|
+
interface KlineData {
|
|
185
|
+
date: string; // 日期/时间,如 "2024-01-15" 或 "2024-01-15 09:35"
|
|
186
|
+
open: number | null; // 开盘价
|
|
187
|
+
close: number | null; // 收盘价
|
|
188
|
+
high: number | null; // 最高价
|
|
189
|
+
low: number | null; // 最低价
|
|
190
|
+
volume: number | null; // 成交量
|
|
191
|
+
amount: number | null; // 成交额
|
|
192
|
+
changePercent?: number; // 涨跌幅(可选)
|
|
193
|
+
change?: number; // 涨跌额(可选)
|
|
194
|
+
amplitude?: number; // 振幅(可选)
|
|
195
|
+
turnoverRate?: number; // 换手率(可选)
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
#### TimelineData 数据结构
|
|
200
|
+
|
|
201
|
+
`getTimeline` 需要返回 `TimelineData[]`,用于分时图展示:
|
|
202
|
+
|
|
203
|
+
```ts
|
|
204
|
+
interface TimelineData {
|
|
205
|
+
time: string; // 时间,如 "09:30"
|
|
206
|
+
price: number; // 当前价格
|
|
207
|
+
volume: number; // 累计成交量
|
|
208
|
+
amount: number; // 累计成交额
|
|
209
|
+
avgPrice: number; // 均价
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
> 技术指标(MA、MACD、KDJ 等)会由组件自动根据 K 线数据计算,无需在数据源中提供。
|
|
214
|
+
|
|
147
215
|
### 使用 Ref 控制图表
|
|
148
216
|
|
|
149
217
|
```tsx
|
|
@@ -172,6 +240,14 @@ function App() {
|
|
|
172
240
|
}
|
|
173
241
|
```
|
|
174
242
|
|
|
243
|
+
### `unstable` 二级导出
|
|
244
|
+
|
|
245
|
+
主入口只保留稳定导出。如果你明确需要内部 hooks / 子组件,请从 `kline-charts-react/unstable` 引入:
|
|
246
|
+
|
|
247
|
+
```tsx
|
|
248
|
+
import { useKlineData, Toolbar } from 'kline-charts-react/unstable';
|
|
249
|
+
```
|
|
250
|
+
|
|
175
251
|
## API 文档
|
|
176
252
|
|
|
177
253
|
### KLineChartProps
|
|
@@ -180,12 +256,15 @@ function App() {
|
|
|
180
256
|
|------|------|--------|------|
|
|
181
257
|
| `symbol` | `string` | **必填** | 股票代码,如 `sh600519`、`sz000001` |
|
|
182
258
|
| `market` | `'A' \| 'HK' \| 'US'` | `'A'` | 市场类型 |
|
|
183
|
-
| `period` | `PeriodType` |
|
|
184
|
-
| `
|
|
259
|
+
| `period` | `PeriodType` | - | 当前 K 线周期(受控) |
|
|
260
|
+
| `defaultPeriod` | `PeriodType` | `'daily'` | 非受控模式下默认周期 |
|
|
261
|
+
| `adjust` | `'' \| 'qfq' \| 'hfq'` | - | 当前复权类型(受控) |
|
|
262
|
+
| `defaultAdjust` | `'' \| 'qfq' \| 'hfq'` | `'qfq'` | 非受控模式下默认复权 |
|
|
185
263
|
| `height` | `number \| string` | `500` | 图表高度 |
|
|
186
264
|
| `width` | `number \| string` | `'100%'` | 图表宽度 |
|
|
187
265
|
| `theme` | `'light' \| 'dark' \| ThemeConfig` | `'light'` | 主题配置 |
|
|
188
|
-
| `indicators` | `IndicatorType[]` |
|
|
266
|
+
| `indicators` | `IndicatorType[]` | - | 当前启用的技术指标(受控) |
|
|
267
|
+
| `defaultIndicators` | `IndicatorType[]` | `['ma', 'volume', 'macd']` | 非受控模式下默认指标 |
|
|
189
268
|
| `indicatorOptions` | `IndicatorOptions` | - | 指标参数配置 |
|
|
190
269
|
| `showToolbar` | `boolean` | `true` | 是否显示工具栏 |
|
|
191
270
|
| `showPeriodSelector` | `boolean` | `true` | 是否显示周期切换 |
|
|
@@ -197,8 +276,13 @@ function App() {
|
|
|
197
276
|
| `requestOptions` | `RequestOptions` | - | 请求控制配置 |
|
|
198
277
|
| `autoRefresh` | `boolean \| AutoRefreshOptions` | - | 自动刷新配置 |
|
|
199
278
|
| `echartsOption` | `EChartsOption` | - | 自定义 ECharts 配置 |
|
|
279
|
+
| `echartsOptionMerge` | `EChartsOptionMergeOptions` | - | ECharts Option 合并策略 |
|
|
280
|
+
| `panes` | `PaneConfig[]` | - | 自定义面板布局,支持单副图多指标 |
|
|
200
281
|
| `onDataLoad` | `(data: KlineData[]) => void` | - | 数据加载回调 |
|
|
201
282
|
| `onPeriodChange` | `(period: PeriodType) => void` | - | 周期切换回调 |
|
|
283
|
+
| `onAdjustChange` | `(adjust: AdjustType) => void` | - | 复权切换回调 |
|
|
284
|
+
| `onIndicatorsChange` | `(indicators: IndicatorType[]) => void` | - | 指标切换回调 |
|
|
285
|
+
| `onVisibleRangeChange` | `({ start, end }) => void` | - | 当前 dataZoom 可见范围变化 |
|
|
202
286
|
| `onError` | `(error: Error) => void` | - | 错误回调 |
|
|
203
287
|
|
|
204
288
|
### KLineChartRef
|
|
@@ -207,9 +291,11 @@ function App() {
|
|
|
207
291
|
|------|------|
|
|
208
292
|
| `refresh()` | 刷新数据 |
|
|
209
293
|
| `setPeriod(period)` | 切换周期 |
|
|
294
|
+
| `setAdjust(adjust)` | 切换复权 |
|
|
210
295
|
| `setIndicators(indicators)` | 切换指标 |
|
|
211
296
|
| `zoomTo(start, end)` | 缩放到指定范围 |
|
|
212
297
|
| `resetZoom()` | 重置缩放 |
|
|
298
|
+
| `getVisibleRange()` | 获取当前可见范围 `{ start, end }` |
|
|
213
299
|
| `getEchartsInstance()` | 获取 ECharts 实例 |
|
|
214
300
|
| `exportImage(type?)` | 导出图片(png/jpeg) |
|
|
215
301
|
| `getData()` | 获取当前数据 |
|
|
@@ -335,25 +421,28 @@ export default {
|
|
|
335
421
|
```
|
|
336
422
|
kline-charts-react/
|
|
337
423
|
├── src/
|
|
338
|
-
│ ├── components/
|
|
339
|
-
│ │ ├── Loading/
|
|
340
|
-
│ │ ├── PeriodSelector/
|
|
341
|
-
│ │ ├── IndicatorSelector
|
|
342
|
-
│ │ ├── Toolbar/
|
|
343
|
-
│ │
|
|
344
|
-
│
|
|
345
|
-
│
|
|
346
|
-
│ │ ├──
|
|
347
|
-
│ │
|
|
348
|
-
│
|
|
349
|
-
│
|
|
350
|
-
│ │ ├──
|
|
351
|
-
│ │
|
|
352
|
-
│ ├──
|
|
353
|
-
│ ├──
|
|
354
|
-
│ └──
|
|
355
|
-
├──
|
|
356
|
-
|
|
424
|
+
│ ├── components/ # 子组件
|
|
425
|
+
│ │ ├── Loading/ # 加载状态
|
|
426
|
+
│ │ ├── PeriodSelector/ # 周期切换
|
|
427
|
+
│ │ ├── IndicatorSelector/# 指标选择器
|
|
428
|
+
│ │ ├── Toolbar/ # 工具栏
|
|
429
|
+
│ │ ├── IndicatorDisplay/ # 主图指标数值
|
|
430
|
+
│ │ └── SubPaneTitle/ # 副图标题
|
|
431
|
+
│ ├── hooks/ # React Hooks
|
|
432
|
+
│ │ ├── useKlineData.ts # 数据获取 & 指标计算
|
|
433
|
+
│ │ ├── useEcharts.ts # ECharts 实例管理
|
|
434
|
+
│ │ └── useZoomHistory.ts # 缩放历史
|
|
435
|
+
│ ├── utils/ # 工具函数
|
|
436
|
+
│ │ ├── indicators.ts # 技术指标计算
|
|
437
|
+
│ │ ├── optionBuilder.ts # K 线 ECharts 配置
|
|
438
|
+
│ │ ├── timelineBuilder.ts# 分时图 ECharts 配置
|
|
439
|
+
│ │ ├── formatters.ts # 数据格式化
|
|
440
|
+
│ │ └── cache.ts # 数据缓存
|
|
441
|
+
│ ├── types/ # 类型定义
|
|
442
|
+
│ ├── KLineChart.tsx # 主组件
|
|
443
|
+
│ └── index.ts # 入口
|
|
444
|
+
├── playground/ # 调试环境
|
|
445
|
+
└── dist/ # 构建产物
|
|
357
446
|
```
|
|
358
447
|
|
|
359
448
|
## 开发
|
|
@@ -368,16 +457,26 @@ yarn dev
|
|
|
368
457
|
# 构建组件库
|
|
369
458
|
yarn build
|
|
370
459
|
|
|
371
|
-
# 构建 playground
|
|
460
|
+
# 构建 playground 生产版本
|
|
372
461
|
yarn build:playground
|
|
373
462
|
|
|
374
463
|
# 代码检查
|
|
375
464
|
yarn lint
|
|
465
|
+
|
|
466
|
+
# 类型检查
|
|
467
|
+
yarn typecheck
|
|
468
|
+
|
|
469
|
+
# 单元测试
|
|
470
|
+
yarn test:run
|
|
471
|
+
|
|
472
|
+
# 打包校验
|
|
473
|
+
yarn pack:check
|
|
376
474
|
```
|
|
377
475
|
|
|
378
476
|
**开发模式说明**:
|
|
379
477
|
- `yarn dev` 会启动 playground,直接引用 `src/` 下的源码,修改源码后自动热更新
|
|
380
|
-
-
|
|
478
|
+
- `playground/` 通过本地 `file:..` 依赖引用当前仓库,避免和 npm 上的历史版本漂移
|
|
479
|
+
- CI 会执行 `lint`、`typecheck`、`test:run`、`build`、`build:playground` 和 `pack:check`
|
|
381
480
|
|
|
382
481
|
## 已知限制
|
|
383
482
|
|