@refinitiv-ui/elements 6.0.0-next.2 → 6.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/README.md +3 -15
- package/lib/autosuggest/custom-elements.json +5 -15
- package/lib/autosuggest/custom-elements.md +14 -14
- package/lib/autosuggest/helpers/renderer.d.ts +8 -0
- package/lib/autosuggest/helpers/renderer.js +35 -0
- package/lib/autosuggest/helpers/types.d.ts +101 -1
- package/lib/autosuggest/helpers/utils.d.ts +1 -8
- package/lib/autosuggest/helpers/utils.js +0 -27
- package/lib/autosuggest/index.d.ts +33 -32
- package/lib/autosuggest/index.js +246 -202
- package/lib/autosuggest/themes/halo/dark/index.js +1 -1
- package/lib/autosuggest/themes/halo/light/index.js +1 -1
- package/lib/autosuggest/themes/solar/charcoal/index.js +1 -1
- package/lib/autosuggest/themes/solar/pearl/index.js +1 -1
- package/lib/button/themes/halo/dark/index.js +1 -1
- package/lib/button/themes/halo/light/index.js +1 -1
- package/lib/calendar/themes/halo/dark/index.js +1 -1
- package/lib/calendar/themes/halo/light/index.js +1 -1
- package/lib/calendar/themes/solar/charcoal/index.js +1 -1
- package/lib/calendar/themes/solar/pearl/index.js +1 -1
- package/lib/card/themes/halo/dark/index.js +1 -1
- package/lib/card/themes/halo/light/index.js +1 -1
- package/lib/chart/plugins/doughnut-center-label.js +1 -1
- package/lib/chart/themes/halo/dark/index.js +1 -1
- package/lib/chart/themes/halo/light/index.js +1 -1
- package/lib/clock/custom-elements.json +10 -10
- package/lib/clock/custom-elements.md +1 -1
- package/lib/clock/index.d.ts +44 -16
- package/lib/clock/index.js +178 -61
- package/lib/clock/themes/halo/dark/index.js +1 -1
- package/lib/clock/themes/halo/light/index.js +1 -1
- package/lib/clock/themes/solar/charcoal/index.js +1 -1
- package/lib/clock/themes/solar/pearl/index.js +1 -1
- package/lib/collapse/themes/halo/dark/index.js +1 -1
- package/lib/collapse/themes/halo/light/index.js +1 -1
- package/lib/combo-box/custom-elements.json +0 -22
- package/lib/combo-box/custom-elements.md +0 -7
- package/lib/combo-box/themes/halo/dark/index.js +1 -1
- package/lib/combo-box/themes/halo/light/index.js +1 -1
- package/lib/counter/themes/halo/dark/index.js +1 -1
- package/lib/counter/themes/halo/light/index.js +1 -1
- package/lib/datetime-field/custom-elements.json +0 -75
- package/lib/datetime-field/custom-elements.md +27 -36
- package/lib/datetime-picker/themes/halo/dark/index.js +1 -1
- package/lib/datetime-picker/themes/halo/light/index.js +1 -1
- package/lib/dialog/themes/halo/dark/index.js +1 -1
- package/lib/dialog/themes/halo/light/index.js +1 -1
- package/lib/flag/utils/FlagLoader.d.ts +2 -32
- package/lib/flag/utils/FlagLoader.js +2 -69
- package/lib/heatmap/themes/halo/dark/index.js +1 -1
- package/lib/heatmap/themes/halo/light/index.js +1 -1
- package/lib/icon/utils/IconLoader.d.ts +2 -37
- package/lib/icon/utils/IconLoader.js +2 -76
- package/lib/interactive-chart/themes/halo/dark/index.js +1 -1
- package/lib/interactive-chart/themes/halo/light/index.js +1 -1
- package/lib/item/themes/halo/dark/index.js +1 -1
- package/lib/item/themes/halo/light/index.js +1 -1
- package/lib/list/themes/halo/dark/index.js +1 -1
- package/lib/list/themes/halo/light/index.js +1 -1
- package/lib/multi-input/themes/halo/dark/index.js +1 -1
- package/lib/multi-input/themes/halo/light/index.js +1 -1
- package/lib/number-field/custom-elements.json +0 -48
- package/lib/number-field/custom-elements.md +20 -26
- package/lib/number-field/themes/halo/dark/index.js +1 -1
- package/lib/number-field/themes/halo/light/index.js +1 -1
- package/lib/overlay/themes/halo/dark/index.js +1 -1
- package/lib/overlay/themes/halo/light/index.js +1 -1
- package/lib/overlay-menu/themes/halo/dark/index.js +1 -1
- package/lib/overlay-menu/themes/halo/light/index.js +1 -1
- package/lib/password-field/custom-elements.json +0 -7
- package/lib/password-field/custom-elements.md +0 -6
- package/lib/pill/themes/halo/dark/index.js +1 -1
- package/lib/pill/themes/halo/light/index.js +1 -1
- package/lib/rating/custom-elements.json +4 -4
- package/lib/rating/custom-elements.md +2 -2
- package/lib/rating/index.d.ts +84 -32
- package/lib/rating/index.js +209 -80
- package/lib/rating/themes/halo/dark/index.js +1 -1
- package/lib/rating/themes/halo/light/index.js +1 -1
- package/lib/rating/themes/solar/charcoal/index.js +1 -1
- package/lib/rating/themes/solar/pearl/index.js +1 -1
- package/lib/rating/utils.d.ts +9 -0
- package/lib/rating/utils.js +11 -0
- package/lib/search-field/custom-elements.json +0 -7
- package/lib/search-field/custom-elements.md +0 -6
- package/lib/select/themes/halo/dark/index.js +1 -1
- package/lib/select/themes/halo/light/index.js +1 -1
- package/lib/sidebar-layout/themes/halo/dark/index.js +1 -1
- package/lib/sidebar-layout/themes/halo/light/index.js +1 -1
- package/lib/slider/constants.d.ts +5 -1
- package/lib/slider/constants.js +6 -1
- package/lib/slider/index.d.ts +112 -49
- package/lib/slider/index.js +331 -182
- package/lib/slider/themes/halo/dark/index.js +1 -1
- package/lib/slider/themes/halo/light/index.js +1 -1
- package/lib/slider/themes/solar/charcoal/index.js +1 -1
- package/lib/slider/themes/solar/pearl/index.js +1 -1
- package/lib/slider/utils.d.ts +1 -9
- package/lib/slider/utils.js +1 -18
- package/lib/sparkline/themes/halo/dark/index.js +1 -1
- package/lib/sparkline/themes/halo/light/index.js +1 -1
- package/lib/tab/themes/halo/dark/index.js +1 -1
- package/lib/tab/themes/halo/light/index.js +1 -1
- package/lib/tab-bar/themes/halo/dark/index.js +1 -1
- package/lib/tab-bar/themes/halo/light/index.js +1 -1
- package/lib/text-field/custom-elements.json +0 -22
- package/lib/text-field/custom-elements.md +0 -7
- package/lib/toggle/themes/halo/dark/index.js +1 -1
- package/lib/toggle/themes/halo/light/index.js +1 -1
- package/lib/tree/elements/tree-item.js +1 -2
- package/lib/tree/elements/tree.d.ts +6 -0
- package/lib/tree/elements/tree.js +11 -1
- package/lib/tree/themes/halo/dark/index.js +2 -2
- package/lib/tree/themes/halo/light/index.js +2 -2
- package/lib/tree-select/index.js +15 -5
- package/lib/tree-select/themes/halo/dark/index.js +1 -1
- package/lib/tree-select/themes/halo/light/index.js +1 -1
- package/lib/version.js +1 -1
- package/package.json +19 -18
- package/lib/clock/utils/timestamps.d.ts +0 -6
- package/lib/clock/utils/timestamps.js +0 -6
package/lib/clock/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { JSXInterface } from '../jsx';
|
|
2
2
|
import { TemplateResult, CSSResultGroup, PropertyValues, ResponsiveElement, ElementSize } from '@refinitiv-ui/core';
|
|
3
|
+
import '@refinitiv-ui/phrasebook/locale/en/clock.js';
|
|
4
|
+
import { TranslatePromise } from '@refinitiv-ui/translate';
|
|
3
5
|
/**
|
|
4
6
|
* Display hours, minutes and seconds as clock interface
|
|
5
7
|
* @fires value-changed - Fired when the value property changes while ticking.
|
|
@@ -42,6 +44,14 @@ export declare class Clock extends ResponsiveElement {
|
|
|
42
44
|
* Used for accurately ticking time.
|
|
43
45
|
*/
|
|
44
46
|
private tickTimestamp;
|
|
47
|
+
/**
|
|
48
|
+
* Current active segment for interactive mode
|
|
49
|
+
*/
|
|
50
|
+
private activeSegment;
|
|
51
|
+
/**
|
|
52
|
+
* Clock internal translation strings
|
|
53
|
+
*/
|
|
54
|
+
protected tPromise: TranslatePromise;
|
|
45
55
|
/**
|
|
46
56
|
* Get time value in format `hh:mm:ss`
|
|
47
57
|
* @default 00:00:00
|
|
@@ -81,14 +91,14 @@ export declare class Clock extends ResponsiveElement {
|
|
|
81
91
|
* Display the seconds segment.
|
|
82
92
|
*/
|
|
83
93
|
showSeconds: boolean;
|
|
84
|
-
/**
|
|
85
|
-
* Enabled interactive mode. Allowing the user to offset the value.
|
|
86
|
-
*/
|
|
87
|
-
interactive: boolean;
|
|
88
94
|
/**
|
|
89
95
|
* Display clock in analogue style.
|
|
90
96
|
*/
|
|
91
97
|
analogue: boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Enable interactive mode. Allowing the user to offset the value.
|
|
100
|
+
*/
|
|
101
|
+
interactive: boolean;
|
|
92
102
|
/**
|
|
93
103
|
* Getter for hours part.
|
|
94
104
|
*/
|
|
@@ -151,6 +161,11 @@ export declare class Clock extends ResponsiveElement {
|
|
|
151
161
|
* @returns display seconds
|
|
152
162
|
*/
|
|
153
163
|
private get displaySeconds();
|
|
164
|
+
/**
|
|
165
|
+
* Get display value
|
|
166
|
+
* @returns display value
|
|
167
|
+
*/
|
|
168
|
+
private get displayValue();
|
|
154
169
|
/**
|
|
155
170
|
* Get display AM or PM depending on time
|
|
156
171
|
* @returns `AM` or `PM`
|
|
@@ -161,6 +176,11 @@ export declare class Clock extends ResponsiveElement {
|
|
|
161
176
|
* @returns Result
|
|
162
177
|
*/
|
|
163
178
|
private get isAM();
|
|
179
|
+
/**
|
|
180
|
+
* Returns `true` if display minutes has changed
|
|
181
|
+
* @returns Result
|
|
182
|
+
*/
|
|
183
|
+
private get isDisplayMinutesChange();
|
|
164
184
|
/**
|
|
165
185
|
* Configures the tick manager to either start or stop ticking,
|
|
166
186
|
* depending on the state of the element.
|
|
@@ -182,15 +202,15 @@ export declare class Clock extends ResponsiveElement {
|
|
|
182
202
|
*/
|
|
183
203
|
private shift;
|
|
184
204
|
/**
|
|
185
|
-
* Returns any shift amount assigned to a
|
|
186
|
-
* @param
|
|
205
|
+
* Returns any shift amount assigned to a segment.
|
|
206
|
+
* @param segment Segment.
|
|
187
207
|
* @returns {void}
|
|
188
208
|
*/
|
|
189
|
-
private
|
|
209
|
+
private getShiftAmountFromSegment;
|
|
190
210
|
/**
|
|
191
211
|
* Returns `true` or `false` depends on the offset value's effect on giving segment
|
|
192
212
|
*
|
|
193
|
-
* @param segment segment
|
|
213
|
+
* @param segment segment
|
|
194
214
|
* @returns Result
|
|
195
215
|
*/
|
|
196
216
|
private isSegmentShifted;
|
|
@@ -217,27 +237,24 @@ export declare class Clock extends ResponsiveElement {
|
|
|
217
237
|
private manageControlKeys;
|
|
218
238
|
/**
|
|
219
239
|
* Handles UP key press
|
|
220
|
-
* @param event Event Object
|
|
221
240
|
* @returns {void}
|
|
222
241
|
*/
|
|
223
242
|
private handleUpKey;
|
|
224
243
|
/**
|
|
225
244
|
* Handle DOWN key press
|
|
226
|
-
* @param event Event Object
|
|
227
245
|
* @returns {void}
|
|
228
246
|
*/
|
|
229
247
|
private handleDownKey;
|
|
230
248
|
/**
|
|
231
|
-
*
|
|
232
|
-
*
|
|
233
|
-
* @returns {
|
|
249
|
+
* Set aria-valuenow to display value and aria-valuetext to translated format
|
|
250
|
+
* @param updateAriaValueText condition to update aria-valueText
|
|
251
|
+
* @returns {void}
|
|
234
252
|
*/
|
|
235
|
-
private
|
|
253
|
+
private updateAriaValue;
|
|
236
254
|
/**
|
|
237
255
|
* Get template of segment
|
|
238
|
-
* @param
|
|
256
|
+
* @param segment segment
|
|
239
257
|
* @param value segment's value
|
|
240
|
-
* @param shiftAmount amount to shift
|
|
241
258
|
* @returns {TemplateResult} template
|
|
242
259
|
*/
|
|
243
260
|
private generateSegmentTemplate;
|
|
@@ -288,6 +305,17 @@ export declare class Clock extends ResponsiveElement {
|
|
|
288
305
|
* @returns {void}
|
|
289
306
|
*/
|
|
290
307
|
protected firstUpdated(changedProperties: PropertyValues): void;
|
|
308
|
+
/**
|
|
309
|
+
* Handles interactive by update role, tabindex, and aria attribute
|
|
310
|
+
* @returns {void}
|
|
311
|
+
*/
|
|
312
|
+
private interactiveChanged;
|
|
313
|
+
/**
|
|
314
|
+
* Called before update() to compute values needed during the update.
|
|
315
|
+
* @param changedProperties Properties that has changed
|
|
316
|
+
* @returns {void}
|
|
317
|
+
*/
|
|
318
|
+
protected willUpdate(changedProperties: PropertyValues): void;
|
|
291
319
|
/**
|
|
292
320
|
* Template for digital clock
|
|
293
321
|
* @returns {TemplateResult} template
|
package/lib/clock/index.js
CHANGED
|
@@ -4,14 +4,23 @@ import { customElement } from '@refinitiv-ui/core/decorators/custom-element.js';
|
|
|
4
4
|
import { property } from '@refinitiv-ui/core/decorators/property.js';
|
|
5
5
|
import { query } from '@refinitiv-ui/core/decorators/query.js';
|
|
6
6
|
import { state } from '@refinitiv-ui/core/decorators/state.js';
|
|
7
|
-
import { ifDefined } from '@refinitiv-ui/core/directives/if-defined.js';
|
|
8
7
|
import { VERSION } from '../version.js';
|
|
9
|
-
import
|
|
10
|
-
import { HOURS_IN_DAY, MINUTES_IN_HOUR, SECONDS_IN_DAY, SECONDS_IN_HOUR,
|
|
8
|
+
import '@refinitiv-ui/phrasebook/locale/en/clock.js';
|
|
9
|
+
import { MILLISECONDS_IN_SECOND, HOURS_OF_NOON, isValidTime, toTimeSegment, TimeFormat, format, padNumber, HOURS_IN_DAY, MINUTES_IN_HOUR, SECONDS_IN_MINUTE, SECONDS_IN_DAY, SECONDS_IN_HOUR, parse } from '@refinitiv-ui/utils/date.js';
|
|
10
|
+
import { translate, TranslatePropertyKey } from '@refinitiv-ui/translate';
|
|
11
11
|
import { register, deRegister } from './utils/TickManager.js';
|
|
12
|
-
const UP = 'Up';
|
|
13
|
-
const DOWN = 'Down';
|
|
14
12
|
const SMALL_SIZE = 130; // Break point for small size clock face.
|
|
13
|
+
var Direction;
|
|
14
|
+
(function (Direction) {
|
|
15
|
+
Direction["UP"] = "Up";
|
|
16
|
+
Direction["DOWN"] = "Down";
|
|
17
|
+
})(Direction || (Direction = {}));
|
|
18
|
+
var Segment;
|
|
19
|
+
(function (Segment) {
|
|
20
|
+
Segment["HOURS"] = "hours";
|
|
21
|
+
Segment["MINUTES"] = "minutes";
|
|
22
|
+
Segment["SECOND"] = "seconds";
|
|
23
|
+
})(Segment || (Segment = {}));
|
|
15
24
|
/**
|
|
16
25
|
* Display hours, minutes and seconds as clock interface
|
|
17
26
|
* @fires value-changed - Fired when the value property changes while ticking.
|
|
@@ -43,6 +52,10 @@ let Clock = class Clock extends ResponsiveElement {
|
|
|
43
52
|
* Used for accurately ticking time.
|
|
44
53
|
*/
|
|
45
54
|
this.tickTimestamp = 0;
|
|
55
|
+
/**
|
|
56
|
+
* Current active segment for interactive mode
|
|
57
|
+
*/
|
|
58
|
+
this.activeSegment = Segment.HOURS;
|
|
46
59
|
this._offset = 0;
|
|
47
60
|
this._tick = false;
|
|
48
61
|
/**
|
|
@@ -53,14 +66,14 @@ let Clock = class Clock extends ResponsiveElement {
|
|
|
53
66
|
* Display the seconds segment.
|
|
54
67
|
*/
|
|
55
68
|
this.showSeconds = false;
|
|
56
|
-
/**
|
|
57
|
-
* Enabled interactive mode. Allowing the user to offset the value.
|
|
58
|
-
*/
|
|
59
|
-
this.interactive = false;
|
|
60
69
|
/**
|
|
61
70
|
* Display clock in analogue style.
|
|
62
71
|
*/
|
|
63
72
|
this.analogue = false;
|
|
73
|
+
/**
|
|
74
|
+
* Enable interactive mode. Allowing the user to offset the value.
|
|
75
|
+
*/
|
|
76
|
+
this.interactive = false;
|
|
64
77
|
/**
|
|
65
78
|
* Size of the clock.
|
|
66
79
|
*/
|
|
@@ -171,10 +184,9 @@ let Clock = class Clock extends ResponsiveElement {
|
|
|
171
184
|
return this._tick;
|
|
172
185
|
}
|
|
173
186
|
set tick(value) {
|
|
174
|
-
const newValue = !!value;
|
|
175
187
|
const oldValue = this.tick;
|
|
176
|
-
if (oldValue !==
|
|
177
|
-
this._tick =
|
|
188
|
+
if (oldValue !== value) {
|
|
189
|
+
this._tick = value;
|
|
178
190
|
this.synchronise();
|
|
179
191
|
this.configureTickManager();
|
|
180
192
|
this.requestUpdate('tick', oldValue);
|
|
@@ -244,6 +256,18 @@ let Clock = class Clock extends ResponsiveElement {
|
|
|
244
256
|
get displaySeconds() {
|
|
245
257
|
return this.displayTime % SECONDS_IN_MINUTE;
|
|
246
258
|
}
|
|
259
|
+
/**
|
|
260
|
+
* Get display value
|
|
261
|
+
* @returns display value
|
|
262
|
+
*/
|
|
263
|
+
get displayValue() {
|
|
264
|
+
return format({
|
|
265
|
+
hours: this.displayHours,
|
|
266
|
+
minutes: this.displayMinutes,
|
|
267
|
+
seconds: this.displaySeconds,
|
|
268
|
+
milliseconds: 0
|
|
269
|
+
}, TimeFormat.HHmmss);
|
|
270
|
+
}
|
|
247
271
|
/**
|
|
248
272
|
* Get display AM or PM depending on time
|
|
249
273
|
* @returns `AM` or `PM`
|
|
@@ -258,6 +282,13 @@ let Clock = class Clock extends ResponsiveElement {
|
|
|
258
282
|
get isAM() {
|
|
259
283
|
return this.displayHours24 < HOURS_OF_NOON;
|
|
260
284
|
}
|
|
285
|
+
/**
|
|
286
|
+
* Returns `true` if display minutes has changed
|
|
287
|
+
* @returns Result
|
|
288
|
+
*/
|
|
289
|
+
get isDisplayMinutesChange() {
|
|
290
|
+
return this.displayTime % SECONDS_IN_MINUTE === 0;
|
|
291
|
+
}
|
|
261
292
|
/**
|
|
262
293
|
* Configures the tick manager to either start or stop ticking,
|
|
263
294
|
* depending on the state of the element.
|
|
@@ -290,42 +321,39 @@ let Clock = class Clock extends ResponsiveElement {
|
|
|
290
321
|
* @returns {void}
|
|
291
322
|
*/
|
|
292
323
|
shift(direction, amount) {
|
|
293
|
-
this.offset = (SECONDS_IN_DAY + this.offset + amount * (direction === UP ? 1 : -1)) % SECONDS_IN_DAY;
|
|
324
|
+
this.offset = (SECONDS_IN_DAY + this.offset + amount * (direction === Direction.UP ? 1 : -1)) % SECONDS_IN_DAY;
|
|
294
325
|
this.notifyPropertyChange('offset', this.offset);
|
|
295
326
|
}
|
|
296
327
|
/**
|
|
297
|
-
* Returns any shift amount assigned to a
|
|
298
|
-
* @param
|
|
328
|
+
* Returns any shift amount assigned to a segment.
|
|
329
|
+
* @param segment Segment.
|
|
299
330
|
* @returns {void}
|
|
300
331
|
*/
|
|
301
|
-
|
|
302
|
-
if (
|
|
332
|
+
getShiftAmountFromSegment(segment) {
|
|
333
|
+
if (segment === Segment.HOURS) {
|
|
303
334
|
return SECONDS_IN_HOUR;
|
|
304
335
|
}
|
|
305
|
-
if (
|
|
336
|
+
if (segment === Segment.MINUTES) {
|
|
306
337
|
return SECONDS_IN_MINUTE;
|
|
307
338
|
}
|
|
308
|
-
if (
|
|
339
|
+
if (segment === Segment.SECOND) {
|
|
309
340
|
return 1;
|
|
310
341
|
}
|
|
311
|
-
if (target instanceof HTMLElement && target.parentElement) {
|
|
312
|
-
return this.getShiftAmountFromTarget(target.parentElement);
|
|
313
|
-
}
|
|
314
342
|
return 0;
|
|
315
343
|
}
|
|
316
344
|
/**
|
|
317
345
|
* Returns `true` or `false` depends on the offset value's effect on giving segment
|
|
318
346
|
*
|
|
319
|
-
* @param segment segment
|
|
347
|
+
* @param segment segment
|
|
320
348
|
* @returns Result
|
|
321
349
|
*/
|
|
322
350
|
isSegmentShifted(segment) {
|
|
323
351
|
switch (segment) {
|
|
324
|
-
case
|
|
352
|
+
case Segment.HOURS:
|
|
325
353
|
return this.hours !== this.displayHours24;
|
|
326
|
-
case
|
|
354
|
+
case Segment.MINUTES:
|
|
327
355
|
return this.minutes !== this.displayMinutes;
|
|
328
|
-
case
|
|
356
|
+
case Segment.SECOND:
|
|
329
357
|
return this.seconds !== this.displaySeconds;
|
|
330
358
|
default:
|
|
331
359
|
return false;
|
|
@@ -338,7 +366,9 @@ let Clock = class Clock extends ResponsiveElement {
|
|
|
338
366
|
* @returns {void}
|
|
339
367
|
*/
|
|
340
368
|
onKeydown(event) {
|
|
341
|
-
this.
|
|
369
|
+
if (this.interactive) {
|
|
370
|
+
this.manageControlKeys(event);
|
|
371
|
+
}
|
|
342
372
|
}
|
|
343
373
|
/**
|
|
344
374
|
* Handles any tap events
|
|
@@ -347,8 +377,21 @@ let Clock = class Clock extends ResponsiveElement {
|
|
|
347
377
|
* @returns {void}
|
|
348
378
|
*/
|
|
349
379
|
onTapStart(event) {
|
|
350
|
-
if (
|
|
351
|
-
|
|
380
|
+
if (!this.interactive) {
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
if (event.target === this.hoursPart) {
|
|
384
|
+
this.activeSegment = Segment.HOURS;
|
|
385
|
+
}
|
|
386
|
+
else if (event.target === this.minutesPart) {
|
|
387
|
+
this.activeSegment = Segment.MINUTES;
|
|
388
|
+
}
|
|
389
|
+
const buttonTarget = event.target;
|
|
390
|
+
if (buttonTarget.getAttribute('name') === Direction.UP) {
|
|
391
|
+
this.shift(Direction.UP, this.getShiftAmountFromSegment(this.activeSegment));
|
|
392
|
+
}
|
|
393
|
+
else if (buttonTarget.getAttribute('name') === Direction.DOWN) {
|
|
394
|
+
this.shift(Direction.DOWN, this.getShiftAmountFromSegment(this.activeSegment));
|
|
352
395
|
}
|
|
353
396
|
}
|
|
354
397
|
/**
|
|
@@ -358,14 +401,26 @@ let Clock = class Clock extends ResponsiveElement {
|
|
|
358
401
|
* @returns {void}
|
|
359
402
|
*/
|
|
360
403
|
manageControlKeys(event) {
|
|
404
|
+
// Ignore special keys
|
|
405
|
+
if (event.shiftKey || event.ctrlKey || event.altKey || event.metaKey) {
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
361
408
|
switch (event.key) {
|
|
362
409
|
case 'Up': // IE
|
|
363
410
|
case 'ArrowUp':
|
|
364
|
-
this.handleUpKey(
|
|
411
|
+
this.handleUpKey();
|
|
365
412
|
break;
|
|
366
413
|
case 'Down': // IE
|
|
367
414
|
case 'ArrowDown':
|
|
368
|
-
this.handleDownKey(
|
|
415
|
+
this.handleDownKey();
|
|
416
|
+
break;
|
|
417
|
+
case 'Left': // IE
|
|
418
|
+
case 'ArrowLeft':
|
|
419
|
+
this.activeSegment = Segment.HOURS;
|
|
420
|
+
break;
|
|
421
|
+
case 'Right': // IE
|
|
422
|
+
case 'ArrowRight':
|
|
423
|
+
this.activeSegment = Segment.MINUTES;
|
|
369
424
|
break;
|
|
370
425
|
default:
|
|
371
426
|
return;
|
|
@@ -374,44 +429,57 @@ let Clock = class Clock extends ResponsiveElement {
|
|
|
374
429
|
}
|
|
375
430
|
/**
|
|
376
431
|
* Handles UP key press
|
|
377
|
-
* @param event Event Object
|
|
378
432
|
* @returns {void}
|
|
379
433
|
*/
|
|
380
|
-
handleUpKey(
|
|
381
|
-
this.shift(UP, this.
|
|
434
|
+
handleUpKey() {
|
|
435
|
+
this.shift(Direction.UP, this.getShiftAmountFromSegment(this.activeSegment));
|
|
382
436
|
}
|
|
383
437
|
/**
|
|
384
438
|
* Handle DOWN key press
|
|
385
|
-
* @param event Event Object
|
|
386
439
|
* @returns {void}
|
|
387
440
|
*/
|
|
388
|
-
handleDownKey(
|
|
389
|
-
this.shift(DOWN, this.
|
|
441
|
+
handleDownKey() {
|
|
442
|
+
this.shift(Direction.DOWN, this.getShiftAmountFromSegment(this.activeSegment));
|
|
390
443
|
}
|
|
391
444
|
/**
|
|
392
|
-
*
|
|
393
|
-
*
|
|
394
|
-
* @returns {
|
|
445
|
+
* Set aria-valuenow to display value and aria-valuetext to translated format
|
|
446
|
+
* @param updateAriaValueText condition to update aria-valueText
|
|
447
|
+
* @returns {void}
|
|
395
448
|
*/
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
449
|
+
async updateAriaValue(updateAriaValueText = true) {
|
|
450
|
+
this.setAttribute('aria-valuenow', `${this.displayTime}`);
|
|
451
|
+
if (updateAriaValueText) {
|
|
452
|
+
const value = await this.tPromise('TIME', {
|
|
453
|
+
value: parse(this.displayValue),
|
|
454
|
+
amPm: this.amPm,
|
|
455
|
+
showSeconds: this.showSeconds
|
|
456
|
+
});
|
|
457
|
+
this.setAttribute('aria-valuetext', value);
|
|
458
|
+
}
|
|
401
459
|
}
|
|
402
460
|
/**
|
|
403
461
|
* Get template of segment
|
|
404
|
-
* @param
|
|
462
|
+
* @param segment segment
|
|
405
463
|
* @param value segment's value
|
|
406
|
-
* @param shiftAmount amount to shift
|
|
407
464
|
* @returns {TemplateResult} template
|
|
408
465
|
*/
|
|
409
|
-
generateSegmentTemplate(
|
|
466
|
+
generateSegmentTemplate(segment, value) {
|
|
467
|
+
const isActive = this.interactive && (segment === this.activeSegment);
|
|
410
468
|
return html `
|
|
411
|
-
<div part="segment ${
|
|
469
|
+
<div part="segment ${segment}${this.isSegmentShifted(segment) ? ' shifted' : ''}"
|
|
470
|
+
?active=${isActive}>
|
|
412
471
|
${padNumber(value, 2)}
|
|
413
|
-
|
|
414
|
-
|
|
472
|
+
<div
|
|
473
|
+
part="increment-button"
|
|
474
|
+
aria-hidden="true"
|
|
475
|
+
name=${Direction.UP}
|
|
476
|
+
?active=${isActive}></div>
|
|
477
|
+
<div
|
|
478
|
+
part="decrement-button"
|
|
479
|
+
aria-hidden="true"
|
|
480
|
+
name=${Direction.DOWN}
|
|
481
|
+
?active=${isActive}></div>
|
|
482
|
+
</div>
|
|
415
483
|
`;
|
|
416
484
|
}
|
|
417
485
|
/**
|
|
@@ -420,7 +488,7 @@ let Clock = class Clock extends ResponsiveElement {
|
|
|
420
488
|
*/
|
|
421
489
|
get dividerTemplate() {
|
|
422
490
|
return html `
|
|
423
|
-
<div part="segment divider">:</div>
|
|
491
|
+
<div part="segment divider" aria-hidden="true">:</div>
|
|
424
492
|
`;
|
|
425
493
|
}
|
|
426
494
|
/**
|
|
@@ -437,21 +505,21 @@ let Clock = class Clock extends ResponsiveElement {
|
|
|
437
505
|
* @returns {TemplateResult} template
|
|
438
506
|
*/
|
|
439
507
|
get hoursSegmentTemplate() {
|
|
440
|
-
return this.generateSegmentTemplate(
|
|
508
|
+
return this.generateSegmentTemplate(Segment.HOURS, this.displayHours);
|
|
441
509
|
}
|
|
442
510
|
/**
|
|
443
511
|
* Template of minutes segment
|
|
444
512
|
* @returns {TemplateResult} template
|
|
445
513
|
*/
|
|
446
514
|
get minutesSegmentTemplate() {
|
|
447
|
-
return this.generateSegmentTemplate(
|
|
515
|
+
return this.generateSegmentTemplate(Segment.MINUTES, this.displayMinutes);
|
|
448
516
|
}
|
|
449
517
|
/**
|
|
450
518
|
* Template of seconds segment
|
|
451
519
|
* @returns {TemplateResult} template
|
|
452
520
|
*/
|
|
453
521
|
get secondsSegmentTemplate() {
|
|
454
|
-
return this.generateSegmentTemplate(
|
|
522
|
+
return this.generateSegmentTemplate(Segment.SECOND, this.displaySeconds);
|
|
455
523
|
}
|
|
456
524
|
/**
|
|
457
525
|
* Called when the element's dimension have changed
|
|
@@ -485,9 +553,52 @@ let Clock = class Clock extends ResponsiveElement {
|
|
|
485
553
|
*/
|
|
486
554
|
firstUpdated(changedProperties) {
|
|
487
555
|
super.firstUpdated(changedProperties);
|
|
488
|
-
this.
|
|
556
|
+
this.addEventListener('keydown', (event) => this.onKeydown(event));
|
|
489
557
|
this.renderRoot.addEventListener('tapstart', (event) => this.onTapStart(event));
|
|
490
558
|
}
|
|
559
|
+
/**
|
|
560
|
+
* Handles interactive by update role, tabindex, and aria attribute
|
|
561
|
+
* @returns {void}
|
|
562
|
+
*/
|
|
563
|
+
interactiveChanged() {
|
|
564
|
+
if (this.interactive) {
|
|
565
|
+
this.setAttribute('role', 'spinbutton');
|
|
566
|
+
this.setAttribute('tabindex', this.getAttribute('tabindex') || '0');
|
|
567
|
+
void this.updateAriaValue();
|
|
568
|
+
}
|
|
569
|
+
else {
|
|
570
|
+
if (this.getAttribute('role') === 'spinbutton') {
|
|
571
|
+
this.removeAttribute('role');
|
|
572
|
+
}
|
|
573
|
+
this.removeAttribute('aria-valuenow');
|
|
574
|
+
this.removeAttribute('aria-valuetext');
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* Called before update() to compute values needed during the update.
|
|
579
|
+
* @param changedProperties Properties that has changed
|
|
580
|
+
* @returns {void}
|
|
581
|
+
*/
|
|
582
|
+
willUpdate(changedProperties) {
|
|
583
|
+
super.willUpdate(changedProperties);
|
|
584
|
+
if (changedProperties.has('interactive')) {
|
|
585
|
+
this.interactiveChanged();
|
|
586
|
+
}
|
|
587
|
+
if (this.interactive) {
|
|
588
|
+
if (!this.hasUpdated
|
|
589
|
+
|| changedProperties.has('offset')
|
|
590
|
+
|| changedProperties.has('value')
|
|
591
|
+
|| changedProperties.has('showSeconds')
|
|
592
|
+
|| changedProperties.has('amPm')
|
|
593
|
+
|| changedProperties.has(TranslatePropertyKey)) {
|
|
594
|
+
void this.updateAriaValue();
|
|
595
|
+
}
|
|
596
|
+
// Avoid announce every second that could interrupt the screen reader when the user takes an action.
|
|
597
|
+
if (changedProperties.has('sessionTicks')) {
|
|
598
|
+
void this.updateAriaValue(this.isDisplayMinutesChange);
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
}
|
|
491
602
|
/**
|
|
492
603
|
* Template for digital clock
|
|
493
604
|
* @returns {TemplateResult} template
|
|
@@ -542,6 +653,12 @@ __decorate([
|
|
|
542
653
|
__decorate([
|
|
543
654
|
state()
|
|
544
655
|
], Clock.prototype, "tickTimestamp", void 0);
|
|
656
|
+
__decorate([
|
|
657
|
+
state()
|
|
658
|
+
], Clock.prototype, "activeSegment", void 0);
|
|
659
|
+
__decorate([
|
|
660
|
+
translate({ mode: 'promise', scope: 'ef-clock' })
|
|
661
|
+
], Clock.prototype, "tPromise", void 0);
|
|
545
662
|
__decorate([
|
|
546
663
|
property({ type: String })
|
|
547
664
|
], Clock.prototype, "value", null);
|
|
@@ -552,17 +669,17 @@ __decorate([
|
|
|
552
669
|
property({ type: Boolean })
|
|
553
670
|
], Clock.prototype, "tick", null);
|
|
554
671
|
__decorate([
|
|
555
|
-
property({ type: Boolean, attribute: 'am-pm' })
|
|
672
|
+
property({ type: Boolean, attribute: 'am-pm', reflect: true })
|
|
556
673
|
], Clock.prototype, "amPm", void 0);
|
|
557
674
|
__decorate([
|
|
558
|
-
property({ type: Boolean, attribute: 'show-seconds' })
|
|
675
|
+
property({ type: Boolean, attribute: 'show-seconds', reflect: true })
|
|
559
676
|
], Clock.prototype, "showSeconds", void 0);
|
|
560
|
-
__decorate([
|
|
561
|
-
property({ type: Boolean })
|
|
562
|
-
], Clock.prototype, "interactive", void 0);
|
|
563
677
|
__decorate([
|
|
564
678
|
property({ type: Boolean, reflect: true })
|
|
565
679
|
], Clock.prototype, "analogue", void 0);
|
|
680
|
+
__decorate([
|
|
681
|
+
property({ type: Boolean })
|
|
682
|
+
], Clock.prototype, "interactive", void 0);
|
|
566
683
|
__decorate([
|
|
567
684
|
query('[part~=hours]', true)
|
|
568
685
|
], Clock.prototype, "hoursPart", void 0);
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
elf.customStyles.define('ef-clock', ':host{font-size:2.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host [part~=segment]{padding:.15em 0;line-height:1em;align-self:flex-end}:host [part~=hours],:host [part~=minutes],:host [part~=seconds]{position:relative;outline:0}:host [part~=hours][part~=shifted],:host [part~=minutes][part~=shifted],:host [part~=seconds][part~=shifted]{color:#334bff}:host [part~=am-pm]{font-size:60%;line-height:1.5em;padding-left:3px}:host [part=decrement-button],:host [part=increment-button]{left:0;width:100%;height:50%;position:absolute;cursor:pointer;display:none}:host [part=decrement-button]::after,:host [part=increment-button]::after{content:"";left:0;right:0;width:0;height:0;margin:0 auto;position:absolute;border-style:solid;transform:rotate(360deg)}:host [part=decrement-button][part=increment-button],:host [part=increment-button][part=increment-button]{top:0}:host [part=decrement-button][part=increment-button]::after,:host [part=increment-button][part=increment-button]::after{top:0;border-width:0 .167em .178em;border-color:transparent transparent #334bff}:host [part=decrement-button][part=decrement-button],:host [part=increment-button][part=decrement-button]{bottom:0}:host [part=decrement-button][part=decrement-button]::after,:host [part=increment-button][part=decrement-button]::after{bottom:0;border-width:.178em .167em 0;border-color:#334bff transparent transparent}:host [part~=hours]:focus,:host [part~=minutes]:focus,:host [part~=seconds]:focus{color:#334bff}:host [part~=hours]:focus [part=decrement-button],:host [part~=hours]:focus [part=increment-button],:host [part~=minutes]:focus [part=decrement-button],:host [part~=minutes]:focus [part=increment-button],:host [part~=seconds]:focus [part=decrement-button],:host [part~=seconds]:focus [part=increment-button]{display:block}:host([analogue]){border-radius:100%;width:160px;max-width:200px;color:grey;background:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTYzIDE2MyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjb2xvcj0iIzgwODA4MCI+PHBhdGggc3Ryb2tlLXdpZHRoPSI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgZD0iTTgxLjUgMHY5LjMiLz48cGF0aCBzdHJva2U9ImN1cnJlbnRDb2xvciIgZD0ibTkwLjAyLjQ0Ni0uNDkyIDQuNjc1TTk4LjQ0NSAxLjc4MWwtLjk3NyA0LjU5N00xMDYuNjg1IDMuOTg5bC0xLjQ1MiA0LjQ3TTExNC42NDkgNy4wNDZsLTEuOTEyIDQuMjk0Ii8+PHBhdGggc3Ryb2tlLXdpZHRoPSI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgZD0ibTEyMi4yNSAxMC45MTktNC42NSA4LjA1NCIvPjxwYXRoIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJtMTI5LjQwNCAxNS41NjUtMi43NjIgMy44MDJNMTM2LjAzNCAyMC45MzRsLTMuMTQ1IDMuNDkyTTE0Mi4wNjYgMjYuOTY2bC0zLjQ5MiAzLjE0NU0xNDcuNDM1IDMzLjU5NmwtMy44MDIgMi43NjIiLz48cGF0aCBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJtMTUyLjA4MSA0MC43NS04LjA1NCA0LjY1Ii8+PHBhdGggc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGQ9Im0xNTUuOTU0IDQ4LjM1MS00LjI5NCAxLjkxMk0xNTkuMDExIDU2LjMxNWwtNC40NyAxLjQ1Mk0xNjEuMjE5IDY0LjU1NWwtNC41OTcuOTc3TTE2Mi41NTQgNzIuOThsLTQuNjc1LjQ5MiIvPjxwYXRoIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGQ9Ik0xNjMgODEuNWgtOS4zIi8+PHBhdGggc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGQ9Im0xNjIuNTU0IDkwLjAyLTQuNjc1LS40OTJNMTYxLjIxOSA5OC40NDVsLTQuNTk3LS45NzdNMTU5LjAxMSAxMDYuNjg1bC00LjQ3LTEuNDUyTTE1NS45NTQgMTE0LjY0OWwtNC4yOTQtMS45MTIiLz48cGF0aCBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJtMTUyLjA4MSAxMjIuMjUtOC4wNTQtNC42NSIvPjxwYXRoIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJtMTQ3LjQzNSAxMjkuNDA0LTMuODAyLTIuNzYyTTE0Mi4wNjYgMTM2LjAzNGwtMy40OTItMy4xNDVNMTM2LjAzNCAxNDIuMDY2bC0zLjE0NS0zLjQ5Mk0xMjkuNDA0IDE0Ny40MzVsLTIuNzYyLTMuODAyIi8+PHBhdGggc3Ryb2tlLXdpZHRoPSI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgZD0ibTEyMi4yNSAxNTIuMDgxLTQuNjUtOC4wNTQiLz48cGF0aCBzdHJva2U9ImN1cnJlbnRDb2xvciIgZD0ibTExNC42NDkgMTU1Ljk1NC0xLjkxMi00LjI5NE0xMDYuNjg1IDE1OS4wMTFsLTEuNDUyLTQuNDdNOTguNDQ1IDE2MS4yMTlsLS45NzctNC41OTdNOTAuMDIgMTYyLjU1NGwtLjQ5Mi00LjY3NSIvPjxwYXRoIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGQ9Ik04MS41IDE2M3YtOS4zIi8+PHBhdGggc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGQ9Im03Mi45OC40NDYuNDkyIDQuNjc1TTY0LjU1NSAxLjc4MWwuOTc3IDQuNTk3TTU2LjMxNSAzLjk4OWwxLjQ1MiA0LjQ3TTQ4LjM1MSA3LjA0NmwxLjkxMiA0LjI5NCIvPjxwYXRoIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGQ9Im00MC43NSAxMC45MTkgNC42NSA4LjA1NCIvPjxwYXRoIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJtMzMuNTk2IDE1LjU2NSAyLjc2MiAzLjgwMk0yNi45NjYgMjAuOTM0bDMuMTQ1IDMuNDkyTTIwLjkzNCAyNi45NjZsMy40OTIgMy4xNDVNMTUuNTY1IDMzLjU5NmwzLjgwMiAyLjc2MiIvPjxwYXRoIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGQ9Im0xMC45MTkgNDAuNzUgOC4wNTQgNC42NSIvPjxwYXRoIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJtNy4wNDYgNDguMzUxIDQuMjk0IDEuOTEyTTMuOTg5IDU2LjMxNWw0LjQ3IDEuNDUyTTEuNzgxIDY0LjU1NWw0LjU5Ny45NzdNLjQ0NiA3Mi45OGw0LjY3NS40OTIiLz48cGF0aCBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJNMCA4MS41aDkuMyIvPjxwYXRoIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJtLjQ0NiA5MC4wMiA0LjY3NS0uNDkyTTEuNzgxIDk4LjQ0NWw0LjU5Ny0uOTc3TTMuOTg5IDEwNi42ODVsNC40Ny0xLjQ1Mk03LjA0NiAxMTQuNjQ5bDQuMjk0LTEuOTEyIi8+PHBhdGggc3Ryb2tlLXdpZHRoPSI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgZD0ibTEwLjkxOSAxMjIuMjUgOC4wNTQtNC42NSIvPjxwYXRoIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJtMTUuNTY1IDEyOS40MDQgMy44MDItMi43NjJNMjAuOTM0IDEzNi4wMzRsMy40OTItMy4xNDVNMjYuOTY2IDE0Mi4wNjZsMy4xNDUtMy40OTJNMzMuNTk2IDE0Ny40MzVsMi43NjItMy44MDIiLz48cGF0aCBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJtNDAuNzUgMTUyLjA4MSA0LjY1LTguMDU0Ii8+PHBhdGggc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGQ9Im00OC4zNTEgMTU1Ljk1NCAxLjkxMi00LjI5NE01Ni4zMTUgMTU5LjAxMWwxLjQ1Mi00LjQ3TTY0LjU1NSAxNjEuMjE5bC45NzctNC41OTdNNzIuOTggMTYyLjU1NGwuNDkyLTQuNjc1Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04MC44MTQgNC42NVYwaDF2NC42NWgtMXpNNzIuMTkyLjUybC40OTMgNC42MjMuOTk0LS4xMDYtLjQ5My00LjYyMy0uOTk0LjEwNnptMTguNDA3IDE2MS43MDQtLjQ5My00LjYyNC0uOTk0LjEwNi40OTMgNC42MjQuOTk0LS4xMDZ6TTY0LjY2IDYuNDk0bC0uOTgtNC41NDYuOTc4LS4yMS45OCA0LjU0NS0uOTc4LjIxek05OS4xMSAxNjAuNzk1bC0uOTgtNC41NDUtLjk3Ny4yMS45OCA0LjU0Ni45NzctLjIxMXpNNTYuODIgOC42ODhsLTEuNDU2LTQuNDE2Ljk1LS4zMTMgMS40NTUgNC40MTYtLjk1LjMxM3ptNTAuNjA5IDE0OS43ODMtMS40NTYtNC40MTYtLjk1LjMxMyAxLjQ1NiA0LjQxNi45NS0uMzEzek00OS4yNTYgMTEuNjk5IDQ3LjM0IDcuNDYybC45MTItLjQxMiAxLjkxNSA0LjIzNy0uOTEuNDEyem02Ni4xOTQgMTQzLjU4Mi0xLjkxNS00LjIzNy0uOTEyLjQxMiAxLjkxNiA0LjIzNy45MTEtLjQxMnptLTMzLjQ3MyA3LjQ2MnYtNC42NDloLTF2NC42NDloMXpNMzUuNzI3IDE5LjcxbC0yLjc0LTMuNzU4LjgwOC0uNTg5IDIuNzQgMy43NTgtLjgwOS41OXptOTQuMDc3IDEyNy4wODEtMi43NC0zLjc1OC0uODA4LjU4OSAyLjczOSAzLjc1OC44MDktLjU4OXpNMjkuNDU0IDI0Ljg5bC0zLjEyMi0zLjQ0Ny43NC0uNjcgMy4xMjMgMy40NDYtLjc0Mi42N3pNMTM2LjQ1OCAxNDEuM2wtMy4xMjItMy40NDctLjc0MS42NzIgMy4xMjIgMy40NDYuNzQxLS42NzF6TTIzLjc1OSAzMC43MWwtMy40Ny0zLjA5Ni42NjYtLjc0NiAzLjQ3IDMuMDk3LS42NjYuNzQ2ek0xNDIuNTAyIDEzNS4xM2wtMy40Ny0zLjA5Ni0uNjY2Ljc0NiAzLjQ2OSAzLjA5Ni42NjctLjc0NnpNMTguNzE2IDM3LjA5OWwtMy43NzktMi43MTIuNTg0LS44MTMgMy43NzggMi43MTItLjU4My44MTN6bTEyOS4xMzcgOTEuMjU4LTMuNzc4LTIuNzEyLS41ODMuODEyIDMuNzc4IDIuNzEyLjU4My0uODEyek00Mi41MiAxNS4yMTlsLTIuMzI2LTQuMDI3Ljg2Ni0uNSAyLjMyNiA0LjAyNy0uODY2LjV6bTgwLjA3NyAxMzYuMzMyLTIuMzI2LTQuMDI3LS44NjYuNSAyLjMyNSA0LjAyNy44NjctLjV6TTExLjAwNSA1MC43OTlsLTQuMjUyLTEuODg1TDcuMTYgNDhsNC4yNTIgMS44ODUtLjQwNi45MTR6bTE0NS4wMzIgNjMuMDMtNC4yNTEtMS44ODUtLjQwNi45MTQgNC4yNTIgMS44ODYuNDA1LS45MTV6TTguMTYzIDU4LjQyMWwtNC40MjctMS40MjUuMzA2LS45NTJMOC40NyA1Ny40N2wtLjMwNy45NTF6bTE1MC44OTIgNDcuMzI2LTQuNDI3LTEuNDI0LS4zMDcuOTUyIDQuNDI4IDEuNDI0LjMwNi0uOTUyek02LjE0MyA2Ni4zMDdsLTQuNTU0LS45NDcuMjA0LS45NzkgNC41NTQuOTQ4LS4yMDQuOTc5em0xNTUuMDU5IDMxLjA3Ni00LjU1NC0uOTQ3LS4yMDQuOTc5IDQuNTU0Ljk0Ny4yMDQtLjk3OXpNNC45NyA3NC4zNjEuMzQyIDczLjlsLjA5OS0uOTk1IDQuNjI4LjQ2LS4wOTkuOTk1ek0xNjIuNDUgODguODQzbC00LjYyOC0uNDYtLjA5OS45OTUgNC42MjguNDYuMDk5LS45OTV6TTE0LjY0MiA0My41MTRsLTQuMDI4LTIuMzI1LjUtLjg2NiA0LjAyOCAyLjMyNS0uNS44NjZ6bTEzNy41MzUgNzguMDQtNC4wMjgtMi4zMjUtLjUwMS44NjYgNC4wMjggMi4zMjUuNTAxLS44NjZ6TTUuMTQ1IDkwLjA4bC00LjYyNS40OTMtLjEwNi0uOTk1IDQuNjI1LS40OTMuMTA2Ljk5NXpNMTYyLjI3IDcyLjE3bC00LjYyNS40OTMuMTA2Ljk5NSA0LjYyNS0uNDkzLS4xMDYtLjk5NHpNNi40OTYgOTguMWwtNC41NDcuOTgtLjIxMS0uOTc3IDQuNTQ3LS45OC4yMS45Nzh6bTE1NC4zNDYtMzQuNDM3LTQuNTQ3Ljk4LjIxMS45NzcgNC41NDctLjk4LS4yMTEtLjk3N3pNOC42OTEgMTA1Ljk0MWwtNC40MTggMS40NTYtLjMxMy0uOTUgNC40MTctMS40NTUuMzE0Ljk0OXptMTQ5LjgyNy01MC41OTUtNC40MTggMS40NTYuMzEzLjk1IDQuNDE4LTEuNDU2LS4zMTMtLjk1ek0xMS43MDMgMTEzLjUwMWwtNC4yMzkgMS45MTYtLjQxMi0uOTEyIDQuMjM5LTEuOTE1LjQxMi45MTF6bTE0My42MjMtNjYuMTc0LTQuMjM4IDEuOTE1LjQxMi45MTEgNC4yMzgtMS45MTUtLjQxMi0uOTExek00LjY1MSA4MS45NTNIMHYtMWg0LjY1MXYxem0xNTguMTQtMS4xNjNoLTQuNjUxdjFoNC42NTF2LTF6TTE5LjcxNiAxMjcuMDI3bC0zLjc1OSAyLjczOS0uNTktLjgwOCAzLjc2LTIuNzM5LjU4OS44MDh6bTEyNy4xMTgtOTQuMDUtMy43NTkgMi43MzkuNTg5LjgwOCAzLjc1OS0yLjczOC0uNTg5LS44MDl6TTI0Ljg5NyAxMzMuMjk4bC0zLjQ0NyAzLjEyMS0uNjcyLS43NDEgMy40NDgtMy4xMjEuNjcxLjc0MXpNMTQxLjM0MSAyNi4zMjRsLTMuNDQ3IDMuMTIuNjcxLjc0MiAzLjQ0OC0zLjEyMS0uNjcyLS43NDF6TTMwLjcxOSAxMzguOTlsLTMuMDk3IDMuNDY5LS43NDYtLjY2NiAzLjA5Ny0zLjQ2OS43NDcuNjY2ek0xMzUuMTcgMjAuMjgzbC0zLjA5OCAzLjQ2OS43NDYuNjY2IDMuMDk4LTMuNDY5LS43NDYtLjY2NnptLTk4LjA2IDEyMy43NS0yLjcxMiAzLjc3Ny0uODEzLS41ODMgMi43MTMtMy43NzcuODEyLjU4M3ptOTEuMjg1LTEyOS4xLTIuNzEyIDMuNzc3LjgxMi41ODMgMi43MTMtMy43NzctLjgxMy0uNTgzek0xNS4yMjQgMTIwLjIzNmwtNC4wMjggMi4zMjUtLjUtLjg2NiA0LjAyOC0yLjMyNS41Ljg2NnptMTM2LjM3MS04MC4wNTQtNC4wMjggMi4zMjUuNS44NjYgNC4wMjgtMi4zMjUtLjUtLjg2NnpNNTAuODE0IDE1MS43NDFsLTEuODg2IDQuMjUxLS45MTQtLjQwNSAxLjg4Ni00LjI1MS45MTQuNDA1em02My4wNDktMTQ0Ljk5LTEuODg2IDQuMjUxLjkxNC40MDUgMS44ODYtNC4yNS0uOTE0LS40MDZ6TTU4LjQzOCAxNTQuNTgybC0xLjQyNSA0LjQyNy0uOTUyLS4zMDcgMS40MjUtNC40MjYuOTUyLjMwNnptNDcuMzQtMTUwLjg0Ny0xLjQyNSA0LjQyNi45NTIuMzA2IDEuNDI1LTQuNDI2LS45NTItLjMwNnpNNjYuMzI3IDE1Ni42MDJsLS45NDggNC41NTMtLjk3OS0uMjA0Ljk0OC00LjU1Mi45NzkuMjAzek05Ny40MTEgMS41ODlsLS45NDcgNC41NTIuOTc5LjIwNC45NDgtNC41NTMtLjk4LS4yMDN6TTc0LjM4MiAxNTcuNzc1bC0uNDYgNC42MjctLjk5NS0uMDk5LjQ2LTQuNjI3Ljk5NS4wOTl6TTg4Ljg2OC4zNDJsLS40NiA0LjYyNy45OTUuMDk4LjQ2LTQuNjI3LS45OTUtLjA5OHpNNDMuNTI3IDE0OC4xMDVsLTIuMzI2IDQuMDI3LS44NjYtLjUgMi4zMjYtNC4wMjcuODY2LjV6TTEyMS41OSAxMC42MTFsLTIuMzI2IDQuMDI3Ljg2Ni41IDIuMzI2LTQuMDI3LS44NjYtLjV6IiBmaWxsPSJjdXJyZW50Q29sb3IiLz48cGF0aCBkPSJNMTEyLjg4NyAyMy4wOTNjMC0uNTQ3LjAxMy0uOTU0LjA0LTEuMjJsLS4yNi4yNGMtLjEuMDg2LS40NC4zNjYtMS4wMi44NGwtLjU0LS42OCAxLjk2LTEuNTRoLjl2Ni42N2gtMS4wOHYtNC4zMXpNMTM1LjIwNSA0OC45MjdsMS43Mi0xLjczYy41MTQtLjUyLjg1NC0uODkgMS4wMi0xLjExLjE2Ny0uMjIuMjg3LS40MjQuMzYtLjYxYTEuNjkgMS42OSAwIDAgMCAuMTEtLjYxYzAtLjMwNy0uMDktLjU0Ny0uMjctLjcyLS4xOC0uMTczLS40My0uMjYtLjc1LS4yNi0uMjY2IDAtLjUyLjA1LS43Ni4xNS0uMjMzLjA5My0uNTA2LjI2My0uODIuNTFsLS41Ny0uNzJjLjM2LS4zLjcxNC0uNTE3IDEuMDYtLjY1LjM1NC0uMTMzLjczNC0uMiAxLjE0LS4yLjYyNyAwIDEuMTI3LjE2IDEuNS40OC4zNzQuMzIuNTYuNzU3LjU2IDEuMzEgMCAuMzEzLS4wNTMuNi0uMTYuODYtLjEyLjI4Ni0uMjg2LjU2Ni0uNS44NC0uMjQuMy0uNjEzLjY5LTEuMTIgMS4xN2wtMS4xNiAxLjExdi4wNWgzLjE3di45NWgtNC41M3YtLjgyek0xNDcuMTUxIDg0Ljg2NGMtLjc0IDAtMS4zNjctLjEyLTEuODgtLjM2di0uOTVhNC42IDQuNiAwIDAgMCAuOS4zMWMuMzIuMDczLjYyNi4xMS45Mi4xMS41MjYgMCAuOTEzLS4wOTMgMS4xNi0uMjguMjUzLS4xOTMuMzgtLjQ5LjM4LS44OSAwLS4zNi0uMTQtLjYyMy0uNDItLjc5LS4yOC0uMTY2LS43MjctLjI1LTEuMzQtLjI1aC0uNTd2LS44OGguNThjMS4wNzMgMCAxLjYxLS4zNjcgMS42MS0xLjEgMC0uMjkzLS4wOTQtLjUxNy0uMjgtLjY3LS4xODctLjE1My0uNDY0LS4yMy0uODMtLjIzLS4yNjcgMC0uNTE3LjAzNy0uNzUuMTEtLjIzNC4wNzMtLjUwNC4yMS0uODEuNDFsLS41My0uNzVhMy41NTggMy41NTggMCAwIDEgMi4xNC0uNjhjLjY3MyAwIDEuMi4xNDcgMS41OC40NC4zOC4yODcuNTcuNjkuNTcgMS4yMSAwIC40MTMtLjEyNy43NjQtLjM4IDEuMDUtLjI0Ny4yOC0uNTk0LjQ3LTEuMDQuNTd2LjA0Yy41MzMuMDY3LjkzNi4yMzMgMS4yMS41LjI3My4yNjcuNDEuNjIzLjQxIDEuMDcgMCAuNjQtLjIzIDEuMTM3LS42OSAxLjQ5LS40NTQuMzQ3LTEuMS41Mi0xLjk0LjUyek0xMzguMDI1IDExNS4yODNoLTMuMDR2LS44M2wzLjA0LTQuMzloMS4wNHY0LjMzaC45di44OWgtLjl2MS40NWgtMS4wNHYtMS40NXptMC0uODl2LTEuNjdjMC0uNTUzLjAxNy0xLjA0LjA1LTEuNDZoLS4wNGMtLjA5My4yMDctLjIyNi40NS0uNC43M2wtMS42NSAyLjRoMi4wNHpNMTEzLjU5NCAxMzkuMTUyYy0uNzQ3IDAtMS4zMzMtLjEyNC0xLjc2LS4zN3YtLjk2Yy4yNDcuMTMzLjUyNy4yMzYuODQuMzEuMzIuMDczLjYyLjExLjkuMTEuNDggMCAuODUtLjEwNyAxLjExLS4zMi4yNi0uMjIuMzktLjUzNC4zOS0uOTQgMC0uODA3LS41MTctMS4yMS0xLjU1LTEuMjEtLjE2NyAwLS4zNzcuMDItLjYzLjA2bC0uNDQuMDctLjQ5LS4yNy4yNy0zLjI3aDMuNDh2Ljk2aC0yLjU0bC0uMTUgMS42NmMuMzQ3LS4wNjcuNjY3LS4xLjk2LS4xLjY2NyAwIDEuMi4xOCAxLjYuNTQuNC4zNTMuNi44MzYuNiAxLjQ1IDAgLjcxMy0uMjI3IDEuMjczLS42OCAxLjY4LS40NTMuNC0xLjA5LjYtMS45MS42ek04MS43NSAxNDguMDg5Yy0uNzQgMC0xLjMyLS4yNTYtMS43NC0uNzctLjQyLS41MTMtLjYzLTEuMjQtLjYzLTIuMTggMC0yLjYyNiAxLjA3LTMuOTQgMy4yMS0zLjk0LjMyIDAgLjYwNC4wMjcuODUuMDh2Ljg5YTIuODUgMi44NSAwIDAgMC0uODEtLjFjLS43MiAwLTEuMjYuMTk3LTEuNjIuNTktLjM2LjM5NC0uNTU2IDEuMDEtLjU5IDEuODVoLjA2Yy4zMi0uNTI2LjgyNy0uNzkgMS41Mi0uNzkuNjA3IDAgMS4wOC4xODcgMS40Mi41Ni4zNDcuMzc0LjUyLjg4NC41MiAxLjUzIDAgLjctLjE5NiAxLjI1Ny0uNTkgMS42Ny0uMzkzLjQwNy0uOTI2LjYxLTEuNi42MXptLS4wMi0uODhjLjM2IDAgLjY0LS4xMi44NC0uMzYuMjA3LS4yNDYuMzEtLjU5My4zMS0xLjA0IDAtLjM4Ni0uMDk2LS42ODYtLjI5LS45LS4xOTMtLjIyLS40Ny0uMzMtLjgzLS4zMy0uMjMzIDAtLjQ1LjA1NC0uNjUuMTYtLjE5My4xLS4zNS4yMzQtLjQ3LjRhLjkxMi45MTIgMCAwIDAtLjE3LjUyYzAgLjQzNC4xMTcuODA0LjM1IDEuMTEuMjM0LjI5NC41MzcuNDQuOTEuNDR6TTQ5LjI2IDEzMy4zMDJINDUuOHYtLjk0aDQuNjF2Ljc2bC0yLjYxIDUuOTFoLTEuMTZsMi42Mi01Ljczek0yNC43MDMgMTE2Ljg1M2MtLjcyNiAwLTEuMjkzLS4xNTMtMS43LS40Ni0uNC0uMzEzLS42LS43Ni0uNi0xLjM0IDAtLjM4LjEwNy0uNzE2LjMyLTEuMDEuMjE0LS4yOTMuNTU0LS41NTYgMS4wMi0uNzktLjQtLjI0LS42OS0uNDkzLS44Ny0uNzZhMS42OTcgMS42OTcgMCAwIDEtLjI2LS45M2MwLS40OTMuMTg3LS44ODMuNTYtMS4xNy4zOC0uMjg2Ljg4NC0uNDMgMS41MS0uNDMuNjM0IDAgMS4xMzQuMTQ3IDEuNS40NC4zNzQuMjg3LjU2LjY3Ny41NiAxLjE3IDAgLjY5NC0uNDEzIDEuMjQ0LTEuMjQgMS42NS41Mi4yNTQuODkuNTI0IDEuMTEuODEuMjI3LjI4Ny4zNC42MTQuMzQuOTggMCAuNTYtLjIwMyAxLjAwNy0uNjEgMS4zNC0uNC4zMzQtLjk0Ni41LTEuNjQuNXptMC00LjA3Yy4zNi0uMTYuNjE3LS4zMy43Ny0uNTEuMTU0LS4xOC4yMy0uMzkuMjMtLjYzYS43NjIuNzYyIDAgMCAwLS4yOC0uNjJjLS4xODYtLjE1My0uNDM2LS4yMy0uNzUtLjIzLS4zMDYgMC0uNTUzLjA3Ny0uNzQuMjNhLjc2MS43NjEgMCAwIDAtLjI4LjYyYzAgLjE1NC4wMzQuMjk0LjEuNDIuMDY3LjEyNy4xNjcuMjQ0LjMuMzUuMTQuMTA3LjM1Ny4yMy42NS4zN3ptLS4wMiAzLjI1Yy4zOTQgMCAuNjk3LS4wOS45MS0uMjcuMjItLjE4Ni4zMy0uNDQuMzMtLjc2IDAtLjQ3My0uNDAzLS44ODYtMS4yMS0xLjI0bC0uMTQtLjA2Yy0uNC4xNzQtLjY5LjM2Ny0uODcuNTgtLjE4LjIwNy0uMjcuNDUtLjI3LjczIDAgLjMyLjExLjU3LjMzLjc1LjIyNy4xOC41MzQuMjcuOTIuMjd6TTE0Ljg2MiA4NC44NTRjLS40MTQgMC0uNzA0LS4wMjMtLjg3LS4wN3YtLjkxYy4yOC4wNzQuNTUuMTEuODEuMTEuNzMzIDAgMS4yNzYtLjE5MyAxLjYzLS41OC4zNi0uMzkzLjU1Ni0xLjAxLjU5LTEuODVoLS4wNWMtLjE4LjI3My0uMzk3LjQ3NC0uNjUuNi0uMjU0LjEyLS41NTQuMTgtLjkuMTgtLjU5NCAwLTEuMDYtLjE4My0xLjQtLjU1LS4zNC0uMzY3LS41MS0uODczLS41MS0xLjUyIDAtLjcwNi4xOTYtMS4yNjYuNTktMS42OC4zOTMtLjQxMy45My0uNjIgMS42MS0uNjIuNDggMCAuODk2LjExNyAxLjI1LjM1LjM1My4yMzQuNjI2LjU3NC44MiAxLjAyLjE5My40NC4yOS45NjcuMjkgMS41OCAwIDEuMzI3LS4yNjcgMi4zMTctLjggMi45Ny0uNTM0LjY0Ny0xLjMzNy45Ny0yLjQxLjk3em0uODMtMy4zOGMuMzYgMCAuNjY2LS4xMDYuOTItLjMyYS45NTYuOTU2IDAgMCAwIC4zNy0uNzZjMC0uNDMzLS4xMTctLjc5Ny0uMzUtMS4wOWExLjA5OSAxLjA5OSAwIDAgMC0uOS0uNDRjLS4zOCAwLS42Ny4xMi0uODcuMzYtLjE5NC4yNC0uMjkuNTg0LS4yOSAxLjAzIDAgLjM4Ny4wOTMuNjg3LjI4LjkuMTg2LjIxNC40NjYuMzIuODQuMzJ6TTIzLjQ0IDQ3LjY3MWMwLS41NDcuMDE0LS45NTMuMDQtMS4yMmwtLjI2LjI0Yy0uMS4wODctLjQ0LjM2Ny0xLjAyLjg0bC0uNTQtLjY4IDEuOTYtMS41NGguOXY2LjY3aC0xLjA4di00LjMxem01LjAwOCA0LjQzYy0uNzUzIDAtMS4zMjMtLjI5LTEuNzEtLjg3LS4zOC0uNTg3LS41Ny0xLjQ0My0uNTctMi41NyAwLTEuMTguMTg3LTIuMDUuNTYtMi42MS4zNzQtLjU2Ljk0Ny0uODQgMS43Mi0uODQuNzQgMCAxLjMwNC4yOTQgMS42OS44OC4zODcuNTguNTggMS40MzcuNTggMi41NyAwIDEuMTYtLjE4NiAyLjAyMy0uNTYgMi41OS0uMzczLjU2Ny0uOTQzLjg1LTEuNzEuODV6bTAtLjljLjQwNyAwIC43MDQtLjIuODktLjYuMTk0LS40LjI5LTEuMDQ3LjI5LTEuOTRzLS4wOTYtMS41NC0uMjktMS45NGMtLjE4Ni0uNDA2LS40ODMtLjYxLS44OS0uNjEtLjQyIDAtLjcyMy4yLS45MS42LS4xODYuMzk0LS4yOCAxLjA0NC0uMjggMS45NSAwIC45MDcuMDk0IDEuNTU3LjI4IDEuOTUuMTg3LjM5NC40OS41OS45MS41OXpNNDguMDE4IDIzLjA5M2MwLS41NDcuMDE0LS45NTQuMDQtMS4yMmwtLjI2LjI0Yy0uMS4wODYtLjQ0LjM2Ni0xLjAyLjg0bC0uNTQtLjY4IDEuOTYtMS41NGguOXY2LjY3aC0xLjA4di00LjMxem00Ljk5OCAwYzAtLjU0Ny4wMTQtLjk1NC4wNC0xLjIybC0uMjYuMjRjLS4xLjA4Ni0uNDQuMzY2LTEuMDIuODRsLS41NC0uNjggMS45Ni0xLjU0aC45djYuNjdoLTEuMDh2LTQuMzF6TTc4LjE4MyAxNS4zMThjMC0uNTQ3LjAxNC0uOTUzLjA0LTEuMjJsLS4yNi4yNGMtLjEuMDg3LS40NC4zNjctMS4wMi44NGwtLjU0LS42OCAxLjk2LTEuNTRoLjl2Ni42N2gtMS4wOHYtNC4zMXptMi43MzggMy40OSAxLjcyLTEuNzNjLjUxNC0uNTIuODU0LS44OSAxLjAyLTEuMTEuMTY3LS4yMi4yODctLjQyMy4zNi0uNjEuMDc0LS4xOTMuMTEtLjM5Ny4xMS0uNjEgMC0uMzA3LS4wOS0uNTQ3LS4yNy0uNzItLjE4LS4xNzMtLjQzLS4yNi0uNzUtLjI2LS4yNjYgMC0uNTIuMDUtLjc2LjE1LS4yMzMuMDkzLS41MDYuMjYzLS44Mi41MWwtLjU3LS43MmMuMzYtLjMuNzE0LS41MTcgMS4wNi0uNjUuMzU0LS4xMzMuNzM0LS4yIDEuMTQtLjIuNjI3IDAgMS4xMjcuMTYgMS41LjQ4LjM3NC4zMi41Ni43NTcuNTYgMS4zMSAwIC4zMTMtLjA1My42LS4xNi44Ni0uMTIuMjg3LS4yODYuNTY3LS41Ljg0LS4yNC4zLS42MTMuNjktMS4xMiAxLjE3bC0xLjE2IDEuMTF2LjA1aDMuMTd2Ljk1aC00LjUzdi0uODJ6IiBmaWxsPSJjdXJyZW50Q29sb3IiLz48L3N2Zz4=) center center no-repeat}:host([analogue]) [part=digital]{display:flex;position:absolute;top:20%;left:0;right:0;justify-content:center;font-size:.34em}:host([analogue]) [part=digital] [part~=am-pm]{font-size:100%;line-height:1}:host([analogue]) [part=hands]::after{content:\'\';position:absolute;border-radius:50%;width:9%;height:9%;top:45.5%;left:45.5%;border:2px solid #fff;box-sizing:border-box;z-index:1}:host([analogue]) [part~=hand]::after{content:\'\';position:absolute}:host([analogue]) [part~=second]::after{width:1%;height:43%;margin-top:3%;margin-left:49.5%;background-color:#334bff}:host([analogue]) [part~=minute]::after{width:3%;height:43%;margin-top:3%;margin-left:48.5%;background-color:#fff}:host([analogue]) [part~=hour]::after{width:3%;height:28%;margin-top:18%;margin-left:48.5%;background-color:#fff}:host([analogue][size=small]){font-size:10px;min-width:50px;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZpZXdCb3g9IjAgMCA2NCA2NCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjb2xvcj0iI0NDQ0NDQyI+CiAgICA8Y2lyY2xlIGN4PSIzMiIgY3k9IjMyIiByPSIzMS41IiBzdHJva2U9ImN1cnJlbnRDb2xvciIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zMS4yNjE5IDAuOTk5NTEyVjMuOTUxODlIMzIuMjYxOVYwLjk5OTUxMkgzMS4yNjE5Wk00NS4yODU4IDcuMjQ2ODdMNDYuNzYyIDQuNjkwMDNMNDcuNjI4IDUuMTkwMDNMNDYuMTUxOCA3Ljc0Njg3TDQ1LjI4NTggNy4yNDY4N1pNMTUuODM1NyA1LjU3NTUzTDE3LjMxMTkgOC4xMzIzN0wxOC4xNzc5IDcuNjMyMzdMMTYuNzAxNyA1LjA3NTUzTDE1LjgzNTcgNS41NzU1M1pNNC44MzgxIDE3LjA4OThMNy4zOTQ5NCAxOC41NjZMNy44OTQ5NCAxNy43TDUuMzM4MSAxNi4yMjM4TDQuODM4MSAxNy4wODk4Wk0zLjk1MjM4IDMyLjczNzRIMVYzMS43Mzc0SDMuOTUyMzhWMzIuNzM3NFpNNy4zNzEyNiA0NS41MDlMNC44MTQ0MiA0Ni45ODUyTDUuMzE0NDIgNDcuODUxMkw3Ljg3MTI2IDQ2LjM3NUw3LjM3MTI2IDQ1LjUwOVpNMTUuOTA5NSA1OC40NzA1TDE3LjM4NTcgNTUuOTEzNkwxOC4yNTE4IDU2LjQxMzZMMTYuNzc1NiA1OC45NzA1TDE1LjkwOTUgNTguNDcwNVpNMzEuMjYxOSA2MC4wNDY5VjYyLjk5OTNIMzIuMjYxOVY2MC4wNDY5SDMxLjI2MTlaTTQ2LjkxMDMgNTkuMjA5M0w0NS40MzQxIDU2LjY1MjVMNDYuMzAwMSA1Ni4xNTI1TDQ3Ljc3NjMgNTguNzA5M0w0Ni45MTAzIDU5LjIwOTNaTTU1LjkxNDMgNDYuNjE0TDU4LjQ3MTEgNDguMDkwMkw1OC45NzExIDQ3LjIyNDJMNTYuNDE0MyA0NS43NDhMNTUuOTE0MyA0Ni42MTRaTTYzIDMyLjczNzRINjAuMDQ3NlYzMS43Mzc0SDYzVjMyLjczNzRaTTU4LjQyMzcgMTUuODM1NEw1NS44NjY5IDE3LjMxMTZMNTYuMzY2OSAxOC4xNzc2TDU4LjkyMzcgMTYuNzAxNEw1OC40MjM3IDE1LjgzNTRaIiBmaWxsPSJjdXJyZW50Q29sb3IiLz4KPC9zdmc+Cg==) center center/cover no-repeat}:host([analogue][size=small]) [part=hands]::after{background-color:#fff}:host([analogue][size=small]) [part~=second]::after{width:1.5%;height:32%;margin-top:16%}:host([analogue][size=small]) [part~=minute]::after{height:37%;margin-top:12%}:host([analogue][size=small]) [part~=hour]::after{height:26%;margin-top:23%}:host([analogue][size=small]) [part~=am-pm]{padding-left:0;display:flex;position:absolute;left:0;right:0;bottom:15%;font-size:100%;justify-content:center}:host [part~=seconds]{color:grey}');
|
|
2
|
+
elf.customStyles.define('ef-clock', ':host{font-size:2.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0}:host [part~=segment]{padding:.15em 0;line-height:1em;align-self:flex-end}:host [part~=hours],:host [part~=minutes],:host [part~=seconds]{position:relative}:host [part~=hours][part~=shifted],:host [part~=minutes][part~=shifted],:host [part~=seconds][part~=shifted]{color:#334bff}:host [part~=am-pm]{font-size:60%;line-height:1.5em;padding-left:3px}:host [part=decrement-button],:host [part=increment-button]{left:0;width:100%;height:50%;position:absolute;cursor:pointer;display:none}:host [part=decrement-button]::after,:host [part=increment-button]::after{content:"";left:0;right:0;width:0;height:0;margin:0 auto;position:absolute;border-style:solid;transform:rotate(360deg)}:host [part=decrement-button][part=increment-button],:host [part=increment-button][part=increment-button]{top:0}:host [part=decrement-button][part=increment-button]::after,:host [part=increment-button][part=increment-button]::after{top:0;border-width:0 .167em .178em;border-color:transparent transparent #334bff}:host [part=decrement-button][part=decrement-button],:host [part=increment-button][part=decrement-button]{bottom:0}:host [part=decrement-button][part=decrement-button]::after,:host [part=increment-button][part=decrement-button]::after{bottom:0;border-width:.178em .167em 0;border-color:#334bff transparent transparent}:host(:focus) [part~=hours][active],:host(:focus) [part~=minutes][active],:host(:focus) [part~=seconds][active]{color:#334bff}:host(:focus) [active]{display:block}:host([analogue]){border-radius:100%;width:160px;max-width:200px;color:grey;background:url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTYzIDE2MyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjb2xvcj0iIzgwODA4MCI+PHBhdGggc3Ryb2tlLXdpZHRoPSI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgZD0iTTgxLjUgMHY5LjMiLz48cGF0aCBzdHJva2U9ImN1cnJlbnRDb2xvciIgZD0ibTkwLjAyLjQ0Ni0uNDkyIDQuNjc1TTk4LjQ0NSAxLjc4MWwtLjk3NyA0LjU5N00xMDYuNjg1IDMuOTg5bC0xLjQ1MiA0LjQ3TTExNC42NDkgNy4wNDZsLTEuOTEyIDQuMjk0Ii8+PHBhdGggc3Ryb2tlLXdpZHRoPSI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgZD0ibTEyMi4yNSAxMC45MTktNC42NSA4LjA1NCIvPjxwYXRoIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJtMTI5LjQwNCAxNS41NjUtMi43NjIgMy44MDJNMTM2LjAzNCAyMC45MzRsLTMuMTQ1IDMuNDkyTTE0Mi4wNjYgMjYuOTY2bC0zLjQ5MiAzLjE0NU0xNDcuNDM1IDMzLjU5NmwtMy44MDIgMi43NjIiLz48cGF0aCBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJtMTUyLjA4MSA0MC43NS04LjA1NCA0LjY1Ii8+PHBhdGggc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGQ9Im0xNTUuOTU0IDQ4LjM1MS00LjI5NCAxLjkxMk0xNTkuMDExIDU2LjMxNWwtNC40NyAxLjQ1Mk0xNjEuMjE5IDY0LjU1NWwtNC41OTcuOTc3TTE2Mi41NTQgNzIuOThsLTQuNjc1LjQ5MiIvPjxwYXRoIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGQ9Ik0xNjMgODEuNWgtOS4zIi8+PHBhdGggc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGQ9Im0xNjIuNTU0IDkwLjAyLTQuNjc1LS40OTJNMTYxLjIxOSA5OC40NDVsLTQuNTk3LS45NzdNMTU5LjAxMSAxMDYuNjg1bC00LjQ3LTEuNDUyTTE1NS45NTQgMTE0LjY0OWwtNC4yOTQtMS45MTIiLz48cGF0aCBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJtMTUyLjA4MSAxMjIuMjUtOC4wNTQtNC42NSIvPjxwYXRoIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJtMTQ3LjQzNSAxMjkuNDA0LTMuODAyLTIuNzYyTTE0Mi4wNjYgMTM2LjAzNGwtMy40OTItMy4xNDVNMTM2LjAzNCAxNDIuMDY2bC0zLjE0NS0zLjQ5Mk0xMjkuNDA0IDE0Ny40MzVsLTIuNzYyLTMuODAyIi8+PHBhdGggc3Ryb2tlLXdpZHRoPSI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgZD0ibTEyMi4yNSAxNTIuMDgxLTQuNjUtOC4wNTQiLz48cGF0aCBzdHJva2U9ImN1cnJlbnRDb2xvciIgZD0ibTExNC42NDkgMTU1Ljk1NC0xLjkxMi00LjI5NE0xMDYuNjg1IDE1OS4wMTFsLTEuNDUyLTQuNDdNOTguNDQ1IDE2MS4yMTlsLS45NzctNC41OTdNOTAuMDIgMTYyLjU1NGwtLjQ5Mi00LjY3NSIvPjxwYXRoIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGQ9Ik04MS41IDE2M3YtOS4zIi8+PHBhdGggc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGQ9Im03Mi45OC40NDYuNDkyIDQuNjc1TTY0LjU1NSAxLjc4MWwuOTc3IDQuNTk3TTU2LjMxNSAzLjk4OWwxLjQ1MiA0LjQ3TTQ4LjM1MSA3LjA0NmwxLjkxMiA0LjI5NCIvPjxwYXRoIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGQ9Im00MC43NSAxMC45MTkgNC42NSA4LjA1NCIvPjxwYXRoIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJtMzMuNTk2IDE1LjU2NSAyLjc2MiAzLjgwMk0yNi45NjYgMjAuOTM0bDMuMTQ1IDMuNDkyTTIwLjkzNCAyNi45NjZsMy40OTIgMy4xNDVNMTUuNTY1IDMzLjU5NmwzLjgwMiAyLjc2MiIvPjxwYXRoIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGQ9Im0xMC45MTkgNDAuNzUgOC4wNTQgNC42NSIvPjxwYXRoIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJtNy4wNDYgNDguMzUxIDQuMjk0IDEuOTEyTTMuOTg5IDU2LjMxNWw0LjQ3IDEuNDUyTTEuNzgxIDY0LjU1NWw0LjU5Ny45NzdNLjQ0NiA3Mi45OGw0LjY3NS40OTIiLz48cGF0aCBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJNMCA4MS41aDkuMyIvPjxwYXRoIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJtLjQ0NiA5MC4wMiA0LjY3NS0uNDkyTTEuNzgxIDk4LjQ0NWw0LjU5Ny0uOTc3TTMuOTg5IDEwNi42ODVsNC40Ny0xLjQ1Mk03LjA0NiAxMTQuNjQ5bDQuMjk0LTEuOTEyIi8+PHBhdGggc3Ryb2tlLXdpZHRoPSI0IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgZD0ibTEwLjkxOSAxMjIuMjUgOC4wNTQtNC42NSIvPjxwYXRoIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJtMTUuNTY1IDEyOS40MDQgMy44MDItMi43NjJNMjAuOTM0IDEzNi4wMzRsMy40OTItMy4xNDVNMjYuOTY2IDE0Mi4wNjZsMy4xNDUtMy40OTJNMzMuNTk2IDE0Ny40MzVsMi43NjItMy44MDIiLz48cGF0aCBzdHJva2Utd2lkdGg9IjQiIHN0cm9rZT0iY3VycmVudENvbG9yIiBkPSJtNDAuNzUgMTUyLjA4MSA0LjY1LTguMDU0Ii8+PHBhdGggc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGQ9Im00OC4zNTEgMTU1Ljk1NCAxLjkxMi00LjI5NE01Ni4zMTUgMTU5LjAxMWwxLjQ1Mi00LjQ3TTY0LjU1NSAxNjEuMjE5bC45NzctNC41OTdNNzIuOTggMTYyLjU1NGwuNDkyLTQuNjc1Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik04MC44MTQgNC42NVYwaDF2NC42NWgtMXpNNzIuMTkyLjUybC40OTMgNC42MjMuOTk0LS4xMDYtLjQ5My00LjYyMy0uOTk0LjEwNnptMTguNDA3IDE2MS43MDQtLjQ5My00LjYyNC0uOTk0LjEwNi40OTMgNC42MjQuOTk0LS4xMDZ6TTY0LjY2IDYuNDk0bC0uOTgtNC41NDYuOTc4LS4yMS45OCA0LjU0NS0uOTc4LjIxek05OS4xMSAxNjAuNzk1bC0uOTgtNC41NDUtLjk3Ny4yMS45OCA0LjU0Ni45NzctLjIxMXpNNTYuODIgOC42ODhsLTEuNDU2LTQuNDE2Ljk1LS4zMTMgMS40NTUgNC40MTYtLjk1LjMxM3ptNTAuNjA5IDE0OS43ODMtMS40NTYtNC40MTYtLjk1LjMxMyAxLjQ1NiA0LjQxNi45NS0uMzEzek00OS4yNTYgMTEuNjk5IDQ3LjM0IDcuNDYybC45MTItLjQxMiAxLjkxNSA0LjIzNy0uOTEuNDEyem02Ni4xOTQgMTQzLjU4Mi0xLjkxNS00LjIzNy0uOTEyLjQxMiAxLjkxNiA0LjIzNy45MTEtLjQxMnptLTMzLjQ3MyA3LjQ2MnYtNC42NDloLTF2NC42NDloMXpNMzUuNzI3IDE5LjcxbC0yLjc0LTMuNzU4LjgwOC0uNTg5IDIuNzQgMy43NTgtLjgwOS41OXptOTQuMDc3IDEyNy4wODEtMi43NC0zLjc1OC0uODA4LjU4OSAyLjczOSAzLjc1OC44MDktLjU4OXpNMjkuNDU0IDI0Ljg5bC0zLjEyMi0zLjQ0Ny43NC0uNjcgMy4xMjMgMy40NDYtLjc0Mi42N3pNMTM2LjQ1OCAxNDEuM2wtMy4xMjItMy40NDctLjc0MS42NzIgMy4xMjIgMy40NDYuNzQxLS42NzF6TTIzLjc1OSAzMC43MWwtMy40Ny0zLjA5Ni42NjYtLjc0NiAzLjQ3IDMuMDk3LS42NjYuNzQ2ek0xNDIuNTAyIDEzNS4xM2wtMy40Ny0zLjA5Ni0uNjY2Ljc0NiAzLjQ2OSAzLjA5Ni42NjctLjc0NnpNMTguNzE2IDM3LjA5OWwtMy43NzktMi43MTIuNTg0LS44MTMgMy43NzggMi43MTItLjU4My44MTN6bTEyOS4xMzcgOTEuMjU4LTMuNzc4LTIuNzEyLS41ODMuODEyIDMuNzc4IDIuNzEyLjU4My0uODEyek00Mi41MiAxNS4yMTlsLTIuMzI2LTQuMDI3Ljg2Ni0uNSAyLjMyNiA0LjAyNy0uODY2LjV6bTgwLjA3NyAxMzYuMzMyLTIuMzI2LTQuMDI3LS44NjYuNSAyLjMyNSA0LjAyNy44NjctLjV6TTExLjAwNSA1MC43OTlsLTQuMjUyLTEuODg1TDcuMTYgNDhsNC4yNTIgMS44ODUtLjQwNi45MTR6bTE0NS4wMzIgNjMuMDMtNC4yNTEtMS44ODUtLjQwNi45MTQgNC4yNTIgMS44ODYuNDA1LS45MTV6TTguMTYzIDU4LjQyMWwtNC40MjctMS40MjUuMzA2LS45NTJMOC40NyA1Ny40N2wtLjMwNy45NTF6bTE1MC44OTIgNDcuMzI2LTQuNDI3LTEuNDI0LS4zMDcuOTUyIDQuNDI4IDEuNDI0LjMwNi0uOTUyek02LjE0MyA2Ni4zMDdsLTQuNTU0LS45NDcuMjA0LS45NzkgNC41NTQuOTQ4LS4yMDQuOTc5em0xNTUuMDU5IDMxLjA3Ni00LjU1NC0uOTQ3LS4yMDQuOTc5IDQuNTU0Ljk0Ny4yMDQtLjk3OXpNNC45NyA3NC4zNjEuMzQyIDczLjlsLjA5OS0uOTk1IDQuNjI4LjQ2LS4wOTkuOTk1ek0xNjIuNDUgODguODQzbC00LjYyOC0uNDYtLjA5OS45OTUgNC42MjguNDYuMDk5LS45OTV6TTE0LjY0MiA0My41MTRsLTQuMDI4LTIuMzI1LjUtLjg2NiA0LjAyOCAyLjMyNS0uNS44NjZ6bTEzNy41MzUgNzguMDQtNC4wMjgtMi4zMjUtLjUwMS44NjYgNC4wMjggMi4zMjUuNTAxLS44NjZ6TTUuMTQ1IDkwLjA4bC00LjYyNS40OTMtLjEwNi0uOTk1IDQuNjI1LS40OTMuMTA2Ljk5NXpNMTYyLjI3IDcyLjE3bC00LjYyNS40OTMuMTA2Ljk5NSA0LjYyNS0uNDkzLS4xMDYtLjk5NHpNNi40OTYgOTguMWwtNC41NDcuOTgtLjIxMS0uOTc3IDQuNTQ3LS45OC4yMS45Nzh6bTE1NC4zNDYtMzQuNDM3LTQuNTQ3Ljk4LjIxMS45NzcgNC41NDctLjk4LS4yMTEtLjk3N3pNOC42OTEgMTA1Ljk0MWwtNC40MTggMS40NTYtLjMxMy0uOTUgNC40MTctMS40NTUuMzE0Ljk0OXptMTQ5LjgyNy01MC41OTUtNC40MTggMS40NTYuMzEzLjk1IDQuNDE4LTEuNDU2LS4zMTMtLjk1ek0xMS43MDMgMTEzLjUwMWwtNC4yMzkgMS45MTYtLjQxMi0uOTEyIDQuMjM5LTEuOTE1LjQxMi45MTF6bTE0My42MjMtNjYuMTc0LTQuMjM4IDEuOTE1LjQxMi45MTEgNC4yMzgtMS45MTUtLjQxMi0uOTExek00LjY1MSA4MS45NTNIMHYtMWg0LjY1MXYxem0xNTguMTQtMS4xNjNoLTQuNjUxdjFoNC42NTF2LTF6TTE5LjcxNiAxMjcuMDI3bC0zLjc1OSAyLjczOS0uNTktLjgwOCAzLjc2LTIuNzM5LjU4OS44MDh6bTEyNy4xMTgtOTQuMDUtMy43NTkgMi43MzkuNTg5LjgwOCAzLjc1OS0yLjczOC0uNTg5LS44MDl6TTI0Ljg5NyAxMzMuMjk4bC0zLjQ0NyAzLjEyMS0uNjcyLS43NDEgMy40NDgtMy4xMjEuNjcxLjc0MXpNMTQxLjM0MSAyNi4zMjRsLTMuNDQ3IDMuMTIuNjcxLjc0MiAzLjQ0OC0zLjEyMS0uNjcyLS43NDF6TTMwLjcxOSAxMzguOTlsLTMuMDk3IDMuNDY5LS43NDYtLjY2NiAzLjA5Ny0zLjQ2OS43NDcuNjY2ek0xMzUuMTcgMjAuMjgzbC0zLjA5OCAzLjQ2OS43NDYuNjY2IDMuMDk4LTMuNDY5LS43NDYtLjY2NnptLTk4LjA2IDEyMy43NS0yLjcxMiAzLjc3Ny0uODEzLS41ODMgMi43MTMtMy43NzcuODEyLjU4M3ptOTEuMjg1LTEyOS4xLTIuNzEyIDMuNzc3LjgxMi41ODMgMi43MTMtMy43NzctLjgxMy0uNTgzek0xNS4yMjQgMTIwLjIzNmwtNC4wMjggMi4zMjUtLjUtLjg2NiA0LjAyOC0yLjMyNS41Ljg2NnptMTM2LjM3MS04MC4wNTQtNC4wMjggMi4zMjUuNS44NjYgNC4wMjgtMi4zMjUtLjUtLjg2NnpNNTAuODE0IDE1MS43NDFsLTEuODg2IDQuMjUxLS45MTQtLjQwNSAxLjg4Ni00LjI1MS45MTQuNDA1em02My4wNDktMTQ0Ljk5LTEuODg2IDQuMjUxLjkxNC40MDUgMS44ODYtNC4yNS0uOTE0LS40MDZ6TTU4LjQzOCAxNTQuNTgybC0xLjQyNSA0LjQyNy0uOTUyLS4zMDcgMS40MjUtNC40MjYuOTUyLjMwNnptNDcuMzQtMTUwLjg0Ny0xLjQyNSA0LjQyNi45NTIuMzA2IDEuNDI1LTQuNDI2LS45NTItLjMwNnpNNjYuMzI3IDE1Ni42MDJsLS45NDggNC41NTMtLjk3OS0uMjA0Ljk0OC00LjU1Mi45NzkuMjAzek05Ny40MTEgMS41ODlsLS45NDcgNC41NTIuOTc5LjIwNC45NDgtNC41NTMtLjk4LS4yMDN6TTc0LjM4MiAxNTcuNzc1bC0uNDYgNC42MjctLjk5NS0uMDk5LjQ2LTQuNjI3Ljk5NS4wOTl6TTg4Ljg2OC4zNDJsLS40NiA0LjYyNy45OTUuMDk4LjQ2LTQuNjI3LS45OTUtLjA5OHpNNDMuNTI3IDE0OC4xMDVsLTIuMzI2IDQuMDI3LS44NjYtLjUgMi4zMjYtNC4wMjcuODY2LjV6TTEyMS41OSAxMC42MTFsLTIuMzI2IDQuMDI3Ljg2Ni41IDIuMzI2LTQuMDI3LS44NjYtLjV6IiBmaWxsPSJjdXJyZW50Q29sb3IiLz48cGF0aCBkPSJNMTEyLjg4NyAyMy4wOTNjMC0uNTQ3LjAxMy0uOTU0LjA0LTEuMjJsLS4yNi4yNGMtLjEuMDg2LS40NC4zNjYtMS4wMi44NGwtLjU0LS42OCAxLjk2LTEuNTRoLjl2Ni42N2gtMS4wOHYtNC4zMXpNMTM1LjIwNSA0OC45MjdsMS43Mi0xLjczYy41MTQtLjUyLjg1NC0uODkgMS4wMi0xLjExLjE2Ny0uMjIuMjg3LS40MjQuMzYtLjYxYTEuNjkgMS42OSAwIDAgMCAuMTEtLjYxYzAtLjMwNy0uMDktLjU0Ny0uMjctLjcyLS4xOC0uMTczLS40My0uMjYtLjc1LS4yNi0uMjY2IDAtLjUyLjA1LS43Ni4xNS0uMjMzLjA5My0uNTA2LjI2My0uODIuNTFsLS41Ny0uNzJjLjM2LS4zLjcxNC0uNTE3IDEuMDYtLjY1LjM1NC0uMTMzLjczNC0uMiAxLjE0LS4yLjYyNyAwIDEuMTI3LjE2IDEuNS40OC4zNzQuMzIuNTYuNzU3LjU2IDEuMzEgMCAuMzEzLS4wNTMuNi0uMTYuODYtLjEyLjI4Ni0uMjg2LjU2Ni0uNS44NC0uMjQuMy0uNjEzLjY5LTEuMTIgMS4xN2wtMS4xNiAxLjExdi4wNWgzLjE3di45NWgtNC41M3YtLjgyek0xNDcuMTUxIDg0Ljg2NGMtLjc0IDAtMS4zNjctLjEyLTEuODgtLjM2di0uOTVhNC42IDQuNiAwIDAgMCAuOS4zMWMuMzIuMDczLjYyNi4xMS45Mi4xMS41MjYgMCAuOTEzLS4wOTMgMS4xNi0uMjguMjUzLS4xOTMuMzgtLjQ5LjM4LS44OSAwLS4zNi0uMTQtLjYyMy0uNDItLjc5LS4yOC0uMTY2LS43MjctLjI1LTEuMzQtLjI1aC0uNTd2LS44OGguNThjMS4wNzMgMCAxLjYxLS4zNjcgMS42MS0xLjEgMC0uMjkzLS4wOTQtLjUxNy0uMjgtLjY3LS4xODctLjE1My0uNDY0LS4yMy0uODMtLjIzLS4yNjcgMC0uNTE3LjAzNy0uNzUuMTEtLjIzNC4wNzMtLjUwNC4yMS0uODEuNDFsLS41My0uNzVhMy41NTggMy41NTggMCAwIDEgMi4xNC0uNjhjLjY3MyAwIDEuMi4xNDcgMS41OC40NC4zOC4yODcuNTcuNjkuNTcgMS4yMSAwIC40MTMtLjEyNy43NjQtLjM4IDEuMDUtLjI0Ny4yOC0uNTk0LjQ3LTEuMDQuNTd2LjA0Yy41MzMuMDY3LjkzNi4yMzMgMS4yMS41LjI3My4yNjcuNDEuNjIzLjQxIDEuMDcgMCAuNjQtLjIzIDEuMTM3LS42OSAxLjQ5LS40NTQuMzQ3LTEuMS41Mi0xLjk0LjUyek0xMzguMDI1IDExNS4yODNoLTMuMDR2LS44M2wzLjA0LTQuMzloMS4wNHY0LjMzaC45di44OWgtLjl2MS40NWgtMS4wNHYtMS40NXptMC0uODl2LTEuNjdjMC0uNTUzLjAxNy0xLjA0LjA1LTEuNDZoLS4wNGMtLjA5My4yMDctLjIyNi40NS0uNC43M2wtMS42NSAyLjRoMi4wNHpNMTEzLjU5NCAxMzkuMTUyYy0uNzQ3IDAtMS4zMzMtLjEyNC0xLjc2LS4zN3YtLjk2Yy4yNDcuMTMzLjUyNy4yMzYuODQuMzEuMzIuMDczLjYyLjExLjkuMTEuNDggMCAuODUtLjEwNyAxLjExLS4zMi4yNi0uMjIuMzktLjUzNC4zOS0uOTQgMC0uODA3LS41MTctMS4yMS0xLjU1LTEuMjEtLjE2NyAwLS4zNzcuMDItLjYzLjA2bC0uNDQuMDctLjQ5LS4yNy4yNy0zLjI3aDMuNDh2Ljk2aC0yLjU0bC0uMTUgMS42NmMuMzQ3LS4wNjcuNjY3LS4xLjk2LS4xLjY2NyAwIDEuMi4xOCAxLjYuNTQuNC4zNTMuNi44MzYuNiAxLjQ1IDAgLjcxMy0uMjI3IDEuMjczLS42OCAxLjY4LS40NTMuNC0xLjA5LjYtMS45MS42ek04MS43NSAxNDguMDg5Yy0uNzQgMC0xLjMyLS4yNTYtMS43NC0uNzctLjQyLS41MTMtLjYzLTEuMjQtLjYzLTIuMTggMC0yLjYyNiAxLjA3LTMuOTQgMy4yMS0zLjk0LjMyIDAgLjYwNC4wMjcuODUuMDh2Ljg5YTIuODUgMi44NSAwIDAgMC0uODEtLjFjLS43MiAwLTEuMjYuMTk3LTEuNjIuNTktLjM2LjM5NC0uNTU2IDEuMDEtLjU5IDEuODVoLjA2Yy4zMi0uNTI2LjgyNy0uNzkgMS41Mi0uNzkuNjA3IDAgMS4wOC4xODcgMS40Mi41Ni4zNDcuMzc0LjUyLjg4NC41MiAxLjUzIDAgLjctLjE5NiAxLjI1Ny0uNTkgMS42Ny0uMzkzLjQwNy0uOTI2LjYxLTEuNi42MXptLS4wMi0uODhjLjM2IDAgLjY0LS4xMi44NC0uMzYuMjA3LS4yNDYuMzEtLjU5My4zMS0xLjA0IDAtLjM4Ni0uMDk2LS42ODYtLjI5LS45LS4xOTMtLjIyLS40Ny0uMzMtLjgzLS4zMy0uMjMzIDAtLjQ1LjA1NC0uNjUuMTYtLjE5My4xLS4zNS4yMzQtLjQ3LjRhLjkxMi45MTIgMCAwIDAtLjE3LjUyYzAgLjQzNC4xMTcuODA0LjM1IDEuMTEuMjM0LjI5NC41MzcuNDQuOTEuNDR6TTQ5LjI2IDEzMy4zMDJINDUuOHYtLjk0aDQuNjF2Ljc2bC0yLjYxIDUuOTFoLTEuMTZsMi42Mi01Ljczek0yNC43MDMgMTE2Ljg1M2MtLjcyNiAwLTEuMjkzLS4xNTMtMS43LS40Ni0uNC0uMzEzLS42LS43Ni0uNi0xLjM0IDAtLjM4LjEwNy0uNzE2LjMyLTEuMDEuMjE0LS4yOTMuNTU0LS41NTYgMS4wMi0uNzktLjQtLjI0LS42OS0uNDkzLS44Ny0uNzZhMS42OTcgMS42OTcgMCAwIDEtLjI2LS45M2MwLS40OTMuMTg3LS44ODMuNTYtMS4xNy4zOC0uMjg2Ljg4NC0uNDMgMS41MS0uNDMuNjM0IDAgMS4xMzQuMTQ3IDEuNS40NC4zNzQuMjg3LjU2LjY3Ny41NiAxLjE3IDAgLjY5NC0uNDEzIDEuMjQ0LTEuMjQgMS42NS41Mi4yNTQuODkuNTI0IDEuMTEuODEuMjI3LjI4Ny4zNC42MTQuMzQuOTggMCAuNTYtLjIwMyAxLjAwNy0uNjEgMS4zNC0uNC4zMzQtLjk0Ni41LTEuNjQuNXptMC00LjA3Yy4zNi0uMTYuNjE3LS4zMy43Ny0uNTEuMTU0LS4xOC4yMy0uMzkuMjMtLjYzYS43NjIuNzYyIDAgMCAwLS4yOC0uNjJjLS4xODYtLjE1My0uNDM2LS4yMy0uNzUtLjIzLS4zMDYgMC0uNTUzLjA3Ny0uNzQuMjNhLjc2MS43NjEgMCAwIDAtLjI4LjYyYzAgLjE1NC4wMzQuMjk0LjEuNDIuMDY3LjEyNy4xNjcuMjQ0LjMuMzUuMTQuMTA3LjM1Ny4yMy42NS4zN3ptLS4wMiAzLjI1Yy4zOTQgMCAuNjk3LS4wOS45MS0uMjcuMjItLjE4Ni4zMy0uNDQuMzMtLjc2IDAtLjQ3My0uNDAzLS44ODYtMS4yMS0xLjI0bC0uMTQtLjA2Yy0uNC4xNzQtLjY5LjM2Ny0uODcuNTgtLjE4LjIwNy0uMjcuNDUtLjI3LjczIDAgLjMyLjExLjU3LjMzLjc1LjIyNy4xOC41MzQuMjcuOTIuMjd6TTE0Ljg2MiA4NC44NTRjLS40MTQgMC0uNzA0LS4wMjMtLjg3LS4wN3YtLjkxYy4yOC4wNzQuNTUuMTEuODEuMTEuNzMzIDAgMS4yNzYtLjE5MyAxLjYzLS41OC4zNi0uMzkzLjU1Ni0xLjAxLjU5LTEuODVoLS4wNWMtLjE4LjI3My0uMzk3LjQ3NC0uNjUuNi0uMjU0LjEyLS41NTQuMTgtLjkuMTgtLjU5NCAwLTEuMDYtLjE4My0xLjQtLjU1LS4zNC0uMzY3LS41MS0uODczLS41MS0xLjUyIDAtLjcwNi4xOTYtMS4yNjYuNTktMS42OC4zOTMtLjQxMy45My0uNjIgMS42MS0uNjIuNDggMCAuODk2LjExNyAxLjI1LjM1LjM1My4yMzQuNjI2LjU3NC44MiAxLjAyLjE5My40NC4yOS45NjcuMjkgMS41OCAwIDEuMzI3LS4yNjcgMi4zMTctLjggMi45Ny0uNTM0LjY0Ny0xLjMzNy45Ny0yLjQxLjk3em0uODMtMy4zOGMuMzYgMCAuNjY2LS4xMDYuOTItLjMyYS45NTYuOTU2IDAgMCAwIC4zNy0uNzZjMC0uNDMzLS4xMTctLjc5Ny0uMzUtMS4wOWExLjA5OSAxLjA5OSAwIDAgMC0uOS0uNDRjLS4zOCAwLS42Ny4xMi0uODcuMzYtLjE5NC4yNC0uMjkuNTg0LS4yOSAxLjAzIDAgLjM4Ny4wOTMuNjg3LjI4LjkuMTg2LjIxNC40NjYuMzIuODQuMzJ6TTIzLjQ0IDQ3LjY3MWMwLS41NDcuMDE0LS45NTMuMDQtMS4yMmwtLjI2LjI0Yy0uMS4wODctLjQ0LjM2Ny0xLjAyLjg0bC0uNTQtLjY4IDEuOTYtMS41NGguOXY2LjY3aC0xLjA4di00LjMxem01LjAwOCA0LjQzYy0uNzUzIDAtMS4zMjMtLjI5LTEuNzEtLjg3LS4zOC0uNTg3LS41Ny0xLjQ0My0uNTctMi41NyAwLTEuMTguMTg3LTIuMDUuNTYtMi42MS4zNzQtLjU2Ljk0Ny0uODQgMS43Mi0uODQuNzQgMCAxLjMwNC4yOTQgMS42OS44OC4zODcuNTguNTggMS40MzcuNTggMi41NyAwIDEuMTYtLjE4NiAyLjAyMy0uNTYgMi41OS0uMzczLjU2Ny0uOTQzLjg1LTEuNzEuODV6bTAtLjljLjQwNyAwIC43MDQtLjIuODktLjYuMTk0LS40LjI5LTEuMDQ3LjI5LTEuOTRzLS4wOTYtMS41NC0uMjktMS45NGMtLjE4Ni0uNDA2LS40ODMtLjYxLS44OS0uNjEtLjQyIDAtLjcyMy4yLS45MS42LS4xODYuMzk0LS4yOCAxLjA0NC0uMjggMS45NSAwIC45MDcuMDk0IDEuNTU3LjI4IDEuOTUuMTg3LjM5NC40OS41OS45MS41OXpNNDguMDE4IDIzLjA5M2MwLS41NDcuMDE0LS45NTQuMDQtMS4yMmwtLjI2LjI0Yy0uMS4wODYtLjQ0LjM2Ni0xLjAyLjg0bC0uNTQtLjY4IDEuOTYtMS41NGguOXY2LjY3aC0xLjA4di00LjMxem00Ljk5OCAwYzAtLjU0Ny4wMTQtLjk1NC4wNC0xLjIybC0uMjYuMjRjLS4xLjA4Ni0uNDQuMzY2LTEuMDIuODRsLS41NC0uNjggMS45Ni0xLjU0aC45djYuNjdoLTEuMDh2LTQuMzF6TTc4LjE4MyAxNS4zMThjMC0uNTQ3LjAxNC0uOTUzLjA0LTEuMjJsLS4yNi4yNGMtLjEuMDg3LS40NC4zNjctMS4wMi44NGwtLjU0LS42OCAxLjk2LTEuNTRoLjl2Ni42N2gtMS4wOHYtNC4zMXptMi43MzggMy40OSAxLjcyLTEuNzNjLjUxNC0uNTIuODU0LS44OSAxLjAyLTEuMTEuMTY3LS4yMi4yODctLjQyMy4zNi0uNjEuMDc0LS4xOTMuMTEtLjM5Ny4xMS0uNjEgMC0uMzA3LS4wOS0uNTQ3LS4yNy0uNzItLjE4LS4xNzMtLjQzLS4yNi0uNzUtLjI2LS4yNjYgMC0uNTIuMDUtLjc2LjE1LS4yMzMuMDkzLS41MDYuMjYzLS44Mi41MWwtLjU3LS43MmMuMzYtLjMuNzE0LS41MTcgMS4wNi0uNjUuMzU0LS4xMzMuNzM0LS4yIDEuMTQtLjIuNjI3IDAgMS4xMjcuMTYgMS41LjQ4LjM3NC4zMi41Ni43NTcuNTYgMS4zMSAwIC4zMTMtLjA1My42LS4xNi44Ni0uMTIuMjg3LS4yODYuNTY3LS41Ljg0LS4yNC4zLS42MTMuNjktMS4xMiAxLjE3bC0xLjE2IDEuMTF2LjA1aDMuMTd2Ljk1aC00LjUzdi0uODJ6IiBmaWxsPSJjdXJyZW50Q29sb3IiLz48L3N2Zz4=) center center no-repeat}:host([analogue]) [part=digital]{display:flex;position:absolute;top:20%;left:0;right:0;justify-content:center;font-size:.34em}:host([analogue]) [part=digital] [part~=am-pm]{font-size:100%;line-height:1}:host([analogue]) [part=hands]::after{content:\'\';position:absolute;border-radius:50%;width:9%;height:9%;top:45.5%;left:45.5%;border:2px solid #fff;box-sizing:border-box;z-index:1}:host([analogue]) [part~=hand]::after{content:\'\';position:absolute}:host([analogue]) [part~=second]::after{width:1%;height:43%;margin-top:3%;margin-left:49.5%;background-color:#334bff}:host([analogue]) [part~=minute]::after{width:3%;height:43%;margin-top:3%;margin-left:48.5%;background-color:#fff}:host([analogue]) [part~=hour]::after{width:3%;height:28%;margin-top:18%;margin-left:48.5%;background-color:#fff}:host([analogue][size=small]){font-size:10px;min-width:50px;background:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIHZpZXdCb3g9IjAgMCA2NCA2NCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiBjb2xvcj0iI0NDQ0NDQyI+CiAgICA8Y2lyY2xlIGN4PSIzMiIgY3k9IjMyIiByPSIzMS41IiBzdHJva2U9ImN1cnJlbnRDb2xvciIvPgogICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0zMS4yNjE5IDAuOTk5NTEyVjMuOTUxODlIMzIuMjYxOVYwLjk5OTUxMkgzMS4yNjE5Wk00NS4yODU4IDcuMjQ2ODdMNDYuNzYyIDQuNjkwMDNMNDcuNjI4IDUuMTkwMDNMNDYuMTUxOCA3Ljc0Njg3TDQ1LjI4NTggNy4yNDY4N1pNMTUuODM1NyA1LjU3NTUzTDE3LjMxMTkgOC4xMzIzN0wxOC4xNzc5IDcuNjMyMzdMMTYuNzAxNyA1LjA3NTUzTDE1LjgzNTcgNS41NzU1M1pNNC44MzgxIDE3LjA4OThMNy4zOTQ5NCAxOC41NjZMNy44OTQ5NCAxNy43TDUuMzM4MSAxNi4yMjM4TDQuODM4MSAxNy4wODk4Wk0zLjk1MjM4IDMyLjczNzRIMVYzMS43Mzc0SDMuOTUyMzhWMzIuNzM3NFpNNy4zNzEyNiA0NS41MDlMNC44MTQ0MiA0Ni45ODUyTDUuMzE0NDIgNDcuODUxMkw3Ljg3MTI2IDQ2LjM3NUw3LjM3MTI2IDQ1LjUwOVpNMTUuOTA5NSA1OC40NzA1TDE3LjM4NTcgNTUuOTEzNkwxOC4yNTE4IDU2LjQxMzZMMTYuNzc1NiA1OC45NzA1TDE1LjkwOTUgNTguNDcwNVpNMzEuMjYxOSA2MC4wNDY5VjYyLjk5OTNIMzIuMjYxOVY2MC4wNDY5SDMxLjI2MTlaTTQ2LjkxMDMgNTkuMjA5M0w0NS40MzQxIDU2LjY1MjVMNDYuMzAwMSA1Ni4xNTI1TDQ3Ljc3NjMgNTguNzA5M0w0Ni45MTAzIDU5LjIwOTNaTTU1LjkxNDMgNDYuNjE0TDU4LjQ3MTEgNDguMDkwMkw1OC45NzExIDQ3LjIyNDJMNTYuNDE0MyA0NS43NDhMNTUuOTE0MyA0Ni42MTRaTTYzIDMyLjczNzRINjAuMDQ3NlYzMS43Mzc0SDYzVjMyLjczNzRaTTU4LjQyMzcgMTUuODM1NEw1NS44NjY5IDE3LjMxMTZMNTYuMzY2OSAxOC4xNzc2TDU4LjkyMzcgMTYuNzAxNEw1OC40MjM3IDE1LjgzNTRaIiBmaWxsPSJjdXJyZW50Q29sb3IiLz4KPC9zdmc+Cg==) center center/cover no-repeat}:host([analogue][size=small]) [part=hands]::after{background-color:#fff}:host([analogue][size=small]) [part~=second]::after{width:1.5%;height:32%;margin-top:16%}:host([analogue][size=small]) [part~=minute]::after{height:37%;margin-top:12%}:host([analogue][size=small]) [part~=hour]::after{height:26%;margin-top:23%}:host([analogue][size=small]) [part~=am-pm]{padding-left:0;display:flex;position:absolute;left:0;right:0;bottom:15%;font-size:100%;justify-content:center}:host [part~=seconds]{color:grey}');
|