1 | import { Except } from 'type-fest';
|
2 | import { DataRecord, DataField, DataValue } from './Data';
|
3 |
|
4 |
|
5 |
|
6 |
|
7 | export type ScaleType = 'identity' | 'linear' | 'cat' | 'timeCat' | 'log' | 'pow';
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | export interface ScaleCommonProps<
|
15 | TScaleType extends ScaleType,
|
16 | TRecord extends DataRecord,
|
17 | TField extends DataField<TRecord>
|
18 | > {
|
19 | |
20 |
|
21 |
|
22 | type: TScaleType;
|
23 |
|
24 | |
25 |
|
26 |
|
27 |
|
28 | formatter?: (value: DataValue<TRecord, TField>) => string | number;
|
29 |
|
30 | |
31 |
|
32 |
|
33 | range?: [number, number];
|
34 |
|
35 | |
36 |
|
37 |
|
38 | alias?: string;
|
39 |
|
40 | |
41 |
|
42 |
|
43 | tickCount?: number;
|
44 |
|
45 | |
46 |
|
47 |
|
48 | ticks?: string[] | number[];
|
49 |
|
50 | |
51 |
|
52 |
|
53 | sortable?: boolean;
|
54 | }
|
55 |
|
56 |
|
57 |
|
58 |
|
59 | export type ScaleIdentityProps<
|
60 | TRecord extends DataRecord,
|
61 | TField extends DataField<TRecord>
|
62 | > = ScaleCommonProps<'identity', TRecord, TField>;
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 | export interface ScaleLinearProps<TRecord extends DataRecord, TField extends DataField<TRecord>>
|
70 | extends ScaleCommonProps<'linear', TRecord, TField> {
|
71 | |
72 |
|
73 |
|
74 |
|
75 | nice?: boolean;
|
76 |
|
77 | |
78 |
|
79 |
|
80 | min?: number;
|
81 |
|
82 | |
83 |
|
84 |
|
85 | max?: number;
|
86 |
|
87 | |
88 |
|
89 |
|
90 |
|
91 | tickInterval?: number;
|
92 | }
|
93 |
|
94 |
|
95 |
|
96 |
|
97 |
|
98 |
|
99 | export interface ScaleCatProps<TRecord extends DataRecord, TField extends DataField<TRecord>>
|
100 | extends ScaleCommonProps<'cat', TRecord, TField> {
|
101 | |
102 |
|
103 |
|
104 | values?: string[];
|
105 |
|
106 | |
107 |
|
108 |
|
109 |
|
110 | isRounding?: boolean;
|
111 | }
|
112 |
|
113 |
|
114 |
|
115 |
|
116 |
|
117 |
|
118 | export interface ScaleTimeCatProps<TRecord extends DataRecord, TField extends DataField<TRecord>>
|
119 | extends ScaleCommonProps<'timeCat', TRecord, TField> {
|
120 | |
121 |
|
122 |
|
123 | mask?: string;
|
124 |
|
125 | |
126 |
|
127 |
|
128 | values?: string[];
|
129 | }
|
130 |
|
131 |
|
132 |
|
133 |
|
134 |
|
135 | export interface ScaleLogProps<TRecord extends DataRecord, TField extends DataField<TRecord>>
|
136 | extends ScaleCommonProps<'log', TRecord, TField> {
|
137 | max?: number;
|
138 | min?: number;
|
139 | base?: number;
|
140 | }
|
141 |
|
142 |
|
143 |
|
144 |
|
145 |
|
146 | export interface ScalePowProps<TRecord extends DataRecord, TField extends DataField<TRecord>>
|
147 | extends ScaleCommonProps<'pow', TRecord, TField> {
|
148 | |
149 |
|
150 |
|
151 | exponent?: number;
|
152 | }
|
153 |
|
154 |
|
155 |
|
156 |
|
157 |
|
158 |
|
159 | export type ScaleProps<TRecord extends DataRecord, TField extends DataField<TRecord>> =
|
160 | | ScaleIdentityProps<TRecord, TField>
|
161 | | ScaleLinearProps<TRecord, TField>
|
162 |
|
163 | | Except<ScaleLinearProps<TRecord, TField>, 'type'>
|
164 | | ScaleCatProps<TRecord, TField>
|
165 | | ScaleTimeCatProps<TRecord, TField>
|
166 | | ScaleLogProps<TRecord, TField>
|
167 | | ScalePowProps<TRecord, TField>;
|