panelui-native 0.60.0 → 0.62.0
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 +3 -1
- package/lib/module/components/area-chart/index.js +86 -1
- package/lib/module/components/area-chart/index.js.map +1 -1
- package/lib/module/components/bar-chart/index.js +112 -2
- package/lib/module/components/bar-chart/index.js.map +1 -1
- package/lib/module/components/live-line-chart/index.js +1063 -0
- package/lib/module/components/live-line-chart/index.js.map +1 -0
- package/lib/module/components/polar-area-chart/index.js +719 -0
- package/lib/module/components/polar-area-chart/index.js.map +1 -0
- package/lib/module/components/treemap-chart/index.js +957 -0
- package/lib/module/components/treemap-chart/index.js.map +1 -0
- package/lib/module/index.js +3 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/chart.js +171 -4
- package/lib/module/utils/chart.js.map +1 -1
- package/lib/typescript/src/components/area-chart/index.d.ts +28 -1
- package/lib/typescript/src/components/area-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/bar-chart/index.d.ts +33 -3
- package/lib/typescript/src/components/bar-chart/index.d.ts.map +1 -1
- package/lib/typescript/src/components/live-line-chart/index.d.ts +293 -0
- package/lib/typescript/src/components/live-line-chart/index.d.ts.map +1 -0
- package/lib/typescript/src/components/polar-area-chart/index.d.ts +259 -0
- package/lib/typescript/src/components/polar-area-chart/index.d.ts.map +1 -0
- package/lib/typescript/src/components/treemap-chart/index.d.ts +317 -0
- package/lib/typescript/src/components/treemap-chart/index.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +3 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/utils/chart.d.ts +27 -1
- package/lib/typescript/src/utils/chart.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/components/area-chart/index.tsx +86 -1
- package/src/components/bar-chart/index.tsx +115 -4
- package/src/components/live-line-chart/index.tsx +1294 -0
- package/src/components/polar-area-chart/index.tsx +928 -0
- package/src/components/treemap-chart/index.tsx +1175 -0
- package/src/index.ts +52 -0
- package/src/utils/chart.ts +202 -4
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LiveLineChart — a reading that keeps arriving, against a window that keeps
|
|
3
|
+
* moving.
|
|
4
|
+
*
|
|
5
|
+
* ```tsx
|
|
6
|
+
* <LiveLineChart data={points} window={30}>
|
|
7
|
+
* <LiveLineChart.Grid />
|
|
8
|
+
* <LiveLineChart.Area />
|
|
9
|
+
* <LiveLineChart.Line />
|
|
10
|
+
* <LiveLineChart.Tip />
|
|
11
|
+
* <LiveLineChart.XAxis />
|
|
12
|
+
* </LiveLineChart>
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* ## What it is, against the line chart beside it
|
|
16
|
+
*
|
|
17
|
+
* `LineChart` places a point by its position in the list, which is right for a
|
|
18
|
+
* series of twelve months whatever the gaps between the dates behind them. Here
|
|
19
|
+
* a point is placed at the time it carries, against a domain that runs from
|
|
20
|
+
* `window` seconds ago to now — so the gaps are the subject, and a reading that
|
|
21
|
+
* arrived late sits where it arrived rather than one slot along.
|
|
22
|
+
*
|
|
23
|
+
* ## The clock, and what it costs
|
|
24
|
+
*
|
|
25
|
+
* This is the only thing in the library that animates without an interaction or
|
|
26
|
+
* a change of data. The window is tied to the wall clock, so the line drifts
|
|
27
|
+
* left whether or not anything is arriving, and a feed that stalls shows as a
|
|
28
|
+
* flat run reaching back from the tip rather than as a chart that has frozen.
|
|
29
|
+
* Those two look identical if the window only moves when a point lands, and
|
|
30
|
+
* they mean opposite things.
|
|
31
|
+
*
|
|
32
|
+
* The cost is a frame callback for as long as the chart is mounted. It is
|
|
33
|
+
* stopped by `paused`, by `status="loading"` and on unmount, and it is never
|
|
34
|
+
* started when the platform asks for reduced motion — in that case the window
|
|
35
|
+
* advances as each point arrives instead, which is the same picture sampled
|
|
36
|
+
* less often.
|
|
37
|
+
*
|
|
38
|
+
* ## Colour follows the recent direction
|
|
39
|
+
*
|
|
40
|
+
* With `momentumColors` set, the line, the fill and the tip take their colour
|
|
41
|
+
* from where the reading has been going rather than from a fixed hue. It is the
|
|
42
|
+
* one thing on the chart readable without looking at the axis, which is what a
|
|
43
|
+
* number being watched out of the corner of an eye needs.
|
|
44
|
+
*/
|
|
45
|
+
import { type ReactNode } from 'react';
|
|
46
|
+
import { type ViewProps } from 'react-native';
|
|
47
|
+
import { type ChartCurve } from '../../utils/chart.js';
|
|
48
|
+
/** Which layer a part belongs to. Read off the component itself. */
|
|
49
|
+
type Layer = 'svg' | 'overlay' | 'header';
|
|
50
|
+
/** Whether the chart is showing data or waiting for it. */
|
|
51
|
+
export type LiveLineChartStatus = 'loading' | 'ready';
|
|
52
|
+
/** Where the reading has been going, over the last few points. */
|
|
53
|
+
export type LiveLineMomentum = 'up' | 'down' | 'flat';
|
|
54
|
+
/** A colour per direction, for a chart that is read by its colour. */
|
|
55
|
+
export interface LiveLineMomentumColors {
|
|
56
|
+
up?: string;
|
|
57
|
+
down?: string;
|
|
58
|
+
flat?: string;
|
|
59
|
+
}
|
|
60
|
+
/** One reading. `time` is a timestamp in milliseconds, as `Date.now()` gives. */
|
|
61
|
+
export interface LiveLinePoint {
|
|
62
|
+
time: number;
|
|
63
|
+
value: number;
|
|
64
|
+
}
|
|
65
|
+
/** The reading under the crosshair, for something rendered inside the chart. */
|
|
66
|
+
export declare function useLiveLineChart(): {
|
|
67
|
+
activePoint: LiveLinePoint | null;
|
|
68
|
+
latest: LiveLinePoint | null;
|
|
69
|
+
momentum: LiveLineMomentum;
|
|
70
|
+
color: string;
|
|
71
|
+
};
|
|
72
|
+
export interface LiveLineChartProps extends ViewProps {
|
|
73
|
+
className?: string;
|
|
74
|
+
/** The readings so far, oldest first. Append to it as they arrive. */
|
|
75
|
+
data: LiveLinePoint[];
|
|
76
|
+
/** How much time the plot spans, in seconds. */
|
|
77
|
+
window?: number;
|
|
78
|
+
/** Freeze the window where it is. The readings still arrive; the clock stops. */
|
|
79
|
+
paused?: boolean;
|
|
80
|
+
/** Fix the y-axis instead of deriving it from what is visible. */
|
|
81
|
+
yDomain?: [number, number];
|
|
82
|
+
/** Milliseconds for the y-axis to settle after the range changes. */
|
|
83
|
+
domainDuration?: number;
|
|
84
|
+
/** `monotone` never overshoots between readings; `linear` joins them straight. */
|
|
85
|
+
curve?: ChartCurve;
|
|
86
|
+
/**
|
|
87
|
+
* The most readings kept. Older ones are dropped, since they are off the
|
|
88
|
+
* window and cannot come back — an unbounded feed otherwise grows an array
|
|
89
|
+
* for as long as the screen is open.
|
|
90
|
+
*/
|
|
91
|
+
maxPoints?: number;
|
|
92
|
+
/** Width ÷ height of the plot. */
|
|
93
|
+
aspectRatio?: number;
|
|
94
|
+
/** `loading` draws a flat placeholder and holds the clock. */
|
|
95
|
+
status?: LiveLineChartStatus;
|
|
96
|
+
/** Colour per direction. Left out, the chart draws in one hue throughout. */
|
|
97
|
+
momentumColors?: LiveLineMomentumColors;
|
|
98
|
+
/** Overrides the `--color-chart-1` token. Ignored when `momentumColors` is set. */
|
|
99
|
+
color?: string;
|
|
100
|
+
/** The reading under the crosshair as it moves, and `null` when the finger lifts. */
|
|
101
|
+
onActivePointChange?: (point: LiveLinePoint | null) => void;
|
|
102
|
+
children?: ReactNode;
|
|
103
|
+
}
|
|
104
|
+
export interface LiveLineChartHandle {
|
|
105
|
+
/** Jump the window to the current moment — after a pause, or a background. */
|
|
106
|
+
sync: () => void;
|
|
107
|
+
}
|
|
108
|
+
export interface LiveLineChartGridProps {
|
|
109
|
+
/** How many bands the plot is divided into. */
|
|
110
|
+
rows?: number;
|
|
111
|
+
color?: string;
|
|
112
|
+
dashArray?: string;
|
|
113
|
+
}
|
|
114
|
+
/** The horizontal rules the readings are judged against. */
|
|
115
|
+
declare function LiveLineChartGrid({ rows, color, dashArray }: LiveLineChartGridProps): import("react").JSX.Element;
|
|
116
|
+
declare namespace LiveLineChartGrid {
|
|
117
|
+
var displayName: string;
|
|
118
|
+
var layer: Layer;
|
|
119
|
+
}
|
|
120
|
+
export interface LiveLineChartLineProps {
|
|
121
|
+
strokeWidth?: number;
|
|
122
|
+
/** Overrides the chart's colour, momentum included. */
|
|
123
|
+
color?: string;
|
|
124
|
+
}
|
|
125
|
+
/** The line itself, rebuilt on the UI thread every frame the window moves. */
|
|
126
|
+
declare function LiveLineChartLine({ strokeWidth, color }: LiveLineChartLineProps): import("react").JSX.Element | null;
|
|
127
|
+
declare namespace LiveLineChartLine {
|
|
128
|
+
var displayName: string;
|
|
129
|
+
var layer: Layer;
|
|
130
|
+
}
|
|
131
|
+
export interface LiveLineChartAreaProps {
|
|
132
|
+
/** Opacity at the top of the fill, fading to nothing at the baseline. */
|
|
133
|
+
opacity?: number;
|
|
134
|
+
/** Overrides the chart's colour, momentum included. */
|
|
135
|
+
color?: string;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* The fill under the line.
|
|
139
|
+
*
|
|
140
|
+
* Its own part rather than a flag on the line, so a chart that wants the shape
|
|
141
|
+
* without the weight of a filled band simply does not have one.
|
|
142
|
+
*/
|
|
143
|
+
declare function LiveLineChartArea({ opacity, color }: LiveLineChartAreaProps): import("react").JSX.Element | null;
|
|
144
|
+
declare namespace LiveLineChartArea {
|
|
145
|
+
var displayName: string;
|
|
146
|
+
var layer: Layer;
|
|
147
|
+
}
|
|
148
|
+
export interface LiveLineChartTipProps {
|
|
149
|
+
/**
|
|
150
|
+
* Show the current reading in a badge beside the dot.
|
|
151
|
+
*
|
|
152
|
+
* Off by default. The badge is a floating card, which is the shape a reader
|
|
153
|
+
* has learnt means "you touched something" — sitting there unasked it reads
|
|
154
|
+
* as a tooltip nobody opened. Turn it on where the chart has no header to put
|
|
155
|
+
* the reading in, and it becomes the only place the number is written.
|
|
156
|
+
*/
|
|
157
|
+
badge?: boolean;
|
|
158
|
+
/** Ring the dot with a repeating pulse. */
|
|
159
|
+
pulse?: boolean;
|
|
160
|
+
/** Format the badge. Defaults to a compact number. */
|
|
161
|
+
formatValue?: (value: number) => string;
|
|
162
|
+
className?: string;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* The dot at the leading end, and what it currently reads.
|
|
166
|
+
*
|
|
167
|
+
* It rides the newest reading rather than the right-hand edge, so a feed that
|
|
168
|
+
* stops is a dot drifting left with the rest of the line. Pinning it to the
|
|
169
|
+
* edge would hold it still and steady, which is the picture of a feed that is
|
|
170
|
+
* working.
|
|
171
|
+
*
|
|
172
|
+
* A view rather than an SVG node: it carries text and a pulse, and SVG text
|
|
173
|
+
* ignores the platform's text scaling and the theme's font.
|
|
174
|
+
*/
|
|
175
|
+
declare function LiveLineChartTip({ badge, pulse, formatValue, className, }: LiveLineChartTipProps): import("react").JSX.Element | null;
|
|
176
|
+
declare namespace LiveLineChartTip {
|
|
177
|
+
var displayName: string;
|
|
178
|
+
var layer: Layer;
|
|
179
|
+
}
|
|
180
|
+
export interface LiveLineChartXAxisProps {
|
|
181
|
+
/** How many labels along the bottom. */
|
|
182
|
+
ticks?: number;
|
|
183
|
+
/** Rewrites a label. Given how many seconds back the tick is. */
|
|
184
|
+
formatTick?: (secondsAgo: number) => string;
|
|
185
|
+
className?: string;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* How far back the plot reaches, labelled along the bottom.
|
|
189
|
+
*
|
|
190
|
+
* The labels are offsets from now — `-30s`, `-15s`, `now` — rather than clock
|
|
191
|
+
* times, and they never change. A moving window labelled with wall-clock times
|
|
192
|
+
* would rewrite every one of them on every frame, which is a row of digits
|
|
193
|
+
* churning under a chart that is trying to be read.
|
|
194
|
+
*/
|
|
195
|
+
declare function LiveLineChartXAxis({ ticks, formatTick, className }: LiveLineChartXAxisProps): import("react").JSX.Element | null;
|
|
196
|
+
declare namespace LiveLineChartXAxis {
|
|
197
|
+
var displayName: string;
|
|
198
|
+
var layer: Layer;
|
|
199
|
+
}
|
|
200
|
+
export interface LiveLineChartYAxisProps {
|
|
201
|
+
/** How many labels up the side. */
|
|
202
|
+
ticks?: number;
|
|
203
|
+
/** Format a value. Defaults to a compact number. */
|
|
204
|
+
formatValue?: (value: number) => string;
|
|
205
|
+
className?: string;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* The scale up the left-hand side.
|
|
209
|
+
*
|
|
210
|
+
* Declaring one widens the left gutter, which the root reads off the children
|
|
211
|
+
* before anything is laid out — an axis given no room is drawn over the line,
|
|
212
|
+
* which loses both the numbers and the shape they were there to explain.
|
|
213
|
+
*
|
|
214
|
+
* The labels follow the domain the tween is heading for rather than the tween
|
|
215
|
+
* itself. A number re-rendered on every frame of a settle is thirty renders
|
|
216
|
+
* landing on the string it started on.
|
|
217
|
+
*/
|
|
218
|
+
declare function LiveLineChartYAxis({ ticks, formatValue, className }: LiveLineChartYAxisProps): import("react").JSX.Element | null;
|
|
219
|
+
declare namespace LiveLineChartYAxis {
|
|
220
|
+
var displayName: string;
|
|
221
|
+
var layer: Layer;
|
|
222
|
+
var axis: "y";
|
|
223
|
+
}
|
|
224
|
+
export interface LiveLineChartTooltipProps {
|
|
225
|
+
/** Format the value. Defaults to a compact number. */
|
|
226
|
+
formatValue?: (value: number) => string;
|
|
227
|
+
className?: string;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Drag back through the window to read a reading that has already gone past.
|
|
231
|
+
*
|
|
232
|
+
* The crosshair is pinned to the *moment* it was put on rather than to the
|
|
233
|
+
* place on screen, so it travels left with the reading it named instead of
|
|
234
|
+
* sitting still while the line slides out from under it.
|
|
235
|
+
*/
|
|
236
|
+
declare function LiveLineChartTooltip({ formatValue, className }: LiveLineChartTooltipProps): import("react").JSX.Element | null;
|
|
237
|
+
declare namespace LiveLineChartTooltip {
|
|
238
|
+
var displayName: string;
|
|
239
|
+
var layer: Layer;
|
|
240
|
+
}
|
|
241
|
+
export interface LiveLineChartSkeletonProps {
|
|
242
|
+
color?: string;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* The waiting state: a flat line down the middle of the plot.
|
|
246
|
+
*
|
|
247
|
+
* The shape the real line grows out of once readings arrive, rather than a
|
|
248
|
+
* placeholder series — an invented run of readings is indistinguishable from a
|
|
249
|
+
* real one until it changes under the reader.
|
|
250
|
+
*/
|
|
251
|
+
declare function LiveLineChartSkeleton({ color }: LiveLineChartSkeletonProps): import("react").JSX.Element | null;
|
|
252
|
+
declare namespace LiveLineChartSkeleton {
|
|
253
|
+
var displayName: string;
|
|
254
|
+
var layer: Layer;
|
|
255
|
+
}
|
|
256
|
+
export interface LiveLineChartHeaderProps extends ViewProps {
|
|
257
|
+
className?: string;
|
|
258
|
+
/** Small line above the value — what is being watched. */
|
|
259
|
+
title?: string;
|
|
260
|
+
/** The readout. Left out, it shows the current reading. */
|
|
261
|
+
value?: string;
|
|
262
|
+
/** One muted line under the value. */
|
|
263
|
+
caption?: string;
|
|
264
|
+
/** Format the derived value. Defaults to a compact number. */
|
|
265
|
+
formatValue?: (value: number) => string;
|
|
266
|
+
/** Trailing slot — a pause control, a badge, a unit. */
|
|
267
|
+
children?: ReactNode;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* The strip above the plot: what is being watched and what it currently reads.
|
|
271
|
+
*
|
|
272
|
+
* The value falls back to the reading under the crosshair, then to the latest
|
|
273
|
+
* one, so a drag back through the window reads out here without the caller
|
|
274
|
+
* wiring anything up.
|
|
275
|
+
*/
|
|
276
|
+
declare function LiveLineChartHeader({ className, title, value, caption, formatValue, children, ...props }: LiveLineChartHeaderProps): import("react").JSX.Element;
|
|
277
|
+
declare namespace LiveLineChartHeader {
|
|
278
|
+
var displayName: string;
|
|
279
|
+
var layer: Layer;
|
|
280
|
+
}
|
|
281
|
+
export declare const LiveLineChart: import("react").ForwardRefExoticComponent<LiveLineChartProps & import("react").RefAttributes<LiveLineChartHandle>> & {
|
|
282
|
+
Header: typeof LiveLineChartHeader;
|
|
283
|
+
Grid: typeof LiveLineChartGrid;
|
|
284
|
+
Area: typeof LiveLineChartArea;
|
|
285
|
+
Line: typeof LiveLineChartLine;
|
|
286
|
+
Tip: typeof LiveLineChartTip;
|
|
287
|
+
XAxis: typeof LiveLineChartXAxis;
|
|
288
|
+
YAxis: typeof LiveLineChartYAxis;
|
|
289
|
+
Tooltip: typeof LiveLineChartTooltip;
|
|
290
|
+
Skeleton: typeof LiveLineChartSkeleton;
|
|
291
|
+
};
|
|
292
|
+
export {};
|
|
293
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/live-line-chart/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PolarAreaChart — several parts, compared on one measure.
|
|
3
|
+
*
|
|
4
|
+
* ```tsx
|
|
5
|
+
* <PolarAreaChart data={scores}>
|
|
6
|
+
* <PolarAreaChart.Header title="Scores" />
|
|
7
|
+
* <PolarAreaChart.Grid />
|
|
8
|
+
* <PolarAreaChart.Wedges />
|
|
9
|
+
* <PolarAreaChart.Labels />
|
|
10
|
+
* <PolarAreaChart.Legend />
|
|
11
|
+
* </PolarAreaChart>
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* ## What it is, against the pie beside it
|
|
15
|
+
*
|
|
16
|
+
* A pie divides one total: the angles are the quantity and they must come to a
|
|
17
|
+
* full turn, so a slice only means anything next to the others. Here every
|
|
18
|
+
* wedge takes the same angle and the *radius* is the quantity, which means the
|
|
19
|
+
* values do not have to add up to anything. Six unrelated readings on one scale
|
|
20
|
+
* are a polar area chart; six parts of one budget are a pie.
|
|
21
|
+
*
|
|
22
|
+
* What it buys over a bar chart is the shape. Bars are easier to read one at a
|
|
23
|
+
* time, and a reader who has to rank the middle three should be given bars. A
|
|
24
|
+
* dial is for the silhouette — which direction the weight sits in, whether one
|
|
25
|
+
* reading runs away from the rest — read at a glance and without a legend walk.
|
|
26
|
+
*
|
|
27
|
+
* ## Radius, and what it overstates
|
|
28
|
+
*
|
|
29
|
+
* `scale` decides what the radius means, and the two answers are not the same
|
|
30
|
+
* chart:
|
|
31
|
+
*
|
|
32
|
+
* - `radius` (the default) puts the value straight on the radius, so a reading
|
|
33
|
+
* can be counted off the rings. The cost is that a wedge worth twice another
|
|
34
|
+
* covers four times the area, and area is what the eye adds up first.
|
|
35
|
+
* - `area` puts it on the square root instead, so the ink is proportional to
|
|
36
|
+
* the value and nothing is overstated. The cost is the rings: they still mark
|
|
37
|
+
* equal steps, but they are no longer equally spaced.
|
|
38
|
+
*
|
|
39
|
+
* The grid is drawn through the same conversion either way, so a ring is always
|
|
40
|
+
* where its value falls rather than where an even split would put it.
|
|
41
|
+
*
|
|
42
|
+
* Touch, not hover: a wedge is selected by pressing it, and pressing the same
|
|
43
|
+
* one again clears the selection.
|
|
44
|
+
*/
|
|
45
|
+
import { type ReactNode } from 'react';
|
|
46
|
+
import { type ViewProps } from 'react-native';
|
|
47
|
+
/** Whether the chart is showing data or waiting for it. */
|
|
48
|
+
export type PolarAreaChartStatus = 'loading' | 'ready';
|
|
49
|
+
/** What a wedge's radius stands for. */
|
|
50
|
+
export type PolarAreaScale = 'radius' | 'area';
|
|
51
|
+
/** One wedge. Its angle is fixed, so only the value decides how far it reaches. */
|
|
52
|
+
export interface PolarAreaDatum {
|
|
53
|
+
/** Name for the legend, the readout and the accessibility label. */
|
|
54
|
+
label: string;
|
|
55
|
+
/** How far the wedge reaches, against `maxValue`. Negatives are treated as zero. */
|
|
56
|
+
value: number;
|
|
57
|
+
/** Explicit colour, overriding the `--color-chart-*` token. */
|
|
58
|
+
color?: string;
|
|
59
|
+
}
|
|
60
|
+
/** The selected wedge and its reading, for something rendered inside the chart. */
|
|
61
|
+
export declare function usePolarAreaChart(): {
|
|
62
|
+
activeIndex: number;
|
|
63
|
+
activeWedge: PolarAreaDatum | null;
|
|
64
|
+
/** The selected wedge's value against the maximum, 0 to 1. */
|
|
65
|
+
activeFraction: number;
|
|
66
|
+
};
|
|
67
|
+
export interface PolarAreaChartProps extends ViewProps {
|
|
68
|
+
className?: string;
|
|
69
|
+
/** One entry per wedge, drawn in the order they are listed. */
|
|
70
|
+
data: PolarAreaDatum[];
|
|
71
|
+
/** Diameter in points. Left out, the chart fills its column as a square. */
|
|
72
|
+
size?: number;
|
|
73
|
+
/**
|
|
74
|
+
* The value the outermost ring stands for. Defaults to the largest value
|
|
75
|
+
* rounded up to a round number.
|
|
76
|
+
*
|
|
77
|
+
* Fix it to compare two dials against each other — the same reading has to be
|
|
78
|
+
* the same distance out on both, and a maximum derived per chart makes the
|
|
79
|
+
* largest wedge of each one reach the edge whatever it is worth.
|
|
80
|
+
*/
|
|
81
|
+
maxValue?: number;
|
|
82
|
+
/** Whether the radius or the area carries the value. */
|
|
83
|
+
scale?: PolarAreaScale;
|
|
84
|
+
/** Where the first wedge starts, in degrees clockwise from twelve o'clock. */
|
|
85
|
+
startAngle?: number;
|
|
86
|
+
/** Gap between wedges, in degrees. */
|
|
87
|
+
padAngle?: number;
|
|
88
|
+
/** `loading` draws the dial undivided, with nothing split up yet. */
|
|
89
|
+
status?: PolarAreaChartStatus;
|
|
90
|
+
/** Milliseconds for the wedges to grow out of the centre. */
|
|
91
|
+
animationDuration?: number;
|
|
92
|
+
/** The selected wedge, to drive the selection from outside. */
|
|
93
|
+
activeIndex?: number;
|
|
94
|
+
onActiveIndexChange?: (index: number) => void;
|
|
95
|
+
children?: ReactNode;
|
|
96
|
+
}
|
|
97
|
+
export interface PolarAreaChartHandle {
|
|
98
|
+
/** Play the growth again. */
|
|
99
|
+
replay: () => void;
|
|
100
|
+
}
|
|
101
|
+
export interface PolarAreaChartWedgesProps {
|
|
102
|
+
/** Rounds the four turns of each wedge, in points. */
|
|
103
|
+
cornerRadius?: number;
|
|
104
|
+
/** Opacity of the wedges that are not selected, once one is. */
|
|
105
|
+
dimOpacity?: number;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Every wedge, drawn in the order the data lists them.
|
|
109
|
+
*
|
|
110
|
+
* One part rather than one per datum: the wedges share a dial, a maximum and a
|
|
111
|
+
* scale by definition, and a chart where one of them could be given a different
|
|
112
|
+
* maximum would be a chart drawing a lie.
|
|
113
|
+
*/
|
|
114
|
+
declare function PolarAreaChartWedges({ cornerRadius, dimOpacity, }: PolarAreaChartWedgesProps): import("react").JSX.Element | null;
|
|
115
|
+
declare namespace PolarAreaChartWedges {
|
|
116
|
+
var displayName: string;
|
|
117
|
+
var slot: "svg";
|
|
118
|
+
}
|
|
119
|
+
export interface PolarAreaChartGridProps {
|
|
120
|
+
/** How many rings, including the outermost. */
|
|
121
|
+
rings?: number;
|
|
122
|
+
/** Overrides the themed hairline colour. */
|
|
123
|
+
color?: string;
|
|
124
|
+
/** Draw a line from the centre out along each wedge's edge. */
|
|
125
|
+
spokes?: boolean;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* The scale, drawn as rings.
|
|
129
|
+
*
|
|
130
|
+
* Each ring stands for an even step of the value and is placed where that value
|
|
131
|
+
* falls, which under `scale="area"` is not an even step of the radius. Spacing
|
|
132
|
+
* them evenly instead would be quicker and would put every ring in the wrong
|
|
133
|
+
* place on half the charts.
|
|
134
|
+
*/
|
|
135
|
+
declare function PolarAreaChartGrid({ rings, color, spokes }: PolarAreaChartGridProps): import("react").JSX.Element | null;
|
|
136
|
+
declare namespace PolarAreaChartGrid {
|
|
137
|
+
var displayName: string;
|
|
138
|
+
var slot: "svg";
|
|
139
|
+
}
|
|
140
|
+
export interface PolarAreaChartLabelsProps {
|
|
141
|
+
/** Format the value. Defaults to a compact number. */
|
|
142
|
+
formatValue?: (value: number, datum: PolarAreaDatum) => string;
|
|
143
|
+
/** Wedges reaching less far than this, in points, are left unlabelled. */
|
|
144
|
+
minRadius?: number;
|
|
145
|
+
className?: string;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* The reading on each wedge that has room for it.
|
|
149
|
+
*
|
|
150
|
+
* A wedge shorter than `minRadius` is left blank — the label would sit outside
|
|
151
|
+
* the wedge it belongs to, next to a neighbour it does not describe. Those are
|
|
152
|
+
* read through `Tooltip` and the legend instead.
|
|
153
|
+
*
|
|
154
|
+
* Each label takes its colour from the wedge under it. A wedge is a theme
|
|
155
|
+
* colour and a theme is free to set that anywhere on the scale, so a fixed
|
|
156
|
+
* white label disappears on the pale ones.
|
|
157
|
+
*/
|
|
158
|
+
declare function PolarAreaChartLabels({ formatValue, minRadius, className, }: PolarAreaChartLabelsProps): import("react").JSX.Element | null;
|
|
159
|
+
declare namespace PolarAreaChartLabels {
|
|
160
|
+
var displayName: string;
|
|
161
|
+
var slot: "overlay";
|
|
162
|
+
}
|
|
163
|
+
export interface PolarAreaChartTooltipProps {
|
|
164
|
+
/** Format the value. Defaults to a compact number. */
|
|
165
|
+
formatValue?: (value: number, datum: PolarAreaDatum) => string;
|
|
166
|
+
className?: string;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* The readout for the selected wedge, floating over the dial.
|
|
170
|
+
*
|
|
171
|
+
* This is how the short wedges are named. They are the ones with no room for a
|
|
172
|
+
* label, so without it the chart answers questions about its largest readings
|
|
173
|
+
* only — which is the half the reader could already see.
|
|
174
|
+
*/
|
|
175
|
+
declare function PolarAreaChartTooltip({ formatValue, className }: PolarAreaChartTooltipProps): import("react").JSX.Element | null;
|
|
176
|
+
declare namespace PolarAreaChartTooltip {
|
|
177
|
+
var displayName: string;
|
|
178
|
+
var slot: "overlay";
|
|
179
|
+
}
|
|
180
|
+
export interface PolarAreaChartLegendProps extends ViewProps {
|
|
181
|
+
className?: string;
|
|
182
|
+
/** Show each wedge's reading beside its name. */
|
|
183
|
+
showValue?: boolean;
|
|
184
|
+
/** Format the value. Defaults to a compact number. */
|
|
185
|
+
formatValue?: (value: number, datum: PolarAreaDatum) => string;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* A swatch, a name and a reading per wedge, under the dial and across the width
|
|
189
|
+
* of it. Pressable in the same way the wedges are, and the easier target of the
|
|
190
|
+
* two for anything short.
|
|
191
|
+
*
|
|
192
|
+
* The reading rather than a share, unlike the pie next door: these values need
|
|
193
|
+
* not add up to anything, so a percentage of their sum would be a number about
|
|
194
|
+
* nothing.
|
|
195
|
+
*/
|
|
196
|
+
declare function PolarAreaChartLegend({ className, showValue, formatValue, ...props }: PolarAreaChartLegendProps): import("react").JSX.Element | null;
|
|
197
|
+
declare namespace PolarAreaChartLegend {
|
|
198
|
+
var displayName: string;
|
|
199
|
+
var slot: "footer";
|
|
200
|
+
}
|
|
201
|
+
export interface PolarAreaChartSkeletonProps {
|
|
202
|
+
color?: string;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* The loading state: the dial as one plain disc, with nothing divided up yet.
|
|
206
|
+
*
|
|
207
|
+
* Deliberately undivided. Placeholder wedges would be a made-up set of
|
|
208
|
+
* readings, and a reader has no way to tell an invented one from a real one
|
|
209
|
+
* until it changes under them.
|
|
210
|
+
*/
|
|
211
|
+
declare function PolarAreaChartSkeleton({ color }: PolarAreaChartSkeletonProps): import("react").JSX.Element | null;
|
|
212
|
+
declare namespace PolarAreaChartSkeleton {
|
|
213
|
+
var displayName: string;
|
|
214
|
+
var slot: "svg";
|
|
215
|
+
}
|
|
216
|
+
export interface PolarAreaChartHeaderProps extends ViewProps {
|
|
217
|
+
className?: string;
|
|
218
|
+
/** Small line above the value — what the chart is of. */
|
|
219
|
+
title?: string;
|
|
220
|
+
/** The readout. The largest thing on the card, and the first thing read. */
|
|
221
|
+
value?: string;
|
|
222
|
+
/** One muted line under the value — a period, a comparison, a caveat. */
|
|
223
|
+
caption?: string;
|
|
224
|
+
/** Prettier names for the wedges, keyed by their `label`. */
|
|
225
|
+
labels?: Record<string, string>;
|
|
226
|
+
/**
|
|
227
|
+
* Draw a swatch and a name per wedge along the trailing edge.
|
|
228
|
+
*
|
|
229
|
+
* For two or three short names. Past that use `PolarAreaChart.Legend`, which
|
|
230
|
+
* runs under the dial across the full width.
|
|
231
|
+
*/
|
|
232
|
+
legend?: boolean;
|
|
233
|
+
/** Trailing slot — a control, a badge, a range picker. Wins over `legend`. */
|
|
234
|
+
children?: ReactNode;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* The strip above the dial: what the chart is of, what it reads, and what the
|
|
238
|
+
* colours mean.
|
|
239
|
+
*
|
|
240
|
+
* The value is not derived here even though there are values to derive one
|
|
241
|
+
* from, because the formatting is not the chart's to guess: 18420 is a count, a
|
|
242
|
+
* currency or a duration depending on what was measured.
|
|
243
|
+
*/
|
|
244
|
+
declare function PolarAreaChartHeader({ className, title, value, caption, labels, legend, children, ...props }: PolarAreaChartHeaderProps): import("react").JSX.Element;
|
|
245
|
+
declare namespace PolarAreaChartHeader {
|
|
246
|
+
var displayName: string;
|
|
247
|
+
var slot: "header";
|
|
248
|
+
}
|
|
249
|
+
export declare const PolarAreaChart: import("react").ForwardRefExoticComponent<PolarAreaChartProps & import("react").RefAttributes<PolarAreaChartHandle>> & {
|
|
250
|
+
Header: typeof PolarAreaChartHeader;
|
|
251
|
+
Grid: typeof PolarAreaChartGrid;
|
|
252
|
+
Wedges: typeof PolarAreaChartWedges;
|
|
253
|
+
Labels: typeof PolarAreaChartLabels;
|
|
254
|
+
Tooltip: typeof PolarAreaChartTooltip;
|
|
255
|
+
Legend: typeof PolarAreaChartLegend;
|
|
256
|
+
Skeleton: typeof PolarAreaChartSkeleton;
|
|
257
|
+
};
|
|
258
|
+
export {};
|
|
259
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/polar-area-chart/index.tsx"],"names":[],"mappings":"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"}
|