@idea-ionic/uncommon 8.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +373 -0
- package/README.md +21 -0
- package/css/global.scss +15 -0
- package/esm2022/idea-ionic-uncommon.mjs +5 -0
- package/esm2022/public-api.mjs +35 -0
- package/esm2022/src/AWSAPI.service.mjs +430 -0
- package/esm2022/src/AWSAPISocket.service.mjs +187 -0
- package/esm2022/src/address/address.component.mjs +94 -0
- package/esm2022/src/address/address.module.mjs +21 -0
- package/esm2022/src/announcement/announcement.component.mjs +41 -0
- package/esm2022/src/announcement/announcement.module.mjs +21 -0
- package/esm2022/src/cachedResources.service.mjs +55 -0
- package/esm2022/src/colors/colorPicker.component.mjs +135 -0
- package/esm2022/src/colors/colorPicker.module.mjs +20 -0
- package/esm2022/src/contacts/contacts.component.mjs +64 -0
- package/esm2022/src/contacts/contacts.module.mjs +21 -0
- package/esm2022/src/dateTime/calendarPicker.component.mjs +196 -0
- package/esm2022/src/dateTime/dateTime.component.mjs +133 -0
- package/esm2022/src/dateTime/dateTime.module.mjs +22 -0
- package/esm2022/src/duration/duration.component.mjs +77 -0
- package/esm2022/src/duration/duration.module.mjs +21 -0
- package/esm2022/src/echo/echo.module.mjs +26 -0
- package/esm2022/src/echo/echo.page.mjs +165 -0
- package/esm2022/src/errorReporting.service.mjs +68 -0
- package/esm2022/src/mde/mde.component.mjs +44 -0
- package/esm2022/src/mde/mde.module.mjs +22 -0
- package/esm2022/src/mde/mdeToolbar.component.mjs +12 -0
- package/esm2022/src/offline/cacheableResource.component.mjs +18 -0
- package/esm2022/src/offline/offline.module.mjs +22 -0
- package/esm2022/src/offline/offline.service.mjs +62 -0
- package/esm2022/src/offline/offlineData.service.mjs +479 -0
- package/esm2022/src/offline/offlineIndicator.component.mjs +58 -0
- package/esm2022/src/offline/offlineManager.component.mjs +84 -0
- package/esm2022/src/pushNotifications.service.mjs +56 -0
- package/esm2022/src/sentiment/sentiment.component.mjs +71 -0
- package/esm2022/src/sentiment/sentiment.module.mjs +21 -0
- package/esm2022/src/timeInterval/fromTimeToTime.component.mjs +155 -0
- package/esm2022/src/timeInterval/timeInterval.component.mjs +122 -0
- package/esm2022/src/timeInterval/timeInterval.module.mjs +22 -0
- package/esm2022/src/tinCan.service.mjs +49 -0
- package/fesm2022/idea-ionic-uncommon.mjs +2891 -0
- package/fesm2022/idea-ionic-uncommon.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +51 -0
- package/public-api.d.ts +34 -0
- package/src/AWSAPI.service.d.ts +178 -0
- package/src/AWSAPISocket.service.d.ts +129 -0
- package/src/address/address.component.d.ts +64 -0
- package/src/address/address.module.d.ts +11 -0
- package/src/announcement/announcement.component.d.ts +23 -0
- package/src/announcement/announcement.module.d.ts +11 -0
- package/src/cachedResources.service.d.ts +34 -0
- package/src/colors/colorPicker.component.d.ts +78 -0
- package/src/colors/colorPicker.module.d.ts +10 -0
- package/src/contacts/contacts.component.d.ts +31 -0
- package/src/contacts/contacts.module.d.ts +11 -0
- package/src/dateTime/calendarPicker.component.d.ts +45 -0
- package/src/dateTime/dateTime.component.d.ts +81 -0
- package/src/dateTime/dateTime.module.d.ts +12 -0
- package/src/duration/duration.component.d.ts +68 -0
- package/src/duration/duration.module.d.ts +11 -0
- package/src/echo/echo.module.d.ts +12 -0
- package/src/echo/echo.page.d.ts +34 -0
- package/src/errorReporting.service.d.ts +26 -0
- package/src/mde/mde.component.d.ts +39 -0
- package/src/mde/mde.module.d.ts +12 -0
- package/src/mde/mdeToolbar.component.d.ts +5 -0
- package/src/offline/cacheableResource.component.d.ts +11 -0
- package/src/offline/offline.module.d.ts +12 -0
- package/src/offline/offline.service.d.ts +39 -0
- package/src/offline/offlineData.service.d.ts +281 -0
- package/src/offline/offlineIndicator.component.d.ts +25 -0
- package/src/offline/offlineManager.component.d.ts +17 -0
- package/src/pushNotifications.service.d.ts +26 -0
- package/src/sentiment/sentiment.component.d.ts +35 -0
- package/src/sentiment/sentiment.module.d.ts +11 -0
- package/src/timeInterval/fromTimeToTime.component.d.ts +61 -0
- package/src/timeInterval/timeInterval.component.d.ts +84 -0
- package/src/timeInterval/timeInterval.module.d.ts +12 -0
- package/src/tinCan.service.d.ts +31 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { Component, Input, inject } from '@angular/core';
|
|
2
|
+
import { ModalController } from '@ionic/angular';
|
|
3
|
+
import { TimeInterval } from 'idea-toolbox';
|
|
4
|
+
import { IDEATranslationsService } from '@idea-ionic/common';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@ionic/angular";
|
|
7
|
+
import * as i2 from "@idea-ionic/common";
|
|
8
|
+
export class IDEAFromTimeToTimeComponent {
|
|
9
|
+
constructor() {
|
|
10
|
+
this._modal = inject(ModalController);
|
|
11
|
+
this._translate = inject(IDEATranslationsService);
|
|
12
|
+
/**
|
|
13
|
+
* Whether we should start picking the time displaying the afternoon (PM) or the morning (AM, default).
|
|
14
|
+
*/
|
|
15
|
+
this.period = Periods.AM;
|
|
16
|
+
this.Segments = Segments;
|
|
17
|
+
this.Periods = Periods;
|
|
18
|
+
}
|
|
19
|
+
ngOnInit() {
|
|
20
|
+
this.segment = Segments.FROM;
|
|
21
|
+
this.minutes = 30;
|
|
22
|
+
this.timeIntervalWC = new TimeInterval(this.timeInterval);
|
|
23
|
+
}
|
|
24
|
+
setInterval(hours, minutes) {
|
|
25
|
+
// adjust the hour based on the start of the interval and the settings of am/pm
|
|
26
|
+
hours = this.contextualizeHour(hours, minutes);
|
|
27
|
+
// convert the hours and minutes in milliseconds
|
|
28
|
+
const timeMs = this.timeToMs(hours, minutes);
|
|
29
|
+
// set the correct part of the interval, based on the current segment
|
|
30
|
+
if (this.segment === Segments.FROM) {
|
|
31
|
+
// set the start of the interval (from) and change the segment so that the end (to) will be picked
|
|
32
|
+
this.timeIntervalWC.from = timeMs;
|
|
33
|
+
this.segment = Segments.TO;
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
// can't proceed if from and to are equal
|
|
37
|
+
if (timeMs === this.timeIntervalWC.from)
|
|
38
|
+
return;
|
|
39
|
+
// set the end of the interval (to)
|
|
40
|
+
this.timeIntervalWC.to = timeMs;
|
|
41
|
+
// save the changes and notify the parent component
|
|
42
|
+
this.save();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
timeToMs(hours, minutes) {
|
|
46
|
+
return (hours * 60 * 60 + (minutes || 0) * 60) * 1000;
|
|
47
|
+
}
|
|
48
|
+
getClockButtonContent(hours, minutes) {
|
|
49
|
+
// adjust the hour based on the start of the interval and the settings of am/pm
|
|
50
|
+
hours = this.contextualizeHour(hours, minutes);
|
|
51
|
+
// convert the calculated time into a readable string; we need to format it to distinguish 0-24 vs 0-12 am/pm
|
|
52
|
+
const refDate = new Date();
|
|
53
|
+
refDate.setHours(hours, minutes || 0, 0);
|
|
54
|
+
const str = this._translate.formatDate(refDate, 'shortTime');
|
|
55
|
+
// remove the extra part (e.g. am/pm), based on the type of button we have to show
|
|
56
|
+
const strArr = str.split(':');
|
|
57
|
+
return String(Number(strArr[0])).concat(minutes ? ':'.concat(strArr[1].slice(0, 2)) : '');
|
|
58
|
+
}
|
|
59
|
+
contextualizeHour(hours, minutes) {
|
|
60
|
+
// adjust the content to the afternoon hours, if needed
|
|
61
|
+
if (this.period === Periods.PM)
|
|
62
|
+
hours += 12;
|
|
63
|
+
// if we already selected the start of the interval, check whether we need to adjust the time: the center of the
|
|
64
|
+
// clock will be moved to the selected hour (from), to have a reasonable set of choices for the end (to)
|
|
65
|
+
if (this.segment === Segments.TO && this.timeToMs(hours, minutes) < this.timeIntervalWC.from)
|
|
66
|
+
hours += this.period === Periods.PM ? -12 : 12;
|
|
67
|
+
// set midnight to 00
|
|
68
|
+
if (hours === 24)
|
|
69
|
+
hours = 0;
|
|
70
|
+
return hours;
|
|
71
|
+
}
|
|
72
|
+
equalsFrom(hours, minutes) {
|
|
73
|
+
// if the start of the interval hasn't been selected yet, skip it
|
|
74
|
+
if (this.segment === Segments.FROM)
|
|
75
|
+
return false;
|
|
76
|
+
// adjust the hour based on the start of the interval and the settings of am/pm
|
|
77
|
+
hours = this.contextualizeHour(hours, minutes);
|
|
78
|
+
// compare the two strings based on the timestamps in ms
|
|
79
|
+
return this.msToTimeString(this.timeIntervalWC.from) === this.msToTimeString(this.timeToMs(hours, minutes));
|
|
80
|
+
}
|
|
81
|
+
isAllowed(hours, minutes) {
|
|
82
|
+
// adjust the hour based on the start of the interval and the settings of am/pm
|
|
83
|
+
hours = this.contextualizeHour(hours, minutes);
|
|
84
|
+
// check whether the selected time is inside the given boundaries
|
|
85
|
+
return ((!this.notEarlierThan ||
|
|
86
|
+
this.timeToMs(hours, minutes) >= this.notEarlierThan ||
|
|
87
|
+
this.timeToMs(hours, minutes) === 0) &&
|
|
88
|
+
(!this.notLaterThan || this.timeToMs(hours, minutes) <= this.notLaterThan));
|
|
89
|
+
}
|
|
90
|
+
isHourOfOppositeMeridian(hours, minutes) {
|
|
91
|
+
// if the start of the interval hasn't been selected yet, skip it
|
|
92
|
+
if (this.segment === Segments.FROM)
|
|
93
|
+
return false;
|
|
94
|
+
// adjust the hour based on the start of the interval and the settings of am/pm
|
|
95
|
+
hours = this.contextualizeHour(hours, minutes);
|
|
96
|
+
// calculate the ms of the selected time and of "noon" time (to determ the meridian)
|
|
97
|
+
const timeMs = this.timeToMs(hours, minutes);
|
|
98
|
+
const noonMs = this.timeToMs(12);
|
|
99
|
+
// return true in case the hour doesn't belong to the current meridian
|
|
100
|
+
return (this.period === Periods.AM && timeMs > noonMs) || (this.period === Periods.PM && timeMs < noonMs);
|
|
101
|
+
}
|
|
102
|
+
msToTimeString(time) {
|
|
103
|
+
if (!time)
|
|
104
|
+
return '';
|
|
105
|
+
// note: the time must be always considered without any timezone (UTC)
|
|
106
|
+
const refDate = new Date();
|
|
107
|
+
refDate.setTime(time);
|
|
108
|
+
const dateOpts = { timeZone: 'UTC', hour: '2-digit', minute: '2-digit' };
|
|
109
|
+
return refDate.toLocaleTimeString(this._translate.getCurrentLang(), dateOpts);
|
|
110
|
+
}
|
|
111
|
+
save() {
|
|
112
|
+
this.timeInterval.load(this.timeIntervalWC);
|
|
113
|
+
this._modal.dismiss(true);
|
|
114
|
+
}
|
|
115
|
+
reset() {
|
|
116
|
+
this.timeInterval.reset();
|
|
117
|
+
this._modal.dismiss(false);
|
|
118
|
+
}
|
|
119
|
+
close() {
|
|
120
|
+
this._modal.dismiss();
|
|
121
|
+
}
|
|
122
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IDEAFromTimeToTimeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
123
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.1", type: IDEAFromTimeToTimeComponent, selector: "idea-from-time-to-time", inputs: { timeInterval: "timeInterval", period: "period", notEarlierThan: "notEarlierThan", notLaterThan: "notLaterThan", title: "title" }, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n <ion-title>{{ title }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"'COMMON.RESET' | translate\" (click)=\"reset()\">\n <ion-icon name=\"arrow-undo\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-grid class=\"clockGrid\">\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"5\"> </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(12) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(12)\"\n [disabled]=\"!isAllowed(12)\"\n (click)=\"setInterval(12)\"\n >\n {{ getClockButtonContent(12) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(12, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(12, minutes)\"\n [disabled]=\"!isAllowed(12, minutes)\"\n (click)=\"setInterval(12, minutes)\"\n >\n {{ getClockButtonContent(12, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"3\"> </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"2\"> </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(11, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(11, minutes)\"\n [disabled]=\"!isAllowed(11, minutes)\"\n (click)=\"setInterval(11, minutes)\"\n >\n {{ getClockButtonContent(11, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(11) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(11)\"\n [disabled]=\"!isAllowed(11)\"\n (click)=\"setInterval(11)\"\n >\n {{ getClockButtonContent(11) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(1) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(1)\"\n [disabled]=\"!isAllowed(1)\"\n (click)=\"setInterval(1)\"\n >\n {{ getClockButtonContent(1) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(1, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(1, minutes)\"\n [disabled]=\"!isAllowed(1, minutes)\"\n (click)=\"setInterval(1, minutes)\"\n >\n {{ getClockButtonContent(1, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\"> </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"1\"> </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(10, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(10, minutes)\"\n [disabled]=\"!isAllowed(10, minutes)\"\n (click)=\"setInterval(10, minutes)\"\n >\n {{ getClockButtonContent(10, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(10) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(10)\"\n [disabled]=\"!isAllowed(10)\"\n (click)=\"setInterval(10)\"\n >\n {{ getClockButtonContent(10) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\"> </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(2) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(2)\"\n [disabled]=\"!isAllowed(2)\"\n (click)=\"setInterval(2)\"\n >\n {{ getClockButtonContent(2) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(2, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(2, minutes)\"\n [disabled]=\"!isAllowed(2, minutes)\"\n (click)=\"setInterval(2, minutes)\"\n >\n {{ getClockButtonContent(2, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"1\"> </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(9, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(9, minutes)\"\n [disabled]=\"!isAllowed(9, minutes)\"\n (click)=\"setInterval(9, minutes)\"\n >\n {{ getClockButtonContent(9, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(9) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(9)\"\n [disabled]=\"!isAllowed(9)\"\n (click)=\"setInterval(9)\"\n >\n {{ getClockButtonContent(9) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center displayText\" [size]=\"4\">\n <ion-text [class.fromSelected]=\"segment === Segments.TO\">\n {{ 'IDEA_UNCOMMON.FTTT.FROM' | translate }}\n @if (segment === Segments.TO) {\n <span>{{ msToTimeString(_timeInterval.from) }}</span>\n }\n </ion-text>\n @if (segment === Segments.TO) {\n <ion-text>{{ 'IDEA_UNCOMMON.FTTT.TO' | translate }}</ion-text>\n }\n </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(3) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(3)\"\n [disabled]=\"!isAllowed(3)\"\n (click)=\"setInterval(3)\"\n >\n {{ getClockButtonContent(3) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(3, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(3, minutes)\"\n [disabled]=\"!isAllowed(3, minutes)\"\n (click)=\"setInterval(3, minutes)\"\n >\n {{ getClockButtonContent(3, minutes) }}\n </ion-button>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"1\"> </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(8, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(8, minutes)\"\n [disabled]=\"!isAllowed(8, minutes)\"\n (click)=\"setInterval(8, minutes)\"\n >\n {{ getClockButtonContent(8, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(8) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(8)\"\n [disabled]=\"!isAllowed(8)\"\n (click)=\"setInterval(8)\"\n >\n {{ getClockButtonContent(8) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\"> </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(4) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(4)\"\n [disabled]=\"!isAllowed(4)\"\n (click)=\"setInterval(4)\"\n >\n {{ getClockButtonContent(4) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(4, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(4, minutes)\"\n [disabled]=\"!isAllowed(4, minutes)\"\n (click)=\"setInterval(4, minutes)\"\n >\n {{ getClockButtonContent(4, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"1\"> </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"2\"> </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(7, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(7, minutes)\"\n [disabled]=\"!isAllowed(7, minutes)\"\n (click)=\"setInterval(7, minutes)\"\n >\n {{ getClockButtonContent(7, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(7) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(7)\"\n [disabled]=\"!isAllowed(7)\"\n (click)=\"setInterval(7)\"\n >\n {{ getClockButtonContent(7) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(5) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(5)\"\n [disabled]=\"!isAllowed(5)\"\n (click)=\"setInterval(5)\"\n >\n {{ getClockButtonContent(5) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(5, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(5, minutes)\"\n [disabled]=\"!isAllowed(5, minutes)\"\n (click)=\"setInterval(5, minutes)\"\n >\n {{ getClockButtonContent(5, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\"> </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"3\"> </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(6, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(6, minutes)\"\n [disabled]=\"!isAllowed(6, minutes)\"\n (click)=\"setInterval(6, minutes)\"\n >\n {{ getClockButtonContent(6, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(6) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(6)\"\n [disabled]=\"!isAllowed(6)\"\n (click)=\"setInterval(6)\"\n >\n {{ getClockButtonContent(6) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"5\"> </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-right\" [size]=\"3\" [sizeSm]=\"7\">\n <ion-text class=\"prefLabel\">{{ 'IDEA_UNCOMMON.FTTT.PERIOD' | translate }}:</ion-text>\n </ion-col>\n <ion-col [size]=\"9\" [sizeSm]=\"5\">\n <ion-segment [value]=\"period\" (ionChange)=\"period = $event?.detail?.value || period\">\n <ion-segment-button [value]=\"Periods.AM\">\n <ion-label>{{ 'IDEA_UNCOMMON.FTTT.AM' | translate }}</ion-label>\n </ion-segment-button>\n <ion-segment-button [value]=\"Periods.PM\">\n <ion-label>{{ 'IDEA_UNCOMMON.FTTT.PM' | translate }}</ion-label>\n </ion-segment-button>\n </ion-segment>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-right\" [size]=\"3\" [sizeSm]=\"7\">\n <ion-text class=\"prefLabel\">{{ 'IDEA_UNCOMMON.FTTT.MINUTES_PREFERENCE' | translate }}:</ion-text>\n </ion-col>\n <ion-col [size]=\"9\" [sizeSm]=\"5\">\n <ion-segment [value]=\"minutes\" (ionChange)=\"minutes = $event?.detail?.value || minutes\">\n <ion-segment-button value=\"15\">\n <ion-label>15</ion-label>\n </ion-segment-button>\n <ion-segment-button value=\"30\">\n <ion-label>30</ion-label>\n </ion-segment-button>\n <ion-segment-button value=\"45\">\n <ion-label>45</ion-label>\n </ion-segment-button>\n </ion-segment>\n </ion-col>\n </ion-row>\n </ion-grid>\n</ion-content>\n", styles: ["ion-grid.clockGrid ion-button[size=large]{width:50px;height:50px;font-size:1.1em;font-weight:700}ion-grid.clockGrid ion-button[size=small]{font-size:.75em}ion-grid.clockGrid ion-button.oppositeMeridian{--border-color: var(--ion-color-medium);--border-style: dashed;--border-width: 1px}ion-grid.clockGrid .displayText ion-text{font-size:1.3em;font-weight:700}ion-grid.clockGrid .displayText ion-text.fromSelected{display:block;padding-bottom:3px;font-size:.9em}ion-grid.clockGrid ion-segment ion-segment-button{min-width:50px;--color-checked: var(--ion-color-dark);--border-color: var(--ion-color-dark)}ion-grid.clockGrid .prefLabel{font-size:.6em;font-weight:700;text-transform:uppercase}\n"], dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonSegment, selector: "ion-segment", inputs: ["color", "disabled", "mode", "scrollable", "selectOnFocus", "swipeGesture", "value"] }, { kind: "component", type: i1.IonSegmentButton, selector: "ion-segment-button", inputs: ["disabled", "layout", "mode", "type", "value"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i1.SelectValueAccessor, selector: "ion-select, ion-radio-group, ion-segment, ion-datetime" }, { kind: "pipe", type: i2.IDEATranslatePipe, name: "translate" }] }); }
|
|
124
|
+
}
|
|
125
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IDEAFromTimeToTimeComponent, decorators: [{
|
|
126
|
+
type: Component,
|
|
127
|
+
args: [{ selector: 'idea-from-time-to-time', template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n <ion-title>{{ title }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"'COMMON.RESET' | translate\" (click)=\"reset()\">\n <ion-icon name=\"arrow-undo\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-grid class=\"clockGrid\">\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"5\"> </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(12) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(12)\"\n [disabled]=\"!isAllowed(12)\"\n (click)=\"setInterval(12)\"\n >\n {{ getClockButtonContent(12) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(12, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(12, minutes)\"\n [disabled]=\"!isAllowed(12, minutes)\"\n (click)=\"setInterval(12, minutes)\"\n >\n {{ getClockButtonContent(12, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"3\"> </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"2\"> </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(11, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(11, minutes)\"\n [disabled]=\"!isAllowed(11, minutes)\"\n (click)=\"setInterval(11, minutes)\"\n >\n {{ getClockButtonContent(11, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(11) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(11)\"\n [disabled]=\"!isAllowed(11)\"\n (click)=\"setInterval(11)\"\n >\n {{ getClockButtonContent(11) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(1) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(1)\"\n [disabled]=\"!isAllowed(1)\"\n (click)=\"setInterval(1)\"\n >\n {{ getClockButtonContent(1) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(1, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(1, minutes)\"\n [disabled]=\"!isAllowed(1, minutes)\"\n (click)=\"setInterval(1, minutes)\"\n >\n {{ getClockButtonContent(1, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\"> </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"1\"> </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(10, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(10, minutes)\"\n [disabled]=\"!isAllowed(10, minutes)\"\n (click)=\"setInterval(10, minutes)\"\n >\n {{ getClockButtonContent(10, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(10) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(10)\"\n [disabled]=\"!isAllowed(10)\"\n (click)=\"setInterval(10)\"\n >\n {{ getClockButtonContent(10) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\"> </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(2) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(2)\"\n [disabled]=\"!isAllowed(2)\"\n (click)=\"setInterval(2)\"\n >\n {{ getClockButtonContent(2) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(2, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(2, minutes)\"\n [disabled]=\"!isAllowed(2, minutes)\"\n (click)=\"setInterval(2, minutes)\"\n >\n {{ getClockButtonContent(2, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"1\"> </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(9, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(9, minutes)\"\n [disabled]=\"!isAllowed(9, minutes)\"\n (click)=\"setInterval(9, minutes)\"\n >\n {{ getClockButtonContent(9, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(9) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(9)\"\n [disabled]=\"!isAllowed(9)\"\n (click)=\"setInterval(9)\"\n >\n {{ getClockButtonContent(9) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center displayText\" [size]=\"4\">\n <ion-text [class.fromSelected]=\"segment === Segments.TO\">\n {{ 'IDEA_UNCOMMON.FTTT.FROM' | translate }}\n @if (segment === Segments.TO) {\n <span>{{ msToTimeString(_timeInterval.from) }}</span>\n }\n </ion-text>\n @if (segment === Segments.TO) {\n <ion-text>{{ 'IDEA_UNCOMMON.FTTT.TO' | translate }}</ion-text>\n }\n </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(3) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(3)\"\n [disabled]=\"!isAllowed(3)\"\n (click)=\"setInterval(3)\"\n >\n {{ getClockButtonContent(3) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(3, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(3, minutes)\"\n [disabled]=\"!isAllowed(3, minutes)\"\n (click)=\"setInterval(3, minutes)\"\n >\n {{ getClockButtonContent(3, minutes) }}\n </ion-button>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"1\"> </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(8, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(8, minutes)\"\n [disabled]=\"!isAllowed(8, minutes)\"\n (click)=\"setInterval(8, minutes)\"\n >\n {{ getClockButtonContent(8, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(8) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(8)\"\n [disabled]=\"!isAllowed(8)\"\n (click)=\"setInterval(8)\"\n >\n {{ getClockButtonContent(8) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\"> </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(4) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(4)\"\n [disabled]=\"!isAllowed(4)\"\n (click)=\"setInterval(4)\"\n >\n {{ getClockButtonContent(4) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(4, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(4, minutes)\"\n [disabled]=\"!isAllowed(4, minutes)\"\n (click)=\"setInterval(4, minutes)\"\n >\n {{ getClockButtonContent(4, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"1\"> </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"2\"> </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(7, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(7, minutes)\"\n [disabled]=\"!isAllowed(7, minutes)\"\n (click)=\"setInterval(7, minutes)\"\n >\n {{ getClockButtonContent(7, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(7) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(7)\"\n [disabled]=\"!isAllowed(7)\"\n (click)=\"setInterval(7)\"\n >\n {{ getClockButtonContent(7) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(5) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(5)\"\n [disabled]=\"!isAllowed(5)\"\n (click)=\"setInterval(5)\"\n >\n {{ getClockButtonContent(5) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(5, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(5, minutes)\"\n [disabled]=\"!isAllowed(5, minutes)\"\n (click)=\"setInterval(5, minutes)\"\n >\n {{ getClockButtonContent(5, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"2\"> </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col [size]=\"3\"> </ion-col>\n <ion-col class=\"ion-text-right\" [size]=\"2\">\n <ion-button\n size=\"small\"\n [color]=\"equalsFrom(6, minutes) ? 'primary' : 'light'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(6, minutes)\"\n [disabled]=\"!isAllowed(6, minutes)\"\n (click)=\"setInterval(6, minutes)\"\n >\n {{ getClockButtonContent(6, minutes) }}\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"2\">\n <ion-button\n size=\"large\"\n shape=\"round\"\n [color]=\"equalsFrom(6) ? 'primary' : 'dark'\"\n [class.oppositeMeridian]=\"isHourOfOppositeMeridian(6)\"\n [disabled]=\"!isAllowed(6)\"\n (click)=\"setInterval(6)\"\n >\n {{ getClockButtonContent(6) }}\n </ion-button>\n </ion-col>\n <ion-col [size]=\"5\"> </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-right\" [size]=\"3\" [sizeSm]=\"7\">\n <ion-text class=\"prefLabel\">{{ 'IDEA_UNCOMMON.FTTT.PERIOD' | translate }}:</ion-text>\n </ion-col>\n <ion-col [size]=\"9\" [sizeSm]=\"5\">\n <ion-segment [value]=\"period\" (ionChange)=\"period = $event?.detail?.value || period\">\n <ion-segment-button [value]=\"Periods.AM\">\n <ion-label>{{ 'IDEA_UNCOMMON.FTTT.AM' | translate }}</ion-label>\n </ion-segment-button>\n <ion-segment-button [value]=\"Periods.PM\">\n <ion-label>{{ 'IDEA_UNCOMMON.FTTT.PM' | translate }}</ion-label>\n </ion-segment-button>\n </ion-segment>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-right\" [size]=\"3\" [sizeSm]=\"7\">\n <ion-text class=\"prefLabel\">{{ 'IDEA_UNCOMMON.FTTT.MINUTES_PREFERENCE' | translate }}:</ion-text>\n </ion-col>\n <ion-col [size]=\"9\" [sizeSm]=\"5\">\n <ion-segment [value]=\"minutes\" (ionChange)=\"minutes = $event?.detail?.value || minutes\">\n <ion-segment-button value=\"15\">\n <ion-label>15</ion-label>\n </ion-segment-button>\n <ion-segment-button value=\"30\">\n <ion-label>30</ion-label>\n </ion-segment-button>\n <ion-segment-button value=\"45\">\n <ion-label>45</ion-label>\n </ion-segment-button>\n </ion-segment>\n </ion-col>\n </ion-row>\n </ion-grid>\n</ion-content>\n", styles: ["ion-grid.clockGrid ion-button[size=large]{width:50px;height:50px;font-size:1.1em;font-weight:700}ion-grid.clockGrid ion-button[size=small]{font-size:.75em}ion-grid.clockGrid ion-button.oppositeMeridian{--border-color: var(--ion-color-medium);--border-style: dashed;--border-width: 1px}ion-grid.clockGrid .displayText ion-text{font-size:1.3em;font-weight:700}ion-grid.clockGrid .displayText ion-text.fromSelected{display:block;padding-bottom:3px;font-size:.9em}ion-grid.clockGrid ion-segment ion-segment-button{min-width:50px;--color-checked: var(--ion-color-dark);--border-color: var(--ion-color-dark)}ion-grid.clockGrid .prefLabel{font-size:.6em;font-weight:700;text-transform:uppercase}\n"] }]
|
|
128
|
+
}], propDecorators: { timeInterval: [{
|
|
129
|
+
type: Input
|
|
130
|
+
}], period: [{
|
|
131
|
+
type: Input
|
|
132
|
+
}], notEarlierThan: [{
|
|
133
|
+
type: Input
|
|
134
|
+
}], notLaterThan: [{
|
|
135
|
+
type: Input
|
|
136
|
+
}], title: [{
|
|
137
|
+
type: Input
|
|
138
|
+
}] } });
|
|
139
|
+
/**
|
|
140
|
+
* The two stages of the component, to pick the start and the end of the interval.
|
|
141
|
+
*/
|
|
142
|
+
var Segments;
|
|
143
|
+
(function (Segments) {
|
|
144
|
+
Segments["FROM"] = "FROM";
|
|
145
|
+
Segments["TO"] = "TO";
|
|
146
|
+
})(Segments || (Segments = {}));
|
|
147
|
+
/**
|
|
148
|
+
* The two possible periods of the component, to interpret the clock the right way.
|
|
149
|
+
*/
|
|
150
|
+
export var Periods;
|
|
151
|
+
(function (Periods) {
|
|
152
|
+
Periods["AM"] = "AM";
|
|
153
|
+
Periods["PM"] = "PM";
|
|
154
|
+
})(Periods || (Periods = {}));
|
|
155
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJvbVRpbWVUb1RpbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy91bmNvbW1vbi9zcmMvdGltZUludGVydmFsL2Zyb21UaW1lVG9UaW1lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL21vZHVsZXMvdW5jb21tb24vc3JjL3RpbWVJbnRlcnZhbC9mcm9tVGltZVRvVGltZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7QUFPN0QsTUFBTSxPQUFPLDJCQUEyQjtJQUx4QztRQU1VLFdBQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsZUFBVSxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBTXJEOztXQUVHO1FBQ00sV0FBTSxHQUFZLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFldEMsYUFBUSxHQUFHLFFBQVEsQ0FBQztRQUNwQixZQUFPLEdBQUcsT0FBTyxDQUFDO0tBK0duQjtJQTNHQyxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxXQUFXLENBQUMsS0FBYSxFQUFFLE9BQWdCO1FBQ3pDLCtFQUErRTtRQUMvRSxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvQyxnREFBZ0Q7UUFDaEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDN0MscUVBQXFFO1FBQ3JFLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbkMsa0dBQWtHO1lBQ2xHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztZQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDN0IsQ0FBQzthQUFNLENBQUM7WUFDTix5Q0FBeUM7WUFDekMsSUFBSSxNQUFNLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJO2dCQUFFLE9BQU87WUFDaEQsbUNBQW1DO1lBQ25DLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUNoQyxtREFBbUQ7WUFDbkQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFDTyxRQUFRLENBQUMsS0FBYSxFQUFFLE9BQWdCO1FBQzlDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDeEQsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQWEsRUFBRSxPQUFnQjtRQUNuRCwrRUFBK0U7UUFDL0UsS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0MsNkdBQTZHO1FBQzdHLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDM0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDN0Qsa0ZBQWtGO1FBQ2xGLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBQ08saUJBQWlCLENBQUMsS0FBYSxFQUFFLE9BQWdCO1FBQ3ZELHVEQUF1RDtRQUN2RCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLEVBQUU7WUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzVDLGdIQUFnSDtRQUNoSCx3R0FBd0c7UUFDeEcsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJO1lBQzFGLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakQscUJBQXFCO1FBQ3JCLElBQUksS0FBSyxLQUFLLEVBQUU7WUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFhLEVBQUUsT0FBZ0I7UUFDeEMsaUVBQWlFO1FBQ2pFLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxRQUFRLENBQUMsSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ2pELCtFQUErRTtRQUMvRSxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvQyx3REFBd0Q7UUFDeEQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBYSxFQUFFLE9BQWdCO1FBQ3ZDLCtFQUErRTtRQUMvRSxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMvQyxpRUFBaUU7UUFDakUsT0FBTyxDQUNMLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYztZQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYztZQUNwRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUMzRSxDQUFDO0lBQ0osQ0FBQztJQUVELHdCQUF3QixDQUFDLEtBQWEsRUFBRSxPQUFnQjtRQUN0RCxpRUFBaUU7UUFDakUsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLFFBQVEsQ0FBQyxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDakQsK0VBQStFO1FBQy9FLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLG9GQUFvRjtRQUNwRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLHNFQUFzRTtRQUN0RSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsRUFBRSxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLEVBQUUsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDckIsc0VBQXNFO1FBQ3RFLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDM0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixNQUFNLFFBQVEsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFXLENBQUM7UUFDbEYsT0FBTyxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUM7OEdBeklVLDJCQUEyQjtrR0FBM0IsMkJBQTJCLDBNQ1Z4QywyOGJBK1dBOzsyRkRyV2EsMkJBQTJCO2tCQUx2QyxTQUFTOytCQUNFLHdCQUF3Qjs4QkFXekIsWUFBWTtzQkFBcEIsS0FBSztnQkFJRyxNQUFNO3NCQUFkLEtBQUs7Z0JBSUcsY0FBYztzQkFBdEIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLEtBQUs7c0JBQWIsS0FBSzs7QUFxSFI7O0dBRUc7QUFDSCxJQUFLLFFBR0o7QUFIRCxXQUFLLFFBQVE7SUFDWCx5QkFBYSxDQUFBO0lBQ2IscUJBQVMsQ0FBQTtBQUNYLENBQUMsRUFISSxRQUFRLEtBQVIsUUFBUSxRQUdaO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxPQUdYO0FBSEQsV0FBWSxPQUFPO0lBQ2pCLG9CQUFTLENBQUE7SUFDVCxvQkFBUyxDQUFBO0FBQ1gsQ0FBQyxFQUhXLE9BQU8sS0FBUCxPQUFPLFFBR2xCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGFsQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IFRpbWVJbnRlcnZhbCB9IGZyb20gJ2lkZWEtdG9vbGJveCc7XG5pbXBvcnQgeyBJREVBVHJhbnNsYXRpb25zU2VydmljZSB9IGZyb20gJ0BpZGVhLWlvbmljL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lkZWEtZnJvbS10aW1lLXRvLXRpbWUnLFxuICB0ZW1wbGF0ZVVybDogJ2Zyb21UaW1lVG9UaW1lLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ2Zyb21UaW1lVG9UaW1lLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSURFQUZyb21UaW1lVG9UaW1lQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBfbW9kYWwgPSBpbmplY3QoTW9kYWxDb250cm9sbGVyKTtcbiAgcHJpdmF0ZSBfdHJhbnNsYXRlID0gaW5qZWN0KElERUFUcmFuc2xhdGlvbnNTZXJ2aWNlKTtcblxuICAvKipcbiAgICogVGhlIHRpbWUgaW50ZXJ2YWwgdG8gc2V0LlxuICAgKi9cbiAgQElucHV0KCkgdGltZUludGVydmFsOiBUaW1lSW50ZXJ2YWw7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHdlIHNob3VsZCBzdGFydCBwaWNraW5nIHRoZSB0aW1lIGRpc3BsYXlpbmcgdGhlIGFmdGVybm9vbiAoUE0pIG9yIHRoZSBtb3JuaW5nIChBTSwgZGVmYXVsdCkuXG4gICAqL1xuICBASW5wdXQoKSBwZXJpb2Q6IFBlcmlvZHMgPSBQZXJpb2RzLkFNO1xuICAvKipcbiAgICogQSB0aW1lIHRvIHVzZSBhcyBsb3dlciBsaW1pdCBmb3IgdGhlIHBvc3NpYmxlIGNob2ljZXMuXG4gICAqL1xuICBASW5wdXQoKSBub3RFYXJsaWVyVGhhbjogbnVtYmVyO1xuICAvKipcbiAgICogQSB0aW1lIHRvIHVzZSBhcyB1cHBlciBsaW1pdCBmb3IgdGhlIHBvc3NpYmxlIGNob2ljZXMuXG4gICAqL1xuICBASW5wdXQoKSBub3RMYXRlclRoYW46IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSB0aXRsZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZztcblxuICBzZWdtZW50OiBTZWdtZW50cztcbiAgU2VnbWVudHMgPSBTZWdtZW50cztcbiAgUGVyaW9kcyA9IFBlcmlvZHM7XG4gIHRpbWVJbnRlcnZhbFdDOiBUaW1lSW50ZXJ2YWw7XG4gIG1pbnV0ZXM6IG51bWJlcjtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNlZ21lbnQgPSBTZWdtZW50cy5GUk9NO1xuICAgIHRoaXMubWludXRlcyA9IDMwO1xuICAgIHRoaXMudGltZUludGVydmFsV0MgPSBuZXcgVGltZUludGVydmFsKHRoaXMudGltZUludGVydmFsKTtcbiAgfVxuXG4gIHNldEludGVydmFsKGhvdXJzOiBudW1iZXIsIG1pbnV0ZXM/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBhZGp1c3QgdGhlIGhvdXIgYmFzZWQgb24gdGhlIHN0YXJ0IG9mIHRoZSBpbnRlcnZhbCBhbmQgdGhlIHNldHRpbmdzIG9mIGFtL3BtXG4gICAgaG91cnMgPSB0aGlzLmNvbnRleHR1YWxpemVIb3VyKGhvdXJzLCBtaW51dGVzKTtcbiAgICAvLyBjb252ZXJ0IHRoZSBob3VycyBhbmQgbWludXRlcyBpbiBtaWxsaXNlY29uZHNcbiAgICBjb25zdCB0aW1lTXMgPSB0aGlzLnRpbWVUb01zKGhvdXJzLCBtaW51dGVzKTtcbiAgICAvLyBzZXQgdGhlIGNvcnJlY3QgcGFydCBvZiB0aGUgaW50ZXJ2YWwsIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNlZ21lbnRcbiAgICBpZiAodGhpcy5zZWdtZW50ID09PSBTZWdtZW50cy5GUk9NKSB7XG4gICAgICAvLyBzZXQgdGhlIHN0YXJ0IG9mIHRoZSBpbnRlcnZhbCAoZnJvbSkgYW5kIGNoYW5nZSB0aGUgc2VnbWVudCBzbyB0aGF0IHRoZSBlbmQgKHRvKSB3aWxsIGJlIHBpY2tlZFxuICAgICAgdGhpcy50aW1lSW50ZXJ2YWxXQy5mcm9tID0gdGltZU1zO1xuICAgICAgdGhpcy5zZWdtZW50ID0gU2VnbWVudHMuVE87XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNhbid0IHByb2NlZWQgaWYgZnJvbSBhbmQgdG8gYXJlIGVxdWFsXG4gICAgICBpZiAodGltZU1zID09PSB0aGlzLnRpbWVJbnRlcnZhbFdDLmZyb20pIHJldHVybjtcbiAgICAgIC8vIHNldCB0aGUgZW5kIG9mIHRoZSBpbnRlcnZhbCAodG8pXG4gICAgICB0aGlzLnRpbWVJbnRlcnZhbFdDLnRvID0gdGltZU1zO1xuICAgICAgLy8gc2F2ZSB0aGUgY2hhbmdlcyBhbmQgbm90aWZ5IHRoZSBwYXJlbnQgY29tcG9uZW50XG4gICAgICB0aGlzLnNhdmUoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSB0aW1lVG9Ncyhob3VyczogbnVtYmVyLCBtaW51dGVzPzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKGhvdXJzICogNjAgKiA2MCArIChtaW51dGVzIHx8IDApICogNjApICogMTAwMDtcbiAgfVxuXG4gIGdldENsb2NrQnV0dG9uQ29udGVudChob3VyczogbnVtYmVyLCBtaW51dGVzPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAvLyBhZGp1c3QgdGhlIGhvdXIgYmFzZWQgb24gdGhlIHN0YXJ0IG9mIHRoZSBpbnRlcnZhbCBhbmQgdGhlIHNldHRpbmdzIG9mIGFtL3BtXG4gICAgaG91cnMgPSB0aGlzLmNvbnRleHR1YWxpemVIb3VyKGhvdXJzLCBtaW51dGVzKTtcbiAgICAvLyBjb252ZXJ0IHRoZSBjYWxjdWxhdGVkIHRpbWUgaW50byBhIHJlYWRhYmxlIHN0cmluZzsgd2UgbmVlZCB0byBmb3JtYXQgaXQgdG8gZGlzdGluZ3Vpc2ggMC0yNCB2cyAwLTEyIGFtL3BtXG4gICAgY29uc3QgcmVmRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgcmVmRGF0ZS5zZXRIb3Vycyhob3VycywgbWludXRlcyB8fCAwLCAwKTtcbiAgICBjb25zdCBzdHIgPSB0aGlzLl90cmFuc2xhdGUuZm9ybWF0RGF0ZShyZWZEYXRlLCAnc2hvcnRUaW1lJyk7XG4gICAgLy8gcmVtb3ZlIHRoZSBleHRyYSBwYXJ0IChlLmcuIGFtL3BtKSwgYmFzZWQgb24gdGhlIHR5cGUgb2YgYnV0dG9uIHdlIGhhdmUgdG8gc2hvd1xuICAgIGNvbnN0IHN0ckFyciA9IHN0ci5zcGxpdCgnOicpO1xuICAgIHJldHVybiBTdHJpbmcoTnVtYmVyKHN0ckFyclswXSkpLmNvbmNhdChtaW51dGVzID8gJzonLmNvbmNhdChzdHJBcnJbMV0uc2xpY2UoMCwgMikpIDogJycpO1xuICB9XG4gIHByaXZhdGUgY29udGV4dHVhbGl6ZUhvdXIoaG91cnM6IG51bWJlciwgbWludXRlcz86IG51bWJlcik6IG51bWJlciB7XG4gICAgLy8gYWRqdXN0IHRoZSBjb250ZW50IHRvIHRoZSBhZnRlcm5vb24gaG91cnMsIGlmIG5lZWRlZFxuICAgIGlmICh0aGlzLnBlcmlvZCA9PT0gUGVyaW9kcy5QTSkgaG91cnMgKz0gMTI7XG4gICAgLy8gaWYgd2UgYWxyZWFkeSBzZWxlY3RlZCB0aGUgc3RhcnQgb2YgdGhlIGludGVydmFsLCBjaGVjayB3aGV0aGVyIHdlIG5lZWQgdG8gYWRqdXN0IHRoZSB0aW1lOiB0aGUgY2VudGVyIG9mIHRoZVxuICAgIC8vIGNsb2NrIHdpbGwgYmUgbW92ZWQgdG8gdGhlIHNlbGVjdGVkIGhvdXIgKGZyb20pLCB0byBoYXZlIGEgcmVhc29uYWJsZSBzZXQgb2YgY2hvaWNlcyBmb3IgdGhlIGVuZCAodG8pXG4gICAgaWYgKHRoaXMuc2VnbWVudCA9PT0gU2VnbWVudHMuVE8gJiYgdGhpcy50aW1lVG9Ncyhob3VycywgbWludXRlcykgPCB0aGlzLnRpbWVJbnRlcnZhbFdDLmZyb20pXG4gICAgICBob3VycyArPSB0aGlzLnBlcmlvZCA9PT0gUGVyaW9kcy5QTSA/IC0xMiA6IDEyO1xuICAgIC8vIHNldCBtaWRuaWdodCB0byAwMFxuICAgIGlmIChob3VycyA9PT0gMjQpIGhvdXJzID0gMDtcbiAgICByZXR1cm4gaG91cnM7XG4gIH1cblxuICBlcXVhbHNGcm9tKGhvdXJzOiBudW1iZXIsIG1pbnV0ZXM/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAvLyBpZiB0aGUgc3RhcnQgb2YgdGhlIGludGVydmFsIGhhc24ndCBiZWVuIHNlbGVjdGVkIHlldCwgc2tpcCBpdFxuICAgIGlmICh0aGlzLnNlZ21lbnQgPT09IFNlZ21lbnRzLkZST00pIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGp1c3QgdGhlIGhvdXIgYmFzZWQgb24gdGhlIHN0YXJ0IG9mIHRoZSBpbnRlcnZhbCBhbmQgdGhlIHNldHRpbmdzIG9mIGFtL3BtXG4gICAgaG91cnMgPSB0aGlzLmNvbnRleHR1YWxpemVIb3VyKGhvdXJzLCBtaW51dGVzKTtcbiAgICAvLyBjb21wYXJlIHRoZSB0d28gc3RyaW5ncyBiYXNlZCBvbiB0aGUgdGltZXN0YW1wcyBpbiBtc1xuICAgIHJldHVybiB0aGlzLm1zVG9UaW1lU3RyaW5nKHRoaXMudGltZUludGVydmFsV0MuZnJvbSkgPT09IHRoaXMubXNUb1RpbWVTdHJpbmcodGhpcy50aW1lVG9Ncyhob3VycywgbWludXRlcykpO1xuICB9XG5cbiAgaXNBbGxvd2VkKGhvdXJzOiBudW1iZXIsIG1pbnV0ZXM/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAvLyBhZGp1c3QgdGhlIGhvdXIgYmFzZWQgb24gdGhlIHN0YXJ0IG9mIHRoZSBpbnRlcnZhbCBhbmQgdGhlIHNldHRpbmdzIG9mIGFtL3BtXG4gICAgaG91cnMgPSB0aGlzLmNvbnRleHR1YWxpemVIb3VyKGhvdXJzLCBtaW51dGVzKTtcbiAgICAvLyBjaGVjayB3aGV0aGVyIHRoZSBzZWxlY3RlZCB0aW1lIGlzIGluc2lkZSB0aGUgZ2l2ZW4gYm91bmRhcmllc1xuICAgIHJldHVybiAoXG4gICAgICAoIXRoaXMubm90RWFybGllclRoYW4gfHxcbiAgICAgICAgdGhpcy50aW1lVG9Ncyhob3VycywgbWludXRlcykgPj0gdGhpcy5ub3RFYXJsaWVyVGhhbiB8fFxuICAgICAgICB0aGlzLnRpbWVUb01zKGhvdXJzLCBtaW51dGVzKSA9PT0gMCkgJiZcbiAgICAgICghdGhpcy5ub3RMYXRlclRoYW4gfHwgdGhpcy50aW1lVG9Ncyhob3VycywgbWludXRlcykgPD0gdGhpcy5ub3RMYXRlclRoYW4pXG4gICAgKTtcbiAgfVxuXG4gIGlzSG91ck9mT3Bwb3NpdGVNZXJpZGlhbihob3VyczogbnVtYmVyLCBtaW51dGVzPzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgLy8gaWYgdGhlIHN0YXJ0IG9mIHRoZSBpbnRlcnZhbCBoYXNuJ3QgYmVlbiBzZWxlY3RlZCB5ZXQsIHNraXAgaXRcbiAgICBpZiAodGhpcy5zZWdtZW50ID09PSBTZWdtZW50cy5GUk9NKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRqdXN0IHRoZSBob3VyIGJhc2VkIG9uIHRoZSBzdGFydCBvZiB0aGUgaW50ZXJ2YWwgYW5kIHRoZSBzZXR0aW5ncyBvZiBhbS9wbVxuICAgIGhvdXJzID0gdGhpcy5jb250ZXh0dWFsaXplSG91cihob3VycywgbWludXRlcyk7XG4gICAgLy8gY2FsY3VsYXRlIHRoZSBtcyBvZiB0aGUgc2VsZWN0ZWQgdGltZSBhbmQgb2YgXCJub29uXCIgdGltZSAodG8gZGV0ZXJtIHRoZSBtZXJpZGlhbilcbiAgICBjb25zdCB0aW1lTXMgPSB0aGlzLnRpbWVUb01zKGhvdXJzLCBtaW51dGVzKTtcbiAgICBjb25zdCBub29uTXMgPSB0aGlzLnRpbWVUb01zKDEyKTtcbiAgICAvLyByZXR1cm4gdHJ1ZSBpbiBjYXNlIHRoZSBob3VyIGRvZXNuJ3QgYmVsb25nIHRvIHRoZSBjdXJyZW50IG1lcmlkaWFuXG4gICAgcmV0dXJuICh0aGlzLnBlcmlvZCA9PT0gUGVyaW9kcy5BTSAmJiB0aW1lTXMgPiBub29uTXMpIHx8ICh0aGlzLnBlcmlvZCA9PT0gUGVyaW9kcy5QTSAmJiB0aW1lTXMgPCBub29uTXMpO1xuICB9XG5cbiAgbXNUb1RpbWVTdHJpbmcodGltZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoIXRpbWUpIHJldHVybiAnJztcbiAgICAvLyBub3RlOiB0aGUgdGltZSBtdXN0IGJlIGFsd2F5cyBjb25zaWRlcmVkIHdpdGhvdXQgYW55IHRpbWV6b25lIChVVEMpXG4gICAgY29uc3QgcmVmRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgcmVmRGF0ZS5zZXRUaW1lKHRpbWUpO1xuICAgIGNvbnN0IGRhdGVPcHRzID0geyB0aW1lWm9uZTogJ1VUQycsIGhvdXI6ICcyLWRpZ2l0JywgbWludXRlOiAnMi1kaWdpdCcgfSBhcyBjb25zdDtcbiAgICByZXR1cm4gcmVmRGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcodGhpcy5fdHJhbnNsYXRlLmdldEN1cnJlbnRMYW5nKCksIGRhdGVPcHRzKTtcbiAgfVxuXG4gIHNhdmUoKTogdm9pZCB7XG4gICAgdGhpcy50aW1lSW50ZXJ2YWwubG9hZCh0aGlzLnRpbWVJbnRlcnZhbFdDKTtcbiAgICB0aGlzLl9tb2RhbC5kaXNtaXNzKHRydWUpO1xuICB9XG5cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy50aW1lSW50ZXJ2YWwucmVzZXQoKTtcbiAgICB0aGlzLl9tb2RhbC5kaXNtaXNzKGZhbHNlKTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX21vZGFsLmRpc21pc3MoKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSB0d28gc3RhZ2VzIG9mIHRoZSBjb21wb25lbnQsIHRvIHBpY2sgdGhlIHN0YXJ0IGFuZCB0aGUgZW5kIG9mIHRoZSBpbnRlcnZhbC5cbiAqL1xuZW51bSBTZWdtZW50cyB7XG4gIEZST00gPSAnRlJPTScsXG4gIFRPID0gJ1RPJ1xufVxuXG4vKipcbiAqIFRoZSB0d28gcG9zc2libGUgcGVyaW9kcyBvZiB0aGUgY29tcG9uZW50LCB0byBpbnRlcnByZXQgdGhlIGNsb2NrIHRoZSByaWdodCB3YXkuXG4gKi9cbmV4cG9ydCBlbnVtIFBlcmlvZHMge1xuICBBTSA9ICdBTScsXG4gIFBNID0gJ1BNJ1xufVxuIiwiPGlvbi1oZWFkZXI+XG4gIDxpb24tdG9vbGJhciBjb2xvcj1cImlkZWFUb29sYmFyXCI+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgPGlvbi1idXR0b24gW3RpdGxlXT1cIidDT01NT04uQ0xPU0UnIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJjbG9zZVwiIHNsb3Q9XCJpY29uLW9ubHlcIiAvPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG4gICAgPGlvbi10aXRsZT57eyB0aXRsZSB9fTwvaW9uLXRpdGxlPlxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICA8aW9uLWJ1dHRvbiBbdGl0bGVdPVwiJ0NPTU1PTi5SRVNFVCcgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwicmVzZXQoKVwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cImFycm93LXVuZG9cIiBzbG90PVwiaWNvbi1vbmx5XCIgLz5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuICA8L2lvbi10b29sYmFyPlxuPC9pb24taGVhZGVyPlxuPGlvbi1jb250ZW50PlxuICA8aW9uLWdyaWQgY2xhc3M9XCJjbG9ja0dyaWRcIj5cbiAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1hbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxpb24tY29sIFtzaXplXT1cIjVcIj4mbmJzcDs8L2lvbi1jb2w+XG4gICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LWNlbnRlclwiIFtzaXplXT1cIjJcIj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgIHNoYXBlPVwicm91bmRcIlxuICAgICAgICAgIFtjb2xvcl09XCJlcXVhbHNGcm9tKDEyKSA/ICdwcmltYXJ5JyA6ICdkYXJrJ1wiXG4gICAgICAgICAgW2NsYXNzLm9wcG9zaXRlTWVyaWRpYW5dPVwiaXNIb3VyT2ZPcHBvc2l0ZU1lcmlkaWFuKDEyKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0FsbG93ZWQoMTIpXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0SW50ZXJ2YWwoMTIpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGdldENsb2NrQnV0dG9uQ29udGVudCgxMikgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1sZWZ0XCIgW3NpemVdPVwiMlwiPlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgW2NvbG9yXT1cImVxdWFsc0Zyb20oMTIsIG1pbnV0ZXMpID8gJ3ByaW1hcnknIDogJ2xpZ2h0J1wiXG4gICAgICAgICAgW2NsYXNzLm9wcG9zaXRlTWVyaWRpYW5dPVwiaXNIb3VyT2ZPcHBvc2l0ZU1lcmlkaWFuKDEyLCBtaW51dGVzKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0FsbG93ZWQoMTIsIG1pbnV0ZXMpXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0SW50ZXJ2YWwoMTIsIG1pbnV0ZXMpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGdldENsb2NrQnV0dG9uQ29udGVudCgxMiwgbWludXRlcykgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgW3NpemVdPVwiM1wiPiZuYnNwOzwvaW9uLWNvbD5cbiAgICA8L2lvbi1yb3c+XG4gICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8aW9uLWNvbCBbc2l6ZV09XCIyXCI+Jm5ic3A7PC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1jZW50ZXJcIiBbc2l6ZV09XCIyXCI+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBbY29sb3JdPVwiZXF1YWxzRnJvbSgxMSwgbWludXRlcykgPyAncHJpbWFyeScgOiAnbGlnaHQnXCJcbiAgICAgICAgICBbY2xhc3Mub3Bwb3NpdGVNZXJpZGlhbl09XCJpc0hvdXJPZk9wcG9zaXRlTWVyaWRpYW4oMTEsIG1pbnV0ZXMpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzQWxsb3dlZCgxMSwgbWludXRlcylcIlxuICAgICAgICAgIChjbGljayk9XCJzZXRJbnRlcnZhbCgxMSwgbWludXRlcylcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZ2V0Q2xvY2tCdXR0b25Db250ZW50KDExLCBtaW51dGVzKSB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2lvbi1jb2w+XG4gICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LWxlZnRcIiBbc2l6ZV09XCIyXCI+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICBzaGFwZT1cInJvdW5kXCJcbiAgICAgICAgICBbY29sb3JdPVwiZXF1YWxzRnJvbSgxMSkgPyAncHJpbWFyeScgOiAnZGFyaydcIlxuICAgICAgICAgIFtjbGFzcy5vcHBvc2l0ZU1lcmlkaWFuXT1cImlzSG91ck9mT3Bwb3NpdGVNZXJpZGlhbigxMSlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNBbGxvd2VkKDExKVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNldEludGVydmFsKDExKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBnZXRDbG9ja0J1dHRvbkNvbnRlbnQoMTEpIH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtcmlnaHRcIiBbc2l6ZV09XCIyXCI+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICBzaGFwZT1cInJvdW5kXCJcbiAgICAgICAgICBbY29sb3JdPVwiZXF1YWxzRnJvbSgxKSA/ICdwcmltYXJ5JyA6ICdkYXJrJ1wiXG4gICAgICAgICAgW2NsYXNzLm9wcG9zaXRlTWVyaWRpYW5dPVwiaXNIb3VyT2ZPcHBvc2l0ZU1lcmlkaWFuKDEpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzQWxsb3dlZCgxKVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNldEludGVydmFsKDEpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGdldENsb2NrQnV0dG9uQ29udGVudCgxKSB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2lvbi1jb2w+XG4gICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LWNlbnRlclwiIFtzaXplXT1cIjJcIj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIFtjb2xvcl09XCJlcXVhbHNGcm9tKDEsIG1pbnV0ZXMpID8gJ3ByaW1hcnknIDogJ2xpZ2h0J1wiXG4gICAgICAgICAgW2NsYXNzLm9wcG9zaXRlTWVyaWRpYW5dPVwiaXNIb3VyT2ZPcHBvc2l0ZU1lcmlkaWFuKDEsIG1pbnV0ZXMpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzQWxsb3dlZCgxLCBtaW51dGVzKVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNldEludGVydmFsKDEsIG1pbnV0ZXMpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGdldENsb2NrQnV0dG9uQ29udGVudCgxLCBtaW51dGVzKSB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2lvbi1jb2w+XG4gICAgICA8aW9uLWNvbCBbc2l6ZV09XCIyXCI+Jm5ic3A7PC9pb24tY29sPlxuICAgIDwvaW9uLXJvdz5cbiAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1hbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxpb24tY29sIFtzaXplXT1cIjFcIj4mbmJzcDs8L2lvbi1jb2w+XG4gICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LWNlbnRlclwiIFtzaXplXT1cIjJcIj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIFtjb2xvcl09XCJlcXVhbHNGcm9tKDEwLCBtaW51dGVzKSA/ICdwcmltYXJ5JyA6ICdsaWdodCdcIlxuICAgICAgICAgIFtjbGFzcy5vcHBvc2l0ZU1lcmlkaWFuXT1cImlzSG91ck9mT3Bwb3NpdGVNZXJpZGlhbigxMCwgbWludXRlcylcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNBbGxvd2VkKDEwLCBtaW51dGVzKVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNldEludGVydmFsKDEwLCBtaW51dGVzKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBnZXRDbG9ja0J1dHRvbkNvbnRlbnQoMTAsIG1pbnV0ZXMpIH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtbGVmdFwiIFtzaXplXT1cIjJcIj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgIHNoYXBlPVwicm91bmRcIlxuICAgICAgICAgIFtjb2xvcl09XCJlcXVhbHNGcm9tKDEwKSA/ICdwcmltYXJ5JyA6ICdkYXJrJ1wiXG4gICAgICAgICAgW2NsYXNzLm9wcG9zaXRlTWVyaWRpYW5dPVwiaXNIb3VyT2ZPcHBvc2l0ZU1lcmlkaWFuKDEwKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0FsbG93ZWQoMTApXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0SW50ZXJ2YWwoMTApXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGdldENsb2NrQnV0dG9uQ29udGVudCgxMCkgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgW3NpemVdPVwiMlwiPiZuYnNwOzwvaW9uLWNvbD5cbiAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtcmlnaHRcIiBbc2l6ZV09XCIyXCI+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICBzaGFwZT1cInJvdW5kXCJcbiAgICAgICAgICBbY29sb3JdPVwiZXF1YWxzRnJvbSgyKSA/ICdwcmltYXJ5JyA6ICdkYXJrJ1wiXG4gICAgICAgICAgW2NsYXNzLm9wcG9zaXRlTWVyaWRpYW5dPVwiaXNIb3VyT2ZPcHBvc2l0ZU1lcmlkaWFuKDIpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzQWxsb3dlZCgyKVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNldEludGVydmFsKDIpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGdldENsb2NrQnV0dG9uQ29udGVudCgyKSB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2lvbi1jb2w+XG4gICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LWNlbnRlclwiIFtzaXplXT1cIjJcIj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIFtjb2xvcl09XCJlcXVhbHNGcm9tKDIsIG1pbnV0ZXMpID8gJ3ByaW1hcnknIDogJ2xpZ2h0J1wiXG4gICAgICAgICAgW2NsYXNzLm9wcG9zaXRlTWVyaWRpYW5dPVwiaXNIb3VyT2ZPcHBvc2l0ZU1lcmlkaWFuKDIsIG1pbnV0ZXMpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzQWxsb3dlZCgyLCBtaW51dGVzKVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNldEludGVydmFsKDIsIG1pbnV0ZXMpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGdldENsb2NrQnV0dG9uQ29udGVudCgyLCBtaW51dGVzKSB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2lvbi1jb2w+XG4gICAgICA8aW9uLWNvbCBbc2l6ZV09XCIxXCI+Jm5ic3A7PC9pb24tY29sPlxuICAgIDwvaW9uLXJvdz5cbiAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1hbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtY2VudGVyXCIgW3NpemVdPVwiMlwiPlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgW2NvbG9yXT1cImVxdWFsc0Zyb20oOSwgbWludXRlcykgPyAncHJpbWFyeScgOiAnbGlnaHQnXCJcbiAgICAgICAgICBbY2xhc3Mub3Bwb3NpdGVNZXJpZGlhbl09XCJpc0hvdXJPZk9wcG9zaXRlTWVyaWRpYW4oOSwgbWludXRlcylcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNBbGxvd2VkKDksIG1pbnV0ZXMpXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0SW50ZXJ2YWwoOSwgbWludXRlcylcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZ2V0Q2xvY2tCdXR0b25Db250ZW50KDksIG1pbnV0ZXMpIH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtbGVmdFwiIFtzaXplXT1cIjJcIj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgIHNoYXBlPVwicm91bmRcIlxuICAgICAgICAgIFtjb2xvcl09XCJlcXVhbHNGcm9tKDkpID8gJ3ByaW1hcnknIDogJ2RhcmsnXCJcbiAgICAgICAgICBbY2xhc3Mub3Bwb3NpdGVNZXJpZGlhbl09XCJpc0hvdXJPZk9wcG9zaXRlTWVyaWRpYW4oOSlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNBbGxvd2VkKDkpXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0SW50ZXJ2YWwoOSlcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZ2V0Q2xvY2tCdXR0b25Db250ZW50KDkpIH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtY2VudGVyIGRpc3BsYXlUZXh0XCIgW3NpemVdPVwiNFwiPlxuICAgICAgICA8aW9uLXRleHQgW2NsYXNzLmZyb21TZWxlY3RlZF09XCJzZWdtZW50ID09PSBTZWdtZW50cy5UT1wiPlxuICAgICAgICAgIHt7ICdJREVBX1VOQ09NTU9OLkZUVFQuRlJPTScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICBAaWYgKHNlZ21lbnQgPT09IFNlZ21lbnRzLlRPKSB7XG4gICAgICAgICAgICA8c3Bhbj57eyBtc1RvVGltZVN0cmluZyhfdGltZUludGVydmFsLmZyb20pIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgQGlmIChzZWdtZW50ID09PSBTZWdtZW50cy5UTykge1xuICAgICAgICAgIDxpb24tdGV4dD57eyAnSURFQV9VTkNPTU1PTi5GVFRULlRPJyB8IHRyYW5zbGF0ZSB9fTwvaW9uLXRleHQ+XG4gICAgICAgIH1cbiAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtcmlnaHRcIiBbc2l6ZV09XCIyXCI+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICBzaGFwZT1cInJvdW5kXCJcbiAgICAgICAgICBbY29sb3JdPVwiZXF1YWxzRnJvbSgzKSA/ICdwcmltYXJ5JyA6ICdkYXJrJ1wiXG4gICAgICAgICAgW2NsYXNzLm9wcG9zaXRlTWVyaWRpYW5dPVwiaXNIb3VyT2ZPcHBvc2l0ZU1lcmlkaWFuKDMpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzQWxsb3dlZCgzKVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNldEludGVydmFsKDMpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGdldENsb2NrQnV0dG9uQ29udGVudCgzKSB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2lvbi1jb2w+XG4gICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LWNlbnRlclwiIFtzaXplXT1cIjJcIj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIFtjb2xvcl09XCJlcXVhbHNGcm9tKDMsIG1pbnV0ZXMpID8gJ3ByaW1hcnknIDogJ2xpZ2h0J1wiXG4gICAgICAgICAgW2NsYXNzLm9wcG9zaXRlTWVyaWRpYW5dPVwiaXNIb3VyT2ZPcHBvc2l0ZU1lcmlkaWFuKDMsIG1pbnV0ZXMpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzQWxsb3dlZCgzLCBtaW51dGVzKVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNldEludGVydmFsKDMsIG1pbnV0ZXMpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGdldENsb2NrQnV0dG9uQ29udGVudCgzLCBtaW51dGVzKSB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2lvbi1jb2w+XG4gICAgPC9pb24tcm93PlxuICAgIDxpb24tcm93IGNsYXNzPVwiaW9uLWFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGlvbi1jb2wgW3NpemVdPVwiMVwiPiZuYnNwOzwvaW9uLWNvbD5cbiAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtY2VudGVyXCIgW3NpemVdPVwiMlwiPlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgW2NvbG9yXT1cImVxdWFsc0Zyb20oOCwgbWludXRlcykgPyAncHJpbWFyeScgOiAnbGlnaHQnXCJcbiAgICAgICAgICBbY2xhc3Mub3Bwb3NpdGVNZXJpZGlhbl09XCJpc0hvdXJPZk9wcG9zaXRlTWVyaWRpYW4oOCwgbWludXRlcylcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNBbGxvd2VkKDgsIG1pbnV0ZXMpXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0SW50ZXJ2YWwoOCwgbWludXRlcylcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZ2V0Q2xvY2tCdXR0b25Db250ZW50KDgsIG1pbnV0ZXMpIH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtbGVmdFwiIFtzaXplXT1cIjJcIj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgIHNoYXBlPVwicm91bmRcIlxuICAgICAgICAgIFtjb2xvcl09XCJlcXVhbHNGcm9tKDgpID8gJ3ByaW1hcnknIDogJ2RhcmsnXCJcbiAgICAgICAgICBbY2xhc3Mub3Bwb3NpdGVNZXJpZGlhbl09XCJpc0hvdXJPZk9wcG9zaXRlTWVyaWRpYW4oOClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNBbGxvd2VkKDgpXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0SW50ZXJ2YWwoOClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZ2V0Q2xvY2tCdXR0b25Db250ZW50KDgpIH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDxpb24tY29sIFtzaXplXT1cIjJcIj4mbmJzcDs8L2lvbi1jb2w+XG4gICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LXJpZ2h0XCIgW3NpemVdPVwiMlwiPlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgc2hhcGU9XCJyb3VuZFwiXG4gICAgICAgICAgW2NvbG9yXT1cImVxdWFsc0Zyb20oNCkgPyAncHJpbWFyeScgOiAnZGFyaydcIlxuICAgICAgICAgIFtjbGFzcy5vcHBvc2l0ZU1lcmlkaWFuXT1cImlzSG91ck9mT3Bwb3NpdGVNZXJpZGlhbig0KVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0FsbG93ZWQoNClcIlxuICAgICAgICAgIChjbGljayk9XCJzZXRJbnRlcnZhbCg0KVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBnZXRDbG9ja0J1dHRvbkNvbnRlbnQoNCkgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1jZW50ZXJcIiBbc2l6ZV09XCIyXCI+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBbY29sb3JdPVwiZXF1YWxzRnJvbSg0LCBtaW51dGVzKSA/ICdwcmltYXJ5JyA6ICdsaWdodCdcIlxuICAgICAgICAgIFtjbGFzcy5vcHBvc2l0ZU1lcmlkaWFuXT1cImlzSG91ck9mT3Bwb3NpdGVNZXJpZGlhbig0LCBtaW51dGVzKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0FsbG93ZWQoNCwgbWludXRlcylcIlxuICAgICAgICAgIChjbGljayk9XCJzZXRJbnRlcnZhbCg0LCBtaW51dGVzKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBnZXRDbG9ja0J1dHRvbkNvbnRlbnQoNCwgbWludXRlcykgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgW3NpemVdPVwiMVwiPiZuYnNwOzwvaW9uLWNvbD5cbiAgICA8L2lvbi1yb3c+XG4gICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICA8aW9uLWNvbCBbc2l6ZV09XCIyXCI+Jm5ic3A7PC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1jZW50ZXJcIiBbc2l6ZV09XCIyXCI+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBbY29sb3JdPVwiZXF1YWxzRnJvbSg3LCBtaW51dGVzKSA/ICdwcmltYXJ5JyA6ICdsaWdodCdcIlxuICAgICAgICAgIFtjbGFzcy5vcHBvc2l0ZU1lcmlkaWFuXT1cImlzSG91ck9mT3Bwb3NpdGVNZXJpZGlhbig3LCBtaW51dGVzKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0FsbG93ZWQoNywgbWludXRlcylcIlxuICAgICAgICAgIChjbGljayk9XCJzZXRJbnRlcnZhbCg3LCBtaW51dGVzKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBnZXRDbG9ja0J1dHRvbkNvbnRlbnQoNywgbWludXRlcykgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1sZWZ0XCIgW3NpemVdPVwiMlwiPlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIHNpemU9XCJsYXJnZVwiXG4gICAgICAgICAgc2hhcGU9XCJyb3VuZFwiXG4gICAgICAgICAgW2NvbG9yXT1cImVxdWFsc0Zyb20oNykgPyAncHJpbWFyeScgOiAnZGFyaydcIlxuICAgICAgICAgIFtjbGFzcy5vcHBvc2l0ZU1lcmlkaWFuXT1cImlzSG91ck9mT3Bwb3NpdGVNZXJpZGlhbig3KVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0FsbG93ZWQoNylcIlxuICAgICAgICAgIChjbGljayk9XCJzZXRJbnRlcnZhbCg3KVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBnZXRDbG9ja0J1dHRvbkNvbnRlbnQoNykgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1yaWdodFwiIFtzaXplXT1cIjJcIj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICBzaXplPVwibGFyZ2VcIlxuICAgICAgICAgIHNoYXBlPVwicm91bmRcIlxuICAgICAgICAgIFtjb2xvcl09XCJlcXVhbHNGcm9tKDUpID8gJ3ByaW1hcnknIDogJ2RhcmsnXCJcbiAgICAgICAgICBbY2xhc3Mub3Bwb3NpdGVNZXJpZGlhbl09XCJpc0hvdXJPZk9wcG9zaXRlTWVyaWRpYW4oNSlcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNBbGxvd2VkKDUpXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0SW50ZXJ2YWwoNSlcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZ2V0Q2xvY2tCdXR0b25Db250ZW50KDUpIH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtY2VudGVyXCIgW3NpemVdPVwiMlwiPlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgW2NvbG9yXT1cImVxdWFsc0Zyb20oNSwgbWludXRlcykgPyAncHJpbWFyeScgOiAnbGlnaHQnXCJcbiAgICAgICAgICBbY2xhc3Mub3Bwb3NpdGVNZXJpZGlhbl09XCJpc0hvdXJPZk9wcG9zaXRlTWVyaWRpYW4oNSwgbWludXRlcylcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNBbGxvd2VkKDUsIG1pbnV0ZXMpXCJcbiAgICAgICAgICAoY2xpY2spPVwic2V0SW50ZXJ2YWwoNSwgbWludXRlcylcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgZ2V0Q2xvY2tCdXR0b25Db250ZW50KDUsIG1pbnV0ZXMpIH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDxpb24tY29sIFtzaXplXT1cIjJcIj4mbmJzcDs8L2lvbi1jb2w+XG4gICAgPC9pb24tcm93PlxuICAgIDxpb24tcm93IGNsYXNzPVwiaW9uLWFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGlvbi1jb2wgW3NpemVdPVwiM1wiPiZuYnNwOzwvaW9uLWNvbD5cbiAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtcmlnaHRcIiBbc2l6ZV09XCIyXCI+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICBbY29sb3JdPVwiZXF1YWxzRnJvbSg2LCBtaW51dGVzKSA/ICdwcmltYXJ5JyA6ICdsaWdodCdcIlxuICAgICAgICAgIFtjbGFzcy5vcHBvc2l0ZU1lcmlkaWFuXT1cImlzSG91ck9mT3Bwb3NpdGVNZXJpZGlhbig2LCBtaW51dGVzKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFpc0FsbG93ZWQoNiwgbWludXRlcylcIlxuICAgICAgICAgIChjbGljayk9XCJzZXRJbnRlcnZhbCg2LCBtaW51dGVzKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyBnZXRDbG9ja0J1dHRvbkNvbnRlbnQoNiwgbWludXRlcykgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1jZW50ZXJcIiBbc2l6ZV09XCIyXCI+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgICAgICBzaGFwZT1cInJvdW5kXCJcbiAgICAgICAgICBbY29sb3JdPVwiZXF1YWxzRnJvbSg2KSA/ICdwcmltYXJ5JyA6ICdkYXJrJ1wiXG4gICAgICAgICAgW2NsYXNzLm9wcG9zaXRlTWVyaWRpYW5dPVwiaXNIb3VyT2ZPcHBvc2l0ZU1lcmlkaWFuKDYpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzQWxsb3dlZCg2KVwiXG4gICAgICAgICAgKGNsaWNrKT1cInNldEludGVydmFsKDYpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGdldENsb2NrQnV0dG9uQ29udGVudCg2KSB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICA8L2lvbi1jb2w+XG4gICAgICA8aW9uLWNvbCBbc2l6ZV09XCI1XCI+Jm5ic3A7PC9pb24tY29sPlxuICAgIDwvaW9uLXJvdz5cbiAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1hbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtcmlnaHRcIiBbc2l6ZV09XCIzXCIgW3NpemVTbV09XCI3XCI+XG4gICAgICAgIDxpb24tdGV4dCBjbGFzcz1cInByZWZMYWJlbFwiPnt7ICdJREVBX1VOQ09NTU9OLkZUVFQuUEVSSU9EJyB8IHRyYW5zbGF0ZSB9fTo8L2lvbi10ZXh0PlxuICAgICAgPC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgW3NpemVdPVwiOVwiIFtzaXplU21dPVwiNVwiPlxuICAgICAgICA8aW9uLXNlZ21lbnQgW3ZhbHVlXT1cInBlcmlvZFwiIChpb25DaGFuZ2UpPVwicGVyaW9kID0gJGV2ZW50Py5kZXRhaWw/LnZhbHVlIHx8IHBlcmlvZFwiPlxuICAgICAgICAgIDxpb24tc2VnbWVudC1idXR0b24gW3ZhbHVlXT1cIlBlcmlvZHMuQU1cIj5cbiAgICAgICAgICAgIDxpb24tbGFiZWw+e3sgJ0lERUFfVU5DT01NT04uRlRUVC5BTScgfCB0cmFuc2xhdGUgfX08L2lvbi1sYWJlbD5cbiAgICAgICAgICA8L2lvbi1zZWdtZW50LWJ1dHRvbj5cbiAgICAgICAgICA8aW9uLXNlZ21lbnQtYnV0dG9uIFt2YWx1ZV09XCJQZXJpb2RzLlBNXCI+XG4gICAgICAgICAgICA8aW9uLWxhYmVsPnt7ICdJREVBX1VOQ09NTU9OLkZUVFQuUE0nIHwgdHJhbnNsYXRlIH19PC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9pb24tc2VnbWVudC1idXR0b24+XG4gICAgICAgIDwvaW9uLXNlZ21lbnQ+XG4gICAgICA8L2lvbi1jb2w+XG4gICAgPC9pb24tcm93PlxuICAgIDxpb24tcm93IGNsYXNzPVwiaW9uLWFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1yaWdodFwiIFtzaXplXT1cIjNcIiBbc2l6ZVNtXT1cIjdcIj5cbiAgICAgICAgPGlvbi10ZXh0IGNsYXNzPVwicHJlZkxhYmVsXCI+e3sgJ0lERUFfVU5DT01NT04uRlRUVC5NSU5VVEVTX1BSRUZFUkVOQ0UnIHwgdHJhbnNsYXRlIH19OjwvaW9uLXRleHQ+XG4gICAgICA8L2lvbi1jb2w+XG4gICAgICA8aW9uLWNvbCBbc2l6ZV09XCI5XCIgW3NpemVTbV09XCI1XCI+XG4gICAgICAgIDxpb24tc2VnbWVudCBbdmFsdWVdPVwibWludXRlc1wiIChpb25DaGFuZ2UpPVwibWludXRlcyA9ICRldmVudD8uZGV0YWlsPy52YWx1ZSB8fCBtaW51dGVzXCI+XG4gICAgICAgICAgPGlvbi1zZWdtZW50LWJ1dHRvbiB2YWx1ZT1cIjE1XCI+XG4gICAgICAgICAgICA8aW9uLWxhYmVsPjE1PC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9pb24tc2VnbWVudC1idXR0b24+XG4gICAgICAgICAgPGlvbi1zZWdtZW50LWJ1dHRvbiB2YWx1ZT1cIjMwXCI+XG4gICAgICAgICAgICA8aW9uLWxhYmVsPjMwPC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9pb24tc2VnbWVudC1idXR0b24+XG4gICAgICAgICAgPGlvbi1zZWdtZW50LWJ1dHRvbiB2YWx1ZT1cIjQ1XCI+XG4gICAgICAgICAgICA8aW9uLWxhYmVsPjQ1PC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9pb24tc2VnbWVudC1idXR0b24+XG4gICAgICAgIDwvaW9uLXNlZ21lbnQ+XG4gICAgICA8L2lvbi1jb2w+XG4gICAgPC9pb24tcm93PlxuICA8L2lvbi1ncmlkPlxuPC9pb24tY29udGVudD5cbiJdfQ==
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter, inject } from '@angular/core';
|
|
2
|
+
import { ModalController } from '@ionic/angular';
|
|
3
|
+
import { IDEATranslationsService } from '@idea-ionic/common';
|
|
4
|
+
import { IDEAFromTimeToTimeComponent, Periods } from './fromTimeToTime.component';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@ionic/angular";
|
|
7
|
+
export class IDEATimeIntervalComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
this._modal = inject(ModalController);
|
|
10
|
+
this._translate = inject(IDEATranslationsService);
|
|
11
|
+
/**
|
|
12
|
+
* Whether we should start picking the time displaying the afternoon (PM) or the morning (AM, default).
|
|
13
|
+
*/
|
|
14
|
+
this.period = Periods.AM;
|
|
15
|
+
/**
|
|
16
|
+
* On select event.
|
|
17
|
+
*/
|
|
18
|
+
this.select = new EventEmitter();
|
|
19
|
+
/**
|
|
20
|
+
* Icon select.
|
|
21
|
+
*/
|
|
22
|
+
this.iconSelect = new EventEmitter();
|
|
23
|
+
/**
|
|
24
|
+
* On select (with the field disabled) event.
|
|
25
|
+
*/
|
|
26
|
+
this.selectWhenDisabled = new EventEmitter();
|
|
27
|
+
this.isOpening = false;
|
|
28
|
+
}
|
|
29
|
+
ngOnInit() {
|
|
30
|
+
// when the language changes, set the locale
|
|
31
|
+
this.langChangeSubscription = this._translate.onLangChange.subscribe(() => {
|
|
32
|
+
this.valueToDisplay = this.getValueToDisplay(this.timeInterval);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
ngOnDestroy() {
|
|
36
|
+
if (this.langChangeSubscription)
|
|
37
|
+
this.langChangeSubscription.unsubscribe();
|
|
38
|
+
}
|
|
39
|
+
ngOnChanges(changes) {
|
|
40
|
+
if (changes.timeInterval)
|
|
41
|
+
this.valueToDisplay = this.getValueToDisplay(changes.timeInterval.currentValue);
|
|
42
|
+
}
|
|
43
|
+
getValueToDisplay(timeInterval) {
|
|
44
|
+
if (!timeInterval || !timeInterval.isSet())
|
|
45
|
+
return '';
|
|
46
|
+
// note: the time must be always considered without any timezone (UTC)
|
|
47
|
+
const dateOpts = { timeZone: 'UTC', hour: '2-digit', minute: '2-digit' };
|
|
48
|
+
return ''.concat(this._translate._('IDEA_UNCOMMON.FTTT.FROM'), ' ', new Date(timeInterval.from).toLocaleTimeString(this._translate.getCurrentLang(), dateOpts), ' ', this._translate._('IDEA_UNCOMMON.FTTT.TO').toLowerCase(), ' ', new Date(timeInterval.to).toLocaleTimeString(this._translate.getCurrentLang(), dateOpts));
|
|
49
|
+
}
|
|
50
|
+
async pickTimeInterval() {
|
|
51
|
+
if (this.isOpening)
|
|
52
|
+
return;
|
|
53
|
+
this.isOpening = true;
|
|
54
|
+
const modal = await this._modal.create({
|
|
55
|
+
component: IDEAFromTimeToTimeComponent,
|
|
56
|
+
componentProps: {
|
|
57
|
+
timeInterval: this.timeInterval,
|
|
58
|
+
period: this.period,
|
|
59
|
+
notEarlierThan: this.notEarlierThan,
|
|
60
|
+
notLaterThan: this.notLaterThan,
|
|
61
|
+
title: this.label
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
modal.onDidDismiss().then((res) => {
|
|
65
|
+
// if the content changed, update the internal values and notify the parent component
|
|
66
|
+
if (res.data === true || res.data === false) {
|
|
67
|
+
this.valueToDisplay = this.getValueToDisplay(this.timeInterval);
|
|
68
|
+
this.select.emit();
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
modal.present();
|
|
72
|
+
this.isOpening = false;
|
|
73
|
+
}
|
|
74
|
+
doSelectWhenDisabled() {
|
|
75
|
+
if (this.disabled)
|
|
76
|
+
this.selectWhenDisabled.emit();
|
|
77
|
+
}
|
|
78
|
+
doIconSelect(event) {
|
|
79
|
+
if (event)
|
|
80
|
+
event.stopPropagation();
|
|
81
|
+
this.iconSelect.emit(event);
|
|
82
|
+
}
|
|
83
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IDEATimeIntervalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
84
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.1", type: IDEATimeIntervalComponent, selector: "idea-time-interval", inputs: { timeInterval: "timeInterval", period: "period", notEarlierThan: "notEarlierThan", notLaterThan: "notLaterThan", label: "label", icon: "icon", iconColor: "iconColor", placeholder: "placeholder", disabled: "disabled", tappableWhenDisabled: "tappableWhenDisabled", obligatory: "obligatory", lines: "lines", color: "color" }, outputs: { select: "select", iconSelect: "iconSelect", selectWhenDisabled: "selectWhenDisabled" }, usesOnChanges: true, ngImport: i0, template: "<ion-item\n class=\"timeIntervalItem\"\n [color]=\"color\"\n [lines]=\"lines\"\n [button]=\"!disabled\"\n [disabled]=\"isOpening\"\n [title]=\"placeholder || valueToDisplay || ''\"\n [class.withLabel]=\"label\"\n (click)=\"disabled ? doSelectWhenDisabled() : pickTimeInterval()\"\n>\n @if (icon) {\n <ion-button fill=\"clear\" slot=\"start\" [color]=\"iconColor\" [class.marginTop]=\"label\" (click)=\"doIconSelect($event)\">\n <ion-icon [name]=\"icon\" slot=\"icon-only\" />\n </ion-button>\n }\n @if (label) {\n <ion-label position=\"stacked\" [class.selectable]=\"!disabled || tappableWhenDisabled\">\n {{ label }}\n @if (obligatory && !disabled) {\n <ion-text class=\"obligatoryDot\" />\n }\n </ion-label>\n }\n <ion-label class=\"description\" [class.selectable]=\"!disabled || tappableWhenDisabled\">\n @if (!valueToDisplay && !disabled) {\n <ion-text class=\"placeholder\" [class.selectable]=\"!disabled\">\n {{ placeholder }}\n </ion-text>\n }\n {{ valueToDisplay }}\n </ion-label>\n @if (!disabled) {\n <ion-icon slot=\"end\" name=\"caret-down\" class=\"selectIcon\" [class.selectable]=\"!disabled\" />\n }\n</ion-item>\n", styles: [".timeIntervalItem{min-height:48px;height:auto}.timeIntervalItem .description{margin:10px 0;height:20px;line-height:20px;width:100%}.timeIntervalItem .placeholder{color:var(--ion-color-medium)}.timeIntervalItem .selectIcon{margin:0;padding-left:4px;font-size:.8em;color:var(--ion-color-medium)}.timeIntervalItem.withLabel{min-height:58px;height:auto}.timeIntervalItem.withLabel .selectIcon{padding-top:25px}.timeIntervalItem.withLabel ion-button[slot=start]{margin-top:16px}.selectable{cursor:pointer}\n"], dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }] }); }
|
|
85
|
+
}
|
|
86
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IDEATimeIntervalComponent, decorators: [{
|
|
87
|
+
type: Component,
|
|
88
|
+
args: [{ selector: 'idea-time-interval', template: "<ion-item\n class=\"timeIntervalItem\"\n [color]=\"color\"\n [lines]=\"lines\"\n [button]=\"!disabled\"\n [disabled]=\"isOpening\"\n [title]=\"placeholder || valueToDisplay || ''\"\n [class.withLabel]=\"label\"\n (click)=\"disabled ? doSelectWhenDisabled() : pickTimeInterval()\"\n>\n @if (icon) {\n <ion-button fill=\"clear\" slot=\"start\" [color]=\"iconColor\" [class.marginTop]=\"label\" (click)=\"doIconSelect($event)\">\n <ion-icon [name]=\"icon\" slot=\"icon-only\" />\n </ion-button>\n }\n @if (label) {\n <ion-label position=\"stacked\" [class.selectable]=\"!disabled || tappableWhenDisabled\">\n {{ label }}\n @if (obligatory && !disabled) {\n <ion-text class=\"obligatoryDot\" />\n }\n </ion-label>\n }\n <ion-label class=\"description\" [class.selectable]=\"!disabled || tappableWhenDisabled\">\n @if (!valueToDisplay && !disabled) {\n <ion-text class=\"placeholder\" [class.selectable]=\"!disabled\">\n {{ placeholder }}\n </ion-text>\n }\n {{ valueToDisplay }}\n </ion-label>\n @if (!disabled) {\n <ion-icon slot=\"end\" name=\"caret-down\" class=\"selectIcon\" [class.selectable]=\"!disabled\" />\n }\n</ion-item>\n", styles: [".timeIntervalItem{min-height:48px;height:auto}.timeIntervalItem .description{margin:10px 0;height:20px;line-height:20px;width:100%}.timeIntervalItem .placeholder{color:var(--ion-color-medium)}.timeIntervalItem .selectIcon{margin:0;padding-left:4px;font-size:.8em;color:var(--ion-color-medium)}.timeIntervalItem.withLabel{min-height:58px;height:auto}.timeIntervalItem.withLabel .selectIcon{padding-top:25px}.timeIntervalItem.withLabel ion-button[slot=start]{margin-top:16px}.selectable{cursor:pointer}\n"] }]
|
|
89
|
+
}], propDecorators: { timeInterval: [{
|
|
90
|
+
type: Input
|
|
91
|
+
}], period: [{
|
|
92
|
+
type: Input
|
|
93
|
+
}], notEarlierThan: [{
|
|
94
|
+
type: Input
|
|
95
|
+
}], notLaterThan: [{
|
|
96
|
+
type: Input
|
|
97
|
+
}], label: [{
|
|
98
|
+
type: Input
|
|
99
|
+
}], icon: [{
|
|
100
|
+
type: Input
|
|
101
|
+
}], iconColor: [{
|
|
102
|
+
type: Input
|
|
103
|
+
}], placeholder: [{
|
|
104
|
+
type: Input
|
|
105
|
+
}], disabled: [{
|
|
106
|
+
type: Input
|
|
107
|
+
}], tappableWhenDisabled: [{
|
|
108
|
+
type: Input
|
|
109
|
+
}], obligatory: [{
|
|
110
|
+
type: Input
|
|
111
|
+
}], lines: [{
|
|
112
|
+
type: Input
|
|
113
|
+
}], color: [{
|
|
114
|
+
type: Input
|
|
115
|
+
}], select: [{
|
|
116
|
+
type: Output
|
|
117
|
+
}], iconSelect: [{
|
|
118
|
+
type: Output
|
|
119
|
+
}], selectWhenDisabled: [{
|
|
120
|
+
type: Output
|
|
121
|
+
}] } });
|
|
122
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZUludGVydmFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZHVsZXMvdW5jb21tb24vc3JjL3RpbWVJbnRlcnZhbC90aW1lSW50ZXJ2YWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy91bmNvbW1vbi9zcmMvdGltZUludGVydmFsL3RpbWVJbnRlcnZhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUtaLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHakQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFN0QsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE9BQU8sRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7QUFPbEYsTUFBTSxPQUFPLHlCQUF5QjtJQUx0QztRQU1VLFdBQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakMsZUFBVSxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBTXJEOztXQUVHO1FBQ00sV0FBTSxHQUFZLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUE2Q3RDOztXQUVHO1FBQ08sV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDNUM7O1dBRUc7UUFDTyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNoRDs7V0FFRztRQUNPLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFLeEQsY0FBUyxHQUFHLEtBQUssQ0FBQztLQThEbkI7SUE1REMsUUFBUTtRQUNOLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsU0FB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QixJQUFJLEtBQUs7WUFBRSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzs4R0FySVUseUJBQXlCO2tHQUF6Qix5QkFBeUIsOGZDeEJ0Qyxnc0NBbUNBOzsyRkRYYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0Usb0JBQW9COzhCQVdyQixZQUFZO3NCQUFwQixLQUFLO2dCQUlHLE1BQU07c0JBQWQsS0FBSztnQkFJRyxjQUFjO3NCQUF0QixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUcsS0FBSztzQkFBYixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBSUcsVUFBVTtzQkFBbEIsS0FBSztnQkFJRyxLQUFLO3NCQUFiLEtBQUs7Z0JBSUcsS0FBSztzQkFBYixLQUFLO2dCQUlJLE1BQU07c0JBQWYsTUFBTTtnQkFJRyxVQUFVO3NCQUFuQixNQUFNO2dCQUlHLGtCQUFrQjtzQkFBM0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgT25DaGFuZ2VzLFxuICBpbmplY3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPdmVybGF5RXZlbnREZXRhaWwgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgeyBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRpbWVJbnRlcnZhbCB9IGZyb20gJ2lkZWEtdG9vbGJveCc7XG5pbXBvcnQgeyBJREVBVHJhbnNsYXRpb25zU2VydmljZSB9IGZyb20gJ0BpZGVhLWlvbmljL2NvbW1vbic7XG5cbmltcG9ydCB7IElERUFGcm9tVGltZVRvVGltZUNvbXBvbmVudCwgUGVyaW9kcyB9IGZyb20gJy4vZnJvbVRpbWVUb1RpbWUuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWRlYS10aW1lLWludGVydmFsJyxcbiAgdGVtcGxhdGVVcmw6ICd0aW1lSW50ZXJ2YWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsndGltZUludGVydmFsLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSURFQVRpbWVJbnRlcnZhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBwcml2YXRlIF9tb2RhbCA9IGluamVjdChNb2RhbENvbnRyb2xsZXIpO1xuICBwcml2YXRlIF90cmFuc2xhdGUgPSBpbmplY3QoSURFQVRyYW5zbGF0aW9uc1NlcnZpY2UpO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZSBpbnRlcnZhbCB0byBzZXQuXG4gICAqL1xuICBASW5wdXQoKSB0aW1lSW50ZXJ2YWw6IFRpbWVJbnRlcnZhbDtcbiAgLyoqXG4gICAqIFdoZXRoZXIgd2Ugc2hvdWxkIHN0YXJ0IHBpY2tpbmcgdGhlIHRpbWUgZGlzcGxheWluZyB0aGUgYWZ0ZXJub29uIChQTSkgb3IgdGhlIG1vcm5pbmcgKEFNLCBkZWZhdWx0KS5cbiAgICovXG4gIEBJbnB1dCgpIHBlcmlvZDogUGVyaW9kcyA9IFBlcmlvZHMuQU07XG4gIC8qKlxuICAgKiBBIHRpbWUgdG8gdXNlIGFzIGxvd2VyIGxpbWl0IGZvciB0aGUgcG9zc2libGUgY2hvaWNlcy5cbiAgICovXG4gIEBJbnB1dCgpIG5vdEVhcmxpZXJUaGFuOiBudW1iZXI7XG4gIC8qKlxuICAgKiBBIHRpbWUgdG8gdXNlIGFzIHVwcGVyIGxpbWl0IGZvciB0aGUgcG9zc2libGUgY2hvaWNlcy5cbiAgICovXG4gIEBJbnB1dCgpIG5vdExhdGVyVGhhbjogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGxhYmVsIGZvciB0aGUgZmllbGQuXG4gICAqL1xuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGljb24gZm9yIHRoZSBmaWVsZC5cbiAgICovXG4gIEBJbnB1dCgpIGljb246IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgaWNvbi5cbiAgICovXG4gIEBJbnB1dCgpIGljb25Db2xvcjogc3RyaW5nO1xuICAvKipcbiAgICogQSBwbGFjZWhvbGRlciBmb3IgdGhlIGZpZWxkLlxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgLyoqXG4gICAqIElmIHRydWUsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIHRydWUsIHRoZSBmaWVsZCBoYXMgYSB0YXBwYWJsZSBlZmZlY3Qgd2hlbiBkaXNhYmxlZC5cbiAgICovXG4gIEBJbnB1dCgpIHRhcHBhYmxlV2hlbkRpc2FibGVkOiBib29sZWFuO1xuICAvKipcbiAgICogSWYgdHJ1ZSwgdGhlIG9ibGlnYXRvcnkgZG90IGlzIHNob3duLlxuICAgKi9cbiAgQElucHV0KCkgb2JsaWdhdG9yeTogYm9vbGVhbjtcbiAgLyoqXG4gICAqIExpbmVzIHByZWZlcmVuY2VzIGZvciB0aGUgaXRlbS5cbiAgICovXG4gIEBJbnB1dCgpIGxpbmVzOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY29sb3IgZm9yIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBASW5wdXQoKSBjb2xvcjogc3RyaW5nO1xuICAvKipcbiAgICogT24gc2VsZWN0IGV2ZW50LlxuICAgKi9cbiAgQE91dHB1dCgpIHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIEljb24gc2VsZWN0LlxuICAgKi9cbiAgQE91dHB1dCgpIGljb25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKlxuICAgKiBPbiBzZWxlY3QgKHdpdGggdGhlIGZpZWxkIGRpc2FibGVkKSBldmVudC5cbiAgICovXG4gIEBPdXRwdXQoKSBzZWxlY3RXaGVuRGlzYWJsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgdmFsdWVUb0Rpc3BsYXk6IHN0cmluZztcbiAgcHJpdmF0ZSBsYW5nQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgaXNPcGVuaW5nID0gZmFsc2U7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gd2hlbiB0aGUgbGFuZ3VhZ2UgY2hhbmdlcywgc2V0IHRoZSBsb2NhbGVcbiAgICB0aGlzLmxhbmdDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLl90cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoKTogdm9pZCA9PiB7XG4gICAgICB0aGlzLnZhbHVlVG9EaXNwbGF5ID0gdGhpcy5nZXRWYWx1ZVRvRGlzcGxheSh0aGlzLnRpbWVJbnRlcnZhbCk7XG4gICAgfSk7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubGFuZ0NoYW5nZVN1YnNjcmlwdGlvbikgdGhpcy5sYW5nQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLnRpbWVJbnRlcnZhbCkgdGhpcy52YWx1ZVRvRGlzcGxheSA9IHRoaXMuZ2V0VmFsdWVUb0Rpc3BsYXkoY2hhbmdlcy50aW1lSW50ZXJ2YWwuY3VycmVudFZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VmFsdWVUb0Rpc3BsYXkodGltZUludGVydmFsOiBUaW1lSW50ZXJ2YWwpOiBzdHJpbmcge1xuICAgIGlmICghdGltZUludGVydmFsIHx8ICF0aW1lSW50ZXJ2YWwuaXNTZXQoKSkgcmV0dXJuICcnO1xuICAgIC8vIG5vdGU6IHRoZSB0aW1lIG11c3QgYmUgYWx3YXlzIGNvbnNpZGVyZWQgd2l0aG91dCBhbnkgdGltZXpvbmUgKFVUQylcbiAgICBjb25zdCBkYXRlT3B0cyA9IHsgdGltZVpvbmU6ICdVVEMnLCBob3VyOiAnMi1kaWdpdCcsIG1pbnV0ZTogJzItZGlnaXQnIH0gYXMgY29uc3Q7XG4gICAgcmV0dXJuICcnLmNvbmNhdChcbiAgICAgIHRoaXMuX3RyYW5zbGF0ZS5fKCdJREVBX1VOQ09NTU9OLkZUVFQuRlJPTScpLFxuICAgICAgJyAnLFxuICAgICAgbmV3IERhdGUodGltZUludGVydmFsLmZyb20pLnRvTG9jYWxlVGltZVN0cmluZyh0aGlzLl90cmFuc2xhdGUuZ2V0Q3VycmVudExhbmcoKSwgZGF0ZU9wdHMpLFxuICAgICAgJyAnLFxuICAgICAgdGhpcy5fdHJhbnNsYXRlLl8oJ0lERUFfVU5DT01NT04uRlRUVC5UTycpLnRvTG93ZXJDYXNlKCksXG4gICAgICAnICcsXG4gICAgICBuZXcgRGF0ZSh0aW1lSW50ZXJ2YWwudG8pLnRvTG9jYWxlVGltZVN0cmluZyh0aGlzLl90cmFuc2xhdGUuZ2V0Q3VycmVudExhbmcoKSwgZGF0ZU9wdHMpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHBpY2tUaW1lSW50ZXJ2YWwoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNPcGVuaW5nKSByZXR1cm47XG4gICAgdGhpcy5pc09wZW5pbmcgPSB0cnVlO1xuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5fbW9kYWwuY3JlYXRlKHtcbiAgICAgIGNvbXBvbmVudDogSURFQUZyb21UaW1lVG9UaW1lQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgdGltZUludGVydmFsOiB0aGlzLnRpbWVJbnRlcnZhbCxcbiAgICAgICAgcGVyaW9kOiB0aGlzLnBlcmlvZCxcbiAgICAgICAgbm90RWFybGllclRoYW46IHRoaXMubm90RWFybGllclRoYW4sXG4gICAgICAgIG5vdExhdGVyVGhhbjogdGhpcy5ub3RMYXRlclRoYW4sXG4gICAgICAgIHRpdGxlOiB0aGlzLmxhYmVsXG4gICAgICB9XG4gICAgfSk7XG4gICAgbW9kYWwub25EaWREaXNtaXNzKCkudGhlbigocmVzOiBPdmVybGF5RXZlbnREZXRhaWwpOiB2b2lkID0+IHtcbiAgICAgIC8vIGlmIHRoZSBjb250ZW50IGNoYW5nZWQsIHVwZGF0ZSB0aGUgaW50ZXJuYWwgdmFsdWVzIGFuZCBub3RpZnkgdGhlIHBhcmVudCBjb21wb25lbnRcbiAgICAgIGlmIChyZXMuZGF0YSA9PT0gdHJ1ZSB8fCByZXMuZGF0YSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy52YWx1ZVRvRGlzcGxheSA9IHRoaXMuZ2V0VmFsdWVUb0Rpc3BsYXkodGhpcy50aW1lSW50ZXJ2YWwpO1xuICAgICAgICB0aGlzLnNlbGVjdC5lbWl0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgbW9kYWwucHJlc2VudCgpO1xuICAgIHRoaXMuaXNPcGVuaW5nID0gZmFsc2U7XG4gIH1cblxuICBkb1NlbGVjdFdoZW5EaXNhYmxlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkgdGhpcy5zZWxlY3RXaGVuRGlzYWJsZWQuZW1pdCgpO1xuICB9XG5cbiAgZG9JY29uU2VsZWN0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQpIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaWNvblNlbGVjdC5lbWl0KGV2ZW50KTtcbiAgfVxufVxuIiwiPGlvbi1pdGVtXG4gIGNsYXNzPVwidGltZUludGVydmFsSXRlbVwiXG4gIFtjb2xvcl09XCJjb2xvclwiXG4gIFtsaW5lc109XCJsaW5lc1wiXG4gIFtidXR0b25dPVwiIWRpc2FibGVkXCJcbiAgW2Rpc2FibGVkXT1cImlzT3BlbmluZ1wiXG4gIFt0aXRsZV09XCJwbGFjZWhvbGRlciB8fCB2YWx1ZVRvRGlzcGxheSB8fCAnJ1wiXG4gIFtjbGFzcy53aXRoTGFiZWxdPVwibGFiZWxcIlxuICAoY2xpY2spPVwiZGlzYWJsZWQgPyBkb1NlbGVjdFdoZW5EaXNhYmxlZCgpIDogcGlja1RpbWVJbnRlcnZhbCgpXCJcbj5cbiAgQGlmIChpY29uKSB7XG4gICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgc2xvdD1cInN0YXJ0XCIgW2NvbG9yXT1cImljb25Db2xvclwiIFtjbGFzcy5tYXJnaW5Ub3BdPVwibGFiZWxcIiAoY2xpY2spPVwiZG9JY29uU2VsZWN0KCRldmVudClcIj5cbiAgICAgIDxpb24taWNvbiBbbmFtZV09XCJpY29uXCIgc2xvdD1cImljb24tb25seVwiIC8+XG4gICAgPC9pb24tYnV0dG9uPlxuICB9XG4gIEBpZiAobGFiZWwpIHtcbiAgICA8aW9uLWxhYmVsIHBvc2l0aW9uPVwic3RhY2tlZFwiIFtjbGFzcy5zZWxlY3RhYmxlXT1cIiFkaXNhYmxlZCB8fCB0YXBwYWJsZVdoZW5EaXNhYmxlZFwiPlxuICAgICAge3sgbGFiZWwgfX1cbiAgICAgIEBpZiAob2JsaWdhdG9yeSAmJiAhZGlzYWJsZWQpIHtcbiAgICAgICAgPGlvbi10ZXh0IGNsYXNzPVwib2JsaWdhdG9yeURvdFwiIC8+XG4gICAgICB9XG4gICAgPC9pb24tbGFiZWw+XG4gIH1cbiAgPGlvbi1sYWJlbCBjbGFzcz1cImRlc2NyaXB0aW9uXCIgW2NsYXNzLnNlbGVjdGFibGVdPVwiIWRpc2FibGVkIHx8IHRhcHBhYmxlV2hlbkRpc2FibGVkXCI+XG4gICAgQGlmICghdmFsdWVUb0Rpc3BsYXkgJiYgIWRpc2FibGVkKSB7XG4gICAgICA8aW9uLXRleHQgY2xhc3M9XCJwbGFjZWhvbGRlclwiIFtjbGFzcy5zZWxlY3RhYmxlXT1cIiFkaXNhYmxlZFwiPlxuICAgICAgICB7eyBwbGFjZWhvbGRlciB9fVxuICAgICAgPC9pb24tdGV4dD5cbiAgICB9XG4gICAge3sgdmFsdWVUb0Rpc3BsYXkgfX1cbiAgPC9pb24tbGFiZWw+XG4gIEBpZiAoIWRpc2FibGVkKSB7XG4gICAgPGlvbi1pY29uIHNsb3Q9XCJlbmRcIiBuYW1lPVwiY2FyZXQtZG93blwiIGNsYXNzPVwic2VsZWN0SWNvblwiIFtjbGFzcy5zZWxlY3RhYmxlXT1cIiFkaXNhYmxlZFwiIC8+XG4gIH1cbjwvaW9uLWl0ZW0+XG4iXX0=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { FormsModule } from '@angular/forms';
|
|
4
|
+
import { IonicModule } from '@ionic/angular';
|
|
5
|
+
import { IDEATranslationsModule } from '@idea-ionic/common';
|
|
6
|
+
import { IDEATimeIntervalComponent } from './timeInterval.component';
|
|
7
|
+
import { IDEAFromTimeToTimeComponent } from './fromTimeToTime.component';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class IDEATimeIntervalModule {
|
|
10
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IDEATimeIntervalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
11
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.1", ngImport: i0, type: IDEATimeIntervalModule, declarations: [IDEAFromTimeToTimeComponent, IDEATimeIntervalComponent], imports: [CommonModule, FormsModule, IonicModule, IDEATranslationsModule], exports: [IDEAFromTimeToTimeComponent, IDEATimeIntervalComponent] }); }
|
|
12
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IDEATimeIntervalModule, imports: [CommonModule, FormsModule, IonicModule, IDEATranslationsModule] }); }
|
|
13
|
+
}
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IDEATimeIntervalModule, decorators: [{
|
|
15
|
+
type: NgModule,
|
|
16
|
+
args: [{
|
|
17
|
+
imports: [CommonModule, FormsModule, IonicModule, IDEATranslationsModule],
|
|
18
|
+
declarations: [IDEAFromTimeToTimeComponent, IDEATimeIntervalComponent],
|
|
19
|
+
exports: [IDEAFromTimeToTimeComponent, IDEATimeIntervalComponent]
|
|
20
|
+
}]
|
|
21
|
+
}] });
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZUludGVydmFsLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL21vZHVsZXMvdW5jb21tb24vc3JjL3RpbWVJbnRlcnZhbC90aW1lSW50ZXJ2YWwubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFNUQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDckUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBT3pFLE1BQU0sT0FBTyxzQkFBc0I7OEdBQXRCLHNCQUFzQjsrR0FBdEIsc0JBQXNCLGlCQUhsQiwyQkFBMkIsRUFBRSx5QkFBeUIsYUFEM0QsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsc0JBQXNCLGFBRTlELDJCQUEyQixFQUFFLHlCQUF5QjsrR0FFckQsc0JBQXNCLFlBSnZCLFlBQVksRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLHNCQUFzQjs7MkZBSTdELHNCQUFzQjtrQkFMbEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsQ0FBQztvQkFDekUsWUFBWSxFQUFFLENBQUMsMkJBQTJCLEVBQUUseUJBQXlCLENBQUM7b0JBQ3RFLE9BQU8sRUFBRSxDQUFDLDJCQUEyQixFQUFFLHlCQUF5QixDQUFDO2lCQUNsRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBJb25pY01vZHVsZSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IElERUFUcmFuc2xhdGlvbnNNb2R1bGUgfSBmcm9tICdAaWRlYS1pb25pYy9jb21tb24nO1xuXG5pbXBvcnQgeyBJREVBVGltZUludGVydmFsQ29tcG9uZW50IH0gZnJvbSAnLi90aW1lSW50ZXJ2YWwuY29tcG9uZW50JztcbmltcG9ydCB7IElERUFGcm9tVGltZVRvVGltZUNvbXBvbmVudCB9IGZyb20gJy4vZnJvbVRpbWVUb1RpbWUuY29tcG9uZW50JztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIElvbmljTW9kdWxlLCBJREVBVHJhbnNsYXRpb25zTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbSURFQUZyb21UaW1lVG9UaW1lQ29tcG9uZW50LCBJREVBVGltZUludGVydmFsQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW0lERUFGcm9tVGltZVRvVGltZUNvbXBvbmVudCwgSURFQVRpbWVJbnRlcnZhbENvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgSURFQVRpbWVJbnRlcnZhbE1vZHVsZSB7fVxuIl19
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated use a specific App service instead.
|
|
5
|
+
*/
|
|
6
|
+
export class IDEATinCanService {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.clear();
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Set a variable with the given value.
|
|
12
|
+
* @param variable variable to set
|
|
13
|
+
* @param value value to assign to the variable
|
|
14
|
+
*/
|
|
15
|
+
set(variable, value) {
|
|
16
|
+
this.data[variable] = value;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Get the content of a variable.
|
|
20
|
+
* @param variable variable to acquire
|
|
21
|
+
* @param getAndDelete if set, delete the variable after the acquisition
|
|
22
|
+
*/
|
|
23
|
+
get(variable, getAndDelete) {
|
|
24
|
+
const ret = this.data[variable];
|
|
25
|
+
if (getAndDelete)
|
|
26
|
+
this.remove(variable);
|
|
27
|
+
return ret;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Remove a variable.
|
|
31
|
+
* @param variable variable to remove
|
|
32
|
+
*/
|
|
33
|
+
remove(variable) {
|
|
34
|
+
delete this.data[variable];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Clear all the variables.
|
|
38
|
+
*/
|
|
39
|
+
clear() {
|
|
40
|
+
this.data = {};
|
|
41
|
+
}
|
|
42
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IDEATinCanService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
43
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IDEATinCanService, providedIn: 'root' }); }
|
|
44
|
+
}
|
|
45
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.1", ngImport: i0, type: IDEATinCanService, decorators: [{
|
|
46
|
+
type: Injectable,
|
|
47
|
+
args: [{ providedIn: 'root' }]
|
|
48
|
+
}], ctorParameters: () => [] });
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGluQ2FuLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2R1bGVzL3VuY29tbW9uL3NyYy90aW5DYW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzQzs7R0FFRztBQUVILE1BQU0sT0FBTyxpQkFBaUI7SUFHNUI7UUFDRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEdBQUcsQ0FBQyxRQUFnQixFQUFFLEtBQVU7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxHQUFHLENBQUMsUUFBZ0IsRUFBRSxZQUFzQjtRQUMxQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLElBQUksWUFBWTtZQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFFBQWdCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQ0Q7O09BRUc7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDakIsQ0FBQzs4R0FyQ1UsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FESixNQUFNOzsyRkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2UgYSBzcGVjaWZpYyBBcHAgc2VydmljZSBpbnN0ZWFkLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIElERUFUaW5DYW5TZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIGRhdGE6IGFueTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGEgdmFyaWFibGUgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuXG4gICAqIEBwYXJhbSB2YXJpYWJsZSB2YXJpYWJsZSB0byBzZXRcbiAgICogQHBhcmFtIHZhbHVlIHZhbHVlIHRvIGFzc2lnbiB0byB0aGUgdmFyaWFibGVcbiAgICovXG4gIHNldCh2YXJpYWJsZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5kYXRhW3ZhcmlhYmxlXSA9IHZhbHVlO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbnRlbnQgb2YgYSB2YXJpYWJsZS5cbiAgICogQHBhcmFtIHZhcmlhYmxlIHZhcmlhYmxlIHRvIGFjcXVpcmVcbiAgICogQHBhcmFtIGdldEFuZERlbGV0ZSBpZiBzZXQsIGRlbGV0ZSB0aGUgdmFyaWFibGUgYWZ0ZXIgdGhlIGFjcXVpc2l0aW9uXG4gICAqL1xuICBnZXQodmFyaWFibGU6IHN0cmluZywgZ2V0QW5kRGVsZXRlPzogYm9vbGVhbik6IGFueSB7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5kYXRhW3ZhcmlhYmxlXTtcbiAgICBpZiAoZ2V0QW5kRGVsZXRlKSB0aGlzLnJlbW92ZSh2YXJpYWJsZSk7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGEgdmFyaWFibGUuXG4gICAqIEBwYXJhbSB2YXJpYWJsZSB2YXJpYWJsZSB0byByZW1vdmVcbiAgICovXG4gIHJlbW92ZSh2YXJpYWJsZTogc3RyaW5nKTogdm9pZCB7XG4gICAgZGVsZXRlIHRoaXMuZGF0YVt2YXJpYWJsZV07XG4gIH1cbiAgLyoqXG4gICAqIENsZWFyIGFsbCB0aGUgdmFyaWFibGVzLlxuICAgKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhID0ge307XG4gIH1cbn1cbiJdfQ==
|