@rfkit/charts 1.8.2 → 1.9.1

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.
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license lucide-react v0.577.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */
@@ -0,0 +1,18 @@
1
+ import type { TimestampedFloat32Array, WaterfallSnapshot } from '@rfkit/spectrum-analyzer';
2
+ import type { AxisXProps, HeatmapSlider2DData } from '../../../types';
3
+ import { type HeatmapSourceRange } from '../viewport.ts';
4
+ interface SliderInfoParams {
5
+ formatBandwidth: (bandwidth: number) => string;
6
+ frequencyFormat: AxisXProps['frequencyFormat'];
7
+ heatmapData: readonly TimestampedFloat32Array[];
8
+ rect: {
9
+ height: number;
10
+ leftPosition: number;
11
+ position: number;
12
+ width: number;
13
+ };
14
+ sourceRangeOverride?: HeatmapSourceRange;
15
+ waterfallSnapshot: Readonly<WaterfallSnapshot> | null;
16
+ }
17
+ export declare const calculateHeatmapSliderInfo: ({ formatBandwidth, frequencyFormat, heatmapData, rect, sourceRangeOverride, waterfallSnapshot }: SliderInfoParams) => HeatmapSlider2DData | null;
18
+ export {};
@@ -1,4 +1,5 @@
1
1
  import type { AxisXProps, HeatmapAreaData, HeatmapCaptureProps } from '../../../types';
