@dhutaryan/ngx-mat-timepicker 12.3.1 → 13.0.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/{esm2015/lib/adapter/index.js → esm2020/lib/adapter/index.mjs} +5 -5
- package/esm2020/lib/adapter/native-date-time-adapter.mjs +130 -0
- package/esm2020/lib/clock-dials.mjs +82 -0
- package/esm2020/lib/hours-clock-dial.mjs +183 -0
- package/esm2020/lib/minutes-clock-dial.mjs +155 -0
- package/{esm2015/lib/time-face-base.js → esm2020/lib/time-face-base.mjs} +4 -4
- package/esm2020/lib/time-input-base.mjs +70 -0
- package/esm2020/lib/time-inputs.mjs +170 -0
- package/esm2020/lib/time-period.mjs +63 -0
- package/{esm2015/lib/time-selection-model.js → esm2020/lib/time-selection-model.mjs} +7 -7
- package/esm2020/lib/timepicker-actions.mjs +130 -0
- package/esm2020/lib/timepicker-base.mjs +393 -0
- package/esm2020/lib/timepicker-content-layout.mjs +23 -0
- package/esm2020/lib/timepicker-content.mjs +101 -0
- package/{esm2015/lib/timepicker-input-base.js → esm2020/lib/timepicker-input-base.mjs} +4 -4
- package/{esm2015/lib/timepicker-input.js → esm2020/lib/timepicker-input.mjs} +4 -4
- package/{esm2015/lib/timepicker-intl.js → esm2020/lib/timepicker-intl.mjs} +4 -4
- package/esm2020/lib/timepicker-toggle.mjs +68 -0
- package/{esm2015/lib/timepicker.js → esm2020/lib/timepicker.mjs} +4 -4
- package/{esm2015/lib/timepicker.module.js → esm2020/lib/timepicker.module.mjs} +5 -5
- package/fesm2015/dhutaryan-ngx-mat-timepicker.mjs +2596 -0
- package/fesm2015/dhutaryan-ngx-mat-timepicker.mjs.map +1 -0
- package/{fesm2015/dhutaryan-ngx-mat-timepicker.js → fesm2020/dhutaryan-ngx-mat-timepicker.mjs} +127 -216
- package/fesm2020/dhutaryan-ngx-mat-timepicker.mjs.map +1 -0
- package/lib/timepicker-actions.d.ts +1 -1
- package/lib/timepicker-content.d.ts +1 -1
- package/package.json +23 -10
- package/bundles/dhutaryan-ngx-mat-timepicker.umd.js +0 -3251
- package/bundles/dhutaryan-ngx-mat-timepicker.umd.js.map +0 -1
- package/esm2015/lib/adapter/native-date-time-adapter.js +0 -127
- package/esm2015/lib/clock-dials.js +0 -92
- package/esm2015/lib/hours-clock-dial.js +0 -191
- package/esm2015/lib/minutes-clock-dial.js +0 -163
- package/esm2015/lib/time-input-base.js +0 -71
- package/esm2015/lib/time-inputs.js +0 -177
- package/esm2015/lib/time-period.js +0 -70
- package/esm2015/lib/timepicker-actions.js +0 -145
- package/esm2015/lib/timepicker-base.js +0 -402
- package/esm2015/lib/timepicker-content-layout.js +0 -31
- package/esm2015/lib/timepicker-content.js +0 -112
- package/esm2015/lib/timepicker-toggle.js +0 -76
- package/fesm2015/dhutaryan-ngx-mat-timepicker.js.map +0 -1
- /package/{esm2015/dhutaryan-ngx-mat-timepicker.js → esm2020/dhutaryan-ngx-mat-timepicker.mjs} +0 -0
- /package/{esm2015/lib/adapter/time-adapter.js → esm2020/lib/adapter/time-adapter.mjs} +0 -0
- /package/{esm2015/lib/clock-dial-adnimation.js → esm2020/lib/clock-dial-adnimation.mjs} +0 -0
- /package/{esm2015/lib/orientation.js → esm2020/lib/orientation.mjs} +0 -0
- /package/{esm2015/lib/timepicker-actions-default.js → esm2020/lib/timepicker-actions-default.mjs} +0 -0
- /package/{esm2015/lib/timepicker-animations.js → esm2020/lib/timepicker-animations.mjs} +0 -0
- /package/{esm2015/lib/timepicker-scroll-strategy.js → esm2020/lib/timepicker-scroll-strategy.mjs} +0 -0
- /package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
|
@@ -7,13 +7,13 @@ export * from './time-adapter';
|
|
|
7
7
|
export * from './native-date-time-adapter';
|
|
8
8
|
export class MatNativeDateTimeModule {
|
|
9
9
|
}
|
|
10
|
-
MatNativeDateTimeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
11
|
-
MatNativeDateTimeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "
|
|
12
|
-
MatNativeDateTimeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
10
|
+
MatNativeDateTimeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MatNativeDateTimeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
11
|
+
MatNativeDateTimeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MatNativeDateTimeModule, imports: [PlatformModule] });
|
|
12
|
+
MatNativeDateTimeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MatNativeDateTimeModule, providers: [
|
|
13
13
|
{ provide: TimeAdapter, useClass: NativeDateTimeAdapter },
|
|
14
14
|
MAT_TIME_LOCALE_PROVIDER,
|
|
15
15
|
], imports: [[PlatformModule]] });
|
|
16
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MatNativeDateTimeModule, decorators: [{
|
|
17
17
|
type: NgModule,
|
|
18
18
|
args: [{
|
|
19
19
|
imports: [PlatformModule],
|
|
@@ -23,4 +23,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
23
23
|
],
|
|
24
24
|
}]
|
|
25
25
|
}] });
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXQtdGltZXBpY2tlci9zcmMvbGliL2FkYXB0ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUVuRSxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsNEJBQTRCLENBQUM7QUFTM0MsTUFBTSxPQUFPLHVCQUF1Qjs7b0hBQXZCLHVCQUF1QjtxSEFBdkIsdUJBQXVCLFlBTnhCLGNBQWM7cUhBTWIsdUJBQXVCLGFBTHZCO1FBQ1QsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRTtRQUN6RCx3QkFBd0I7S0FDekIsWUFKUSxDQUFDLGNBQWMsQ0FBQzsyRkFNZCx1QkFBdUI7a0JBUG5DLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO29CQUN6QixTQUFTLEVBQUU7d0JBQ1QsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRTt3QkFDekQsd0JBQXdCO3FCQUN6QjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYXRmb3JtTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1BVF9USU1FX0xPQ0FMRV9QUk9WSURFUiwgVGltZUFkYXB0ZXIgfSBmcm9tICcuL3RpbWUtYWRhcHRlcic7XG5pbXBvcnQgeyBOYXRpdmVEYXRlVGltZUFkYXB0ZXIgfSBmcm9tICcuL25hdGl2ZS1kYXRlLXRpbWUtYWRhcHRlcic7XG5cbmV4cG9ydCAqIGZyb20gJy4vdGltZS1hZGFwdGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbmF0aXZlLWRhdGUtdGltZS1hZGFwdGVyJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1BsYXRmb3JtTW9kdWxlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgeyBwcm92aWRlOiBUaW1lQWRhcHRlciwgdXNlQ2xhc3M6IE5hdGl2ZURhdGVUaW1lQWRhcHRlciB9LFxuICAgIE1BVF9USU1FX0xPQ0FMRV9QUk9WSURFUixcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0TmF0aXZlRGF0ZVRpbWVNb2R1bGUge31cbiJdfQ==
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { Inject, Injectable, Optional } from '@angular/core';
|
|
2
|
+
import { MAT_TIME_LOCALE, TimeAdapter } from './time-adapter';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Matches strings that have the form of a valid RFC 3339 string
|
|
6
|
+
* (https://tools.ietf.org/html/rfc3339). Note that the string may not actually be a valid date
|
|
7
|
+
* because the regex will match strings an with out of bounds month, date, etc.
|
|
8
|
+
*/
|
|
9
|
+
const ISO_8601_REGEX = /^\d{4}-\d{2}-\d{2}(?:T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|(?:(?:\+|-)\d{2}:\d{2}))?)?$/;
|
|
10
|
+
/** Adapts the native JS Date for components that work with time. */
|
|
11
|
+
export class NativeDateTimeAdapter extends TimeAdapter {
|
|
12
|
+
constructor(matTimeLocale) {
|
|
13
|
+
super();
|
|
14
|
+
super.setLocale(matTimeLocale);
|
|
15
|
+
}
|
|
16
|
+
now() {
|
|
17
|
+
return new Date();
|
|
18
|
+
}
|
|
19
|
+
parse(value, parseFormat) {
|
|
20
|
+
// We have no way using the native JS Date to set the parse format or locale, so we ignore these
|
|
21
|
+
// parameters.
|
|
22
|
+
if (typeof value == 'number') {
|
|
23
|
+
return new Date(value);
|
|
24
|
+
}
|
|
25
|
+
const { hour, minute } = this.parseTime(value);
|
|
26
|
+
const date = new Date();
|
|
27
|
+
date.setHours(Number(hour));
|
|
28
|
+
date.setMinutes(Number(minute));
|
|
29
|
+
return value ? new Date(date) : null;
|
|
30
|
+
}
|
|
31
|
+
parseTime(value) {
|
|
32
|
+
const [hour, minute] = value
|
|
33
|
+
.replace(/(\sam|\spm|\sAM|\sPM|am|pm|AM|PM)/g, '')
|
|
34
|
+
.split(':');
|
|
35
|
+
return { hour, minute };
|
|
36
|
+
}
|
|
37
|
+
getHour(date) {
|
|
38
|
+
return date.getHours();
|
|
39
|
+
}
|
|
40
|
+
getMinute(date) {
|
|
41
|
+
return date.getMinutes();
|
|
42
|
+
}
|
|
43
|
+
updateHour(date, hour) {
|
|
44
|
+
const copy = new Date(date.getTime());
|
|
45
|
+
copy.setHours(hour);
|
|
46
|
+
return copy;
|
|
47
|
+
}
|
|
48
|
+
updateMinute(date, minute) {
|
|
49
|
+
const copy = new Date(date.getTime());
|
|
50
|
+
copy.setMinutes(minute);
|
|
51
|
+
return copy;
|
|
52
|
+
}
|
|
53
|
+
getPeriod(date) {
|
|
54
|
+
return date.getHours() < 12 ? 'am' : 'pm';
|
|
55
|
+
}
|
|
56
|
+
format(date, displayFormat) {
|
|
57
|
+
if (!this.isValid(date)) {
|
|
58
|
+
throw Error('NativeDateTimeAdapter: Cannot format invalid date.');
|
|
59
|
+
}
|
|
60
|
+
const dtf = new Intl.DateTimeFormat(this.locale, {
|
|
61
|
+
...displayFormat,
|
|
62
|
+
timeZone: 'utc',
|
|
63
|
+
});
|
|
64
|
+
return this._format(dtf, date);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Returns the given value if given a valid Date or null. Deserializes valid ISO 8601 strings
|
|
68
|
+
* (https://www.ietf.org/rfc/rfc3339.txt) into valid Dates and empty string into null. Returns an
|
|
69
|
+
* invalid date for all other values.
|
|
70
|
+
*/
|
|
71
|
+
deserialize(value) {
|
|
72
|
+
if (typeof value === 'string') {
|
|
73
|
+
if (!value) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
// The `Date` constructor accepts formats other than ISO 8601, so we need to make sure the
|
|
77
|
+
// string is the right format first.
|
|
78
|
+
if (ISO_8601_REGEX.test(value)) {
|
|
79
|
+
const date = new Date(value);
|
|
80
|
+
if (this.isValid(date)) {
|
|
81
|
+
return date;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return super.deserialize(value);
|
|
86
|
+
}
|
|
87
|
+
isTimeInstance(obj) {
|
|
88
|
+
return obj instanceof Date;
|
|
89
|
+
}
|
|
90
|
+
isValid(date) {
|
|
91
|
+
return !isNaN(date.getTime());
|
|
92
|
+
}
|
|
93
|
+
invalid() {
|
|
94
|
+
return new Date(NaN);
|
|
95
|
+
}
|
|
96
|
+
compareTime(first, second) {
|
|
97
|
+
return (first.getHours() - second.getHours() ||
|
|
98
|
+
first.getMinutes() - second.getMinutes());
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* When converting Date object to string, javascript built-in functions may return wrong
|
|
102
|
+
* results because it applies its internal DST rules. The DST rules around the world change
|
|
103
|
+
* very frequently, and the current valid rule is not always valid in previous years though.
|
|
104
|
+
* We work around this problem building a new Date object which has its internal UTC
|
|
105
|
+
* representation with the local date and time.
|
|
106
|
+
* @param dtf Intl.DateTimeFormat object, containing the desired string format. It must have
|
|
107
|
+
* timeZone set to 'utc' to work fine.
|
|
108
|
+
* @param date Date from which we want to get the string representation according to dtf
|
|
109
|
+
* @returns A Date object with its UTC representation based on the passed in date info
|
|
110
|
+
*/
|
|
111
|
+
_format(dtf, date) {
|
|
112
|
+
// Passing the year to the constructor causes year numbers <100 to be converted to 19xx.
|
|
113
|
+
// To work around this we use `setUTCFullYear` and `setUTCHours` instead.
|
|
114
|
+
const d = new Date();
|
|
115
|
+
d.setUTCFullYear(date.getFullYear(), date.getMonth(), date.getDate());
|
|
116
|
+
d.setUTCHours(date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
|
|
117
|
+
return dtf.format(d);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
NativeDateTimeAdapter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NativeDateTimeAdapter, deps: [{ token: MAT_TIME_LOCALE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
121
|
+
NativeDateTimeAdapter.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NativeDateTimeAdapter });
|
|
122
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: NativeDateTimeAdapter, decorators: [{
|
|
123
|
+
type: Injectable
|
|
124
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
125
|
+
type: Optional
|
|
126
|
+
}, {
|
|
127
|
+
type: Inject,
|
|
128
|
+
args: [MAT_TIME_LOCALE]
|
|
129
|
+
}] }]; } });
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlLWRhdGUtdGltZS1hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0LXRpbWVwaWNrZXIvc3JjL2xpYi9hZGFwdGVyL25hdGl2ZS1kYXRlLXRpbWUtYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFHOUQ7Ozs7R0FJRztBQUNILE1BQU0sY0FBYyxHQUNsQixvRkFBb0YsQ0FBQztBQUV2RixvRUFBb0U7QUFFcEUsTUFBTSxPQUFPLHFCQUFzQixTQUFRLFdBQWlCO0lBQzFELFlBQWlELGFBQXFCO1FBQ3BFLEtBQUssRUFBRSxDQUFDO1FBQ1IsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsR0FBRztRQUNELE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQVUsRUFBRSxXQUFpQjtRQUNqQyxnR0FBZ0c7UUFDaEcsY0FBYztRQUNkLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxFQUFFO1lBQzVCLE9BQU8sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEI7UUFFRCxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7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UUFDbkMsT0FBTyxDQUNMLEtBQUssQ0FBQyxRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFO1lBQ3BDLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQ3pDLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNLLE9BQU8sQ0FBQyxHQUF3QixFQUFFLElBQVU7UUFDbEQsd0ZBQXdGO1FBQ3hGLHlFQUF5RTtRQUN6RSxNQUFNLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUMsV0FBVyxDQUNYLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFDZixJQUFJLENBQUMsVUFBVSxFQUFFLEVBQ2pCLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFDakIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUN2QixDQUFDO1FBQ0YsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7O2tIQXhJVSxxQkFBcUIsa0JBQ0EsZUFBZTtzSEFEcEMscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVU7OzBCQUVJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTUFUX1RJTUVfTE9DQUxFLCBUaW1lQWRhcHRlciB9IGZyb20gJy4vdGltZS1hZGFwdGVyJztcbmltcG9ydCB7IE1hdFRpbWVQZXJpb2RUeXBlIH0gZnJvbSAnLi4vdGltZS1wZXJpb2QnO1xuXG4vKipcbiAqIE1hdGNoZXMgc3RyaW5ncyB0aGF0IGhhdmUgdGhlIGZvcm0gb2YgYSB2YWxpZCBSRkMgMzMzOSBzdHJpbmdcbiAqIChodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSkuIE5vdGUgdGhhdCB0aGUgc3RyaW5nIG1heSBub3QgYWN0dWFsbHkgYmUgYSB2YWxpZCBkYXRlXG4gKiBiZWNhdXNlIHRoZSByZWdleCB3aWxsIG1hdGNoIHN0cmluZ3MgYW4gd2l0aCBvdXQgb2YgYm91bmRzIG1vbnRoLCBkYXRlLCBldGMuXG4gKi9cbmNvbnN0IElTT184NjAxX1JFR0VYID1cbiAgL15cXGR7NH0tXFxkezJ9LVxcZHsyfSg/OlRcXGR7Mn06XFxkezJ9OlxcZHsyfSg/OlxcLlxcZCspPyg/Olp8KD86KD86XFwrfC0pXFxkezJ9OlxcZHsyfSkpPyk/JC87XG5cbi8qKiBBZGFwdHMgdGhlIG5hdGl2ZSBKUyBEYXRlIGZvciBjb21wb25lbnRzIHRoYXQgd29yayB3aXRoIHRpbWUuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmF0aXZlRGF0ZVRpbWVBZGFwdGVyIGV4dGVuZHMgVGltZUFkYXB0ZXI8RGF0ZT4ge1xuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KE1BVF9USU1FX0xPQ0FMRSkgbWF0VGltZUxvY2FsZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICBzdXBlci5zZXRMb2NhbGUobWF0VGltZUxvY2FsZSk7XG4gIH1cblxuICBub3coKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCk7XG4gIH1cblxuICBwYXJzZSh2YWx1ZTogYW55LCBwYXJzZUZvcm1hdD86IGFueSk6IERhdGUgfCBudWxsIHtcbiAgICAvLyBXZSBoYXZlIG5vIHdheSB1c2luZyB0aGUgbmF0aXZlIEpTIERhdGUgdG8gc2V0IHRoZSBwYXJzZSBmb3JtYXQgb3IgbG9jYWxlLCBzbyB3ZSBpZ25vcmUgdGhlc2VcbiAgICAvLyBwYXJhbWV0ZXJzLlxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBob3VyLCBtaW51dGUgfSA9IHRoaXMucGFyc2VUaW1lKHZhbHVlKTtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBkYXRlLnNldEhvdXJzKE51bWJlcihob3VyKSk7XG4gICAgZGF0ZS5zZXRNaW51dGVzKE51bWJlcihtaW51dGUpKTtcblxuICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKGRhdGUpIDogbnVsbDtcbiAgfVxuXG4gIHBhcnNlVGltZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgY29uc3QgW2hvdXIsIG1pbnV0ZV0gPSB2YWx1ZVxuICAgICAgLnJlcGxhY2UoLyhcXHNhbXxcXHNwbXxcXHNBTXxcXHNQTXxhbXxwbXxBTXxQTSkvZywgJycpXG4gICAgICAuc3BsaXQoJzonKTtcblxuICAgIHJldHVybiB7IGhvdXIsIG1pbnV0ZSB9O1xuICB9XG5cbiAgZ2V0SG91cihkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gZGF0ZS5nZXRIb3VycygpO1xuICB9XG5cbiAgZ2V0TWludXRlKGRhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIHJldHVybiBkYXRlLmdldE1pbnV0ZXMoKTtcbiAgfVxuXG4gIHVwZGF0ZUhvdXIoZGF0ZTogRGF0ZSwgaG91cjogbnVtYmVyKTogRGF0ZSB7XG4gICAgY29uc3QgY29weSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpKTtcbiAgICBjb3B5LnNldEhvdXJzKGhvdXIpO1xuXG4gICAgcmV0dXJuIGNvcHk7XG4gIH1cblxuICB1cGRhdGVNaW51dGUoZGF0ZTogRGF0ZSwgbWludXRlOiBudW1iZXIpOiBEYXRlIHtcbiAgICBjb25zdCBjb3B5ID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkpO1xuICAgIGNvcHkuc2V0TWludXRlcyhtaW51dGUpO1xuXG4gICAgcmV0dXJuIGNvcHk7XG4gIH1cblxuICBnZXRQZXJpb2QoZGF0ZTogRGF0ZSk6IE1hdFRpbWVQZXJpb2RUeXBlIHtcbiAgICByZXR1cm4gZGF0ZS5nZXRIb3VycygpIDwgMTIgPyAnYW0nIDogJ3BtJztcbiAgfVxuXG4gIGZvcm1hdChkYXRlOiBEYXRlLCBkaXNwbGF5Rm9ybWF0OiBPYmplY3QpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKGRhdGUpKSB7XG4gICAgICB0aHJvdyBFcnJvcignTmF0aXZlRGF0ZVRpbWVBZGFwdGVyOiBDYW5ub3QgZm9ybWF0IGludmFsaWQgZGF0ZS4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBkdGYgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwge1xuICAgICAgLi4uZGlzcGxheUZvcm1hdCxcbiAgICAgIHRpbWVab25lOiAndXRjJyxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLl9mb3JtYXQoZHRmLCBkYXRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBnaXZlbiB2YWx1ZSBpZiBnaXZlbiBhIHZhbGlkIERhdGUgb3IgbnVsbC4gRGVzZXJpYWxpemVzIHZhbGlkIElTTyA4NjAxIHN0cmluZ3NcbiAgICogKGh0dHBzOi8vd3d3LmlldGYub3JnL3JmYy9yZmMzMzM5LnR4dCkgaW50byB2YWxpZCBEYXRlcyBhbmQgZW1wdHkgc3RyaW5nIGludG8gbnVsbC4gUmV0dXJucyBhblxuICAgKiBpbnZhbGlkIGRhdGUgZm9yIGFsbCBvdGhlciB2YWx1ZXMuXG4gICAqL1xuICBvdmVycmlkZSBkZXNlcmlhbGl6ZSh2YWx1ZTogYW55KTogRGF0ZSB8IG51bGwge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgLy8gVGhlIGBEYXRlYCBjb25zdHJ1Y3RvciBhY2NlcHRzIGZvcm1hdHMgb3RoZXIgdGhhbiBJU08gODYwMSwgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlXG4gICAgICAvLyBzdHJpbmcgaXMgdGhlIHJpZ2h0IGZvcm1hdCBmaXJzdC5cbiAgICAgIGlmIChJU09fODYwMV9SRUdFWC50ZXN0KHZhbHVlKSkge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKGRhdGUpKSB7XG4gICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmRlc2VyaWFsaXplKHZhbHVlKTtcbiAgfVxuXG4gIGlzVGltZUluc3RhbmNlKG9iajogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIERhdGU7XG4gIH1cblxuICBpc1ZhbGlkKGRhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWlzTmFOKGRhdGUuZ2V0VGltZSgpKTtcbiAgfVxuXG4gIGludmFsaWQoKTogRGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKE5hTik7XG4gIH1cblxuICBjb21wYXJlVGltZShmaXJzdDogRGF0ZSwgc2Vjb25kOiBEYXRlKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKFxuICAgICAgZmlyc3QuZ2V0SG91cnMoKSAtIHNlY29uZC5nZXRIb3VycygpIHx8XG4gICAgICBmaXJzdC5nZXRNaW51dGVzKCkgLSBzZWNvbmQuZ2V0TWludXRlcygpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGNvbnZlcnRpbmcgRGF0ZSBvYmplY3QgdG8gc3RyaW5nLCBqYXZhc2NyaXB0IGJ1aWx0LWluIGZ1bmN0aW9ucyBtYXkgcmV0dXJuIHdyb25nXG4gICAqIHJlc3VsdHMgYmVjYXVzZSBpdCBhcHBsaWVzIGl0cyBpbnRlcm5hbCBEU1QgcnVsZXMuIFRoZSBEU1QgcnVsZXMgYXJvdW5kIHRoZSB3b3JsZCBjaGFuZ2VcbiAgICogdmVyeSBmcmVxdWVudGx5LCBhbmQgdGhlIGN1cnJlbnQgdmFsaWQgcnVsZSBpcyBub3QgYWx3YXlzIHZhbGlkIGluIHByZXZpb3VzIHllYXJzIHRob3VnaC5cbiAgICogV2Ugd29yayBhcm91bmQgdGhpcyBwcm9ibGVtIGJ1aWxkaW5nIGEgbmV3IERhdGUgb2JqZWN0IHdoaWNoIGhhcyBpdHMgaW50ZXJuYWwgVVRDXG4gICAqIHJlcHJlc2VudGF0aW9uIHdpdGggdGhlIGxvY2FsIGRhdGUgYW5kIHRpbWUuXG4gICAqIEBwYXJhbSBkdGYgSW50bC5EYXRlVGltZUZvcm1hdCBvYmplY3QsIGNvbnRhaW5pbmcgdGhlIGRlc2lyZWQgc3RyaW5nIGZvcm1hdC4gSXQgbXVzdCBoYXZlXG4gICAqICAgIHRpbWVab25lIHNldCB0byAndXRjJyB0byB3b3JrIGZpbmUuXG4gICAqIEBwYXJhbSBkYXRlIERhdGUgZnJvbSB3aGljaCB3ZSB3YW50IHRvIGdldCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFjY29yZGluZyB0byBkdGZcbiAgICogQHJldHVybnMgQSBEYXRlIG9iamVjdCB3aXRoIGl0cyBVVEMgcmVwcmVzZW50YXRpb24gYmFzZWQgb24gdGhlIHBhc3NlZCBpbiBkYXRlIGluZm9cbiAgICovXG4gIHByaXZhdGUgX2Zvcm1hdChkdGY6IEludGwuRGF0ZVRpbWVGb3JtYXQsIGRhdGU6IERhdGUpIHtcbiAgICAvLyBQYXNzaW5nIHRoZSB5ZWFyIHRvIHRoZSBjb25zdHJ1Y3RvciBjYXVzZXMgeWVhciBudW1iZXJzIDwxMDAgdG8gYmUgY29udmVydGVkIHRvIDE5eHguXG4gICAgLy8gVG8gd29yayBhcm91bmQgdGhpcyB3ZSB1c2UgYHNldFVUQ0Z1bGxZZWFyYCBhbmQgYHNldFVUQ0hvdXJzYCBpbnN0ZWFkLlxuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSgpO1xuICAgIGQuc2V0VVRDRnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICBkLnNldFVUQ0hvdXJzKFxuICAgICAgZGF0ZS5nZXRIb3VycygpLFxuICAgICAgZGF0ZS5nZXRNaW51dGVzKCksXG4gICAgICBkYXRlLmdldFNlY29uZHMoKSxcbiAgICAgIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKClcbiAgICApO1xuICAgIHJldHVybiBkdGYuZm9ybWF0KGQpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Component, ChangeDetectionStrategy, ViewEncapsulation, Optional, Input, } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, Subscription, take } from 'rxjs';
|
|
3
|
+
import { MatTimeFaceBase } from './time-face-base';
|
|
4
|
+
import { withZeroPrefixMeridiem } from './time-input-base';
|
|
5
|
+
import { enterLeaveAnimation } from './clock-dial-adnimation';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "./timepicker-intl";
|
|
8
|
+
import * as i2 from "./adapter";
|
|
9
|
+
import * as i3 from "./timepicker-content-layout";
|
|
10
|
+
import * as i4 from "./time-period";
|
|
11
|
+
import * as i5 from "./hours-clock-dial";
|
|
12
|
+
import * as i6 from "./minutes-clock-dial";
|
|
13
|
+
import * as i7 from "@angular/common";
|
|
14
|
+
export class MatClockDials extends MatTimeFaceBase {
|
|
15
|
+
constructor(_intl, _timeAdapter, _ngZone, _elementRef) {
|
|
16
|
+
super(_timeAdapter);
|
|
17
|
+
this._intl = _intl;
|
|
18
|
+
this._ngZone = _ngZone;
|
|
19
|
+
this._elementRef = _elementRef;
|
|
20
|
+
this.isHoursView = true;
|
|
21
|
+
/** Specifies the view of clock dial. */
|
|
22
|
+
this._view = new BehaviorSubject('hours');
|
|
23
|
+
this._viewSubscription = Subscription.EMPTY;
|
|
24
|
+
}
|
|
25
|
+
ngOnInit() {
|
|
26
|
+
this._viewSubscription = this._view.subscribe((view) => (this.isHoursView = view === 'hours'));
|
|
27
|
+
}
|
|
28
|
+
ngOnDestroy() {
|
|
29
|
+
this._viewSubscription?.unsubscribe();
|
|
30
|
+
this._viewSubscription = null;
|
|
31
|
+
}
|
|
32
|
+
/** Changes clock dial view. */
|
|
33
|
+
onViewChange(event, view) {
|
|
34
|
+
event.preventDefault();
|
|
35
|
+
this._view.next(view);
|
|
36
|
+
}
|
|
37
|
+
focusActiveCell() {
|
|
38
|
+
this._ngZone.runOutsideAngular(() => {
|
|
39
|
+
this._ngZone.onStable.pipe(take(1)).subscribe(() => {
|
|
40
|
+
setTimeout(() => {
|
|
41
|
+
const activeCell = this._elementRef.nativeElement.querySelector('.mat-clock-dial-cell-active');
|
|
42
|
+
if (activeCell) {
|
|
43
|
+
activeCell.focus();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const activePoint = this._elementRef.nativeElement.querySelector('.mat-clock-dial-hand-point');
|
|
47
|
+
if (activePoint) {
|
|
48
|
+
// if no active cell we need to focus a small dot
|
|
49
|
+
activePoint.focus();
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
_withZeroPrefix(value) {
|
|
56
|
+
if (value === 0) {
|
|
57
|
+
return '00';
|
|
58
|
+
}
|
|
59
|
+
return withZeroPrefixMeridiem(value, this.isMeridiem);
|
|
60
|
+
}
|
|
61
|
+
/** Handles hour selection. */
|
|
62
|
+
_onHourChanged({ hour, changeView = false, }) {
|
|
63
|
+
if (changeView) {
|
|
64
|
+
this._view.next('minutes');
|
|
65
|
+
}
|
|
66
|
+
this._onHourSelected(hour);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
MatClockDials.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MatClockDials, deps: [{ token: i1.MatTimepickerIntl }, { token: i2.TimeAdapter, optional: true }, { token: i0.NgZone }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
70
|
+
MatClockDials.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: MatClockDials, selector: "mat-clock-dials", inputs: { orientation: "orientation" }, host: { attributes: { "role": "dial" }, classAttribute: "mat-clock-dials" }, exportAs: ["matClockDials"], usesInheritance: true, ngImport: i0, template: "<mat-timepicker-content-layout\n [title]=\"_intl.dialsTitle\"\n [orientation]=\"orientation\"\n>\n <div\n tabindex=\"0\"\n class=\"mat-clock-dial-value\"\n hours\n [class.mat-clock-dial-value-active]=\"isHoursView\"\n (click)=\"onViewChange($event,'hours')\"\n (keydown.space)=\"onViewChange($event, 'hours')\"\n >\n {{ _withZeroPrefix(selectedHour) }}\n </div>\n <div\n tabindex=\"0\"\n class=\"mat-clock-dial-value\"\n minutes\n [class.mat-clock-dial-value-active]=\"!isHoursView\"\n (click)=\"onViewChange($event,'minutes')\"\n (keydown.space)=\"onViewChange($event,'minutes')\"\n >\n {{ _withZeroPrefix(selectedMinute) }}\n </div>\n\n <ng-template mat-time-period [ngIf]=\"isMeridiem\">\n <mat-time-period\n [period]=\"period\"\n [disabledPeriod]=\"disabledPeriod\"\n [vertical]=\"orientation === 'vertical'\"\n (periodChanged)=\"_onPeriodChanged($event)\"\n ></mat-time-period>\n </ng-template>\n\n <div\n class=\"mat-clock-dial-faces\"\n [class.mat-clock-dial-faces-horizontal]=\"orientation === 'horizontal'\"\n >\n <ng-template [ngIf]=\"isHoursView\">\n <mat-hours-clock-dial\n [@enterLeaveAnimation]\n [color]=\"color\"\n [selectedHour]=\"selectedHour\"\n [isMeridiem]=\"isMeridiem\"\n [availableHours]=\"_getAvailableHours()\"\n (selectedChange)=\"_onHourChanged($event)\"\n (keydown)=\"_onKeydown($event, 'hour')\"\n ></mat-hours-clock-dial>\n </ng-template>\n <ng-template [ngIf]=\"!isHoursView\">\n <mat-minutes-clock-dial\n [@enterLeaveAnimation]\n [color]=\"color\"\n [selectedMinute]=\"selectedMinute\"\n [interval]=\"minuteInterval\"\n [availableMinutes]=\"availableMinutes\"\n (selectedChange)=\"_onMinuteSelected($event)\"\n (keydown)=\"_onKeydown($event, 'minute')\"\n ></mat-minutes-clock-dial>\n </ng-template>\n </div>\n</mat-timepicker-content-layout>\n", styles: [".mat-clock-dial-values{display:flex;width:100%}.mat-clock-dial-value{display:flex;align-items:center;justify-content:center;height:4.375rem;border-radius:.25rem;cursor:pointer}.mat-clock-dial-faces{margin-top:2.25rem}.mat-clock-dial-faces.mat-clock-dial-faces-horizontal{margin-top:0}\n"], components: [{ type: i3.MatTimepickerContentLayout, selector: "mat-timepicker-content-layout", inputs: ["title", "orientation"], exportAs: ["matTimepickerContent"] }, { type: i4.MatTimePeriod, selector: "mat-time-period", inputs: ["vertical", "period", "disabledPeriod"], outputs: ["periodChanged"] }, { type: i5.MatHoursClockDial, selector: "mat-hours-clock-dial", inputs: ["selectedHour", "isMeridiem", "availableHours", "color"], outputs: ["selectedChange"], exportAs: ["matHoursClockDial"] }, { type: i6.MatMinutesClockDial, selector: "mat-minutes-clock-dial", inputs: ["selectedMinute", "interval", "availableMinutes", "color"], outputs: ["selectedChange"], exportAs: ["matMinutesClockDial"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], animations: [enterLeaveAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
71
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MatClockDials, decorators: [{
|
|
72
|
+
type: Component,
|
|
73
|
+
args: [{ selector: 'mat-clock-dials', exportAs: 'matClockDials', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
74
|
+
role: 'dial',
|
|
75
|
+
class: 'mat-clock-dials',
|
|
76
|
+
}, animations: [enterLeaveAnimation], template: "<mat-timepicker-content-layout\n [title]=\"_intl.dialsTitle\"\n [orientation]=\"orientation\"\n>\n <div\n tabindex=\"0\"\n class=\"mat-clock-dial-value\"\n hours\n [class.mat-clock-dial-value-active]=\"isHoursView\"\n (click)=\"onViewChange($event,'hours')\"\n (keydown.space)=\"onViewChange($event, 'hours')\"\n >\n {{ _withZeroPrefix(selectedHour) }}\n </div>\n <div\n tabindex=\"0\"\n class=\"mat-clock-dial-value\"\n minutes\n [class.mat-clock-dial-value-active]=\"!isHoursView\"\n (click)=\"onViewChange($event,'minutes')\"\n (keydown.space)=\"onViewChange($event,'minutes')\"\n >\n {{ _withZeroPrefix(selectedMinute) }}\n </div>\n\n <ng-template mat-time-period [ngIf]=\"isMeridiem\">\n <mat-time-period\n [period]=\"period\"\n [disabledPeriod]=\"disabledPeriod\"\n [vertical]=\"orientation === 'vertical'\"\n (periodChanged)=\"_onPeriodChanged($event)\"\n ></mat-time-period>\n </ng-template>\n\n <div\n class=\"mat-clock-dial-faces\"\n [class.mat-clock-dial-faces-horizontal]=\"orientation === 'horizontal'\"\n >\n <ng-template [ngIf]=\"isHoursView\">\n <mat-hours-clock-dial\n [@enterLeaveAnimation]\n [color]=\"color\"\n [selectedHour]=\"selectedHour\"\n [isMeridiem]=\"isMeridiem\"\n [availableHours]=\"_getAvailableHours()\"\n (selectedChange)=\"_onHourChanged($event)\"\n (keydown)=\"_onKeydown($event, 'hour')\"\n ></mat-hours-clock-dial>\n </ng-template>\n <ng-template [ngIf]=\"!isHoursView\">\n <mat-minutes-clock-dial\n [@enterLeaveAnimation]\n [color]=\"color\"\n [selectedMinute]=\"selectedMinute\"\n [interval]=\"minuteInterval\"\n [availableMinutes]=\"availableMinutes\"\n (selectedChange)=\"_onMinuteSelected($event)\"\n (keydown)=\"_onKeydown($event, 'minute')\"\n ></mat-minutes-clock-dial>\n </ng-template>\n </div>\n</mat-timepicker-content-layout>\n", styles: [".mat-clock-dial-values{display:flex;width:100%}.mat-clock-dial-value{display:flex;align-items:center;justify-content:center;height:4.375rem;border-radius:.25rem;cursor:pointer}.mat-clock-dial-faces{margin-top:2.25rem}.mat-clock-dial-faces.mat-clock-dial-faces-horizontal{margin-top:0}\n"] }]
|
|
77
|
+
}], ctorParameters: function () { return [{ type: i1.MatTimepickerIntl }, { type: i2.TimeAdapter, decorators: [{
|
|
78
|
+
type: Optional
|
|
79
|
+
}] }, { type: i0.NgZone }, { type: i0.ElementRef }]; }, propDecorators: { orientation: [{
|
|
80
|
+
type: Input
|
|
81
|
+
}] } });
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvY2stZGlhbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXQtdGltZXBpY2tlci9zcmMvbGliL2Nsb2NrLWRpYWxzLnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0LXRpbWVwaWNrZXIvc3JjL2xpYi9jbG9jay1kaWFscy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUdqQixRQUFRLEVBR1IsS0FBSyxHQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUczRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7OztBQWlCOUQsTUFBTSxPQUFPLGFBQ1gsU0FBUSxlQUFrQjtJQVkxQixZQUNTLEtBQXdCLEVBQ25CLFlBQTRCLEVBQ2hDLE9BQWUsRUFDZixXQUF1QjtRQUUvQixLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFMYixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUV2QixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFWakMsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFFbkIsd0NBQXdDO1FBQ3ZCLFVBQUssR0FBRyxJQUFJLGVBQWUsQ0FBYyxPQUFPLENBQUMsQ0FBQztRQUMzRCxzQkFBaUIsR0FBd0IsWUFBWSxDQUFDLEtBQUssQ0FBQztJQVNwRSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FDM0MsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQ2hELENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsWUFBWSxDQUFDLEtBQVksRUFBRSxJQUFpQjtRQUMxQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDakQsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxNQUFNLFVBQVUsR0FDZCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQzFDLDZCQUE2QixDQUM5QixDQUFDO29CQUVKLElBQUksVUFBVSxFQUFFO3dCQUNkLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDbkIsT0FBTztxQkFDUjtvQkFFRCxNQUFNLFdBQVcsR0FDZixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQzFDLDRCQUE0QixDQUM3QixDQUFDO29CQUVKLElBQUksV0FBVyxFQUFFO3dCQUNmLGlEQUFpRDt3QkFDakQsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO3FCQUNyQjtnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQ2YsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sc0JBQXNCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsOEJBQThCO0lBQzlCLGNBQWMsQ0FBQyxFQUNiLElBQUksRUFDSixVQUFVLEdBQUcsS0FBSyxHQUluQjtRQUNDLElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDNUI7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7OzBHQXZGVSxhQUFhOzhGQUFiLGFBQWEsZ09DbkMxQiw0OERBOERBLHNsQ0Q3QmMsQ0FBQyxtQkFBbUIsQ0FBQzsyRkFFdEIsYUFBYTtrQkFiekIsU0FBUzsrQkFDRSxpQkFBaUIsWUFHakIsZUFBZSxtQkFDUix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNKLElBQUksRUFBRSxNQUFNO3dCQUNaLEtBQUssRUFBRSxpQkFBaUI7cUJBQ3pCLGNBQ1csQ0FBQyxtQkFBbUIsQ0FBQzs7MEJBaUI5QixRQUFROzBGQVZGLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBOZ1pvbmUsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFRpbWVBZGFwdGVyIH0gZnJvbSAnLi9hZGFwdGVyJztcbmltcG9ydCB7IE1hdFRpbWVGYWNlQmFzZSB9IGZyb20gJy4vdGltZS1mYWNlLWJhc2UnO1xuaW1wb3J0IHsgd2l0aFplcm9QcmVmaXhNZXJpZGllbSB9IGZyb20gJy4vdGltZS1pbnB1dC1iYXNlJztcbmltcG9ydCB7IE1hdFRpbWVwaWNrZXJJbnRsIH0gZnJvbSAnLi90aW1lcGlja2VyLWludGwnO1xuaW1wb3J0IHsgVGltZXBpY2tlck9yaWVudGF0aW9uIH0gZnJvbSAnLi9vcmllbnRhdGlvbic7XG5pbXBvcnQgeyBlbnRlckxlYXZlQW5pbWF0aW9uIH0gZnJvbSAnLi9jbG9jay1kaWFsLWFkbmltYXRpb24nO1xuXG5leHBvcnQgdHlwZSBNYXREaWFsVmlldyA9ICdob3VycycgfCAnbWludXRlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1jbG9jay1kaWFscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jbG9jay1kaWFscy5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2xvY2stZGlhbHMuc2NzcyddLFxuICBleHBvcnRBczogJ21hdENsb2NrRGlhbHMnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgIHJvbGU6ICdkaWFsJyxcbiAgICBjbGFzczogJ21hdC1jbG9jay1kaWFscycsXG4gIH0sXG4gIGFuaW1hdGlvbnM6IFtlbnRlckxlYXZlQW5pbWF0aW9uXSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0Q2xvY2tEaWFsczxUPlxuICBleHRlbmRzIE1hdFRpbWVGYWNlQmFzZTxUPlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95XG57XG4gIC8qKiBMYXlvdXQgb3JpZW50YXRpb24uICovXG4gIEBJbnB1dCgpIG9yaWVudGF0aW9uOiBUaW1lcGlja2VyT3JpZW50YXRpb247XG5cbiAgaXNIb3Vyc1ZpZXcgPSB0cnVlO1xuXG4gIC8qKiBTcGVjaWZpZXMgdGhlIHZpZXcgb2YgY2xvY2sgZGlhbC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfdmlldyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWF0RGlhbFZpZXc+KCdob3VycycpO1xuICBwcml2YXRlIF92aWV3U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBfaW50bDogTWF0VGltZXBpY2tlckludGwsXG4gICAgQE9wdGlvbmFsKCkgX3RpbWVBZGFwdGVyOiBUaW1lQWRhcHRlcjxUPixcbiAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmXG4gICkge1xuICAgIHN1cGVyKF90aW1lQWRhcHRlcik7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl92aWV3U3Vic2NyaXB0aW9uID0gdGhpcy5fdmlldy5zdWJzY3JpYmUoXG4gICAgICAodmlldykgPT4gKHRoaXMuaXNIb3Vyc1ZpZXcgPSB2aWV3ID09PSAnaG91cnMnKVxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl92aWV3U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3ZpZXdTdWJzY3JpcHRpb24gPSBudWxsO1xuICB9XG5cbiAgLyoqIENoYW5nZXMgY2xvY2sgZGlhbCB2aWV3LiAqL1xuICBvblZpZXdDaGFuZ2UoZXZlbnQ6IEV2ZW50LCB2aWV3OiBNYXREaWFsVmlldyk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5fdmlldy5uZXh0KHZpZXcpO1xuICB9XG5cbiAgZm9jdXNBY3RpdmVDZWxsKCk6IHZvaWQge1xuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLl9uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCBhY3RpdmVDZWxsOiBIVE1MRWxlbWVudCB8IG51bGwgPVxuICAgICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICcubWF0LWNsb2NrLWRpYWwtY2VsbC1hY3RpdmUnXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGFjdGl2ZUNlbGwpIHtcbiAgICAgICAgICAgIGFjdGl2ZUNlbGwuZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBhY3RpdmVQb2ludDogSFRNTEVsZW1lbnQgfCBudWxsID1cbiAgICAgICAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAnLm1hdC1jbG9jay1kaWFsLWhhbmQtcG9pbnQnXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGFjdGl2ZVBvaW50KSB7XG4gICAgICAgICAgICAvLyBpZiBubyBhY3RpdmUgY2VsbCB3ZSBuZWVkIHRvIGZvY3VzIGEgc21hbGwgZG90XG4gICAgICAgICAgICBhY3RpdmVQb2ludC5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIF93aXRoWmVyb1ByZWZpeCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgIHJldHVybiAnMDAnO1xuICAgIH1cblxuICAgIHJldHVybiB3aXRoWmVyb1ByZWZpeE1lcmlkaWVtKHZhbHVlLCB0aGlzLmlzTWVyaWRpZW0pO1xuICB9XG5cbiAgLyoqIEhhbmRsZXMgaG91ciBzZWxlY3Rpb24uICovXG4gIF9vbkhvdXJDaGFuZ2VkKHtcbiAgICBob3VyLFxuICAgIGNoYW5nZVZpZXcgPSBmYWxzZSxcbiAgfToge1xuICAgIGhvdXI6IG51bWJlcjtcbiAgICBjaGFuZ2VWaWV3PzogYm9vbGVhbjtcbiAgfSk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VWaWV3KSB7XG4gICAgICB0aGlzLl92aWV3Lm5leHQoJ21pbnV0ZXMnKTtcbiAgICB9XG4gICAgdGhpcy5fb25Ib3VyU2VsZWN0ZWQoaG91cik7XG4gIH1cbn1cbiIsIjxtYXQtdGltZXBpY2tlci1jb250ZW50LWxheW91dFxuICBbdGl0bGVdPVwiX2ludGwuZGlhbHNUaXRsZVwiXG4gIFtvcmllbnRhdGlvbl09XCJvcmllbnRhdGlvblwiXG4+XG4gIDxkaXZcbiAgICB0YWJpbmRleD1cIjBcIlxuICAgIGNsYXNzPVwibWF0LWNsb2NrLWRpYWwtdmFsdWVcIlxuICAgIGhvdXJzXG4gICAgW2NsYXNzLm1hdC1jbG9jay1kaWFsLXZhbHVlLWFjdGl2ZV09XCJpc0hvdXJzVmlld1wiXG4gICAgKGNsaWNrKT1cIm9uVmlld0NoYW5nZSgkZXZlbnQsJ2hvdXJzJylcIlxuICAgIChrZXlkb3duLnNwYWNlKT1cIm9uVmlld0NoYW5nZSgkZXZlbnQsICdob3VycycpXCJcbiAgPlxuICAgIHt7IF93aXRoWmVyb1ByZWZpeChzZWxlY3RlZEhvdXIpIH19XG4gIDwvZGl2PlxuICA8ZGl2XG4gICAgdGFiaW5kZXg9XCIwXCJcbiAgICBjbGFzcz1cIm1hdC1jbG9jay1kaWFsLXZhbHVlXCJcbiAgICBtaW51dGVzXG4gICAgW2NsYXNzLm1hdC1jbG9jay1kaWFsLXZhbHVlLWFjdGl2ZV09XCIhaXNIb3Vyc1ZpZXdcIlxuICAgIChjbGljayk9XCJvblZpZXdDaGFuZ2UoJGV2ZW50LCdtaW51dGVzJylcIlxuICAgIChrZXlkb3duLnNwYWNlKT1cIm9uVmlld0NoYW5nZSgkZXZlbnQsJ21pbnV0ZXMnKVwiXG4gID5cbiAgICB7eyBfd2l0aFplcm9QcmVmaXgoc2VsZWN0ZWRNaW51dGUpIH19XG4gIDwvZGl2PlxuXG4gIDxuZy10ZW1wbGF0ZSBtYXQtdGltZS1wZXJpb2QgW25nSWZdPVwiaXNNZXJpZGllbVwiPlxuICAgIDxtYXQtdGltZS1wZXJpb2RcbiAgICAgIFtwZXJpb2RdPVwicGVyaW9kXCJcbiAgICAgIFtkaXNhYmxlZFBlcmlvZF09XCJkaXNhYmxlZFBlcmlvZFwiXG4gICAgICBbdmVydGljYWxdPVwib3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCdcIlxuICAgICAgKHBlcmlvZENoYW5nZWQpPVwiX29uUGVyaW9kQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICA+PC9tYXQtdGltZS1wZXJpb2Q+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwibWF0LWNsb2NrLWRpYWwtZmFjZXNcIlxuICAgIFtjbGFzcy5tYXQtY2xvY2stZGlhbC1mYWNlcy1ob3Jpem9udGFsXT1cIm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCdcIlxuICA+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzSG91cnNWaWV3XCI+XG4gICAgICA8bWF0LWhvdXJzLWNsb2NrLWRpYWxcbiAgICAgICAgW0BlbnRlckxlYXZlQW5pbWF0aW9uXVxuICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICBbc2VsZWN0ZWRIb3VyXT1cInNlbGVjdGVkSG91clwiXG4gICAgICAgIFtpc01lcmlkaWVtXT1cImlzTWVyaWRpZW1cIlxuICAgICAgICBbYXZhaWxhYmxlSG91cnNdPVwiX2dldEF2YWlsYWJsZUhvdXJzKClcIlxuICAgICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwiX29uSG91ckNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duKT1cIl9vbktleWRvd24oJGV2ZW50LCAnaG91cicpXCJcbiAgICAgID48L21hdC1ob3Vycy1jbG9jay1kaWFsPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFpc0hvdXJzVmlld1wiPlxuICAgICAgPG1hdC1taW51dGVzLWNsb2NrLWRpYWxcbiAgICAgICAgW0BlbnRlckxlYXZlQW5pbWF0aW9uXVxuICAgICAgICBbY29sb3JdPVwiY29sb3JcIlxuICAgICAgICBbc2VsZWN0ZWRNaW51dGVdPVwic2VsZWN0ZWRNaW51dGVcIlxuICAgICAgICBbaW50ZXJ2YWxdPVwibWludXRlSW50ZXJ2YWxcIlxuICAgICAgICBbYXZhaWxhYmxlTWludXRlc109XCJhdmFpbGFibGVNaW51dGVzXCJcbiAgICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cIl9vbk1pbnV0ZVNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJfb25LZXlkb3duKCRldmVudCwgJ21pbnV0ZScpXCJcbiAgICAgID48L21hdC1taW51dGVzLWNsb2NrLWRpYWw+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L21hdC10aW1lcGlja2VyLWNvbnRlbnQtbGF5b3V0PlxuIl19
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Output, ViewEncapsulation, } from '@angular/core';
|
|
3
|
+
import { debounceTime, fromEvent, merge, take } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/material/button";
|
|
6
|
+
import * as i2 from "@angular/common";
|
|
7
|
+
export const ALL_HOURS = Array(24)
|
|
8
|
+
.fill(null)
|
|
9
|
+
.map((_, i) => i);
|
|
10
|
+
const CLOCK_RADIUS = 128;
|
|
11
|
+
const CLOCK_TICK_RADIUS = 16;
|
|
12
|
+
const CLOCK_CORRECTED_RADIUS = CLOCK_RADIUS - CLOCK_TICK_RADIUS;
|
|
13
|
+
const CLOCK_OUTER_RADIUS = 100;
|
|
14
|
+
const CLOCK_INNER_RADIUS = CLOCK_OUTER_RADIUS - CLOCK_TICK_RADIUS * 2;
|
|
15
|
+
export class MatHoursClockDial {
|
|
16
|
+
constructor(_element, _cdr, _document, _window) {
|
|
17
|
+
this._element = _element;
|
|
18
|
+
this._cdr = _cdr;
|
|
19
|
+
this._document = _document;
|
|
20
|
+
this._window = _window;
|
|
21
|
+
this._availableHours = [];
|
|
22
|
+
/** Emits selected hour. */
|
|
23
|
+
this.selectedChange = new EventEmitter();
|
|
24
|
+
this.hours = [];
|
|
25
|
+
}
|
|
26
|
+
/** Selected hour. */
|
|
27
|
+
get selectedHour() {
|
|
28
|
+
return this._selectedHour;
|
|
29
|
+
}
|
|
30
|
+
set selectedHour(value) {
|
|
31
|
+
this._selectedHour = value;
|
|
32
|
+
}
|
|
33
|
+
/** Whether the clock uses 12 hour format. */
|
|
34
|
+
get isMeridiem() {
|
|
35
|
+
return this._isMeridiem;
|
|
36
|
+
}
|
|
37
|
+
set isMeridiem(value) {
|
|
38
|
+
this._isMeridiem = value;
|
|
39
|
+
}
|
|
40
|
+
get availableHours() {
|
|
41
|
+
return this._availableHours;
|
|
42
|
+
}
|
|
43
|
+
set availableHours(value) {
|
|
44
|
+
this._availableHours = value;
|
|
45
|
+
this._initHours();
|
|
46
|
+
}
|
|
47
|
+
get disabledHand() {
|
|
48
|
+
return !this.availableHours.includes(this.selectedHour);
|
|
49
|
+
}
|
|
50
|
+
get isHour() {
|
|
51
|
+
return !!this.hours.find((hour) => hour.value === this.selectedHour);
|
|
52
|
+
}
|
|
53
|
+
ngOnInit() {
|
|
54
|
+
this._initHours();
|
|
55
|
+
}
|
|
56
|
+
/** Hand styles based on selected hour. */
|
|
57
|
+
_handStyles() {
|
|
58
|
+
const deg = Math.round(this.selectedHour * (360 / (24 / 2)));
|
|
59
|
+
const radius = this._getRadius(this.selectedHour);
|
|
60
|
+
const height = radius;
|
|
61
|
+
const marginTop = CLOCK_RADIUS - radius;
|
|
62
|
+
return {
|
|
63
|
+
transform: `rotate(${deg}deg)`,
|
|
64
|
+
height: `${height}px`,
|
|
65
|
+
'margin-top': `${marginTop}px`,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/** Handles mouse and touch events on dial and document. */
|
|
69
|
+
_onMouseDown(event) {
|
|
70
|
+
this._setHour(event);
|
|
71
|
+
const eventsSubscription = merge(fromEvent(this._document, 'mousemove'), fromEvent(this._document, 'touchmove'))
|
|
72
|
+
.pipe(debounceTime(0))
|
|
73
|
+
.subscribe({
|
|
74
|
+
next: (event) => {
|
|
75
|
+
event.preventDefault();
|
|
76
|
+
this._setHour(event);
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
merge(fromEvent(this._document, 'mouseup'), fromEvent(this._document, 'touchend'))
|
|
80
|
+
.pipe(take(1))
|
|
81
|
+
.subscribe({
|
|
82
|
+
next: () => {
|
|
83
|
+
eventsSubscription.unsubscribe();
|
|
84
|
+
this.selectedChange.emit({
|
|
85
|
+
hour: this.selectedHour,
|
|
86
|
+
changeView: true,
|
|
87
|
+
});
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
_isActiveCell(hour) {
|
|
92
|
+
return this.selectedHour === hour;
|
|
93
|
+
}
|
|
94
|
+
_trackBy(index, cell) {
|
|
95
|
+
return cell.value;
|
|
96
|
+
}
|
|
97
|
+
/** Changes selected hour based on coordinates. */
|
|
98
|
+
_setHour(event) {
|
|
99
|
+
const element = this._element.nativeElement;
|
|
100
|
+
const elementRect = element.getBoundingClientRect();
|
|
101
|
+
const width = element.offsetWidth;
|
|
102
|
+
const height = element.offsetHeight;
|
|
103
|
+
const pageX = event instanceof MouseEvent ? event.pageX : event.touches[0].pageX;
|
|
104
|
+
const pageY = event instanceof MouseEvent ? event.pageY : event.touches[0].pageY;
|
|
105
|
+
const x = width / 2 - (pageX - elementRect.left - this._window.scrollX);
|
|
106
|
+
const y = height / 2 - (pageY - elementRect.top - this._window.scrollY);
|
|
107
|
+
const unit = Math.PI / 6;
|
|
108
|
+
const atan2 = Math.atan2(-x, y);
|
|
109
|
+
const radian = atan2 < 0 ? Math.PI * 2 + atan2 : atan2;
|
|
110
|
+
const initialValue = Math.round(radian / unit);
|
|
111
|
+
const z = Math.sqrt(x * x + y * y);
|
|
112
|
+
const outer = z > CLOCK_OUTER_RADIUS - CLOCK_TICK_RADIUS;
|
|
113
|
+
const value = this._getHourValue(initialValue, outer);
|
|
114
|
+
if (this.availableHours.includes(value)) {
|
|
115
|
+
this.selectedHour = value;
|
|
116
|
+
this.selectedChange.emit({
|
|
117
|
+
hour: this.selectedHour,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
this._cdr.detectChanges();
|
|
121
|
+
}
|
|
122
|
+
/** Return value of hour. */
|
|
123
|
+
_getHourValue(value, outer) {
|
|
124
|
+
const edgeValue = value === 0 || value === 12;
|
|
125
|
+
if (this.isMeridiem) {
|
|
126
|
+
return edgeValue ? 12 : value;
|
|
127
|
+
}
|
|
128
|
+
if (outer) {
|
|
129
|
+
return edgeValue ? 0 : value;
|
|
130
|
+
}
|
|
131
|
+
return edgeValue ? 12 : value + 12;
|
|
132
|
+
}
|
|
133
|
+
/** Creates list of hours. */
|
|
134
|
+
_initHours() {
|
|
135
|
+
const initialHours = this.isMeridiem ? ALL_HOURS.slice(1, 13) : ALL_HOURS;
|
|
136
|
+
this.hours = initialHours.map((hour) => {
|
|
137
|
+
const radian = (hour / 6) * Math.PI;
|
|
138
|
+
const radius = this._getRadius(hour);
|
|
139
|
+
return {
|
|
140
|
+
value: hour,
|
|
141
|
+
displayValue: hour === 0 ? '00' : String(hour),
|
|
142
|
+
left: CLOCK_CORRECTED_RADIUS + Math.sin(radian) * radius,
|
|
143
|
+
top: CLOCK_CORRECTED_RADIUS - Math.cos(radian) * radius,
|
|
144
|
+
disabled: !this.availableHours.includes(hour),
|
|
145
|
+
};
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/** Returns radius based on hour */
|
|
149
|
+
_getRadius(hour) {
|
|
150
|
+
if (this.isMeridiem) {
|
|
151
|
+
return CLOCK_OUTER_RADIUS;
|
|
152
|
+
}
|
|
153
|
+
const outer = hour >= 0 && hour < 12;
|
|
154
|
+
const radius = outer ? CLOCK_OUTER_RADIUS : CLOCK_INNER_RADIUS;
|
|
155
|
+
return radius;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
MatHoursClockDial.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MatHoursClockDial, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }, { token: Window }], target: i0.ɵɵFactoryTarget.Component });
|
|
159
|
+
MatHoursClockDial.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: MatHoursClockDial, selector: "mat-hours-clock-dial", inputs: { selectedHour: "selectedHour", isMeridiem: "isMeridiem", availableHours: "availableHours", color: "color" }, outputs: { selectedChange: "selectedChange" }, host: { listeners: { "mousedown": "_onMouseDown($event)" }, classAttribute: "mat-clock-dial mat-clock-dial-hours" }, exportAs: ["matHoursClockDial"], ngImport: i0, template: "<div\n class=\"mat-clock-dial-hand\"\n [class.mat-clock-dial-hand-pointless]=\"isHour\"\n [class.mat-clock-dial-hand-disabled]=\"disabledHand\"\n [ngStyle]=\"_handStyles()\"\n></div>\n<ng-template ngFor let-hour [ngForOf]=\"hours\" [ngForTrackBy]=\"_trackBy\">\n <button\n class=\"mat-clock-dial-cell mat-elevation-z0\"\n mat-mini-fab\n disableRipple\n [tabIndex]=\"_isActiveCell(hour.value) ? 0 : -1\"\n [style.left.px]=\"hour.left\"\n [style.top.px]=\"hour.top\"\n [class.mat-clock-dial-cell-active]=\"_isActiveCell(hour.value)\"\n [class.mat-clock-dial-cell-disabled]=\"hour.disabled\"\n [color]=\"_isActiveCell(hour.value) ? color : undefined\"\n [attr.aria-disabled]=\"hour.disabled || null\"\n >\n {{ hour.displayValue }}\n </button>\n</ng-template>\n", styles: [".mat-clock-dial{position:relative;display:block;width:16rem;height:16rem;margin:0 auto;border-radius:50%}.mat-clock-dial:before{position:absolute;top:50%;left:50%;width:.4375rem;height:.4375rem;border-radius:50%;transform:translate(-50%,-50%);content:\"\"}.mat-clock-dial [mat-mini-fab]{box-shadow:none}.mat-clock-dial-cell{position:absolute;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:50%}.mat-clock-dial-cell:disabled{pointer-events:none}.mat-clock-dial-hand{position:absolute;top:0;right:0;bottom:0;left:0;width:1px;margin:0 auto;transform-origin:bottom}.mat-clock-dial-hand:before{position:absolute;top:-.25rem;left:-.25rem;width:calc(.5rem + 1px);height:calc(.5rem + 1px);border-radius:50%;content:\"\"}.mat-clock-dial-hand.mat-clock-dial-hand-pointless:before{content:none}\n"], components: [{ type: i1.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
160
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: MatHoursClockDial, decorators: [{
|
|
161
|
+
type: Component,
|
|
162
|
+
args: [{ selector: 'mat-hours-clock-dial', exportAs: 'matHoursClockDial', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
163
|
+
class: 'mat-clock-dial mat-clock-dial-hours',
|
|
164
|
+
'(mousedown)': '_onMouseDown($event)',
|
|
165
|
+
}, template: "<div\n class=\"mat-clock-dial-hand\"\n [class.mat-clock-dial-hand-pointless]=\"isHour\"\n [class.mat-clock-dial-hand-disabled]=\"disabledHand\"\n [ngStyle]=\"_handStyles()\"\n></div>\n<ng-template ngFor let-hour [ngForOf]=\"hours\" [ngForTrackBy]=\"_trackBy\">\n <button\n class=\"mat-clock-dial-cell mat-elevation-z0\"\n mat-mini-fab\n disableRipple\n [tabIndex]=\"_isActiveCell(hour.value) ? 0 : -1\"\n [style.left.px]=\"hour.left\"\n [style.top.px]=\"hour.top\"\n [class.mat-clock-dial-cell-active]=\"_isActiveCell(hour.value)\"\n [class.mat-clock-dial-cell-disabled]=\"hour.disabled\"\n [color]=\"_isActiveCell(hour.value) ? color : undefined\"\n [attr.aria-disabled]=\"hour.disabled || null\"\n >\n {{ hour.displayValue }}\n </button>\n</ng-template>\n", styles: [".mat-clock-dial{position:relative;display:block;width:16rem;height:16rem;margin:0 auto;border-radius:50%}.mat-clock-dial:before{position:absolute;top:50%;left:50%;width:.4375rem;height:.4375rem;border-radius:50%;transform:translate(-50%,-50%);content:\"\"}.mat-clock-dial [mat-mini-fab]{box-shadow:none}.mat-clock-dial-cell{position:absolute;display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border-radius:50%}.mat-clock-dial-cell:disabled{pointer-events:none}.mat-clock-dial-hand{position:absolute;top:0;right:0;bottom:0;left:0;width:1px;margin:0 auto;transform-origin:bottom}.mat-clock-dial-hand:before{position:absolute;top:-.25rem;left:-.25rem;width:calc(.5rem + 1px);height:calc(.5rem + 1px);border-radius:50%;content:\"\"}.mat-clock-dial-hand.mat-clock-dial-hand-pointless:before{content:none}\n"] }]
|
|
166
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: Document, decorators: [{
|
|
167
|
+
type: Inject,
|
|
168
|
+
args: [DOCUMENT]
|
|
169
|
+
}] }, { type: Window, decorators: [{
|
|
170
|
+
type: Inject,
|
|
171
|
+
args: [Window]
|
|
172
|
+
}] }]; }, propDecorators: { selectedHour: [{
|
|
173
|
+
type: Input
|
|
174
|
+
}], isMeridiem: [{
|
|
175
|
+
type: Input
|
|
176
|
+
}], availableHours: [{
|
|
177
|
+
type: Input
|
|
178
|
+
}], color: [{
|
|
179
|
+
type: Input
|
|
180
|
+
}], selectedChange: [{
|
|
181
|
+
type: Output
|
|
182
|
+
}] } });
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG91cnMtY2xvY2stZGlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21hdC10aW1lcGlja2VyL3NyYy9saWIvaG91cnMtY2xvY2stZGlhbC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL21hdC10aW1lcGlja2VyL3NyYy9saWIvaG91cnMtY2xvY2stZGlhbC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7QUFVNUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7S0FDL0IsSUFBSSxDQUFDLElBQUksQ0FBQztLQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6QixNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUM3QixNQUFNLHNCQUFzQixHQUFHLFlBQVksR0FBRyxpQkFBaUIsQ0FBQztBQUNoRSxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQztBQUMvQixNQUFNLGtCQUFrQixHQUFHLGtCQUFrQixHQUFHLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQWN0RSxNQUFNLE9BQU8saUJBQWlCO0lBa0Q1QixZQUNVLFFBQWlDLEVBQ2pDLElBQXVCLEVBQ0wsU0FBbUIsRUFDckIsT0FBZTtRQUgvQixhQUFRLEdBQVIsUUFBUSxDQUF5QjtRQUNqQyxT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aW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRoZW1lUGFsZXR0ZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmcm9tRXZlbnQsIG1lcmdlLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvY2tEaWFsVmlld0NlbGwge1xuICB2YWx1ZTogbnVtYmVyO1xuICBkaXNwbGF5VmFsdWU6IHN0cmluZztcbiAgbGVmdDogbnVtYmVyO1xuICB0b3A6IG51bWJlcjtcbiAgZGlzYWJsZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBBTExfSE9VUlMgPSBBcnJheSgyNClcbiAgLmZpbGwobnVsbClcbiAgLm1hcCgoXywgaSkgPT4gaSk7XG5jb25zdCBDTE9DS19SQURJVVMgPSAxMjg7XG5jb25zdCBDTE9DS19USUNLX1JBRElVUyA9IDE2O1xuY29uc3QgQ0xPQ0tfQ09SUkVDVEVEX1JBRElVUyA9IENMT0NLX1JBRElVUyAtIENMT0NLX1RJQ0tfUkFESVVTO1xuY29uc3QgQ0xPQ0tfT1VURVJfUkFESVVTID0gMTAwO1xuY29uc3QgQ0xPQ0tfSU5ORVJfUkFESVVTID0gQ0xPQ0tfT1VURVJfUkFESVVTIC0gQ0xPQ0tfVElDS19SQURJVVMgKiAyO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtaG91cnMtY2xvY2stZGlhbCcsXG4gIHRlbXBsYXRlVXJsOiAnaG91cnMtY2xvY2stZGlhbC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ2Nsb2NrLWRpYWwuc2NzcyddLFxuICBleHBvcnRBczogJ21hdEhvdXJzQ2xvY2tEaWFsJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGhvc3Q6IHtcbiAgICBjbGFzczogJ21hdC1jbG9jay1kaWFsIG1hdC1jbG9jay1kaWFsLWhvdXJzJyxcbiAgICAnKG1vdXNlZG93biknOiAnX29uTW91c2VEb3duKCRldmVudCknLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBNYXRIb3Vyc0Nsb2NrRGlhbCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKiBTZWxlY3RlZCBob3VyLiAqL1xuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0ZWRIb3VyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSG91cjtcbiAgfVxuICBzZXQgc2VsZWN0ZWRIb3VyKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zZWxlY3RlZEhvdXIgPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF9zZWxlY3RlZEhvdXI6IG51bWJlcjtcblxuICAvKiogV2hldGhlciB0aGUgY2xvY2sgdXNlcyAxMiBob3VyIGZvcm1hdC4gKi9cbiAgQElucHV0KClcbiAgZ2V0IGlzTWVyaWRpZW0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTWVyaWRpZW07XG4gIH1cbiAgc2V0IGlzTWVyaWRpZW0odmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc01lcmlkaWVtID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfaXNNZXJpZGllbTogYm9vbGVhbjtcblxuICBASW5wdXQoKVxuICBnZXQgYXZhaWxhYmxlSG91cnMoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiB0aGlzLl9hdmFpbGFibGVIb3VycztcbiAgfVxuICBzZXQgYXZhaWxhYmxlSG91cnModmFsdWU6IG51bWJlcltdKSB7XG4gICAgdGhpcy5fYXZhaWxhYmxlSG91cnMgPSB2YWx1ZTtcbiAgICB0aGlzLl9pbml0SG91cnMoKTtcbiAgfVxuICBwcml2YXRlIF9hdmFpbGFibGVIb3VyczogbnVtYmVyW10gPSBbXTtcblxuICAvKiogQ29sb3IgcGFsZXR0ZS4gKi9cbiAgQElucHV0KCkgY29sb3I6IFRoZW1lUGFsZXR0ZTtcblxuICAvKiogRW1pdHMgc2VsZWN0ZWQgaG91ci4gKi9cbiAgQE91dHB1dCgpIHNlbGVjdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgaG91cjogbnVtYmVyO1xuICAgIGNoYW5nZVZpZXc/OiBib29sZWFuO1xuICB9PigpO1xuXG4gIGhvdXJzOiBDbG9ja0RpYWxWaWV3Q2VsbFtdID0gW107XG5cbiAgZ2V0IGRpc2FibGVkSGFuZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuYXZhaWxhYmxlSG91cnMuaW5jbHVkZXModGhpcy5zZWxlY3RlZEhvdXIpO1xuICB9XG5cbiAgZ2V0IGlzSG91cigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmhvdXJzLmZpbmQoKGhvdXIpID0+IGhvdXIudmFsdWUgPT09IHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2VsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgIEBJbmplY3QoV2luZG93KSBwcml2YXRlIF93aW5kb3c6IFdpbmRvd1xuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5faW5pdEhvdXJzKCk7XG4gIH1cblxuICAvKiogSGFuZCBzdHlsZXMgYmFzZWQgb24gc2VsZWN0ZWQgaG91ci4gKi9cbiAgX2hhbmRTdHlsZXMoKTogYW55IHtcbiAgICBjb25zdCBkZWcgPSBNYXRoLnJvdW5kKHRoaXMuc2VsZWN0ZWRIb3VyICogKDM2MCAvICgyNCAvIDIpKSk7XG4gICAgY29uc3QgcmFkaXVzID0gdGhpcy5fZ2V0UmFkaXVzKHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgICBjb25zdCBoZWlnaHQgPSByYWRpdXM7XG4gICAgY29uc3QgbWFyZ2luVG9wID0gQ0xPQ0tfUkFESVVTIC0gcmFkaXVzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zZm9ybTogYHJvdGF0ZSgke2RlZ31kZWcpYCxcbiAgICAgIGhlaWdodDogYCR7aGVpZ2h0fXB4YCxcbiAgICAgICdtYXJnaW4tdG9wJzogYCR7bWFyZ2luVG9wfXB4YCxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEhhbmRsZXMgbW91c2UgYW5kIHRvdWNoIGV2ZW50cyBvbiBkaWFsIGFuZCBkb2N1bWVudC4gKi9cbiAgX29uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuX3NldEhvdXIoZXZlbnQpO1xuXG4gICAgY29uc3QgZXZlbnRzU3Vic2NyaXB0aW9uID0gbWVyZ2UoXG4gICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5fZG9jdW1lbnQsICdtb3VzZW1vdmUnKSxcbiAgICAgIGZyb21FdmVudDxUb3VjaEV2ZW50Pih0aGlzLl9kb2N1bWVudCwgJ3RvdWNobW92ZScpXG4gICAgKVxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDApKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChldmVudCkgPT4ge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5fc2V0SG91cihldmVudCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgIG1lcmdlKFxuICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuX2RvY3VtZW50LCAnbW91c2V1cCcpLFxuICAgICAgZnJvbUV2ZW50PFRvdWNoRXZlbnQ+KHRoaXMuX2RvY3VtZW50LCAndG91Y2hlbmQnKVxuICAgIClcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGV2ZW50c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdCh7XG4gICAgICAgICAgICBob3VyOiB0aGlzLnNlbGVjdGVkSG91cixcbiAgICAgICAgICAgIGNoYW5nZVZpZXc6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIF9pc0FjdGl2ZUNlbGwoaG91cjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRIb3VyID09PSBob3VyO1xuICB9XG5cbiAgX3RyYWNrQnkoaW5kZXg6IG51bWJlciwgY2VsbDogQ2xvY2tEaWFsVmlld0NlbGwpOiBudW1iZXIge1xuICAgIHJldHVybiBjZWxsLnZhbHVlO1xuICB9XG5cbiAgLyoqIENoYW5nZXMgc2VsZWN0ZWQgaG91ciBiYXNlZCBvbiBjb29yZGluYXRlcy4gKi9cbiAgcHJpdmF0ZSBfc2V0SG91cihldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGVsZW1lbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3QgcGFnZVggPVxuICAgICAgZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50ID8gZXZlbnQucGFnZVggOiBldmVudC50b3VjaGVzWzBdLnBhZ2VYO1xuICAgIGNvbnN0IHBhZ2VZID1cbiAgICAgIGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCA/IGV2ZW50LnBhZ2VZIDogZXZlbnQudG91Y2hlc1swXS5wYWdlWTtcbiAgICBjb25zdCB4ID0gd2lkdGggLyAyIC0gKHBhZ2VYIC0gZWxlbWVudFJlY3QubGVmdCAtIHRoaXMuX3dpbmRvdy5zY3JvbGxYKTtcbiAgICBjb25zdCB5ID0gaGVpZ2h0IC8gMiAtIChwYWdlWSAtIGVsZW1lbnRSZWN0LnRvcCAtIHRoaXMuX3dpbmRvdy5zY3JvbGxZKTtcbiAgICBjb25zdCB1bml0ID0gTWF0aC5QSSAvIDY7XG4gICAgY29uc3QgYXRhbjIgPSBNYXRoLmF0YW4yKC14LCB5KTtcbiAgICBjb25zdCByYWRpYW4gPSBhdGFuMiA8IDAgPyBNYXRoLlBJICogMiArIGF0YW4yIDogYXRhbjI7XG4gICAgY29uc3QgaW5pdGlhbFZhbHVlID0gTWF0aC5yb3VuZChyYWRpYW4gLyB1bml0KTtcbiAgICBjb25zdCB6ID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xuICAgIGNvbnN0IG91dGVyID0geiA+IENMT0NLX09VVEVSX1JBRElVUyAtIENMT0NLX1RJQ0tfUkFESVVTO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZ2V0SG91clZhbHVlKGluaXRpYWxWYWx1ZSwgb3V0ZXIpO1xuXG4gICAgaWYgKHRoaXMuYXZhaWxhYmxlSG91cnMuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHZhbHVlO1xuICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KHtcbiAgICAgICAgaG91cjogdGhpcy5zZWxlY3RlZEhvdXIsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgLyoqIFJldHVybiB2YWx1ZSBvZiBob3VyLiAqL1xuICBwcml2YXRlIF9nZXRIb3VyVmFsdWUodmFsdWU6IG51bWJlciwgb3V0ZXI6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIGNvbnN0IGVkZ2VWYWx1ZSA9IHZhbHVlID09PSAwIHx8IHZhbHVlID09PSAxMjtcblxuICAgIGlmICh0aGlzLmlzTWVyaWRpZW0pIHtcbiAgICAgIHJldHVybiBlZGdlVmFsdWUgPyAxMiA6IHZhbHVlO1xuICAgIH1cblxuICAgIGlmIChvdXRlcikge1xuICAgICAgcmV0dXJuIGVkZ2VWYWx1ZSA/IDAgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWRnZVZhbHVlID8gMTIgOiB2YWx1ZSArIDEyO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgbGlzdCBvZiBob3Vycy4gKi9cbiAgcHJpdmF0ZSBfaW5pdEhvdXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGluaXRpYWxIb3VycyA9IHRoaXMuaXNNZXJpZGllbSA/IEFMTF9IT1VSUy5zbGljZSgxLCAxMykgOiBBTExfSE9VUlM7XG5cbiAgICB0aGlzLmhvdXJzID0gaW5pdGlhbEhvdXJzLm1hcCgoaG91cikgPT4ge1xuICAgICAgY29uc3QgcmFkaWFuID0gKGhvdXIgLyA2KSAqIE1hdGguUEk7XG4gICAgICBjb25zdCByYWRpdXMgPSB0aGlzLl9nZXRSYWRpdXMoaG91cik7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiBob3VyLFxuICAgICAgICBkaXNwbGF5VmFsdWU6IGhvdXIgPT09IDAgPyAnMDAnIDogU3RyaW5nKGhvdXIpLFxuICAgICAgICBsZWZ0OiBDTE9DS19DT1JSRUNURURfUkFESVVTICsgTWF0aC5zaW4ocmFkaWFuKSAqIHJhZGl1cyxcbiAgICAgICAgdG9wOiBDTE9DS19DT1JSRUNURURfUkFESVVTIC0gTWF0aC5jb3MocmFkaWFuKSAqIHJhZGl1cyxcbiAgICAgICAgZGlzYWJsZWQ6ICF0aGlzLmF2YWlsYWJsZUhvdXJzLmluY2x1ZGVzKGhvdXIpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHJhZGl1cyBiYXNlZCBvbiBob3VyICovXG4gIHByaXZhdGUgX2dldFJhZGl1cyhob3VyOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmlzTWVyaWRpZW0pIHtcbiAgICAgIHJldHVybiBDTE9DS19PVVRFUl9SQURJVVM7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0ZXIgPSBob3VyID49IDAgJiYgaG91ciA8IDEyO1xuICAgIGNvbnN0IHJhZGl1cyA9IG91dGVyID8gQ0xPQ0tfT1VURVJfUkFESVVTIDogQ0xPQ0tfSU5ORVJfUkFESVVTO1xuXG4gICAgcmV0dXJuIHJhZGl1cztcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cIm1hdC1jbG9jay1kaWFsLWhhbmRcIlxuICBbY2xhc3MubWF0LWNsb2NrLWRpYWwtaGFuZC1wb2ludGxlc3NdPVwiaXNIb3VyXCJcbiAgW2NsYXNzLm1hdC1jbG9jay1kaWFsLWhhbmQtZGlzYWJsZWRdPVwiZGlzYWJsZWRIYW5kXCJcbiAgW25nU3R5bGVdPVwiX2hhbmRTdHlsZXMoKVwiXG4+PC9kaXY+XG48bmctdGVtcGxhdGUgbmdGb3IgbGV0LWhvdXIgW25nRm9yT2ZdPVwiaG91cnNcIiBbbmdGb3JUcmFja0J5XT1cIl90cmFja0J5XCI+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cIm1hdC1jbG9jay1kaWFsLWNlbGwgbWF0LWVsZXZhdGlvbi16MFwiXG4gICAgbWF0LW1pbmktZmFiXG4gICAgZGlzYWJsZVJpcHBsZVxuICAgIFt0YWJJbmRleF09XCJfaXNBY3RpdmVDZWxsKGhvdXIudmFsdWUpID8gMCA6IC0xXCJcbiAgICBbc3R5bGUubGVmdC5weF09XCJob3VyLmxlZnRcIlxuICAgIFtzdHlsZS50b3AucHhdPVwiaG91ci50b3BcIlxuICAgIFtjbGFzcy5tYXQtY2xvY2stZGlhbC1jZWxsLWFjdGl2ZV09XCJfaXNBY3RpdmVDZWxsKGhvdXIudmFsdWUpXCJcbiAgICBbY2xhc3MubWF0LWNsb2NrLWRpYWwtY2VsbC1kaXNhYmxlZF09XCJob3VyLmRpc2FibGVkXCJcbiAgICBbY29sb3JdPVwiX2lzQWN0aXZlQ2VsbChob3VyLnZhbHVlKSA/IGNvbG9yIDogdW5kZWZpbmVkXCJcbiAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImhvdXIuZGlzYWJsZWQgfHwgbnVsbFwiXG4gID5cbiAgICB7eyBob3VyLmRpc3BsYXlWYWx1ZSB9fVxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|