primekit 0.0.62 → 0.0.64
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/esm2022/lib/lib/atomix-daterange-calendar/atomix-daterange-calendar.component.mjs +292 -0
- package/esm2022/lib/lib/atomix-input/atomix-input.component.mjs +3 -3
- package/esm2022/lib/lib/atomix-table/atomix-table.component.mjs +18 -3
- package/esm2022/lib/lib/atomix-table/atomix-table.models.mjs +1 -1
- package/esm2022/lib/primekit.module.mjs +13 -2
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/primekit.mjs +343 -34
- package/fesm2022/primekit.mjs.map +1 -1
- package/lib/lib/atomix-daterange-calendar/atomix-daterange-calendar.component.d.ts +46 -0
- package/lib/lib/atomix-table/atomix-table.component.d.ts +1 -0
- package/lib/lib/atomix-table/atomix-table.models.d.ts +1 -0
- package/lib/primekit.module.d.ts +51 -49
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
import * as i2 from "primeng/button";
|
|
5
|
+
import * as i3 from "primeng/inputtext";
|
|
6
|
+
import * as i4 from "primeng/calendar";
|
|
7
|
+
import * as i5 from "primeng/overlaypanel";
|
|
8
|
+
import * as i6 from "@angular/forms";
|
|
9
|
+
export class AtomixDaterangeCalendarComponent {
|
|
10
|
+
datePipe;
|
|
11
|
+
placeholder = '';
|
|
12
|
+
styleClass = '';
|
|
13
|
+
selectionMode = 'range';
|
|
14
|
+
inputStyleClass = '';
|
|
15
|
+
disabled = false;
|
|
16
|
+
selectedDate = null;
|
|
17
|
+
maxDate;
|
|
18
|
+
minDate;
|
|
19
|
+
customRangeMode = false;
|
|
20
|
+
selectedPreset = null; // 'today' | 'yesterday' | 'lastWeek' | 'lastMonth' | 'lastQuarter' | 'custom' | null
|
|
21
|
+
overlayPanel;
|
|
22
|
+
dateRangeChange = new EventEmitter();
|
|
23
|
+
enLocale = {
|
|
24
|
+
firstDayOfWeek: 0,
|
|
25
|
+
dayNames: [
|
|
26
|
+
'Sunday',
|
|
27
|
+
'Monday',
|
|
28
|
+
'Tuesday',
|
|
29
|
+
'Wednesday',
|
|
30
|
+
'Thursday',
|
|
31
|
+
'Friday',
|
|
32
|
+
'Saturday',
|
|
33
|
+
],
|
|
34
|
+
dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
|
|
35
|
+
dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
|
|
36
|
+
monthNames: [
|
|
37
|
+
'January',
|
|
38
|
+
'February',
|
|
39
|
+
'March',
|
|
40
|
+
'April',
|
|
41
|
+
'May',
|
|
42
|
+
'June',
|
|
43
|
+
'July',
|
|
44
|
+
'August',
|
|
45
|
+
'September',
|
|
46
|
+
'October',
|
|
47
|
+
'November',
|
|
48
|
+
'December',
|
|
49
|
+
],
|
|
50
|
+
monthNamesShort: [
|
|
51
|
+
'Jan',
|
|
52
|
+
'Feb',
|
|
53
|
+
'Mar',
|
|
54
|
+
'Apr',
|
|
55
|
+
'May',
|
|
56
|
+
'Jun',
|
|
57
|
+
'Jul',
|
|
58
|
+
'Aug',
|
|
59
|
+
'Sep',
|
|
60
|
+
'Oct',
|
|
61
|
+
'Nov',
|
|
62
|
+
'Dec',
|
|
63
|
+
],
|
|
64
|
+
today: 'Today',
|
|
65
|
+
clear: 'Clear',
|
|
66
|
+
};
|
|
67
|
+
constructor(datePipe) {
|
|
68
|
+
this.datePipe = datePipe;
|
|
69
|
+
}
|
|
70
|
+
ngOnChanges(changes) {
|
|
71
|
+
if (changes['selectedDate']) {
|
|
72
|
+
const sel = changes['selectedDate'].currentValue;
|
|
73
|
+
if (sel && Array.isArray(sel) && sel.length === 2 && sel[0] && sel[1]) {
|
|
74
|
+
const preset = this.detectPreset(sel[0], sel[1]);
|
|
75
|
+
this.selectedPreset = preset ?? 'custom';
|
|
76
|
+
}
|
|
77
|
+
else if (sel == null) {
|
|
78
|
+
this.selectedPreset = null;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
onInputKeyDown(event) {
|
|
83
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
84
|
+
try {
|
|
85
|
+
this.overlayPanel?.toggle(event);
|
|
86
|
+
}
|
|
87
|
+
catch (e) { }
|
|
88
|
+
event.preventDefault();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
clearAndStop(event) {
|
|
92
|
+
// Prevent toggle from happening when clear icon is clicked
|
|
93
|
+
try {
|
|
94
|
+
event.stopPropagation();
|
|
95
|
+
}
|
|
96
|
+
catch (e) { }
|
|
97
|
+
try {
|
|
98
|
+
event.preventDefault();
|
|
99
|
+
}
|
|
100
|
+
catch (e) { }
|
|
101
|
+
this.clearDateRange();
|
|
102
|
+
}
|
|
103
|
+
get hasSelection() {
|
|
104
|
+
return Boolean(this.selectedDate &&
|
|
105
|
+
Array.isArray(this.selectedDate) &&
|
|
106
|
+
this.selectedDate.length === 2 &&
|
|
107
|
+
!!this.selectedDate[0] &&
|
|
108
|
+
!!this.selectedDate[1]);
|
|
109
|
+
}
|
|
110
|
+
normalizeDate(d) {
|
|
111
|
+
return new Date(d.getFullYear(), d.getMonth(), d.getDate());
|
|
112
|
+
}
|
|
113
|
+
isSameDate(a, b) {
|
|
114
|
+
return (a.getFullYear() === b.getFullYear() &&
|
|
115
|
+
a.getMonth() === b.getMonth() &&
|
|
116
|
+
a.getDate() === b.getDate());
|
|
117
|
+
}
|
|
118
|
+
detectPreset(startRaw, endRaw) {
|
|
119
|
+
const start = this.normalizeDate(startRaw);
|
|
120
|
+
const end = this.normalizeDate(endRaw);
|
|
121
|
+
const today = this.normalizeDate(new Date());
|
|
122
|
+
// today
|
|
123
|
+
if (this.isSameDate(start, today) && this.isSameDate(end, today))
|
|
124
|
+
return 'today';
|
|
125
|
+
// yesterday
|
|
126
|
+
const y = new Date(today);
|
|
127
|
+
y.setDate(y.getDate() - 1);
|
|
128
|
+
if (this.isSameDate(start, y) && this.isSameDate(end, y))
|
|
129
|
+
return 'yesterday';
|
|
130
|
+
// lastWeek (last 7 days where end = yesterday and start = end - 6)
|
|
131
|
+
const lwEnd = new Date(today);
|
|
132
|
+
lwEnd.setDate(lwEnd.getDate() - 1);
|
|
133
|
+
const lwStart = new Date(lwEnd);
|
|
134
|
+
lwStart.setDate(lwEnd.getDate() - 6);
|
|
135
|
+
if (this.isSameDate(start, lwStart) && this.isSameDate(end, lwEnd))
|
|
136
|
+
return 'lastWeek';
|
|
137
|
+
// lastMonth
|
|
138
|
+
const firstDayOfCurrentMonth = new Date(today.getFullYear(), today.getMonth(), 1);
|
|
139
|
+
const lastDayOfPrevMonth = new Date(firstDayOfCurrentMonth);
|
|
140
|
+
lastDayOfPrevMonth.setDate(0);
|
|
141
|
+
const firstDayOfPrevMonth = new Date(lastDayOfPrevMonth.getFullYear(), lastDayOfPrevMonth.getMonth(), 1);
|
|
142
|
+
if (this.isSameDate(start, firstDayOfPrevMonth) &&
|
|
143
|
+
this.isSameDate(end, lastDayOfPrevMonth))
|
|
144
|
+
return 'lastMonth';
|
|
145
|
+
// lastQuarter
|
|
146
|
+
const month = today.getMonth();
|
|
147
|
+
const quarter = Math.floor(month / 3);
|
|
148
|
+
const prevQuarterEndMonth = quarter * 3 - 1;
|
|
149
|
+
const prevQuarterEnd = new Date(today.getFullYear(), prevQuarterEndMonth + 1, 0);
|
|
150
|
+
const prevQuarterStartMonth = prevQuarterEndMonth - 2;
|
|
151
|
+
const prevQuarterStart = new Date(today.getFullYear(), prevQuarterStartMonth, 1);
|
|
152
|
+
if (this.isSameDate(start, prevQuarterStart) && this.isSameDate(end, prevQuarterEnd))
|
|
153
|
+
return 'lastQuarter';
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
clearDateRange() {
|
|
157
|
+
this.selectedDate = null;
|
|
158
|
+
this.dateRangeChange.emit(this.selectedDate);
|
|
159
|
+
this.selectedPreset = null;
|
|
160
|
+
this.customRangeMode = false;
|
|
161
|
+
}
|
|
162
|
+
resetAndClose() {
|
|
163
|
+
this.clearDateRange();
|
|
164
|
+
if (this.overlayPanel) {
|
|
165
|
+
try {
|
|
166
|
+
this.overlayPanel.hide();
|
|
167
|
+
}
|
|
168
|
+
catch (e) { }
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
toggleCustomRange() {
|
|
172
|
+
this.customRangeMode = !this.customRangeMode;
|
|
173
|
+
if (this.customRangeMode)
|
|
174
|
+
this.selectedPreset = 'custom';
|
|
175
|
+
}
|
|
176
|
+
applyCustomRange() {
|
|
177
|
+
this.dateRangeChange.emit(this.selectedDate);
|
|
178
|
+
if (this.overlayPanel) {
|
|
179
|
+
try {
|
|
180
|
+
this.overlayPanel.hide();
|
|
181
|
+
}
|
|
182
|
+
catch (e) { }
|
|
183
|
+
}
|
|
184
|
+
this.customRangeMode = false;
|
|
185
|
+
this.selectedPreset = 'custom';
|
|
186
|
+
}
|
|
187
|
+
getDateRangeLabel() {
|
|
188
|
+
if (!this.selectedDate || !Array.isArray(this.selectedDate))
|
|
189
|
+
return this.placeholder || 'Select date range';
|
|
190
|
+
const [start, end] = this.selectedDate;
|
|
191
|
+
if (!start || !end)
|
|
192
|
+
return 'Select date range';
|
|
193
|
+
const startStr = this.datePipe.transform(start, 'MM/dd/yyyy');
|
|
194
|
+
const endStr = this.datePipe.transform(end, 'MM/dd/yyyy');
|
|
195
|
+
return `${startStr} – ${endStr}`;
|
|
196
|
+
}
|
|
197
|
+
applyPreset(preset) {
|
|
198
|
+
const today = new Date();
|
|
199
|
+
let start = null;
|
|
200
|
+
let end = null;
|
|
201
|
+
switch (preset) {
|
|
202
|
+
case 'today':
|
|
203
|
+
start = end = new Date(today.getFullYear(), today.getMonth(), today.getDate());
|
|
204
|
+
break;
|
|
205
|
+
case 'yesterday':
|
|
206
|
+
const y = new Date(today);
|
|
207
|
+
y.setDate(y.getDate() - 1);
|
|
208
|
+
start = end = new Date(y.getFullYear(), y.getMonth(), y.getDate());
|
|
209
|
+
break;
|
|
210
|
+
case 'lastWeek': {
|
|
211
|
+
const lwEnd = new Date(today);
|
|
212
|
+
lwEnd.setDate(lwEnd.getDate() - 1);
|
|
213
|
+
const lwStart = new Date(lwEnd);
|
|
214
|
+
lwStart.setDate(lwEnd.getDate() - 6);
|
|
215
|
+
start = new Date(lwStart.getFullYear(), lwStart.getMonth(), lwStart.getDate());
|
|
216
|
+
end = new Date(lwEnd.getFullYear(), lwEnd.getMonth(), lwEnd.getDate());
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
case 'lastMonth': {
|
|
220
|
+
const firstDayOfCurrentMonth = new Date(today.getFullYear(), today.getMonth(), 1);
|
|
221
|
+
const lastDayOfPrevMonth = new Date(firstDayOfCurrentMonth);
|
|
222
|
+
lastDayOfPrevMonth.setDate(0);
|
|
223
|
+
const firstDayOfPrevMonth = new Date(lastDayOfPrevMonth.getFullYear(), lastDayOfPrevMonth.getMonth(), 1);
|
|
224
|
+
start = new Date(firstDayOfPrevMonth.getFullYear(), firstDayOfPrevMonth.getMonth(), 1);
|
|
225
|
+
end = new Date(lastDayOfPrevMonth.getFullYear(), lastDayOfPrevMonth.getMonth(), lastDayOfPrevMonth.getDate());
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
case 'lastQuarter': {
|
|
229
|
+
const month = today.getMonth();
|
|
230
|
+
const quarter = Math.floor(month / 3);
|
|
231
|
+
const prevQuarterEndMonth = quarter * 3 - 1;
|
|
232
|
+
const prevQuarterEnd = new Date(today.getFullYear(), prevQuarterEndMonth + 1, 0);
|
|
233
|
+
const prevQuarterStartMonth = prevQuarterEndMonth - 2;
|
|
234
|
+
const prevQuarterStart = new Date(today.getFullYear(), prevQuarterStartMonth, 1);
|
|
235
|
+
start = prevQuarterStart;
|
|
236
|
+
end = prevQuarterEnd;
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
default:
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
if (start && end) {
|
|
243
|
+
this.selectedDate = [start, end];
|
|
244
|
+
this.dateRangeChange.emit(this.selectedDate);
|
|
245
|
+
this.selectedPreset = preset;
|
|
246
|
+
this.customRangeMode = false;
|
|
247
|
+
}
|
|
248
|
+
try {
|
|
249
|
+
this.overlayPanel?.hide();
|
|
250
|
+
}
|
|
251
|
+
catch (e) { }
|
|
252
|
+
}
|
|
253
|
+
onDateRangeChange(dateRange) {
|
|
254
|
+
this.dateRangeChange.emit(dateRange);
|
|
255
|
+
if (dateRange && Array.isArray(dateRange)) {
|
|
256
|
+
this.selectedPreset = this.detectPreset(dateRange[0], dateRange[1]);
|
|
257
|
+
this.customRangeMode = false;
|
|
258
|
+
}
|
|
259
|
+
else if (!dateRange) {
|
|
260
|
+
this.selectedPreset = null;
|
|
261
|
+
this.customRangeMode = false;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AtomixDaterangeCalendarComponent, deps: [{ token: i1.DatePipe }], target: i0.ɵɵFactoryTarget.Component });
|
|
265
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AtomixDaterangeCalendarComponent, selector: "atomix-daterange-calendar", inputs: { placeholder: "placeholder", styleClass: "styleClass", selectionMode: "selectionMode", inputStyleClass: "inputStyleClass", disabled: "disabled", selectedDate: "selectedDate", maxDate: "maxDate", minDate: "minDate" }, outputs: { dateRangeChange: "dateRangeChange" }, viewQueries: [{ propertyName: "overlayPanel", first: true, predicate: ["op"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div>\n <div class=\"input-wrapper\">\n <input\n pInputText\n type=\"text\"\n [ngClass]=\"inputStyleClass\"\n [placeholder]=\"placeholder\"\n [value]=\"getDateRangeLabel()\"\n readonly\n [disabled]=\"disabled\"\n (click)=\"op.toggle($event)\"\n (keydown)=\"onInputKeyDown($event)\"\n />\n <i *ngIf=\"hasSelection\" class=\"pi pi-times input-clear-icon\" title=\"Clear\" tabindex=\"0\" (click)=\"clearAndStop($event)\" (keydown.enter)=\"clearAndStop($event)\" (keydown.space)=\"clearAndStop($event)\"></i>\n <i class=\"pi pi-calendar input-icon\" title=\"Open calendar\" (click)=\"op.toggle($event)\"></i>\n </div>\n <p-overlayPanel #op [dismissable]=\"true\" appendTo=\"body\" styleClass=\"atomix-date-range-overlay\">\n <div class=\"overlay-inner\">\n <div class=\"overlay-left\">\n <div class=\"preset-list\">\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('today')\" [ngClass]=\"{ 'active': selectedPreset === 'today' }\" label=\"Today\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('yesterday')\" [ngClass]=\"{ 'active': selectedPreset === 'yesterday' }\" label=\"Yesterday\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('lastWeek')\" [ngClass]=\"{ 'active': selectedPreset === 'lastWeek' }\" label=\"Last week\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('lastMonth')\" [ngClass]=\"{ 'active': selectedPreset === 'lastMonth' }\" label=\"Last month\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('lastQuarter')\" [ngClass]=\"{ 'active': selectedPreset === 'lastQuarter' }\" label=\"Last quarter\"></button>\n <!-- <button pButton pRipple type=\"button\" class=\"preset-btn p-button-outlined\" (click)=\"toggleCustomRange()\" [ngClass]=\"{ 'custom-active': customRangeMode }\" label=\"Custom range\"></button> -->\n </div>\n <a class=\"reset-link\" (click)=\"resetAndClose()\">Reset</a>\n </div>\n <div class=\"overlay-right\">\n <p-calendar [(ngModel)]=\"selectedDate\" [selectionMode]=\"'range'\" [inline]=\"true\" [dateFormat]=\"'mm/dd/yyyy'\" [showOtherMonths]=\"true\" [locale]=\"enLocale\" [showIcon]=\"false\" [styleClass]=\"'atomix-overlay-calendar'\" (ngModelChange)=\"onDateRangeChange($event)\" [disabled]=\"disabled\" [maxDate]=\"maxDate\" [minDate]=\"minDate\"></p-calendar>\n <!-- <div class=\"overlay-actions\" *ngIf=\"!inline\">\n <button pButton pRipple type=\"button\" class=\"p-button-help p-button-sm\" (click)=\"applyCustomRange()\">Apply</button>\n <button pButton pRipple type=\"button\" class=\"p-button-text p-button-sm\" (click)=\"resetAndClose()\">Cancel</button>\n </div> -->\n </div>\n </div>\n </p-overlayPanel>\n</div>\n", styles: ["::ng-deep .p-calendar{button{background-color:transparent!important}}.overlay-inner{display:flex;gap:1rem;align-items:flex-start;flex-wrap:nowrap}.overlay-left{padding-right:.75rem;display:flex;flex-direction:column;gap:.5rem}.input-wrapper{display:flex;align-items:center;gap:.5rem;width:100%;position:relative}.input-wrapper input[readonly]{cursor:pointer;padding-right:48px;border-radius:30px}.input-icon{cursor:pointer;color:#0000008a;position:absolute;right:10px}.input-clear-icon{cursor:pointer;color:#0000008a;position:absolute;right:36px}.preset-list{display:flex;flex-direction:column;gap:.5rem;padding:0;margin:0 0 6rem}.preset-btn{justify-content:flex-start;text-align:left;padding-left:8px}.preset-btn .p-button-label{display:inline-block}.preset-btn:not(.p-button-outlined){background-color:transparent;color:#111827}.preset-btn:hover{background-color:#f3f6f9}.preset-btn.active,.preset-btn.p-button.active,.preset-btn.custom-active,.preset-btn.p-button.custom-active{background-color:#e6f4ea!important;border-color:#63b77e!important;color:#063f23!important;font-weight:600}.reset-link{text-align:center;cursor:pointer}.atomix-date-range-overlay .overlay-left .reset-link{display:inline-block;margin-top:1rem;color:#2196f3;cursor:pointer}.overlay-right{flex:1}.overlay-inner.inline{flex-direction:row}:host ::ng-deep .p-column-filter-menu .overlay-inner.inline{display:flex!important;flex-direction:row!important;flex-wrap:nowrap!important}:host ::ng-deep .p-overlaypanel .overlay-inner.inline{display:flex!important;flex-direction:row!important}.overlay-actions{display:flex;gap:.5rem;justify-content:flex-end;margin-top:.5rem}.atomix-overlay-calendar ::ng-deep .p-datepicker{width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "directive", type: i3.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "component", type: i4.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "component", type: i5.OverlayPanel, selector: "p-overlayPanel", inputs: ["ariaLabel", "ariaLabelledBy", "dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] });
|
|
266
|
+
}
|
|
267
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AtomixDaterangeCalendarComponent, decorators: [{
|
|
268
|
+
type: Component,
|
|
269
|
+
args: [{ selector: 'atomix-daterange-calendar', template: "<div>\n <div class=\"input-wrapper\">\n <input\n pInputText\n type=\"text\"\n [ngClass]=\"inputStyleClass\"\n [placeholder]=\"placeholder\"\n [value]=\"getDateRangeLabel()\"\n readonly\n [disabled]=\"disabled\"\n (click)=\"op.toggle($event)\"\n (keydown)=\"onInputKeyDown($event)\"\n />\n <i *ngIf=\"hasSelection\" class=\"pi pi-times input-clear-icon\" title=\"Clear\" tabindex=\"0\" (click)=\"clearAndStop($event)\" (keydown.enter)=\"clearAndStop($event)\" (keydown.space)=\"clearAndStop($event)\"></i>\n <i class=\"pi pi-calendar input-icon\" title=\"Open calendar\" (click)=\"op.toggle($event)\"></i>\n </div>\n <p-overlayPanel #op [dismissable]=\"true\" appendTo=\"body\" styleClass=\"atomix-date-range-overlay\">\n <div class=\"overlay-inner\">\n <div class=\"overlay-left\">\n <div class=\"preset-list\">\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('today')\" [ngClass]=\"{ 'active': selectedPreset === 'today' }\" label=\"Today\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('yesterday')\" [ngClass]=\"{ 'active': selectedPreset === 'yesterday' }\" label=\"Yesterday\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('lastWeek')\" [ngClass]=\"{ 'active': selectedPreset === 'lastWeek' }\" label=\"Last week\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('lastMonth')\" [ngClass]=\"{ 'active': selectedPreset === 'lastMonth' }\" label=\"Last month\"></button>\n <button pButton pRipple type=\"button\" class=\"preset-btn\" (click)=\"applyPreset('lastQuarter')\" [ngClass]=\"{ 'active': selectedPreset === 'lastQuarter' }\" label=\"Last quarter\"></button>\n <!-- <button pButton pRipple type=\"button\" class=\"preset-btn p-button-outlined\" (click)=\"toggleCustomRange()\" [ngClass]=\"{ 'custom-active': customRangeMode }\" label=\"Custom range\"></button> -->\n </div>\n <a class=\"reset-link\" (click)=\"resetAndClose()\">Reset</a>\n </div>\n <div class=\"overlay-right\">\n <p-calendar [(ngModel)]=\"selectedDate\" [selectionMode]=\"'range'\" [inline]=\"true\" [dateFormat]=\"'mm/dd/yyyy'\" [showOtherMonths]=\"true\" [locale]=\"enLocale\" [showIcon]=\"false\" [styleClass]=\"'atomix-overlay-calendar'\" (ngModelChange)=\"onDateRangeChange($event)\" [disabled]=\"disabled\" [maxDate]=\"maxDate\" [minDate]=\"minDate\"></p-calendar>\n <!-- <div class=\"overlay-actions\" *ngIf=\"!inline\">\n <button pButton pRipple type=\"button\" class=\"p-button-help p-button-sm\" (click)=\"applyCustomRange()\">Apply</button>\n <button pButton pRipple type=\"button\" class=\"p-button-text p-button-sm\" (click)=\"resetAndClose()\">Cancel</button>\n </div> -->\n </div>\n </div>\n </p-overlayPanel>\n</div>\n", styles: ["::ng-deep .p-calendar{button{background-color:transparent!important}}.overlay-inner{display:flex;gap:1rem;align-items:flex-start;flex-wrap:nowrap}.overlay-left{padding-right:.75rem;display:flex;flex-direction:column;gap:.5rem}.input-wrapper{display:flex;align-items:center;gap:.5rem;width:100%;position:relative}.input-wrapper input[readonly]{cursor:pointer;padding-right:48px;border-radius:30px}.input-icon{cursor:pointer;color:#0000008a;position:absolute;right:10px}.input-clear-icon{cursor:pointer;color:#0000008a;position:absolute;right:36px}.preset-list{display:flex;flex-direction:column;gap:.5rem;padding:0;margin:0 0 6rem}.preset-btn{justify-content:flex-start;text-align:left;padding-left:8px}.preset-btn .p-button-label{display:inline-block}.preset-btn:not(.p-button-outlined){background-color:transparent;color:#111827}.preset-btn:hover{background-color:#f3f6f9}.preset-btn.active,.preset-btn.p-button.active,.preset-btn.custom-active,.preset-btn.p-button.custom-active{background-color:#e6f4ea!important;border-color:#63b77e!important;color:#063f23!important;font-weight:600}.reset-link{text-align:center;cursor:pointer}.atomix-date-range-overlay .overlay-left .reset-link{display:inline-block;margin-top:1rem;color:#2196f3;cursor:pointer}.overlay-right{flex:1}.overlay-inner.inline{flex-direction:row}:host ::ng-deep .p-column-filter-menu .overlay-inner.inline{display:flex!important;flex-direction:row!important;flex-wrap:nowrap!important}:host ::ng-deep .p-overlaypanel .overlay-inner.inline{display:flex!important;flex-direction:row!important}.overlay-actions{display:flex;gap:.5rem;justify-content:flex-end;margin-top:.5rem}.atomix-overlay-calendar ::ng-deep .p-datepicker{width:100%}\n"] }]
|
|
270
|
+
}], ctorParameters: () => [{ type: i1.DatePipe }], propDecorators: { placeholder: [{
|
|
271
|
+
type: Input
|
|
272
|
+
}], styleClass: [{
|
|
273
|
+
type: Input
|
|
274
|
+
}], selectionMode: [{
|
|
275
|
+
type: Input
|
|
276
|
+
}], inputStyleClass: [{
|
|
277
|
+
type: Input
|
|
278
|
+
}], disabled: [{
|
|
279
|
+
type: Input
|
|
280
|
+
}], selectedDate: [{
|
|
281
|
+
type: Input
|
|
282
|
+
}], maxDate: [{
|
|
283
|
+
type: Input
|
|
284
|
+
}], minDate: [{
|
|
285
|
+
type: Input
|
|
286
|
+
}], overlayPanel: [{
|
|
287
|
+
type: ViewChild,
|
|
288
|
+
args: ['op']
|
|
289
|
+
}], dateRangeChange: [{
|
|
290
|
+
type: Output
|
|
291
|
+
}] } });
|
|
292
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRvbWl4LWRhdGVyYW5nZS1jYWxlbmRhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcmltZWtpdC9zcmMvbGliL2xpYi9hdG9taXgtZGF0ZXJhbmdlLWNhbGVuZGFyL2F0b21peC1kYXRlcmFuZ2UtY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJpbWVraXQvc3JjL2xpYi9saWIvYXRvbWl4LWRhdGVyYW5nZS1jYWxlbmRhci9hdG9taXgtZGF0ZXJhbmdlLWNhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUE0QixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFTNUcsTUFBTSxPQUFPLGdDQUFnQztJQTREdkI7SUEzRFgsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUN6QixVQUFVLEdBQVcsRUFBRSxDQUFDO0lBQ3hCLGFBQWEsR0FBWSxPQUFPLENBQUM7SUFDakMsZUFBZSxHQUFXLEVBQUUsQ0FBQztJQUM3QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLFlBQVksR0FBa0IsSUFBSSxDQUFDO0lBQ25DLE9BQU8sQ0FBUTtJQUNmLE9BQU8sQ0FBUTtJQUV4QixlQUFlLEdBQVksS0FBSyxDQUFDO0lBQ2pDLGNBQWMsR0FBa0IsSUFBSSxDQUFDLENBQUMscUZBQXFGO0lBQzFHLFlBQVksQ0FBZ0I7SUFDbkMsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO0lBRTlELFFBQVEsR0FBRztRQUNULGNBQWMsRUFBRSxDQUFDO1FBQ2pCLFFBQVEsRUFBRTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsU0FBUztZQUNULFdBQVc7WUFDWCxVQUFVO1lBQ1YsUUFBUTtZQUNSLFVBQVU7U0FDWDtRQUNE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Q0FBQztZQUMxQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3BFLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQy9CLENBQUM7YUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7d0dBdlBVLGdDQUFnQzs0RkFBaEMsZ0NBQWdDLDZjQ1Q3QyxpK0ZBdUNBOzs0RkQ5QmEsZ0NBQWdDO2tCQUw1QyxTQUFTOytCQUNFLDJCQUEyQjs2RUFLNUIsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFJVyxZQUFZO3NCQUE1QixTQUFTO3VCQUFDLElBQUk7Z0JBQ0wsZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3ZlcmxheVBhbmVsIH0gZnJvbSAncHJpbWVuZy9vdmVybGF5cGFuZWwnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhdG9taXgtZGF0ZXJhbmdlLWNhbGVuZGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F0b21peC1kYXRlcmFuZ2UtY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hdG9taXgtZGF0ZXJhbmdlLWNhbGVuZGFyLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQXRvbWl4RGF0ZXJhbmdlQ2FsZW5kYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHN0eWxlQ2xhc3M6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBzZWxlY3Rpb25Nb2RlOiAncmFuZ2UnID0gJ3JhbmdlJztcbiAgQElucHV0KCkgaW5wdXRTdHlsZUNsYXNzOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2VsZWN0ZWREYXRlOiBEYXRlW10gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgbWF4RGF0ZSE6IERhdGU7XG4gIEBJbnB1dCgpIG1pbkRhdGUhOiBEYXRlO1xuXG4gIGN1c3RvbVJhbmdlTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzZWxlY3RlZFByZXNldDogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vICd0b2RheScgfCAneWVzdGVyZGF5JyB8ICdsYXN0V2VlaycgfCAnbGFzdE1vbnRoJyB8ICdsYXN0UXVhcnRlcicgfCAnY3VzdG9tJyB8IG51bGxcbiAgQFZpZXdDaGlsZCgnb3AnKSBvdmVybGF5UGFuZWwhOiBPdmVybGF5UGFuZWw7XG4gIEBPdXRwdXQoKSBkYXRlUmFuZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVbXSB8IG51bGw+KCk7XG5cbiAgZW5Mb2NhbGUgPSB7XG4gICAgZmlyc3REYXlPZldlZWs6IDAsXG4gICAgZGF5TmFtZXM6IFtcbiAgICAgICdTdW5kYXknLFxuICAgICAgJ01vbmRheScsXG4gICAgICAnVHVlc2RheScsXG4gICAgICAnV2VkbmVzZGF5JyxcbiAgICAgICdUaHVyc2RheScsXG4gICAgICAnRnJpZGF5JyxcbiAgICAgICdTYXR1cmRheScsXG4gICAgXSxcbiAgICBkYXlOYW1lc1Nob3J0OiBbJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCddLFxuICAgIGRheU5hbWVzTWluOiBbJ1N1JywgJ01vJywgJ1R1JywgJ1dlJywgJ1RoJywgJ0ZyJywgJ1NhJ10sXG4gICAgbW9udGhOYW1lczogW1xuICAgICAgJ0phbnVhcnknLFxuICAgICAgJ0ZlYnJ1YXJ5JyxcbiAgICAgICdNYXJjaCcsXG4gICAgICAnQXByaWwnLFxuICAgICAgJ01heScsXG4gICAgICAnSnVuZScsXG4gICAgICAnSnVseScsXG4gICAgICAnQXVndXN0JyxcbiAgICAgICdTZXB0ZW1iZXInLFxuICAgICAgJ09jdG9iZXInLFxuICAgICAgJ05vdmVtYmVyJyxcbiAgICAgICdEZWNlbWJlcicsXG4gICAgXSxcbiAgICBtb250aE5hbWVzU2hvcnQ6IFtcbiAgICAgICdKYW4nLFxuICAgICAgJ0ZlYicsXG4gICAgICAnTWFyJyxcbiAgICAgICdBcHInLFxuICAgICAgJ01heScsXG4gICAgICAnSnVuJyxcbiAgICAgICdKdWwnLFxuICAgICAgJ0F1ZycsXG4gICAgICAnU2VwJyxcbiAgICAgICdPY3QnLFxuICAgICAgJ05vdicsXG4gICAgICAnRGVjJyxcbiAgICBdLFxuICAgIHRvZGF5OiAnVG9kYXknLFxuICAgIGNsZWFyOiAnQ2xlYXInLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snc2VsZWN0ZWREYXRlJ10pIHtcbiAgICAgIGNvbnN0IHNlbCA9IGNoYW5nZXNbJ3NlbGVjdGVkRGF0ZSddLmN1cnJlbnRWYWx1ZSBhcyBEYXRlW10gfCBudWxsO1xuICAgICAgaWYgKHNlbCAmJiBBcnJheS5pc0FycmF5KHNlbCkgJiYgc2VsLmxlbmd0aCA9PT0gMiAmJiBzZWxbMF0gJiYgc2VsWzFdKSB7XG4gICAgICAgIGNvbnN0IHByZXNldCA9IHRoaXMuZGV0ZWN0UHJlc2V0KHNlbFswXSwgc2VsWzFdKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldCA9IHByZXNldCA/PyAnY3VzdG9tJztcbiAgICAgIH0gZWxzZSBpZiAoc2VsID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25JbnB1dEtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICB0cnkgeyB0aGlzLm92ZXJsYXlQYW5lbD8udG9nZ2xlKGV2ZW50IGFzIGFueSk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyQW5kU3RvcChldmVudDogRXZlbnQpIHtcbiAgICAvLyBQcmV2ZW50IHRvZ2dsZSBmcm9tIGhhcHBlbmluZyB3aGVuIGNsZWFyIGljb24gaXMgY2xpY2tlZFxuICAgIHRyeSB7IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgdGhpcy5jbGVhckRhdGVSYW5nZSgpO1xuICB9XG5cbiAgZ2V0IGhhc1NlbGVjdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlICYmXG4gICAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RlZERhdGUpICYmXG4gICAgICAgICh0aGlzLnNlbGVjdGVkRGF0ZSBhcyBEYXRlW10pLmxlbmd0aCA9PT0gMiAmJlxuICAgICAgICAhISh0aGlzLnNlbGVjdGVkRGF0ZSBhcyBEYXRlW10pWzBdICYmXG4gICAgICAgICEhKHRoaXMuc2VsZWN0ZWREYXRlIGFzIERhdGVbXSlbMV1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVEYXRlKGQ6IERhdGUpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZC5nZXRGdWxsWWVhcigpLCBkLmdldE1vbnRoKCksIGQuZ2V0RGF0ZSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTYW1lRGF0ZShhOiBEYXRlLCBiOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGEuZ2V0RnVsbFllYXIoKSA9PT0gYi5nZXRGdWxsWWVhcigpICYmXG4gICAgICBhLmdldE1vbnRoKCkgPT09IGIuZ2V0TW9udGgoKSAmJlxuICAgICAgYS5nZXREYXRlKCkgPT09IGIuZ2V0RGF0ZSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZWN0UHJlc2V0KHN0YXJ0UmF3OiBEYXRlLCBlbmRSYXc6IERhdGUpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMubm9ybWFsaXplRGF0ZShzdGFydFJhdyk7XG4gICAgY29uc3QgZW5kID0gdGhpcy5ub3JtYWxpemVEYXRlKGVuZFJhdyk7XG4gICAgY29uc3QgdG9kYXkgPSB0aGlzLm5vcm1hbGl6ZURhdGUobmV3IERhdGUoKSk7XG4gICAgLy8gdG9kYXlcbiAgICBpZiAodGhpcy5pc1NhbWVEYXRlKHN0YXJ0LCB0b2RheSkgJiYgdGhpcy5pc1NhbWVEYXRlKGVuZCwgdG9kYXkpKSByZXR1cm4gJ3RvZGF5JztcbiAgICAvLyB5ZXN0ZXJkYXlcbiAgICBjb25zdCB5ID0gbmV3IERhdGUodG9kYXkpO1xuICAgIHkuc2V0RGF0ZSh5LmdldERhdGUoKSAtIDEpO1xuICAgIGlmICh0aGlzLmlzU2FtZURhdGUoc3RhcnQsIHkpICYmIHRoaXMuaXNTYW1lRGF0ZShlbmQsIHkpKSByZXR1cm4gJ3llc3RlcmRheSc7XG4gICAgLy8gbGFzdFdlZWsgKGxhc3QgNyBkYXlzIHdoZXJlIGVuZCA9IHllc3RlcmRheSBhbmQgc3RhcnQgPSBlbmQgLSA2KVxuICAgIGNvbnN0IGx3RW5kID0gbmV3IERhdGUodG9kYXkpO1xuICAgIGx3RW5kLnNldERhdGUobHdFbmQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgY29uc3QgbHdTdGFydCA9IG5ldyBEYXRlKGx3RW5kKTtcbiAgICBsd1N0YXJ0LnNldERhdGUobHdFbmQuZ2V0RGF0ZSgpIC0gNik7XG4gICAgaWYgKHRoaXMuaXNTYW1lRGF0ZShzdGFydCwgbHdTdGFydCkgJiYgdGhpcy5pc1NhbWVEYXRlKGVuZCwgbHdFbmQpKSByZXR1cm4gJ2xhc3RXZWVrJztcbiAgICAvLyBsYXN0TW9udGhcbiAgICBjb25zdCBmaXJzdERheU9mQ3VycmVudE1vbnRoID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgdG9kYXkuZ2V0TW9udGgoKSwgMSk7XG4gICAgY29uc3QgbGFzdERheU9mUHJldk1vbnRoID0gbmV3IERhdGUoZmlyc3REYXlPZkN1cnJlbnRNb250aCk7XG4gICAgbGFzdERheU9mUHJldk1vbnRoLnNldERhdGUoMCk7XG4gICAgY29uc3QgZmlyc3REYXlPZlByZXZNb250aCA9IG5ldyBEYXRlKGxhc3REYXlPZlByZXZNb250aC5nZXRGdWxsWWVhcigpLCBsYXN0RGF5T2ZQcmV2TW9udGguZ2V0TW9udGgoKSwgMSk7XG4gICAgaWYgKFxuICAgICAgdGhpcy5pc1NhbWVEYXRlKHN0YXJ0LCBmaXJzdERheU9mUHJldk1vbnRoKSAmJlxuICAgICAgdGhpcy5pc1NhbWVEYXRlKGVuZCwgbGFzdERheU9mUHJldk1vbnRoKVxuICAgIClcbiAgICAgIHJldHVybiAnbGFzdE1vbnRoJztcbiAgICAvLyBsYXN0UXVhcnRlclxuICAgIGNvbnN0IG1vbnRoID0gdG9kYXkuZ2V0TW9udGgoKTtcbiAgICBjb25zdCBxdWFydGVyID0gTWF0aC5mbG9vcihtb250aCAvIDMpO1xuICAgIGNvbnN0IHByZXZRdWFydGVyRW5kTW9udGggPSBxdWFydGVyICogMyAtIDE7XG4gICAgY29uc3QgcHJldlF1YXJ0ZXJFbmQgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCBwcmV2UXVhcnRlckVuZE1vbnRoICsgMSwgMCk7XG4gICAgY29uc3QgcHJldlF1YXJ0ZXJTdGFydE1vbnRoID0gcHJldlF1YXJ0ZXJFbmRNb250aCAtIDI7XG4gICAgY29uc3QgcHJldlF1YXJ0ZXJTdGFydCA9IG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIHByZXZRdWFydGVyU3RhcnRNb250aCwgMSk7XG4gICAgaWYgKHRoaXMuaXNTYW1lRGF0ZShzdGFydCwgcHJldlF1YXJ0ZXJTdGFydCkgJiYgdGhpcy5pc1NhbWVEYXRlKGVuZCwgcHJldlF1YXJ0ZXJFbmQpKSByZXR1cm4gJ2xhc3RRdWFydGVyJztcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNsZWFyRGF0ZVJhbmdlKCkge1xuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDtcbiAgICB0aGlzLmRhdGVSYW5nZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICB0aGlzLnNlbGVjdGVkUHJlc2V0ID0gbnVsbDtcbiAgICB0aGlzLmN1c3RvbVJhbmdlTW9kZSA9IGZhbHNlO1xuICB9XG5cbiAgcmVzZXRBbmRDbG9zZSgpIHtcbiAgICB0aGlzLmNsZWFyRGF0ZVJhbmdlKCk7XG4gICAgaWYgKHRoaXMub3ZlcmxheVBhbmVsKSB7XG4gICAgICB0cnkgeyB0aGlzLm92ZXJsYXlQYW5lbC5oaWRlKCk7IH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQ3VzdG9tUmFuZ2UoKSB7XG4gICAgdGhpcy5jdXN0b21SYW5nZU1vZGUgPSAhdGhpcy5jdXN0b21SYW5nZU1vZGU7XG4gICAgaWYgKHRoaXMuY3VzdG9tUmFuZ2VNb2RlKSB0aGlzLnNlbGVjdGVkUHJlc2V0ID0gJ2N1c3RvbSc7XG4gIH1cblxuICBhcHBseUN1c3RvbVJhbmdlKCkge1xuICAgIHRoaXMuZGF0ZVJhbmdlQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZERhdGUpO1xuICAgIGlmICh0aGlzLm92ZXJsYXlQYW5lbCkge1xuICAgICAgdHJ5IHsgdGhpcy5vdmVybGF5UGFuZWwuaGlkZSgpOyB9IGNhdGNoIChlKSB7fVxuICAgIH1cbiAgICB0aGlzLmN1c3RvbVJhbmdlTW9kZSA9IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQgPSAnY3VzdG9tJztcbiAgfVxuXG4gIGdldERhdGVSYW5nZUxhYmVsKCkge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZERhdGUgfHwgIUFycmF5LmlzQXJyYXkodGhpcy5zZWxlY3RlZERhdGUpKSByZXR1cm4gdGhpcy5wbGFjZWhvbGRlciB8fCAnU2VsZWN0IGRhdGUgcmFuZ2UnO1xuICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHRoaXMuc2VsZWN0ZWREYXRlIGFzIERhdGVbXTtcbiAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpIHJldHVybiAnU2VsZWN0IGRhdGUgcmFuZ2UnO1xuICAgIGNvbnN0IHN0YXJ0U3RyID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oc3RhcnQsICdNTS9kZC95eXl5Jyk7XG4gICAgY29uc3QgZW5kU3RyID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZW5kLCAnTU0vZGQveXl5eScpO1xuICByZXR1cm4gYCR7c3RhcnRTdHJ9IOKAkyAke2VuZFN0cn1gO1xuICB9XG5cbiAgYXBwbHlQcmVzZXQocHJlc2V0OiAndG9kYXknfCd5ZXN0ZXJkYXknfCdsYXN0V2Vlayd8J2xhc3RNb250aCd8J2xhc3RRdWFydGVyJykge1xuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICBsZXQgc3RhcnQ6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgZW5kOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgc3dpdGNoIChwcmVzZXQpIHtcbiAgICAgIGNhc2UgJ3RvZGF5JzpcbiAgICAgICAgc3RhcnQgPSBlbmQgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCB0b2RheS5nZXREYXRlKCkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3llc3RlcmRheSc6XG4gICAgICAgIGNvbnN0IHkgPSBuZXcgRGF0ZSh0b2RheSk7XG4gICAgICAgIHkuc2V0RGF0ZSh5LmdldERhdGUoKSAtIDEpO1xuICAgICAgICBzdGFydCA9IGVuZCA9IG5ldyBEYXRlKHkuZ2V0RnVsbFllYXIoKSwgeS5nZXRNb250aCgpLCB5LmdldERhdGUoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbGFzdFdlZWsnOiB7XG4gICAgICAgIGNvbnN0IGx3RW5kID0gbmV3IERhdGUodG9kYXkpO1xuICAgICAgICBsd0VuZC5zZXREYXRlKGx3RW5kLmdldERhdGUoKSAtIDEpO1xuICAgICAgICBjb25zdCBsd1N0YXJ0ID0gbmV3IERhdGUobHdFbmQpO1xuICAgICAgICBsd1N0YXJ0LnNldERhdGUobHdFbmQuZ2V0RGF0ZSgpIC0gNik7XG4gICAgICAgIHN0YXJ0ID0gbmV3IERhdGUobHdTdGFydC5nZXRGdWxsWWVhcigpLCBsd1N0YXJ0LmdldE1vbnRoKCksIGx3U3RhcnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgZW5kID0gbmV3IERhdGUobHdFbmQuZ2V0RnVsbFllYXIoKSwgbHdFbmQuZ2V0TW9udGgoKSwgbHdFbmQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdsYXN0TW9udGgnOiB7XG4gICAgICAgIGNvbnN0IGZpcnN0RGF5T2ZDdXJyZW50TW9udGggPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCAxKTtcbiAgICAgICAgY29uc3QgbGFzdERheU9mUHJldk1vbnRoID0gbmV3IERhdGUoZmlyc3REYXlPZkN1cnJlbnRNb250aCk7XG4gICAgICAgIGxhc3REYXlPZlByZXZNb250aC5zZXREYXRlKDApO1xuICAgICAgICBjb25zdCBmaXJzdERheU9mUHJldk1vbnRoID0gbmV3IERhdGUobGFzdERheU9mUHJldk1vbnRoLmdldEZ1bGxZZWFyKCksIGxhc3REYXlPZlByZXZNb250aC5nZXRNb250aCgpLCAxKTtcbiAgICAgICAgc3RhcnQgPSBuZXcgRGF0ZShmaXJzdERheU9mUHJldk1vbnRoLmdldEZ1bGxZZWFyKCksIGZpcnN0RGF5T2ZQcmV2TW9udGguZ2V0TW9udGgoKSwgMSk7XG4gICAgICAgIGVuZCA9IG5ldyBEYXRlKGxhc3REYXlPZlByZXZNb250aC5nZXRGdWxsWWVhcigpLCBsYXN0RGF5T2ZQcmV2TW9udGguZ2V0TW9udGgoKSwgbGFzdERheU9mUHJldk1vbnRoLmdldERhdGUoKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnbGFzdFF1YXJ0ZXInOiB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gdG9kYXkuZ2V0TW9udGgoKTtcbiAgICAgICAgY29uc3QgcXVhcnRlciA9IE1hdGguZmxvb3IobW9udGggLyAzKTtcbiAgICAgICAgY29uc3QgcHJldlF1YXJ0ZXJFbmRNb250aCA9IHF1YXJ0ZXIgKiAzIC0gMTtcbiAgICAgICAgY29uc3QgcHJldlF1YXJ0ZXJFbmQgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCBwcmV2UXVhcnRlckVuZE1vbnRoICsgMSwgMCk7XG4gICAgICAgIGNvbnN0IHByZXZRdWFydGVyU3RhcnRNb250aCA9IHByZXZRdWFydGVyRW5kTW9udGggLSAyO1xuICAgICAgICBjb25zdCBwcmV2UXVhcnRlclN0YXJ0ID0gbmV3IERhdGUodG9kYXkuZ2V0RnVsbFllYXIoKSwgcHJldlF1YXJ0ZXJTdGFydE1vbnRoLCAxKTtcbiAgICAgICAgc3RhcnQgPSBwcmV2UXVhcnRlclN0YXJ0O1xuICAgICAgICBlbmQgPSBwcmV2UXVhcnRlckVuZDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHN0YXJ0ICYmIGVuZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBbc3RhcnQsIGVuZF07XG4gICAgICB0aGlzLmRhdGVSYW5nZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQgPSBwcmVzZXQ7XG4gICAgICB0aGlzLmN1c3RvbVJhbmdlTW9kZSA9IGZhbHNlO1xuICAgIH1cbiAgICB0cnkgeyB0aGlzLm92ZXJsYXlQYW5lbD8uaGlkZSgpOyB9IGNhdGNoIChlKSB7fVxuICB9XG5cbiAgb25EYXRlUmFuZ2VDaGFuZ2UoZGF0ZVJhbmdlOiBEYXRlW10gfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlUmFuZ2VDaGFuZ2UuZW1pdChkYXRlUmFuZ2UpO1xuICAgIGlmIChkYXRlUmFuZ2UgJiYgQXJyYXkuaXNBcnJheShkYXRlUmFuZ2UpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0ID0gdGhpcy5kZXRlY3RQcmVzZXQoZGF0ZVJhbmdlWzBdLCBkYXRlUmFuZ2VbMV0pO1xuICAgICAgdGhpcy5jdXN0b21SYW5nZU1vZGUgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKCFkYXRlUmFuZ2UpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQgPSBudWxsO1xuICAgICAgdGhpcy5jdXN0b21SYW5nZU1vZGUgPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXY+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXJcIj5cbiAgICAgIDxpbnB1dFxuICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgW25nQ2xhc3NdPVwiaW5wdXRTdHlsZUNsYXNzXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3ZhbHVlXT1cImdldERhdGVSYW5nZUxhYmVsKClcIlxuICByZWFkb25seVxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAoY2xpY2spPVwib3AudG9nZ2xlKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbklucHV0S2V5RG93bigkZXZlbnQpXCJcbiAgLz5cbiAgPGkgKm5nSWY9XCJoYXNTZWxlY3Rpb25cIiBjbGFzcz1cInBpIHBpLXRpbWVzIGlucHV0LWNsZWFyLWljb25cIiB0aXRsZT1cIkNsZWFyXCIgdGFiaW5kZXg9XCIwXCIgKGNsaWNrKT1cImNsZWFyQW5kU3RvcCgkZXZlbnQpXCIgKGtleWRvd24uZW50ZXIpPVwiY2xlYXJBbmRTdG9wKCRldmVudClcIiAoa2V5ZG93bi5zcGFjZSk9XCJjbGVhckFuZFN0b3AoJGV2ZW50KVwiPjwvaT5cbiAgPGkgY2xhc3M9XCJwaSBwaS1jYWxlbmRhciBpbnB1dC1pY29uXCIgdGl0bGU9XCJPcGVuIGNhbGVuZGFyXCIgKGNsaWNrKT1cIm9wLnRvZ2dsZSgkZXZlbnQpXCI+PC9pPlxuICAgIDwvZGl2PlxuICAgIDxwLW92ZXJsYXlQYW5lbCAjb3AgW2Rpc21pc3NhYmxlXT1cInRydWVcIiBhcHBlbmRUbz1cImJvZHlcIiBzdHlsZUNsYXNzPVwiYXRvbWl4LWRhdGUtcmFuZ2Utb3ZlcmxheVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXktaW5uZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXktbGVmdFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmVzZXQtbGlzdFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicHJlc2V0LWJ0blwiIChjbGljayk9XCJhcHBseVByZXNldCgndG9kYXknKVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IHNlbGVjdGVkUHJlc2V0ID09PSAndG9kYXknIH1cIiBsYWJlbD1cIlRvZGF5XCI+PC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHBCdXR0b24gcFJpcHBsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJwcmVzZXQtYnRuXCIgKGNsaWNrKT1cImFwcGx5UHJlc2V0KCd5ZXN0ZXJkYXknKVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IHNlbGVjdGVkUHJlc2V0ID09PSAneWVzdGVyZGF5JyB9XCIgbGFiZWw9XCJZZXN0ZXJkYXlcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInByZXNldC1idG5cIiAoY2xpY2spPVwiYXBwbHlQcmVzZXQoJ2xhc3RXZWVrJylcIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBzZWxlY3RlZFByZXNldCA9PT0gJ2xhc3RXZWVrJyB9XCIgbGFiZWw9XCJMYXN0IHdlZWtcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInByZXNldC1idG5cIiAoY2xpY2spPVwiYXBwbHlQcmVzZXQoJ2xhc3RNb250aCcpXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogc2VsZWN0ZWRQcmVzZXQgPT09ICdsYXN0TW9udGgnIH1cIiBsYWJlbD1cIkxhc3QgbW9udGhcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInByZXNldC1idG5cIiAoY2xpY2spPVwiYXBwbHlQcmVzZXQoJ2xhc3RRdWFydGVyJylcIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBzZWxlY3RlZFByZXNldCA9PT0gJ2xhc3RRdWFydGVyJyB9XCIgbGFiZWw9XCJMYXN0IHF1YXJ0ZXJcIj48L2J1dHRvbj5cbiAgICAgICAgICAgIDwhLS0gPGJ1dHRvbiBwQnV0dG9uIHBSaXBwbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwicHJlc2V0LWJ0biBwLWJ1dHRvbi1vdXRsaW5lZFwiIChjbGljayk9XCJ0b2dnbGVDdXN0b21SYW5nZSgpXCIgW25nQ2xhc3NdPVwieyAnY3VzdG9tLWFjdGl2ZSc6IGN1c3RvbVJhbmdlTW9kZSB9XCIgbGFiZWw9XCJDdXN0b20gcmFuZ2VcIj48L2J1dHRvbj4gLS0+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGEgY2xhc3M9XCJyZXNldC1saW5rXCIgKGNsaWNrKT1cInJlc2V0QW5kQ2xvc2UoKVwiPlJlc2V0PC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXktcmlnaHRcIj5cbiAgICAgICAgICA8cC1jYWxlbmRhciBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZVwiIFtzZWxlY3Rpb25Nb2RlXT1cIidyYW5nZSdcIiBbaW5saW5lXT1cInRydWVcIiBbZGF0ZUZvcm1hdF09XCInbW0vZGQveXl5eSdcIiBbc2hvd090aGVyTW9udGhzXT1cInRydWVcIiBbbG9jYWxlXT1cImVuTG9jYWxlXCIgW3Nob3dJY29uXT1cImZhbHNlXCIgW3N0eWxlQ2xhc3NdPVwiJ2F0b21peC1vdmVybGF5LWNhbGVuZGFyJ1wiIChuZ01vZGVsQ2hhbmdlKT1cIm9uRGF0ZVJhbmdlQ2hhbmdlKCRldmVudClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbbWF4RGF0ZV09XCJtYXhEYXRlXCIgW21pbkRhdGVdPVwibWluRGF0ZVwiPjwvcC1jYWxlbmRhcj5cbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJvdmVybGF5LWFjdGlvbnNcIiAqbmdJZj1cIiFpbmxpbmVcIj5cbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInAtYnV0dG9uLWhlbHAgcC1idXR0b24tc21cIiAoY2xpY2spPVwiYXBwbHlDdXN0b21SYW5nZSgpXCI+QXBwbHk8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiBwUmlwcGxlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInAtYnV0dG9uLXRleHQgcC1idXR0b24tc21cIiAoY2xpY2spPVwicmVzZXRBbmRDbG9zZSgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvcC1vdmVybGF5UGFuZWw+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -49,11 +49,11 @@ export class AtomixInputComponent {
|
|
|
49
49
|
this.inputEl?.nativeElement?.focus();
|
|
50
50
|
}
|
|
51
51
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AtomixInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
52
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AtomixInputComponent, selector: "atomix-input", inputs: { value: "value", name: "name", type: "type", placeholder: "placeholder", withSearchIcon: "withSearchIcon", searchIconPosition: "searchIconPosition", iconName: "iconName", containerClass: "containerClass", class: "class", disabled: "disabled", isCrossRequired: "isCrossRequired", label: "label", isLabelRequired: "isLabelRequired", autofocus: "autofocus" }, outputs: { valueChange: "valueChange", changeValueHandler: "changeValueHandler" }, viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputEl"], descendants: true }], ngImport: i0, template: "<label *ngIf=\"label\" for=\"name\"\n >{{ label }}\n <span *ngIf=\"isLabelRequired\" class=\"lib-error-asterisk\">*</span></label\n>\n\n<i\n class=\"pi pi-search search-icon\"\n [ngClass]=\"(searchIconPosition === 'left' ? 'search-icon-left' : 'search-icon-right') + (label ? ' with-label' : '')\"\n *ngIf=\"withSearchIcon\"\n></i>\n\n<input\n [id]=\"name\"\n type=\"text\"\n pInputText\n [value]=\"value\"\n [attr.placeholder]=\"placeholder\"\n (input)=\"onInput($event)\"\n (keydown.enter)=\"onEnter()\"\n [ngClass]=\"class + ' lib-input-field' + (withSearchIcon ? ' with-search-icon-' + searchIconPosition : '') + (isCrossRequired ? ' with-cross-icon' : '')\"\n autocomplete=\"new-password\"\n [disabled]=\"disabled\"\n [type]=\"type\"\n #inputEl\n/>\n<i\n class=\"pi pi-times filter-dropdown-icon\"\n [ngClass]=\"(searchIconPosition === 'right' ? 'filter-dropdown-icon-left' : '') + (label ? ' with-label' : '')\"\n style=\"cursor: pointer\"\n (click)=\"clearValue()\"\n *ngIf=\"isCrossRequired && value !== ''\"\n\n></i>\n", styles: [".lib-error-asterisk{color:red}.filter-dropdown-icon{position:absolute;top:50%;right:10px;transform:translateY(-50%);z-index:1;cursor:pointer;color:#6c757d}.filter-dropdown-icon-left{right:40px}.search-icon.with-label,.filter-dropdown-icon.with-label{top:88%}.search-icon{position:absolute;top:50%;transform:translateY(-50%);z-index:1;color:#000000de;font-size:1rem}.search-icon-left{left:10px}.search-icon-right{right:10px}.with-search-icon-left{padding-left:30px}.with-search-icon-right{padding-right:60px}::ng-deep .lib-input-field{border-radius:30px
|
|
52
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AtomixInputComponent, selector: "atomix-input", inputs: { value: "value", name: "name", type: "type", placeholder: "placeholder", withSearchIcon: "withSearchIcon", searchIconPosition: "searchIconPosition", iconName: "iconName", containerClass: "containerClass", class: "class", disabled: "disabled", isCrossRequired: "isCrossRequired", label: "label", isLabelRequired: "isLabelRequired", autofocus: "autofocus" }, outputs: { valueChange: "valueChange", changeValueHandler: "changeValueHandler" }, viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputEl"], descendants: true }], ngImport: i0, template: "<label *ngIf=\"label\" for=\"name\"\n >{{ label }}\n <span *ngIf=\"isLabelRequired\" class=\"lib-error-asterisk\">*</span></label\n>\n\n<i\n class=\"pi pi-search search-icon\"\n [ngClass]=\"(searchIconPosition === 'left' ? 'search-icon-left' : 'search-icon-right') + (label ? ' with-label' : '')\"\n *ngIf=\"withSearchIcon\"\n (click)=\"onEnter()\"\n></i>\n\n<input\n [id]=\"name\"\n type=\"text\"\n pInputText\n [value]=\"value\"\n [attr.placeholder]=\"placeholder\"\n (input)=\"onInput($event)\"\n (keydown.enter)=\"onEnter()\"\n [ngClass]=\"class + ' lib-input-field' + (withSearchIcon ? ' with-search-icon-' + searchIconPosition : '') + (isCrossRequired ? ' with-cross-icon' : '')\"\n autocomplete=\"new-password\"\n [disabled]=\"disabled\"\n [type]=\"type\"\n #inputEl\n/>\n<i\n class=\"pi pi-times filter-dropdown-icon\"\n [ngClass]=\"(withSearchIcon && searchIconPosition === 'right' ? 'filter-dropdown-icon-left' : '') + (label ? ' with-label' : '')\"\n style=\"cursor: pointer\"\n (click)=\"clearValue()\"\n *ngIf=\"isCrossRequired && value !== ''\"\n\n></i>\n", styles: [".lib-error-asterisk{color:red}.filter-dropdown-icon{position:absolute;top:50%;right:10px;transform:translateY(-50%);z-index:1;cursor:pointer;color:#6c757d}.filter-dropdown-icon-left{right:40px}.search-icon.with-label,.filter-dropdown-icon.with-label{top:88%}.search-icon{position:absolute;top:50%;transform:translateY(-50%);z-index:1;color:#000000de;font-size:1rem}.search-icon-left{left:10px}.search-icon-right{right:10px}.with-search-icon-left{padding-left:30px;padding-right:30px}.with-search-icon-right{padding-right:60px}::ng-deep .lib-input-field{border-radius:30px}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.InputText, selector: "[pInputText]", inputs: ["variant"] }] });
|
|
53
53
|
}
|
|
54
54
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AtomixInputComponent, decorators: [{
|
|
55
55
|
type: Component,
|
|
56
|
-
args: [{ selector: 'atomix-input', template: "<label *ngIf=\"label\" for=\"name\"\n >{{ label }}\n <span *ngIf=\"isLabelRequired\" class=\"lib-error-asterisk\">*</span></label\n>\n\n<i\n class=\"pi pi-search search-icon\"\n [ngClass]=\"(searchIconPosition === 'left' ? 'search-icon-left' : 'search-icon-right') + (label ? ' with-label' : '')\"\n *ngIf=\"withSearchIcon\"\n></i>\n\n<input\n [id]=\"name\"\n type=\"text\"\n pInputText\n [value]=\"value\"\n [attr.placeholder]=\"placeholder\"\n (input)=\"onInput($event)\"\n (keydown.enter)=\"onEnter()\"\n [ngClass]=\"class + ' lib-input-field' + (withSearchIcon ? ' with-search-icon-' + searchIconPosition : '') + (isCrossRequired ? ' with-cross-icon' : '')\"\n autocomplete=\"new-password\"\n [disabled]=\"disabled\"\n [type]=\"type\"\n #inputEl\n/>\n<i\n class=\"pi pi-times filter-dropdown-icon\"\n [ngClass]=\"(searchIconPosition === 'right' ? 'filter-dropdown-icon-left' : '') + (label ? ' with-label' : '')\"\n style=\"cursor: pointer\"\n (click)=\"clearValue()\"\n *ngIf=\"isCrossRequired && value !== ''\"\n\n></i>\n", styles: [".lib-error-asterisk{color:red}.filter-dropdown-icon{position:absolute;top:50%;right:10px;transform:translateY(-50%);z-index:1;cursor:pointer;color:#6c757d}.filter-dropdown-icon-left{right:40px}.search-icon.with-label,.filter-dropdown-icon.with-label{top:88%}.search-icon{position:absolute;top:50%;transform:translateY(-50%);z-index:1;color:#000000de;font-size:1rem}.search-icon-left{left:10px}.search-icon-right{right:10px}.with-search-icon-left{padding-left:30px}.with-search-icon-right{padding-right:60px}::ng-deep .lib-input-field{border-radius:30px
|
|
56
|
+
args: [{ selector: 'atomix-input', template: "<label *ngIf=\"label\" for=\"name\"\n >{{ label }}\n <span *ngIf=\"isLabelRequired\" class=\"lib-error-asterisk\">*</span></label\n>\n\n<i\n class=\"pi pi-search search-icon\"\n [ngClass]=\"(searchIconPosition === 'left' ? 'search-icon-left' : 'search-icon-right') + (label ? ' with-label' : '')\"\n *ngIf=\"withSearchIcon\"\n (click)=\"onEnter()\"\n></i>\n\n<input\n [id]=\"name\"\n type=\"text\"\n pInputText\n [value]=\"value\"\n [attr.placeholder]=\"placeholder\"\n (input)=\"onInput($event)\"\n (keydown.enter)=\"onEnter()\"\n [ngClass]=\"class + ' lib-input-field' + (withSearchIcon ? ' with-search-icon-' + searchIconPosition : '') + (isCrossRequired ? ' with-cross-icon' : '')\"\n autocomplete=\"new-password\"\n [disabled]=\"disabled\"\n [type]=\"type\"\n #inputEl\n/>\n<i\n class=\"pi pi-times filter-dropdown-icon\"\n [ngClass]=\"(withSearchIcon && searchIconPosition === 'right' ? 'filter-dropdown-icon-left' : '') + (label ? ' with-label' : '')\"\n style=\"cursor: pointer\"\n (click)=\"clearValue()\"\n *ngIf=\"isCrossRequired && value !== ''\"\n\n></i>\n", styles: [".lib-error-asterisk{color:red}.filter-dropdown-icon{position:absolute;top:50%;right:10px;transform:translateY(-50%);z-index:1;cursor:pointer;color:#6c757d}.filter-dropdown-icon-left{right:40px}.search-icon.with-label,.filter-dropdown-icon.with-label{top:88%}.search-icon{position:absolute;top:50%;transform:translateY(-50%);z-index:1;color:#000000de;font-size:1rem}.search-icon-left{left:10px}.search-icon-right{right:10px}.with-search-icon-left{padding-left:30px;padding-right:30px}.with-search-icon-right{padding-right:60px}::ng-deep .lib-input-field{border-radius:30px}\n"] }]
|
|
57
57
|
}], propDecorators: { inputEl: [{
|
|
58
58
|
type: ViewChild,
|
|
59
59
|
args: ['inputEl']
|
|
@@ -90,4 +90,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
90
90
|
}], changeValueHandler: [{
|
|
91
91
|
type: Output
|
|
92
92
|
}] } });
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXRvbWl4LWlucHV0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ByaW1la2l0L3NyYy9saWIvbGliL2F0b21peC1pbnB1dC9hdG9taXgtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJpbWVraXQvc3JjL2xpYi9saWIvYXRvbWl4LWlucHV0L2F0b21peC1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFjLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQU85RixNQUFNLE9BQU8sb0JBQW9CO0lBRVQsT0FBTyxDQUFnQztJQUNwRCxLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLElBQUksR0FBVyxFQUFFLENBQUM7SUFDbEIsSUFBSSxHQUFXLE1BQU0sQ0FBQztJQUN0QixXQUFXLEdBQVcsRUFBRSxDQUFDO0lBQ3hCLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBQzFDLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFDaEMsa0JBQWtCLEdBQXFCLE9BQU8sQ0FBQztJQUMvQyxRQUFRLEdBQVcsRUFBRSxDQUFDO0lBQ3RCLGNBQWMsR0FBVyxFQUFFLENBQUM7SUFDNUIsS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUNuQixRQUFRLEdBQVksS0FBSyxDQUFDO0lBQzFCLGVBQWUsR0FBWSxJQUFJLENBQUM7SUFDaEMsS0FBSyxHQUFXLEVBQUUsQ0FBQztJQUNuQixlQUFlLEdBQVksS0FBSyxDQUFDO0lBQ2hDLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0Isa0JBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUV4RCxlQUFlO1FBQ2YsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsZ0RBQWdEO1lBQ2hELFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQVk7UUFDbEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQTBCLENBQUM7UUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFDRCxVQUFVO1FBQ1IsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFDRCxhQUFhLENBQUMsS0FBWTtRQUN4QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQztRQUMvQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFDQyxLQUFLO1FBQ0wsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDdkMsQ0FBQzt3R0FoRFUsb0JBQW9COzRGQUFwQixvQkFBb0IseWxCQ1BqQyxza0NBa0NBOzs0RkQzQmEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLGNBQWM7OEJBTUYsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTO2dCQUNYLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRSxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDSSxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXRvbWl4LWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F0b21peC1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2F0b21peC1pbnB1dC5jb21wb25lbnQuY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEF0b21peElucHV0Q29tcG9uZW50IHtcblxuICBAVmlld0NoaWxkKCdpbnB1dEVsJykgaW5wdXRFbCE6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG4gIEBJbnB1dCgpIHZhbHVlOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgbmFtZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHR5cGU6IHN0cmluZyA9ICd0ZXh0JztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQElucHV0KCkgd2l0aFNlYXJjaEljb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2VhcmNoSWNvblBvc2l0aW9uOiAnbGVmdCcgfCAncmlnaHQnID0gJ3JpZ2h0JztcbiAgQElucHV0KCkgaWNvbk5hbWU6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBjb250YWluZXJDbGFzczogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGNsYXNzOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNDcm9zc1JlcXVpcmVkOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBpc0xhYmVsUmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgIEBJbnB1dCgpIGF1dG9mb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgY2hhbmdlVmFsdWVIYW5kbGVyID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICAvLyBUaW1lb3V0IGVuc3VyZXMgaW5wdXQgaXMgYXZhaWxhYmxlIGluIHRoZSBET01cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbnB1dEVsPy5uYXRpdmVFbGVtZW50Py5mb2N1cygpKTtcbiAgICB9XG4gIH1cblxuICBvbklucHV0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgdGhpcy52YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgIHRoaXMuY2hhbmdlVmFsdWVIYW5kbGVyLmVtaXQodGhpcy52YWx1ZSk7XG4gIH1cbiAgb25FbnRlcigpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSk7XG4gIH1cbiAgY2xlYXJWYWx1ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gJyc7XG4gICAgdGhpcy5vbkVudGVyKCk7XG4gIH1cbiAgb25TZWFyY2hDbGVhcihldmVudDogRXZlbnQpIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGlmIChpbnB1dC52YWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAnJztcbiAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCgnJyk7XG4gICAgfVxuICB9XG4gICAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dEVsPy5uYXRpdmVFbGVtZW50Py5mb2N1cygpO1xuICB9XG59XG4iLCI8bGFiZWwgKm5nSWY9XCJsYWJlbFwiIGZvcj1cIm5hbWVcIlxuICA+e3sgbGFiZWwgfX1cbiAgPHNwYW4gKm5nSWY9XCJpc0xhYmVsUmVxdWlyZWRcIiBjbGFzcz1cImxpYi1lcnJvci1hc3Rlcmlza1wiPio8L3NwYW4+PC9sYWJlbFxuPlxuXG48aVxuICBjbGFzcz1cInBpIHBpLXNlYXJjaCBzZWFyY2gtaWNvblwiXG4gIFtuZ0NsYXNzXT1cIihzZWFyY2hJY29uUG9zaXRpb24gPT09ICdsZWZ0JyA/ICdzZWFyY2gtaWNvbi1sZWZ0JyA6ICdzZWFyY2gtaWNvbi1yaWdodCcpICsgKGxhYmVsID8gJyB3aXRoLWxhYmVsJyA6ICcnKVwiXG4gICpuZ0lmPVwid2l0aFNlYXJjaEljb25cIlxuICAoY2xpY2spPVwib25FbnRlcigpXCJcbj48L2k+XG5cbjxpbnB1dFxuICBbaWRdPVwibmFtZVwiXG4gIHR5cGU9XCJ0ZXh0XCJcbiAgcElucHV0VGV4dFxuICBbdmFsdWVdPVwidmFsdWVcIlxuICBbYXR0ci5wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gIChpbnB1dCk9XCJvbklucHV0KCRldmVudClcIlxuICAoa2V5ZG93bi5lbnRlcik9XCJvbkVudGVyKClcIlxuICBbbmdDbGFzc109XCJjbGFzcyArICcgbGliLWlucHV0LWZpZWxkJyArICh3aXRoU2VhcmNoSWNvbiA/ICcgd2l0aC1zZWFyY2gtaWNvbi0nICsgc2VhcmNoSWNvblBvc2l0aW9uIDogJycpICsgKGlzQ3Jvc3NSZXF1aXJlZCA/ICcgd2l0aC1jcm9zcy1pY29uJyA6ICcnKVwiXG4gIGF1dG9jb21wbGV0ZT1cIm5ldy1wYXNzd29yZFwiXG4gIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFt0eXBlXT1cInR5cGVcIlxuICAjaW5wdXRFbFxuLz5cbjxpXG4gIGNsYXNzPVwicGkgcGktdGltZXMgZmlsdGVyLWRyb3Bkb3duLWljb25cIlxuICBbbmdDbGFzc109XCIod2l0aFNlYXJjaEljb24gJiYgc2VhcmNoSWNvblBvc2l0aW9uID09PSAncmlnaHQnID8gJ2ZpbHRlci1kcm9wZG93bi1pY29uLWxlZnQnIDogJycpICsgKGxhYmVsID8gJyB3aXRoLWxhYmVsJyA6ICcnKVwiXG4gIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcbiAgKGNsaWNrKT1cImNsZWFyVmFsdWUoKVwiXG4gICpuZ0lmPVwiaXNDcm9zc1JlcXVpcmVkICYmIHZhbHVlICE9PSAnJ1wiXG5cbj48L2k+XG4iXX0=
|