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 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
- period="weekly" // K 线
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
- const res = await fetch(`/api/kline?symbol=${params.symbol}`, { signal });
133
- return res.json();
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` | `'daily'` | K 线周期 |
184
- | `adjust` | `'' \| 'qfq' \| 'hfq'` | `'qfq'` | 复权类型(前复权) |
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[]` | `['ma', 'volume', 'macd']` | 启用的技术指标 |
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
- │ │ └── MADisplay/
344
- ├── hooks/ # React Hooks
345
- ├── useKlineData.ts
346
- │ │ ├── useEcharts.ts
347
- │ │ └── useZoomHistory.ts
348
- ├── utils/ # 工具函数
349
- ├── indicators.ts
350
- │ │ ├── optionBuilder.ts
351
- │ │ └── timelineBuilder.ts
352
- │ ├── types/ # 类型定义
353
- │ ├── KLineChart.tsx # 主组件
354
- │ └── index.ts # 入口
355
- ├── playground/ # 调试环境
356
- └── dist/ # 构建产物
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 生产版本(使用 npm 包)
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
- - 生产构建时,playground 会使用 npm 上发布的 `kline-charts-react`
478
+ - `playground/` 通过本地 `file:..` 依赖引用当前仓库,避免和 npm 上的历史版本漂移
479
+ - CI 会执行 `lint`、`typecheck`、`test:run`、`build`、`build:playground` 和 `pack:check`
381
480
 
382
481
  ## 已知限制
383
482