waveform-analysis 0.1.66 → 0.1.67
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 +124 -3
- package/dist/index.cjs +1 -1
- package/dist/index.js +1059 -939
- package/dist/style.css +1 -1
- package/dist/types/components/WaveformChart.vue.d.ts +4 -0
- package/dist/types/components/core/grid.d.ts +1 -1
- package/dist/types/components/core/layout.d.ts +2 -2
- package/dist/types/components/core/pagination.d.ts +2 -0
- package/dist/types/components/core/title.d.ts +2 -1
- package/dist/types/components/core/trackLayoutBuilder.d.ts +4 -0
- package/dist/types/components/core/useWaveformChartController.d.ts +6 -0
- package/dist/types/components/core/useWaveformLayout.d.ts +1 -0
- package/dist/types/components/core/useWaveformPresentation.d.ts +1 -0
- package/dist/types/components/core/useWaveformYAxisLayout.d.ts +31 -0
- package/dist/types/components/core/waveformChartTypes.d.ts +9 -2
- package/dist/types/components/core/yAxisLayoutMetrics.d.ts +1 -1
- package/dist/types/components/data/types.d.ts +1 -1
- package/dist/types/components/interaction/interactionTarget.d.ts +1 -0
- package/dist/types/components/interaction/remoteViewport.d.ts +8 -0
- package/dist/types/components/interaction/useWaveformViewport.d.ts +1 -2
- package/dist/types/components/interaction/viewportDomain.d.ts +1 -2
- package/dist/types/components/interaction/viewportPan.d.ts +4 -0
- package/dist/types/components/rendering/WaveformLegend.vue.d.ts +2 -0
- package/dist/types/components/rendering/WaveformTrack.vue.d.ts +4 -0
- package/dist/types/components/rendering/WaveformTrackAxes.vue.d.ts +5 -1
- package/dist/types/data/recordedDampedWaveform.d.ts +1 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/types/chart.d.ts +13 -0
- package/dist/types/types/index.d.ts +1 -1
- package/package.json +1 -1
- package/src/components/WaveformChart.css +5 -0
- package/src/components/WaveformChart.vue +2 -0
- package/src/components/WaveformChartView.vue +14 -3
- package/src/components/core/grid.ts +4 -1
- package/src/components/core/layout.ts +16 -2
- package/src/components/core/pagination.ts +17 -0
- package/src/components/core/title.ts +7 -3
- package/src/components/core/trackLayoutBuilder.ts +14 -4
- package/src/components/core/useWaveformChartController.ts +17 -1
- package/src/components/core/useWaveformChartLifecycle.ts +10 -16
- package/src/components/core/useWaveformLayout.ts +35 -91
- package/src/components/core/useWaveformPresentation.ts +17 -3
- package/src/components/core/useWaveformYAxisLayout.ts +140 -0
- package/src/components/core/waveformChartTypes.ts +12 -0
- package/src/components/core/yAxisLayoutMetrics.ts +11 -2
- package/src/components/data/types.ts +3 -0
- package/src/components/interaction/interactionTarget.ts +10 -0
- package/src/components/interaction/remoteViewport.ts +53 -0
- package/src/components/interaction/useWaveformViewport.ts +17 -55
- package/src/components/interaction/useWaveformZoom.ts +7 -7
- package/src/components/interaction/viewportDomain.ts +10 -14
- package/src/components/interaction/viewportPan.ts +82 -0
- package/src/components/rendering/WaveformLegend.vue +10 -1
- package/src/components/rendering/WaveformTrack.vue +13 -2
- package/src/components/rendering/WaveformTrackAxes.vue +15 -4
- package/src/data/recordedDampedWaveform.ts +3 -0
- package/src/data/simulatedWaveforms.ts +12 -10
- package/src/index.ts +3 -0
- package/src/types/chart.ts +16 -0
- package/src/types/index.ts +3 -0
package/README.md
CHANGED
|
@@ -91,12 +91,15 @@ const data = ref<WaveformData>({
|
|
|
91
91
|
| `data` | `WaveformData` | 必填 | 波形数据 |
|
|
92
92
|
| `displayMode` | `'independent' \| 'separated' \| 'compact'` | `'independent'` | 图框布局 |
|
|
93
93
|
| `overlayMode` | `'single-axis' \| 'multi-axis'` | `'single-axis'` | 叠加曲线的 Y 轴模式 |
|
|
94
|
+
| `layoutPreset` | `'default' \| 'edge-compact'` | `'default'` | 标题贴边、时间标签与响应式分页布局 |
|
|
95
|
+
| `unitDisplayMode` | `'axis' \| 'legend-single-series'` | `'axis'` | 可选的图表级单位展示规则 |
|
|
94
96
|
| `timeUnit` | `'s' \| 'ms'` | `'ms'` | 坐标轴和 tooltip 展示单位 |
|
|
95
97
|
| `xLabel` / `yLabel` | `string` | `时间(timeUnit)` / `'幅值'` | 坐标轴名称 |
|
|
96
98
|
| `lineColor` | `string` | `'#0960bd'` | 单波形默认颜色 |
|
|
97
99
|
| `width` / `height` | `number` | 自适应 | 组件总尺寸,单位为 CSS 像素 |
|
|
98
100
|
| `zoomable` / `showTooltip` | `boolean` | `true` / `true` | 缩放和数值 tooltip 开关 |
|
|
99
101
|
| `pannable` | `boolean` | `false` | 空格拖拽平移开关 |
|
|
102
|
+
| `panXDomain` | `[number, number]` | 未设置 | 远端横向平移边界,使用秒坐标 |
|
|
100
103
|
| `minZoomSpan` | `number` | 未设置 | 最小缩放跨度,使用原始 X 数据单位 |
|
|
101
104
|
| `integerZoom` | `boolean` | `false` | 缩放范围按 X 轴显示单位对齐整数 |
|
|
102
105
|
| `minVisiblePoints` | `number` | `0` | 缩放后至少保留的不同 X 坐标数 |
|
|
@@ -267,6 +270,16 @@ Y 轴会独立计算:
|
|
|
267
270
|
<WaveformChart :data="chartData" :axes="{ y: { nice: false } }" />
|
|
268
271
|
```
|
|
269
272
|
|
|
273
|
+
自动 Y 轴范围可通过 `axes.y.upperPaddingRatio` 设置上限留白比例,默认 `0`。
|
|
274
|
+
例如 `0.1` 使用 `[min, max + (max - min) * 0.1]`,下限不变。
|
|
275
|
+
单值轴按图框合并范围计算,多值轴按各轴对应曲线范围计算;固定范围及手动缩放的 Y
|
|
276
|
+
视口不增加留白。常量数据先沿用非零范围回退,再计算留白。设置 `nice: false`
|
|
277
|
+
可避免刻度算法进一步扩展范围。
|
|
278
|
+
|
|
279
|
+
```vue
|
|
280
|
+
<WaveformChart :data="chartData" :axes="{ y: { nice: false, upperPaddingRatio: 0.1 } }" />
|
|
281
|
+
```
|
|
282
|
+
|
|
270
283
|
### 缩放后按可视区间加载数据
|
|
271
284
|
|
|
272
285
|
组件支持 Plotly 风格的矩形框选缩放:在 zoom 模式下按住鼠标左键拖拽,松开后同时缩放
|
|
@@ -295,7 +308,32 @@ X/Y 轴;设置 `pannable` 后,指针位于图表内时按住空格键拖拽
|
|
|
295
308
|
|
|
296
309
|
`zoom-end.gesture` 用于区分 `wheel` 和 `box`。单轨道 payload 使用 `yStart/yEnd`;共享
|
|
297
310
|
X 轴且包含多个轨道时使用按稳定 track ID 索引的 `yRanges`。平移不会触发 `zoom-end`,
|
|
298
|
-
|
|
311
|
+
平移结束且 X 范围变化时触发 `pan-end`,可在此请求新的时间段。
|
|
312
|
+
|
|
313
|
+
远端时间段平移可配置 `panXDomain` 为整条记录的起止时间。启用后,空格 + 拖动只改变 X
|
|
314
|
+
范围,保持当前窗口宽度和 Y 轴;到达记录边界时停止。未配置或范围无效(非有限值、起点不小于
|
|
315
|
+
终点)时保留原来的数据内 X/Y 平移行为。
|
|
316
|
+
|
|
317
|
+
```vue
|
|
318
|
+
<WaveformChart
|
|
319
|
+
:data="waveformData"
|
|
320
|
+
:pan-x-domain="[recordStartSeconds, recordEndSeconds]"
|
|
321
|
+
pannable
|
|
322
|
+
@pan-end="loadTimeWindow"
|
|
323
|
+
/>
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
`pan-end` 的公开类型为 `WaveformPanEndPayload`,包含以秒表示的 `start/end`;独立模式还包含
|
|
327
|
+
`trackIndex/seriesIds`,业务页面据此只更新对应图框的数据,保留其他序列及稳定 ID。松开鼠标后
|
|
328
|
+
按端点请求,用新的 `data` 引用回填;组件会保持当前 X 视口,包括返回点稀疏、缓存范围更大或
|
|
329
|
+
当前视口与旧数据窗口等宽的情况。不要为每次请求修改 `initialXDomain`,它仍表示重置范围。
|
|
330
|
+
加载期间超出已加载数据的区域显示空白,加载状态和错误提示由业务页面提供。
|
|
331
|
+
|
|
332
|
+
配置远端边界时,滚轮、框选和 `setViewportDomain` 在记录范围内约束,最小缩放跨度及倍率
|
|
333
|
+
仍基于初始数据域;未加载区间没有真实点数,因此不会用 `minVisiblePoints` 将目标窗口拉回
|
|
334
|
+
已加载数据。回填时保留 X 范围,不重新应用点数约束。取消拖动或范围没有变化不会触发 `pan-end`。
|
|
335
|
+
平移过程中用 `zoom-change` 使旧请求失效,完成后用 `pan-end` 发起请求;对缩放仍使用
|
|
336
|
+
`zoom-intent`。业务页面应使用请求序号或取消机制,避免旧响应覆盖更新的目标窗口。
|
|
299
337
|
|
|
300
338
|
调用方应处理加载失败的情况(网络错误、超时等),并保持旧数据或显示加载状态。生产环境建议使用
|
|
301
339
|
`AbortController` 取消过时的请求。
|
|
@@ -367,7 +405,81 @@ chartRef.value?.setViewportDomain(trackDomain, trackIndex)
|
|
|
367
405
|
`timeUnit` 只控制坐标轴和 tooltip 的显示单位。
|
|
368
406
|
|
|
369
407
|
Tooltip 每个系列按 `炮号:通道 (x:值 y:值)` 格式显示。`WaveformSeries.shotNo` 为空或未提供时,
|
|
370
|
-
|
|
408
|
+
炮号显示为“未配置炮号”;配置 `series.unit` 时在通道名后显示 `(单位)`,不显示误差附加文本。
|
|
409
|
+
|
|
410
|
+
### 标题与时间标签贴边布局(可选)
|
|
411
|
+
|
|
412
|
+
```vue
|
|
413
|
+
<WaveformChart
|
|
414
|
+
:data="waveformData"
|
|
415
|
+
layout-preset="edge-compact"
|
|
416
|
+
:title="{ text: 'shot: #1001', textStyle: { fontSize: 18, fontWeight: 700 } }"
|
|
417
|
+
x-label="Time(ms)"
|
|
418
|
+
:plot-margin="{ top: 0, bottom: 44 }"
|
|
419
|
+
/>
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
公共类型 `WaveformLayoutPreset = 'default' | 'edge-compact'`,对应
|
|
423
|
+
`WaveformChartProps.layoutPreset`。默认 `'default'` 保持既有标题、时间标签、宽窄分页
|
|
424
|
+
布局;可与 `unitDisplayMode='legend-single-series'` 一起使用。
|
|
425
|
+
|
|
426
|
+
`'edge-compact'` 下,标题区域使用实际测量的文字显示高度加 8px,顶部约 4px 留白,
|
|
427
|
+
不再强制最少 44px。设置 `plotMargin.top=0` 时,标题底部距内部绘图上边框约 4px。
|
|
428
|
+
无标题、空标题或 `title.visible=false` 时不预留标题区。
|
|
429
|
+
标题字体仍由 `title.textStyle` 控制,保留长标题换行及旋转缩放(旋转标题区域上限
|
|
430
|
+
仍为 160px)。测量完成前使用文字尺寸估计,不重复放大已经测量的多行高度。
|
|
431
|
+
|
|
432
|
+
时间标签(`xLabel`,默认仍为 `时间(ms)` 或 `时间(s)`)单独使用 18px、字重 700,
|
|
433
|
+
水平居中于绘图区,紧凑模式基线为 `drawingHeight - 9px`,比原位置下移 3px,
|
|
434
|
+
增加与上方刻度区域的间隔;默认布局仍为 `drawingHeight - 12px`,不设置额外的
|
|
435
|
+
`dominant-baseline`。通过 `xLabel='Time(ms)'` 传入严格的业务文字,组件不自动改写。
|
|
436
|
+
分页按钮可见时,宽度大于 520px 且右侧空间足够时仅预留 16px;结合已有的 44px 底部总预算,
|
|
437
|
+
图框底边距卡片内容下沿共 60px,末尾 X 刻度与右下分页顶部约留 5px 安全间距。
|
|
438
|
+
相较预留 40px,桌面图框向下延伸 24px;Time 仍居中使用 18px/700,其基线距内容
|
|
439
|
+
下沿 25px,与右侧分页处于同一底部水平区域。窄图表(宽度小于等于 520px)保留
|
|
440
|
+
40px 独立分页区,避免 Time 与按钮水平冲突。预留条件与按钮显隐一致:
|
|
441
|
+
`grid.showPagination && pageCount > 1 && !cleanView`。
|
|
442
|
+
组件按最多 9 个页码/省略号及前后按钮、32px 按钮、8px 间距保守估算分页宽度,
|
|
443
|
+
同时按绘图区中心和 18px 字体估算 Time 标签占位;中等宽度、多页或长标签导致右侧
|
|
444
|
+
空间不足时自动预留 40px,无需新公共配置。
|
|
445
|
+
没有分页或净图模式不预留按钮区。`cleanView` 仍隐藏时间标签及标题文字,保留既有标题区域策略。
|
|
446
|
+
|
|
447
|
+
紧凑模式的 `plotMargin.bottom` 最小为 44px(传入 35px 会按 44px 布局),该总预算
|
|
448
|
+
已包含最后一行的 30px X 轴刻度带,不再额外叠加;最下面的网格图框底边距绘制 SVG
|
|
449
|
+
下沿为 44px(更大的有效边距仍保留)。中间行刻度带不变,尾部空行无 X 轴时不补偿。
|
|
450
|
+
净图模式不应用刻度带补偿,保留现有刻度与网格布局。
|
|
451
|
+
最高 Y 刻度(含科学指数和单位)在紧凑模式向图框内贴边,`top=0` 时有无标题均不会
|
|
452
|
+
向 SVG 顶部越界;默认模式的刻度锚点不变。
|
|
453
|
+
紧凑模式的图框边框路径向内缩半个实际 `frameStyle.borderWidth`,四边使用同一描边
|
|
454
|
+
线宽,完整描边保持在原图框范围内;`top=0` 且没有标题时也无需额外顶部留白。
|
|
455
|
+
外层卡片继续裁切溢出内容,默认布局的边框几何保持不变。
|
|
456
|
+
刻度字号保持原值。`plotMargin` 不改变标签距底部的位置。该布局只影响展示尺寸,
|
|
457
|
+
既有平移事件与范围、单位模式、tooltip 和 Y 轴上限留白 API 保持不变。
|
|
458
|
+
|
|
459
|
+
### 客户图例单位规则(可选)
|
|
460
|
+
|
|
461
|
+
```vue
|
|
462
|
+
<WaveformChart :data="waveformData" unit-display-mode="legend-single-series" />
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
公共类型 `WaveformUnitDisplayMode = 'axis' | 'legend-single-series'`,也可通过
|
|
466
|
+
`WaveformChartProps.unitDisplayMode` 配置。默认 `'axis'` 保持现有行为(单位在 Y 轴最高
|
|
467
|
+
刻度中,单曲线图框不显示图例)。客户模式会为每个非空图框显示图例:
|
|
468
|
+
|
|
469
|
+
- 整个图表的所有非空 track 都只有一条曲线时,图例显示 `名称 (单位)`,例如
|
|
470
|
+
`CH1(1001) (V)`;单位去除两端空白,缺失、空白或占位值 `--` 不追加括号。
|
|
471
|
+
- 任一 track 包含多条曲线时,整个图表的图例只显示原始名称,所有 Y 轴也隐藏单位。
|
|
472
|
+
判定依据是曲线数量,而非 Y 轴分组数量,同单位共用一根轴的多曲线图框同样适用。
|
|
473
|
+
- 判定使用分页前完整的 track 曲线列表,跨页一致;`grid.trackOrder` 的空图框和补齐
|
|
474
|
+
槽位不参与判定;隐藏曲线仍计数,包括全部曲线隐藏的图框,切换可见性不会改变规则。
|
|
475
|
+
替换 `data` 后重新判定。只有从数据中移除曲线才改变曲线数量。
|
|
476
|
+
- 客户模式始终隐藏轴单位,科学计数法 `E+04` 等仍保留在最高刻度(左侧 Y 轴顶端
|
|
477
|
+
左侧;多 Y 轴各自保留倍率),刻度缩放和数值不变。多曲线规则不隐藏倍率。
|
|
478
|
+
|
|
479
|
+
继续将真实单位写入 `series.unit`,名称写入 `series.name`(可已包含炮号)。组件只在
|
|
480
|
+
展示层组合图例文字,不修改名称或单位;tooltip 仍使用原始名称和单位字段,例如
|
|
481
|
+
`CH1(1001)(V)`,标注元数据也保持原值。图例位置、排列、交互仍由 `legend` 控制,
|
|
482
|
+
`cleanView` 仍隐藏图例。`pan-end`、`panXDomain`、`axes.y.upperPaddingRatio` 不受影响。
|
|
371
483
|
|
|
372
484
|
### 纵轴单位
|
|
373
485
|
|
|
@@ -397,7 +509,15 @@ const chartData = {
|
|
|
397
509
|
`(V) 3`。单位为空、全为空白或未配置时,不显示 `(单位)`,例如仍显示为 `E+03 3` 或 `3`。
|
|
398
510
|
多 Y 轴模式下,每根轴使用该轴首个 series 的单位。
|
|
399
511
|
|
|
400
|
-
左侧通道名称使用 14px、字重 600
|
|
512
|
+
左侧通道名称使用 14px、字重 600 的加粗文字。默认布局按字符宽度估算旋转名称的垂直范围,
|
|
513
|
+
仅对可能与名称相交的刻度文字(含文字高度和安全间距)自动计算间距;不相交的顶部单位
|
|
514
|
+
刻度不会推远名称。同一列中相同轴位使用逐道计算的最大间距,保证多道名称垂直对齐。
|
|
515
|
+
|
|
516
|
+
`edge-compact` 统一按实际显示的 Y 刻度文字宽度、7px 刻度间距和 20px 名称带计算
|
|
517
|
+
轴槽位、名称位置及左边距;隐藏的单位不参与宽度估算,科学计数法倍率仍计入。
|
|
518
|
+
最外侧名称带左边保留 24px 外部留白,与单轴图框右侧的 24px 对齐,不再使用
|
|
519
|
+
默认布局的固定 48px 最小左边距。多轴使用各轴位的最大刻度宽度,多列同时预留相邻
|
|
520
|
+
图框的轴和名称带,避免名称、长刻度及相邻图框重叠。默认布局的留白策略保持兼容。
|
|
401
521
|
|
|
402
522
|
### 线型、点型与误差棒
|
|
403
523
|
|
|
@@ -854,6 +974,7 @@ X 轴刻度和左右端点先按 `timeUnit` 转换为秒或毫秒,再显示为
|
|
|
854
974
|
| `point-hover` | 当前最近点变化时触发,离开图表时传入 `null` |
|
|
855
975
|
| `zoom-intent` | 真实滚轮或框选确定目标范围时同步触发,参数含端点和 `gesture` |
|
|
856
976
|
| `zoom-change` | 缩放过程中触发,参数为 `[start, end]` |
|
|
977
|
+
| `pan-end` | 平移结束且范围变化时返回时间端点,独立模式附带轨道信息 |
|
|
857
978
|
| `zoom-end` | 滚轮或框选结束后触发;`gesture` 区分二者,独立模式附带轨道信息 |
|
|
858
979
|
| `zoom-reset` | 双击重置视口时触发;独立模式 payload 标识目标图框 |
|
|
859
980
|
| `page-change` | 分页变化,参数为当前页和总页数 |
|