@dhutaryan/ngx-mat-timepicker 18.0.4 → 19.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/_timepicker-theme.scss +0 -6
- package/fesm2022/dhutaryan-ngx-mat-timepicker.mjs +119 -123
- package/fesm2022/dhutaryan-ngx-mat-timepicker.mjs.map +1 -1
- package/lib/hours-clock-dial.d.ts +1 -1
- package/lib/time-face-base.d.ts +1 -1
- package/lib/time-input-base.d.ts +1 -1
- package/lib/timepicker-actions.d.ts +5 -9
- package/lib/timepicker-base.d.ts +1 -1
- package/lib/timepicker-content.d.ts +9 -9
- package/lib/timepicker-input-base.d.ts +1 -1
- package/package.json +5 -6
- package/themes/_utils.scss +39 -0
- package/themes/m2/_tokens.scss +2 -0
- package/themes/m3/_base.scss +0 -8
- package/themes/m3/_color.scss +0 -11
- package/themes/m3/_tokens.scss +1 -1
- package/esm2022/dhutaryan-ngx-mat-timepicker.mjs +0 -5
- package/esm2022/lib/adapter/index.mjs +0 -34
- package/esm2022/lib/adapter/native-date-time-adapter.mjs +0 -137
- package/esm2022/lib/adapter/time-adapter.mjs +0 -90
- package/esm2022/lib/clock-dial-adnimation.mjs +0 -11
- package/esm2022/lib/clock-dials.mjs +0 -95
- package/esm2022/lib/clock-size.mjs +0 -25
- package/esm2022/lib/hours-clock-dial.mjs +0 -192
- package/esm2022/lib/minutes-clock-dial.mjs +0 -165
- package/esm2022/lib/orientation.mjs +0 -2
- package/esm2022/lib/time-face-base.mjs +0 -318
- package/esm2022/lib/time-input-base.mjs +0 -85
- package/esm2022/lib/time-inputs.mjs +0 -179
- package/esm2022/lib/time-period.mjs +0 -67
- package/esm2022/lib/time-selection-model.mjs +0 -76
- package/esm2022/lib/timepicker-actions-default.mjs +0 -3
- package/esm2022/lib/timepicker-actions.mjs +0 -135
- package/esm2022/lib/timepicker-animations.mjs +0 -22
- package/esm2022/lib/timepicker-base.mjs +0 -458
- package/esm2022/lib/timepicker-content-layout.mjs +0 -23
- package/esm2022/lib/timepicker-content.mjs +0 -127
- package/esm2022/lib/timepicker-input-base.mjs +0 -254
- package/esm2022/lib/timepicker-input.mjs +0 -136
- package/esm2022/lib/timepicker-intl.mjs +0 -39
- package/esm2022/lib/timepicker-scroll-strategy.mjs +0 -15
- package/esm2022/lib/timepicker-toggle.mjs +0 -96
- package/esm2022/lib/timepicker.mjs +0 -33
- package/esm2022/lib/timepicker.module.mjs +0 -138
- package/esm2022/public-api.mjs +0 -23
- package/themes/_base.scss +0 -119
|
@@ -1,458 +0,0 @@
|
|
|
1
|
-
import { Input, Directive, Inject, Output, EventEmitter, InjectionToken, Optional, booleanAttribute, inject, } from '@angular/core';
|
|
2
|
-
import { DOCUMENT } from '@angular/common';
|
|
3
|
-
import { _getFocusedElementPierceShadowDom } from '@angular/cdk/platform';
|
|
4
|
-
import { coerceBooleanProperty, coerceNumberProperty, } from '@angular/cdk/coercion';
|
|
5
|
-
import { FlexibleConnectedPositionStrategy, OverlayConfig, } from '@angular/cdk/overlay';
|
|
6
|
-
import { ComponentPortal, } from '@angular/cdk/portal';
|
|
7
|
-
import { DOWN_ARROW, ESCAPE, hasModifierKey, PAGE_DOWN, PAGE_UP, UP_ARROW, } from '@angular/cdk/keycodes';
|
|
8
|
-
import { filter, first, merge, Subject, take } from 'rxjs';
|
|
9
|
-
import { MatTimepickerContent } from './timepicker-content';
|
|
10
|
-
import { MAT_TIMEPICKER_SCROLL_STRATEGY } from './timepicker-scroll-strategy';
|
|
11
|
-
import { MAT_DEFAULT_ACITONS } from './timepicker-actions-default';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "@angular/cdk/overlay";
|
|
14
|
-
import * as i2 from "./time-selection-model";
|
|
15
|
-
/**
|
|
16
|
-
* Injection token that can be used to configure the
|
|
17
|
-
* default options for all timepickers within an app.
|
|
18
|
-
*/
|
|
19
|
-
export const MAT_TIMEPICKER_DEFAULT_OPTIONS = new InjectionToken('MAT_TIMEPICKER_DEFAULT_OPTIONS');
|
|
20
|
-
/** Default open as used by the timepicker. */
|
|
21
|
-
const DEFAULT_OPEN_AS = 'popup';
|
|
22
|
-
/** Default mode used by the timepicker. */
|
|
23
|
-
const DEFAULT_MODE = 'dial';
|
|
24
|
-
/** Default format used by the timepicker. */
|
|
25
|
-
const DEFAULT_FORMAT = '12h';
|
|
26
|
-
/** Used to generate a unique ID for each timepicker instance. */
|
|
27
|
-
let timepickerUid = 0;
|
|
28
|
-
export class MatTimepickerBase {
|
|
29
|
-
/** Whether the timepicker pop-up should be disabled. */
|
|
30
|
-
get disabled() {
|
|
31
|
-
return this._disabled === undefined && this.timepickerInput
|
|
32
|
-
? this.timepickerInput.disabled
|
|
33
|
-
: !!this._disabled;
|
|
34
|
-
}
|
|
35
|
-
set disabled(value) {
|
|
36
|
-
const newValue = coerceBooleanProperty(value);
|
|
37
|
-
if (newValue !== this._disabled) {
|
|
38
|
-
this._disabled = newValue;
|
|
39
|
-
this.stateChanges.next(undefined);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
/** Whether the timepicker is open. */
|
|
43
|
-
get opened() {
|
|
44
|
-
return this._opened;
|
|
45
|
-
}
|
|
46
|
-
set opened(value) {
|
|
47
|
-
coerceBooleanProperty(value) ? this.open() : this.close();
|
|
48
|
-
}
|
|
49
|
-
/** Whether the timepicker mode which determines what the timepicker will be opened as. */
|
|
50
|
-
get openAs() {
|
|
51
|
-
return this._openAs || this._defaults?.openAs || DEFAULT_OPEN_AS;
|
|
52
|
-
}
|
|
53
|
-
set openAs(value) {
|
|
54
|
-
this._openAs = value;
|
|
55
|
-
}
|
|
56
|
-
/** Color palette to use on the timepicker's content. */
|
|
57
|
-
get color() {
|
|
58
|
-
return (this._color ||
|
|
59
|
-
this._defaults?.color ||
|
|
60
|
-
(this.timepickerInput
|
|
61
|
-
? this.timepickerInput.getThemePalette()
|
|
62
|
-
: undefined));
|
|
63
|
-
}
|
|
64
|
-
set color(value) {
|
|
65
|
-
this._color = value;
|
|
66
|
-
}
|
|
67
|
-
/** Timepicker display mode. */
|
|
68
|
-
get mode() {
|
|
69
|
-
return this._mode || this._defaults?.mode || DEFAULT_MODE;
|
|
70
|
-
}
|
|
71
|
-
set mode(value) {
|
|
72
|
-
this._mode = value;
|
|
73
|
-
}
|
|
74
|
-
/** Timepicker period format. */
|
|
75
|
-
get format() {
|
|
76
|
-
return this._format || this._defaults?.format || DEFAULT_FORMAT;
|
|
77
|
-
}
|
|
78
|
-
set format(value) {
|
|
79
|
-
this._format = value;
|
|
80
|
-
}
|
|
81
|
-
/** Show or hide toggle button between dial and input. */
|
|
82
|
-
get showToggleModeButton() {
|
|
83
|
-
return this._showToggleModeButton;
|
|
84
|
-
}
|
|
85
|
-
set showToggleModeButton(value) {
|
|
86
|
-
this._showToggleModeButton = value;
|
|
87
|
-
}
|
|
88
|
-
/** Step for minutes. */
|
|
89
|
-
get minuteInterval() {
|
|
90
|
-
return this._minuteInterval || this._defaults?.minuteInterval || 1;
|
|
91
|
-
}
|
|
92
|
-
set minuteInterval(value) {
|
|
93
|
-
this._minuteInterval = coerceNumberProperty(value);
|
|
94
|
-
}
|
|
95
|
-
/** Orientation for dial mode. */
|
|
96
|
-
get orientation() {
|
|
97
|
-
return this._orientation || this._defaults?.orientation || 'vertical';
|
|
98
|
-
}
|
|
99
|
-
set orientation(value) {
|
|
100
|
-
this._orientation = value;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Whether the timepicker UI is in touch mode. In touch mode elements are larger for bigger touch targets.
|
|
104
|
-
*/
|
|
105
|
-
get touchUi() {
|
|
106
|
-
return this._touchUi;
|
|
107
|
-
}
|
|
108
|
-
set touchUi(value) {
|
|
109
|
-
this._touchUi = coerceBooleanProperty(value);
|
|
110
|
-
if (value) {
|
|
111
|
-
this.openAs = 'dialog';
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
/** The minimum selectable time. */
|
|
115
|
-
_getMinTime() {
|
|
116
|
-
return this.timepickerInput && this.timepickerInput.min;
|
|
117
|
-
}
|
|
118
|
-
/** The maximum selectable time. */
|
|
119
|
-
_getMaxTime() {
|
|
120
|
-
return this.timepickerInput && this.timepickerInput.max;
|
|
121
|
-
}
|
|
122
|
-
constructor(_viewContainerRef, _overlay, _ngZone, scrollStrategy, _defaultActionsComponent, _model, _defaults) {
|
|
123
|
-
this._viewContainerRef = _viewContainerRef;
|
|
124
|
-
this._overlay = _overlay;
|
|
125
|
-
this._ngZone = _ngZone;
|
|
126
|
-
this._defaultActionsComponent = _defaultActionsComponent;
|
|
127
|
-
this._model = _model;
|
|
128
|
-
this._defaults = _defaults;
|
|
129
|
-
this._opened = false;
|
|
130
|
-
this._showToggleModeButton = true;
|
|
131
|
-
this._touchUi = false;
|
|
132
|
-
/** Preferred position of the timepicker in the X axis. */
|
|
133
|
-
this.xPosition = 'start';
|
|
134
|
-
/** Preferred position of the timepicker in the Y axis. */
|
|
135
|
-
this.yPosition = 'below';
|
|
136
|
-
/**
|
|
137
|
-
* Whether to restore focus to the previously-focused element when the timepicker is closed.
|
|
138
|
-
* Note that automatic focus restoration is an accessibility feature and it is recommended that
|
|
139
|
-
* you provide your own equivalent, if you decide to turn it off.
|
|
140
|
-
*/
|
|
141
|
-
this.restoreFocus = true;
|
|
142
|
-
/** Emits when the timepicker has been opened. */
|
|
143
|
-
this.openedStream = new EventEmitter();
|
|
144
|
-
/** Emits when the timepicker has been closed. */
|
|
145
|
-
this.closedStream = new EventEmitter();
|
|
146
|
-
/** The id for the timepicker. */
|
|
147
|
-
this.id = `mat-timepicker-${timepickerUid++}`;
|
|
148
|
-
/** Portal with projected action buttons. */
|
|
149
|
-
this._actionsPortal = null;
|
|
150
|
-
/** Emits when the timepicker's state changes. */
|
|
151
|
-
this.stateChanges = new Subject();
|
|
152
|
-
/** Unique class that will be added to the backdrop so that the test harnesses can look it up. */
|
|
153
|
-
this._backdropHarnessClass = `${this.id}-backdrop`;
|
|
154
|
-
/** The element that was focused before the timepicker was opened. */
|
|
155
|
-
this._focusedElementBeforeOpen = null;
|
|
156
|
-
this._document = inject(DOCUMENT);
|
|
157
|
-
this._scrollStrategy = scrollStrategy;
|
|
158
|
-
if (_defaults) {
|
|
159
|
-
this.showToggleModeButton =
|
|
160
|
-
_defaults.showToggleModeButton !== undefined
|
|
161
|
-
? _defaults.showToggleModeButton
|
|
162
|
-
: true;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
ngOnChanges(changes) {
|
|
166
|
-
const positionChange = changes['xPosition'] || changes['yPosition'];
|
|
167
|
-
if (positionChange && !positionChange.firstChange && this._overlayRef) {
|
|
168
|
-
const positionStrategy = this._overlayRef.getConfig().positionStrategy;
|
|
169
|
-
if (positionStrategy instanceof FlexibleConnectedPositionStrategy) {
|
|
170
|
-
this._setConnectedPositions(positionStrategy);
|
|
171
|
-
if (this.opened) {
|
|
172
|
-
this._overlayRef.updatePosition();
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
this.stateChanges.next(undefined);
|
|
177
|
-
}
|
|
178
|
-
ngOnDestroy() {
|
|
179
|
-
this._destroyOverlay();
|
|
180
|
-
this.close();
|
|
181
|
-
this.stateChanges.complete();
|
|
182
|
-
}
|
|
183
|
-
/** Opens the timepicker. */
|
|
184
|
-
open() {
|
|
185
|
-
if (this._opened ||
|
|
186
|
-
this.disabled ||
|
|
187
|
-
this._componentRef?.instance._isAnimating) {
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
if (!this.timepickerInput) {
|
|
191
|
-
throw Error('Attempted to open an MatTimepicker with no associated input.');
|
|
192
|
-
}
|
|
193
|
-
this._focusedElementBeforeOpen = _getFocusedElementPierceShadowDom();
|
|
194
|
-
this._openOverlay();
|
|
195
|
-
this._opened = true;
|
|
196
|
-
this.openedStream.emit();
|
|
197
|
-
}
|
|
198
|
-
/** Closes the timepicker. */
|
|
199
|
-
close() {
|
|
200
|
-
if (!this._opened || this._componentRef?.instance._isAnimating) {
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
const canRestoreFocus = this.restoreFocus &&
|
|
204
|
-
this._focusedElementBeforeOpen &&
|
|
205
|
-
typeof this._focusedElementBeforeOpen.focus === 'function';
|
|
206
|
-
const completeClose = () => {
|
|
207
|
-
// The `_opened` could've been reset already if
|
|
208
|
-
// we got two events in quick succession.
|
|
209
|
-
if (this._opened) {
|
|
210
|
-
this._opened = false;
|
|
211
|
-
this.closedStream.emit();
|
|
212
|
-
}
|
|
213
|
-
};
|
|
214
|
-
if (this._componentRef) {
|
|
215
|
-
const { instance, location } = this._componentRef;
|
|
216
|
-
instance._startExitAnimation();
|
|
217
|
-
instance._animationDone.pipe(take(1)).subscribe(() => {
|
|
218
|
-
const activeElement = this._document.activeElement;
|
|
219
|
-
// Since we restore focus after the exit animation, we have to check that
|
|
220
|
-
// the user didn't move focus themselves inside the `close` handler.
|
|
221
|
-
if (canRestoreFocus &&
|
|
222
|
-
(!activeElement ||
|
|
223
|
-
activeElement === this._document.activeElement ||
|
|
224
|
-
location.nativeElement.contains(activeElement))) {
|
|
225
|
-
this._focusedElementBeforeOpen.focus();
|
|
226
|
-
}
|
|
227
|
-
this._focusedElementBeforeOpen = null;
|
|
228
|
-
this._destroyOverlay();
|
|
229
|
-
});
|
|
230
|
-
if (canRestoreFocus) {
|
|
231
|
-
setTimeout(completeClose);
|
|
232
|
-
}
|
|
233
|
-
else {
|
|
234
|
-
completeClose();
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* Register an input with this timepicker.
|
|
240
|
-
* @param input The timepicker input to register with this timepicker.
|
|
241
|
-
* @returns Selection model that the input should hook itself up to.
|
|
242
|
-
*/
|
|
243
|
-
registerInput(input) {
|
|
244
|
-
if (this.timepickerInput) {
|
|
245
|
-
throw Error('A MatTimepicker can only be associated with a single input.');
|
|
246
|
-
}
|
|
247
|
-
this.timepickerInput = input;
|
|
248
|
-
return this._model;
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Registers a portal containing action buttons with the timepicker.
|
|
252
|
-
* @param portal Portal to be registered.
|
|
253
|
-
*/
|
|
254
|
-
registerActions(portal) {
|
|
255
|
-
if (this._actionsPortal) {
|
|
256
|
-
throw Error('A MatTimepicker can only be associated with a single actions row.');
|
|
257
|
-
}
|
|
258
|
-
this._actionsPortal = portal;
|
|
259
|
-
this._componentRef?.instance._assignActions(portal, true);
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Removes a portal containing action buttons from the timepicker.
|
|
263
|
-
* @param portal Portal to be removed.
|
|
264
|
-
*/
|
|
265
|
-
removeActions(portal) {
|
|
266
|
-
if (portal === this._actionsPortal) {
|
|
267
|
-
this._actionsPortal = null;
|
|
268
|
-
this._componentRef?.instance._assignActions(null, true);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
/** Applies the current pending selection on the overlay to the model. */
|
|
272
|
-
_applyPendingSelection() {
|
|
273
|
-
this._componentRef?.instance?._applyPendingSelection();
|
|
274
|
-
}
|
|
275
|
-
/** Forwards relevant values from the timepicker to the timepicker content inside the overlay. */
|
|
276
|
-
_forwardContentValues(instance) {
|
|
277
|
-
const defaultPortal = new ComponentPortal(this._defaultActionsComponent);
|
|
278
|
-
instance.timepicker = this;
|
|
279
|
-
instance.color = this.color;
|
|
280
|
-
instance.mode = this.mode;
|
|
281
|
-
instance.isMeridiem = this.format === '12h';
|
|
282
|
-
instance.showToggleModeButton = this.showToggleModeButton;
|
|
283
|
-
instance.minuteInterval = this.minuteInterval;
|
|
284
|
-
instance.orientation = this.orientation;
|
|
285
|
-
instance._dialogLabelId = this.timepickerInput.getOverlayLabelId();
|
|
286
|
-
instance._assignActions(this._actionsPortal || defaultPortal, false);
|
|
287
|
-
}
|
|
288
|
-
/** Opens the overlay with the timepicker. */
|
|
289
|
-
_openOverlay() {
|
|
290
|
-
this._destroyOverlay();
|
|
291
|
-
const isDialog = this.openAs === 'dialog';
|
|
292
|
-
const portal = new ComponentPortal(MatTimepickerContent, this._viewContainerRef);
|
|
293
|
-
const overlayRef = (this._overlayRef = this._overlay.create(new OverlayConfig({
|
|
294
|
-
positionStrategy: isDialog
|
|
295
|
-
? this._getDialogStrategy()
|
|
296
|
-
: this._getDropdownStrategy(),
|
|
297
|
-
hasBackdrop: true,
|
|
298
|
-
backdropClass: [
|
|
299
|
-
isDialog
|
|
300
|
-
? 'cdk-overlay-dark-backdrop'
|
|
301
|
-
: 'mat-overlay-transparent-backdrop',
|
|
302
|
-
this._backdropHarnessClass,
|
|
303
|
-
],
|
|
304
|
-
direction: 'ltr',
|
|
305
|
-
scrollStrategy: isDialog
|
|
306
|
-
? this._overlay.scrollStrategies.block()
|
|
307
|
-
: this._scrollStrategy(),
|
|
308
|
-
panelClass: `mat-timepicker-${this.openAs}`,
|
|
309
|
-
})));
|
|
310
|
-
this._getCloseStream(overlayRef).subscribe((event) => {
|
|
311
|
-
if (event) {
|
|
312
|
-
event.preventDefault();
|
|
313
|
-
}
|
|
314
|
-
this.close();
|
|
315
|
-
});
|
|
316
|
-
// The `preventDefault` call happens inside the timepicker as well, however focus moves into
|
|
317
|
-
// it inside a timeout which can give browsers a chance to fire off a keyboard event in-between
|
|
318
|
-
// that can scroll the page. Always block default actions of arrow keys for the
|
|
319
|
-
// entire overlay so the page doesn't get scrolled by accident.
|
|
320
|
-
overlayRef.keydownEvents().subscribe((event) => {
|
|
321
|
-
const keyCode = event.keyCode;
|
|
322
|
-
if (keyCode === UP_ARROW ||
|
|
323
|
-
keyCode === DOWN_ARROW ||
|
|
324
|
-
keyCode === PAGE_UP ||
|
|
325
|
-
keyCode === PAGE_DOWN) {
|
|
326
|
-
event.preventDefault();
|
|
327
|
-
}
|
|
328
|
-
});
|
|
329
|
-
this._componentRef = overlayRef.attach(portal);
|
|
330
|
-
this._forwardContentValues(this._componentRef.instance);
|
|
331
|
-
// Update the position once the timepicker has rendered. Only relevant in dropdown mode.
|
|
332
|
-
if (!isDialog) {
|
|
333
|
-
this._ngZone.onStable
|
|
334
|
-
.pipe(first())
|
|
335
|
-
.subscribe(() => overlayRef.updatePosition());
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
/** Destroys the current overlay. */
|
|
339
|
-
_destroyOverlay() {
|
|
340
|
-
if (this._overlayRef) {
|
|
341
|
-
this._overlayRef.dispose();
|
|
342
|
-
this._overlayRef = this._componentRef = null;
|
|
343
|
-
}
|
|
344
|
-
}
|
|
345
|
-
/** Gets a position strategy that will open the timepicker as a dropdown. */
|
|
346
|
-
_getDialogStrategy() {
|
|
347
|
-
return this._overlay
|
|
348
|
-
.position()
|
|
349
|
-
.global()
|
|
350
|
-
.centerHorizontally()
|
|
351
|
-
.centerVertically();
|
|
352
|
-
}
|
|
353
|
-
/** Gets a position strategy that will open the timepicker as a dropdown. */
|
|
354
|
-
_getDropdownStrategy() {
|
|
355
|
-
const strategy = this._overlay
|
|
356
|
-
.position()
|
|
357
|
-
.flexibleConnectedTo(this.timepickerInput.getConnectedOverlayOrigin())
|
|
358
|
-
.withTransformOriginOn('.mat-timepicker-content')
|
|
359
|
-
.withFlexibleDimensions(false)
|
|
360
|
-
.withViewportMargin(8)
|
|
361
|
-
.withLockedPosition();
|
|
362
|
-
return this._setConnectedPositions(strategy);
|
|
363
|
-
}
|
|
364
|
-
/** Sets the positions of the timepicker in dropdown mode based on the current configuration. */
|
|
365
|
-
_setConnectedPositions(strategy) {
|
|
366
|
-
const primaryX = this.xPosition === 'end' ? 'end' : 'start';
|
|
367
|
-
const secondaryX = primaryX === 'start' ? 'end' : 'start';
|
|
368
|
-
const primaryY = this.yPosition === 'above' ? 'bottom' : 'top';
|
|
369
|
-
const secondaryY = primaryY === 'top' ? 'bottom' : 'top';
|
|
370
|
-
return strategy.withPositions([
|
|
371
|
-
{
|
|
372
|
-
originX: primaryX,
|
|
373
|
-
originY: secondaryY,
|
|
374
|
-
overlayX: primaryX,
|
|
375
|
-
overlayY: primaryY,
|
|
376
|
-
},
|
|
377
|
-
{
|
|
378
|
-
originX: primaryX,
|
|
379
|
-
originY: primaryY,
|
|
380
|
-
overlayX: primaryX,
|
|
381
|
-
overlayY: secondaryY,
|
|
382
|
-
},
|
|
383
|
-
{
|
|
384
|
-
originX: secondaryX,
|
|
385
|
-
originY: secondaryY,
|
|
386
|
-
overlayX: secondaryX,
|
|
387
|
-
overlayY: primaryY,
|
|
388
|
-
},
|
|
389
|
-
{
|
|
390
|
-
originX: secondaryX,
|
|
391
|
-
originY: primaryY,
|
|
392
|
-
overlayX: secondaryX,
|
|
393
|
-
overlayY: secondaryY,
|
|
394
|
-
},
|
|
395
|
-
]);
|
|
396
|
-
}
|
|
397
|
-
/** Gets an observable that will emit when the overlay is supposed to be closed. */
|
|
398
|
-
_getCloseStream(overlayRef) {
|
|
399
|
-
return merge(overlayRef.backdropClick(), overlayRef.detachments(), overlayRef.keydownEvents().pipe(filter((event) => {
|
|
400
|
-
// Closing on alt + up is only valid when there's an input associated with the timepicker.
|
|
401
|
-
return ((event.keyCode === ESCAPE && !hasModifierKey(event)) ||
|
|
402
|
-
(this.timepickerInput &&
|
|
403
|
-
hasModifierKey(event, 'altKey') &&
|
|
404
|
-
event.keyCode === UP_ARROW));
|
|
405
|
-
})));
|
|
406
|
-
}
|
|
407
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: MatTimepickerBase, deps: [{ token: i0.ViewContainerRef }, { token: i1.Overlay }, { token: i0.NgZone }, { token: MAT_TIMEPICKER_SCROLL_STRATEGY }, { token: MAT_DEFAULT_ACITONS }, { token: i2.MatTimeSelectionModel }, { token: MAT_TIMEPICKER_DEFAULT_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
408
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.0.4", type: MatTimepickerBase, inputs: { disabled: "disabled", opened: "opened", openAs: "openAs", color: "color", mode: "mode", format: "format", showToggleModeButton: "showToggleModeButton", minuteInterval: "minuteInterval", orientation: "orientation", touchUi: ["touchUi", "touchUi", booleanAttribute], xPosition: "xPosition", yPosition: "yPosition", restoreFocus: ["restoreFocus", "restoreFocus", booleanAttribute] }, outputs: { openedStream: "opened", closedStream: "closed" }, usesOnChanges: true, ngImport: i0 }); }
|
|
409
|
-
}
|
|
410
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: MatTimepickerBase, decorators: [{
|
|
411
|
-
type: Directive
|
|
412
|
-
}], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i1.Overlay }, { type: i0.NgZone }, { type: undefined, decorators: [{
|
|
413
|
-
type: Inject,
|
|
414
|
-
args: [MAT_TIMEPICKER_SCROLL_STRATEGY]
|
|
415
|
-
}] }, { type: undefined, decorators: [{
|
|
416
|
-
type: Inject,
|
|
417
|
-
args: [MAT_DEFAULT_ACITONS]
|
|
418
|
-
}] }, { type: i2.MatTimeSelectionModel }, { type: undefined, decorators: [{
|
|
419
|
-
type: Optional
|
|
420
|
-
}, {
|
|
421
|
-
type: Inject,
|
|
422
|
-
args: [MAT_TIMEPICKER_DEFAULT_OPTIONS]
|
|
423
|
-
}] }], propDecorators: { disabled: [{
|
|
424
|
-
type: Input
|
|
425
|
-
}], opened: [{
|
|
426
|
-
type: Input
|
|
427
|
-
}], openAs: [{
|
|
428
|
-
type: Input
|
|
429
|
-
}], color: [{
|
|
430
|
-
type: Input
|
|
431
|
-
}], mode: [{
|
|
432
|
-
type: Input
|
|
433
|
-
}], format: [{
|
|
434
|
-
type: Input
|
|
435
|
-
}], showToggleModeButton: [{
|
|
436
|
-
type: Input
|
|
437
|
-
}], minuteInterval: [{
|
|
438
|
-
type: Input
|
|
439
|
-
}], orientation: [{
|
|
440
|
-
type: Input
|
|
441
|
-
}], touchUi: [{
|
|
442
|
-
type: Input,
|
|
443
|
-
args: [{ transform: booleanAttribute }]
|
|
444
|
-
}], xPosition: [{
|
|
445
|
-
type: Input
|
|
446
|
-
}], yPosition: [{
|
|
447
|
-
type: Input
|
|
448
|
-
}], restoreFocus: [{
|
|
449
|
-
type: Input,
|
|
450
|
-
args: [{ transform: booleanAttribute }]
|
|
451
|
-
}], openedStream: [{
|
|
452
|
-
type: Output,
|
|
453
|
-
args: ['opened']
|
|
454
|
-
}], closedStream: [{
|
|
455
|
-
type: Output,
|
|
456
|
-
args: ['closed']
|
|
457
|
-
}] } });
|
|
458
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0LXRpbWVwaWNrZXIvc3JjL2xpYi90aW1lcGlja2VyLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLEtBQUssRUFHTCxTQUFTLEVBRVQsTUFBTSxFQUNOLE1BQU0sRUFDTixZQUFZLEVBSVosY0FBYyxFQUNkLFFBQVEsRUFDUixnQkFBZ0IsRUFDaEIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRSxPQUFPLEVBRUwscUJBQXFCLEVBQ3JCLG9CQUFvQixHQUNyQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFDTCxpQ0FBaUMsRUFFakMsYUFBYSxHQUdkLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLGVBQWUsR0FHaEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsVUFBVSxFQUNWLE1BQU0sRUFDTixjQUFjLEVBQ2QsU0FBUyxFQUNULE9BQU8sRUFDUCxRQUFRLEdBQ1QsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUs5RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7OztBQWtFbkU7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQ3pDLElBQUksY0FBYyxDQUNo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RFIsS0FBSztnQkFpQkYsSUFBSTtzQkFEUCxLQUFLO2dCQVdGLE1BQU07c0JBRFQsS0FBSztnQkFXRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBV0YsY0FBYztzQkFEakIsS0FBSztnQkFXRixXQUFXO3NCQURkLEtBQUs7Z0JBYUYsT0FBTztzQkFEVixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQWV0QyxTQUFTO3NCQURSLEtBQUs7Z0JBS04sU0FBUztzQkFEUixLQUFLO2dCQVNOLFlBQVk7c0JBRFgsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFJWCxZQUFZO3NCQUF0QyxNQUFNO3VCQUFDLFFBQVE7Z0JBR1csWUFBWTtzQkFBdEMsTUFBTTt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5wdXQsXG4gIENvbXBvbmVudFJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgRGlyZWN0aXZlLFxuICBOZ1pvbmUsXG4gIEluamVjdCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgRWxlbWVudFJlZixcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIE9wdGlvbmFsLFxuICBib29sZWFuQXR0cmlidXRlLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVGhlbWVQYWxldHRlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBfZ2V0Rm9jdXNlZEVsZW1lbnRQaWVyY2VTaGFkb3dEb20gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHtcbiAgQm9vbGVhbklucHV0LFxuICBjb2VyY2VCb29sZWFuUHJvcGVydHksXG4gIGNvZXJjZU51bWJlclByb3BlcnR5LFxufSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxuICBPdmVybGF5LFxuICBPdmVybGF5Q29uZmlnLFxuICBPdmVybGF5UmVmLFxuICBTY3JvbGxTdHJhdGVneSxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50UG9ydGFsLFxuICBDb21wb25lbnRUeXBlLFxuICBUZW1wbGF0ZVBvcnRhbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1xuICBET1dOX0FSUk9XLFxuICBFU0NBUEUsXG4gIGhhc01vZGlmaWVyS2V5LFxuICBQQUdFX0RPV04sXG4gIFBBR0VfVVAsXG4gIFVQX0FSUk9XLFxufSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgZmlsdGVyLCBmaXJzdCwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QsIHRha2UgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTWF0VGltZXBpY2tlckNvbnRlbnQgfSBmcm9tICcuL3RpbWVwaWNrZXItY29udGVudCc7XG5pbXBvcnQgeyBNQVRfVElNRVBJQ0tFUl9TQ1JPTExfU1RSQVRFR1kgfSBmcm9tICcuL3RpbWVwaWNrZXItc2Nyb2xsLXN0cmF0ZWd5JztcbmltcG9ydCB7XG4gIEV4dHJhY3RUaW1lVHlwZUZyb21TZWxlY3Rpb24sXG4gIE1hdFRpbWVTZWxlY3Rpb25Nb2RlbCxcbn0gZnJvbSAnLi90aW1lLXNlbGVjdGlvbi1tb2RlbCc7XG5pbXBvcnQgeyBNQVRfREVGQVVMVF9BQ0lUT05TIH0gZnJvbSAnLi90aW1lcGlja2VyLWFjdGlvbnMtZGVmYXVsdCc7XG5pbXBvcnQgeyBUaW1lcGlja2VyT3JpZW50YXRpb24gfSBmcm9tICcuL29yaWVudGF0aW9uJztcblxuLyoqIFBvc3NpYmxlIG9wdGlvbnMgZm9yIHRoZSB0aW1lcGlja2VyIHRvIG9wZW4uICovXG5leHBvcnQgdHlwZSBUaW1lcGlja2VyT3BlbkFzID0gJ2RpYWxvZycgfCAncG9wdXAnO1xuXG4vKiogUG9zc2libGUgcG9zaXRpb25zIGZvciB0aGUgdGltZXBpY2tlciBkcm9wZG93biBhbG9uZyB0aGUgWCBheGlzLiAqL1xuZXhwb3J0IHR5cGUgVGltZXBpY2tlckRyb3Bkb3duUG9zaXRpb25YID0gJ3N0YXJ0JyB8ICdlbmQnO1xuXG4vKiogUG9zc2libGUgcG9zaXRpb25zIGZvciB0aGUgdGltZXBpY2tlciBkcm9wZG93biBhbG9uZyB0aGUgWSBheGlzLiAqL1xuZXhwb3J0IHR5cGUgVGltZXBpY2tlckRyb3Bkb3duUG9zaXRpb25ZID0gJ2Fib3ZlJyB8ICdiZWxvdyc7XG5cbi8qKiBQb3NzaWJsZSBvcHRpb25zIGZvciB0aGUgdGltZXBpY2tlciB0byBkaXNwbGF5LiAqL1xuZXhwb3J0IHR5cGUgVGltZXBpY2tlck1vZGUgPSAnaW5wdXQnIHwgJ2RpYWwnO1xuXG4vKiogUG9zc2libGUgb3B0aW9ucyBmb3IgdGhlIHRpbWVwaWNrZXIgcGVyaW9kIGZvcm1hdC4gKi9cbmV4cG9ydCB0eXBlIFRpbWVwaWNrZXJGb3JtYXQgPSAnMTJoJyB8ICcyNGgnO1xuXG4vKiogRm9ybSBjb250cm9sIHRoYXQgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBhIHRpbWVwaWNrZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hdFRpbWVwaWNrZXJDb250cm9sPFQ+IHtcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIG1pbjogVCB8IG51bGw7XG4gIG1heDogVCB8IG51bGw7XG4gIHN0YXRlQ2hhbmdlczogT2JzZXJ2YWJsZTx2b2lkPjtcbiAgZ2V0VGhlbWVQYWxldHRlKCk6IFRoZW1lUGFsZXR0ZTtcbiAgZ2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpOiBFbGVtZW50UmVmO1xuICBnZXRPdmVybGF5TGFiZWxJZCgpOiBzdHJpbmcgfCBudWxsO1xufVxuXG4vKiogQSB0aW1lcGlja2VyIHRoYXQgY2FuIGJlIGF0dGFjaGVkIHRvIGEge0BsaW5rIE1hdFRpbWVwaWNrZXJDb250cm9sfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF0VGltZXBpY2tlclBhbmVsPFxuICBDIGV4dGVuZHMgTWF0VGltZXBpY2tlckNvbnRyb2w8VD4sXG4gIFMsXG4gIFQgPSBFeHRyYWN0VGltZVR5cGVGcm9tU2VsZWN0aW9uPFM+LFxuPiB7XG4gIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuZXZlciB0aGUgdGltZXBpY2tlciBpcyBvcGVuZWQuICovXG4gIG9wZW5lZFN0cmVhbTogRXZlbnRFbWl0dGVyPHZvaWQ+O1xuICAvKiogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbmV2ZXIgdGhlIHRpbWVwaWNrZXIgaXMgY2xvc2VkLiAqL1xuICBjbG9zZWRTdHJlYW06IEV2ZW50RW1pdHRlcjx2b2lkPjtcbiAgLyoqIEVtaXRzIHdoZW4gdGhlIHRpbWVwaWNrZXIncyBzdGF0ZSBjaGFuZ2VzLiAqL1xuICBzdGF0ZUNoYW5nZXM6IFN1YmplY3Q8dm9pZD47XG4gIC8qKiBSZWdpc3RlciBhbiBpbnB1dCB3aXRoIHRoZSB0aW1lZXBpY2tlci4gKi9cbiAgcmVnaXN0ZXJJbnB1dChpbnB1dDogQyk6IE1hdFRpbWVTZWxlY3Rpb25Nb2RlbDxTLCBUPjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBkZWZhdWx0IG9wdGlvbnMgZm9yIHRoZSBmb3JtIGZpZWxkIHRoYXQgY2FuIGJlIGNvbmZpZ3VyZWRcbiAqIHVzaW5nIHRoZSBgTUFUX1RJTUVQSUNLRVJfREVGQVVMVF9PUFRJT05TYCBpbmplY3Rpb24gdG9rZW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF0VGltZXBpY2tlckRlZmF1bHRPcHRpb25zIHtcbiAgLyoqIERlZmF1bHQgY29sb3Igb2YgdGhlIHRpbWVwaWNrZXIuICovXG4gIGNvbG9yPzogVGhlbWVQYWxldHRlO1xuICAvKiogRGVmYXVsdCB0aW1lcGlja2VyIG1vZGUuICovXG4gIG1vZGU6IFRpbWVwaWNrZXJNb2RlO1xuICAvKiogRGVmaW5lcyBob3cgdGltZXBpY2tlciB3aWxsIGJlIGFwcGVhcmVkLiAqL1xuICBvcGVuQXM6IFRpbWVwaWNrZXJPcGVuQXM7XG4gIC8qKiBEZWZhdWx0IHRpbWVwaWNrZXIgZm9ybWF0LiAqL1xuICBmb3JtYXQ6IFRpbWVwaWNrZXJGb3JtYXQ7XG4gIC8qKiBTaG91bGQgdG9nZ2xlIGZhY2UgYnV0dG9uIGJlIHZpc2libGUuICovXG4gIHNob3dUb2dnbGVNb2RlQnV0dG9uOiBib29sZWFuO1xuICAvKiogU3RlcCBmb3IgbWludXRlcy4gKi9cbiAgbWludXRlSW50ZXJ2YWw6IG51bWJlcjtcbiAgLyoqIE9yaWVudGF0aW9uIGZvciBkaWFsIG1vZGUuICovXG4gIG9yaWVudGF0aW9uOiBUaW1lcGlja2VyT3JpZW50YXRpb247XG59XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHRoZVxuICogZGVmYXVsdCBvcHRpb25zIGZvciBhbGwgdGltZXBpY2tlcnMgd2l0aGluIGFuIGFwcC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BVF9USU1FUElDS0VSX0RFRkFVTFRfT1BUSU9OUyA9XG4gIG5ldyBJbmplY3Rpb25Ub2tlbjxNYXRUaW1lcGlja2VyRGVmYXVsdE9wdGlvbnM+KFxuICAgICdNQVRfVElNRVBJQ0tFUl9ERUZBVUxUX09QVElPTlMnLFxuICApO1xuXG4vKiogRGVmYXVsdCBvcGVuIGFzIHVzZWQgYnkgdGhlIHRpbWVwaWNrZXIuICovXG5jb25zdCBERUZBVUxUX09QRU5fQVM6IFRpbWVwaWNrZXJPcGVuQXMgPSAncG9wdXAnO1xuXG4vKiogRGVmYXVsdCBtb2RlIHVzZWQgYnkgdGhlIHRpbWVwaWNrZXIuICovXG5jb25zdCBERUZBVUxUX01PREU6IFRpbWVwaWNrZXJNb2RlID0gJ2RpYWwnO1xuXG4vKiogRGVmYXVsdCBmb3JtYXQgdXNlZCBieSB0aGUgdGltZXBpY2tlci4gKi9cbmNvbnN0IERFRkFVTFRfRk9STUFUOiBUaW1lcGlja2VyRm9ybWF0ID0gJzEyaCc7XG5cbi8qKiBVc2VkIHRvIGdlbmVyYXRlIGEgdW5pcXVlIElEIGZvciBlYWNoIHRpbWVwaWNrZXIgaW5zdGFuY2UuICovXG5sZXQgdGltZXBpY2tlclVpZCA9IDA7XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE1hdFRpbWVwaWNrZXJCYXNlPFxuICBDIGV4dGVuZHMgTWF0VGltZXBpY2tlckNvbnRyb2w8VD4sXG4gIFMsXG4gIFQgPSBFeHRyYWN0VGltZVR5cGVGcm9tU2VsZWN0aW9uPFM+LFxuPiBpbXBsZW1lbnRzIE9uQ2hhbmdlc1xue1xuICAvKiogV2hldGhlciB0aGUgdGltZXBpY2tlciBwb3AtdXAgc2hvdWxkIGJlIGRpc2FibGVkLiAqL1xuICBASW5wdXQoKVxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkID09PSB1bmRlZmluZWQgJiYgdGhpcy50aW1lcGlja2VySW5wdXRcbiAgICAgID8gdGhpcy50aW1lcGlja2VySW5wdXQuZGlzYWJsZWRcbiAgICAgIDogISF0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWU6IEJvb2xlYW5JbnB1dCkge1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcblxuICAgIGlmIChuZXdWYWx1ZSAhPT0gdGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVkID0gbmV3VmFsdWU7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSB0aW1lcGlja2VyIGlzIG9wZW4uICovXG4gIEBJbnB1dCgpXG4gIGdldCBvcGVuZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29wZW5lZDtcbiAgfVxuICBzZXQgb3BlbmVkKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpID8gdGhpcy5vcGVuKCkgOiB0aGlzLmNsb3NlKCk7XG4gIH1cbiAgcHJpdmF0ZSBfb3BlbmVkID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHRpbWVwaWNrZXIgbW9kZSB3aGljaCBkZXRlcm1pbmVzIHdoYXQgdGhlIHRpbWVwaWNrZXIgd2lsbCBiZSBvcGVuZWQgYXMuICovXG4gIEBJbnB1dCgpXG4gIGdldCBvcGVuQXMoKTogVGltZXBpY2tlck9wZW5BcyB7XG4gICAgcmV0dXJuIHRoaXMuX29wZW5BcyB8fCB0aGlzLl9kZWZhdWx0cz8ub3BlbkFzIHx8IERFRkFVTFRfT1BFTl9BUztcbiAgfVxuICBzZXQgb3BlbkFzKHZhbHVlOiBUaW1lcGlja2VyT3BlbkFzKSB7XG4gICAgdGhpcy5fb3BlbkFzID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfb3BlbkFzOiBUaW1lcGlja2VyT3BlbkFzO1xuXG4gIC8qKiBDb2xvciBwYWxldHRlIHRvIHVzZSBvbiB0aGUgdGltZXBpY2tlcidzIGNvbnRlbnQuICovXG4gIEBJbnB1dCgpXG4gIGdldCBjb2xvcigpOiBUaGVtZVBhbGV0dGUge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLl9jb2xvciB8fFxuICAgICAgdGhpcy5fZGVmYXVsdHM/LmNvbG9yIHx8XG4gICAgICAodGhpcy50aW1lcGlja2VySW5wdXRcbiAgICAgICAgPyB0aGlzLnRpbWVwaWNrZXJJbnB1dC5nZXRUaGVtZVBhbGV0dGUoKVxuICAgICAgICA6IHVuZGVmaW5lZClcbiAgICApO1xuICB9XG4gIHNldCBjb2xvcih2YWx1ZTogVGhlbWVQYWxldHRlKSB7XG4gICAgdGhpcy5fY29sb3IgPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF9jb2xvcjogVGhlbWVQYWxldHRlO1xuXG4gIC8qKiBUaW1lcGlja2VyIGRpc3BsYXkgbW9kZS4gKi9cbiAgQElucHV0KClcbiAgZ2V0IG1vZGUoKTogVGltZXBpY2tlck1vZGUge1xuICAgIHJldHVybiB0aGlzLl9tb2RlIHx8IHRoaXMuX2RlZmF1bHRzPy5tb2RlIHx8IERFRkFVTFRfTU9ERTtcbiAgfVxuICBzZXQgbW9kZSh2YWx1ZTogVGltZXBpY2tlck1vZGUpIHtcbiAgICB0aGlzLl9tb2RlID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfbW9kZTogVGltZXBpY2tlck1vZGU7XG5cbiAgLyoqIFRpbWVwaWNrZXIgcGVyaW9kIGZvcm1hdC4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGZvcm1hdCgpOiBUaW1lcGlja2VyRm9ybWF0IHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybWF0IHx8IHRoaXMuX2RlZmF1bHRzPy5mb3JtYXQgfHwgREVGQVVMVF9GT1JNQVQ7XG4gIH1cbiAgc2V0IGZvcm1hdCh2YWx1ZTogVGltZXBpY2tlckZvcm1hdCkge1xuICAgIHRoaXMuX2Zvcm1hdCA9IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgX2Zvcm1hdDogVGltZXBpY2tlckZvcm1hdDtcblxuICAvKiogU2hvdyBvciBoaWRlIHRvZ2dsZSBidXR0b24gYmV0d2VlbiBkaWFsIGFuZCBpbnB1dC4gKi9cbiAgQElucHV0KClcbiAgZ2V0IHNob3dUb2dnbGVNb2RlQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zaG93VG9nZ2xlTW9kZUJ1dHRvbjtcbiAgfVxuICBzZXQgc2hvd1RvZ2dsZU1vZGVCdXR0b24odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93VG9nZ2xlTW9kZUJ1dHRvbiA9IHZhbHVlO1xuICB9XG4gIHByaXZhdGUgX3Nob3dUb2dnbGVNb2RlQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKiogU3RlcCBmb3IgbWludXRlcy4gKi9cbiAgQElucHV0KClcbiAgZ2V0IG1pbnV0ZUludGVydmFsKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX21pbnV0ZUludGVydmFsIHx8IHRoaXMuX2RlZmF1bHRzPy5taW51dGVJbnRlcnZhbCB8fCAxO1xuICB9XG4gIHNldCBtaW51dGVJbnRlcnZhbCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbWludXRlSW50ZXJ2YWwgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBfbWludXRlSW50ZXJ2YWw6IG51bWJlcjtcblxuICAvKiogT3JpZW50YXRpb24gZm9yIGRpYWwgbW9kZS4gKi9cbiAgQElucHV0KClcbiAgZ2V0IG9yaWVudGF0aW9uKCk6IFRpbWVwaWNrZXJPcmllbnRhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uIHx8IHRoaXMuX2RlZmF1bHRzPy5vcmllbnRhdGlvbiB8fCAndmVydGljYWwnO1xuICB9XG4gIHNldCBvcmllbnRhdGlvbih2YWx1ZTogVGltZXBpY2tlck9yaWVudGF0aW9uKSB7XG4gICAgdGhpcy5fb3JpZW50YXRpb24gPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF9vcmllbnRhdGlvbjogVGltZXBpY2tlck9yaWVudGF0aW9uO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB0aW1lcGlja2VyIFVJIGlzIGluIHRvdWNoIG1vZGUuIEluIHRvdWNoIG1vZGUgZWxlbWVudHMgYXJlIGxhcmdlciBmb3IgYmlnZ2VyIHRvdWNoIHRhcmdldHMuXG4gICAqL1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgZ2V0IHRvdWNoVWkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3RvdWNoVWk7XG4gIH1cbiAgc2V0IHRvdWNoVWkodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl90b3VjaFVpID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5vcGVuQXMgPSAnZGlhbG9nJztcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfdG91Y2hVaTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBQcmVmZXJyZWQgcG9zaXRpb24gb2YgdGhlIHRpbWVwaWNrZXIgaW4gdGhlIFggYXhpcy4gKi9cbiAgQElucHV0KClcbiAgeFBvc2l0aW9uOiBUaW1lcGlja2VyRHJvcGRvd25Qb3NpdGlvblggPSAnc3RhcnQnO1xuXG4gIC8qKiBQcmVmZXJyZWQgcG9zaXRpb24gb2YgdGhlIHRpbWVwaWNrZXIgaW4gdGhlIFkgYXhpcy4gKi9cbiAgQElucHV0KClcbiAgeVBvc2l0aW9uOiBUaW1lcGlja2VyRHJvcGRvd25Qb3NpdGlvblkgPSAnYmVsb3cnO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlc3RvcmUgZm9jdXMgdG8gdGhlIHByZXZpb3VzbHktZm9jdXNlZCBlbGVtZW50IHdoZW4gdGhlIHRpbWVwaWNrZXIgaXMgY2xvc2VkLlxuICAgKiBOb3RlIHRoYXQgYXV0b21hdGljIGZvY3VzIHJlc3RvcmF0aW9uIGlzIGFuIGFjY2Vzc2liaWxpdHkgZmVhdHVyZSBhbmQgaXQgaXMgcmVjb21tZW5kZWQgdGhhdFxuICAgKiB5b3UgcHJvdmlkZSB5b3VyIG93biBlcXVpdmFsZW50LCBpZiB5b3UgZGVjaWRlIHRvIHR1cm4gaXQgb2ZmLlxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gIHJlc3RvcmVGb2N1czogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqIEVtaXRzIHdoZW4gdGhlIHRpbWVwaWNrZXIgaGFzIGJlZW4gb3BlbmVkLiAqL1xuICBAT3V0cHV0KCdvcGVuZWQnKSByZWFkb25seSBvcGVuZWRTdHJlYW0gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqIEVtaXRzIHdoZW4gdGhlIHRpbWVwaWNrZXIgaGFzIGJlZW4gY2xvc2VkLiAqL1xuICBAT3V0cHV0KCdjbG9zZWQnKSByZWFkb25seSBjbG9zZWRTdHJlYW0gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqIFRoZSBpZCBmb3IgdGhlIHRpbWVwaWNrZXIuICovXG4gIGlkOiBzdHJpbmcgPSBgbWF0LXRpbWVwaWNrZXItJHt0aW1lcGlja2VyVWlkKyt9YDtcblxuICAvKiogVGhlIGlucHV0IGVsZW1lbnQgdGhpcyB0aW1lcGlja2VyIGlzIGFzc29jaWF0ZWQgd2l0aC4gKi9cbiAgdGltZXBpY2tlcklucHV0ITogQztcblxuICAvKiogUG9ydGFsIHdpdGggcHJvamVjdGVkIGFjdGlvbiBidXR0b25zLiAqL1xuICBfYWN0aW9uc1BvcnRhbDogVGVtcGxhdGVQb3J0YWwgfCBudWxsID0gbnVsbDtcblxuICAvKiogRW1pdHMgd2hlbiB0aGUgdGltZXBpY2tlcidzIHN0YXRlIGNoYW5nZXMuICovXG4gIHJlYWRvbmx5IHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLyoqIEEgcmVmZXJlbmNlIHRvIHRoZSBvdmVybGF5IGludG8gd2hpY2ggd2UndmUgcmVuZGVyZWQgdGhlIHRpbWVwaWNrZXIuICovXG4gIHByaXZhdGUgX292ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCBudWxsO1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIGNvbXBvbmVudCBpbnN0YW5jZSByZW5kZXJlZCBpbiB0aGUgb3ZlcmxheS4gKi9cbiAgcHJpdmF0ZSBfY29tcG9uZW50UmVmITogQ29tcG9uZW50UmVmPE1hdFRpbWVwaWNrZXJDb250ZW50PFMsIFQ+PiB8IG51bGw7XG5cbiAgLyoqIFVuaXF1ZSBjbGFzcyB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGJhY2tkcm9wIHNvIHRoYXQgdGhlIHRlc3QgaGFybmVzc2VzIGNhbiBsb29rIGl0IHVwLiAqL1xuICBwcml2YXRlIF9iYWNrZHJvcEhhcm5lc3NDbGFzcyA9IGAke3RoaXMuaWR9LWJhY2tkcm9wYDtcblxuICAvKiogVGhlIGVsZW1lbnQgdGhhdCB3YXMgZm9jdXNlZCBiZWZvcmUgdGhlIHRpbWVwaWNrZXIgd2FzIG9wZW5lZC4gKi9cbiAgcHJpdmF0ZSBfZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2RvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICAvKiogU2Nyb2xsIHN0cmF0ZWd5LiAqL1xuICBwcml2YXRlIF9zY3JvbGxTdHJhdGVneTogKCkgPT4gU2Nyb2xsU3RyYXRlZ3k7XG5cbiAgLyoqIFRoZSBtaW5pbXVtIHNlbGVjdGFibGUgdGltZS4gKi9cbiAgX2dldE1pblRpbWUoKTogVCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnRpbWVwaWNrZXJJbnB1dCAmJiB0aGlzLnRpbWVwaWNrZXJJbnB1dC5taW47XG4gIH1cblxuICAvKiogVGhlIG1heGltdW0gc2VsZWN0YWJsZSB0aW1lLiAqL1xuICBfZ2V0TWF4VGltZSgpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudGltZXBpY2tlcklucHV0ICYmIHRoaXMudGltZXBpY2tlcklucHV0Lm1heDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSBfb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSxcbiAgICBASW5qZWN0KE1BVF9USU1FUElDS0VSX1NDUk9MTF9TVFJBVEVHWSkgc2Nyb2xsU3RyYXRlZ3k6IGFueSxcbiAgICBASW5qZWN0KE1BVF9ERUZBVUxUX0FDSVRPTlMpXG4gICAgcHJpdmF0ZSBfZGVmYXVsdEFjdGlvbnNDb21wb25lbnQ6IENvbXBvbmVudFR5cGU8YW55PixcbiAgICBwcml2YXRlIF9tb2RlbDogTWF0VGltZVNlbGVjdGlvbk1vZGVsPFMsIFQ+LFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChNQVRfVElNRVBJQ0tFUl9ERUZBVUxUX09QVElPTlMpXG4gICAgcHJpdmF0ZSBfZGVmYXVsdHM/OiBNYXRUaW1lcGlja2VyRGVmYXVsdE9wdGlvbnMsXG4gICkge1xuICAgIHRoaXMuX3Njcm9sbFN0cmF0ZWd5ID0gc2Nyb2xsU3RyYXRlZ3k7XG5cbiAgICBpZiAoX2RlZmF1bHRzKSB7XG4gICAgICB0aGlzLnNob3dUb2dnbGVNb2RlQnV0dG9uID1cbiAgICAgICAgX2RlZmF1bHRzLnNob3dUb2dnbGVNb2RlQnV0dG9uICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IF9kZWZhdWx0cy5zaG93VG9nZ2xlTW9kZUJ1dHRvblxuICAgICAgICAgIDogdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgY29uc3QgcG9zaXRpb25DaGFuZ2UgPSBjaGFuZ2VzWyd4UG9zaXRpb24nXSB8fCBjaGFuZ2VzWyd5UG9zaXRpb24nXTtcblxuICAgIGlmIChwb3NpdGlvbkNoYW5nZSAmJiAhcG9zaXRpb25DaGFuZ2UuZmlyc3RDaGFuZ2UgJiYgdGhpcy5fb3ZlcmxheVJlZikge1xuICAgICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMuX292ZXJsYXlSZWYuZ2V0Q29uZmlnKCkucG9zaXRpb25TdHJhdGVneTtcblxuICAgICAgaWYgKHBvc2l0aW9uU3RyYXRlZ3kgaW5zdGFuY2VvZiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kpIHtcbiAgICAgICAgdGhpcy5fc2V0Q29ubmVjdGVkUG9zaXRpb25zKHBvc2l0aW9uU3RyYXRlZ3kpO1xuXG4gICAgICAgIGlmICh0aGlzLm9wZW5lZCkge1xuICAgICAgICAgIHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQodW5kZWZpbmVkKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2Rlc3Ryb3lPdmVybGF5KCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKiogT3BlbnMgdGhlIHRpbWVwaWNrZXIuICovXG4gIG9wZW4oKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5fb3BlbmVkIHx8XG4gICAgICB0aGlzLmRpc2FibGVkIHx8XG4gICAgICB0aGlzLl9jb21wb25lbnRSZWY/Lmluc3RhbmNlLl9pc0FuaW1hdGluZ1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy50aW1lcGlja2VySW5wdXQpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnQXR0ZW1wdGVkIHRvIG9wZW4gYW4gTWF0VGltZXBpY2tlciB3aXRoIG5vIGFzc29jaWF0ZWQgaW5wdXQuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuID0gX2dldEZvY3VzZWRFbGVtZW50UGllcmNlU2hhZG93RG9tKCk7XG4gICAgdGhpcy5fb3Blbk92ZXJsYXkoKTtcbiAgICB0aGlzLl9vcGVuZWQgPSB0cnVlO1xuICAgIHRoaXMub3BlbmVkU3RyZWFtLmVtaXQoKTtcbiAgfVxuXG4gIC8qKiBDbG9zZXMgdGhlIHRpbWVwaWNrZXIuICovXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fb3BlbmVkIHx8IHRoaXMuX2NvbXBvbmVudFJlZj8uaW5zdGFuY2UuX2lzQW5pbWF0aW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2FuUmVzdG9yZUZvY3VzID1cbiAgICAgIHRoaXMucmVzdG9yZUZvY3VzICYmXG4gICAgICB0aGlzLl9mb2N1c2VkRWxlbWVudEJlZm9yZU9wZW4gJiZcbiAgICAgIHR5cGVvZiB0aGlzLl9mb2N1c2VkRWxlbWVudEJlZm9yZU9wZW4uZm9jdXMgPT09ICdmdW5jdGlvbic7XG5cbiAgICBjb25zdCBjb21wbGV0ZUNsb3NlID0gKCkgPT4ge1xuICAgICAgLy8gVGhlIGBfb3BlbmVkYCBjb3VsZCd2ZSBiZWVuIHJlc2V0IGFscmVhZHkgaWZcbiAgICAgIC8vIHdlIGdvdCB0d28gZXZlbnRzIGluIHF1aWNrIHN1Y2Nlc3Npb24uXG4gICAgICBpZiAodGhpcy5fb3BlbmVkKSB7XG4gICAgICAgIHRoaXMuX29wZW5lZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNsb3NlZFN0cmVhbS5lbWl0KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLl9jb21wb25lbnRSZWYpIHtcbiAgICAgIGNvbnN0IHsgaW5zdGFuY2UsIGxvY2F0aW9uIH0gPSB0aGlzLl9jb21wb25lbnRSZWY7XG4gICAgICBpbnN0YW5jZS5fc3RhcnRFeGl0QW5pbWF0aW9uKCk7XG4gICAgICBpbnN0YW5jZS5fYW5pbWF0aW9uRG9uZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSB0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXG4gICAgICAgIC8vIFNpbmNlIHdlIHJlc3RvcmUgZm9jdXMgYWZ0ZXIgdGhlIGV4aXQgYW5pbWF0aW9uLCB3ZSBoYXZlIHRvIGNoZWNrIHRoYXRcbiAgICAgICAgLy8gdGhlIHVzZXIgZGlkbid0IG1vdmUgZm9jdXMgdGhlbXNlbHZlcyBpbnNpZGUgdGhlIGBjbG9zZWAgaGFuZGxlci5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNhblJlc3RvcmVGb2N1cyAmJlxuICAgICAgICAgICghYWN0aXZlRWxlbWVudCB8fFxuICAgICAgICAgICAgYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5fZG9jdW1lbnQuYWN0aXZlRWxlbWVudCB8fFxuICAgICAgICAgICAgbG9jYXRpb24ubmF0aXZlRWxlbWVudC5jb250YWlucyhhY3RpdmVFbGVtZW50KSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuIS5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZGVzdHJveU92ZXJsYXkoKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoY2FuUmVzdG9yZUZvY3VzKSB7XG4gICAgICAgIHNldFRpbWVvdXQoY29tcGxldGVDbG9zZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21wbGV0ZUNsb3NlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGFuIGlucHV0IHdpdGggdGhpcyB0aW1lcGlja2VyLlxuICAgKiBAcGFyYW0gaW5wdXQgVGhlIHRpbWVwaWNrZXIgaW5wdXQgdG8gcmVnaXN0ZXIgd2l0aCB0aGlzIHRpbWVwaWNrZXIuXG4gICAqIEByZXR1cm5zIFNlbGVjdGlvbiBtb2RlbCB0aGF0IHRoZSBpbnB1dCBzaG91bGQgaG9vayBpdHNlbGYgdXAgdG8uXG4gICAqL1xuICByZWdpc3RlcklucHV0KGlucHV0OiBDKTogTWF0VGltZVNlbGVjdGlvbk1vZGVsPFMsIFQ+IHtcbiAgICBpZiAodGhpcy50aW1lcGlja2VySW5wdXQpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnQSBNYXRUaW1lcGlja2VyIGNhbiBvbmx5IGJlIGFzc29jaWF0ZWQgd2l0aCBhIHNpbmdsZSBpbnB1dC4nLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnRpbWVwaWNrZXJJbnB1dCA9IGlucHV0O1xuICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBwb3J0YWwgY29udGFpbmluZyBhY3Rpb24gYnV0dG9ucyB3aXRoIHRoZSB0aW1lcGlja2VyLlxuICAgKiBAcGFyYW0gcG9ydGFsIFBvcnRhbCB0byBiZSByZWdpc3RlcmVkLlxuICAgKi9cbiAgcmVnaXN0ZXJBY3Rpb25zKHBvcnRhbDogVGVtcGxhdGVQb3J0YWwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fYWN0aW9uc1BvcnRhbCkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICdBIE1hdFRpbWVwaWNrZXIgY2FuIG9ubHkgYmUgYXNzb2NpYXRlZCB3aXRoIGEgc2luZ2xlIGFjdGlvbnMgcm93LicsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLl9hY3Rpb25zUG9ydGFsID0gcG9ydGFsO1xuICAgIHRoaXMuX2NvbXBvbmVudFJlZj8uaW5zdGFuY2UuX2Fzc2lnbkFjdGlvbnMocG9ydGFsLCB0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgcG9ydGFsIGNvbnRhaW5pbmcgYWN0aW9uIGJ1dHRvbnMgZnJvbSB0aGUgdGltZXBpY2tlci5cbiAgICogQHBhcmFtIHBvcnRhbCBQb3J0YWwgdG8gYmUgcmVtb3ZlZC5cbiAgICovXG4gIHJlbW92ZUFjdGlvbnMocG9ydGFsOiBUZW1wbGF0ZVBvcnRhbCk6IHZvaWQge1xuICAgIGlmIChwb3J0YWwgPT09IHRoaXMuX2FjdGlvbnNQb3J0YWwpIHtcbiAgICAgIHRoaXMuX2FjdGlvbnNQb3J0YWwgPSBudWxsO1xuICAgICAgdGhpcy5fY29tcG9uZW50UmVmPy5pbnN0YW5jZS5fYXNzaWduQWN0aW9ucyhudWxsLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvKiogQXBwbGllcyB0aGUgY3VycmVudCBwZW5kaW5nIHNlbGVjdGlvbiBvbiB0aGUgb3ZlcmxheSB0byB0aGUgbW9kZWwuICovXG4gIF9hcHBseVBlbmRpbmdTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy5fY29tcG9uZW50UmVmPy5pbnN0YW5jZT8uX2FwcGx5UGVuZGluZ1NlbGVjdGlvbigpO1xuICB9XG5cbiAgLyoqIEZvcndhcmRzIHJlbGV2YW50IHZhbHVlcyBmcm9tIHRoZSB0aW1lcGlja2VyIHRvIHRoZSB0aW1lcGlja2VyIGNvbnRlbnQgaW5zaWRlIHRoZSBvdmVybGF5LiAqL1xuICBwcm90ZWN0ZWQgX2ZvcndhcmRDb250ZW50VmFsdWVzKGluc3RhbmNlOiBNYXRUaW1lcGlja2VyQ29udGVudDxTLCBUPik6IHZvaWQge1xuICAgIGNvbnN0IGRlZmF1bHRQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKHRoaXMuX2RlZmF1bHRBY3Rpb25zQ29tcG9uZW50KTtcblxuICAgIGluc3RhbmNlLnRpbWVwaWNrZXIgPSB0aGlzO1xuICAgIGluc3RhbmNlLmNvbG9yID0gdGhpcy5jb2xvcjtcbiAgICBpbnN0YW5jZS5tb2RlID0gdGhpcy5tb2RlO1xuICAgIGluc3RhbmNlLmlzTWVyaWRpZW0gPSB0aGlzLmZvcm1hdCA9PT0gJzEyaCc7XG4gICAgaW5zdGFuY2Uuc2hvd1RvZ2dsZU1vZGVCdXR0b24gPSB0aGlzLnNob3dUb2dnbGVNb2RlQnV0dG9uO1xuICAgIGluc3RhbmNlLm1pbnV0ZUludGVydmFsID0gdGhpcy5taW51dGVJbnRlcnZhbDtcbiAgICBpbnN0YW5jZS5vcmllbnRhdGlvbiA9IHRoaXMub3JpZW50YXRpb247XG4gICAgaW5zdGFuY2UuX2RpYWxvZ0xhYmVsSWQgPSB0aGlzLnRpbWVwaWNrZXJJbnB1dC5nZXRPdmVybGF5TGFiZWxJZCgpO1xuICAgIGluc3RhbmNlLl9hc3NpZ25BY3Rpb25zKHRoaXMuX2FjdGlvbnNQb3J0YWwgfHwgZGVmYXVsdFBvcnRhbCwgZmFsc2UpO1xuICB9XG5cbiAgLyoqIE9wZW5zIHRoZSBvdmVybGF5IHdpdGggdGhlIHRpbWVwaWNrZXIuICovXG4gIHByaXZhdGUgX29wZW5PdmVybGF5KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3lPdmVybGF5KCk7XG5cbiAgICBjb25zdCBpc0RpYWxvZyA9IHRoaXMub3BlbkFzID09PSAnZGlhbG9nJztcbiAgICBjb25zdCBwb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsPE1hdFRpbWVwaWNrZXJDb250ZW50PFMsIFQ+PihcbiAgICAgIE1hdFRpbWVwaWNrZXJDb250ZW50LFxuICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZixcbiAgICApO1xuXG4gICAgY29uc3Qgb3ZlcmxheVJlZiA9ICh0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheS5jcmVhdGUoXG4gICAgICBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IGlzRGlhbG9nXG4gICAgICAgICAgPyB0aGlzLl9nZXREaWFsb2dTdHJhdGVneSgpXG4gICAgICAgICAgOiB0aGlzLl9nZXREcm9wZG93blN0cmF0ZWd5KCksXG4gICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgICBiYWNrZHJvcENsYXNzOiBbXG4gICAgICAgICAgaXNEaWFsb2dcbiAgICAgICAgICAgID8gJ2Nkay1vdmVybGF5LWRhcmstYmFja2Ryb3AnXG4gICAgICAgICAgICA6ICdtYXQtb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCcsXG4gICAgICAgICAgdGhpcy5fYmFja2Ryb3BIYXJuZXNzQ2xhc3MsXG4gICAgICAgIF0sXG4gICAgICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgICAgIHNjcm9sbFN0cmF0ZWd5OiBpc0RpYWxvZ1xuICAgICAgICAgID8gdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKClcbiAgICAgICAgICA6IHRoaXMuX3Njcm9sbFN0cmF0ZWd5KCksXG4gICAgICAgIHBhbmVsQ2xhc3M6IGBtYXQtdGltZXBpY2tlci0ke3RoaXMub3BlbkFzfWAsXG4gICAgICB9KSxcbiAgICApKTtcblxuICAgIHRoaXMuX2dldENsb3NlU3RyZWFtKG92ZXJsYXlSZWYpLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfVxuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIGBwcmV2ZW50RGVmYXVsdGAgY2FsbCBoYXBwZW5zIGluc2lkZSB0aGUgdGltZXBpY2tlciBhcyB3ZWxsLCBob3dldmVyIGZvY3VzIG1vdmVzIGludG9cbiAgICAvLyBpdCBpbnNpZGUgYSB0aW1lb3V0IHdoaWNoIGNhbiBnaXZlIGJyb3dzZXJzIGEgY2hhbmNlIHRvIGZpcmUgb2ZmIGEga2V5Ym9hcmQgZXZlbnQgaW4tYmV0d2VlblxuICAgIC8vIHRoYXQgY2FuIHNjcm9sbCB0aGUgcGFnZS4gQWx3YXlzIGJsb2NrIGRlZmF1bHQgYWN0aW9ucyBvZiBhcnJvdyBrZXlzIGZvciB0aGVcbiAgICAvLyBlbnRpcmUgb3ZlcmxheSBzbyB0aGUgcGFnZSBkb2Vzbid0IGdldCBzY3JvbGxlZCBieSBhY2NpZGVudC5cbiAgICBvdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcblxuICAgICAgaWYgKFxuICAgICAgICBrZXlDb2RlID09PSBVUF9BUlJPVyB8fFxuICAgICAgICBrZXlDb2RlID09PSBET1dOX0FSUk9XIHx8XG4gICAgICAgIGtleUNvZGUgPT09IFBBR0VfVVAgfHxcbiAgICAgICAga2V5Q29kZSA9PT0gUEFHRV9ET1dOXG4gICAgICApIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX2NvbXBvbmVudFJlZiA9IG92ZXJsYXlSZWYuYXR0YWNoKHBvcnRhbCk7XG4gICAgdGhpcy5fZm9yd2FyZENvbnRlbnRWYWx1ZXModGhpcy5fY29tcG9uZW50UmVmLmluc3RhbmNlKTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb24gb25jZSB0aGUgdGltZXBpY2tlciBoYXMgcmVuZGVyZWQuIE9ubHkgcmVsZXZhbnQgaW4gZHJvcGRvd24gbW9kZS5cbiAgICBpZiAoIWlzRGlhbG9nKSB7XG4gICAgICB0aGlzLl9uZ1pvbmUub25TdGFibGVcbiAgICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiBvdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBEZXN0cm95cyB0aGUgY3VycmVudCBvdmVybGF5LiAqL1xuICBwcml2YXRlIF9kZXN0cm95T3ZlcmxheSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5fY29tcG9uZW50UmVmID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKiogR2V0cyBhIHBvc2l0aW9uIHN0cmF0ZWd5IHRoYXQgd2lsbCBvcGVuIHRoZSB0aW1lcGlja2VyIGFzIGEgZHJvcGRvd24uICovXG4gIHByaXZhdGUgX2dldERpYWxvZ1N0cmF0ZWd5KCkge1xuICAgIHJldHVybiB0aGlzLl9vdmVybGF5XG4gICAgICAucG9zaXRpb24oKVxuICAgICAgLmdsb2JhbCgpXG4gICAgICAuY2VudGVySG9yaXpvbnRhbGx5KClcbiAgICAgIC5jZW50ZXJWZXJ0aWNhbGx5KCk7XG4gIH1cblxuICAvKiogR2V0cyBhIHBvc2l0aW9uIHN0cmF0ZWd5IHRoYXQgd2lsbCBvcGVuIHRoZSB0aW1lcGlja2VyIGFzIGEgZHJvcGRvd24uICovXG4gIHByaXZhdGUgX2dldERyb3Bkb3duU3RyYXRlZ3koKSB7XG4gICAgY29uc3Qgc3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5XG4gICAgICAucG9zaXRpb24oKVxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy50aW1lcGlja2VySW5wdXQuZ2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpKVxuICAgICAgLndpdGhUcmFuc2Zvcm1PcmlnaW5PbignLm1hdC10aW1lcGlja2VyLWNvbnRlbnQnKVxuICAgICAgLndpdGhGbGV4aWJsZURpbWVuc2lvbnMoZmFsc2UpXG4gICAgICAud2l0aFZpZXdwb3J0TWFyZ2luKDgpXG4gICAgICAud2l0aExvY2tlZFBvc2l0aW9uKCk7XG5cbiAgICByZXR1cm4gdGhpcy5fc2V0Q29ubmVjdGVkUG9zaXRpb25zKHN0cmF0ZWd5KTtcbiAgfVxuXG4gIC8qKiBTZXRzIHRoZSBwb3NpdGlvbnMgb2YgdGhlIHRpbWVwaWNrZXIgaW4gZHJvcGRvd24gbW9kZSBiYXNlZCBvbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiAqL1xuICBwcml2YXRlIF9zZXRDb25uZWN0ZWRQb3NpdGlvbnMoXG4gICAgc3RyYXRlZ3k6IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSxcbiAgKTogRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5IHtcbiAgICBjb25zdCBwcmltYXJ5WCA9IHRoaXMueFBvc2l0aW9uID09PSAnZW5kJyA/ICdlbmQnIDogJ3N0YXJ0JztcbiAgICBjb25zdCBzZWNvbmRhcnlYID0gcHJpbWFyeVggPT09ICdzdGFydCcgPyAnZW5kJyA6ICdzdGFydCc7XG4gICAgY29uc3QgcHJpbWFyeVkgPSB0aGlzLnlQb3NpdGlvbiA9PT0gJ2Fib3ZlJyA/ICdib3R0b20nIDogJ3RvcCc7XG4gICAgY29uc3Qgc2Vjb25kYXJ5WSA9IHByaW1hcnlZID09PSAndG9wJyA/ICdib3R0b20nIDogJ3RvcCc7XG5cbiAgICByZXR1cm4gc3RyYXRlZ3kud2l0aFBvc2l0aW9ucyhbXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6IHByaW1hcnlYLFxuICAgICAgICBvcmlnaW5ZOiBzZWNvbmRhcnlZLFxuICAgICAgICBvdmVybGF5WDogcHJpbWFyeVgsXG4gICAgICAgIG92ZXJsYXlZOiBwcmltYXJ5WSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6IHByaW1hcnlYLFxuICAgICAgICBvcmlnaW5ZOiBwcmltYXJ5WSxcbiAgICAgICAgb3ZlcmxheVg6IHByaW1hcnlYLFxuICAgICAgICBvdmVybGF5WTogc2Vjb25kYXJ5WSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6IHNlY29uZGFyeVgsXG4gICAgICAgIG9yaWdpblk6IHNlY29uZGFyeVksXG4gICAgICAgIG92ZXJsYXlYOiBzZWNvbmRhcnlYLFxuICAgICAgICBvdmVybGF5WTogcHJpbWFyeVksXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBvcmlnaW5YOiBzZWNvbmRhcnlYLFxuICAgICAgICBvcmlnaW5ZOiBwcmltYXJ5WSxcbiAgICAgICAgb3ZlcmxheVg6IHNlY29uZGFyeVgsXG4gICAgICAgIG92ZXJsYXlZOiBzZWNvbmRhcnlZLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuXG4gIC8qKiBHZXRzIGFuIG9ic2VydmFibGUgdGhhdCB3aWxsIGVtaXQgd2hlbiB0aGUgb3ZlcmxheSBpcyBzdXBwb3NlZCB0byBiZSBjbG9zZWQuICovXG4gIHByaXZhdGUgX2dldENsb3NlU3RyZWFtKFxuICAgIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYsXG4gICk6IE9ic2VydmFibGU8dm9pZCB8IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50PiB7XG4gICAgcmV0dXJuIG1lcmdlKFxuICAgICAgb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCksXG4gICAgICBvdmVybGF5UmVmLmRldGFjaG1lbnRzKCksXG4gICAgICBvdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5waXBlKFxuICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gQ2xvc2luZyBvbiBhbHQgKyB1cCBpcyBvbmx5IHZhbGlkIHdoZW4gdGhlcmUncyBhbiBpbnB1dCBhc3NvY2lhdGVkIHdpdGggdGhlIHRpbWVwaWNrZXIuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChldmVudC5rZXlDb2RlID09PSBFU0NBUEUgJiYgIWhhc01vZGlmaWVyS2V5KGV2ZW50KSkgfHxcbiAgICAgICAgICAgICh0aGlzLnRpbWVwaWNrZXJJbnB1dCAmJlxuICAgICAgICAgICAgICBoYXNNb2RpZmllcktleShldmVudCwgJ2FsdEtleScpICYmXG4gICAgICAgICAgICAgIGV2ZW50LmtleUNvZGUgPT09IFVQX0FSUk9XKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgKSxcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class MatTimepickerContentLayout {
|
|
4
|
-
constructor() {
|
|
5
|
-
/** Layout orientation. */
|
|
6
|
-
this.orientation = 'vertical';
|
|
7
|
-
}
|
|
8
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: MatTimepickerContentLayout, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
9
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.4", type: MatTimepickerContentLayout, isStandalone: true, selector: "mat-timepicker-content-layout", inputs: { title: "title", orientation: "orientation" }, host: { properties: { "class.mat-timepicker-content-layout-horizontal": "orientation === \"horizontal\"", "class.mat-timepicker-content-layout-vertical": "orientation === \"vertical\"" }, classAttribute: "mat-timepicker-content-layout" }, exportAs: ["matTimepickerContent"], ngImport: i0, template: "<h6 class=\"mat-timepicker-content-layout-title\">{{ title }}</h6>\n\n<div class=\"mat-timepicker-content-layout-container\">\n <div class=\"mat-timepicker-content-layout-values\">\n <div class=\"mat-timepicker-content-layout-hours\">\n <ng-content select=\"[hours]\"></ng-content>\n </div>\n <span class=\"mat-timepicker-content-layout-separator\">:</span>\n <div class=\"mat-timepicker-content-layout-minutes\">\n <ng-content select=\"[minutes]\"></ng-content>\n </div>\n\n <ng-content select=\"[mat-time-period]\"></ng-content>\n </div>\n\n <ng-content></ng-content>\n</div>\n", styles: ["h6.mat-timepicker-content-layout-title{margin-top:0rem;margin-bottom:1.25rem;letter-spacing:.05rem}.mat-timepicker-content-layout-values{display:flex;justify-content:center}.mat-time-period{margin-left:.75rem}.mat-timepicker-content-layout-horizontal h6.mat-timepicker-content-layout-title{margin-bottom:0}.mat-timepicker-content-layout-horizontal .mat-timepicker-content-layout-container{display:flex;gap:4rem;align-items:center}.mat-timepicker-content-layout-horizontal .mat-timepicker-content-layout-values{flex-wrap:wrap}.mat-timepicker-content-layout-horizontal .mat-time-period{margin-top:.75rem;margin-left:0}.mat-timepicker-content-layout-hours,.mat-timepicker-content-layout-minutes{width:6rem}.mat-timepicker-content-layout-separator{display:flex;justify-content:center;align-self:center;width:1.5rem;height:1.75rem;font-weight:500}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
10
|
-
}
|
|
11
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.4", ngImport: i0, type: MatTimepickerContentLayout, decorators: [{
|
|
12
|
-
type: Component,
|
|
13
|
-
args: [{ selector: 'mat-timepicker-content-layout', standalone: true, exportAs: 'matTimepickerContent', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
14
|
-
class: 'mat-timepicker-content-layout',
|
|
15
|
-
'[class.mat-timepicker-content-layout-horizontal]': 'orientation === "horizontal"',
|
|
16
|
-
'[class.mat-timepicker-content-layout-vertical]': 'orientation === "vertical"',
|
|
17
|
-
}, template: "<h6 class=\"mat-timepicker-content-layout-title\">{{ title }}</h6>\n\n<div class=\"mat-timepicker-content-layout-container\">\n <div class=\"mat-timepicker-content-layout-values\">\n <div class=\"mat-timepicker-content-layout-hours\">\n <ng-content select=\"[hours]\"></ng-content>\n </div>\n <span class=\"mat-timepicker-content-layout-separator\">:</span>\n <div class=\"mat-timepicker-content-layout-minutes\">\n <ng-content select=\"[minutes]\"></ng-content>\n </div>\n\n <ng-content select=\"[mat-time-period]\"></ng-content>\n </div>\n\n <ng-content></ng-content>\n</div>\n", styles: ["h6.mat-timepicker-content-layout-title{margin-top:0rem;margin-bottom:1.25rem;letter-spacing:.05rem}.mat-timepicker-content-layout-values{display:flex;justify-content:center}.mat-time-period{margin-left:.75rem}.mat-timepicker-content-layout-horizontal h6.mat-timepicker-content-layout-title{margin-bottom:0}.mat-timepicker-content-layout-horizontal .mat-timepicker-content-layout-container{display:flex;gap:4rem;align-items:center}.mat-timepicker-content-layout-horizontal .mat-timepicker-content-layout-values{flex-wrap:wrap}.mat-timepicker-content-layout-horizontal .mat-time-period{margin-top:.75rem;margin-left:0}.mat-timepicker-content-layout-hours,.mat-timepicker-content-layout-minutes{width:6rem}.mat-timepicker-content-layout-separator{display:flex;justify-content:center;align-self:center;width:1.5rem;height:1.75rem;font-weight:500}\n"] }]
|
|
18
|
-
}], propDecorators: { title: [{
|
|
19
|
-
type: Input
|
|
20
|
-
}], orientation: [{
|
|
21
|
-
type: Input
|
|
22
|
-
}] } });
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXBpY2tlci1jb250ZW50LWxheW91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21hdC10aW1lcGlja2VyL3NyYy9saWIvdGltZXBpY2tlci1jb250ZW50LWxheW91dC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL21hdC10aW1lcGlja2VyL3NyYy9saWIvdGltZXBpY2tlci1jb250ZW50LWxheW91dC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDOztBQWtCN0YsTUFBTSxPQUFPLDBCQUEwQjtJQWR2QztRQWtCRSwwQkFBMEI7UUFDakIsZ0JBQVcsR0FBMEIsVUFBVSxDQUFDO0tBQzFEOzhHQU5ZLDBCQUEwQjtrR0FBMUIsMEJBQTBCLG9hQ2xCdkMsd21CQWlCQTs7MkZEQ2EsMEJBQTBCO2tCQWR0QyxTQUFTOytCQUNFLCtCQUErQixjQUM3QixJQUFJLFlBR04sc0JBQXNCLG1CQUNmLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUksUUFDL0I7d0JBQ0osS0FBSyxFQUFFLCtCQUErQjt3QkFDdEMsa0RBQWtELEVBQUUsOEJBQThCO3dCQUNsRixnREFBZ0QsRUFBRSw0QkFBNEI7cUJBQy9FOzhCQUlRLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFRpbWVwaWNrZXJPcmllbnRhdGlvbiB9IGZyb20gJy4vb3JpZW50YXRpb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtdGltZXBpY2tlci1jb250ZW50LWxheW91dCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlVXJsOiAnLi90aW1lcGlja2VyLWNvbnRlbnQtbGF5b3V0Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90aW1lcGlja2VyLWNvbnRlbnQtbGF5b3V0LnNjc3MnXSxcbiAgZXhwb3J0QXM6ICdtYXRUaW1lcGlja2VyQ29udGVudCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdtYXQtdGltZXBpY2tlci1jb250ZW50LWxheW91dCcsXG4gICAgJ1tjbGFzcy5tYXQtdGltZXBpY2tlci1jb250ZW50LWxheW91dC1ob3Jpem9udGFsXSc6ICdvcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCInLFxuICAgICdbY2xhc3MubWF0LXRpbWVwaWNrZXItY29udGVudC1sYXlvdXQtdmVydGljYWxdJzogJ29yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCInLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBNYXRUaW1lcGlja2VyQ29udGVudExheW91dCB7XG4gIC8qKiBDb250ZW50IHRpdGxlLiAqL1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xuXG4gIC8qKiBMYXlvdXQgb3JpZW50YXRpb24uICovXG4gIEBJbnB1dCgpIG9yaWVudGF0aW9uOiBUaW1lcGlja2VyT3JpZW50YXRpb24gPSAndmVydGljYWwnO1xufVxuIiwiPGg2IGNsYXNzPVwibWF0LXRpbWVwaWNrZXItY29udGVudC1sYXlvdXQtdGl0bGVcIj57eyB0aXRsZSB9fTwvaDY+XG5cbjxkaXYgY2xhc3M9XCJtYXQtdGltZXBpY2tlci1jb250ZW50LWxheW91dC1jb250YWluZXJcIj5cbiAgPGRpdiBjbGFzcz1cIm1hdC10aW1lcGlja2VyLWNvbnRlbnQtbGF5b3V0LXZhbHVlc1wiPlxuICAgIDxkaXYgY2xhc3M9XCJtYXQtdGltZXBpY2tlci1jb250ZW50LWxheW91dC1ob3Vyc1wiPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2hvdXJzXVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBjbGFzcz1cIm1hdC10aW1lcGlja2VyLWNvbnRlbnQtbGF5b3V0LXNlcGFyYXRvclwiPiYjNTg7PC9zcGFuPlxuICAgIDxkaXYgY2xhc3M9XCJtYXQtdGltZXBpY2tlci1jb250ZW50LWxheW91dC1taW51dGVzXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWludXRlc11cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0LXRpbWUtcGVyaW9kXVwiPjwvbmctY29udGVudD5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=
|