2
+ import { type HeatmapSourceRange } from '../viewport';
2
3
  interface Coordinates {
3
4
  startLeft: number;
4
5
  endLeft: number;
@@ -26,4 +27,7 @@ export declare const defaultAreaInfoResult: {
26
27
  };
27
28
  export default function calculateAreaInfo({ endLeft, startLeft, startTop, endTop, frequencyFormat, globalID }: AreaInfoParams): HeatmapAreaData;
28
29
  export declare const heatmapCaptureUpdate: (globalID: string, func?: (props: Partial<HeatmapCaptureProps>) => void) => (...args: any[]) => void;
30
+ export declare const getHeatmapCaptureSourceRange: (globalID: string) => Readonly<HeatmapSourceRange> | null;
31
+ export declare const setHeatmapCaptureSourceRange: (globalID: string, range: Readonly<HeatmapSourceRange> | null) => void;
32
+ export declare const subscribeHeatmapCaptureSourceRange: (globalID: string, func: (range: Readonly<HeatmapSourceRange> | null) => void) => (...args: any[]) => void;
29
33
  export {};
@@ -0,0 +1,10 @@
1
+ import type { WaterfallSnapshot } from '@rfkit/spectrum-analyzer';
2
+ interface Props {
3
+ globalID: string;
4
+ onResetViewport: () => void;
5
+ }
6
+ export interface HeatmapOverviewHandle {
7
+ update: (snapshot: Readonly<WaterfallSnapshot>) => void;
8
+ }
9
+ declare const HeatmapOverview: import("react").ForwardRefExoticComponent<Props & import("react").RefAttributes<HeatmapOverviewHandle>>;
10
+ export default HeatmapOverview;
@@ -1,4 +1,4 @@
1
- import type { TimestampedFloat32Array } from '@rfkit/spectrum-analyzer';
1
+ import type { TimestampedFloat32Array, WaterfallSnapshot } from '@rfkit/spectrum-analyzer';
2
2
  export interface HeatmapGridInfo {
3
3
  columnCount: number;
4
4
  rowCount: number;
@@ -19,20 +19,31 @@ export interface HeatmapCursorValue {
19
19
  timestamp: string;
20
20
  value: number | null;
21
21
  }
22
- export declare const resolveHeatmapColumnCount: (waterfallData: TimestampedFloat32Array[]) => number;
23
- export declare const resolveHeatmapGridInfo: (waterfallData: TimestampedFloat32Array[]) => HeatmapGridInfo;
22
+ export declare const resolveHeatmapColumnCount: (waterfallData: readonly TimestampedFloat32Array[]) => number;
23
+ export declare const resolveHeatmapGridInfo: (waterfallData: readonly TimestampedFloat32Array[]) => HeatmapGridInfo;
24
24
  export declare const resolveHeatmapRowIndex: (top: number, rowCount: number) => number;
25
25
  export declare const resolveHeatmapColumnIndex: (left: number, columnCount: number) => number;
26
26
  export declare const resolveHeatmapRowRange: (topA: number, topB: number, rowCount: number) => HeatmapRowRange | null;
27
27
  export declare const resolveHeatmapColumnRange: (leftA: number, leftB: number, columnCount: number) => HeatmapColumnRange | null;
28
- export declare const resolveHeatmapGridRange: (waterfallData: TimestampedFloat32Array[], bounds: {
28
+ export declare const resolveHeatmapGridRange: (waterfallData: readonly TimestampedFloat32Array[], bounds: {
29
29
  endLeft: number;
30
30
  endTop: number;
31
31
  startLeft: number;
32
32
  startTop: number;
33
33
  }) => HeatmapGridRange | null;
34
- export declare const resolveHeatmapRangeData: (waterfallData: TimestampedFloat32Array[], range: HeatmapGridRange) => number[][];
35
- export declare const resolveHeatmapCursorValue: (waterfallData: TimestampedFloat32Array[], coord: {
34
+ export declare const resolveHeatmapRangeData: (waterfallData: readonly TimestampedFloat32Array[], range: HeatmapGridRange) => number[][];
35
+ export declare const resolveHeatmapCursorValue: (waterfallData: readonly TimestampedFloat32Array[], coord: {
36
36
  left: number;
37
37
  top: number;
38
38
  }) => HeatmapCursorValue | null;
39
+ export declare const resolveHeatmapCursorValueFromSnapshot: (snapshot: Readonly<WaterfallSnapshot>, coord: {
40
+ left: number;
41
+ top: number;
42
+ }) => HeatmapCursorValue | null;
43
+ export declare const resolveHeatmapGridRangeFromSnapshot: (snapshot: Readonly<WaterfallSnapshot>, bounds: {
44
+ endLeft: number;
45
+ endTop: number;
46
+ startLeft: number;
47
+ startTop: number;
48
+ }) => HeatmapGridRange | null;
49
+ export declare const resolveHeatmapRangeDataFromSnapshot: (snapshot: Readonly<WaterfallSnapshot>, range: HeatmapGridRange) => number[][];
@@ -1,5 +1,9 @@
1
+ import { type ReactNode } from 'react';
1
2
  interface Props {
2
3
  heatmapDefaultData?: Array<Array<number>>;
4
+ onSubscriptionReadyChange?: (ready: boolean) => void;
5
+ overview?: ReactNode;
6
+ xyZoom?: boolean;
3
7
  }
4
8
  declare const Heatmap: React.FC<Props>;
5
9
  export default Heatmap;
@@ -0,0 +1,3 @@
1
+ import type { WaterfallSnapshot } from '@rfkit/spectrum-analyzer';
2
+ export declare const getHeatmapWaterfallSnapshot: (globalID: string) => Readonly<WaterfallSnapshot> | null;
3
+ export declare const resetHeatmapViewport: (globalID: string) => boolean;
@@ -0,0 +1 @@
1
+ export default function useWaterfallZoomEvent(id: string, enabled: boolean): void;
@@ -0,0 +1,98 @@
1
+ import type { TimestampedFloat32Array, WaterfallSamplingOptions, WaterfallSnapshot } from '@rfkit/spectrum-analyzer';
2
+ export interface HeatmapSourcePoint {
3
+ columnIndex: number;
4
+ rowIndex: number;
5
+ sourceLeft: number;
6
+ visibleColumnIndex: number;
7
+ visibleRowIndex: number;
8
+ }
9
+ export interface HeatmapSourceRange {
10
+ endCol: number;
11
+ endIndex: number;
12
+ startCol: number;
13
+ startIndex: number;
14
+ }
15
+ export interface HeatmapSourceRangeScreenRect {
16
+ height: number;
17
+ leftPosition: number;
18
+ position: number;
19
+ width: number;
20
+ }
21
+ export interface HeatmapViewportRange {
22
+ x: readonly [start: number, end: number];
23
+ y: readonly [start: number, end: number];
24
+ }
25
+ export type HeatmapViewportSnapshot = Pick<WaterfallSnapshot, 'range' | 'sourceSize'>;
26
+ export interface HeatmapOverviewSourcePoint {
27
+ x: number;
28
+ y: number;
29
+ }
30
+ export interface HeatmapOverviewViewportRect {
31
+ height: number;
32
+ left: number;
33
+ top: number;
34
+ width: number;
35
+ }
36
+ export declare const clampHeatmapPercent: (value: number) => number;
37
+ export declare const normalizeHeatmapFrames: (frames: readonly TimestampedFloat32Array[]) => TimestampedFloat32Array[];
38
+ export declare const resolveHeatmapVisibleRowIndex: (top: number, rowCount: number) => number;
39
+ export declare const resolveHeatmapVisibleColumnIndex: (left: number, columnCount: number) => number;
40
+ export declare const resolveHeatmapSourceLeft: (left: number, snapshot: Readonly<WaterfallSnapshot>) => number;
41
+ export declare const resolveHeatmapSourcePoint: (snapshot: Readonly<WaterfallSnapshot>, coord: {
42
+ left: number;
43
+ top: number;
44
+ }) => HeatmapSourcePoint | null;
45
+ export declare const resolveHeatmapSourceRange: (snapshot: Readonly<WaterfallSnapshot>, bounds: {
46
+ endLeft: number;
47
+ endTop: number;
48
+ startLeft: number;
49
+ startTop: number;
50
+ }) => HeatmapSourceRange | null;
51
+ export declare const resolveHeatmapSnapshotRangeData: (snapshot: Readonly<WaterfallSnapshot>, range: HeatmapSourceRange) => number[][];
52
+ export declare const resolveHeatmapSourceRangeScreenRect: (snapshot: Readonly<HeatmapViewportSnapshot>, range: HeatmapSourceRange) => HeatmapSourceRangeScreenRect | null;
53
+ export declare const resolveHeatmapProjectedSourceRange: (snapshot: Readonly<HeatmapViewportSnapshot>, bounds: {
54
+ endLeft: number;
55
+ endTop: number;
56
+ startLeft: number;
57
+ startTop: number;
58
+ }) => HeatmapSourceRange | null;
59
+ export declare const calculateHeatmapWheelRange: (snapshot: Readonly<WaterfallSnapshot>, wheel: number, coord: {
60
+ left: number;
61
+ top: number;
62
+ }) => HeatmapViewportRange;
63
+ export declare const resolveHeatmapOverviewSourcePoint: (snapshot: Readonly<HeatmapViewportSnapshot>, point: {
64
+ left: number;
65
+ top: number;
66
+ }) => HeatmapOverviewSourcePoint;
67
+ export declare const resolveHeatmapOverviewViewportRect: (snapshot: Readonly<HeatmapViewportSnapshot>) => HeatmapOverviewViewportRect;
68
+ export declare const resolveHeatmapOverviewSourceRangeRect: (snapshot: Readonly<HeatmapViewportSnapshot>, range: HeatmapSourceRange) => HeatmapOverviewViewportRect;
69
+ export declare const isHeatmapSourceRangeVisibleInViewport: (snapshot: Readonly<HeatmapViewportSnapshot>, range: HeatmapSourceRange) => boolean;
70
+ export declare const isHeatmapOverviewSourcePointInRange: (range: HeatmapSourceRange, point: HeatmapOverviewSourcePoint, tolerance?: HeatmapOverviewSourcePoint) => boolean;
71
+ export declare const isHeatmapViewportFullRange: (snapshot: Readonly<HeatmapViewportSnapshot>) => boolean;
72
+ export declare const calculateHeatmapOverviewCenteredRange: (snapshot: Readonly<HeatmapViewportSnapshot>, point: {
73
+ left: number;
74
+ top: number;
75
+ }) => HeatmapViewportRange;
76
+ export declare const calculateHeatmapOverviewSourceRangeCenteredRange: (snapshot: Readonly<HeatmapViewportSnapshot>, range: HeatmapSourceRange) => HeatmapViewportRange;
77
+ export declare const calculateHeatmapOverviewDragRange: (snapshot: Readonly<HeatmapViewportSnapshot>, point: {
78
+ left: number;
79
+ top: number;
80
+ }, grabOffset: HeatmapOverviewSourcePoint) => HeatmapViewportRange;
81
+ export declare const isHeatmapOverviewSourcePointInViewport: (snapshot: Readonly<HeatmapViewportSnapshot>, point: HeatmapOverviewSourcePoint) => boolean;
82
+ export declare const calculateHeatmapDragRange: (snapshot: Readonly<HeatmapViewportSnapshot>, diff: {
83
+ left: number;
84
+ top: number;
85
+ }) => HeatmapViewportRange;
86
+ export declare const calculateHeatmapDragRangeFromCoordinates: (snapshot: Readonly<HeatmapViewportSnapshot>, start: {
87
+ left: number;
88
+ top: number;
89
+ }, current: {
90
+ left: number;
91
+ top: number;
92
+ }) => HeatmapViewportRange;
93
+ export declare const toWaterfallSamplingOptions: (range: HeatmapViewportRange) => WaterfallSamplingOptions;
94
+ export declare const isHeatmapViewportRangeEqual: (snapshot: Readonly<WaterfallSnapshot>, range: HeatmapViewportRange) => boolean;
95
+ export declare const resolveHeatmapSourceRowScreenRange: (snapshot: Readonly<WaterfallSnapshot>, startIndex: number, endIndex: number) => {
96
+ height: number;
97
+ top: number;
98
+ } | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rfkit/charts",
3
- "version": "1.8.2",
3
+ "version": "1.9.1",
4
4
  "type": "module",
5
5
  "description": "Chart components for wireless monitoring web applications",
6
6
  "exports": {
@@ -136,5 +136,7 @@ export interface Render {
136
136
  export type PublishData = SetOption | SetSeries | SetSpectrumBandwidth | SetSegments | SetChannels | SetMarker | SetAntennaFactor | SetSignal | PublishSpectrum | PublishHeatmap | PublishFluorescence | PublishOccupancy | PublishLevelStream | PublishIQ | PublishDial | PublishGauge | AutorangingEvent | PointsEvent | BandEvent | ScopeEvent | Reset | Clear | Resize | Render;
137
137
  export type Publish = ((p: PublishData) => void) & {
138
138
  getSourceData: () => rawData;
139
+ /** 将支持视口的图表恢复为完整数据范围;不支持时为空操作。 */
140
+ resetViewport?: () => void;
139
141
  };
140
142
  export {};
@@ -1,4 +1,14 @@
1
1
  import type { TimestampedFloat32Array } from '@rfkit/spectrum-analyzer';
2
+ export interface WaterfallViewportState {
3
+ range: {
4
+ x: readonly [start: number, end: number];
5
+ y: readonly [start: number, end: number];
6
+ };
7
+ sourceSize: {
8
+ width: number;
9
+ height: number;
10
+ };
11
+ }
2
12
  export declare enum HeatmapCaptureType {
3
13
  Area = "area",
4
14
  Slider = "slider",
@@ -20,7 +20,7 @@ export * from './ui';
20
20
  import type { Publish, SegmentsType } from '..';
21
21
  import type { AxisXProps, AxisYProps } from './axis';
22
22
  import type { FrequencyAllocationProps } from './frequency';
23
- import type { HeatmapCaptureProps } from './heatmap';
23
+ import type { HeatmapCaptureProps, WaterfallViewportState } from './heatmap';
24
24
  import type { MarkerProps } from './marker';
25
25
  import type { LevelStreamProps, SeriesProps } from './series';
26
26
  import type { SignalAnalysisProps, SignalProps } from './signal';
@@ -39,6 +39,7 @@ export interface StoreState {
39
39
  marker: MarkerProps;
40
40
  limit: LimitProps;
41
41
  heatmapCapture: HeatmapCaptureProps;
42
+ waterfallViewport: WaterfallViewportState;
42
43
  cursor: CursorProps;
43
44
  zoom: ZoomProps;
44
45
  signal: SignalProps;
@@ -44,8 +44,16 @@ export interface CursorProps {
44
44
  timeout: number;
45
45
  mode?: ModuleType;
46
46
  }
47
+ export interface ZoomOverviewProps {
48
+ /** 是否在独立瀑布图缩放后显示全景导航。仅在 zoom.xy=true 时生效。 */
49
+ show?: boolean;
50
+ }
47
51
  export interface ZoomProps {
48
52
  show: boolean;
53
+ /** 独立瀑布图是否启用 X/Y 同步缩放。 */
54
+ xy?: boolean;
55
+ /** 独立瀑布图的可选全景导航。 */
56
+ overview?: ZoomOverviewProps;
49
57
  select: boolean;
50
58
  interval: AxisXRange;
51
59
  style: null | Record<string, unknown>;
@@ -1,4 +1,4 @@
1
- import type { SpectrumAnalyzer, SpectrumOutputData } from '@rfkit/spectrum-analyzer';
1
+ import type { SpectrumAnalyzer, SpectrumOutputData, WaterfallAnalyzer } from '@rfkit/spectrum-analyzer';
2
2
  import type { RecursiveFunction } from '../types';
3
3
  interface ChartsGlobal {
4
4
  datas: Record<string, unknown>;
@@ -37,6 +37,7 @@ export declare const getPublishSubscriptionKey: (globalID: string) => string;
37
37
  export declare const getModuleSubscriptionKey: (globalID: string, moduleName: string) => string;
38
38
  export declare const getDatabaseStorageKey: (globalID: string) => string;
39
39
  export declare const getAnalyzerStorageKey: (globalID: string) => string;
40
+ export declare const getWaterfallAnalyzerStorageKey: (globalID: string) => string;
40
41
  export declare const getUpdateDataSubscriptionKey: (id?: string) => string;
41
42
  export declare const createPublishSubscriptionManager: (globalID: string, func?: CSMCallback, name?: string) => (...args: any[]) => void;
42
43
  export declare const createModuleSubscriptionManager: (globalID: string, moduleName: string, func?: CSMCallback, name?: string) => (...args: any[]) => void;
@@ -49,4 +50,5 @@ export default function withDatabase(globalID: string, data?: rawData): rawData;
49
50
  export declare const withUpdateData: (id?: string, name?: string, func?: RecursiveFunction) => (...args: any[]) => void;
50
51
  export declare const setScanDF360Prob: (id?: string, func?: RecursiveFunction<[boolean]>) => (...args: any[]) => void;
51
52
  export declare function withSpectrumAnalyzerSYNC(globalID: string, analyzer?: SpectrumAnalyzer): SpectrumAnalyzer;
53
+ export declare function withWaterfallAnalyzerSYNC(globalID: string, analyzer?: WaterfallAnalyzer | null): WaterfallAnalyzer | null;
52
54
  export {};