waveform-analysis 0.1.71 → 0.1.73
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 +260 -40
- package/dist/assets/{workerRuntime-o5An0M-W.js → workerRuntime-5p-EI-GL.js} +1 -1
- package/dist/index.cjs +2 -1
- package/dist/index.js +3874 -2778
- 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/annotation/useWaveformChartAnnotations.d.ts +0 -1
- 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 +6 -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 +5 -0
- package/dist/types/components/core/useWaveformChartController.d.ts +24 -6
- package/dist/types/components/core/useWaveformChartLifecycle.d.ts +2 -2
- package/dist/types/components/core/useWaveformData.d.ts +2 -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/useExtremaTickViewport.d.ts +5 -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 +1 -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/data/sx2Channel.d.ts +10 -0
- package/dist/types/demo/DemoYAxisPaddingControls.vue.d.ts +11 -0
- package/dist/types/demo/types.d.ts +7 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/types/chart.d.ts +32 -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 +61 -14
- package/src/components/WaveformChart.css +10 -1
- package/src/components/WaveformChart.vue +6 -0
- package/src/components/WaveformChartView.vue +27 -26
- package/src/components/annotation/WaveformAnnotationLayer.vue +6 -1
- package/src/components/annotation/useWaveformChartAnnotations.ts +7 -18
- package/src/components/controls/WaveformToolbar.vue +247 -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 +49 -36
- package/src/components/core/niceScale.ts +151 -0
- package/src/components/core/trackLayoutBuilder.ts +41 -17
- package/src/components/core/trackPagination.ts +3 -3
- package/src/components/core/types.ts +5 -0
- package/src/components/core/useWaveformChartController.ts +94 -3
- package/src/components/core/useWaveformChartLifecycle.ts +11 -111
- package/src/components/core/useWaveformData.ts +4 -0
- package/src/components/core/useWaveformLayout.ts +25 -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 +11 -9
- package/src/components/core/yAxisPadding.ts +60 -0
- package/src/components/core/yAxisTitleLayout.ts +11 -12
- package/src/components/interaction/useExtremaTickViewport.ts +43 -0
- package/src/components/interaction/useWaveformViewport.ts +11 -2
- package/src/components/rendering/WaveformTrack.css +1 -2
- package/src/components/rendering/WaveformTrack.vue +5 -12
- package/src/components/rendering/WaveformTrackAxes.vue +66 -19
- package/src/components/rendering/WaveformTrackBackdrop.vue +8 -3
- package/src/components/rendering/compactFrame.ts +31 -0
- package/src/components/rendering/yAxisTickVisibility.ts +156 -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 +67 -2
- package/src/data/sx2Channel.ts +315 -0
- 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 +53 -0
- package/src/demo/embedBridge.ts +85 -0
- package/src/demo/types.ts +7 -0
- package/src/index.ts +19 -0
- package/src/types/chart.ts +34 -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;
|
|
@@ -238,7 +254,6 @@ export declare function useWaveformChartController(props: ResolvedWaveformChartP
|
|
|
238
254
|
resolveTrackAtPointer: (pointerX: number, pointerY: number, trackIndex?: number) => import("./types").TrackLayout | undefined;
|
|
239
255
|
handleAnnotationClick: (event: MouseEvent, trackIndex?: number) => void;
|
|
240
256
|
handleNativeContextMenu: (event: MouseEvent) => void;
|
|
241
|
-
handleAnnotationContextMenu: (event: MouseEvent, trackIndex?: number) => void;
|
|
242
257
|
handleExistingAnnotationContextMenu: (annotationId: string, event: MouseEvent) => void;
|
|
243
258
|
handleAnnotationMove: (annotationId: string, offsetX: number, offsetY: number) => void;
|
|
244
259
|
editContextAnnotation: () => void;
|
|
@@ -262,6 +277,8 @@ export declare function useWaveformChartController(props: ResolvedWaveformChartP
|
|
|
262
277
|
activeInteractionMode: import("..").WaveformInteractionMode | undefined;
|
|
263
278
|
isZoomMode: boolean;
|
|
264
279
|
initialXDomain: [number, number];
|
|
280
|
+
originalXDomain: [number, number];
|
|
281
|
+
resolveOriginalTrackDomain: (track: import("./types").TrackLayout) => [number, number];
|
|
265
282
|
sharedZoomDomain: [number, number];
|
|
266
283
|
resolveInitialTrackDomain: (track: import("./types").TrackLayout) => [number, number];
|
|
267
284
|
gridCells: {
|
|
@@ -284,7 +301,7 @@ export declare function useWaveformChartController(props: ResolvedWaveformChartP
|
|
|
284
301
|
annotationTrackLayouts: import("../annotation").AnnotationTrackLayout[];
|
|
285
302
|
renderedAnnotations: import("../annotation").RenderedAnnotation[];
|
|
286
303
|
editorSeries: import("../annotation").AnnotationSeriesInfo | undefined;
|
|
287
|
-
resolveFrameNumber: (trackId: string) => string | number | undefined;
|
|
304
|
+
resolveFrameNumber: (trackId: string, slotIndex?: number) => string | number | undefined;
|
|
288
305
|
plotCenterX: number;
|
|
289
306
|
titleAreaStyle: import("vue").CSSProperties;
|
|
290
307
|
paginationVisible: boolean;
|
|
@@ -329,10 +346,11 @@ export declare function useWaveformChartController(props: ResolvedWaveformChartP
|
|
|
329
346
|
innerHeight: number;
|
|
330
347
|
titleVisualStyle: import("vue").CSSProperties;
|
|
331
348
|
titleTextStyle: import("vue").CSSProperties;
|
|
349
|
+
toolbar?: (boolean | import("../..").WaveformToolbarOptions) | undefined;
|
|
332
350
|
data: import("..").WaveformData;
|
|
333
351
|
displayMode: "independent" | "separated" | "compact";
|
|
334
352
|
overlayMode: "single-axis" | "multi-axis";
|
|
335
|
-
unitDisplayMode: "axis" | "legend-single-series" | "channel-label-or-legend";
|
|
353
|
+
unitDisplayMode: "axis" | "legend-single-series" | "channel-label" | "channel-label-or-legend";
|
|
336
354
|
layoutPreset: "default" | "edge-compact";
|
|
337
355
|
width?: number | undefined;
|
|
338
356
|
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, minimum?: 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;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ComputedRef, type ShallowRef } from 'vue';
|
|
2
|
+
import type { ZoomTransform } from 'd3';
|
|
3
|
+
import type { TrackLayout } from '../core/types';
|
|
4
|
+
/** Keep X coordinates stable when toggling extrema changes the reserved Y-label width. */
|
|
5
|
+
export declare function useExtremaTickViewport(visible: () => boolean, innerWidth: ComputedRef<number>, tracks: ComputedRef<TrackLayout[]>, sharedTransform: ShallowRef<ZoomTransform>, independentTransforms: ShallowRef<ZoomTransform[]>): void;
|
|
@@ -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,7 @@ interface Props {
|
|
|
10
10
|
showUnits?: boolean;
|
|
11
11
|
showLabelUnits?: boolean;
|
|
12
12
|
hideYAxisTitles?: boolean;
|
|
13
|
-
|
|
13
|
+
hideOverlappingMaximumLabel?: boolean;
|
|
14
14
|
}
|
|
15
15
|
declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
16
16
|
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,11 @@ export interface DemoControlPanelModel {
|
|
|
32
33
|
verticalGridColor: string;
|
|
33
34
|
xAxisLineVisible: boolean;
|
|
34
35
|
yAxisLineVisible: boolean;
|
|
36
|
+
upperPaddingEnabled: boolean;
|
|
37
|
+
lowerPaddingEnabled: boolean;
|
|
38
|
+
extremaTicksVisible: boolean;
|
|
39
|
+
upperPaddingPercent: number;
|
|
40
|
+
lowerPaddingPercent: number;
|
|
35
41
|
xAxisLabelFormatterEnabled: boolean;
|
|
36
42
|
xAxisLabelFormat: DemoXAxisLabelFormat;
|
|
37
43
|
xAxisLabelFormatOptions: Array<SelectOption<DemoXAxisLabelFormat>>;
|
|
@@ -68,6 +74,7 @@ export interface DemoControlPanelModel {
|
|
|
68
74
|
resetWaveformViewport: () => void;
|
|
69
75
|
}
|
|
70
76
|
export interface DemoChartModel {
|
|
77
|
+
toolbarVisible: boolean;
|
|
71
78
|
data: WaveformData;
|
|
72
79
|
initialXDomain?: [number, number];
|
|
73
80
|
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,22 @@ 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
|
+
/** Shows extra ticks for the full data extrema, independently of padding. Defaults to true. */
|
|
254
|
+
extremaTicksVisible?: boolean;
|
|
255
|
+
/** Fraction of the automatic Y span added above its maximum. Defaults to 0. */
|
|
238
256
|
upperPaddingRatio?: number;
|
|
257
|
+
/** Fraction of the automatic Y span added below its minimum. Defaults to 0. */
|
|
258
|
+
lowerPaddingRatio?: number;
|
|
259
|
+
/** False disables upper padding; true defaults an omitted ratio to 0.1. */
|
|
260
|
+
upperPaddingEnabled?: boolean;
|
|
261
|
+
/** False disables lower padding; true defaults an omitted ratio to 0.1. */
|
|
262
|
+
lowerPaddingEnabled?: boolean;
|
|
239
263
|
};
|
|
240
264
|
}
|
|
241
265
|
/** 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
|
+
}
|