realchart 1.1.12 → 1.2.3
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/gauge.d.ts +490 -0
- package/gauge.js +7 -0
- package/gauge.mjs +7 -0
- package/heatmap.d.ts +27 -0
- package/heatmap.js +7 -0
- package/heatmap.mjs +7 -0
- package/{dist/index.d.ts → index.d.ts} +2155 -1660
- package/index.js +7 -0
- package/index.mjs +7 -0
- package/package.json +38 -6
- package/{dist/realchart-style.css → realchart-style.css} +1 -0
- package/split.d.ts +114 -0
- package/split.js +7 -0
- package/split.mjs +7 -0
- package/treemap.d.ts +82 -0
- package/treemap.js +7 -0
- package/treemap.mjs +7 -0
- package/vector.d.ts +21 -0
- package/vector.js +7 -0
- package/vector.mjs +7 -0
- package/dist/index.esm.js +0 -7
- package/dist/index.ie.js +0 -7
- package/dist/index.js +0 -7
- package/dist/realchart-style.ie.css +0 -948
package/gauge.d.ts
ADDED
|
@@ -0,0 +1,490 @@
|
|
|
1
|
+
import * as RealChart from 'realchart';
|
|
2
|
+
import { CircularGauge, CircleGaugeOptions, ChartItemOptions, GaugeRangeBand, ICircularGaugeExtents, CircleGaugeRimOptions, CircleGaugeValueRimOptions, GaugeItem, CircleGaugeHandOptions, CircleGaugePinOptions, GaugeScale, CircleGaugeScaleOptions, CircleGaugeRimBaseOptions, ValueRange, LinearGaugeOptions, LinearValueBarOptions, LinearGaugeBaseOptions, ValueGauge, LinearGaugeLabelOptions, IMinMax, IChart, SVGStyleOrClass, LinearGaugeScaleOptions, GaugeLabel, LinearGaugeGroupBaseOptions, GaugeGroup, ChartItem, LinearGaugeChildLabelOptions, LinearGaugeGroupLabelOptions, BulletGaugeOptions, BulletGaugeBandOptions, BulletTargetBarOptions, BulletValueBarOptions, BulletGaugeGroupOptions, Gauge, ClockGaugeOptions, ClockGaugeRimOptions, ClockGaugeHandOptions, ClockGaugeSecondHandOptions, ClockGaugeTickOptions, ClockGaugeTickLabelOptions, ClockGaugePinOptions, ChartText, ClockGaugeLabelOptions } from 'realchart';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 원형게이지 테두리(rim) 모델 기반 클래스<br/>
|
|
6
|
+
* {@page options} 모델은 {@page op.CircleGaugeRimBaseOptions}이다.
|
|
7
|
+
*/
|
|
8
|
+
declare abstract class CircleGaugeRimBase<OP extends CircleGaugeRimBaseOptions = CircleGaugeRimBaseOptions> extends GaugeItem<OP> {
|
|
9
|
+
static defaults: CircleGaugeRimBaseOptions;
|
|
10
|
+
private _ranges;
|
|
11
|
+
private _runRanges;
|
|
12
|
+
getRange(bounds: {
|
|
13
|
+
minValue?: number;
|
|
14
|
+
maxValue?: number;
|
|
15
|
+
}, value: number): ValueRange | undefined;
|
|
16
|
+
protected _doApply(options: CircleGaugeRimBaseOptions): void;
|
|
17
|
+
private $_internalRanges;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 원형게이지 테두리(rim) 모델.<br/>
|
|
21
|
+
* {@page options} 모델은 {@page op.CircleGaugeRimOptions}이다.
|
|
22
|
+
*/
|
|
23
|
+
declare class CircleGaugeRim extends CircleGaugeRimBase<CircleGaugeRimOptions> {
|
|
24
|
+
static defaults: CircleGaugeRimOptions;
|
|
25
|
+
private _segmentThicknessDim;
|
|
26
|
+
getSegmentThickness(domain: number): number;
|
|
27
|
+
protected _doApply(options: CircleGaugeRimOptions): void;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 값을 표시하는 테두리(rim) 모델.<br/>
|
|
31
|
+
* {@page options} 모델은 {@page op.CircleGaugeValueRimOptions}이다.
|
|
32
|
+
*/
|
|
33
|
+
declare class CircleGaugeValueRim extends CircleGaugeRimBase<CircleGaugeValueRimOptions> {
|
|
34
|
+
static defaults: CircleGaugeValueRimOptions;
|
|
35
|
+
private _thicknessDim;
|
|
36
|
+
getThickness(domain: number): number;
|
|
37
|
+
protected _doApply(options: CircleGaugeValueRimOptions): void;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 원형게이지 침(hand) 모델.<br/>
|
|
41
|
+
* {@page options} 모델은 {@page op.CircleGaugeHandOptions}이다.
|
|
42
|
+
*/
|
|
43
|
+
declare class CircleGaugeHand extends GaugeItem<CircleGaugeHandOptions> {
|
|
44
|
+
static defaults: CircleGaugeHandOptions;
|
|
45
|
+
private _radiusDim;
|
|
46
|
+
private _lengthDim;
|
|
47
|
+
private _offsetDim;
|
|
48
|
+
getExtents(domain: number): {
|
|
49
|
+
radius: number;
|
|
50
|
+
length: number;
|
|
51
|
+
offset: number;
|
|
52
|
+
};
|
|
53
|
+
protected _doApply(options: CircleGaugeHandOptions): void;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* 원형게이지 핀 모델.<br/>
|
|
57
|
+
* {@page options} 모델은 {@page op.CircleGaugePinOptions}이다.
|
|
58
|
+
*/
|
|
59
|
+
declare class CircleGaugePin extends GaugeItem<CircleGaugePinOptions> {
|
|
60
|
+
static defaults: CircleGaugePinOptions;
|
|
61
|
+
private _radiusDim;
|
|
62
|
+
getRadius(domain: number): number;
|
|
63
|
+
protected _doApply(options: CircleGaugePinOptions): void;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 원형게이지 자(scale) 모델.<br/>
|
|
67
|
+
* {@page options} 모델은 {@page op.CircleGaugeScaleOptions}이다.
|
|
68
|
+
*/
|
|
69
|
+
declare class CircleGaugeScale extends GaugeScale<CircleGaugeScaleOptions> {
|
|
70
|
+
static defaults: CircleGaugeScaleOptions;
|
|
71
|
+
protected _getStepMultiples(step: number): number[];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* 원형 게이지 모델.<br/>
|
|
75
|
+
* {@page op.GaugeOptions#type}은 **'circle'** 이고,
|
|
76
|
+
* {@page options 설정} 모델은 {@page op.CircleGaugeOptions}이다.
|
|
77
|
+
*
|
|
78
|
+
* @modules gauge
|
|
79
|
+
*/
|
|
80
|
+
declare class CircleGauge extends CircularGauge<CircleGaugeOptions> {
|
|
81
|
+
static readonly type: string;
|
|
82
|
+
private _band;
|
|
83
|
+
private _scale;
|
|
84
|
+
private _rim;
|
|
85
|
+
private _valueRim;
|
|
86
|
+
private _hand;
|
|
87
|
+
private _pin;
|
|
88
|
+
protected _doInitChildren(op: {
|
|
89
|
+
[child: string]: ChartItemOptions;
|
|
90
|
+
}): void;
|
|
91
|
+
/**
|
|
92
|
+
* 게이지 본체 주변이나 내부에 값 영역들을 구분해서 표시하는 band의 모델.
|
|
93
|
+
*/
|
|
94
|
+
get band(): GaugeRangeBand;
|
|
95
|
+
/**
|
|
96
|
+
* 스케일 모델.
|
|
97
|
+
*/
|
|
98
|
+
get scale(): CircleGaugeScale;
|
|
99
|
+
/**
|
|
100
|
+
* 게이지 배경 원호 테두리 설정 모델.
|
|
101
|
+
*/
|
|
102
|
+
get rim(): CircleGaugeRim;
|
|
103
|
+
/**
|
|
104
|
+
* 게이지의 값 원호 테두리 설정 모델.
|
|
105
|
+
*/
|
|
106
|
+
get valueRim(): CircleGaugeValueRim;
|
|
107
|
+
/**
|
|
108
|
+
* 게이지 바늘 설정 모델.
|
|
109
|
+
*/
|
|
110
|
+
get hand(): CircleGaugeHand;
|
|
111
|
+
/**
|
|
112
|
+
* 게이지 중앙에 표시되는 핀 설정 모델.
|
|
113
|
+
*/
|
|
114
|
+
get pin(): CircleGaugePin;
|
|
115
|
+
getExtents(gaugeSize: number): ICircularGaugeExtents;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* {@page LinearGauge} 스케일 모델.<br/>
|
|
120
|
+
* {@page options} 모델은 {@page op.LinearGaugeScaleOptions}이다.<br/>
|
|
121
|
+
*/
|
|
122
|
+
declare class LinearGaugeScale extends GaugeScale<LinearGaugeScaleOptions> {
|
|
123
|
+
_vertical: boolean;
|
|
124
|
+
_reversed: boolean;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* 선형게이지 라벨 모델.<br/>
|
|
128
|
+
* {@page options} 모델은 {@page op.LinearGaugeLabelOptions}이다.
|
|
129
|
+
*/
|
|
130
|
+
declare class LinearGaugeLabel<OP extends LinearGaugeLabelOptions = LinearGaugeLabelOptions> extends GaugeLabel<OP> {
|
|
131
|
+
static defaults: LinearGaugeLabelOptions;
|
|
132
|
+
private _widthDim;
|
|
133
|
+
private _heightDim;
|
|
134
|
+
private _maxWidthDim;
|
|
135
|
+
private _maxHeightDim;
|
|
136
|
+
private _gapDim;
|
|
137
|
+
_runPos: 'left' | 'right' | 'top' | 'bottom';
|
|
138
|
+
_runGap: number;
|
|
139
|
+
_runVert: boolean;
|
|
140
|
+
getWidth(domain: number): number;
|
|
141
|
+
getHeight(domain: number): number;
|
|
142
|
+
getMaxWidth(domain: number): number;
|
|
143
|
+
getMaxHeight(domain: number): number;
|
|
144
|
+
getGap(domain: number): number;
|
|
145
|
+
protected _doApply(options: LinearGaugeLabelOptions): void;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* 선형 게이지 모델들의 기반 클래스.<br/>
|
|
149
|
+
* {@page options} 모델은 {@page op.LinearGaugeBaseOptions}이다.
|
|
150
|
+
*/
|
|
151
|
+
declare abstract class LinearGaugeBase<OP extends LinearGaugeBaseOptions = LinearGaugeBaseOptions> extends ValueGauge<OP> {
|
|
152
|
+
static defaults: LinearGaugeBaseOptions;
|
|
153
|
+
private _label;
|
|
154
|
+
private _scale;
|
|
155
|
+
protected _doInitChildren(op: {
|
|
156
|
+
[child: string]: ChartItemOptions;
|
|
157
|
+
}): void;
|
|
158
|
+
/**
|
|
159
|
+
* label 설정 모델.
|
|
160
|
+
*
|
|
161
|
+
* @config
|
|
162
|
+
*/
|
|
163
|
+
get label(): LinearGaugeLabel<LinearGaugeLabelOptions>;
|
|
164
|
+
/**
|
|
165
|
+
* scale.
|
|
166
|
+
*
|
|
167
|
+
* @config
|
|
168
|
+
*/
|
|
169
|
+
get scale(): LinearGaugeScale;
|
|
170
|
+
isVertical(): boolean;
|
|
171
|
+
scaleVisible(): boolean;
|
|
172
|
+
calcedMinMax(): IMinMax;
|
|
173
|
+
protected _doPrepareRender(chart: IChart): void;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* linear 게이지의 값을 표시하는 영역에 대한 설정 모델.<br/>
|
|
177
|
+
* {@page options} 모델은 {@page op.LinearValueBarOptions}이다.
|
|
178
|
+
*/
|
|
179
|
+
declare class LinearValueBar<OP extends LinearValueBarOptions = LinearValueBarOptions> extends GaugeItem<OP> {
|
|
180
|
+
private _args;
|
|
181
|
+
getStyle(gauge: LinearGaugeBase, value: number): SVGStyleOrClass;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* 선형 게이지 모델.<br/>
|
|
185
|
+
* {@page op.GaugeOptions#type}은 **'linear'** 이고,
|
|
186
|
+
* {@page options 설정} 모델은 {@page op.LinearGaugeOptions}이다.
|
|
187
|
+
*
|
|
188
|
+
* @modules gauge
|
|
189
|
+
*/
|
|
190
|
+
declare class LinearGauge extends LinearGaugeBase<LinearGaugeOptions> {
|
|
191
|
+
static readonly type = "linear";
|
|
192
|
+
private _valueBar;
|
|
193
|
+
private _band;
|
|
194
|
+
protected _doInitChildren(op: {
|
|
195
|
+
[child: string]: ChartItemOptions;
|
|
196
|
+
}): void;
|
|
197
|
+
/**
|
|
198
|
+
* 게이지 값을 표시하는 bar 모델.
|
|
199
|
+
*/
|
|
200
|
+
get valueBar(): LinearValueBar<LinearValueBarOptions>;
|
|
201
|
+
/**
|
|
202
|
+
* 게이지 본체 주변이나 내부에 값 영역들을 구분해서 표시하는 band의 모델.
|
|
203
|
+
*
|
|
204
|
+
* @config
|
|
205
|
+
*/
|
|
206
|
+
get band(): GaugeRangeBand;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* 선형 그룹게이지의 자식 라벨 모델.<br/>
|
|
210
|
+
* {@page options} 모델은 {@page op.LinearGaugeChildLabelOptions}이다.
|
|
211
|
+
*/
|
|
212
|
+
declare class LinearGaugeChildLabel extends ChartItem<LinearGaugeChildLabelOptions> {
|
|
213
|
+
static defaults: LinearGaugeChildLabelOptions;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* 선형 그룹게이지의 그룹 라벨 모델.<br/>
|
|
217
|
+
* {@page options} 모델은 {@page op.LinearGaugeGroupLabelOptions}이다.
|
|
218
|
+
*/
|
|
219
|
+
declare class LinearGaugeGroupLabel extends LinearGaugeLabel<LinearGaugeGroupLabelOptions> {
|
|
220
|
+
static defaults: LinearGaugeGroupLabelOptions;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* 선형 그룹게이지 모델들의 기반 클래스.<br/>
|
|
224
|
+
* {@page options} 모델은 {@page op.LinearGaugeGroupBaseOptions}이다.
|
|
225
|
+
*/
|
|
226
|
+
declare abstract class LinearGaugeGroupBase<T extends LinearGaugeBase = LinearGaugeBase, OP extends LinearGaugeGroupBaseOptions<LinearGaugeBaseOptions> = LinearGaugeGroupBaseOptions<LinearGaugeBaseOptions>> extends GaugeGroup<T, OP> {
|
|
227
|
+
static defaults: LinearGaugeGroupBaseOptions<LinearGaugeBaseOptions>;
|
|
228
|
+
private _label;
|
|
229
|
+
private _itemLabel;
|
|
230
|
+
private _scale;
|
|
231
|
+
_labelWidth: number;
|
|
232
|
+
_labelHeight: number;
|
|
233
|
+
protected _doInitChildren(op: {
|
|
234
|
+
[child: string]: ChartItemOptions;
|
|
235
|
+
}): void;
|
|
236
|
+
/**
|
|
237
|
+
* label 설정 모델.
|
|
238
|
+
*
|
|
239
|
+
* @config
|
|
240
|
+
*/
|
|
241
|
+
get label(): LinearGaugeGroupLabel;
|
|
242
|
+
/**
|
|
243
|
+
* 자식 게이지들의 label 표시 관련 속성 모델.
|
|
244
|
+
*
|
|
245
|
+
* @config
|
|
246
|
+
*/
|
|
247
|
+
get itemLabel(): LinearGaugeChildLabel;
|
|
248
|
+
/**
|
|
249
|
+
* scale.
|
|
250
|
+
*
|
|
251
|
+
* @config
|
|
252
|
+
*/
|
|
253
|
+
get scale(): LinearGaugeScale;
|
|
254
|
+
calcedMinMax(): IMinMax;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Bullet 게이지 밴드 모델.<br/>
|
|
259
|
+
* {@page options} 모델은 {@page op.BulletGaugeBandOptions}이다.
|
|
260
|
+
*/
|
|
261
|
+
declare class BulletGaugeBand extends ChartItem<BulletGaugeBandOptions> {
|
|
262
|
+
gauge: BulletGauge | BulletGaugeGroup;
|
|
263
|
+
static defaults: BulletGaugeBandOptions;
|
|
264
|
+
private _ranges;
|
|
265
|
+
private _runRanges;
|
|
266
|
+
constructor(gauge: BulletGauge | BulletGaugeGroup);
|
|
267
|
+
/**
|
|
268
|
+
* 값 범위 목록을 리턴한다.<br/>
|
|
269
|
+
* 범위별로 다른 스타일을 적용할 수 있다.
|
|
270
|
+
*
|
|
271
|
+
* @config
|
|
272
|
+
*/
|
|
273
|
+
getRanges(): ValueRange[];
|
|
274
|
+
protected _doApply(options: BulletGaugeBandOptions): void;
|
|
275
|
+
private $_internalRanges;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Bullet 게이지 목표 bar 모델.<br/>
|
|
279
|
+
* {@page options} 모델은 {@page op.BulletTargetBarOptions}이다.
|
|
280
|
+
*/
|
|
281
|
+
declare class BulletTargetBar extends GaugeItem<BulletTargetBarOptions> {
|
|
282
|
+
static defaults: BulletTargetBarOptions;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Bullet 게이지 값 bar 모델.<br/>
|
|
286
|
+
* {@page options} 모델은 {@page op.BulletValueBarOptions}이다.
|
|
287
|
+
*/
|
|
288
|
+
declare class BulletValueBar extends LinearValueBar<BulletValueBarOptions> {
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Bullet 게이지 모델.<br/>
|
|
292
|
+
* {@page op.GaugeOptions#type}은 {@page config.gauge.bullet 'bullet'}이고,
|
|
293
|
+
* {@page options 설정} 모델은 {@page op.BulletGaugeOptions}이다.
|
|
294
|
+
*
|
|
295
|
+
* @modules gauge
|
|
296
|
+
*/
|
|
297
|
+
declare class BulletGauge extends LinearGaugeBase<BulletGaugeOptions> {
|
|
298
|
+
static readonly type = "bullet";
|
|
299
|
+
static defaults: BulletGaugeOptions;
|
|
300
|
+
private _band;
|
|
301
|
+
private _targetBar;
|
|
302
|
+
private _valueBar;
|
|
303
|
+
protected _doInitChildren(op: {
|
|
304
|
+
[child: string]: ChartItemOptions;
|
|
305
|
+
}): void;
|
|
306
|
+
/**
|
|
307
|
+
* 밴드.
|
|
308
|
+
*
|
|
309
|
+
* @config
|
|
310
|
+
*/
|
|
311
|
+
get band(): BulletGaugeBand;
|
|
312
|
+
/**
|
|
313
|
+
* target bar.
|
|
314
|
+
*
|
|
315
|
+
* @config
|
|
316
|
+
*/
|
|
317
|
+
get targetBar(): BulletTargetBar;
|
|
318
|
+
/**
|
|
319
|
+
* value bar.
|
|
320
|
+
*
|
|
321
|
+
* @config
|
|
322
|
+
*/
|
|
323
|
+
get valueBar(): BulletValueBar;
|
|
324
|
+
getRanges(min: number, max: number, inclusive: boolean): ValueRange[];
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Bullet 게이지그룹 모델.<br/>
|
|
328
|
+
* {@page op.GaugeOptions#type}은 {@page config.gauge.bulletgroup 'bulletgroup'}이고,
|
|
329
|
+
* {@page options} 모델은 {@page op.BulletGaugeGroupOptions}이다.
|
|
330
|
+
*
|
|
331
|
+
* @modules gauge
|
|
332
|
+
*/
|
|
333
|
+
declare class BulletGaugeGroup extends LinearGaugeGroupBase<BulletGauge, BulletGaugeGroupOptions> {
|
|
334
|
+
static readonly type: string;
|
|
335
|
+
static readonly gaugeType = "bullet";
|
|
336
|
+
static defaults: BulletGaugeGroupOptions;
|
|
337
|
+
getRanges(min: number, max: number, inclusive: boolean): ValueRange[];
|
|
338
|
+
_gaugesType(): string;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Clock 게이지 테두리(rim) 설정 모델.<br/>
|
|
343
|
+
* {@page options} 모델은 {@page op.ClockGaugeRimOptions}이다.
|
|
344
|
+
*/
|
|
345
|
+
declare class ClockGaugeRim extends GaugeItem<ClockGaugeRimOptions> {
|
|
346
|
+
static defaults: ClockGaugeRimOptions;
|
|
347
|
+
private _thicknessDim;
|
|
348
|
+
getThickness(domain: number): number;
|
|
349
|
+
protected _doApply(options: ClockGaugeRimOptions): void;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Clock 게이지 시/분침(hand) 설정 모델.<br/>
|
|
353
|
+
* {@page options} 모델은 {@page op.ClockGaugeHandOptions}이다.
|
|
354
|
+
*/
|
|
355
|
+
declare class ClockGaugeHand<OP extends ClockGaugeHandOptions = ClockGaugeHandOptions> extends GaugeItem<OP> {
|
|
356
|
+
static defaults: ClockGaugeHandOptions;
|
|
357
|
+
private _lengthDim;
|
|
358
|
+
getLength(domain: number): number;
|
|
359
|
+
protected _doApply(options: ClockGaugeHandOptions): void;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Clock 게이지 분침 모델.<br/>
|
|
363
|
+
* {@page options} 모델은 {@page op.ClockGaugeHandOptions}이다.
|
|
364
|
+
*/
|
|
365
|
+
declare class ClockGaugeMinuteHand extends ClockGaugeHand<ClockGaugeHandOptions> {
|
|
366
|
+
static defaults: ClockGaugeHandOptions;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Clock 게이지 초침(hand) 설정 모델.<br/>
|
|
370
|
+
* {@page options} 모델은 {@page op.ClockGaugeSecondHandOptions}이다.
|
|
371
|
+
*/
|
|
372
|
+
declare class ClockGaugeSecondHand extends ClockGaugeHand<ClockGaugeSecondHandOptions> {
|
|
373
|
+
static defaults: ClockGaugeSecondHandOptions;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Clock 게이지 tick 설정 모델.<br/>
|
|
377
|
+
* {@page options} 모델은 {@page op.ClockGaugeTickOptions}이다.
|
|
378
|
+
*/
|
|
379
|
+
declare class ClockGaugeTick extends GaugeItem<ClockGaugeTickOptions> {
|
|
380
|
+
length: number;
|
|
381
|
+
constructor(gauge: ClockGauge, length: number);
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Clock 게이지 tick 라벨 설정 모델.<br/>
|
|
385
|
+
* {@page options} 모델은 {@page op.ClockGaugeTickLabelOptions}이다.
|
|
386
|
+
*/
|
|
387
|
+
declare class ClockGaugeTickLabel extends GaugeItem<ClockGaugeTickLabelOptions> {
|
|
388
|
+
static defaults: ClockGaugeTickLabelOptions;
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Clock 게이지 중심 pin 설정 모델.<br/>
|
|
392
|
+
* {@page options} 모델은 {@page op.ClockGaugePinOptions}이다.
|
|
393
|
+
*/
|
|
394
|
+
declare class ClockGaugePin extends GaugeItem<ClockGaugePinOptions> {
|
|
395
|
+
raidus: number;
|
|
396
|
+
constructor(gauge: ClockGauge, raidus: number);
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Clock 게이지 내부에 표시되는 라벨 설정 모델.<br/>
|
|
400
|
+
* {@page options} 모델은 {@page op.ClockGaugeLabelOptions}이다.
|
|
401
|
+
*/
|
|
402
|
+
declare class ClockGaugeLabel extends ChartText<ClockGaugeLabelOptions> {
|
|
403
|
+
static defaults: ClockGaugeLabelOptions;
|
|
404
|
+
constructor(gauge: ClockGauge);
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* 시계 게이지 모델.<br/>
|
|
408
|
+
* {@page op.GaugeOptions#type}은 **'clock'** 이고,
|
|
409
|
+
* {@page options 설정} 모델은 {@page op.ClockGaugeOptions}이다.
|
|
410
|
+
*
|
|
411
|
+
* @modules gauge
|
|
412
|
+
*/
|
|
413
|
+
declare class ClockGauge extends Gauge<ClockGaugeOptions> {
|
|
414
|
+
static readonly type = "clock";
|
|
415
|
+
static defaults: ClockGaugeOptions;
|
|
416
|
+
private _centerX;
|
|
417
|
+
private _centerY;
|
|
418
|
+
private _radius;
|
|
419
|
+
private _centerXDim;
|
|
420
|
+
private _centerYDim;
|
|
421
|
+
private _radiusDim;
|
|
422
|
+
protected _doInitChildren(op: {
|
|
423
|
+
[child: string]: ChartItemOptions;
|
|
424
|
+
}): void;
|
|
425
|
+
/**
|
|
426
|
+
* rim 설정 모델.
|
|
427
|
+
*
|
|
428
|
+
* @config
|
|
429
|
+
*/
|
|
430
|
+
rim: ClockGaugeRim;
|
|
431
|
+
/**
|
|
432
|
+
* 시침 설정 모델.
|
|
433
|
+
*
|
|
434
|
+
* @config
|
|
435
|
+
*/
|
|
436
|
+
hourHand: ClockGaugeHand;
|
|
437
|
+
/**
|
|
438
|
+
* 분침 설정 모델.
|
|
439
|
+
*
|
|
440
|
+
* @config
|
|
441
|
+
*/
|
|
442
|
+
minuteHand: ClockGaugeMinuteHand;
|
|
443
|
+
/**
|
|
444
|
+
* 초침 설정 모델.
|
|
445
|
+
*
|
|
446
|
+
* @config
|
|
447
|
+
*/
|
|
448
|
+
secondHand: ClockGaugeSecondHand;
|
|
449
|
+
/**
|
|
450
|
+
* main tick.
|
|
451
|
+
*
|
|
452
|
+
* @config
|
|
453
|
+
*/
|
|
454
|
+
tick: ClockGaugeTick;
|
|
455
|
+
/**
|
|
456
|
+
* minor tick
|
|
457
|
+
*
|
|
458
|
+
* @config
|
|
459
|
+
*/
|
|
460
|
+
minorTick: ClockGaugeTick;
|
|
461
|
+
/**
|
|
462
|
+
* tick label
|
|
463
|
+
*
|
|
464
|
+
* @config
|
|
465
|
+
*/
|
|
466
|
+
tickLabel: ClockGaugeTickLabel;
|
|
467
|
+
/**
|
|
468
|
+
* pin
|
|
469
|
+
*
|
|
470
|
+
* @config
|
|
471
|
+
*/
|
|
472
|
+
pin: ClockGaugePin;
|
|
473
|
+
/**
|
|
474
|
+
* label
|
|
475
|
+
*
|
|
476
|
+
* @config
|
|
477
|
+
*/
|
|
478
|
+
label: ClockGaugeLabel;
|
|
479
|
+
getTime(): Date;
|
|
480
|
+
getExtents(gaugeWidth: number, gaugeHeight: number): {
|
|
481
|
+
cx: number;
|
|
482
|
+
cy: number;
|
|
483
|
+
rd: number;
|
|
484
|
+
};
|
|
485
|
+
protected _doApply(options: ClockGaugeOptions): void;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
declare function registerGauge(chart: typeof RealChart): void;
|
|
489
|
+
|
|
490
|
+
export { BulletGauge, CircleGauge, ClockGauge, LinearGauge, registerGauge as default };
|
package/gauge.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* RealChart Gauge v1.2.3
|
|
4
|
+
* Copyright (C) 2023-2024 WooriTech Inc.
|
|
5
|
+
* All Rights Reserved.
|
|
6
|
+
*/
|
|
7
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("realchart")):"function"==typeof define&&define.amd?define(["exports","realchart"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).RealChartGauge={},e.RealChart)}(this,(function(e,t){"use strict";function i(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(i){if("default"!==i){var s=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(t,i,s.get?s:{enumerable:!0,get:function(){return e[i]}})}})),t.default=e,Object.freeze(t)}var s=i(t);class a extends t.GaugeItem{getRange(e,t){const i=this.$_internalRanges(e);if(i)for(const e of i)if(t>=e.fromValue&&t<e.toValue)return e}_doApply(e){const t=this;var i;super._doApply(e),(i=e.ranges)!==t._ranges&&(t._ranges=i,t._runRanges=null)}$_internalRanges(e){return this._runRanges||(this._runRanges=t.buildValueRanges(this._ranges,e.minValue,e.maxValue,this._op.rangeInclusive)),this._runRanges}}a.defaults=t.extend(t.ChartItem.defaults,{rangeInclusive:!0});class n extends a{getSegmentThickness(e){return t.calcPercent(this._segmentThicknessDim,e,e)}_doApply(e){super._doApply(e),this._setDim(e,"segmentThickness")}}n.defaults=t.extend(a.defaults,{segmentGap:0});class l extends a{getThickness(e){return t.calcPercent(this._thicknessDim,e,e)}_doApply(e){super._doApply(e),this._setDim(e,"thickness")}}l.defaults=t.extend(a.defaults,{thickness:"100%",stroked:!1});class r extends t.GaugeItem{}r.defaults=t.extend(t.ChartItem.defaults,{visible:!1});class h extends t.GaugeItem{getExtents(e){return{radius:t.calcPercent(this._radiusDim,e,0),length:t.calcPercent(this._lengthDim,e,0),offset:t.calcPercent(this._offsetDim,e,0)}}_doApply(e){super._doApply(e),this._setDims(e,"radius","length","offset")}}h.defaults=t.extend(t.ChartItem.defaults,{visible:!1,radius:3,length:"100%",offset:0});class o extends t.GaugeItem{getRadius(e){return t.calcPercent(this._radiusDim,e,0)}_doApply(e){super._doApply(e),this._setDim(e,"radius")}}o.defaults=t.extend(t.ChartItem.defaults,{visible:!1,radius:5});class c extends t.GaugeScale{_getStepMultiples(e){return[1,2,2.5,5,10]}}c.defaults=t.extend(t.GaugeScale.defaults,{visible:!1,stepPixels:72});class d extends t.CircularGauge{_doInitChildren(e){super._doInitChildren(e),e.band=(this._band=new t.GaugeRangeBand(this)).init(),e.scale=(this._scale=new c(this)).init(),e.rim=(this._rim=new n(this)).init(),e.valueRim=(this._valueRim=new l(this)).init(),e.hand=(this._hand=new h(this)).init(),e.pin=(this._pin=new o(this)).init()}get band(){return this._band}get scale(){return this._scale}get rim(){return this._rim}get valueRim(){return this._valueRim}get hand(){return this._hand}get pin(){return this._pin}getExtents(e){const i=super.getExtents(e),s=this.scale,a=this.band;let n=i.radius;const l=n-i.inner;if(a.visible)switch(i.bandThick=a.getThickness(l),a.options.position){case"inside":i.band=n-(l-i.bandThick)/2;break;case"opposite":i.band=i.inner-a.options.gap,i.inner=i.band-i.bandThick;break;default:i.band=n+=i.bandThick+a.options.gap}if(i.scaleTick=t.maxv(1,s.tick.options.length||0),i.scaleLabel=16,"opposite"===s.options.position)i.scale=i.inner-s.options.gap,i.inner=i.scale-i.scaleTick-i.scaleLabel;else i.scale=n+s.options.gap;return i}}d.type=t.CircleGaugeType;class u extends t.CircularGaugeGroup{_gaugesType(){return"circle"}}u.type=t.CircleGaugeGroupType,u.gaugeType=t.CircleGaugeType,u.defaults=t.extend(t.CircularGaugeGroup.defaults,{innerRadius:"50%"});class _ extends t.ValueGaugeView{}class g extends t.ScaleView{setExtents(e,t){this._center=e,this._exts=t}_createLine(e,i){return new t.ArcElement(e,i)}_doMeasure(e,t,i,s,a){const n=t._steps.length-(360===t.gauge.options.sweepAngle?1:0);return this._line.setVis(t.line.visible)&&this._line.internalSetStyleOrClass(t.line._style),this._tickContainer.setVis(t.tick.visible)&&(this._tickContainer.internalSetStyleOrClass(t.tick._style),this._ticks.prepare(n)),this._labelContainer.setVis(t.label.visible)&&(this._labelContainer.internalSetStyleOrClass(t.label._style),this._labels.prepare(n,(e=>{}))),{width:i,height:s}}_doLayout(e){const i=this.model,s=i._steps,a=i.gauge,n=a.options,l="opposite"===i.options.position?-1:1,r=a._props,h=this._center.x,o=this._center.y,c=this._exts.scale,d=c+this.model.tick.options.length*l,u=r._sweepRad,_=r._startRad,g=n.maxValue-n.minValue,p=n.clockwise;let b,w,m,x;if(this._line.visible&&this._line.setArc(h,o,c,_,p?u:-u,p),this._tickContainer.visible&&this._ticks.forEach(((e,a,n)=>{const l=i.getRate(s[a])*(p?u:-u)+_;b=h+t.cos(l)*c,w=o+t.sin(l)*c,m=h+t.cos(l)*d,x=o+t.sin(l)*d,e.setLine(b,w,m,x)})),this._labelContainer.visible){this._labels.get(0).setText(String(n.maxValue));const e=d+.2*this._labels.get(0).getBBox().height*l;this._labels.forEach(((a,r,c)=>{const d=i.getRate(s[r])*(p?u:-u)+_;a.setText(String(t.fixnum(n.minValue+i.getRate(s[r])*g)));const b=a.getBBox();m=h+t.cos(d)*(e+b.width/2*l)-b.width/2,x=o+t.sin(d)*(e+b.height/2*l)-b.height/2,a.trans(m,x)}))}}}let p=class extends t.ChartElement{constructor(e){super(e,"rct-circle-gauge-band"),this._sectorViews=new t.ElementPool(this,t.SectorElement),this.add(this._labelContainer=new t.LayerElement(e,"rct-circle-gauge-band-tick-labels")),this._labels=new t.ElementPool(this._labelContainer,t.TextElement)}setExtends(e,t){this._center=e,this._exts=t}_doLayout(e){const t=this.model,i=t.gauge,s=i.scale,a=i._props,n=this._center.x,l=this._center.y,r=this._exts.band,h=i.options.clockwise,o=1-this._exts.bandThick/r,c=t.getRanges(),d=a._sweepRad;i.options.maxValue,i.options.minValue;let u=a._startRad;this._sectorViews.prepare(c.length).forEach(((e,t)=>{const i=s.getRate(c[t].toValue-c[t].fromValue)*d;e.setSector({cx:n,cy:l,rx:r,ry:r,innerRadius:o,start:u,angle:i,clockwise:h}),e.internalClearStyleAndClass(),e.setFill(c[t].color),c[t].style&&e.addStyleOrClass(c[t].style),u+=h?i:-i}))}};class b extends t.PathElement{render(e,i){const s=e.getRadius(i);return s!==this._radius&&(this._radius=s,this.setPath((new t.PathBuilder).circle(0,0,s).end())),this.internalSetStyleOrClass(e._style),this}}class w extends t.PathElement{render(e,i){const s=e.getExtents(i);if(s.radius!==this._radius||s.length!==this._length||s.offset!==this._offset){const e=this._radius=s.radius,i=this._offset=s.offset;if(this._length=s.length,this._radius>0&&this._length>0){const s=new t.PathBuilder;s.move(-e,i).line(0,-this._length+i).line(e,i),this.setPath(s.end())}else this.setPath("")}return this.internalSetStyleOrClass(e._style),this}}class m extends _{constructor(e){super(e,"rct-circle-gauge")}_doInitContents(e,i){i.add(this._rimView=new t.SectorElement(e,"rct-circle-gauge-rim")),i.add(this._valueView=new t.SectorElement(e,"rct-circle-gauge-value")),i.add(this._innerView=new t.SectorElement(e,"rct-circle-gauge-inner")),i.add(this._textView=new t.TextElement(e,"rct-circle-gauge-label")),i.add(this._handContainer=new t.LayerElement(e,void 0)),i.add(this._scaleView=new g(e)),i.add(this._bandView=new p(e))}_backgroundView(){return this._rimView}_prepareGauge(e,t){this._rimView.setVis(t.rim.visible),this._scaleView.setVis(t.scale.visible),this._bandView.setVis(t.band.visible),this._valueView.setVis(t.valueRim.visible),t.hand.visible?(this._handView||this._handContainer.add(this._handView=new w(e,"rct-circle-gauge-hand")),this._handView.visible=!0):this._handView&&(this._handView.visible=!1),t.pin.visible?(this._pinView||this._handContainer.add(this._pinView=new b(e,"rct-circle-gauge-pin")),this._pinView.visible=!0):this._pinView&&(this._pinView.visible=!1),this._textView.setVis(t.labelVisible())&&this._textView.setStyleOrClass(t.label._style)}_renderGauge(e,i){const s=this.model,a=s.getCenter(e,i),n=s.getExtents(t.minv(e,i));this.$_renderBackground(s,a,n),this._renderValue()}_renderValue(){const e=this.model,i=e.options,s=e.scale,a=e.getProps(),n=this._getValue(e),l=s.getRate(t.pickNum(n,0)),r=this._center,h=this._exts,o=e.valueRim.getThickness(h.radiusThick),c=this._textView;if(this._valueView.visible){const s=e.valueRim,c=s.options,d=s.getRange(i,n),u=h.value+(c.stroked?0:o/2),_=this._valueView;_.setStyleOrClass(s._style),d&&(_.setStyle(c.stroked?"stroke":"fill",d.color),d.style&&_.addStyleOrClass(d.style)),c.stroked&&(_.setFill("none"),_.setStyle("strokeWidth",t.pixel(o))),_.setBoolData("stroked",c.stroked),_.setSectorEx({cx:r.x,cy:r.y,rx:u,ry:u,innerRadius:(u-o)/u,start:a._startRad,angle:a._sweepRad*l,clockwise:i.clockwise},c.stroked)}if(this._handView){const i=(a._handRad+a._sweepRad*l)*t.RAD_DEG;this._handView.render(e.hand,h.radius).transp(r).rotate(e.options.clockwise?i:-i)}if(c.visible){const t=e.label;if(t.setText(e.getLabel(t,t.options.animatable?n:i.value)),c.text=t.options.text,t.buildSvg(c,null,NaN,NaN,e,t._domain),c.setBoolData("grouped",!!e._group),e._group)this.$_layoutGroupedLabel(e,c,h);else{const e=c.getBBox(),i=t.getOffset(this.width,this.height);c.trans(r.x+i.x,r.y-e.height/2+i.y)}}}$_renderBackground(e,t,i){const s=e.getProps(),a=s._startRad;this._center=t,this._exts=i,e.scale.buildSteps(i.scale*s._sweepRad,NaN),this._rimView.visible&&(this._rimView.internalSetStyleOrClass(e.rim._style),this._rimView.setSector({cx:t.x,cy:t.y,rx:i.radius,ry:i.radius,innerRadius:1-i.radiusThick/i.radius,start:a,angle:s._sweepRad,clockwise:e.options.clockwise})),this._scaleView.visible&&(this._scaleView.setStyleOrClass(e.scale._style),this._scaleView.measure(this.doc,e.scale,this.width,this.height,0),this._scaleView.setExtents(t,i),this._scaleView.layout()),this._bandView.visible&&(this._bandView.setStyleOrClass(e.band._style),this._bandView.measure(this.doc,e.band,this.width,this.height,0),this._bandView.setExtends(t,i),this._bandView.layout()),this._innerView.setStyleOrClass(e.options.innerStyle);let n=i.inner;const l=getComputedStyle(this._innerView.dom),r=parseFloat(l.strokeWidth);r>1&&(n-=r/2),this._innerView.setSector({cx:t.x,cy:t.y,rx:n,ry:n,innerRadius:0,start:0,angle:2*Math.PI,clockwise:!0}),this._pinView&&this._pinView.render(e.pin,n).trans(t.x,t.y)}$_layoutGroupedLabel(e,i,s){const a=i.getBBox(),n=this._rimView.getBBox(),l=+e._group.options.labelGap||0;i.anchor=t.TextAnchor.END,i.trans(n.x+n.width/2-l,n.y+(s.radius-s.inner-a.height)/2)}}class x extends t.GaugeGroupView{constructor(e){super(e,"rct-circle-gauge-group")}_createPool(e){return new t.ElementPool(e,m)}_doRenderGauges(e,i,s,a){const n=this.doc,l=this.model,r=l.props.getCenter(s,a),h=l.props.getExtents(t.minv(s,a));l.setChildExtents(h),s=a=2*h.radius,i.forEach(((e,t)=>{e.measure(n,l.getVisible(t),s,a,0),e.resize(s,a),e.layout()})),e.trans(r.x-h.radius,r.y-h.radius)}}class y extends t.GaugeScale{}class V extends t.GaugeLabel{getWidth(e){return t.calcPercent(this._widthDim,e)}getHeight(e){return t.calcPercent(this._heightDim,e)}getMaxWidth(e){return t.calcPercent(this._maxWidthDim,e)}getMaxHeight(e){return t.calcPercent(this._maxHeightDim,e)}getGap(e){return t.calcPercent(this._gapDim,e,0)}_doApply(e){super._doApply(e),this._setDims(e,"width","height","maxWidth","maxHeight","gap")}}V.defaults=t.extend(t.GaugeLabel.defaults,{maxWidth:"30%",maxHeight:"30%",gap:10});class v extends t.ValueGauge{_doInitChildren(e){super._doInitChildren(e),e.label=(this._label=new V(this.chart)).init(),e.scale=(this._scale=new y(this)).init()}get label(){return this._label}get scale(){return this._scale}isVertical(){return this._group?this._group.options.vertical:this._op.vertical}scaleVisible(){return!this._group&&this._scale.visible}calcedMinMax(){return this._scale.range()}_doPrepareRender(e){super._doPrepareRender(e),this._label._prepareRender()}}v.defaults=t.extend(t.ValueGauge.defaults,{reversed:!1});class f extends t.GaugeItem{constructor(){super(...arguments),this._args={gauge:null,value:NaN}}getStyle(e,t){if(this._op.styleCallback){this._args.gauge=e,this._args.value=t;return this._op.styleCallback(this._args)}}}class k extends v{_doInitChildren(e){super._doInitChildren(e),e.valueBar=(this._valueBar=new f(this)).init(),e.band=(this._band=new t.GaugeRangeBand(this)).init()}get valueBar(){return this._valueBar}get band(){return this._band}}k.type=t.LinearGaugeType;class C extends t.ChartItem{}C.defaults=t.extend(t.ChartItem.defaults,{opposite:!1,gap:10});class S extends V{}S.defaults=t.extend(V.defaults,{gap:10});class E extends t.GaugeGroup{_doInitChildren(e){super._doInitChildren(e),e.label=(this._label=new S(this.chart)).init(),e.itemLabel=(this._itemLabel=new C(this.chart)).init(),e.scale=(this._scale=new y(this)).init()}get label(){return this._label}get itemLabel(){return this._itemLabel}get scale(){return this._scale}calcedMinMax(){return this.scale.range()}}E.defaults=t.extend(t.GaugeGroup.defaults,{vertical:!1,itemGap:10});class R extends E{_doInitChildren(e){super._doInitChildren(e),e.band=(this._band=new t.GaugeRangeBand(this)).init()}get band(){return this._band}_gaugesType(){return"linear"}_doPrepareRender(e){super._doPrepareRender(e),this.band.visible&&this.band._prepareRender()}}R.type=t.LinearGaugeGroupType,R.gaugeType=t.LinearGaugeType;class G extends t.ScaleView{_createLine(e,i){return new t.LineElement(e,i)}_doMeasure(e,i,s,a,n){const l=i._reversed,r=i._vertical,h=i.label,o=i.tick,c=i._steps,d=c.length;let u=r?i.options.gap:s,_=r?a:i.options.gap;if(this._tickContainer.setVis(o.visible)&&(this._tickContainer.setStyleOrClass(o._style),this._ticks.prepare(d)),r?u+=o.options.length:_+=o.options.length,this._labelContainer.setVis(h.visible)&&(this._labelContainer.setStyleOrClass(h._style),this._labels.prepare(d,(t=>{t.setModel(e,h,null,null)})),d>0))if(r){let e=0;this._labels.forEach(((i,s)=>{i.setText(h.getText(c[l?s:d-1-s])),e=t.maxv(i.getBBox().width)})),u+=e}else{let e=0;this._labels.forEach(((i,s)=>{i.setText(h.getText(c[l?d-1-s:s])),e=t.maxv(i.getBBox().height)})),_+=e}return{width:u,height:_}}_doLayout(){const e=this.model;e._vertical?this.$_layoutVert(e,this.width,this.height):this.$_layoutHorz(e,this.width,this.height)}$_layoutHorz(e,t,i){const s=e.options,a=this._line,n=e.tick,l=e._steps;l.length;const r="opposite"===s.position,h=r?-n.options.length:n.options.length;let o,c=r?i-s.gap:s.gap;if(a.setVis(e.line.visible)&&(a.setStyleOrClass(e.line._style),a.setHLine(c,0,t)),this._tickContainer.setVis(n.visible)&&this._ticks.forEach(((i,s)=>{o=e.getRate(l[s])*t,i.setVLine(o,c,c+h)})),this._labelContainer.visible){const i=this._labelContainer.textAlign()||"center";let s=Number.MIN_SAFE_INTEGER;c=r?0:c+h,this._labels.forEach(((a,n)=>{a.layout(i);const r=a.getBBox();o=e.getRate(l[n])*t,a.setVis(o-r.width/2>s)&&(a.trans(o-r.width/2,c),s=o+r.width/2)}))}}$_layoutVert(e,t,i){const s=e.options,a=this._line,n=e.tick,l=e._steps;this.height,l.length;const r="opposite"===s.position,h=r?n.options.length:-n.options.length;let o,c=r?s.gap:t-s.gap;if(a.setVis(e.line.visible)&&(a.setStyleOrClass(e.line._style),a.setVLine(c,0,i)),this._tickContainer.setVis(n.visible)&&this._ticks.forEach(((t,s)=>{o=e.getRate(l[s])*i,t.setHLine(o,c,c+h)})),this._labelContainer.visible){const a=this._labelContainer.textAlign()||(r?"left":"right");c=r?c+h:t-s.gap+h,this._labels.forEach(((t,s)=>{t.layout(a);const n=t.getBBox(),h=r?c:c-n.width;o=e.getRate(l[s])*i,t.trans(h,o-n.height/2)}))}}}class B extends t.ValueGaugeView{_measureLabelSize(e,i,s){const a=e.label,n=this.labelView();return a.setText(e.getLabel(a,e.options.value)),n.text=a.options.text,a.buildSvg(n,null,i,s,e,a._domain),t.rectToSize(n.getBBox())}_renderGauge(e,i){const s=this.model,a=t.pickNum(this._runValue,s.options.value);this._measureGauge(s,s.label,this.labelView(),a,s.isVertical(),e,i),this._renderValue()}_renderValue(){const e=this.model,i=e.label,s=e.scale,a=this.labelView(),n=t.pickNum(this._runValue,e.options.value),l=t.assignObj({},this._rBand);if(this._renderScale(l),this.background().setRect(l),l.height>0&&this._renderBand(e,l,n),"top"!==i._runPos&&"bottom"!==i._runPos||(this._rLabel.height=l.height),this._renderLabel(e,i,a,n),!this._vertical&&("left"===i._runPos||"right"===i._runPos)&&s.visible&&"opposite"===s.options.position){const e=a.getBBox();a.ty+e.height>this.height&&a.transY(t.maxv(0,this.height-e.height))}}_measureGauge(e,i,s,a,n,l,r){const h=this._rBand=t.createRect(0,0,l,r);if(this._vertical=e._group instanceof E?e._group.options.vertical:n,i.visible){const n=i._runPos=t.pickProp(i.options.position,this._vertical?"top":"left"),o=i._runVert="top"===n||"bottom"===n,c=e._group?e._group.itemLabel.options.gap:i._runGap=i.getGap(o?r:l);let d=o?l:i.getWidth(l),u=o?i.getHeight(r):r;const _=o?l:i.getMaxWidth(l),g=o?i.getMaxHeight(r):r,p=this._rLabel=t.createRect(0,0,l,r);s.setStyleOrClass(i._style),i.setText(e.getLabel(i,i.options.animatable?a:e.options.value)),s.text=i.options.text,i.buildSvg(s,null,t.pickNum(d,_),t.pickNum(u,g),e,i._domain);const b=s.getBBox();switch(o?(p.height=t.pickNum(u,b.height),h.height=t.maxv(0,h.height-(p.height+c))):(p.width=t.pickNum(d,b.width),this._wLabel=e._group?e._group._labelWidth:p.width,h.width=t.maxv(0,h.width-(this._wLabel+c))),n){case"top":h.y=p.height+c;break;case"bottom":p.y=h.height+c;break;case"right":p.x=h.width+c;break;default:h.x=this._wLabel+c}}else this._rLabel=null}_renderLabel(e,i,s,a){if(s.visible){const e=this._rLabel,a=s.getBBox();let n=e.x,l=e.y;switch(i._runPos){case"top":case"bottom":n+=e.width/2;break;case"right":n=this.width-e.width,s.anchor=t.TextAnchor.START,l+=t.maxv(0,(e.height-a.height)/2);break;default:s.anchor=t.TextAnchor.END,n+=this._wLabel,l+=t.maxv(0,(e.height-a.height)/2)}s.trans(n,l)}}_renderScale(e){const i=this.model,s=i.label,a=i.scale,n=this.scaleView(),l=this._vertical?e.height:e.width;let r,h;if(a._vertical=this._vertical,a._reversed=i.options.reversed,isNaN(this._runValue)&&a.buildSteps(l,i.options.value),n.setVis(i.scaleVisible())){const i=n.measure(this.doc,a,e.width,e.height,1);this._vertical?(r=0,h=e.y,e.width=t.maxv(0,e.width-i.width),"opposite"===a.options.position?r=e.x+e.width:(s._runVert||(r=e.x),e.x+=i.width)):(r=e.x,e.height=t.maxv(0,e.height-i.height),"opposite"===a.options.position?s._runVert?(h=e.y,e.y+=i.height):(this._rLabel.y=e.y+=i.height,h=e.y-i.height):h=e.y+e.height),n.resizeByMeasured().layout().trans(r,h)}}}class T extends t.ChartElement{constructor(e){super(e,"rct-linear-gauge-band"),this._thick=0,this._gap=0,this._labelGap=3,this._barViews=new t.ElementPool(this,t.RectElement),this.add(this._labelContainer=new t.LayerElement(e,"rct-linear-gauge-band-tick-labels")),this._labels=new t.ElementPool(this._labelContainer,t.TextElement)}_doMeasure(e,i,s,a,n){const l=i.gauge,r=this._vertical=l instanceof k?l.isVertical():l.options.vertical,h=i.options.position,o=this._thick=i.getThickness(r?s:a)+("inside"===h?0:this._gap=t.pickNum(i.options.gap,0));let c=r?o:s,d=r?a:o;const u=this._ranges=i.getRanges();if(this._labelContainer.setVis(i.tickLabel.visible&&u.length>0)){const e=[u[0].fromValue].concat(u.map((e=>e.toValue)));if(this._labelContainer.setStyleOrClass(i.tickLabel._style),this._labels.prepare(u.length+1),r){let i=0;this._labels.forEach(((s,a)=>{s.text=String(e[a]),i=t.maxv(s.getBBox().width)})),c+=i+this._labelGap}else{let i=0;this._labels.forEach(((s,a)=>{s.text=String(e[a]),i=t.maxv(s.getBBox().height)})),d+=i}}return{width:c,height:d}}_doLayout(e){const t=this.model,i=t.gauge,s=i.scale,a=s._max-s._min;this._labelContainer.setVis(this.$_layoutBars(i,a,this._ranges)&&this._labelContainer.visible&&"inside"!==t.options.position)&&this.$_layoutLabels(i,a,this._ranges)}$_layoutBars(e,t,i){if(this._barViews.prepare(i.length),!this._barViews.isEmpty&&t>0){const e=this._vertical,s="inside"===this.model.options.position,a="opposite"===this.model.options.position,n=this.width,l=this.height,r=e?l:n,h=this._thick;let o=0;return this._barViews.prepare(i.length).forEach(((c,d)=>{const u=i[d],_=r*(u.toValue-u.fromValue)/t;if(e){const e=s||a?0:n-h;c.setBounds(e,l-o-_,h,_)}else{const e=a?l-h:0;c.setBounds(o,e,_,this._thick)}c.internalClearStyleAndClass(),c.setFill(u.color),u.style&&c.addStyleOrClass(u.style),o+=_})),!0}}$_layoutLabels(e,i,s){const a="opposite"===this.model.options.position;if(this._vertical){const e=this.height,n=a?t.TextAnchor.START:t.TextAnchor.END,l=a?this._thick+this._labelGap:this.width-this._thick-this._labelGap;let r=this._labels.get(0);r.anchor=n,r.trans(l,e-r.getBBox().height/2);for(let t=1;t<=s.length;t++){const a=e-e*s[t-1].toValue/i;r=this._labels.get(t),r.anchor=n,r.trans(l,a-r.getBBox().height/2)}}else{const e=this.width,t=a?0:this._thick;this._labels.get(0).trans(0,t);for(let a=1;a<=s.length;a++){const n=e*s[a-1].toValue/i;this._labels.get(a).trans(n,t)}}}}class L extends B{constructor(e){super(e,"rct-linear-gauge")}_doInitContents(e,i){i.add(this._background=new t.RectElement(e,"rct-linear-gauge-background")),i.add(this._bandView=new T(e)),i.add(this._scaleView=new G(e)),i.add(this._valueView=new t.RectElement(e,"rct-linear-gauge-value")),i.add(this._labelView=new t.TextElement(e))}_backgroundView(){return this._background}labelView(){return this._labelView}scaleView(){return this._scaleView}background(){return this._background}_prepareGauge(e,t){}_renderScale(e){const t=this.model.band,i=this._bandView;if(super._renderScale(e),i.setVis(t.visible)){const s=+t.options.gap||0,a=i.measure(this.doc,t,e.width,e.height,1);i.resizeByMeasured().layout(),this._vertical?"inside"===t.options.position?i.trans(e.x,e.y):"opposite"===t.options.position?(i.trans(e.x+e.width-a.width,e.y),e.width-=a.width+s):(i.trans(e.x,e.y),e.width-=a.width+s,e.x+=a.width+s):"inside"===t.options.position?i.trans(e.x,e.y):"opposite"===t.options.position?(i.trans(e.x,e.y),e.height-=a.height+s,e.y+=a.height+s):(i.trans(e.x,e.y+e.height-a.height),e.height-=a.height+s)}}_renderBand(e,i,s){const a=this._valueView,n=e.options.reversed,l=e.valueBar,r=e._group?e._group.scale:e.scale;if(a.setVis(!t.isEmptyRect(i)&&l.visible&&!r.isEmpty()&&!isNaN(e.options.value)))if(a.setStyleOrClass(l._style),a.internalSetStyleOrClass(l.getStyle(e,s)),this._vertical){const e=i.height*r.getRate(s),t=n?i.y:i.y+i.height-e;a.setBounds(i.x,t,i.width,e)}else{const e=i.width*r.getRate(s),t=n?i.x+i.width-e:i.x;a.setBounds(t,i.y,e,i.height)}}}class P extends t.GaugeGroupView{constructor(e,t){super(e,t)}_doInitContents(e,i){super._doInitContents(e,i),i.insertFirst(this._scaleView=new G(e)),i.insertFirst(this._textView=new t.TextElement(e,"rct-linear-gauge-group-label"))}_prepareGauge(e,t){this._textView.setVis(t.label.visible)&&this._textView.setStyleOrClass(t.label._style),this._scaleView.setVis(t.scale.visible)&&this._scaleView.setStyleOrClass(t.scale._style),super._prepareGauge(e,t)}_doRenderGauges(e,i,s,a){const n=this.model,l=n.options,r=this._textView,h=t.createRect(0,0,s,a);if(r.visible){r.text=n.label.options.text,n.label.buildSvg(r,null,NaN,NaN,n,null);const e=this._textView.getBBox().height+n.label.getGap(a);h.y+=e,h.height-=e,r.trans(this.width/2,0)}n._labelWidth=n._labelHeight=0,this._gaugeViews.forEach(((e,i)=>{const l=e._measureLabelSize(n.get(i),s,a);n._labelWidth=t.maxv(n._labelWidth,l.width),n._labelHeight=t.maxv(n._labelHeight,l.height)}));const o=t.copyObj(h),c=n.itemLabel.options.gap;l.vertical?(o.height-=n._labelHeight+c,n.itemLabel.options.opposite||(o.y+=n._labelHeight+c)):(o.width-=n._labelWidth+c,n.itemLabel.options.opposite||(o.x+=n._labelWidth+c)),this._renderScale(n,h,o),l.vertical?this.$_layoutVert(this.doc,n,i,h):this.$_layoutHorz(this.doc,n,i,h)}_renderScale(e,i,s){const a=this._scaleView,n=e.scale,l=e.options.vertical,r=l?i.height:i.width,h=[];let o,c;if(this._gaugeViews.forEach(((i,s)=>{h.push(t.pickNum(i._runValue,e.get(s).options.value))})),n.buildGroupSteps(r,h),n._vertical=l,a.setVis(n.visible)){const e=a.measure(this.doc,n,s.width,s.height,1);if(l){const t=e.width;s.width-=t,i.width-=t,c=s.y,"opposite"===n.options.position?o=s.x+s.width:(o=s.x,s.x+=t,i.x+=t)}else{const t=e.height;s.height-=t,i.height-=t,o=s.x,"opposite"===n.options.position?(c=s.y,s.y+=t,i.y+=t):c=s.y+s.height}a.resizeByMeasured().layout().trans(o,c)}}$_layoutVert(e,t,i,s){const a=s.height,n=(s.width-t.options.itemGap*(i.count-1))/i.count,l=s.y;let r=s.x;i.forEach(((i,s)=>{i.measure(e,t.get(s),n,a,0),i.resize(n,a),i.layout(),i.trans(r,l),r+=n+t.options.itemGap}))}$_layoutHorz(e,t,i,s){const a=t.options.itemGap,n=s.width,l=(s.height-a*(i.count-1))/i.count,r=s.x;let h=s.y;i.forEach(((i,s)=>{i.measure(e,t.get(s),n,l,0),i.resize(n,l),i.layout(),i.trans(r,h),h+=l+a}))}}class I extends P{constructor(e){super(e,"rct-linear-gauge-group")}_doInitContents(e,t){super._doInitContents(e,t),t.insertChild(this._bandView=new T(e),this._scaleView)}_createPool(e){return new t.ElementPool(e,L)}_renderScale(e,t,i){super._renderScale(e,t,i);const s=this._bandView,a=e.band;let n,l;if(s.setVis(a.visible)){const r=+a.options.gap||0,h=s.measure(this.doc,a,i.width,i.height,1);if(e.options.vertical){const e=h.width+r;i.width-=e,t.width-=e,l=i.y,"opposite"===a.options.position?n=i.x+i.width+r:(n=i.x,i.x+=e,t.x+=e)}else{const e=h.height+r;i.height-=e,t.height-=e,n=i.x,"opposite"===a.options.position?(l=i.y,i.y+=e,t.y+=e):l=i.y+i.height+r}s.resizeByMeasured().layout().trans(n,l)}}}class D extends t.ChartItem{constructor(e){super(e.chart),this.gauge=e}getRanges(){var e;return null===(e=this.$_internalRanges())||void 0===e?void 0:e.slice(0)}_doApply(e){const t=this;var i;super._doApply(e),(i=e.ranges)!==t._ranges&&(t._ranges=i,t._runRanges=null)}$_internalRanges(){if(!this._runRanges){const e=this.gauge.options;this._runRanges=t.buildValueRanges(this._ranges,e.minValue,e.maxValue,this._op.rangeInclusive)}return this._runRanges}}D.defaults=t.extend(t.ChartItem.defaults,{vertical:!0,rangeInclusive:!0});class N extends t.GaugeItem{}N.defaults=t.extend(t.ChartItem.defaults,{visible:!0});class O extends f{}class A extends v{_doInitChildren(e){super._doInitChildren(e),e.band=(this._band=new D(this)).init(),e.targetBar=(this._targetBar=new N(this)).init(),e.valueBar=(this._valueBar=new O(this)).init()}get band(){return this._band}get targetBar(){return this._targetBar}get valueBar(){return this._valueBar}getRanges(e,i,s){return t.buildValueRanges(this._op.ranges,e,i,t.pickProp(s,this._op.rangeInclusive))}}A.type=t.BulletGaugeType,A.defaults=t.extend(v.defaults,{rangeInclusive:!0});class H extends E{getRanges(e,i,s){return t.buildValueRanges(this._op.ranges,e,i,t.pickProp(s,this._op.rangeInclusive))}_gaugesType(){return"bullet"}}H.type=t.BulletGaugeGroupType,H.gaugeType=t.BulletGaugeType,H.defaults=t.extend(E.defaults,{rangeInclusive:!0});class $ extends B{constructor(e){super(e,"rct-bullet-gage")}_doInitContents(e,i){i.add(this._background=new t.RectElement(e,"rct-bullet-gauge-background")),i.add(this._barContainer=new t.LayerElement(e,void 0)),this._barViews=new t.ElementPool(this._barContainer,t.RectElement),i.add(this._valueView=new t.RectElement(e,"rct-bullet-gauge-value")),i.add(this._targetView=new t.RectElement(e,"rct-bullet-gauge-target")),i.add(this._scaleView=new G(e)),i.add(this._labelView=new t.TextElement(e))}_backgroundView(){return this._background}labelView(){return this._labelView}scaleView(){return this._scaleView}background(){return this._background}_prepareGauge(e,t){}_renderBand(e,i,s){const a=e.options,n=e._group,l=e.options.reversed,r=this._vertical,h=n?n.scale:e.scale,o=this._valueView,c=this._targetView;if(this._barContainer.setVis(!t.isEmptyRect(i)&&!h.isEmpty())){const t=e.getRanges(h._min,h._max,!1)||(null==n?void 0:n.getRanges(h._min,h._max,!1));t&&(this._barContainer.setRect(i),this._barViews.prepare(t.length),r?this._barViews.forEach(((e,s)=>{const a=t[s],n=i.height*h.getRate(a.toValue-a.fromValue),r=i.height*h.getRate(a.fromValue);e.setBounds(0,l?r:i.height-r-n,i.width,n),e.internalClearStyleAndClass(),e.setFill(a.color),a.style&&e.addStyleOrClass(a.style)})):this._barViews.forEach(((e,s)=>{const a=t[s],n=i.width*h.getRate(a.toValue-a.fromValue),r=i.width*h.getRate(a.fromValue);e.setBounds(l?i.width-n-r:r,0,n,i.height),e.internalClearStyleAndClass(),e.setFill(a.color),a.style&&e.addStyleOrClass(a.style)})))}if(o.setVis(!h.isEmpty()&&!isNaN(s)))if(o.setStyleOrClass(e.valueBar._style),s<a.targetValue&&e.valueBar.options.belowStyle&&o.internalSetStyleOrClass(e.valueBar.options.belowStyle),o.internalSetStyleOrClass(e.valueBar.getStyle(e,s)),r){const e=i.height*h.getRate(s),t=l?i.y:i.y+i.height-e;o.setBounds(i.x+i.width/3,t,i.width/3,e)}else{const e=i.width*h.getRate(s),t=l?i.x+i.width-e:i.x;o.setBounds(t,i.y+i.height/3,e,i.height/3)}if(c.setVis(!h.isEmpty()&&!isNaN(a.targetValue)))if(c.setStyleOrClass(e.targetBar._style),r&&i.width>10){let e=i.height*h.getRate(a.targetValue);e=l?i.y+e:i.y+i.height-e,c.setBounds(i.x+5,e-1,i.width-10,3)}else if(!r&&i.height>10){let e=i.width*h.getRate(a.targetValue);e=l?i.x+i.width-e:i.x+e,c.setBounds(e-1,i.y+5,3,i.height-10)}}}class M extends P{constructor(e){super(e,"rct-bullet-gauge-group")}_createPool(e){return new t.ElementPool(e,$)}}class z extends t.GaugeItem{getThickness(e){return t.calcPercent(this._thicknessDim,e,e)}_doApply(e){super._doApply(e),this._setDim(e,"thickness")}}z.defaults=t.extend(t.ChartItem.defaults,{thickness:7});class W extends t.GaugeItem{getLength(e){return t.calcPercent(this._lengthDim,e,e)}_doApply(e){super._doApply(e),this._setDim(e,"length")}}W.defaults=t.extend(t.ChartItem.defaults,{thickness:7,length:"60%"});class F extends W{}F.defaults=t.extend(W.defaults,{thickness:5,length:"85%"});class j extends W{}j.defaults=t.extend(W.defaults,{thickness:2,length:"95%",animatable:!1,duration:200});class Y extends t.GaugeItem{constructor(e,t){super(e),this.length=t}}class X extends t.GaugeItem{}X.defaults=t.extend(t.ChartItem.defaults,{step:1,offset:1});class U extends t.GaugeItem{constructor(e,t){super(e),this.raidus=t}}class q extends t.ChartText{constructor(e){super(e.chart)}}q.defaults=t.extend(t.ChartText.defaults,{text:"RealChart Clock<br>ver1.0",position:"top"});class J extends t.Gauge{_doInitChildren(e){super._doInitChildren(e),e.rim=(this.rim=new z(this)).init(),e.hourHand=(this.hourHand=new W(this)).init(),e.minuteHand=(this.minuteHand=new F(this)).init(),e.secondHand=(this.secondHand=new j(this)).init(),e.tick=(this.tick=new Y(this,10)).init(),e.minorTick=(this.minorTick=new Y(this,5)).init(),e.tickLabel=(this.tickLabel=new X(this)).init(),e.pin=(this.pin=new U(this,5)).init(),e.label=(this.label=new q(this)).init()}getTime(){const e=this._op;return e.time instanceof Date?e.time:t.isString(e.time)?new Date(e.time):isNaN(e.time)?void 0:new Date(e.time)}getExtents(e,i){const s=t.minv(e,i);return{cx:t.calcPercent(this._centerXDim,e,e/2),cy:t.calcPercent(this._centerYDim,i,i/3),rd:t.calcPercent(this._radiusDim,s,s/2)}}_doApply(e){const i=this;var s,a,n;super._doApply(e),s=e.centerX,a=e.centerY,n=e.radius,(i._centerXDim||s!==i._centerX)&&(i._centerXDim=t.parsePercentSize(t.pickProp(i._centerX=s,t.CircularGauge.DEF_CENTER),!0)),i._centerYDim&&a===i._centerY||(i._centerYDim=t.parsePercentSize(t.pickProp(i._centerY=a,t.CircularGauge.DEF_CENTER),!0)),i._radiusDim&&n===i._radius||(i._radiusDim=t.parsePercentSize(t.pickProp(i._radius=n,t.CircularGauge.DEF_RADIUS),!0))}}J.type=t.ClockGaugeType,J.defaults=t.extend(t.Gauge.defaults,{centerX:"50%",centerY:"50%",radius:"40%",active:!0});class K extends t.RcAnimation{constructor(e){super(),this.view=e}_doUpdate(e){return this.view._secRate=e,this.view.$_renderHands(this.view.model,this.view._exts),!0}}class Q extends t.GaugeView{constructor(e){super(e,"rct-clock-gauge"),this._rimThick=0,this._secRate=1}_doInitContents(e,i){i.add(this._faceView=new t.CircleElement(e,"rct-clock-gauge-face")),i.add(this._rimView=new t.SectorElement(e,"rct-clock-gauge-rim")),i.add(this._labelView=new t.TextElement(e,"rct-clock-gauge-label")),this._labelView.layout=t.TextLayout.MIDDLE,i.add(this._tickContainer=new t.LayerElement(e,"rct-clock-gauge-ticks")),i.add(this._tickLabelContainer=new t.LayerElement(e,"rct-clock-gauge-tick-labels")),i.add(this._hourView=new t.PathElement(e,"rct-clock-gauge-hour")),i.add(this._minuteView=new t.PathElement(e,"rct-clock-gauge-minute")),i.add(this._secondView=new t.PathElement(e,"rct-clock-gauge-second")),i.add(this._pinView=new t.CircleElement(e,"rct-clock-gauge-pin")),this._tickViews=new t.ElementPool(this._tickContainer,t.LineElement,"rct-clock-gauge-tick"),this._minorTickViews=new t.ElementPool(this._tickContainer,t.LineElement,"rct-clock-gauge-minor-tick"),this._tickLabelViews=new t.ElementPool(this._tickLabelContainer,t.TextElement,"rct-clock-gauge-tick-label")}_prepareGauge(e,i){this._tickViews.prepare(i.tick.visible?12:0),this._minorTickViews.prepare(i.minorTick.visible?48:0);const s=Math.round(12/t.maxv(1,Math.floor(i.tickLabel.options.step)||1));this._tickLabelViews.prepare(i.tickLabel.visible?s:0,(e=>{e.layout=t.TextLayout.MIDDLE}))}_renderGauge(e,i){const s=this.model,a=this._exts=s.getExtents(e,i);this._secRate=1,this.$_renderFace(s,a),this.$_renderHands(s,a),s.options.active&&!s.getTime()?this._runner||(this._runner=setInterval((()=>{const e=this._prevSec;this.$_renderHands(this.model,this._exts),t.absv(e-this._prevSec)>=1&&this._secondView.visible&&s.chart.animatable()&&s.secondHand.options.animatable&&this.$_moveSecond(e)}),1e3)):this._runner&&(clearInterval(this._runner),this._runner=void 0)}$_renderFace(e,i){const s=this._labelView,{cx:a,cy:n,rd:l}=i,r=this._rimThick=this._rimView.visible?this.model.rim.getThickness(l):0;this._faceView.setCircle(a,n,l),this._rimView.visible&&(this._rimView.internalSetStyleOrClass(e.rim._style),this._rimView.setSector({cx:a,cy:n,rx:l,ry:l,innerRadius:1-r/l,start:0,angle:2*Math.PI,clockwise:!0}));const h=l-r;let o=h-this.model.tick.length,c=t.ORG_ANGLE,d=t.PI_2/12;if(this._tickViews.forEach(((e,i)=>{e.setLine(a+t.cos(c)*h,n+t.sin(c)*h,a+t.cos(c)*o,n+t.sin(c)*o),c+=d})),!this._minorTickViews.isEmpty){let e=0;o=h-this.model.minorTick.length,c=t.ORG_ANGLE,d=t.PI_2/60,this._minorTickViews.forEach((i=>{e%5==0&&(c+=d,e++),i.setLine(a+t.cos(c)*h,n+t.sin(c)*h,a+t.cos(c)*o,n+t.sin(c)*o),c+=d,e++}))}if(!this._tickLabelViews.isEmpty){const e=12/this._tickLabelViews.count,i=t.PI_2/12*e;c=t.ORG_ANGLE,this._tickLabelViews.get(0).text="12",o=h-(this.model.tick.length+this.model.tickLabel.options.offset||0),o-=.5*this._tickLabelViews.get(0).getBBox().height,this._tickLabelViews.forEach(((s,l,r)=>{s.text=String(0===l?12:l*e),s.trans(a+t.cos(c)*o,n+t.sin(c)*o),c+=i}))}this._pinView.setCircle(a,n,e.pin.raidus),s.setVis(e.label.visible)&&(s.internalSetStyleOrClass(e.label._style),e.label.buildSvg(s,null,NaN,NaN,null,null),"bottom"===e.label.options.position?s.trans(a,n+o/2):s.trans(a,n-o/2))}$_getNow(){const e=this.model.options.timezone;let t=this.model.getTime()||new Date;if(!isNaN(e)){const i=t.getMinutes()+(t.getTimezoneOffset()+e);t.setMinutes(i)}return t}$_renderHands(e,i){const s=this.$_getNow(),a=s.getHours(),n=s.getMinutes(),l=s.getSeconds(),{cx:r,cy:h,rd:o}=i,c=new t.PathBuilder;let d,u,_,g;d=e.hourHand,u=this._hourView,u.setVis(d.visible)&&(g=t.PI_2*(a/12+n/60/12+l/60/60/12),_=d.getLength(o-this._rimThick),c.rect(-d.options.thickness/2,-_,d.options.thickness,_),u.internalSetStyleOrClass(d._style),u.setPath(c.close(!0)).trans(r,h).rotate(g*t.RAD_DEG)),d=e.minuteHand,u=this._minuteView,u.setVis(d.visible)&&(g=t.PI_2*(n/60+l/60/60),_=d.getLength(o-this._rimThick),c.rect(-d.options.thickness/2,-_,d.options.thickness,_),u.internalSetStyleOrClass(d._style),u.setPath(c.close(!0)).trans(r,h).rotate(g*t.RAD_DEG)),d=e.secondHand,u=this._secondView,u.setVis(d.visible)&&(g=this._secRate<1?t.PI_2*(this._aniSec+this._secRate)/60:t.PI_2*l/60,_=d.getLength(o-this._rimThick),c.rect(-d.options.thickness/2,-_,d.options.thickness,_),u.internalSetStyleOrClass(d._style),u.setPath(c.close(!0)).trans(r,h).rotate(g*t.RAD_DEG),this._prevSec=l)}$_moveSecond(e){if(!isNaN(e)){this._aniSec=e;const t=new K(this);t.duration=this.model.secondHand.options.duration||200,t.start()}}}function Z(e){(function(e){return e.Series&&e.SeriesView})(e)&&(e.Gauge.register(A,d,J,k),e.GaugeGroup.register(H,u,R),e.GaugeView.register([d,m],[k,L],[A,$],[J,Q],[u,x],[R,I],[H,M]))}Z(s),e.BulletGauge=A,e.CircleGauge=d,e.ClockGauge=J,e.LinearGauge=k,e.default=Z,Object.defineProperty(e,"__esModule",{value:!0})}));
|
package/gauge.mjs
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* RealChart Gauge v1.2.3
|
|
4
|
+
* Copyright (C) 2023-2024 WooriTech Inc.
|
|
5
|
+
* All Rights Reserved.
|
|
6
|
+
*/
|
|
7
|
+
import{extend as e,ChartItem as t,GaugeScale as s,CircleGaugeType as i,CircleGaugeGroupType as a,CircularGaugeGroup as n,GaugeItem as l,buildValueRanges as r,calcPercent as h,CircularGauge as o,GaugeRangeBand as c,maxv as d,SectorElement as _,TextElement as u,LayerElement as g,minv as p,pickNum as w,pixel as b,RAD_DEG as y,TextAnchor as V,GaugeGroupView as m,ElementPool as x,ValueGaugeView as v,ScaleView as f,ArcElement as k,cos as C,sin as S,fixnum as R,ChartElement as B,PathElement as L,PathBuilder as E,GaugeLabel as T,ValueGauge as D,LinearGaugeType as N,GaugeGroup as I,LinearGaugeGroupType as O,RectElement as G,isEmptyRect as H,LineElement as A,rectToSize as $,assignObj as M,createRect as P,pickProp as z,copyObj as W,BulletGaugeType as F,BulletGaugeGroupType as Y,ChartText as X,ClockGaugeType as U,Gauge as j,isString as q,parsePercentSize as J,GaugeView as K,CircleElement as Q,TextLayout as Z,absv as ee,ORG_ANGLE as te,PI_2 as se,RcAnimation as ie}from"./index.mjs";class ae extends l{getRange(e,t){const s=this.$_internalRanges(e);if(s)for(const e of s)if(t>=e.fromValue&&t<e.toValue)return e}_doApply(e){const t=this;var s;super._doApply(e),(s=e.ranges)!==t._ranges&&(t._ranges=s,t._runRanges=null)}$_internalRanges(e){return this._runRanges||(this._runRanges=r(this._ranges,e.minValue,e.maxValue,this._op.rangeInclusive)),this._runRanges}}ae.defaults=e(t.defaults,{rangeInclusive:!0});class ne extends ae{getSegmentThickness(e){return h(this._segmentThicknessDim,e,e)}_doApply(e){super._doApply(e),this._setDim(e,"segmentThickness")}}ne.defaults=e(ae.defaults,{segmentGap:0});class le extends ae{getThickness(e){return h(this._thicknessDim,e,e)}_doApply(e){super._doApply(e),this._setDim(e,"thickness")}}le.defaults=e(ae.defaults,{thickness:"100%",stroked:!1});(class extends l{}).defaults=e(t.defaults,{visible:!1});class re extends l{getExtents(e){return{radius:h(this._radiusDim,e,0),length:h(this._lengthDim,e,0),offset:h(this._offsetDim,e,0)}}_doApply(e){super._doApply(e),this._setDims(e,"radius","length","offset")}}re.defaults=e(t.defaults,{visible:!1,radius:3,length:"100%",offset:0});class he extends l{getRadius(e){return h(this._radiusDim,e,0)}_doApply(e){super._doApply(e),this._setDim(e,"radius")}}he.defaults=e(t.defaults,{visible:!1,radius:5});class oe extends s{_getStepMultiples(e){return[1,2,2.5,5,10]}}oe.defaults=e(s.defaults,{visible:!1,stepPixels:72});class ce extends o{_doInitChildren(e){super._doInitChildren(e),e.band=(this._band=new c(this)).init(),e.scale=(this._scale=new oe(this)).init(),e.rim=(this._rim=new ne(this)).init(),e.valueRim=(this._valueRim=new le(this)).init(),e.hand=(this._hand=new re(this)).init(),e.pin=(this._pin=new he(this)).init()}get band(){return this._band}get scale(){return this._scale}get rim(){return this._rim}get valueRim(){return this._valueRim}get hand(){return this._hand}get pin(){return this._pin}getExtents(e){const t=super.getExtents(e),s=this.scale,i=this.band;let a=t.radius;const n=a-t.inner;if(i.visible)switch(t.bandThick=i.getThickness(n),i.options.position){case"inside":t.band=a-(n-t.bandThick)/2;break;case"opposite":t.band=t.inner-i.options.gap,t.inner=t.band-t.bandThick;break;default:t.band=a+=t.bandThick+i.options.gap}if(t.scaleTick=d(1,s.tick.options.length||0),t.scaleLabel=16,"opposite"===s.options.position)t.scale=t.inner-s.options.gap,t.inner=t.scale-t.scaleTick-t.scaleLabel;else t.scale=a+s.options.gap;return t}}ce.type=i;class de extends n{_gaugesType(){return"circle"}}de.type=a,de.gaugeType=i,de.defaults=e(n.defaults,{innerRadius:"50%"});class _e extends v{}class ue extends f{setExtents(e,t){this._center=e,this._exts=t}_createLine(e,t){return new k(e,t)}_doMeasure(e,t,s,i,a){const n=t._steps.length-(360===t.gauge.options.sweepAngle?1:0);return this._line.setVis(t.line.visible)&&this._line.internalSetStyleOrClass(t.line._style),this._tickContainer.setVis(t.tick.visible)&&(this._tickContainer.internalSetStyleOrClass(t.tick._style),this._ticks.prepare(n)),this._labelContainer.setVis(t.label.visible)&&(this._labelContainer.internalSetStyleOrClass(t.label._style),this._labels.prepare(n,(e=>{}))),{width:s,height:i}}_doLayout(e){const t=this.model,s=t._steps,i=t.gauge,a=i.options,n="opposite"===t.options.position?-1:1,l=i._props,r=this._center.x,h=this._center.y,o=this._exts.scale,c=o+this.model.tick.options.length*n,d=l._sweepRad,_=l._startRad,u=a.maxValue-a.minValue,g=a.clockwise;let p,w,b,y;if(this._line.visible&&this._line.setArc(r,h,o,_,g?d:-d,g),this._tickContainer.visible&&this._ticks.forEach(((e,i,a)=>{const n=t.getRate(s[i])*(g?d:-d)+_;p=r+C(n)*o,w=h+S(n)*o,b=r+C(n)*c,y=h+S(n)*c,e.setLine(p,w,b,y)})),this._labelContainer.visible){this._labels.get(0).setText(String(a.maxValue));const e=c+.2*this._labels.get(0).getBBox().height*n;this._labels.forEach(((i,l,o)=>{const c=t.getRate(s[l])*(g?d:-d)+_;i.setText(String(R(a.minValue+t.getRate(s[l])*u)));const p=i.getBBox();b=r+C(c)*(e+p.width/2*n)-p.width/2,y=h+S(c)*(e+p.height/2*n)-p.height/2,i.trans(b,y)}))}}}let ge=class extends B{constructor(e){super(e,"rct-circle-gauge-band"),this._sectorViews=new x(this,_),this.add(this._labelContainer=new g(e,"rct-circle-gauge-band-tick-labels")),this._labels=new x(this._labelContainer,u)}setExtends(e,t){this._center=e,this._exts=t}_doLayout(e){const t=this.model,s=t.gauge,i=s.scale,a=s._props,n=this._center.x,l=this._center.y,r=this._exts.band,h=s.options.clockwise,o=1-this._exts.bandThick/r,c=t.getRanges(),d=a._sweepRad;s.options.maxValue,s.options.minValue;let _=a._startRad;this._sectorViews.prepare(c.length).forEach(((e,t)=>{const s=i.getRate(c[t].toValue-c[t].fromValue)*d;e.setSector({cx:n,cy:l,rx:r,ry:r,innerRadius:o,start:_,angle:s,clockwise:h}),e.internalClearStyleAndClass(),e.setFill(c[t].color),c[t].style&&e.addStyleOrClass(c[t].style),_+=h?s:-s}))}};class pe extends L{render(e,t){const s=e.getRadius(t);return s!==this._radius&&(this._radius=s,this.setPath((new E).circle(0,0,s).end())),this.internalSetStyleOrClass(e._style),this}}class we extends L{render(e,t){const s=e.getExtents(t);if(s.radius!==this._radius||s.length!==this._length||s.offset!==this._offset){const e=this._radius=s.radius,t=this._offset=s.offset;if(this._length=s.length,this._radius>0&&this._length>0){const s=new E;s.move(-e,t).line(0,-this._length+t).line(e,t),this.setPath(s.end())}else this.setPath("")}return this.internalSetStyleOrClass(e._style),this}}class be extends _e{constructor(e){super(e,"rct-circle-gauge")}_doInitContents(e,t){t.add(this._rimView=new _(e,"rct-circle-gauge-rim")),t.add(this._valueView=new _(e,"rct-circle-gauge-value")),t.add(this._innerView=new _(e,"rct-circle-gauge-inner")),t.add(this._textView=new u(e,"rct-circle-gauge-label")),t.add(this._handContainer=new g(e,void 0)),t.add(this._scaleView=new ue(e)),t.add(this._bandView=new ge(e))}_backgroundView(){return this._rimView}_prepareGauge(e,t){this._rimView.setVis(t.rim.visible),this._scaleView.setVis(t.scale.visible),this._bandView.setVis(t.band.visible),this._valueView.setVis(t.valueRim.visible),t.hand.visible?(this._handView||this._handContainer.add(this._handView=new we(e,"rct-circle-gauge-hand")),this._handView.visible=!0):this._handView&&(this._handView.visible=!1),t.pin.visible?(this._pinView||this._handContainer.add(this._pinView=new pe(e,"rct-circle-gauge-pin")),this._pinView.visible=!0):this._pinView&&(this._pinView.visible=!1),this._textView.setVis(t.labelVisible())&&this._textView.setStyleOrClass(t.label._style)}_renderGauge(e,t){const s=this.model,i=s.getCenter(e,t),a=s.getExtents(p(e,t));this.$_renderBackground(s,i,a),this._renderValue()}_renderValue(){const e=this.model,t=e.options,s=e.scale,i=e.getProps(),a=this._getValue(e),n=s.getRate(w(a,0)),l=this._center,r=this._exts,h=e.valueRim.getThickness(r.radiusThick),o=this._textView;if(this._valueView.visible){const s=e.valueRim,o=s.options,c=s.getRange(t,a),d=r.value+(o.stroked?0:h/2),_=this._valueView;_.setStyleOrClass(s._style),c&&(_.setStyle(o.stroked?"stroke":"fill",c.color),c.style&&_.addStyleOrClass(c.style)),o.stroked&&(_.setFill("none"),_.setStyle("strokeWidth",b(h))),_.setBoolData("stroked",o.stroked),_.setSectorEx({cx:l.x,cy:l.y,rx:d,ry:d,innerRadius:(d-h)/d,start:i._startRad,angle:i._sweepRad*n,clockwise:t.clockwise},o.stroked)}if(this._handView){const t=(i._handRad+i._sweepRad*n)*y;this._handView.render(e.hand,r.radius).transp(l).rotate(e.options.clockwise?t:-t)}if(o.visible){const s=e.label;if(s.setText(e.getLabel(s,s.options.animatable?a:t.value)),o.text=s.options.text,s.buildSvg(o,null,NaN,NaN,e,s._domain),o.setBoolData("grouped",!!e._group),e._group)this.$_layoutGroupedLabel(e,o,r);else{const e=o.getBBox(),t=s.getOffset(this.width,this.height);o.trans(l.x+t.x,l.y-e.height/2+t.y)}}}$_renderBackground(e,t,s){const i=e.getProps(),a=i._startRad;this._center=t,this._exts=s,e.scale.buildSteps(s.scale*i._sweepRad,NaN),this._rimView.visible&&(this._rimView.internalSetStyleOrClass(e.rim._style),this._rimView.setSector({cx:t.x,cy:t.y,rx:s.radius,ry:s.radius,innerRadius:1-s.radiusThick/s.radius,start:a,angle:i._sweepRad,clockwise:e.options.clockwise})),this._scaleView.visible&&(this._scaleView.setStyleOrClass(e.scale._style),this._scaleView.measure(this.doc,e.scale,this.width,this.height,0),this._scaleView.setExtents(t,s),this._scaleView.layout()),this._bandView.visible&&(this._bandView.setStyleOrClass(e.band._style),this._bandView.measure(this.doc,e.band,this.width,this.height,0),this._bandView.setExtends(t,s),this._bandView.layout()),this._innerView.setStyleOrClass(e.options.innerStyle);let n=s.inner;const l=getComputedStyle(this._innerView.dom),r=parseFloat(l.strokeWidth);r>1&&(n-=r/2),this._innerView.setSector({cx:t.x,cy:t.y,rx:n,ry:n,innerRadius:0,start:0,angle:2*Math.PI,clockwise:!0}),this._pinView&&this._pinView.render(e.pin,n).trans(t.x,t.y)}$_layoutGroupedLabel(e,t,s){const i=t.getBBox(),a=this._rimView.getBBox(),n=+e._group.options.labelGap||0;t.anchor=V.END,t.trans(a.x+a.width/2-n,a.y+(s.radius-s.inner-i.height)/2)}}class ye extends m{constructor(e){super(e,"rct-circle-gauge-group")}_createPool(e){return new x(e,be)}_doRenderGauges(e,t,s,i){const a=this.doc,n=this.model,l=n.props.getCenter(s,i),r=n.props.getExtents(p(s,i));n.setChildExtents(r),s=i=2*r.radius,t.forEach(((e,t)=>{e.measure(a,n.getVisible(t),s,i,0),e.resize(s,i),e.layout()})),e.trans(l.x-r.radius,l.y-r.radius)}}class Ve extends s{}class me extends T{getWidth(e){return h(this._widthDim,e)}getHeight(e){return h(this._heightDim,e)}getMaxWidth(e){return h(this._maxWidthDim,e)}getMaxHeight(e){return h(this._maxHeightDim,e)}getGap(e){return h(this._gapDim,e,0)}_doApply(e){super._doApply(e),this._setDims(e,"width","height","maxWidth","maxHeight","gap")}}me.defaults=e(T.defaults,{maxWidth:"30%",maxHeight:"30%",gap:10});class xe extends D{_doInitChildren(e){super._doInitChildren(e),e.label=(this._label=new me(this.chart)).init(),e.scale=(this._scale=new Ve(this)).init()}get label(){return this._label}get scale(){return this._scale}isVertical(){return this._group?this._group.options.vertical:this._op.vertical}scaleVisible(){return!this._group&&this._scale.visible}calcedMinMax(){return this._scale.range()}_doPrepareRender(e){super._doPrepareRender(e),this._label._prepareRender()}}xe.defaults=e(D.defaults,{reversed:!1});class ve extends l{constructor(){super(...arguments),this._args={gauge:null,value:NaN}}getStyle(e,t){if(this._op.styleCallback){this._args.gauge=e,this._args.value=t;return this._op.styleCallback(this._args)}}}class fe extends xe{_doInitChildren(e){super._doInitChildren(e),e.valueBar=(this._valueBar=new ve(this)).init(),e.band=(this._band=new c(this)).init()}get valueBar(){return this._valueBar}get band(){return this._band}}fe.type=N;class ke extends t{}ke.defaults=e(t.defaults,{opposite:!1,gap:10});class Ce extends me{}Ce.defaults=e(me.defaults,{gap:10});class Se extends I{_doInitChildren(e){super._doInitChildren(e),e.label=(this._label=new Ce(this.chart)).init(),e.itemLabel=(this._itemLabel=new ke(this.chart)).init(),e.scale=(this._scale=new Ve(this)).init()}get label(){return this._label}get itemLabel(){return this._itemLabel}get scale(){return this._scale}calcedMinMax(){return this.scale.range()}}Se.defaults=e(I.defaults,{vertical:!1,itemGap:10});class Re extends Se{_doInitChildren(e){super._doInitChildren(e),e.band=(this._band=new c(this)).init()}get band(){return this._band}_gaugesType(){return"linear"}_doPrepareRender(e){super._doPrepareRender(e),this.band.visible&&this.band._prepareRender()}}Re.type=O,Re.gaugeType=N;class Be extends f{_createLine(e,t){return new A(e,t)}_doMeasure(e,t,s,i,a){const n=t._reversed,l=t._vertical,r=t.label,h=t.tick,o=t._steps,c=o.length;let _=l?t.options.gap:s,u=l?i:t.options.gap;if(this._tickContainer.setVis(h.visible)&&(this._tickContainer.setStyleOrClass(h._style),this._ticks.prepare(c)),l?_+=h.options.length:u+=h.options.length,this._labelContainer.setVis(r.visible)&&(this._labelContainer.setStyleOrClass(r._style),this._labels.prepare(c,(t=>{t.setModel(e,r,null,null)})),c>0))if(l){let e=0;this._labels.forEach(((t,s)=>{t.setText(r.getText(o[n?s:c-1-s])),e=d(t.getBBox().width)})),_+=e}else{let e=0;this._labels.forEach(((t,s)=>{t.setText(r.getText(o[n?c-1-s:s])),e=d(t.getBBox().height)})),u+=e}return{width:_,height:u}}_doLayout(){const e=this.model;e._vertical?this.$_layoutVert(e,this.width,this.height):this.$_layoutHorz(e,this.width,this.height)}$_layoutHorz(e,t,s){const i=e.options,a=this._line,n=e.tick,l=e._steps;l.length;const r="opposite"===i.position,h=r?-n.options.length:n.options.length;let o,c=r?s-i.gap:i.gap;if(a.setVis(e.line.visible)&&(a.setStyleOrClass(e.line._style),a.setHLine(c,0,t)),this._tickContainer.setVis(n.visible)&&this._ticks.forEach(((s,i)=>{o=e.getRate(l[i])*t,s.setVLine(o,c,c+h)})),this._labelContainer.visible){const s=this._labelContainer.textAlign()||"center";let i=Number.MIN_SAFE_INTEGER;c=r?0:c+h,this._labels.forEach(((a,n)=>{a.layout(s);const r=a.getBBox();o=e.getRate(l[n])*t,a.setVis(o-r.width/2>i)&&(a.trans(o-r.width/2,c),i=o+r.width/2)}))}}$_layoutVert(e,t,s){const i=e.options,a=this._line,n=e.tick,l=e._steps;this.height,l.length;const r="opposite"===i.position,h=r?n.options.length:-n.options.length;let o,c=r?i.gap:t-i.gap;if(a.setVis(e.line.visible)&&(a.setStyleOrClass(e.line._style),a.setVLine(c,0,s)),this._tickContainer.setVis(n.visible)&&this._ticks.forEach(((t,i)=>{o=e.getRate(l[i])*s,t.setHLine(o,c,c+h)})),this._labelContainer.visible){const a=this._labelContainer.textAlign()||(r?"left":"right");c=r?c+h:t-i.gap+h,this._labels.forEach(((t,i)=>{t.layout(a);const n=t.getBBox(),h=r?c:c-n.width;o=e.getRate(l[i])*s,t.trans(h,o-n.height/2)}))}}}class Le extends v{_measureLabelSize(e,t,s){const i=e.label,a=this.labelView();return i.setText(e.getLabel(i,e.options.value)),a.text=i.options.text,i.buildSvg(a,null,t,s,e,i._domain),$(a.getBBox())}_renderGauge(e,t){const s=this.model,i=w(this._runValue,s.options.value);this._measureGauge(s,s.label,this.labelView(),i,s.isVertical(),e,t),this._renderValue()}_renderValue(){const e=this.model,t=e.label,s=e.scale,i=this.labelView(),a=w(this._runValue,e.options.value),n=M({},this._rBand);if(this._renderScale(n),this.background().setRect(n),n.height>0&&this._renderBand(e,n,a),"top"!==t._runPos&&"bottom"!==t._runPos||(this._rLabel.height=n.height),this._renderLabel(e,t,i,a),!this._vertical&&("left"===t._runPos||"right"===t._runPos)&&s.visible&&"opposite"===s.options.position){const e=i.getBBox();i.ty+e.height>this.height&&i.transY(d(0,this.height-e.height))}}_measureGauge(e,t,s,i,a,n,l){const r=this._rBand=P(0,0,n,l);if(this._vertical=e._group instanceof Se?e._group.options.vertical:a,t.visible){const a=t._runPos=z(t.options.position,this._vertical?"top":"left"),h=t._runVert="top"===a||"bottom"===a,o=e._group?e._group.itemLabel.options.gap:t._runGap=t.getGap(h?l:n);let c=h?n:t.getWidth(n),_=h?t.getHeight(l):l;const u=h?n:t.getMaxWidth(n),g=h?t.getMaxHeight(l):l,p=this._rLabel=P(0,0,n,l);s.setStyleOrClass(t._style),t.setText(e.getLabel(t,t.options.animatable?i:e.options.value)),s.text=t.options.text,t.buildSvg(s,null,w(c,u),w(_,g),e,t._domain);const b=s.getBBox();switch(h?(p.height=w(_,b.height),r.height=d(0,r.height-(p.height+o))):(p.width=w(c,b.width),this._wLabel=e._group?e._group._labelWidth:p.width,r.width=d(0,r.width-(this._wLabel+o))),a){case"top":r.y=p.height+o;break;case"bottom":p.y=r.height+o;break;case"right":p.x=r.width+o;break;default:r.x=this._wLabel+o}}else this._rLabel=null}_renderLabel(e,t,s,i){if(s.visible){const e=this._rLabel,i=s.getBBox();let a=e.x,n=e.y;switch(t._runPos){case"top":case"bottom":a+=e.width/2;break;case"right":a=this.width-e.width,s.anchor=V.START,n+=d(0,(e.height-i.height)/2);break;default:s.anchor=V.END,a+=this._wLabel,n+=d(0,(e.height-i.height)/2)}s.trans(a,n)}}_renderScale(e){const t=this.model,s=t.label,i=t.scale,a=this.scaleView(),n=this._vertical?e.height:e.width;let l,r;if(i._vertical=this._vertical,i._reversed=t.options.reversed,isNaN(this._runValue)&&i.buildSteps(n,t.options.value),a.setVis(t.scaleVisible())){const t=a.measure(this.doc,i,e.width,e.height,1);this._vertical?(l=0,r=e.y,e.width=d(0,e.width-t.width),"opposite"===i.options.position?l=e.x+e.width:(s._runVert||(l=e.x),e.x+=t.width)):(l=e.x,e.height=d(0,e.height-t.height),"opposite"===i.options.position?s._runVert?(r=e.y,e.y+=t.height):(this._rLabel.y=e.y+=t.height,r=e.y-t.height):r=e.y+e.height),a.resizeByMeasured().layout().trans(l,r)}}}class Ee extends B{constructor(e){super(e,"rct-linear-gauge-band"),this._thick=0,this._gap=0,this._labelGap=3,this._barViews=new x(this,G),this.add(this._labelContainer=new g(e,"rct-linear-gauge-band-tick-labels")),this._labels=new x(this._labelContainer,u)}_doMeasure(e,t,s,i,a){const n=t.gauge,l=this._vertical=n instanceof fe?n.isVertical():n.options.vertical,r=t.options.position,h=this._thick=t.getThickness(l?s:i)+("inside"===r?0:this._gap=w(t.options.gap,0));let o=l?h:s,c=l?i:h;const _=this._ranges=t.getRanges();if(this._labelContainer.setVis(t.tickLabel.visible&&_.length>0)){const e=[_[0].fromValue].concat(_.map((e=>e.toValue)));if(this._labelContainer.setStyleOrClass(t.tickLabel._style),this._labels.prepare(_.length+1),l){let t=0;this._labels.forEach(((s,i)=>{s.text=String(e[i]),t=d(s.getBBox().width)})),o+=t+this._labelGap}else{let t=0;this._labels.forEach(((s,i)=>{s.text=String(e[i]),t=d(s.getBBox().height)})),c+=t}}return{width:o,height:c}}_doLayout(e){const t=this.model,s=t.gauge,i=s.scale,a=i._max-i._min;this._labelContainer.setVis(this.$_layoutBars(s,a,this._ranges)&&this._labelContainer.visible&&"inside"!==t.options.position)&&this.$_layoutLabels(s,a,this._ranges)}$_layoutBars(e,t,s){if(this._barViews.prepare(s.length),!this._barViews.isEmpty&&t>0){const e=this._vertical,i="inside"===this.model.options.position,a="opposite"===this.model.options.position,n=this.width,l=this.height,r=e?l:n,h=this._thick;let o=0;return this._barViews.prepare(s.length).forEach(((c,d)=>{const _=s[d],u=r*(_.toValue-_.fromValue)/t;if(e){const e=i||a?0:n-h;c.setBounds(e,l-o-u,h,u)}else{const e=a?l-h:0;c.setBounds(o,e,u,this._thick)}c.internalClearStyleAndClass(),c.setFill(_.color),_.style&&c.addStyleOrClass(_.style),o+=u})),!0}}$_layoutLabels(e,t,s){const i="opposite"===this.model.options.position;if(this._vertical){const e=this.height,a=i?V.START:V.END,n=i?this._thick+this._labelGap:this.width-this._thick-this._labelGap;let l=this._labels.get(0);l.anchor=a,l.trans(n,e-l.getBBox().height/2);for(let i=1;i<=s.length;i++){const r=e-e*s[i-1].toValue/t;l=this._labels.get(i),l.anchor=a,l.trans(n,r-l.getBBox().height/2)}}else{const e=this.width,a=i?0:this._thick;this._labels.get(0).trans(0,a);for(let i=1;i<=s.length;i++){const n=e*s[i-1].toValue/t;this._labels.get(i).trans(n,a)}}}}class Te extends Le{constructor(e){super(e,"rct-linear-gauge")}_doInitContents(e,t){t.add(this._background=new G(e,"rct-linear-gauge-background")),t.add(this._bandView=new Ee(e)),t.add(this._scaleView=new Be(e)),t.add(this._valueView=new G(e,"rct-linear-gauge-value")),t.add(this._labelView=new u(e))}_backgroundView(){return this._background}labelView(){return this._labelView}scaleView(){return this._scaleView}background(){return this._background}_prepareGauge(e,t){}_renderScale(e){const t=this.model.band,s=this._bandView;if(super._renderScale(e),s.setVis(t.visible)){const i=+t.options.gap||0,a=s.measure(this.doc,t,e.width,e.height,1);s.resizeByMeasured().layout(),this._vertical?"inside"===t.options.position?s.trans(e.x,e.y):"opposite"===t.options.position?(s.trans(e.x+e.width-a.width,e.y),e.width-=a.width+i):(s.trans(e.x,e.y),e.width-=a.width+i,e.x+=a.width+i):"inside"===t.options.position?s.trans(e.x,e.y):"opposite"===t.options.position?(s.trans(e.x,e.y),e.height-=a.height+i,e.y+=a.height+i):(s.trans(e.x,e.y+e.height-a.height),e.height-=a.height+i)}}_renderBand(e,t,s){const i=this._valueView,a=e.options.reversed,n=e.valueBar,l=e._group?e._group.scale:e.scale;if(i.setVis(!H(t)&&n.visible&&!l.isEmpty()&&!isNaN(e.options.value)))if(i.setStyleOrClass(n._style),i.internalSetStyleOrClass(n.getStyle(e,s)),this._vertical){const e=t.height*l.getRate(s),n=a?t.y:t.y+t.height-e;i.setBounds(t.x,n,t.width,e)}else{const e=t.width*l.getRate(s),n=a?t.x+t.width-e:t.x;i.setBounds(n,t.y,e,t.height)}}}class De extends m{constructor(e,t){super(e,t)}_doInitContents(e,t){super._doInitContents(e,t),t.insertFirst(this._scaleView=new Be(e)),t.insertFirst(this._textView=new u(e,"rct-linear-gauge-group-label"))}_prepareGauge(e,t){this._textView.setVis(t.label.visible)&&this._textView.setStyleOrClass(t.label._style),this._scaleView.setVis(t.scale.visible)&&this._scaleView.setStyleOrClass(t.scale._style),super._prepareGauge(e,t)}_doRenderGauges(e,t,s,i){const a=this.model,n=a.options,l=this._textView,r=P(0,0,s,i);if(l.visible){l.text=a.label.options.text,a.label.buildSvg(l,null,NaN,NaN,a,null);const e=this._textView.getBBox().height+a.label.getGap(i);r.y+=e,r.height-=e,l.trans(this.width/2,0)}a._labelWidth=a._labelHeight=0,this._gaugeViews.forEach(((e,t)=>{const n=e._measureLabelSize(a.get(t),s,i);a._labelWidth=d(a._labelWidth,n.width),a._labelHeight=d(a._labelHeight,n.height)}));const h=W(r),o=a.itemLabel.options.gap;n.vertical?(h.height-=a._labelHeight+o,a.itemLabel.options.opposite||(h.y+=a._labelHeight+o)):(h.width-=a._labelWidth+o,a.itemLabel.options.opposite||(h.x+=a._labelWidth+o)),this._renderScale(a,r,h),n.vertical?this.$_layoutVert(this.doc,a,t,r):this.$_layoutHorz(this.doc,a,t,r)}_renderScale(e,t,s){const i=this._scaleView,a=e.scale,n=e.options.vertical,l=n?t.height:t.width,r=[];let h,o;if(this._gaugeViews.forEach(((t,s)=>{r.push(w(t._runValue,e.get(s).options.value))})),a.buildGroupSteps(l,r),a._vertical=n,i.setVis(a.visible)){const e=i.measure(this.doc,a,s.width,s.height,1);if(n){const i=e.width;s.width-=i,t.width-=i,o=s.y,"opposite"===a.options.position?h=s.x+s.width:(h=s.x,s.x+=i,t.x+=i)}else{const i=e.height;s.height-=i,t.height-=i,h=s.x,"opposite"===a.options.position?(o=s.y,s.y+=i,t.y+=i):o=s.y+s.height}i.resizeByMeasured().layout().trans(h,o)}}$_layoutVert(e,t,s,i){const a=i.height,n=(i.width-t.options.itemGap*(s.count-1))/s.count,l=i.y;let r=i.x;s.forEach(((s,i)=>{s.measure(e,t.get(i),n,a,0),s.resize(n,a),s.layout(),s.trans(r,l),r+=n+t.options.itemGap}))}$_layoutHorz(e,t,s,i){const a=t.options.itemGap,n=i.width,l=(i.height-a*(s.count-1))/s.count,r=i.x;let h=i.y;s.forEach(((s,i)=>{s.measure(e,t.get(i),n,l,0),s.resize(n,l),s.layout(),s.trans(r,h),h+=l+a}))}}class Ne extends De{constructor(e){super(e,"rct-linear-gauge-group")}_doInitContents(e,t){super._doInitContents(e,t),t.insertChild(this._bandView=new Ee(e),this._scaleView)}_createPool(e){return new x(e,Te)}_renderScale(e,t,s){super._renderScale(e,t,s);const i=this._bandView,a=e.band;let n,l;if(i.setVis(a.visible)){const r=+a.options.gap||0,h=i.measure(this.doc,a,s.width,s.height,1);if(e.options.vertical){const e=h.width+r;s.width-=e,t.width-=e,l=s.y,"opposite"===a.options.position?n=s.x+s.width+r:(n=s.x,s.x+=e,t.x+=e)}else{const e=h.height+r;s.height-=e,t.height-=e,n=s.x,"opposite"===a.options.position?(l=s.y,s.y+=e,t.y+=e):l=s.y+s.height+r}i.resizeByMeasured().layout().trans(n,l)}}}class Ie extends t{constructor(e){super(e.chart),this.gauge=e}getRanges(){var e;return null===(e=this.$_internalRanges())||void 0===e?void 0:e.slice(0)}_doApply(e){const t=this;var s;super._doApply(e),(s=e.ranges)!==t._ranges&&(t._ranges=s,t._runRanges=null)}$_internalRanges(){if(!this._runRanges){const e=this.gauge.options;this._runRanges=r(this._ranges,e.minValue,e.maxValue,this._op.rangeInclusive)}return this._runRanges}}Ie.defaults=e(t.defaults,{vertical:!0,rangeInclusive:!0});class Oe extends l{}Oe.defaults=e(t.defaults,{visible:!0});class Ge extends ve{}class He extends xe{_doInitChildren(e){super._doInitChildren(e),e.band=(this._band=new Ie(this)).init(),e.targetBar=(this._targetBar=new Oe(this)).init(),e.valueBar=(this._valueBar=new Ge(this)).init()}get band(){return this._band}get targetBar(){return this._targetBar}get valueBar(){return this._valueBar}getRanges(e,t,s){return r(this._op.ranges,e,t,z(s,this._op.rangeInclusive))}}He.type=F,He.defaults=e(xe.defaults,{rangeInclusive:!0});class Ae extends Se{getRanges(e,t,s){return r(this._op.ranges,e,t,z(s,this._op.rangeInclusive))}_gaugesType(){return"bullet"}}Ae.type=Y,Ae.gaugeType=F,Ae.defaults=e(Se.defaults,{rangeInclusive:!0});class $e extends Le{constructor(e){super(e,"rct-bullet-gage")}_doInitContents(e,t){t.add(this._background=new G(e,"rct-bullet-gauge-background")),t.add(this._barContainer=new g(e,void 0)),this._barViews=new x(this._barContainer,G),t.add(this._valueView=new G(e,"rct-bullet-gauge-value")),t.add(this._targetView=new G(e,"rct-bullet-gauge-target")),t.add(this._scaleView=new Be(e)),t.add(this._labelView=new u(e))}_backgroundView(){return this._background}labelView(){return this._labelView}scaleView(){return this._scaleView}background(){return this._background}_prepareGauge(e,t){}_renderBand(e,t,s){const i=e.options,a=e._group,n=e.options.reversed,l=this._vertical,r=a?a.scale:e.scale,h=this._valueView,o=this._targetView;if(this._barContainer.setVis(!H(t)&&!r.isEmpty())){const s=e.getRanges(r._min,r._max,!1)||(null==a?void 0:a.getRanges(r._min,r._max,!1));s&&(this._barContainer.setRect(t),this._barViews.prepare(s.length),l?this._barViews.forEach(((e,i)=>{const a=s[i],l=t.height*r.getRate(a.toValue-a.fromValue),h=t.height*r.getRate(a.fromValue);e.setBounds(0,n?h:t.height-h-l,t.width,l),e.internalClearStyleAndClass(),e.setFill(a.color),a.style&&e.addStyleOrClass(a.style)})):this._barViews.forEach(((e,i)=>{const a=s[i],l=t.width*r.getRate(a.toValue-a.fromValue),h=t.width*r.getRate(a.fromValue);e.setBounds(n?t.width-l-h:h,0,l,t.height),e.internalClearStyleAndClass(),e.setFill(a.color),a.style&&e.addStyleOrClass(a.style)})))}if(h.setVis(!r.isEmpty()&&!isNaN(s)))if(h.setStyleOrClass(e.valueBar._style),s<i.targetValue&&e.valueBar.options.belowStyle&&h.internalSetStyleOrClass(e.valueBar.options.belowStyle),h.internalSetStyleOrClass(e.valueBar.getStyle(e,s)),l){const e=t.height*r.getRate(s),i=n?t.y:t.y+t.height-e;h.setBounds(t.x+t.width/3,i,t.width/3,e)}else{const e=t.width*r.getRate(s),i=n?t.x+t.width-e:t.x;h.setBounds(i,t.y+t.height/3,e,t.height/3)}if(o.setVis(!r.isEmpty()&&!isNaN(i.targetValue)))if(o.setStyleOrClass(e.targetBar._style),l&&t.width>10){let e=t.height*r.getRate(i.targetValue);e=n?t.y+e:t.y+t.height-e,o.setBounds(t.x+5,e-1,t.width-10,3)}else if(!l&&t.height>10){let e=t.width*r.getRate(i.targetValue);e=n?t.x+t.width-e:t.x+e,o.setBounds(e-1,t.y+5,3,t.height-10)}}}class Me extends De{constructor(e){super(e,"rct-bullet-gauge-group")}_createPool(e){return new x(e,$e)}}class Pe extends l{getThickness(e){return h(this._thicknessDim,e,e)}_doApply(e){super._doApply(e),this._setDim(e,"thickness")}}Pe.defaults=e(t.defaults,{thickness:7});class ze extends l{getLength(e){return h(this._lengthDim,e,e)}_doApply(e){super._doApply(e),this._setDim(e,"length")}}ze.defaults=e(t.defaults,{thickness:7,length:"60%"});class We extends ze{}We.defaults=e(ze.defaults,{thickness:5,length:"85%"});class Fe extends ze{}Fe.defaults=e(ze.defaults,{thickness:2,length:"95%",animatable:!1,duration:200});class Ye extends l{constructor(e,t){super(e),this.length=t}}class Xe extends l{}Xe.defaults=e(t.defaults,{step:1,offset:1});class Ue extends l{constructor(e,t){super(e),this.raidus=t}}class je extends X{constructor(e){super(e.chart)}}je.defaults=e(X.defaults,{text:"RealChart Clock<br>ver1.0",position:"top"});class qe extends j{_doInitChildren(e){super._doInitChildren(e),e.rim=(this.rim=new Pe(this)).init(),e.hourHand=(this.hourHand=new ze(this)).init(),e.minuteHand=(this.minuteHand=new We(this)).init(),e.secondHand=(this.secondHand=new Fe(this)).init(),e.tick=(this.tick=new Ye(this,10)).init(),e.minorTick=(this.minorTick=new Ye(this,5)).init(),e.tickLabel=(this.tickLabel=new Xe(this)).init(),e.pin=(this.pin=new Ue(this,5)).init(),e.label=(this.label=new je(this)).init()}getTime(){const e=this._op;return e.time instanceof Date?e.time:q(e.time)?new Date(e.time):isNaN(e.time)?void 0:new Date(e.time)}getExtents(e,t){const s=p(e,t);return{cx:h(this._centerXDim,e,e/2),cy:h(this._centerYDim,t,t/3),rd:h(this._radiusDim,s,s/2)}}_doApply(e){const t=this;var s,i,a;super._doApply(e),s=e.centerX,i=e.centerY,a=e.radius,(t._centerXDim||s!==t._centerX)&&(t._centerXDim=J(z(t._centerX=s,o.DEF_CENTER),!0)),t._centerYDim&&i===t._centerY||(t._centerYDim=J(z(t._centerY=i,o.DEF_CENTER),!0)),t._radiusDim&&a===t._radius||(t._radiusDim=J(z(t._radius=a,o.DEF_RADIUS),!0))}}qe.type=U,qe.defaults=e(j.defaults,{centerX:"50%",centerY:"50%",radius:"40%",active:!0});class Je extends ie{constructor(e){super(),this.view=e}_doUpdate(e){return this.view._secRate=e,this.view.$_renderHands(this.view.model,this.view._exts),!0}}class Ke extends K{constructor(e){super(e,"rct-clock-gauge"),this._rimThick=0,this._secRate=1}_doInitContents(e,t){t.add(this._faceView=new Q(e,"rct-clock-gauge-face")),t.add(this._rimView=new _(e,"rct-clock-gauge-rim")),t.add(this._labelView=new u(e,"rct-clock-gauge-label")),this._labelView.layout=Z.MIDDLE,t.add(this._tickContainer=new g(e,"rct-clock-gauge-ticks")),t.add(this._tickLabelContainer=new g(e,"rct-clock-gauge-tick-labels")),t.add(this._hourView=new L(e,"rct-clock-gauge-hour")),t.add(this._minuteView=new L(e,"rct-clock-gauge-minute")),t.add(this._secondView=new L(e,"rct-clock-gauge-second")),t.add(this._pinView=new Q(e,"rct-clock-gauge-pin")),this._tickViews=new x(this._tickContainer,A,"rct-clock-gauge-tick"),this._minorTickViews=new x(this._tickContainer,A,"rct-clock-gauge-minor-tick"),this._tickLabelViews=new x(this._tickLabelContainer,u,"rct-clock-gauge-tick-label")}_prepareGauge(e,t){this._tickViews.prepare(t.tick.visible?12:0),this._minorTickViews.prepare(t.minorTick.visible?48:0);const s=Math.round(12/d(1,Math.floor(t.tickLabel.options.step)||1));this._tickLabelViews.prepare(t.tickLabel.visible?s:0,(e=>{e.layout=Z.MIDDLE}))}_renderGauge(e,t){const s=this.model,i=this._exts=s.getExtents(e,t);this._secRate=1,this.$_renderFace(s,i),this.$_renderHands(s,i),s.options.active&&!s.getTime()?this._runner||(this._runner=setInterval((()=>{const e=this._prevSec;this.$_renderHands(this.model,this._exts),ee(e-this._prevSec)>=1&&this._secondView.visible&&s.chart.animatable()&&s.secondHand.options.animatable&&this.$_moveSecond(e)}),1e3)):this._runner&&(clearInterval(this._runner),this._runner=void 0)}$_renderFace(e,t){const s=this._labelView,{cx:i,cy:a,rd:n}=t,l=this._rimThick=this._rimView.visible?this.model.rim.getThickness(n):0;this._faceView.setCircle(i,a,n),this._rimView.visible&&(this._rimView.internalSetStyleOrClass(e.rim._style),this._rimView.setSector({cx:i,cy:a,rx:n,ry:n,innerRadius:1-l/n,start:0,angle:2*Math.PI,clockwise:!0}));const r=n-l;let h=r-this.model.tick.length,o=te,c=se/12;if(this._tickViews.forEach(((e,t)=>{e.setLine(i+C(o)*r,a+S(o)*r,i+C(o)*h,a+S(o)*h),o+=c})),!this._minorTickViews.isEmpty){let e=0;h=r-this.model.minorTick.length,o=te,c=se/60,this._minorTickViews.forEach((t=>{e%5==0&&(o+=c,e++),t.setLine(i+C(o)*r,a+S(o)*r,i+C(o)*h,a+S(o)*h),o+=c,e++}))}if(!this._tickLabelViews.isEmpty){const e=12/this._tickLabelViews.count,t=se/12*e;o=te,this._tickLabelViews.get(0).text="12",h=r-(this.model.tick.length+this.model.tickLabel.options.offset||0),h-=.5*this._tickLabelViews.get(0).getBBox().height,this._tickLabelViews.forEach(((s,n,l)=>{s.text=String(0===n?12:n*e),s.trans(i+C(o)*h,a+S(o)*h),o+=t}))}this._pinView.setCircle(i,a,e.pin.raidus),s.setVis(e.label.visible)&&(s.internalSetStyleOrClass(e.label._style),e.label.buildSvg(s,null,NaN,NaN,null,null),"bottom"===e.label.options.position?s.trans(i,a+h/2):s.trans(i,a-h/2))}$_getNow(){const e=this.model.options.timezone;let t=this.model.getTime()||new Date;if(!isNaN(e)){const s=t.getMinutes()+(t.getTimezoneOffset()+e);t.setMinutes(s)}return t}$_renderHands(e,t){const s=this.$_getNow(),i=s.getHours(),a=s.getMinutes(),n=s.getSeconds(),{cx:l,cy:r,rd:h}=t,o=new E;let c,d,_,u;c=e.hourHand,d=this._hourView,d.setVis(c.visible)&&(u=se*(i/12+a/60/12+n/60/60/12),_=c.getLength(h-this._rimThick),o.rect(-c.options.thickness/2,-_,c.options.thickness,_),d.internalSetStyleOrClass(c._style),d.setPath(o.close(!0)).trans(l,r).rotate(u*y)),c=e.minuteHand,d=this._minuteView,d.setVis(c.visible)&&(u=se*(a/60+n/60/60),_=c.getLength(h-this._rimThick),o.rect(-c.options.thickness/2,-_,c.options.thickness,_),d.internalSetStyleOrClass(c._style),d.setPath(o.close(!0)).trans(l,r).rotate(u*y)),c=e.secondHand,d=this._secondView,d.setVis(c.visible)&&(u=this._secRate<1?se*(this._aniSec+this._secRate)/60:se*n/60,_=c.getLength(h-this._rimThick),o.rect(-c.options.thickness/2,-_,c.options.thickness,_),d.internalSetStyleOrClass(c._style),d.setPath(o.close(!0)).trans(l,r).rotate(u*y),this._prevSec=n)}$_moveSecond(e){if(!isNaN(e)){this._aniSec=e;const t=new Je(this);t.duration=this.model.secondHand.options.duration||200,t.start()}}}function Qe(e){(function(e){return e.Series&&e.SeriesView})(e)&&(e.Gauge.register(He,ce,qe,fe),e.GaugeGroup.register(Ae,de,Re),e.GaugeView.register([ce,be],[fe,Te],[He,$e],[qe,Ke],[de,ye],[Re,Ne],[Ae,Me]))}export{He as BulletGauge,ce as CircleGauge,qe as ClockGauge,fe as LinearGauge,Qe as default,Qe as registerGauge};
|