@beshkari/mb-ui 0.5.0-alpha.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.
Files changed (124) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +98 -0
  3. package/esm2022/beshkari-mb-ui.mjs +5 -0
  4. package/esm2022/lib/accordion/mb-accordion.component.mjs +37 -0
  5. package/esm2022/lib/alert/mb-alert.component.mjs +28 -0
  6. package/esm2022/lib/avatar/mb-avatar.component.mjs +32 -0
  7. package/esm2022/lib/badge/mb-badge.component.mjs +28 -0
  8. package/esm2022/lib/breadcrumb/mb-breadcrumb.component.mjs +23 -0
  9. package/esm2022/lib/button/mb-button.component.mjs +48 -0
  10. package/esm2022/lib/card/mb-card.component.mjs +28 -0
  11. package/esm2022/lib/checkbox/mb-checkbox.component.mjs +75 -0
  12. package/esm2022/lib/chip/mb-chip.component.mjs +33 -0
  13. package/esm2022/lib/combobox/mb-combobox.component.mjs +235 -0
  14. package/esm2022/lib/confirm/mb-confirm-dialog.component.mjs +44 -0
  15. package/esm2022/lib/confirm/mb-confirm.service.mjs +39 -0
  16. package/esm2022/lib/confirm/mb-confirm.types.mjs +2 -0
  17. package/esm2022/lib/datepicker/mb-datepicker.component.mjs +382 -0
  18. package/esm2022/lib/dialog/mb-dialog-container.component.mjs +37 -0
  19. package/esm2022/lib/dialog/mb-dialog-ref.mjs +17 -0
  20. package/esm2022/lib/dialog/mb-dialog.component.mjs +87 -0
  21. package/esm2022/lib/dialog/mb-dialog.service.mjs +61 -0
  22. package/esm2022/lib/dialog/mb-dialog.tokens.mjs +3 -0
  23. package/esm2022/lib/divider/mb-divider.component.mjs +18 -0
  24. package/esm2022/lib/drawer/mb-drawer.component.mjs +34 -0
  25. package/esm2022/lib/dropdown/mb-dropdown.component.mjs +24 -0
  26. package/esm2022/lib/empty/mb-empty.component.mjs +27 -0
  27. package/esm2022/lib/form-field/mb-form-field.component.mjs +24 -0
  28. package/esm2022/lib/grid/mb-grid-data.mjs +266 -0
  29. package/esm2022/lib/grid/mb-grid-export.mjs +36 -0
  30. package/esm2022/lib/grid/mb-grid-messages.mjs +10 -0
  31. package/esm2022/lib/grid/mb-grid-state-adapter.mjs +97 -0
  32. package/esm2022/lib/grid/mb-grid-state.service.mjs +47 -0
  33. package/esm2022/lib/grid/mb-grid-template.directive.mjs +109 -0
  34. package/esm2022/lib/grid/mb-grid.component.mjs +998 -0
  35. package/esm2022/lib/grid/mb-grid.types.mjs +2 -0
  36. package/esm2022/lib/i18n/mb-ui-locale.mjs +18 -0
  37. package/esm2022/lib/i18n/mb-ui-messages-en.mjs +103 -0
  38. package/esm2022/lib/i18n/mb-ui-messages-fa.mjs +103 -0
  39. package/esm2022/lib/i18n/mb-ui-messages.mjs +34 -0
  40. package/esm2022/lib/i18n/mb-ui-messages.types.mjs +2 -0
  41. package/esm2022/lib/i18n/provide-mb-ui.mjs +20 -0
  42. package/esm2022/lib/input/mb-input.component.mjs +86 -0
  43. package/esm2022/lib/pagination/mb-pagination.component.mjs +47 -0
  44. package/esm2022/lib/progress/mb-progress.component.mjs +29 -0
  45. package/esm2022/lib/radio/mb-radio-group.component.mjs +63 -0
  46. package/esm2022/lib/select/mb-select.component.mjs +73 -0
  47. package/esm2022/lib/skeleton/mb-skeleton.component.mjs +24 -0
  48. package/esm2022/lib/spinner/mb-spinner.component.mjs +21 -0
  49. package/esm2022/lib/switch/mb-switch.component.mjs +59 -0
  50. package/esm2022/lib/tabs/mb-tabs.component.mjs +31 -0
  51. package/esm2022/lib/textarea/mb-textarea.component.mjs +83 -0
  52. package/esm2022/lib/toast/mb-toast-container.component.mjs +21 -0
  53. package/esm2022/lib/toast/mb-toast.service.mjs +47 -0
  54. package/esm2022/lib/toast/mb-toast.types.mjs +2 -0
  55. package/esm2022/lib/tokens/mb-ui-config.token.mjs +11 -0
  56. package/esm2022/lib/tooltip/mb-tooltip.directive.mjs +48 -0
  57. package/esm2022/lib/utils/coerce.mjs +10 -0
  58. package/esm2022/lib/utils/mb-jalali-date.mjs +120 -0
  59. package/esm2022/public-api.mjs +56 -0
  60. package/fesm2022/beshkari-mb-ui.mjs +3828 -0
  61. package/fesm2022/beshkari-mb-ui.mjs.map +1 -0
  62. package/index.d.ts +5 -0
  63. package/lib/accordion/mb-accordion.component.d.ts +19 -0
  64. package/lib/alert/mb-alert.component.d.ts +12 -0
  65. package/lib/avatar/mb-avatar.component.d.ts +12 -0
  66. package/lib/badge/mb-badge.component.d.ts +12 -0
  67. package/lib/breadcrumb/mb-breadcrumb.component.d.ts +15 -0
  68. package/lib/button/mb-button.component.d.ts +19 -0
  69. package/lib/card/mb-card.component.d.ts +10 -0
  70. package/lib/checkbox/mb-checkbox.component.d.ts +25 -0
  71. package/lib/chip/mb-chip.component.d.ts +12 -0
  72. package/lib/combobox/mb-combobox.component.d.ts +65 -0
  73. package/lib/confirm/mb-confirm-dialog.component.d.ts +17 -0
  74. package/lib/confirm/mb-confirm.service.d.ts +12 -0
  75. package/lib/confirm/mb-confirm.types.d.ts +10 -0
  76. package/lib/datepicker/mb-datepicker.component.d.ts +87 -0
  77. package/lib/dialog/mb-dialog-container.component.d.ts +14 -0
  78. package/lib/dialog/mb-dialog-ref.d.ts +9 -0
  79. package/lib/dialog/mb-dialog.component.d.ts +27 -0
  80. package/lib/dialog/mb-dialog.service.d.ts +14 -0
  81. package/lib/dialog/mb-dialog.tokens.d.ts +13 -0
  82. package/lib/divider/mb-divider.component.d.ts +7 -0
  83. package/lib/drawer/mb-drawer.component.d.ts +14 -0
  84. package/lib/dropdown/mb-dropdown.component.d.ts +10 -0
  85. package/lib/empty/mb-empty.component.d.ts +10 -0
  86. package/lib/form-field/mb-form-field.component.d.ts +9 -0
  87. package/lib/grid/mb-grid-data.d.ts +20 -0
  88. package/lib/grid/mb-grid-export.d.ts +9 -0
  89. package/lib/grid/mb-grid-messages.d.ts +6 -0
  90. package/lib/grid/mb-grid-state-adapter.d.ts +24 -0
  91. package/lib/grid/mb-grid-state.service.d.ts +10 -0
  92. package/lib/grid/mb-grid-template.directive.d.ts +43 -0
  93. package/lib/grid/mb-grid.component.d.ts +233 -0
  94. package/lib/grid/mb-grid.types.d.ts +255 -0
  95. package/lib/i18n/mb-ui-locale.d.ts +2 -0
  96. package/lib/i18n/mb-ui-messages-en.d.ts +3 -0
  97. package/lib/i18n/mb-ui-messages-fa.d.ts +3 -0
  98. package/lib/i18n/mb-ui-messages.d.ts +5 -0
  99. package/lib/i18n/mb-ui-messages.types.d.ts +90 -0
  100. package/lib/i18n/provide-mb-ui.d.ts +7 -0
  101. package/lib/input/mb-input.component.d.ts +30 -0
  102. package/lib/pagination/mb-pagination.component.d.ts +16 -0
  103. package/lib/progress/mb-progress.component.d.ts +11 -0
  104. package/lib/radio/mb-radio-group.component.d.ts +30 -0
  105. package/lib/select/mb-select.component.d.ts +31 -0
  106. package/lib/skeleton/mb-skeleton.component.d.ts +9 -0
  107. package/lib/spinner/mb-spinner.component.d.ts +9 -0
  108. package/lib/switch/mb-switch.component.d.ts +22 -0
  109. package/lib/tabs/mb-tabs.component.d.ts +19 -0
  110. package/lib/textarea/mb-textarea.component.d.ts +29 -0
  111. package/lib/toast/mb-toast-container.component.d.ts +10 -0
  112. package/lib/toast/mb-toast.service.d.ts +15 -0
  113. package/lib/toast/mb-toast.types.d.ts +8 -0
  114. package/lib/tokens/mb-ui-config.token.d.ts +12 -0
  115. package/lib/tooltip/mb-tooltip.directive.d.ts +13 -0
  116. package/lib/utils/coerce.d.ts +3 -0
  117. package/lib/utils/mb-jalali-date.d.ts +18 -0
  118. package/package.json +50 -0
  119. package/public-api.d.ts +55 -0
  120. package/theme/_components.scss +19 -0
  121. package/theme/_dark.scss +1 -0
  122. package/theme/_density.scss +1 -0
  123. package/theme/_tokens.scss +57 -0
  124. package/theme/mb-ui.scss +28 -0
