waveform-analysis 0.1.71 → 0.1.72
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 +241 -39
- package/dist/assets/{workerRuntime-o5An0M-W.js → workerRuntime-5p-EI-GL.js} +1 -1
- package/dist/index.cjs +2 -1
- package/dist/index.js +2922 -1910
- package/dist/style.css +1 -1
- package/dist/types/components/WaveformChart.vue.d.ts +24 -6
- package/dist/types/components/annotation/WaveformAnnotationLayer.vue.d.ts +2 -0
- package/dist/types/components/controls/WaveformToolbar.vue.d.ts +7 -0
- package/dist/types/components/controls/chartExportOptions.d.ts +5 -0
- package/dist/types/components/controls/chartSnapshot.d.ts +2 -0
- package/dist/types/components/controls/snapshotTitle.d.ts +2 -0
- package/dist/types/components/controls/toolbarRegistry.d.ts +21 -0
- package/dist/types/components/controls/useChartCommands.d.ts +42 -0
- package/dist/types/components/controls/useChartImageExport.d.ts +17 -0
- package/dist/types/components/controls/useControlMode.d.ts +8 -0
- package/dist/types/components/core/latestTaskScheduler.d.ts +1 -1
- package/dist/types/components/core/layout.d.ts +5 -3
- package/dist/types/components/core/niceScale.d.ts +34 -0
- package/dist/types/components/core/trackLayoutBuilder.d.ts +4 -1
- package/dist/types/components/core/trackPagination.d.ts +1 -1
- package/dist/types/components/core/types.d.ts +3 -0
- package/dist/types/components/core/useWaveformChartController.d.ts +24 -5
- package/dist/types/components/core/useWaveformChartLifecycle.d.ts +2 -2
- package/dist/types/components/core/useWaveformData.d.ts +1 -0
- package/dist/types/components/core/useWaveformLayout.d.ts +4 -1
- package/dist/types/components/core/useWaveformMeasurements.d.ts +2 -0
- package/dist/types/components/core/useWaveformRenderSampling.d.ts +1 -0
- package/dist/types/components/core/useWaveformViewportRestore.d.ts +5 -0
- package/dist/types/components/core/waveformChartTypes.d.ts +5 -0
- package/dist/types/components/core/waveformSamplingSession.d.ts +24 -0
- package/dist/types/components/core/yAxisLabelStyle.d.ts +3 -0
- package/dist/types/components/core/yAxisLayoutMetrics.d.ts +2 -1
- package/dist/types/components/core/yAxisPadding.d.ts +7 -0
- package/dist/types/components/core/yAxisTitleLayout.d.ts +2 -0
- package/dist/types/components/interaction/useWaveformViewport.d.ts +1 -0
- package/dist/types/components/rendering/WaveformLegend.vue.d.ts +2 -2
- package/dist/types/components/rendering/WaveformTrack.vue.d.ts +2 -3
- package/dist/types/components/rendering/WaveformTrackAxes.vue.d.ts +0 -1
- package/dist/types/components/rendering/WaveformTrackBackdrop.vue.d.ts +1 -0
- package/dist/types/components/rendering/compactFrame.d.ts +5 -0
- package/dist/types/components/rendering/yAxisTickVisibility.d.ts +11 -0
- package/dist/types/core/lineBoundary.d.ts +4 -0
- package/dist/types/core/rendering.d.ts +4 -0
- package/dist/types/core/renderingStrategies.d.ts +2 -0
- package/dist/types/core/workerSampling/outputBoundaries.d.ts +4 -0
- package/dist/types/data/simulatedWaveforms.d.ts +1 -1
- package/dist/types/demo/DemoYAxisPaddingControls.vue.d.ts +11 -0
- package/dist/types/demo/types.d.ts +6 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/types/chart.d.ts +30 -8
- package/dist/types/types/controls.d.ts +69 -0
- package/dist/types/types/index.d.ts +2 -1
- package/dist/types/utils/formatters.d.ts +1 -0
- package/package.json +7 -6
- package/src/App.vue +58 -14
- package/src/components/WaveformChart.css +10 -1
- package/src/components/WaveformChart.vue +6 -0
- package/src/components/WaveformChartView.vue +27 -23
- package/src/components/annotation/WaveformAnnotationLayer.vue +6 -1
- package/src/components/annotation/useWaveformChartAnnotations.ts +6 -1
- package/src/components/controls/WaveformToolbar.vue +248 -0
- package/src/components/controls/chartExportOptions.ts +32 -0
- package/src/components/controls/chartSnapshot.ts +132 -0
- package/src/components/controls/snapshotTitle.ts +73 -0
- package/src/components/controls/toolbarRegistry.ts +92 -0
- package/src/components/controls/useChartCommands.ts +294 -0
- package/src/components/controls/useChartImageExport.ts +155 -0
- package/src/components/controls/useControlMode.ts +30 -0
- package/src/components/core/latestTaskScheduler.ts +14 -2
- package/src/components/core/layout.ts +35 -34
- package/src/components/core/niceScale.ts +151 -0
- package/src/components/core/trackLayoutBuilder.ts +34 -17
- package/src/components/core/trackPagination.ts +3 -3
- package/src/components/core/types.ts +3 -0
- package/src/components/core/useWaveformChartController.ts +94 -3
- package/src/components/core/useWaveformChartLifecycle.ts +11 -111
- package/src/components/core/useWaveformData.ts +2 -0
- package/src/components/core/useWaveformLayout.ts +17 -5
- package/src/components/core/useWaveformMeasurements.ts +63 -0
- package/src/components/core/useWaveformRenderSampling.ts +80 -59
- package/src/components/core/useWaveformViewportRestore.ts +105 -0
- package/src/components/core/useWaveformYAxisLayout.ts +3 -2
- package/src/components/core/waveformChartTypes.ts +5 -0
- package/src/components/core/waveformSamplingSession.ts +49 -0
- package/src/components/core/workerSamplingClient.ts +38 -6
- package/src/components/core/yAxisLabelStyle.ts +10 -0
- package/src/components/core/yAxisLayoutMetrics.ts +10 -9
- package/src/components/core/yAxisPadding.ts +45 -0
- package/src/components/core/yAxisTitleLayout.ts +11 -12
- package/src/components/interaction/useWaveformViewport.ts +11 -2
- package/src/components/rendering/WaveformTrack.css +1 -2
- package/src/components/rendering/WaveformTrack.vue +4 -12
- package/src/components/rendering/WaveformTrackAxes.vue +48 -19
- package/src/components/rendering/WaveformTrackBackdrop.vue +8 -3
- package/src/components/rendering/compactFrame.ts +31 -0
- package/src/components/rendering/yAxisTickVisibility.ts +95 -0
- package/src/core/lineBoundary.ts +24 -0
- package/src/core/rendering.ts +48 -25
- package/src/core/renderingStrategies.ts +19 -13
- package/src/core/waveformPointSource.ts +23 -1
- package/src/core/workerSampling/outputBoundaries.ts +32 -0
- package/src/core/workerSampling/repository.ts +26 -18
- package/src/core/workerSampling/repositoryDataset.ts +33 -1
- package/src/core/workerSampling/workerRuntime.ts +13 -3
- package/src/data/simulatedWaveforms.ts +57 -2
- package/src/demo/DemoChartHost.vue +5 -1
- package/src/demo/DemoGridFrameControls.vue +2 -0
- package/src/demo/DemoViewControls.vue +5 -2
- package/src/demo/DemoYAxisPaddingControls.vue +46 -0
- package/src/demo/embedBridge.ts +85 -0
- package/src/demo/types.ts +6 -0
- package/src/index.ts +18 -0
- package/src/types/chart.ts +32 -8
- package/src/types/controls.ts +80 -0
- package/src/types/index.ts +18 -0
- package/src/utils/formatters.ts +2 -1
- package/src/views/WasmSamplingDemo.vue +8 -1
|
@@ -2,7 +2,7 @@ import { type ComponentPublicInstance } from 'vue';
|
|
|
2
2
|
import { getPageSize } from './grid';
|
|
3
3
|
import type { WaveformHoverState } from './types';
|
|
4
4
|
import type { ResolvedWaveformChartProps, ViewportSelectionState, WaveformChartEmit } from './waveformChartTypes';
|
|
5
|
-
export declare function useWaveformChartController(
|
|
5
|
+
export declare function useWaveformChartController(inputProps: ResolvedWaveformChartProps, emit: WaveformChartEmit): {
|
|
6
6
|
margin: {
|
|
7
7
|
top: number;
|
|
8
8
|
right: number;
|
|
@@ -209,6 +209,24 @@ export declare function useWaveformChartController(props: ResolvedWaveformChartP
|
|
|
209
209
|
setSvgElement: (element: Element | ComponentPublicInstance | null) => void;
|
|
210
210
|
setTitleMeasureElement: (element: Element | ComponentPublicInstance | null) => void;
|
|
211
211
|
setSharedOverlayElement: (element: Element | ComponentPublicInstance | null) => void;
|
|
212
|
+
exportImage: (options?: import("../..").WaveformImageExportOptions) => Promise<Blob>;
|
|
213
|
+
controlState: import("../..").WaveformControlState;
|
|
214
|
+
getControlState: () => import("../..").WaveformControlState;
|
|
215
|
+
execute: (action: import("../..").WaveformControlAction, target?: import("../..").WaveformControlTarget, domain?: [number, number], source?: "toolbar" | "api") => import("../..").WaveformControlResult;
|
|
216
|
+
clearBoundaries: (index?: number) => void;
|
|
217
|
+
restoreInitialBoundaries: () => void;
|
|
218
|
+
resetViewport: {
|
|
219
|
+
(index?: number): void;
|
|
220
|
+
(target: import("../..").WaveformControlTarget): import("../..").WaveformControlResult;
|
|
221
|
+
};
|
|
222
|
+
setViewportDomain: {
|
|
223
|
+
(domain: [number, number], index?: number): void;
|
|
224
|
+
(domain: [number, number], target: import("../..").WaveformControlTarget): import("../..").WaveformControlResult;
|
|
225
|
+
};
|
|
226
|
+
zoomIn: (target?: import("../..").WaveformControlTarget) => import("../..").WaveformControlResult;
|
|
227
|
+
zoomOut: (target?: import("../..").WaveformControlTarget) => import("../..").WaveformControlResult;
|
|
228
|
+
fitToData: (target?: import("../..").WaveformControlTarget) => import("../..").WaveformControlResult;
|
|
229
|
+
setInteractionMode: (value: import("..").WaveformInteractionMode) => import("../..").WaveformControlResult;
|
|
212
230
|
cancelPendingHover: () => void;
|
|
213
231
|
clearHover: () => void;
|
|
214
232
|
handlePointerLeave: () => void;
|
|
@@ -227,8 +245,6 @@ export declare function useWaveformChartController(props: ResolvedWaveformChartP
|
|
|
227
245
|
updateViewportDrag: (event: PointerEvent) => void;
|
|
228
246
|
finishViewportDrag: (event: PointerEvent) => void;
|
|
229
247
|
cancelViewportDrag: (event?: PointerEvent) => void;
|
|
230
|
-
resetViewport: (trackIndex?: number) => void;
|
|
231
|
-
setViewportDomain: (domain: [number, number], trackIndex?: number) => void;
|
|
232
248
|
requestViewportReset: (event: MouseEvent) => void;
|
|
233
249
|
toggleSeriesVisibility: (seriesId: string) => void;
|
|
234
250
|
changeDraftSeries: (seriesId: string) => void;
|
|
@@ -262,6 +278,8 @@ export declare function useWaveformChartController(props: ResolvedWaveformChartP
|
|
|
262
278
|
activeInteractionMode: import("..").WaveformInteractionMode | undefined;
|
|
263
279
|
isZoomMode: boolean;
|
|
264
280
|
initialXDomain: [number, number];
|
|
281
|
+
originalXDomain: [number, number];
|
|
282
|
+
resolveOriginalTrackDomain: (track: import("./types").TrackLayout) => [number, number];
|
|
265
283
|
sharedZoomDomain: [number, number];
|
|
266
284
|
resolveInitialTrackDomain: (track: import("./types").TrackLayout) => [number, number];
|
|
267
285
|
gridCells: {
|
|
@@ -284,7 +302,7 @@ export declare function useWaveformChartController(props: ResolvedWaveformChartP
|
|
|
284
302
|
annotationTrackLayouts: import("../annotation").AnnotationTrackLayout[];
|
|
285
303
|
renderedAnnotations: import("../annotation").RenderedAnnotation[];
|
|
286
304
|
editorSeries: import("../annotation").AnnotationSeriesInfo | undefined;
|
|
287
|
-
resolveFrameNumber: (trackId: string) => string | number | undefined;
|
|
305
|
+
resolveFrameNumber: (trackId: string, slotIndex?: number) => string | number | undefined;
|
|
288
306
|
plotCenterX: number;
|
|
289
307
|
titleAreaStyle: import("vue").CSSProperties;
|
|
290
308
|
paginationVisible: boolean;
|
|
@@ -329,10 +347,11 @@ export declare function useWaveformChartController(props: ResolvedWaveformChartP
|
|
|
329
347
|
innerHeight: number;
|
|
330
348
|
titleVisualStyle: import("vue").CSSProperties;
|
|
331
349
|
titleTextStyle: import("vue").CSSProperties;
|
|
350
|
+
toolbar?: (boolean | import("../..").WaveformToolbarOptions) | undefined;
|
|
332
351
|
data: import("..").WaveformData;
|
|
333
352
|
displayMode: "independent" | "separated" | "compact";
|
|
334
353
|
overlayMode: "single-axis" | "multi-axis";
|
|
335
|
-
unitDisplayMode: "axis" | "legend-single-series" | "channel-label-or-legend";
|
|
354
|
+
unitDisplayMode: "axis" | "legend-single-series" | "channel-label" | "channel-label-or-legend";
|
|
336
355
|
layoutPreset: "default" | "edge-compact";
|
|
337
356
|
width?: number | undefined;
|
|
338
357
|
height?: number | undefined;
|
|
@@ -4,7 +4,8 @@ import type { AnnotationSeriesCandidate, useWaveformAnnotationInteraction } from
|
|
|
4
4
|
import type { NormalizedWaveformGridOptions } from './grid';
|
|
5
5
|
import type { DisplaySeries, DisplayTrack, TrackLayout } from './types';
|
|
6
6
|
import type { ResolvedWaveformChartProps, WaveformChartEmit } from './waveformChartTypes';
|
|
7
|
-
interface LifecycleContext {
|
|
7
|
+
export interface LifecycleContext {
|
|
8
|
+
preserveFullViewport?: () => boolean;
|
|
8
9
|
props: ResolvedWaveformChartProps;
|
|
9
10
|
emit: WaveformChartEmit;
|
|
10
11
|
container: Ref<HTMLDivElement | undefined>;
|
|
@@ -53,4 +54,3 @@ export declare function useWaveformChartLifecycle(context: LifecycleContext): {
|
|
|
53
54
|
handleBeforeDataReferenceChange: () => void;
|
|
54
55
|
handleDataReferenceChange: () => void;
|
|
55
56
|
};
|
|
56
|
-
export {};
|
|
@@ -6,6 +6,7 @@ import type { PreparedWaveformSeries } from './useWaveformData';
|
|
|
6
6
|
import type { ResolvedWaveformChartProps } from './waveformChartTypes';
|
|
7
7
|
import type { useWaveformAnnotationInteraction } from '../annotation';
|
|
8
8
|
interface LayoutContext {
|
|
9
|
+
boundaries?: ShallowRef<Record<string, [number, number]>>;
|
|
9
10
|
props: ResolvedWaveformChartProps;
|
|
10
11
|
preparedSeries: ShallowRef<PreparedWaveformSeries[]>;
|
|
11
12
|
currentPage: Ref<number>;
|
|
@@ -39,6 +40,8 @@ export declare function useWaveformLayout(context: LayoutContext): {
|
|
|
39
40
|
activeInteractionMode: ComputedRef<import("..").WaveformInteractionMode | undefined>;
|
|
40
41
|
isZoomMode: ComputedRef<boolean>;
|
|
41
42
|
initialXDomain: ComputedRef<[number, number]>;
|
|
43
|
+
originalXDomain: ComputedRef<[number, number]>;
|
|
44
|
+
resolveOriginalTrackDomain: (track: TrackLayout) => [number, number];
|
|
42
45
|
sharedZoomDomain: ComputedRef<[number, number]>;
|
|
43
46
|
resolveInitialTrackDomain: (track: TrackLayout) => [number, number];
|
|
44
47
|
gridCells: ComputedRef<{
|
|
@@ -61,6 +64,6 @@ export declare function useWaveformLayout(context: LayoutContext): {
|
|
|
61
64
|
annotationTrackLayouts: ComputedRef<AnnotationTrackLayout[]>;
|
|
62
65
|
renderedAnnotations: ComputedRef<import("../annotation").RenderedAnnotation[]>;
|
|
63
66
|
editorSeries: ComputedRef<AnnotationSeriesInfo | undefined>;
|
|
64
|
-
resolveFrameNumber: (trackId: string) => string | number | undefined;
|
|
67
|
+
resolveFrameNumber: (trackId: string, slotIndex?: number) => string | number | undefined;
|
|
65
68
|
};
|
|
66
69
|
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import type { LifecycleContext } from './useWaveformChartLifecycle';
|
|
2
|
+
export declare function useWaveformMeasurements(context: Pick<LifecycleContext, 'container' | 'titleMeasureElement' | 'resizeObserver' | 'observedWidth' | 'observedHeight' | 'measuredTitleWidth' | 'measuredTitleHeight' | 'resolvedTitleText' | 'titleAreaReserved' | 'titleMeasureStyle'>): void;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { LifecycleContext } from './useWaveformChartLifecycle';
|
|
2
|
+
export declare function useWaveformViewportRestore(context: Pick<LifecycleContext, 'preserveFullViewport' | 'props' | 'trackLayouts' | 'resolveInitialTrackDomain' | 'sharedZoomDomain' | 'initialXDomain' | 'independentTransforms' | 'chartTracks' | 'clearHover' | 'editorSeriesOptions' | 'sharedTransform' | 'innerWidth' | 'configureZoom'>): {
|
|
3
|
+
handleBeforeDataReferenceChange: () => void;
|
|
4
|
+
handleDataReferenceChange: () => void;
|
|
5
|
+
};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import type { WaveformToolbarOptions, WaveformControlState } from '../../types/controls';
|
|
1
2
|
import type { WaveformAnnotation, WaveformAxesOptions, WaveformData, WaveformDisplayMode, WaveformUnitDisplayMode, WaveformLayoutPreset, WaveformFrameStyle, WaveformInteractionMode, WaveformLegendOptions, WaveformOverlayMode, WaveformPlotMargin, WaveformPoint, WaveformRenderingOptions, WaveformSamplingBackend, WaveformSamplingDiagnostics, WaveformSamplingError, WaveformTitleOptions, WaveformXDomainStrategy, WaveformZeroLineOptions, WaveformZoomIntentPayload, WaveformZoomEndPayload, WaveformPanEndPayload, WaveformZoomResetPayload } from '../data/types';
|
|
2
3
|
import type { WaveformGridOptions } from './grid';
|
|
3
4
|
export interface WaveformChartProps {
|
|
5
|
+
toolbar?: boolean | WaveformToolbarOptions;
|
|
4
6
|
data: WaveformData;
|
|
5
7
|
displayMode?: WaveformDisplayMode;
|
|
6
8
|
overlayMode?: WaveformOverlayMode;
|
|
@@ -51,6 +53,9 @@ export interface WaveformChartProps {
|
|
|
51
53
|
type DefaultedProp = 'displayMode' | 'overlayMode' | 'unitDisplayMode' | 'layoutPreset' | 'yLabel' | 'lineColor' | 'showTooltip' | 'zoomable' | 'integerZoom' | 'pannable' | 'minVisiblePoints' | 'xDomainStrategy' | 'timeUnit' | 'annotations' | 'annotationsVisible' | 'grid' | 'rendering' | 'plotMargin' | 'legend' | 'defaultHiddenSeriesIds' | 'cleanView' | 'presentationMode' | 'zeroLine';
|
|
52
54
|
export type ResolvedWaveformChartProps = Readonly<WaveformChartProps & Required<Pick<WaveformChartProps, DefaultedProp>>>;
|
|
53
55
|
export interface WaveformChartEmit {
|
|
56
|
+
(event: 'update:interactionMode', mode: WaveformInteractionMode): void;
|
|
57
|
+
(event: 'interaction-mode-change', mode: WaveformInteractionMode): void;
|
|
58
|
+
(event: 'control-state-change', state: WaveformControlState): void;
|
|
54
59
|
(event: 'point-hover', point: WaveformPoint | null): void;
|
|
55
60
|
(event: 'zoom-intent', payload: WaveformZoomIntentPayload): void;
|
|
56
61
|
(event: 'zoom-change', domain: [number, number]): void;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type WorkerSamplingClient } from './workerSamplingClient';
|
|
2
|
+
/** Owns resources for one immutable data reference. Invalidation cancels old work before reuse. */
|
|
3
|
+
export declare function createWaveformSamplingSession(): {
|
|
4
|
+
scheduler: {
|
|
5
|
+
schedule(run: (generation: number) => Promise<void>): number;
|
|
6
|
+
isCurrent(candidate: number): boolean;
|
|
7
|
+
cancelPending(): void;
|
|
8
|
+
dispose(): void;
|
|
9
|
+
metrics: import("./latestTaskScheduler").LatestTaskSchedulerMetrics;
|
|
10
|
+
};
|
|
11
|
+
revisions: Map<string, number>;
|
|
12
|
+
backendBySeries: Map<string, import("../..").WaveformSamplingBackend>;
|
|
13
|
+
selectedModeBySeries: Map<string, "raw" | "sampled">;
|
|
14
|
+
emittedErrors: Set<string>;
|
|
15
|
+
pendingDiagnostics: Map<string, import("../..").WaveformSamplingDiagnostics>;
|
|
16
|
+
client: WorkerSamplingClient | undefined;
|
|
17
|
+
requestId: number;
|
|
18
|
+
diagnosticsTimer: ReturnType<typeof setTimeout> | undefined;
|
|
19
|
+
autoModeSettleTimer: ReturnType<typeof setTimeout> | undefined;
|
|
20
|
+
hasInitialSamplingRun: boolean;
|
|
21
|
+
getClient(): WorkerSamplingClient;
|
|
22
|
+
invalidate(): void;
|
|
23
|
+
dispose(): void;
|
|
24
|
+
};
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { WaveformOverlayMode } from '../data/types';
|
|
2
2
|
import type { DisplayTrack } from './types';
|
|
3
3
|
import type { WaveformYDomain } from './yDomain';
|
|
4
|
+
import type { YAxisPaddingOptions } from './yAxisPadding';
|
|
4
5
|
export interface YAxisLayoutMetrics {
|
|
5
6
|
tickClearance: number;
|
|
6
7
|
fullClearance: number;
|
|
7
8
|
labelCenterX: number;
|
|
8
9
|
}
|
|
9
10
|
export declare function resolveViewportYDomains(displayMode: 'independent' | 'separated' | 'compact', chartTracks: DisplayTrack[], sharedYDomains: Record<string, [number, number]>, independentYDomains: Record<number, [number, number]>): Record<string, [number, number]>;
|
|
10
|
-
export declare function resolveYAxisLayoutMetrics(chartTracks: DisplayTrack[], overlayMode: WaveformOverlayMode, yDomain: WaveformYDomain | undefined, yDomains: Record<string, WaveformYDomain> | undefined, viewportYDomains: Record<string, [number, number]>, nice: boolean, tickCount: number, compact: boolean,
|
|
11
|
+
export declare function resolveYAxisLayoutMetrics(chartTracks: DisplayTrack[], overlayMode: WaveformOverlayMode, yDomain: WaveformYDomain | undefined, yDomains: Record<string, WaveformYDomain> | undefined, viewportYDomains: Record<string, [number, number]>, nice: boolean, tickCount: number, compact: boolean, padding?: YAxisPaddingOptions | number, showUnits?: boolean, measureTextWidth?: (text: string) => number): YAxisLayoutMetrics;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { WaveformAxesOptions } from '../../types';
|
|
2
|
+
import type { YAxisSeriesGroup } from './layout';
|
|
3
|
+
export type YAxisPaddingOptions = WaveformAxesOptions['y'];
|
|
4
|
+
export declare function paddingRatio(enabled?: boolean, ratio?: number): number;
|
|
5
|
+
export declare function applyYAxisPadding(group: YAxisSeriesGroup, viewport: [number, number] | undefined, options: YAxisPaddingOptions | number): YAxisSeriesGroup;
|
|
6
|
+
export declare function withMaximumTick(values: number[], maximum?: number): number[];
|
|
7
|
+
export declare function sameTick(a: number, b: number): boolean;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { TrackLayout } from './types';
|
|
2
|
+
import type { WaveformYAxisLabelTextStyle } from '../../types';
|
|
2
3
|
interface TitleLayoutOptions {
|
|
4
|
+
labelTextStyle?: WaveformYAxisLabelTextStyle;
|
|
3
5
|
showUnits?: boolean;
|
|
4
6
|
compact?: boolean;
|
|
5
7
|
measureTextWidth?: (text: string) => number;
|
|
@@ -5,6 +5,7 @@ import type { ResolvedWaveformChartProps, ViewportSelectionState } from '../core
|
|
|
5
5
|
import type { WaveformChartEmit } from '../core/waveformChartTypes';
|
|
6
6
|
import type { AnnotationSeriesCandidate } from '../annotation';
|
|
7
7
|
export interface ViewportContext {
|
|
8
|
+
clearBoundaries?: (trackIndex?: number) => void;
|
|
8
9
|
props: ResolvedWaveformChartProps;
|
|
9
10
|
emit: WaveformChartEmit;
|
|
10
11
|
selection: Ref<ViewportSelectionState | null>;
|
|
@@ -16,9 +16,9 @@ declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {},
|
|
|
16
16
|
}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
|
|
17
17
|
onToggle?: ((seriesId: string) => any) | undefined;
|
|
18
18
|
}>, {
|
|
19
|
-
interactive: boolean;
|
|
20
|
-
showUnits: boolean;
|
|
21
19
|
hiddenSeriesIds: string[];
|
|
20
|
+
showUnits: boolean;
|
|
21
|
+
interactive: boolean;
|
|
22
22
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
23
23
|
declare const _default: typeof __VLS_export;
|
|
24
24
|
export default _default;
|
|
@@ -11,15 +11,14 @@ interface Props {
|
|
|
11
11
|
interactionMode?: WaveformInteractionMode;
|
|
12
12
|
frameNumber?: string | number;
|
|
13
13
|
frameStyle?: WaveformFrameStyle;
|
|
14
|
+
framePath?: string;
|
|
14
15
|
axes?: WaveformAxesOptions;
|
|
15
16
|
timeUnit: 's' | 'ms';
|
|
16
17
|
yLabel?: string;
|
|
17
18
|
showAxisUnits?: boolean;
|
|
18
19
|
showLabelUnits?: boolean;
|
|
19
20
|
hideYAxisTitles?: boolean;
|
|
20
|
-
containYAxisEndpoints?: boolean;
|
|
21
21
|
containFrameStroke?: boolean;
|
|
22
|
-
omitFrameTop?: boolean;
|
|
23
22
|
cleanView?: boolean;
|
|
24
23
|
zeroLine?: Required<WaveformZeroLineOptions>;
|
|
25
24
|
}
|
|
@@ -40,10 +39,10 @@ declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {},
|
|
|
40
39
|
"onPointer-cancel"?: ((pointerEvent: PointerEvent) => any) | undefined;
|
|
41
40
|
"onPointer-leave"?: (() => any) | undefined;
|
|
42
41
|
}>, {
|
|
43
|
-
interactive: boolean;
|
|
44
42
|
cleanView: boolean;
|
|
45
43
|
zeroLine: Required<WaveformZeroLineOptions>;
|
|
46
44
|
interactionMode: WaveformInteractionMode;
|
|
45
|
+
interactive: boolean;
|
|
47
46
|
showAxisUnits: boolean;
|
|
48
47
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
49
48
|
declare const _default: typeof __VLS_export;
|
|
@@ -10,7 +10,6 @@ interface Props {
|
|
|
10
10
|
showUnits?: boolean;
|
|
11
11
|
showLabelUnits?: boolean;
|
|
12
12
|
hideYAxisTitles?: boolean;
|
|
13
|
-
containYAxisEndpoints?: boolean;
|
|
14
13
|
}
|
|
15
14
|
declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
16
15
|
showUnits: boolean;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { TrackLayout } from '../core/types';
|
|
2
|
+
type Frame = Pick<TrackLayout, 'left' | 'top' | 'width' | 'height' | 'isEmpty'>;
|
|
3
|
+
/** Keep the lower frame's top edge as the single owner of a shared boundary. */
|
|
4
|
+
export declare function compactFramePath(track: Frame, tracks: Frame[], inset?: number): string | undefined;
|
|
5
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
interface Box {
|
|
2
|
+
left: number;
|
|
3
|
+
right: number;
|
|
4
|
+
top: number;
|
|
5
|
+
bottom: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function labelsOverlap(a: Box, b: Box): boolean;
|
|
8
|
+
export declare function linesOverlap(a: number, b: number, widthA?: number, widthB?: number): boolean;
|
|
9
|
+
/** Apply after axes and grid are in the DOM; never feed the filtered set back into layout. */
|
|
10
|
+
export declare function updateMaximumTickVisibility(svg: SVGSVGElement): void;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { WaveformPointRange } from './waveformPointSource';
|
|
2
|
+
/** Outside neighbors join the curve without changing visible-point statistics. */
|
|
3
|
+
export declare function lineBoundaryIndexes(range: WaveformPointRange, length: number): number[];
|
|
4
|
+
export declare function withLineBoundaries<T>(points: T[], range: WaveformPointRange, length: number, pointAt: (index: number) => T): T[];
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { type WaveformPointSource } from './waveformPointSource';
|
|
1
2
|
import type { WaveformPoint } from '../types';
|
|
2
3
|
import type { ResolvedWaveformRenderingOptions } from './renderingOptions';
|
|
3
4
|
import { type VisiblePointRange } from './renderingStrategies';
|
|
4
5
|
export { DEFAULT_WAVEFORM_RENDERING_OPTIONS, resolveWaveformRenderingOptions, type ResolvedWaveformRenderingOptions, type ResolvedWaveformSamplingOptions, } from './renderingOptions';
|
|
5
6
|
interface PointSeriesSource {
|
|
6
7
|
points: WaveformPoint[];
|
|
8
|
+
source?: WaveformPointSource;
|
|
7
9
|
}
|
|
8
10
|
interface SeriesRenderSelectionOptions {
|
|
9
11
|
lineVisible: boolean;
|
|
@@ -27,4 +29,6 @@ export declare function hasMinimumVisibleXValues(seriesList: readonly PointSerie
|
|
|
27
29
|
export declare function selectRenderablePoints(points: WaveformPoint[], domain: [number, number], width: number, options: ResolvedWaveformRenderingOptions): WaveformPoint[];
|
|
28
30
|
/** Selects real source points for discrete decorations without using line-extrema sampling. */
|
|
29
31
|
export declare function selectDecorationPoints(points: WaveformPoint[], domain: [number, number], width: number, minSpacing: number, downsample: boolean, predicate?: (point: WaveformPoint) => boolean, priorityPredicate?: (point: WaveformPoint) => boolean): WaveformPoint[];
|
|
32
|
+
export declare function selectSeriesRenderSourcePoints(points: WaveformPointSource, domain: [number, number], width: number, rendering: ResolvedWaveformRenderingOptions, selection: SeriesRenderSelectionOptions): SeriesRenderPointSelection;
|
|
33
|
+
/** Public array adapter; internal layout passes its normalized source directly. */
|
|
30
34
|
export declare function selectSeriesRenderPoints(points: WaveformPoint[], domain: [number, number], width: number, rendering: ResolvedWaveformRenderingOptions, selection: SeriesRenderSelectionOptions): SeriesRenderPointSelection;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type WaveformPointSource } from './waveformPointSource';
|
|
1
2
|
import type { WaveformPoint } from '../types';
|
|
2
3
|
import type { ResolvedWaveformRenderingOptions } from './renderingOptions';
|
|
3
4
|
export interface VisiblePointRange {
|
|
@@ -5,6 +6,7 @@ export interface VisiblePointRange {
|
|
|
5
6
|
end: number;
|
|
6
7
|
}
|
|
7
8
|
export interface RenderablePointSelectionContext {
|
|
9
|
+
source?: WaveformPointSource;
|
|
8
10
|
points: WaveformPoint[];
|
|
9
11
|
range: VisiblePointRange;
|
|
10
12
|
domain: [number, number];
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { WaveformPointRange } from '../waveformPointSource';
|
|
2
|
+
import type { WorkerSamplingOutput } from './protocol';
|
|
3
|
+
import { type StoredDataset } from './repositoryDataset';
|
|
4
|
+
export declare function addOutputBoundaries(output: WorkerSamplingOutput, range: WaveformPointRange, dataset: StoredDataset): WorkerSamplingOutput;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { WaveformData } from '../types';
|
|
2
|
-
export declare function createSimulatedWaveformData(): WaveformData;
|
|
2
|
+
export declare function createSimulatedWaveformData(trackCount?: number): WaveformData;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DemoControlPanelModel } from './types';
|
|
2
|
+
type __VLS_ModelProps = {
|
|
3
|
+
'model': DemoControlPanelModel;
|
|
4
|
+
};
|
|
5
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
6
|
+
"update:model": (value: DemoControlPanelModel) => any;
|
|
7
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
8
|
+
"onUpdate:model"?: ((value: DemoControlPanelModel) => any) | undefined;
|
|
9
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
10
|
+
declare const _default: typeof __VLS_export;
|
|
11
|
+
export default _default;
|
|
@@ -5,6 +5,7 @@ interface SelectOption<T> {
|
|
|
5
5
|
value: T;
|
|
6
6
|
}
|
|
7
7
|
export interface DemoControlPanelModel {
|
|
8
|
+
toolbarVisible: boolean;
|
|
8
9
|
controlsOpen: boolean;
|
|
9
10
|
displayMode: WaveformDisplayMode;
|
|
10
11
|
overlayMode: WaveformOverlayMode;
|
|
@@ -32,6 +33,10 @@ export interface DemoControlPanelModel {
|
|
|
32
33
|
verticalGridColor: string;
|
|
33
34
|
xAxisLineVisible: boolean;
|
|
34
35
|
yAxisLineVisible: boolean;
|
|
36
|
+
upperPaddingEnabled: boolean;
|
|
37
|
+
lowerPaddingEnabled: boolean;
|
|
38
|
+
upperPaddingPercent: number;
|
|
39
|
+
lowerPaddingPercent: number;
|
|
35
40
|
xAxisLabelFormatterEnabled: boolean;
|
|
36
41
|
xAxisLabelFormat: DemoXAxisLabelFormat;
|
|
37
42
|
xAxisLabelFormatOptions: Array<SelectOption<DemoXAxisLabelFormat>>;
|
|
@@ -68,6 +73,7 @@ export interface DemoControlPanelModel {
|
|
|
68
73
|
resetWaveformViewport: () => void;
|
|
69
74
|
}
|
|
70
75
|
export interface DemoChartModel {
|
|
76
|
+
toolbarVisible: boolean;
|
|
71
77
|
data: WaveformData;
|
|
72
78
|
initialXDomain?: [number, number];
|
|
73
79
|
displayMode: WaveformDisplayMode;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
*/
|
|
5
5
|
export { default as WaveformChart } from './components/WaveformChart.vue';
|
|
6
6
|
export type { WaveformChartProps } from './components/core/waveformChartTypes';
|
|
7
|
-
export type { WaveformPoint, WaveformDisplayMode, WaveformUnitDisplayMode, WaveformLayoutPreset, WaveformOverlayMode, WaveformInteractionMode, WaveformXDomainStrategy, WaveformZoomIntentPayload, WaveformZoomEndPayload, WaveformPanEndPayload, WaveformZoomResetPayload, WaveformAnnotationStyle, WaveformAnnotation, WaveformSamplingMode, WaveformSamplingStrategy, WaveformSamplingOptions, WaveformSamplingBackend, WaveformSamplingDiagnostics, WaveformSamplingError, WaveformRenderingOptions, WaveformPlotMargin, WaveformTitleTextStyle, WaveformTitleOptions, WaveformLegendPosition, WaveformLegendOrientation, WaveformLegendOptions, WaveformFrameStyle, WaveformXAxisLabelKind, WaveformXAxisLabelFormatterContext, WaveformXAxisLabelFormatter, WaveformAxesOptions, WaveformZeroLineOptions, SingleWaveformData, WaveformLineType, WaveformLineStyle, WaveformPointType, WaveformErrorBarOptions, ResolvedWaveformErrorBarOptions, WaveformTypedValues, TypedSampleData, TypedPointData, WaveformSeries, WaveformData, NormalizedWaveformSeries, } from './types';
|
|
7
|
+
export type { WaveformPoint, WaveformDisplayMode, WaveformUnitDisplayMode, WaveformLayoutPreset, WaveformOverlayMode, WaveformInteractionMode, WaveformXDomainStrategy, WaveformZoomIntentPayload, WaveformZoomEndPayload, WaveformPanEndPayload, WaveformZoomResetPayload, WaveformAnnotationStyle, WaveformAnnotation, WaveformSamplingMode, WaveformSamplingStrategy, WaveformSamplingOptions, WaveformSamplingBackend, WaveformSamplingDiagnostics, WaveformSamplingError, WaveformRenderingOptions, WaveformPlotMargin, WaveformTitleTextStyle, WaveformTitleOptions, WaveformLegendPosition, WaveformLegendOrientation, WaveformLegendOptions, WaveformFrameStyle, WaveformXAxisLabelKind, WaveformXAxisLabelFormatterContext, WaveformXAxisLabelFormatter, WaveformAxesOptions, WaveformYAxisLabelTextStyle, WaveformZeroLineOptions, SingleWaveformData, WaveformLineType, WaveformLineStyle, WaveformPointType, WaveformErrorBarOptions, ResolvedWaveformErrorBarOptions, WaveformTypedValues, TypedSampleData, TypedPointData, WaveformSeries, WaveformData, NormalizedWaveformSeries, } from './types';
|
|
8
8
|
export type { WaveformGridOptions, WaveformGridLineOptions, WaveformGridTrackLines, } from './components/core/grid';
|
|
9
9
|
export { normalizeWaveformData, normalizeWaveformSeries } from './core';
|
|
10
10
|
export { paddedDomain, buildMinorTicks, displayTime, formatEndpointTime, formatAxisTime, formatTooltipTime, resolveTrackGeometry, clamp, type TimeUnit, type TrackGeometry, } from './utils';
|
|
11
11
|
export { calculateWasmRange, findWasmVisibleRange, DEFAULT_WAVEFORM_RENDERING_OPTIONS, resolveWaveformRenderingOptions, selectRenderablePoints, type ResolvedWaveformRenderingOptions, type ResolvedWaveformSamplingOptions, type WasmRangeMetrics, initializeWasmSampling, sampleWaveformWasm, type WasmSamplingRequest, type WasmSamplingResult, type WasmSamplingStrategy, } from './core';
|
|
12
12
|
export { parseWaveformAnnotations, serializeWaveformAnnotations } from './components/annotation';
|
|
13
|
+
export type { WaveformToolbarItem, WaveformToolbarOptions, WaveformControlTarget, WaveformControlAction, WaveformCommandMetadata, WaveformTargetStatus, WaveformViewportSnapshot, WaveformTargetResult, WaveformControlResult, WaveformControlState, WaveformImageExportOptions, WaveformImageExportErrorCode, WaveformImageExportError, WaveformChartHandle, } from './types/controls';
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { WaveformCommandMetadata } from './controls';
|
|
1
2
|
/**
|
|
2
3
|
* 波形数据点
|
|
3
4
|
*/
|
|
@@ -15,6 +16,8 @@ export interface WaveformPoint {
|
|
|
15
16
|
export type WaveformLayoutPreset = 'default' | 'edge-compact';
|
|
16
17
|
/** Controls unit placement without changing series metadata. */
|
|
17
18
|
export type WaveformUnitDisplayMode = 'axis' | 'legend-single-series'
|
|
19
|
+
/** Append units to Y-axis names while retaining names on multi-series pages. */
|
|
20
|
+
| 'channel-label'
|
|
18
21
|
/** Label and legend units; hide all channel titles on pages containing a multi-series track. */
|
|
19
22
|
| 'channel-label-or-legend';
|
|
20
23
|
/**
|
|
@@ -27,7 +30,7 @@ export type WaveformDisplayMode = 'independent' | 'separated' | 'compact';
|
|
|
27
30
|
/** Controls whether overlaid series share one Y axis or use up to four value axes. */
|
|
28
31
|
export type WaveformOverlayMode = 'single-axis' | 'multi-axis';
|
|
29
32
|
/** 标注工具模式 */
|
|
30
|
-
export type WaveformInteractionMode = 'zoom' | 'annotation';
|
|
33
|
+
export type WaveformInteractionMode = 'zoom' | 'annotation' | 'pan' | 'none';
|
|
31
34
|
/** Controls how the initial X viewport is derived when no explicit domain is configured. */
|
|
32
35
|
export interface WaveformXDomainStrategy {
|
|
33
36
|
/** integer-ms rounds initial bounds outward to range-appropriate multiples of 10 ms. */
|
|
@@ -40,7 +43,7 @@ export interface WaveformXDomainStrategy {
|
|
|
40
43
|
includeExplicit?: boolean;
|
|
41
44
|
}
|
|
42
45
|
/** Describes the X-axis viewport after a zoom gesture completes. */
|
|
43
|
-
export interface WaveformZoomEndPayload {
|
|
46
|
+
export interface WaveformZoomEndPayload extends WaveformCommandMetadata {
|
|
44
47
|
start: number;
|
|
45
48
|
end: number;
|
|
46
49
|
yStart?: number;
|
|
@@ -48,7 +51,7 @@ export interface WaveformZoomEndPayload {
|
|
|
48
51
|
yRanges?: Record<string, [number, number]>;
|
|
49
52
|
trackIndex?: number;
|
|
50
53
|
seriesIds?: string[];
|
|
51
|
-
gesture?: 'wheel' | 'box';
|
|
54
|
+
gesture?: 'wheel' | 'box' | 'command';
|
|
52
55
|
}
|
|
53
56
|
/** Final horizontal viewport after a pan; endpoints are always seconds. */
|
|
54
57
|
export interface WaveformPanEndPayload {
|
|
@@ -58,15 +61,15 @@ export interface WaveformPanEndPayload {
|
|
|
58
61
|
seriesIds?: string[];
|
|
59
62
|
}
|
|
60
63
|
/** Describes the X-axis viewport targeted by a user zoom gesture before rendering settles. */
|
|
61
|
-
export interface WaveformZoomIntentPayload {
|
|
64
|
+
export interface WaveformZoomIntentPayload extends WaveformCommandMetadata {
|
|
62
65
|
start: number;
|
|
63
66
|
end: number;
|
|
64
|
-
gesture: 'wheel' | 'box';
|
|
67
|
+
gesture: 'wheel' | 'box' | 'command';
|
|
65
68
|
trackIndex?: number;
|
|
66
69
|
seriesIds?: string[];
|
|
67
70
|
}
|
|
68
71
|
/** Identifies the viewport reset by a double-click gesture. */
|
|
69
|
-
export interface WaveformZoomResetPayload {
|
|
72
|
+
export interface WaveformZoomResetPayload extends WaveformCommandMetadata {
|
|
70
73
|
trackIndex?: number;
|
|
71
74
|
seriesIds?: string[];
|
|
72
75
|
}
|
|
@@ -221,7 +224,18 @@ export interface WaveformXAxisLabelFormatterContext {
|
|
|
221
224
|
displayDomain: [number, number];
|
|
222
225
|
}
|
|
223
226
|
export type WaveformXAxisLabelFormatter = (value: number, context: WaveformXAxisLabelFormatterContext) => string;
|
|
224
|
-
/**
|
|
227
|
+
/** Styling for Y-axis series names, separate from numeric tick labels. */
|
|
228
|
+
export interface WaveformYAxisLabelTextStyle {
|
|
229
|
+
/** Positive font size in pixels. Defaults to 12. */
|
|
230
|
+
fontSize?: number;
|
|
231
|
+
/** CSS font weight; use 'normal' or 400 to disable bold. Defaults to 600. */
|
|
232
|
+
fontWeight?: number | string;
|
|
233
|
+
fontFamily?: string;
|
|
234
|
+
fontStyle?: 'normal' | 'italic';
|
|
235
|
+
/** CSS color. Defaults to the corresponding series color. */
|
|
236
|
+
color?: string;
|
|
237
|
+
}
|
|
238
|
+
/** Controls axis baselines, labels, and Y-axis range calculation. */
|
|
225
239
|
export interface WaveformAxesOptions {
|
|
226
240
|
x?: {
|
|
227
241
|
lineVisible?: boolean;
|
|
@@ -230,12 +244,20 @@ export interface WaveformAxesOptions {
|
|
|
230
244
|
};
|
|
231
245
|
y?: {
|
|
232
246
|
lineVisible?: boolean;
|
|
247
|
+
/** Styles series names on both left and right Y axes, without changing tick labels. */
|
|
248
|
+
labelTextStyle?: WaveformYAxisLabelTextStyle;
|
|
233
249
|
/** Target total number of equal Y-axis ticks, including endpoints. Defaults to 5. */
|
|
234
250
|
splitNumber?: number;
|
|
235
251
|
/** Expands Y-axis domains to equal, human-friendly intervals. Defaults to true. */
|
|
236
252
|
nice?: boolean;
|
|
237
|
-
/**
|
|
253
|
+
/** Fraction of the automatic Y span added above its maximum. Defaults to 0. */
|
|
238
254
|
upperPaddingRatio?: number;
|
|
255
|
+
/** Fraction of the automatic Y span added below its minimum. Defaults to 0. */
|
|
256
|
+
lowerPaddingRatio?: number;
|
|
257
|
+
/** False disables upper padding; true defaults an omitted ratio to 0.1. */
|
|
258
|
+
upperPaddingEnabled?: boolean;
|
|
259
|
+
/** False disables lower padding; true defaults an omitted ratio to 0.1. */
|
|
260
|
+
lowerPaddingEnabled?: boolean;
|
|
239
261
|
};
|
|
240
262
|
}
|
|
241
263
|
/** Styling and visibility options for the horizontal zero-value reference line. */
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { WaveformInteractionMode } from './chart';
|
|
2
|
+
export type WaveformToolbarItem = 'zoom-box' | 'pan' | 'annotate' | 'zoom-in' | 'zoom-out' | 'reset' | 'fit' | 'export';
|
|
3
|
+
export interface WaveformToolbarOptions {
|
|
4
|
+
visible?: boolean;
|
|
5
|
+
display?: 'hover' | 'always';
|
|
6
|
+
position?: 'top-right' | 'top-left';
|
|
7
|
+
items?: WaveformToolbarItem[];
|
|
8
|
+
}
|
|
9
|
+
export interface WaveformControlTarget {
|
|
10
|
+
trackId?: string;
|
|
11
|
+
}
|
|
12
|
+
export type WaveformControlAction = 'zoom-in' | 'zoom-out' | 'set-domain' | 'fit' | 'reset';
|
|
13
|
+
export interface WaveformCommandMetadata {
|
|
14
|
+
commandId?: string;
|
|
15
|
+
source?: 'toolbar' | 'api';
|
|
16
|
+
action?: WaveformControlAction;
|
|
17
|
+
}
|
|
18
|
+
export type WaveformTargetStatus = 'applied' | 'unchanged' | 'disabled' | 'empty-data';
|
|
19
|
+
export interface WaveformViewportSnapshot {
|
|
20
|
+
xDomain: [number, number];
|
|
21
|
+
yDomains: Record<string, [number, number]>;
|
|
22
|
+
}
|
|
23
|
+
export interface WaveformTargetResult {
|
|
24
|
+
trackId: string;
|
|
25
|
+
status: WaveformTargetStatus;
|
|
26
|
+
before?: WaveformViewportSnapshot;
|
|
27
|
+
after?: WaveformViewportSnapshot;
|
|
28
|
+
}
|
|
29
|
+
export type WaveformControlResult = {
|
|
30
|
+
kind: 'viewport';
|
|
31
|
+
status: WaveformTargetStatus | 'invalid-target' | 'invalid-domain';
|
|
32
|
+
targets: WaveformTargetResult[];
|
|
33
|
+
} | {
|
|
34
|
+
kind: 'mode';
|
|
35
|
+
status: 'applied' | 'requested' | 'unchanged' | 'disabled';
|
|
36
|
+
targets: [];
|
|
37
|
+
};
|
|
38
|
+
export interface WaveformControlState {
|
|
39
|
+
mode: WaveformInteractionMode;
|
|
40
|
+
independent: boolean;
|
|
41
|
+
targets: Array<{
|
|
42
|
+
trackId: string;
|
|
43
|
+
label: string;
|
|
44
|
+
viewport: WaveformViewportSnapshot;
|
|
45
|
+
available: Record<WaveformControlAction, boolean>;
|
|
46
|
+
}>;
|
|
47
|
+
available: Record<WaveformToolbarItem, boolean>;
|
|
48
|
+
}
|
|
49
|
+
export interface WaveformImageExportOptions {
|
|
50
|
+
format?: 'png' | 'svg';
|
|
51
|
+
scale?: number;
|
|
52
|
+
backgroundColor?: string;
|
|
53
|
+
}
|
|
54
|
+
export type WaveformImageExportErrorCode = 'export-invalid-options' | 'export-unavailable' | 'export-busy' | 'export-cancelled' | 'export-render-failed' | 'export-stale' | 'export-timeout';
|
|
55
|
+
export interface WaveformImageExportError extends Error {
|
|
56
|
+
code: WaveformImageExportErrorCode;
|
|
57
|
+
}
|
|
58
|
+
export interface WaveformChartHandle {
|
|
59
|
+
zoomIn(target?: WaveformControlTarget): WaveformControlResult;
|
|
60
|
+
zoomOut(target?: WaveformControlTarget): WaveformControlResult;
|
|
61
|
+
fitToData(target?: WaveformControlTarget): WaveformControlResult;
|
|
62
|
+
resetViewport(trackIndex?: number): void;
|
|
63
|
+
resetViewport(target: WaveformControlTarget): WaveformControlResult;
|
|
64
|
+
setViewportDomain(domain: [number, number], trackIndex?: number): void;
|
|
65
|
+
setViewportDomain(domain: [number, number], target: WaveformControlTarget): WaveformControlResult;
|
|
66
|
+
setInteractionMode(mode: WaveformInteractionMode): WaveformControlResult;
|
|
67
|
+
getControlState(): WaveformControlState;
|
|
68
|
+
exportImage(options?: WaveformImageExportOptions): Promise<Blob>;
|
|
69
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 类型定义统一导出
|
|
3
3
|
*/
|
|
4
|
-
export type { WaveformPoint, WaveformDisplayMode, WaveformUnitDisplayMode, WaveformLayoutPreset, WaveformOverlayMode, WaveformInteractionMode, WaveformXDomainStrategy, WaveformZoomIntentPayload, WaveformZoomEndPayload, WaveformPanEndPayload, WaveformZoomResetPayload, WaveformAnnotationStyle, WaveformAnnotation, WaveformSamplingMode, WaveformSamplingStrategy, WaveformSamplingOptions, WaveformSamplingBackend, WaveformSamplingDiagnostics, WaveformSamplingError, WaveformRenderingOptions, WaveformPlotMargin, WaveformTitleTextStyle, WaveformTitleOptions, WaveformLegendPosition, WaveformLegendOrientation, WaveformLegendOptions, WaveformFrameStyle, WaveformXAxisLabelKind, WaveformXAxisLabelFormatterContext, WaveformXAxisLabelFormatter, WaveformAxesOptions, WaveformZeroLineOptions, } from './chart';
|
|
4
|
+
export type { WaveformPoint, WaveformDisplayMode, WaveformUnitDisplayMode, WaveformLayoutPreset, WaveformOverlayMode, WaveformInteractionMode, WaveformXDomainStrategy, WaveformZoomIntentPayload, WaveformZoomEndPayload, WaveformPanEndPayload, WaveformZoomResetPayload, WaveformAnnotationStyle, WaveformAnnotation, WaveformSamplingMode, WaveformSamplingStrategy, WaveformSamplingOptions, WaveformSamplingBackend, WaveformSamplingDiagnostics, WaveformSamplingError, WaveformRenderingOptions, WaveformPlotMargin, WaveformTitleTextStyle, WaveformTitleOptions, WaveformLegendPosition, WaveformLegendOrientation, WaveformLegendOptions, WaveformFrameStyle, WaveformXAxisLabelKind, WaveformXAxisLabelFormatterContext, WaveformXAxisLabelFormatter, WaveformAxesOptions, WaveformYAxisLabelTextStyle, WaveformZeroLineOptions, } from './chart';
|
|
5
5
|
export type { SingleWaveformData, WaveformLineType, WaveformLineStyle, WaveformPointType, WaveformErrorBarOptions, ResolvedWaveformErrorBarOptions, WaveformTypedValues, TypedSampleData, TypedPointData, WaveformSeries, WaveformData, NormalizedWaveformSeries, } from './data';
|
|
6
|
+
export type { WaveformToolbarItem, WaveformToolbarOptions, WaveformControlTarget, WaveformControlAction, WaveformCommandMetadata, WaveformTargetStatus, WaveformViewportSnapshot, WaveformTargetResult, WaveformControlResult, WaveformControlState, WaveformImageExportOptions, WaveformImageExportErrorCode, WaveformImageExportError, WaveformChartHandle, } from './controls';
|