@@ -0,0 +1,382 @@
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, HostListener, Input, Output, forwardRef, inject, } from '@angular/core';
2
+ import { NgClass, NgFor, NgIf } from '@angular/common';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { MB_UI_MESSAGES } from '../i18n/mb-ui-messages';
5
+ import { MB_UI_CONFIG } from '../tokens/mb-ui-config.token';
6
+ import { MB_JALALI_MONTH_NAMES, mbFormatJalali, mbGregorianToJalali, mbJalaliMonthLength, mbJalaliToGregorian, mbParseIsoDate, mbToIsoDate, } from '../utils/mb-jalali-date';
7
+ import * as i0 from "@angular/core";
8
+ export class MbDatepickerComponent {
9
+ cdr;
10
+ host;
11
+ messages = inject(MB_UI_MESSAGES);
12
+ uiConfig = inject(MB_UI_CONFIG);
13
+ mode = 'date';
14
+ calendar = 'gregorian';
15
+ placeholder;
16
+ min;
17
+ max;
18
+ size = 'md';
19
+ disabled = false;
20
+ invalid = false;
21
+ clearable = true;
22
+ firstDayOfWeek = 0;
23
+ locale;
24
+ monthNames;
25
+ weekdayNames;
26
+ disabledDates = () => false;
27
+ valueChange = new EventEmitter();
28
+ openedChange = new EventEmitter();
29
+ hostClass = 'mb-datepicker-host';
30
+ value = '';
31
+ opened = false;
32
+ viewDate = this.startOfMonth(new Date());
33
+ viewJalali = mbGregorianToJalali(this.toGregorian(new Date()));
34
+ days = [];
35
+ years = Array.from({ length: 21 }, (_, index) => new Date().getFullYear() - 10 + index);
36
+ jalaliYears = Array.from({ length: 21 }, (_, index) => this.viewJalali.year - 10 + index);
37
+ onChange = () => undefined;
38
+ onTouched = () => undefined;
39
+ constructor(cdr, host) {
40
+ this.cdr = cdr;
41
+ this.host = host;
42
+ this.rebuildCalendar();
43
+ }
44
+ get effectivePlaceholder() {
45
+ return this.placeholder ?? this.messages.datepicker.placeholder;
46
+ }
47
+ get effectiveLocale() {
48
+ return this.locale ?? this.uiConfig.locale;
49
+ }
50
+ get effectiveWeekdayNames() {
51
+ return this.weekdayNames ?? this.messages.datepicker.weekdayNames;
52
+ }
53
+ get effectiveGregorianMonthNames() {
54
+ return this.monthNames ?? this.messages.datepicker.monthNamesGregorian;
55
+ }
56
+ get activeMonthNames() {
57
+ return this.calendar === 'jalali' ? MB_JALALI_MONTH_NAMES : this.effectiveGregorianMonthNames;
58
+ }
59
+ get activeYears() {
60
+ if (this.calendar === 'jalali') {
61
+ const center = this.viewJalali.year;
62
+ return Array.from({ length: 21 }, (_, index) => center - 10 + index);
63
+ }
64
+ return this.years;
65
+ }
66
+ onDocumentClick(event) {
67
+ if (this.opened && !this.host.nativeElement.contains(event.target)) {
68
+ this.close();
69
+ }
70
+ }
71
+ writeValue(value) {
72
+ if (value instanceof Date) {
73
+ this.value = this.toIso(value);
74
+ this.viewDate = this.startOfMonth(value);
75
+ this.viewJalali = mbGregorianToJalali(this.toGregorian(value));
76
+ }
77
+ else {
78
+ this.value = value ?? '';
79
+ const parsed = this.parseIso(this.value);
80
+ if (parsed) {
81
+ this.viewDate = this.startOfMonth(parsed);
82
+ this.viewJalali = mbGregorianToJalali(this.toGregorian(parsed));
83
+ }
84
+ }
85
+ this.rebuildCalendar();
86
+ this.cdr.markForCheck();
87
+ }
88
+ registerOnChange(fn) {
89
+ this.onChange = fn;
90
+ }
91
+ registerOnTouched(fn) {
92
+ this.onTouched = fn;
93
+ }
94
+ setDisabledState(isDisabled) {
95
+ this.disabled = isDisabled;
96
+ this.cdr.markForCheck();
97
+ }
98
+ toggle() {
99
+ if (!this.disabled) {
100
+ this.opened ? this.close() : this.open();
101
+ }
102
+ }
103
+ open() {
104
+ if (this.disabled)
105
+ return;
106
+ this.opened = true;
107
+ this.openedChange.emit(true);
108
+ this.rebuildCalendar();
109
+ this.cdr.markForCheck();
110
+ }
111
+ close() {
112
+ this.opened = false;
113
+ this.onTouched();
114
+ this.openedChange.emit(false);
115
+ this.cdr.markForCheck();
116
+ }
117
+ clear(event) {
118
+ event?.stopPropagation();
119
+ if (this.disabled)
120
+ return;
121
+ this.commit('');
122
+ this.close();
123
+ }
124
+ select(day) {
125
+ if (day.disabled)
126
+ return;
127
+ this.commit(day.iso);
128
+ this.close();
129
+ }
130
+ selectToday() {
131
+ const today = new Date();
132
+ if (!this.isDisabled(today)) {
133
+ this.viewDate = this.startOfMonth(today);
134
+ this.viewJalali = mbGregorianToJalali(this.toGregorian(today));
135
+ this.commit(this.toIso(today));
136
+ this.close();
137
+ }
138
+ }
139
+ prevMonth() {
140
+ if (this.calendar === 'jalali') {
141
+ const month = this.viewJalali.month === 1 ? 12 : this.viewJalali.month - 1;
142
+ const year = this.viewJalali.month === 1 ? this.viewJalali.year - 1 : this.viewJalali.year;
143
+ this.viewJalali = { year, month, day: 1 };
144
+ this.viewDate = this.startOfMonth(this.jalaliToDate(this.viewJalali));
145
+ }
146
+ else {
147
+ this.viewDate = new Date(this.viewDate.getFullYear(), this.viewDate.getMonth() - 1, 1);
148
+ }
149
+ this.rebuildCalendar();
150
+ }
151
+ nextMonth() {
152
+ if (this.calendar === 'jalali') {
153
+ const month = this.viewJalali.month === 12 ? 1 : this.viewJalali.month + 1;
154
+ const year = this.viewJalali.month === 12 ? this.viewJalali.year + 1 : this.viewJalali.year;
155
+ this.viewJalali = { year, month, day: 1 };
156
+ this.viewDate = this.startOfMonth(this.jalaliToDate(this.viewJalali));
157
+ }
158
+ else {
159
+ this.viewDate = new Date(this.viewDate.getFullYear(), this.viewDate.getMonth() + 1, 1);
160
+ }
161
+ this.rebuildCalendar();
162
+ }
163
+ setMonth(value) {
164
+ const month = Number(value);
165
+ if (this.calendar === 'jalali') {
166
+ this.viewJalali = { ...this.viewJalali, month: month + 1 };
167
+ this.viewDate = this.startOfMonth(this.jalaliToDate(this.viewJalali));
168
+ if (this.mode === 'month') {
169
+ const gregorian = mbJalaliToGregorian({ year: this.viewJalali.year, month: this.viewJalali.month, day: 1 });
170
+ this.commit(`${gregorian.year}-${String(gregorian.month).padStart(2, '0')}`);
171
+ this.close();
172
+ return;
173
+ }
174
+ }
175
+ else {
176
+ this.viewDate = new Date(this.viewDate.getFullYear(), month, 1);
177
+ if (this.mode === 'month') {
178
+ this.commit(`${this.viewDate.getFullYear()}-${String(month + 1).padStart(2, '0')}`);
179
+ this.close();
180
+ return;
181
+ }
182
+ }
183
+ this.rebuildCalendar();
184
+ }
185
+ setYear(value) {
186
+ const year = Number(value);
187
+ if (this.calendar === 'jalali') {
188
+ this.viewJalali = { ...this.viewJalali, year };
189
+ this.viewDate = this.startOfMonth(this.jalaliToDate(this.viewJalali));
190
+ }
191
+ else {
192
+ this.viewDate = new Date(year, this.viewDate.getMonth(), 1);
193
+ }
194
+ this.rebuildCalendar();
195
+ }
196
+ displayValue() {
197
+ if (!this.value)
198
+ return '';
199
+ if (this.mode === 'month') {
200
+ if (this.calendar === 'jalali') {
201
+ const parsed = mbParseIsoDate(this.value.length === 7 ? `${this.value}-01` : this.value);
202
+ if (!parsed)
203
+ return this.value;
204
+ const jalali = mbGregorianToJalali(parsed);
205
+ return `${MB_JALALI_MONTH_NAMES[jalali.month - 1]} ${jalali.year}`;
206
+ }
207
+ const [year, month] = this.value.split('-');
208
+ return `${this.monthNames[Number(month) - 1] ?? month} ${year}`;
209
+ }
210
+ const parsed = this.parseIso(this.value);
211
+ if (!parsed)
212
+ return this.value;
213
+ if (this.calendar === 'jalali') {
214
+ return mbFormatJalali(mbGregorianToJalali(this.toGregorian(parsed)));
215
+ }
216
+ try {
217
+ return new Intl.DateTimeFormat(this.effectiveLocale, { dateStyle: 'medium' }).format(parsed);
218
+ }
219
+ catch {
220
+ return this.value;
221
+ }
222
+ }
223
+ currentMonthIndex() {
224
+ return this.calendar === 'jalali' ? this.viewJalali.month - 1 : this.viewDate.getMonth();
225
+ }
226
+ currentYear() {
227
+ return this.calendar === 'jalali' ? this.viewJalali.year : this.viewDate.getFullYear();
228
+ }
229
+ commit(value, emit = true) {
230
+ this.value = value;
231
+ this.onChange(value);
232
+ if (emit)
233
+ this.valueChange.emit(value);
234
+ this.rebuildCalendar();
235
+ this.cdr.markForCheck();
236
+ }
237
+ rebuildCalendar() {
238
+ this.days = this.calendar === 'jalali' ? this.buildJalaliCalendar() : this.buildGregorianCalendar();
239
+ this.cdr.markForCheck();
240
+ }
241
+ buildGregorianCalendar() {
242
+ const first = this.startOfMonth(this.viewDate);
243
+ const start = new Date(first);
244
+ const offset = (start.getDay() - this.firstDayOfWeek + 7) % 7;
245
+ start.setDate(start.getDate() - offset);
246
+ const selected = this.parseIso(this.value);
247
+ const todayIso = this.toIso(new Date());
248
+ return Array.from({ length: 42 }, (_, index) => {
249
+ const date = new Date(start);
250
+ date.setDate(start.getDate() + index);
251
+ const iso = this.toIso(date);
252
+ return {
253
+ date,
254
+ iso,
255
+ label: date.getDate(),
256
+ currentMonth: date.getMonth() === first.getMonth(),
257
+ today: iso === todayIso,
258
+ selected: !!selected && iso === this.toIso(selected),
259
+ disabled: this.isDisabled(date),
260
+ };
261
+ });
262
+ }
263
+ buildJalaliCalendar() {
264
+ const month = this.viewJalali.month;
265
+ const year = this.viewJalali.year;
266
+ const firstGregorian = this.jalaliToDate({ year, month, day: 1 });
267
+ const start = new Date(firstGregorian);
268
+ const offset = (start.getDay() - this.firstDayOfWeek + 7) % 7;
269
+ start.setDate(start.getDate() - offset);
270
+ const selected = this.parseIso(this.value);
271
+ const todayIso = this.toIso(new Date());
272
+ return Array.from({ length: 42 }, (_, index) => {
273
+ const date = new Date(start);
274
+ date.setDate(start.getDate() + index);
275
+ const jalali = mbGregorianToJalali(this.toGregorian(date));
276
+ const iso = this.toIso(date);
277
+ return {
278
+ date,
279
+ iso,
280
+ label: jalali.day,
281
+ jalali,
282
+ currentMonth: jalali.month === month && jalali.year === year,
283
+ today: iso === todayIso,
284
+ selected: !!selected && iso === this.toIso(selected),
285
+ disabled: this.isDisabled(date),
286
+ };
287
+ });
288
+ }
289
+ jalaliToDate(date) {
290
+ const gregorian = mbJalaliToGregorian(date);
291
+ return new Date(gregorian.year, gregorian.month - 1, gregorian.day);
292
+ }
293
+ toGregorian(date) {
294
+ return { year: date.getFullYear(), month: date.getMonth() + 1, day: date.getDate() };
295
+ }
296
+ isDisabled(date) {
297
+ const iso = this.toIso(date);
298
+ if (this.min && iso < this.min)
299
+ return true;
300
+ if (this.max && iso > this.max)
301
+ return true;
302
+ if (this.calendar === 'jalali') {
303
+ const jalali = mbGregorianToJalali(this.toGregorian(date));
304
+ const monthLength = mbJalaliMonthLength(jalali.year, jalali.month);
305
+ if (jalali.day > monthLength)
306
+ return true;
307
+ }
308
+ return this.disabledDates(date);
309
+ }
310
+ parseIso(value) {
311
+ if (!value)
312
+ return null;
313
+ const parts = value.split('-').map(Number);
314
+ if (parts.length < 2 || parts.some(Number.isNaN))
315
+ return null;
316
+ const [year, month, day = 1] = parts;
317
+ return new Date(year, month - 1, day);
318
+ }
319
+ toIso(date) {
320
+ return mbToIsoDate(this.toGregorian(date));
321
+ }
322
+ startOfMonth(date) {
323
+ return new Date(date.getFullYear(), date.getMonth(), 1);
324
+ }
325
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MbDatepickerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
326
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: MbDatepickerComponent, isStandalone: true, selector: "mb-datepicker", inputs: { mode: "mode", calendar: "calendar", placeholder: "placeholder", min: "min", max: "max", size: "size", disabled: "disabled", invalid: "invalid", clearable: "clearable", firstDayOfWeek: "firstDayOfWeek", locale: "locale", monthNames: "monthNames", weekdayNames: "weekdayNames", disabledDates: "disabledDates" }, outputs: { valueChange: "valueChange", openedChange: "openedChange" }, host: { listeners: { "document:click": "onDocumentClick($event)" }, properties: { "class": "this.hostClass" } }, providers: [
327
+ {
328
+ provide: NG_VALUE_ACCESSOR,
329
+ useExisting: forwardRef(() => MbDatepickerComponent),
330
+ multi: true,
331
+ },
332
+ ], ngImport: i0, template: "<div class=\"mb-datepicker-shell\" [class.mb-datepicker-shell--open]=\"opened\">\n <button\n type=\"button\"\n class=\"mb-datepicker-trigger\"\n [class.mb-datepicker-trigger--invalid]=\"invalid\"\n [ngClass]=\"'mb-datepicker-trigger--' + size\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\">\n <span class=\"mb-datepicker-value\" [class.mb-datepicker-value--placeholder]=\"!value\">{{ value ? displayValue() : effectivePlaceholder }}</span>\n <span class=\"mb-datepicker-actions\">\n <button\n *ngIf=\"clearable && value && !disabled\"\n type=\"button\"\n class=\"mb-datepicker-clear\"\n [attr.aria-label]=\"messages.datepicker.clear\"\n (click)=\"clear($event)\">\u00D7</button>\n <span class=\"mb-datepicker-icon\" aria-hidden=\"true\">\uD83D\uDCC5</span>\n </span>\n </button>\n\n <div *ngIf=\"opened\" class=\"mb-datepicker-panel\" role=\"dialog\" [attr.aria-label]=\"messages.datepicker.pickDate\">\n <div class=\"mb-datepicker-header\">\n <button type=\"button\" class=\"mb-datepicker-nav\" (click)=\"prevMonth()\">\u2039</button>\n <div class=\"mb-datepicker-title\">\n <select [value]=\"currentMonthIndex()\" (change)=\"setMonth($any($event.target).value)\">\n <option *ngFor=\"let month of activeMonthNames; index as monthIndex\" [value]=\"monthIndex\">{{ month }}</option>\n </select>\n <select [value]=\"currentYear()\" (change)=\"setYear($any($event.target).value)\">\n <option *ngFor=\"let year of activeYears\" [value]=\"year\">{{ year }}</option>\n </select>\n </div>\n <button type=\"button\" class=\"mb-datepicker-nav\" (click)=\"nextMonth()\">\u203A</button>\n </div>\n\n <ng-container *ngIf=\"mode === 'date'; else monthPicker\">\n <div class=\"mb-datepicker-weekdays\">\n <span *ngFor=\"let weekday of effectiveWeekdayNames\">{{ weekday }}</span>\n </div>\n <div class=\"mb-datepicker-grid\">\n <button\n *ngFor=\"let day of days\"\n type=\"button\"\n class=\"mb-datepicker-day\"\n [class.mb-datepicker-day--muted]=\"!day.currentMonth\"\n [class.mb-datepicker-day--today]=\"day.today\"\n [class.mb-datepicker-day--selected]=\"day.selected\"\n [disabled]=\"day.disabled\"\n (click)=\"select(day)\">{{ day.label }}</button>\n </div>\n </ng-container>\n\n <ng-template #monthPicker>\n <div class=\"mb-datepicker-months\">\n <button *ngFor=\"let month of activeMonthNames; index as monthIndex\" type=\"button\" class=\"mb-datepicker-month\" (click)=\"setMonth(monthIndex)\">{{ month }}</button>\n </div>\n </ng-template>\n\n <div class=\"mb-datepicker-footer\">\n <button type=\"button\" (click)=\"selectToday()\">{{ messages.datepicker.today }}</button>\n <button type=\"button\" (click)=\"close()\">{{ messages.common.close }}</button>\n </div>\n </div>\n</div>\n", styles: [":host{display:inline-block;min-width:14rem;position:relative}.mb-datepicker-shell{position:relative;width:100%}.mb-datepicker-trigger{width:100%;min-height:var(--mb-control-height-md, 2.5rem);display:inline-flex;align-items:center;justify-content:space-between;gap:.5rem;border:1px solid var(--mb-color-border, #d0d5dd);border-radius:var(--mb-radius-md, .625rem);padding-inline:.75rem;background:var(--mb-color-surface, #fff);color:var(--mb-color-text, #101828);cursor:pointer}.mb-datepicker-trigger:hover{border-color:var(--mb-color-primary, #2563eb)}.mb-datepicker-trigger--invalid{border-color:var(--mb-color-danger, #dc2626)}.mb-datepicker-value--placeholder{color:var(--mb-color-muted, #667085)}.mb-datepicker-actions{display:inline-flex;align-items:center;gap:.25rem}.mb-datepicker-clear{border:0;background:transparent;color:var(--mb-color-muted, #667085);cursor:pointer;font-size:1.2rem}.mb-datepicker-panel{position:absolute;z-index:1000;inset-block-start:calc(100% + .4rem);inset-inline-start:0;inline-size:20rem;max-inline-size:min(20rem,100vw - 2rem);border:1px solid var(--mb-color-border, #e2e8f0);border-radius:var(--mb-radius-lg, .875rem);background:var(--mb-color-surface, #fff);color:var(--mb-color-text, #101828);box-shadow:var(--mb-shadow-lg, 0 18px 45px rgba(15, 23, 42, .16));padding:.75rem}.mb-datepicker-header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-block-end:.75rem}.mb-datepicker-nav,.mb-datepicker-footer button,.mb-datepicker-month,.mb-datepicker-day{border:1px solid transparent;border-radius:var(--mb-radius-md, .625rem);background:transparent;color:inherit;cursor:pointer}.mb-datepicker-nav{inline-size:2rem;block-size:2rem;font-size:1.4rem}.mb-datepicker-nav:hover,.mb-datepicker-footer button:hover,.mb-datepicker-month:hover,.mb-datepicker-day:hover:not(:disabled){background:var(--mb-color-surface-muted, #f1f5f9)}.mb-datepicker-title{display:flex;gap:.4rem}.mb-datepicker-title select{border:1px solid var(--mb-color-border, #e2e8f0);border-radius:var(--mb-radius-sm, .5rem);background:var(--mb-color-surface, #fff);color:inherit;padding:.25rem .45rem}.mb-datepicker-weekdays,.mb-datepicker-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.25rem}.mb-datepicker-weekdays{color:var(--mb-color-muted, #64748b);font-size:.75rem;text-align:center;margin-block-end:.25rem}.mb-datepicker-day{aspect-ratio:1;font-variant-numeric:tabular-nums}.mb-datepicker-day--muted{color:var(--mb-color-muted, #64748b);opacity:.65}.mb-datepicker-day--today{border-color:var(--mb-color-primary, #2563eb)}.mb-datepicker-day--selected{background:var(--mb-color-primary, #2563eb);color:var(--mb-color-primary-contrast, #fff)}.mb-datepicker-day:disabled{opacity:.35;cursor:not-allowed}.mb-datepicker-months{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.35rem}.mb-datepicker-month{padding:.6rem .35rem}.mb-datepicker-footer{display:flex;justify-content:space-between;gap:.5rem;margin-block-start:.75rem;border-block-start:1px solid var(--mb-color-border, #e2e8f0);padding-block-start:.75rem}.mb-datepicker-footer button{padding:.45rem .75rem}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
333
+ }
334
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MbDatepickerComponent, decorators: [{
335
+ type: Component,
336
+ args: [{ selector: 'mb-datepicker', standalone: true, imports: [NgClass, NgFor, NgIf], providers: [
337
+ {
338
+ provide: NG_VALUE_ACCESSOR,
339
+ useExisting: forwardRef(() => MbDatepickerComponent),
340
+ multi: true,
341
+ },
342
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-datepicker-shell\" [class.mb-datepicker-shell--open]=\"opened\">\n <button\n type=\"button\"\n class=\"mb-datepicker-trigger\"\n [class.mb-datepicker-trigger--invalid]=\"invalid\"\n [ngClass]=\"'mb-datepicker-trigger--' + size\"\n [disabled]=\"disabled\"\n (click)=\"toggle()\">\n <span class=\"mb-datepicker-value\" [class.mb-datepicker-value--placeholder]=\"!value\">{{ value ? displayValue() : effectivePlaceholder }}</span>\n <span class=\"mb-datepicker-actions\">\n <button\n *ngIf=\"clearable && value && !disabled\"\n type=\"button\"\n class=\"mb-datepicker-clear\"\n [attr.aria-label]=\"messages.datepicker.clear\"\n (click)=\"clear($event)\">\u00D7</button>\n <span class=\"mb-datepicker-icon\" aria-hidden=\"true\">\uD83D\uDCC5</span>\n </span>\n </button>\n\n <div *ngIf=\"opened\" class=\"mb-datepicker-panel\" role=\"dialog\" [attr.aria-label]=\"messages.datepicker.pickDate\">\n <div class=\"mb-datepicker-header\">\n <button type=\"button\" class=\"mb-datepicker-nav\" (click)=\"prevMonth()\">\u2039</button>\n <div class=\"mb-datepicker-title\">\n <select [value]=\"currentMonthIndex()\" (change)=\"setMonth($any($event.target).value)\">\n <option *ngFor=\"let month of activeMonthNames; index as monthIndex\" [value]=\"monthIndex\">{{ month }}</option>\n </select>\n <select [value]=\"currentYear()\" (change)=\"setYear($any($event.target).value)\">\n <option *ngFor=\"let year of activeYears\" [value]=\"year\">{{ year }}</option>\n </select>\n </div>\n <button type=\"button\" class=\"mb-datepicker-nav\" (click)=\"nextMonth()\">\u203A</button>\n </div>\n\n <ng-container *ngIf=\"mode === 'date'; else monthPicker\">\n <div class=\"mb-datepicker-weekdays\">\n <span *ngFor=\"let weekday of effectiveWeekdayNames\">{{ weekday }}</span>\n </div>\n <div class=\"mb-datepicker-grid\">\n <button\n *ngFor=\"let day of days\"\n type=\"button\"\n class=\"mb-datepicker-day\"\n [class.mb-datepicker-day--muted]=\"!day.currentMonth\"\n [class.mb-datepicker-day--today]=\"day.today\"\n [class.mb-datepicker-day--selected]=\"day.selected\"\n [disabled]=\"day.disabled\"\n (click)=\"select(day)\">{{ day.label }}</button>\n </div>\n </ng-container>\n\n <ng-template #monthPicker>\n <div class=\"mb-datepicker-months\">\n <button *ngFor=\"let month of activeMonthNames; index as monthIndex\" type=\"button\" class=\"mb-datepicker-month\" (click)=\"setMonth(monthIndex)\">{{ month }}</button>\n </div>\n </ng-template>\n\n <div class=\"mb-datepicker-footer\">\n <button type=\"button\" (click)=\"selectToday()\">{{ messages.datepicker.today }}</button>\n <button type=\"button\" (click)=\"close()\">{{ messages.common.close }}</button>\n </div>\n </div>\n</div>\n", styles: [":host{display:inline-block;min-width:14rem;position:relative}.mb-datepicker-shell{position:relative;width:100%}.mb-datepicker-trigger{width:100%;min-height:var(--mb-control-height-md, 2.5rem);display:inline-flex;align-items:center;justify-content:space-between;gap:.5rem;border:1px solid var(--mb-color-border, #d0d5dd);border-radius:var(--mb-radius-md, .625rem);padding-inline:.75rem;background:var(--mb-color-surface, #fff);color:var(--mb-color-text, #101828);cursor:pointer}.mb-datepicker-trigger:hover{border-color:var(--mb-color-primary, #2563eb)}.mb-datepicker-trigger--invalid{border-color:var(--mb-color-danger, #dc2626)}.mb-datepicker-value--placeholder{color:var(--mb-color-muted, #667085)}.mb-datepicker-actions{display:inline-flex;align-items:center;gap:.25rem}.mb-datepicker-clear{border:0;background:transparent;color:var(--mb-color-muted, #667085);cursor:pointer;font-size:1.2rem}.mb-datepicker-panel{position:absolute;z-index:1000;inset-block-start:calc(100% + .4rem);inset-inline-start:0;inline-size:20rem;max-inline-size:min(20rem,100vw - 2rem);border:1px solid var(--mb-color-border, #e2e8f0);border-radius:var(--mb-radius-lg, .875rem);background:var(--mb-color-surface, #fff);color:var(--mb-color-text, #101828);box-shadow:var(--mb-shadow-lg, 0 18px 45px rgba(15, 23, 42, .16));padding:.75rem}.mb-datepicker-header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-block-end:.75rem}.mb-datepicker-nav,.mb-datepicker-footer button,.mb-datepicker-month,.mb-datepicker-day{border:1px solid transparent;border-radius:var(--mb-radius-md, .625rem);background:transparent;color:inherit;cursor:pointer}.mb-datepicker-nav{inline-size:2rem;block-size:2rem;font-size:1.4rem}.mb-datepicker-nav:hover,.mb-datepicker-footer button:hover,.mb-datepicker-month:hover,.mb-datepicker-day:hover:not(:disabled){background:var(--mb-color-surface-muted, #f1f5f9)}.mb-datepicker-title{display:flex;gap:.4rem}.mb-datepicker-title select{border:1px solid var(--mb-color-border, #e2e8f0);border-radius:var(--mb-radius-sm, .5rem);background:var(--mb-color-surface, #fff);color:inherit;padding:.25rem .45rem}.mb-datepicker-weekdays,.mb-datepicker-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.25rem}.mb-datepicker-weekdays{color:var(--mb-color-muted, #64748b);font-size:.75rem;text-align:center;margin-block-end:.25rem}.mb-datepicker-day{aspect-ratio:1;font-variant-numeric:tabular-nums}.mb-datepicker-day--muted{color:var(--mb-color-muted, #64748b);opacity:.65}.mb-datepicker-day--today{border-color:var(--mb-color-primary, #2563eb)}.mb-datepicker-day--selected{background:var(--mb-color-primary, #2563eb);color:var(--mb-color-primary-contrast, #fff)}.mb-datepicker-day:disabled{opacity:.35;cursor:not-allowed}.mb-datepicker-months{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.35rem}.mb-datepicker-month{padding:.6rem .35rem}.mb-datepicker-footer{display:flex;justify-content:space-between;gap:.5rem;margin-block-start:.75rem;border-block-start:1px solid var(--mb-color-border, #e2e8f0);padding-block-start:.75rem}.mb-datepicker-footer button{padding:.45rem .75rem}\n"] }]
343
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { mode: [{
344
+ type: Input
345
+ }], calendar: [{
346
+ type: Input
347
+ }], placeholder: [{
348
+ type: Input
349
+ }], min: [{
350
+ type: Input
351
+ }], max: [{
352
+ type: Input
353
+ }], size: [{
354
+ type: Input
355
+ }], disabled: [{
356
+ type: Input
357
+ }], invalid: [{
358
+ type: Input
359
+ }], clearable: [{
360
+ type: Input
361
+ }], firstDayOfWeek: [{
362
+ type: Input
363
+ }], locale: [{
364
+ type: Input
365
+ }], monthNames: [{
366
+ type: Input
367
+ }], weekdayNames: [{
368
+ type: Input
369
+ }], disabledDates: [{
370
+ type: Input
371
+ }], valueChange: [{
372
+ type: Output
373
+ }], openedChange: [{
374
+ type: Output
375
+ }], hostClass: [{
376
+ type: HostBinding,
377
+ args: ['class']
378
+ }], onDocumentClick: [{
379
+ type: HostListener,
380
+ args: ['document:click', ['$event']]
381
+ }] } });
382
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWItZGF0ZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2RhdGVwaWNrZXIvbWItZGF0ZXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2RhdGVwaWNrZXIvbWItZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFVLE1BQU0sOEJBQThCLENBQUM7QUFDcEUsT0FBTyxFQUNMLHFCQUFxQixFQUdyQixjQUFjLEVBQ2QsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLFdBQVcsR0FDWixNQUFNLHlCQUF5QixDQUFDOztBQWdDakMsTUFBTSxPQUFPLHFCQUFxQjtJQW9DYjtJQUNBO0lBcENWLFFBQVEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDMUIsUUFBUSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUV4QyxJQUFJLEdBQXFCLE1BQU0sQ0FBQztJQUNoQyxRQUFRLEdBQXFCLFdBQVcsQ0FBQztJQUN6QyxXQUFXLENBQVU7SUFDckIsR0FBRyxDQUFVO0lBQ2IsR0FBRyxDQUFVO0lBQ2IsSUFBSSxHQUFXLElBQUksQ0FBQztJQUNwQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsU0FBUyxHQUFHLElBQUksQ0FBQztJQUNqQixjQUFjLEdBQWMsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sQ0FBVTtJQUNoQixVQUFVLENBQVk7SUFDdEIsWUFBWSxDQUFZO0lBQ3hCLGFBQWEsR0FBNEIsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO0lBRXBELFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBQ3pDLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO0lBRS9CLFNBQVMsR0FBRyxvQkFBb0IsQ0FBQztJQUV2RCxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUNmLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN6QyxVQUFVLEdBQWlCLG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0UsSUFBSSxHQUFvQixFQUFFLENBQUM7SUFDbEIsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUN4RixXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztJQUUzRixRQUFRLEdBQTRCLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQztJQUNwRCxTQUFTLEdBQWUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO0lBRWhELFlBQ21CLEdBQXNCLEVBQ3RCLElBQTZCO1FBRDdCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFNBQUksR0FBSixJQUFJLENBQXlCO1FBRTlDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztJQUNsRSxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUM3QyxDQUFDO0lBRUQsSUFBSSxxQkFBcUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQztJQUNwRSxDQUFDO0lBRUQsSUFBSSw0QkFBNEI7UUFDOUIsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDO0lBQ3pFLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDO0lBQ2hHLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDcEMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFHRCxlQUFlLENBQUMsS0FBaUI7UUFDL0IsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFjLENBQUMsRUFBRSxDQUFDO1lBQzNFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWtCO1FBQzNCLElBQUksS0FBSyxZQUFZLElBQUksRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDakUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxVQUFVLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2xFLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQTJCO1FBQzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFjO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMzQyxDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBYTtRQUNqQixLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQWtCO1FBQ3ZCLElBQUksR0FBRyxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQ3pCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxXQUFXO1FBQ1QsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsVUFBVSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUMzRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDM0YsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7UUFDRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUMzRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDNUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FB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QkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFFZSxTQUFTO3NCQUE5QixXQUFXO3VCQUFDLE9BQU87Z0JBaURwQixlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBmb3J3YXJkUmVmLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDbGFzcywgTmdGb3IsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTUJfVUlfTUVTU0FHRVMgfSBmcm9tICcuLi9pMThuL21iLXVpLW1lc3NhZ2VzJztcbmltcG9ydCB7IE1CX1VJX0NPTkZJRywgTWJTaXplIH0gZnJvbSAnLi4vdG9rZW5zL21iLXVpLWNvbmZpZy50b2tlbic7XG5pbXBvcnQge1xuICBNQl9KQUxBTElfTU9OVEhfTkFNRVMsXG4gIE1iR3JlZ29yaWFuRGF0ZSxcbiAgTWJKYWxhbGlEYXRlLFxuICBtYkZvcm1hdEphbGFsaSxcbiAgbWJHcmVnb3JpYW5Ub0phbGFsaSxcbiAgbWJKYWxhbGlNb250aExlbmd0aCxcbiAgbWJKYWxhbGlUb0dyZWdvcmlhbixcbiAgbWJQYXJzZUlzb0RhdGUsXG4gIG1iVG9Jc29EYXRlLFxufSBmcm9tICcuLi91dGlscy9tYi1qYWxhbGktZGF0ZSc7XG5cbmV4cG9ydCB0eXBlIE1iRGF0ZXBpY2tlck1vZGUgPSAnZGF0ZScgfCAnbW9udGgnO1xuZXhwb3J0IHR5cGUgTWJDYWxlbmRhclN5c3RlbSA9ICdncmVnb3JpYW4nIHwgJ2phbGFsaSc7XG5leHBvcnQgdHlwZSBNYkRhdGVWYWx1ZSA9IHN0cmluZyB8IERhdGUgfCBudWxsO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1iQ2FsZW5kYXJEYXkge1xuICBkYXRlOiBEYXRlO1xuICBpc286IHN0cmluZztcbiAgbGFiZWw6IG51bWJlcjtcbiAgY3VycmVudE1vbnRoOiBib29sZWFuO1xuICB0b2RheTogYm9vbGVhbjtcbiAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBqYWxhbGk/OiBNYkphbGFsaURhdGU7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21iLWRhdGVwaWNrZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdDbGFzcywgTmdGb3IsIE5nSWZdLFxuICB0ZW1wbGF0ZVVybDogJy4vbWItZGF0ZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9tYi1kYXRlcGlja2VyLmNvbXBvbmVudC5zY3NzJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNYkRhdGVwaWNrZXJDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1iRGF0ZXBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgcmVhZG9ubHkgbWVzc2FnZXMgPSBpbmplY3QoTUJfVUlfTUVTU0FHRVMpO1xuICBwcml2YXRlIHJlYWRvbmx5IHVpQ29uZmlnID0gaW5qZWN0KE1CX1VJX0NPTkZJRyk7XG5cbiAgQElucHV0KCkgbW9kZTogTWJEYXRlcGlja2VyTW9kZSA9ICdkYXRlJztcbiAgQElucHV0KCkgY2FsZW5kYXI6IE1iQ2FsZW5kYXJTeXN0ZW0gPSAnZ3JlZ29yaWFuJztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1pbj86IHN0cmluZztcbiAgQElucHV0KCkgbWF4Pzogc3RyaW5nO1xuICBASW5wdXQoKSBzaXplOiBNYlNpemUgPSAnbWQnO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBpbnZhbGlkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsZWFyYWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIGZpcnN0RGF5T2ZXZWVrOiAwIHwgMSB8IDYgPSAwO1xuICBASW5wdXQoKSBsb2NhbGU/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1vbnRoTmFtZXM/OiBzdHJpbmdbXTtcbiAgQElucHV0KCkgd2Vla2RheU5hbWVzPzogc3RyaW5nW107XG4gIEBJbnB1dCgpIGRpc2FibGVkRGF0ZXM6IChkYXRlOiBEYXRlKSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBvcGVuZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGhvc3RDbGFzcyA9ICdtYi1kYXRlcGlja2VyLWhvc3QnO1xuXG4gIHZhbHVlID0gJyc7XG4gIG9wZW5lZCA9IGZhbHNlO1xuICB2aWV3RGF0ZSA9IHRoaXMuc3RhcnRPZk1vbnRoKG5ldyBEYXRlKCkpO1xuICB2aWV3SmFsYWxpOiBNYkphbGFsaURhdGUgPSBtYkdyZWdvcmlhblRvSmFsYWxpKHRoaXMudG9HcmVnb3JpYW4obmV3IERhdGUoKSkpO1xuICBkYXlzOiBNYkNhbGVuZGFyRGF5W10gPSBbXTtcbiAgcmVhZG9ubHkgeWVhcnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyMSB9LCAoXywgaW5kZXgpID0+IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAtIDEwICsgaW5kZXgpO1xuICByZWFkb25seSBqYWxhbGlZZWFycyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IDIxIH0sIChfLCBpbmRleCkgPT4gdGhpcy52aWV3SmFsYWxpLnllYXIgLSAxMCArIGluZGV4KTtcblxuICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9ICgpID0+IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBvblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaG9zdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICkge1xuICAgIHRoaXMucmVidWlsZENhbGVuZGFyKCk7XG4gIH1cblxuICBnZXQgZWZmZWN0aXZlUGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlciA/PyB0aGlzLm1lc3NhZ2VzLmRhdGVwaWNrZXIucGxhY2Vob2xkZXI7XG4gIH1cblxuICBnZXQgZWZmZWN0aXZlTG9jYWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxlID8/IHRoaXMudWlDb25maWcubG9jYWxlO1xuICB9XG5cbiAgZ2V0IGVmZmVjdGl2ZVdlZWtkYXlOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMud2Vla2RheU5hbWVzID8/IHRoaXMubWVzc2FnZXMuZGF0ZXBpY2tlci53ZWVrZGF5TmFtZXM7XG4gIH1cblxuICBnZXQgZWZmZWN0aXZlR3JlZ29yaWFuTW9udGhOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMubW9udGhOYW1lcyA/PyB0aGlzLm1lc3NhZ2VzLmRhdGVwaWNrZXIubW9udGhOYW1lc0dyZWdvcmlhbjtcbiAgfVxuXG4gIGdldCBhY3RpdmVNb250aE5hbWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5jYWxlbmRhciA9PT0gJ2phbGFsaScgPyBNQl9KQUxBTElfTU9OVEhfTkFNRVMgOiB0aGlzLmVmZmVjdGl2ZUdyZWdvcmlhbk1vbnRoTmFtZXM7XG4gIH1cblxuICBnZXQgYWN0aXZlWWVhcnMoKTogbnVtYmVyW10ge1xuICAgIGlmICh0aGlzLmNhbGVuZGFyID09PSAnamFsYWxpJykge1xuICAgICAgY29uc3QgY2VudGVyID0gdGhpcy52aWV3SmFsYWxpLnllYXI7XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjEgfSwgKF8sIGluZGV4KSA9PiBjZW50ZXIgLSAxMCArIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMueWVhcnM7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm9wZW5lZCAmJiAhdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0IGFzIE5vZGUpKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogTWJEYXRlVmFsdWUpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy50b0lzbyh2YWx1ZSk7XG4gICAgICB0aGlzLnZpZXdEYXRlID0gdGhpcy5zdGFydE9mTW9udGgodmFsdWUpO1xuICAgICAgdGhpcy52aWV3SmFsYWxpID0gbWJHcmVnb3JpYW5Ub0phbGFsaSh0aGlzLnRvR3JlZ29yaWFuKHZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZSA/PyAnJztcbiAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMucGFyc2VJc28odGhpcy52YWx1ZSk7XG4gICAgICBpZiAocGFyc2VkKSB7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSB0aGlzLnN0YXJ0T2ZNb250aChwYXJzZWQpO1xuICAgICAgICB0aGlzLnZpZXdKYWxhbGkgPSBtYkdyZWdvcmlhblRvSmFsYWxpKHRoaXMudG9HcmVnb3JpYW4ocGFyc2VkKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVidWlsZENhbGVuZGFyKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgdG9nZ2xlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5vcGVuZWQgPyB0aGlzLmNsb3NlKCkgOiB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICBvcGVuKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgdGhpcy5vcGVuZWQgPSB0cnVlO1xuICAgIHRoaXMub3BlbmVkQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgdGhpcy5yZWJ1aWxkQ2FsZW5kYXIoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMub3BlbmVkID0gZmFsc2U7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICB0aGlzLm9wZW5lZENoYW5nZS5lbWl0KGZhbHNlKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNsZWFyKGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcbiAgICB0aGlzLmNvbW1pdCgnJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc2VsZWN0KGRheTogTWJDYWxlbmRhckRheSk6IHZvaWQge1xuICAgIGlmIChkYXkuZGlzYWJsZWQpIHJldHVybjtcbiAgICB0aGlzLmNvbW1pdChkYXkuaXNvKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBzZWxlY3RUb2RheSgpOiB2b2lkIHtcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgaWYgKCF0aGlzLmlzRGlzYWJsZWQodG9kYXkpKSB7XG4gICAgICB0aGlzLnZpZXdEYXRlID0gdGhpcy5zdGFydE9mTW9udGgodG9kYXkpO1xuICAgICAgdGhpcy52aWV3SmFsYWxpID0gbWJHcmVnb3JpYW5Ub0phbGFsaSh0aGlzLnRvR3JlZ29yaWFuKHRvZGF5KSk7XG4gICAgICB0aGlzLmNvbW1pdCh0aGlzLnRvSXNvKHRvZGF5KSk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJldk1vbnRoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNhbGVuZGFyID09PSAnamFsYWxpJykge1xuICAgICAgY29uc3QgbW9udGggPSB0aGlzLnZpZXdKYWxhbGkubW9udGggPT09IDEgPyAxMiA6IHRoaXMudmlld0phbGFsaS5tb250aCAtIDE7XG4gICAgICBjb25zdCB5ZWFyID0gdGhpcy52aWV3SmFsYWxpLm1vbnRoID09PSAxID8gdGhpcy52aWV3SmFsYWxpLnllYXIgLSAxIDogdGhpcy52aWV3SmFsYWxpLnllYXI7XG4gICAgICB0aGlzLnZpZXdKYWxhbGkgPSB7IHllYXIsIG1vbnRoLCBkYXk6IDEgfTtcbiAgICAgIHRoaXMudmlld0RhdGUgPSB0aGlzLnN0YXJ0T2ZNb250aCh0aGlzLmphbGFsaVRvRGF0ZSh0aGlzLnZpZXdKYWxhbGkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aWV3RGF0ZSA9IG5ldyBEYXRlKHRoaXMudmlld0RhdGUuZ2V0RnVsbFllYXIoKSwgdGhpcy52aWV3RGF0ZS5nZXRNb250aCgpIC0gMSwgMSk7XG4gICAgfVxuICAgIHRoaXMucmVidWlsZENhbGVuZGFyKCk7XG4gIH1cblxuICBuZXh0TW9udGgoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2FsZW5kYXIgPT09ICdqYWxhbGknKSB7XG4gICAgICBjb25zdCBtb250aCA9IHRoaXMudmlld0phbGFsaS5tb250aCA9PT0gMTIgPyAxIDogdGhpcy52aWV3SmFsYWxpLm1vbnRoICsgMTtcbiAgICAgIGNvbnN0IHllYXIgPSB0aGlzLnZpZXdKYWxhbGkubW9udGggPT09IDEyID8gdGhpcy52aWV3SmFsYWxpLnllYXIgKyAxIDogdGhpcy52aWV3SmFsYWxpLnllYXI7XG4gICAgICB0aGlzLnZpZXdKYWxhbGkgPSB7IHllYXIsIG1vbnRoLCBkYXk6IDEgfTtcbiAgICAgIHRoaXMudmlld0RhdGUgPSB0aGlzLnN0YXJ0T2ZNb250aCh0aGlzLmphbGFsaVRvRGF0ZSh0aGlzLnZpZXdKYWxhbGkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aWV3RGF0ZSA9IG5ldyBEYXRlKHRoaXMudmlld0RhdGUuZ2V0RnVsbFllYXIoKSwgdGhpcy52aWV3RGF0ZS5nZXRNb250aCgpICsgMSwgMSk7XG4gICAgfVxuICAgIHRoaXMucmVidWlsZENhbGVuZGFyKCk7XG4gIH1cblxuICBzZXRNb250aCh2YWx1ZTogc3RyaW5nIHwgbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgbW9udGggPSBOdW1iZXIodmFsdWUpO1xuICAgIGlmICh0aGlzLmNhbGVuZGFyID09PSAnamFsYWxpJykge1xuICAgICAgdGhpcy52aWV3SmFsYWxpID0geyAuLi50aGlzLnZpZXdKYWxhbGksIG1vbnRoOiBtb250aCArIDEgfTtcbiAgICAgIHRoaXMudmlld0RhdGUgPSB0aGlzLnN0YXJ0T2ZNb250aCh0aGlzLmphbGFsaVRvRGF0ZSh0aGlzLnZpZXdKYWxhbGkpKTtcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdtb250aCcpIHtcbiAgICAgICAgY29uc3QgZ3JlZ29yaWFuID0gbWJKYWxhbGlUb0dyZWdvcmlhbih7IHllYXI6IHRoaXMudmlld0phbGFsaS55ZWFyLCBtb250aDogdGhpcy52aWV3SmFsYWxpLm1vbnRoLCBkYXk6IDEgfSk7XG4gICAgICAgIHRoaXMuY29tbWl0KGAke2dyZWdvcmlhbi55ZWFyfS0ke1N0cmluZyhncmVnb3JpYW4ubW9udGgpLnBhZFN0YXJ0KDIsICcwJyl9YCk7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpZXdEYXRlID0gbmV3IERhdGUodGhpcy52aWV3RGF0ZS5nZXRGdWxsWWVhcigpLCBtb250aCwgMSk7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnbW9udGgnKSB7XG4gICAgICAgIHRoaXMuY29tbWl0KGAke3RoaXMudmlld0RhdGUuZ2V0RnVsbFllYXIoKX0tJHtTdHJpbmcobW9udGggKyAxKS5wYWRTdGFydCgyLCAnMCcpfWApO1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yZWJ1aWxkQ2FsZW5kYXIoKTtcbiAgfVxuXG4gIHNldFllYXIodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IHllYXIgPSBOdW1iZXIodmFsdWUpO1xuICAgIGlmICh0aGlzLmNhbGVuZGFyID09PSAnamFsYWxpJykge1xuICAgICAgdGhpcy52aWV3SmFsYWxpID0geyAuLi50aGlzLnZpZXdKYWxhbGksIHllYXIgfTtcbiAgICAgIHRoaXMudmlld0RhdGUgPSB0aGlzLnN0YXJ0T2ZNb250aCh0aGlzLmphbGFsaVRvRGF0ZSh0aGlzLnZpZXdKYWxhbGkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aWV3RGF0ZSA9IG5ldyBEYXRlKHllYXIsIHRoaXMudmlld0RhdGUuZ2V0TW9udGgoKSwgMSk7XG4gICAgfVxuICAgIHRoaXMucmVidWlsZENhbGVuZGFyKCk7XG4gIH1cblxuICBkaXNwbGF5VmFsdWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMudmFsdWUpIHJldHVybiAnJztcbiAgICBpZiAodGhpcy5tb2RlID09PSAnbW9udGgnKSB7XG4gICAgICBpZiAodGhpcy5jYWxlbmRhciA9PT0gJ2phbGFsaScpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gbWJQYXJzZUlzb0RhdGUodGhpcy52YWx1ZS5sZW5ndGggPT09IDcgPyBgJHt0aGlzLnZhbHVlfS0wMWAgOiB0aGlzLnZhbHVlKTtcbiAgICAgICAgaWYgKCFwYXJzZWQpIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgICBjb25zdCBqYWxhbGkgPSBtYkdyZWdvcmlhblRvSmFsYWxpKHBhcnNlZCk7XG4gICAgICAgIHJldHVybiBgJHtNQl9KQUxBTElfTU9OVEhfTkFNRVNbamFsYWxpLm1vbnRoIC0gMV19ICR7amFsYWxpLnllYXJ9YDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IFt5ZWFyLCBtb250aF0gPSB0aGlzLnZhbHVlLnNwbGl0KCctJyk7XG4gICAgICByZXR1cm4gYCR7dGhpcy5tb250aE5hbWVzW051bWJlcihtb250aCkgLSAxXSA/PyBtb250aH0gJHt5ZWFyfWA7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZUlzbyh0aGlzLnZhbHVlKTtcbiAgICBpZiAoIXBhcnNlZCkgcmV0dXJuIHRoaXMudmFsdWU7XG5cbiAgICBpZiAodGhpcy5jYWxlbmRhciA9PT0gJ2phbGFsaScpIHtcbiAgICAgIHJldHVybiBtYkZvcm1hdEphbGFsaShtYkdyZWdvcmlhblRvSmFsYWxpKHRoaXMudG9HcmVnb3JpYW4ocGFyc2VkKSkpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5lZmZlY3RpdmVMb2NhbGUsIHsgZGF0ZVN0eWxlOiAnbWVkaXVtJyB9KS5mb3JtYXQocGFyc2VkKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGN1cnJlbnRNb250aEluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY2FsZW5kYXIgPT09ICdqYWxhbGknID8gdGhpcy52aWV3SmFsYWxpLm1vbnRoIC0gMSA6IHRoaXMudmlld0RhdGUuZ2V0TW9udGgoKTtcbiAgfVxuXG4gIGN1cnJlbnRZZWFyKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY2FsZW5kYXIgPT09ICdqYWxhbGknID8gdGhpcy52aWV3SmFsYWxpLnllYXIgOiB0aGlzLnZpZXdEYXRlLmdldEZ1bGxZZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbW1pdCh2YWx1ZTogc3RyaW5nLCBlbWl0ID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICBpZiAoZW1pdCkgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgICB0aGlzLnJlYnVpbGRDYWxlbmRhcigpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWJ1aWxkQ2FsZW5kYXIoKTogdm9pZCB7XG4gICAgdGhpcy5kYXlzID0gdGhpcy5jYWxlbmRhciA9PT0gJ2phbGFsaScgPyB0aGlzLmJ1aWxkSmFsYWxpQ2FsZW5kYXIoKSA6IHRoaXMuYnVpbGRHcmVnb3JpYW5DYWxlbmRhcigpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEdyZWdvcmlhbkNhbGVuZGFyKCk6IE1iQ2FsZW5kYXJEYXlbXSB7XG4gICAgY29uc3QgZmlyc3QgPSB0aGlzLnN0YXJ0T2ZNb250aCh0aGlzLnZpZXdEYXRlKTtcbiAgICBjb25zdCBzdGFydCA9IG5ldyBEYXRlKGZpcnN0KTtcbiAgICBjb25zdCBvZmZzZXQgPSAoc3RhcnQuZ2V0RGF5KCkgLSB0aGlzLmZpcnN0RGF5T2ZXZWVrICsgNykgJSA3O1xuICAgIHN0YXJ0LnNldERhdGUoc3RhcnQuZ2V0RGF0ZSgpIC0gb2Zmc2V0KTtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMucGFyc2VJc28odGhpcy52YWx1ZSk7XG4gICAgY29uc3QgdG9kYXlJc28gPSB0aGlzLnRvSXNvKG5ldyBEYXRlKCkpO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDQyIH0sIChfLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHN0YXJ0KTtcbiAgICAgIGRhdGUuc2V0RGF0ZShzdGFydC5nZXREYXRlKCkgKyBpbmRleCk7XG4gICAgICBjb25zdCBpc28gPSB0aGlzLnRvSXNvKGRhdGUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGF0ZSxcbiAgICAgICAgaXNvLFxuICAgICAgICBsYWJlbDogZGF0ZS5nZXREYXRlKCksXG4gICAgICAgIGN1cnJlbnRNb250aDogZGF0ZS5nZXRNb250aCgpID09PSBmaXJzdC5nZXRNb250aCgpLFxuICAgICAgICB0b2RheTogaXNvID09PSB0b2RheUlzbyxcbiAgICAgICAgc2VsZWN0ZWQ6ICEhc2VsZWN0ZWQgJiYgaXNvID09PSB0aGlzLnRvSXNvKHNlbGVjdGVkKSxcbiAgICAgICAgZGlzYWJsZWQ6IHRoaXMuaXNEaXNhYmxlZChkYXRlKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkSmFsYWxpQ2FsZW5kYXIoKTogTWJDYWxlbmRhckRheVtdIHtcbiAgICBjb25zdCBtb250aCA9IHRoaXMudmlld0phbGFsaS5tb250aDtcbiAgICBjb25zdCB5ZWFyID0gdGhpcy52aWV3SmFsYWxpLnllYXI7XG4gICAgY29uc3QgZmlyc3RHcmVnb3JpYW4gPSB0aGlzLmphbGFsaVRvRGF0ZSh7IHllYXIsIG1vbnRoLCBkYXk6IDEgfSk7XG4gICAgY29uc3Qgc3RhcnQgPSBuZXcgRGF0ZShmaXJzdEdyZWdvcmlhbik7XG4gICAgY29uc3Qgb2Zmc2V0ID0gKHN0YXJ0LmdldERheSgpIC0gdGhpcy5maXJzdERheU9mV2VlayArIDcpICUgNztcbiAgICBzdGFydC5zZXREYXRlKHN0YXJ0LmdldERhdGUoKSAtIG9mZnNldCk7XG5cbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMucGFyc2VJc28odGhpcy52YWx1ZSk7XG4gICAgY29uc3QgdG9kYXlJc28gPSB0aGlzLnRvSXNvKG5ldyBEYXRlKCkpO1xuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDQyIH0sIChfLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHN0YXJ0KTtcbiAgICAgIGRhdGUuc2V0RGF0ZShzdGFydC5nZXREYXRlKCkgKyBpbmRleCk7XG4gICAgICBjb25zdCBqYWxhbGkgPSBtYkdyZWdvcmlhblRvSmFsYWxpKHRoaXMudG9HcmVnb3JpYW4oZGF0ZSkpO1xuICAgICAgY29uc3QgaXNvID0gdGhpcy50b0lzbyhkYXRlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGUsXG4gICAgICAgIGlzbyxcbiAgICAgICAgbGFiZWw6IGphbGFsaS5kYXksXG4gICAgICAgIGphbGFsaSxcbiAgICAgICAgY3VycmVudE1vbnRoOiBqYWxhbGkubW9udGggPT09IG1vbnRoICYmIGphbGFsaS55ZWFyID09PSB5ZWFyLFxuICAgICAgICB0b2RheTogaXNvID09PSB0b2RheUlzbyxcbiAgICAgICAgc2VsZWN0ZWQ6ICEhc2VsZWN0ZWQgJiYgaXNvID09PSB0aGlzLnRvSXNvKHNlbGVjdGVkKSxcbiAgICAgICAgZGlzYWJsZWQ6IHRoaXMuaXNEaXNhYmxlZChkYXRlKSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGphbGFsaVRvRGF0ZShkYXRlOiBNYkphbGFsaURhdGUpOiBEYXRlIHtcbiAgICBjb25zdCBncmVnb3JpYW4gPSBtYkphbGFsaVRvR3JlZ29yaWFuKGRhdGUpO1xuICAgIHJldHVybiBuZXcgRGF0ZShncmVnb3JpYW4ueWVhciwgZ3JlZ29yaWFuLm1vbnRoIC0gMSwgZ3JlZ29yaWFuLmRheSk7XG4gIH1cblxuICBwcml2YXRlIHRvR3JlZ29yaWFuKGRhdGU6IERhdGUpOiBNYkdyZWdvcmlhbkRhdGUge1xuICAgIHJldHVybiB7IHllYXI6IGRhdGUuZ2V0RnVsbFllYXIoKSwgbW9udGg6IGRhdGUuZ2V0TW9udGgoKSArIDEsIGRheTogZGF0ZS5nZXREYXRlKCkgfTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEaXNhYmxlZChkYXRlOiBEYXRlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNvID0gdGhpcy50b0lzbyhkYXRlKTtcbiAgICBpZiAodGhpcy5taW4gJiYgaXNvIDwgdGhpcy5taW4pIHJldHVybiB0cnVlO1xuICAgIGlmICh0aGlzLm1heCAmJiBpc28gPiB0aGlzLm1heCkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuY2FsZW5kYXIgPT09ICdqYWxhbGknKSB7XG4gICAgICBjb25zdCBqYWxhbGkgPSBtYkdyZWdvcmlhblRvSmFsYWxpKHRoaXMudG9HcmVnb3JpYW4oZGF0ZSkpO1xuICAgICAgY29uc3QgbW9udGhMZW5ndGggPSBtYkphbGFsaU1vbnRoTGVuZ3RoKGphbGFsaS55ZWFyLCBqYWxhbGkubW9udGgpO1xuICAgICAgaWYgKGphbGFsaS5kYXkgPiBtb250aExlbmd0aCkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRpc2FibGVkRGF0ZXMoZGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSXNvKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgcGFydHMgPSB2YWx1ZS5zcGxpdCgnLScpLm1hcChOdW1iZXIpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPCAyIHx8IHBhcnRzLnNvbWUoTnVtYmVyLmlzTmFOKSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgW3llYXIsIG1vbnRoLCBkYXkgPSAxXSA9IHBhcnRzO1xuICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheSk7XG4gIH1cblxuICBwcml2YXRlIHRvSXNvKGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBtYlRvSXNvRGF0ZSh0aGlzLnRvR3JlZ29yaWFuKGRhdGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRPZk1vbnRoKGRhdGU6IERhdGUpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIDEpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWItZGF0ZXBpY2tlci1zaGVsbFwiIFtjbGFzcy5tYi1kYXRlcGlja2VyLXNoZWxsLS1vcGVuXT1cIm9wZW5lZFwiPlxuICA8YnV0dG9uXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgY2xhc3M9XCJtYi1kYXRlcGlja2VyLXRyaWdnZXJcIlxuICAgIFtjbGFzcy5tYi1kYXRlcGlja2VyLXRyaWdnZXItLWludmFsaWRdPVwiaW52YWxpZFwiXG4gICAgW25nQ2xhc3NdPVwiJ21iLWRhdGVwaWNrZXItdHJpZ2dlci0tJyArIHNpemVcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgKGNsaWNrKT1cInRvZ2dsZSgpXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJtYi1kYXRlcGlja2VyLXZhbHVlXCIgW2NsYXNzLm1iLWRhdGVwaWNrZXItdmFsdWUtLXBsYWNlaG9sZGVyXT1cIiF2YWx1ZVwiPnt7IHZhbHVlID8gZGlzcGxheVZhbHVlKCkgOiBlZmZlY3RpdmVQbGFjZWhvbGRlciB9fTwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cIm1iLWRhdGVwaWNrZXItYWN0aW9uc1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cImNsZWFyYWJsZSAmJiB2YWx1ZSAmJiAhZGlzYWJsZWRcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJtYi1kYXRlcGlja2VyLWNsZWFyXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJtZXNzYWdlcy5kYXRlcGlja2VyLmNsZWFyXCJcbiAgICAgICAgKGNsaWNrKT1cImNsZWFyKCRldmVudClcIj7DlzwvYnV0dG9uPlxuICAgICAgPHNwYW4gY2xhc3M9XCJtYi1kYXRlcGlja2VyLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj7wn5OFPC9zcGFuPlxuICAgIDwvc3Bhbj5cbiAgPC9idXR0b24+XG5cbiAgPGRpdiAqbmdJZj1cIm9wZW5lZFwiIGNsYXNzPVwibWItZGF0ZXBpY2tlci1wYW5lbFwiIHJvbGU9XCJkaWFsb2dcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIm1lc3NhZ2VzLmRhdGVwaWNrZXIucGlja0RhdGVcIj5cbiAgICA8ZGl2IGNsYXNzPVwibWItZGF0ZXBpY2tlci1oZWFkZXJcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibWItZGF0ZXBpY2tlci1uYXZcIiAoY2xpY2spPVwicHJldk1vbnRoKClcIj7igLk8L2J1dHRvbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi1kYXRlcGlja2VyLXRpdGxlXCI+XG4gICAgICAgIDxzZWxlY3QgW3ZhbHVlXT1cImN1cnJlbnRNb250aEluZGV4KClcIiAoY2hhbmdlKT1cInNldE1vbnRoKCRhbnkoJGV2ZW50LnRhcmdldCkudmFsdWUpXCI+XG4gICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbW9udGggb2YgYWN0aXZlTW9udGhOYW1lczsgaW5kZXggYXMgbW9udGhJbmRleFwiIFt2YWx1ZV09XCJtb250aEluZGV4XCI+e3sgbW9udGggfX08L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDxzZWxlY3QgW3ZhbHVlXT1cImN1cnJlbnRZZWFyKClcIiAoY2hhbmdlKT1cInNldFllYXIoJGFueSgkZXZlbnQudGFyZ2V0KS52YWx1ZSlcIj5cbiAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB5ZWFyIG9mIGFjdGl2ZVllYXJzXCIgW3ZhbHVlXT1cInllYXJcIj57eyB5ZWFyIH19PC9vcHRpb24+XG4gICAgICAgIDwvc2VsZWN0PlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1iLWRhdGVwaWNrZXItbmF2XCIgKGNsaWNrKT1cIm5leHRNb250aCgpXCI+4oC6PC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gJ2RhdGUnOyBlbHNlIG1vbnRoUGlja2VyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItZGF0ZXBpY2tlci13ZWVrZGF5c1wiPlxuICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgd2Vla2RheSBvZiBlZmZlY3RpdmVXZWVrZGF5TmFtZXNcIj57eyB3ZWVrZGF5IH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItZGF0ZXBpY2tlci1ncmlkXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF5IG9mIGRheXNcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwibWItZGF0ZXBpY2tlci1kYXlcIlxuICAgICAgICAgIFtjbGFzcy5tYi1kYXRlcGlja2VyLWRheS0tbXV0ZWRdPVwiIWRheS5jdXJyZW50TW9udGhcIlxuICAgICAgICAgIFtjbGFzcy5tYi1kYXRlcGlja2VyLWRheS0tdG9kYXldPVwiZGF5LnRvZGF5XCJcbiAgICAgICAgICBbY2xhc3MubWItZGF0ZXBpY2tlci1kYXktLXNlbGVjdGVkXT1cImRheS5zZWxlY3RlZFwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImRheS5kaXNhYmxlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdChkYXkpXCI+e3sgZGF5LmxhYmVsIH19PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjbW9udGhQaWNrZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItZGF0ZXBpY2tlci1tb250aHNcIj5cbiAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgbW9udGggb2YgYWN0aXZlTW9udGhOYW1lczsgaW5kZXggYXMgbW9udGhJbmRleFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1iLWRhdGVwaWNrZXItbW9udGhcIiAoY2xpY2spPVwic2V0TW9udGgobW9udGhJbmRleClcIj57eyBtb250aCB9fTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxkaXYgY2xhc3M9XCJtYi1kYXRlcGlja2VyLWZvb3RlclwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNlbGVjdFRvZGF5KClcIj57eyBtZXNzYWdlcy5kYXRlcGlja2VyLnRvZGF5IH19PC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2xvc2UoKVwiPnt7IG1lc3NhZ2VzLmNvbW1vbi5jbG9zZSB9fTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,37 @@
1
+ import { ChangeDetectionStrategy, Component, HostBinding, Input, ViewChild } from '@angular/core';
2
+ import { CdkPortalOutlet, PortalModule } from '@angular/cdk/portal';
3
+ import { CdkTrapFocus } from '@angular/cdk/a11y';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/cdk/portal";
6
+ export class MbDialogContainerComponent {
7
+ ariaLabel = 'Dialog';
8
+ width = '560px';
9
+ maxWidth = 'calc(100vw - 2rem)';
10
+ minWidth = '280px';
11
+ portalOutlet;
12
+ hostClass = 'mb-dialog-host';
13
+ attachComponentPortal(portal) {
14
+ return this.portalOutlet.attachComponentPortal(portal);
15
+ }
16
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MbDialogContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
17
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: MbDialogContainerComponent, isStandalone: true, selector: "mb-dialog-container", inputs: { ariaLabel: "ariaLabel", width: "width", maxWidth: "maxWidth", minWidth: "minWidth" }, host: { properties: { "class": "this.hostClass" } }, viewQueries: [{ propertyName: "portalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true, static: true }], ngImport: i0, template: "<section\n class=\"mb-dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"ariaLabel\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n [style.width]=\"width\"\n [style.max-width]=\"maxWidth\"\n [style.min-width]=\"minWidth\">\n <ng-template cdkPortalOutlet></ng-template>\n</section>\n", styles: [":host{display:block}.mb-dialog{background:var(--mb-color-surface-elevated);color:var(--mb-color-text);border:1px solid var(--mb-color-border);border-radius:var(--mb-radius-xl);box-shadow:var(--mb-shadow-lg);overflow:hidden;outline:none}\n"], dependencies: [{ kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i1.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MbDialogContainerComponent, decorators: [{
20
+ type: Component,
21
+ args: [{ selector: 'mb-dialog-container', standalone: true, imports: [PortalModule, CdkTrapFocus], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section\n class=\"mb-dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n [attr.aria-label]=\"ariaLabel\"\n cdkTrapFocus\n [cdkTrapFocusAutoCapture]=\"true\"\n [style.width]=\"width\"\n [style.max-width]=\"maxWidth\"\n [style.min-width]=\"minWidth\">\n <ng-template cdkPortalOutlet></ng-template>\n</section>\n", styles: [":host{display:block}.mb-dialog{background:var(--mb-color-surface-elevated);color:var(--mb-color-text);border:1px solid var(--mb-color-border);border-radius:var(--mb-radius-xl);box-shadow:var(--mb-shadow-lg);overflow:hidden;outline:none}\n"] }]
22
+ }], propDecorators: { ariaLabel: [{
23
+ type: Input
24
+ }], width: [{
25
+ type: Input
26
+ }], maxWidth: [{
27
+ type: Input
28
+ }], minWidth: [{
29
+ type: Input
30
+ }], portalOutlet: [{
31
+ type: ViewChild,
32
+ args: [CdkPortalOutlet, { static: true }]
33
+ }], hostClass: [{
34
+ type: HostBinding,
35
+ args: ['class']
36
+ }] } });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWItZGlhbG9nLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2RpYWxvZy9tYi1kaWFsb2ctY29udGFpbmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGlhbG9nL21iLWRpYWxvZy1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsZUFBZSxFQUFtQixZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7OztBQVdqRCxNQUFNLE9BQU8sMEJBQTBCO0lBQzVCLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDckIsS0FBSyxHQUFHLE9BQU8sQ0FBQztJQUNoQixRQUFRLEdBQUcsb0JBQW9CLENBQUM7SUFDaEMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUUwQixZQUFZLENBQW1CO0lBRS9ELFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQztJQUVuRCxxQkFBcUIsQ0FBSSxNQUEwQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekQsQ0FBQzt3R0FaVSwwQkFBMEI7NEZBQTFCLDBCQUEwQixrUkFNMUIsZUFBZSw4RENuQjVCLGlVQVlBLHVTREpZLFlBQVksa01BQUUsWUFBWTs7NEZBS3pCLDBCQUEwQjtrQkFSdEMsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxtQkFHcEIsdUJBQXVCLENBQUMsTUFBTTs4QkFHdEMsU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUVnRCxZQUFZO3NCQUFqRSxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRXRCLFNBQVM7c0JBQTlCLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbnB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDZGtQb3J0YWxPdXRsZXQsIENvbXBvbmVudFBvcnRhbCwgUG9ydGFsTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBDZGtUcmFwRm9jdXMgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWItZGlhbG9nLWNvbnRhaW5lcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtQb3J0YWxNb2R1bGUsIENka1RyYXBGb2N1c10sXG4gIHRlbXBsYXRlVXJsOiAnLi9tYi1kaWFsb2ctY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL21iLWRpYWxvZy1jb250YWluZXIuY29tcG9uZW50LnNjc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWJEaWFsb2dDb250YWluZXJDb21wb25lbnQge1xuICBASW5wdXQoKSBhcmlhTGFiZWwgPSAnRGlhbG9nJztcbiAgQElucHV0KCkgd2lkdGggPSAnNTYwcHgnO1xuICBASW5wdXQoKSBtYXhXaWR0aCA9ICdjYWxjKDEwMHZ3IC0gMnJlbSknO1xuICBASW5wdXQoKSBtaW5XaWR0aCA9ICcyODBweCc7XG5cbiAgQFZpZXdDaGlsZChDZGtQb3J0YWxPdXRsZXQsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgcG9ydGFsT3V0bGV0ITogQ2RrUG9ydGFsT3V0bGV0O1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBob3N0Q2xhc3MgPSAnbWItZGlhbG9nLWhvc3QnO1xuXG4gIGF0dGFjaENvbXBvbmVudFBvcnRhbDxUPihwb3J0YWw6IENvbXBvbmVudFBvcnRhbDxUPik6IENvbXBvbmVudFJlZjxUPiB7XG4gICAgcmV0dXJuIHRoaXMucG9ydGFsT3V0bGV0LmF0dGFjaENvbXBvbmVudFBvcnRhbChwb3J0YWwpO1xuICB9XG59XG4iLCI8c2VjdGlvblxuICBjbGFzcz1cIm1iLWRpYWxvZ1wiXG4gIHJvbGU9XCJkaWFsb2dcIlxuICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgY2RrVHJhcEZvY3VzXG4gIFtjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZV09XCJ0cnVlXCJcbiAgW3N0eWxlLndpZHRoXT1cIndpZHRoXCJcbiAgW3N0eWxlLm1heC13aWR0aF09XCJtYXhXaWR0aFwiXG4gIFtzdHlsZS5taW4td2lkdGhdPVwibWluV2lkdGhcIj5cbiAgPG5nLXRlbXBsYXRlIGNka1BvcnRhbE91dGxldD48L25nLXRlbXBsYXRlPlxuPC9zZWN0aW9uPlxuIl19
@@ -0,0 +1,17 @@
1
+ import { Subject } from 'rxjs';
2
+ export class MbDialogRef {
3
+ overlayRef;
4
+ closedSubject = new Subject();
5
+ afterClosed$ = this.closedSubject.asObservable();
6
+ constructor(overlayRef) {
7
+ this.overlayRef = overlayRef;
8
+ }
9
+ close(result) {
10
+ if (!this.overlayRef.hasAttached())
11
+ return;
12
+ this.overlayRef.dispose();
13
+ this.closedSubject.next(result);
14
+ this.closedSubject.complete();
15
+ }
16
+ }
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWItZGlhbG9nLXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZGlhbG9nL21iLWRpYWxvZy1yZWYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzQyxNQUFNLE9BQU8sV0FBVztJQUtPO0lBSlosYUFBYSxHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO0lBRTNELFlBQVksR0FBb0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUUzRixZQUE2QixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQUcsQ0FBQztJQUV2RCxLQUFLLENBQUMsTUFBZ0I7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFO1lBQUUsT0FBTztRQUMzQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDaEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IGNsYXNzIE1iRGlhbG9nUmVmPFRSZXN1bHQgPSB1bmtub3duPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2xvc2VkU3ViamVjdCA9IG5ldyBTdWJqZWN0PFRSZXN1bHQgfCB1bmRlZmluZWQ+KCk7XG5cbiAgcmVhZG9ubHkgYWZ0ZXJDbG9zZWQkOiBPYnNlcnZhYmxlPFRSZXN1bHQgfCB1bmRlZmluZWQ+ID0gdGhpcy5jbG9zZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheVJlZjogT3ZlcmxheVJlZikge31cblxuICBjbG9zZShyZXN1bHQ/OiBUUmVzdWx0KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm92ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSkgcmV0dXJuO1xuICAgIHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgdGhpcy5jbG9zZWRTdWJqZWN0Lm5leHQocmVzdWx0KTtcbiAgICB0aGlzLmNsb3NlZFN1YmplY3QuY29tcGxldGUoKTtcbiAgfVxufVxuIl19