@tolle_/tolle-ui 0.0.1-beta

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 (77) hide show
  1. package/README.md +35 -0
  2. package/esm2022/lib/accordion-item.component.mjs +78 -0
  3. package/esm2022/lib/accordion.component.mjs +60 -0
  4. package/esm2022/lib/badge.component.mjs +76 -0
  5. package/esm2022/lib/button-group.component.mjs +25 -0
  6. package/esm2022/lib/button.component.mjs +70 -0
  7. package/esm2022/lib/calendar.component.mjs +315 -0
  8. package/esm2022/lib/card.component.mjs +94 -0
  9. package/esm2022/lib/checkbox.component.mjs +100 -0
  10. package/esm2022/lib/data-table.component.mjs +332 -0
  11. package/esm2022/lib/date-picker.component.mjs +232 -0
  12. package/esm2022/lib/date-range-picker.component.mjs +208 -0
  13. package/esm2022/lib/input.component.mjs +134 -0
  14. package/esm2022/lib/masked-input.component.mjs +179 -0
  15. package/esm2022/lib/modal-ref.mjs +31 -0
  16. package/esm2022/lib/modal-stack.service.mjs +26 -0
  17. package/esm2022/lib/modal.component.mjs +98 -0
  18. package/esm2022/lib/modal.mjs +27 -0
  19. package/esm2022/lib/modal.service.mjs +65 -0
  20. package/esm2022/lib/multi-select.component.mjs +231 -0
  21. package/esm2022/lib/pagination.component.mjs +279 -0
  22. package/esm2022/lib/range-calendar.component.mjs +285 -0
  23. package/esm2022/lib/select-group.component.mjs +28 -0
  24. package/esm2022/lib/select-item.component.mjs +84 -0
  25. package/esm2022/lib/select-separator.component.mjs +24 -0
  26. package/esm2022/lib/select.component.mjs +261 -0
  27. package/esm2022/lib/select.service.mjs +21 -0
  28. package/esm2022/lib/skeleton.component.mjs +34 -0
  29. package/esm2022/lib/switch.component.mjs +133 -0
  30. package/esm2022/lib/toast.service.mjs +59 -0
  31. package/esm2022/lib/tolle-cell.directive.mjs +22 -0
  32. package/esm2022/lib/tolle-config.mjs +11 -0
  33. package/esm2022/lib/tooltip.directive.mjs +71 -0
  34. package/esm2022/lib/types/date-range.mjs +2 -0
  35. package/esm2022/lib/utils/cn.mjs +6 -0
  36. package/esm2022/public-api.mjs +36 -0
  37. package/esm2022/tolle_-tolle-ui.mjs +5 -0
  38. package/fesm2022/tolle_-tolle-ui.mjs +3553 -0
  39. package/fesm2022/tolle_-tolle-ui.mjs.map +1 -0
  40. package/index.d.ts +5 -0
  41. package/lib/accordion-item.component.d.ts +13 -0
  42. package/lib/accordion.component.d.ts +14 -0
  43. package/lib/badge.component.d.ts +14 -0
  44. package/lib/button-group.component.d.ts +8 -0
  45. package/lib/button.component.d.ts +16 -0
  46. package/lib/calendar.component.d.ts +35 -0
  47. package/lib/card.component.d.ts +32 -0
  48. package/lib/checkbox.component.d.ts +23 -0
  49. package/lib/data-table.component.d.ts +45 -0
  50. package/lib/date-picker.component.d.ts +35 -0
  51. package/lib/date-range-picker.component.d.ts +36 -0
  52. package/lib/input.component.d.ts +27 -0
  53. package/lib/masked-input.component.d.ts +36 -0
  54. package/lib/modal-ref.d.ts +16 -0
  55. package/lib/modal-stack.service.d.ts +12 -0
  56. package/lib/modal.component.d.ts +19 -0
  57. package/lib/modal.d.ts +29 -0
  58. package/lib/modal.service.d.ts +18 -0
  59. package/lib/multi-select.component.d.ts +47 -0
  60. package/lib/pagination.component.d.ts +36 -0
  61. package/lib/range-calendar.component.d.ts +37 -0
  62. package/lib/select-group.component.d.ts +8 -0
  63. package/lib/select-item.component.d.ts +18 -0
  64. package/lib/select-separator.component.d.ts +8 -0
  65. package/lib/select.component.d.ts +45 -0
  66. package/lib/select.service.d.ts +10 -0
  67. package/lib/skeleton.component.d.ts +10 -0
  68. package/lib/switch.component.d.ts +39 -0
  69. package/lib/toast.service.d.ts +24 -0
  70. package/lib/tolle-cell.directive.d.ts +9 -0
  71. package/lib/tolle-config.d.ts +9 -0
  72. package/lib/tooltip.directive.d.ts +15 -0
  73. package/lib/types/date-range.d.ts +4 -0
  74. package/lib/utils/cn.d.ts +2 -0
  75. package/package.json +32 -0
  76. package/public-api.d.ts +32 -0
  77. package/theme.css +211 -0
@@ -0,0 +1,315 @@
1
+ import { Component, Input, forwardRef } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { addMonths, subMonths, startOfMonth, endOfMonth, startOfWeek, endOfWeek, eachDayOfInterval, isSameMonth, isSameDay, isToday, setMonth, setYear, addYears, subYears, isBefore, startOfDay } from 'date-fns';
5
+ import { cn } from './utils/cn';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common";
8
+ export class CalendarComponent {
9
+ class = '';
10
+ disablePastDates = false;
11
+ currentView = 'date';
12
+ viewDate = new Date();
13
+ selectedDate = null;
14
+ weekDays = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];
15
+ daysInMonth = [];
16
+ months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
17
+ years = [];
18
+ navBtnClass = cn('h-7 w-7 bg-transparent p-0 opacity-50 hover:opacity-100 border border-input rounded-md flex items-center justify-center hover:bg-accent hover:text-accent-foreground transition-all');
19
+ onTouched = () => { };
20
+ onChange = () => { };
21
+ cn = cn;
22
+ ngOnInit() {
23
+ this.generateDays();
24
+ this.generateYears();
25
+ }
26
+ generateDays() {
27
+ const start = startOfWeek(startOfMonth(this.viewDate));
28
+ const end = endOfWeek(endOfMonth(this.viewDate));
29
+ this.daysInMonth = eachDayOfInterval({ start, end });
30
+ }
31
+ generateYears() {
32
+ const currentYear = this.viewDate.getFullYear();
33
+ // Generates a 16-year window centered roughly on current view
34
+ this.years = Array.from({ length: 16 }, (_, i) => currentYear - 6 + i);
35
+ }
36
+ setView(view) {
37
+ this.currentView = view;
38
+ // If switching to year view, ensure the year grid is centered on current view year
39
+ if (view === 'year') {
40
+ this.generateYears();
41
+ }
42
+ }
43
+ prev() {
44
+ if (this.currentView === 'date') {
45
+ this.viewDate = subMonths(this.viewDate, 1);
46
+ this.generateDays();
47
+ }
48
+ else if (this.currentView === 'year') {
49
+ this.viewDate = subYears(this.viewDate, 16);
50
+ this.generateYears();
51
+ }
52
+ else if (this.currentView === 'month') {
53
+ this.viewDate = subYears(this.viewDate, 1);
54
+ }
55
+ }
56
+ next() {
57
+ if (this.currentView === 'date') {
58
+ this.viewDate = addMonths(this.viewDate, 1);
59
+ this.generateDays();
60
+ }
61
+ else if (this.currentView === 'year') {
62
+ this.viewDate = addYears(this.viewDate, 16);
63
+ this.generateYears();
64
+ }
65
+ else if (this.currentView === 'month') {
66
+ this.viewDate = addYears(this.viewDate, 1);
67
+ }
68
+ }
69
+ selectDate(date) {
70
+ if (this.isDateDisabled(date))
71
+ return;
72
+ this.selectedDate = date;
73
+ if (!isSameMonth(date, this.viewDate)) {
74
+ this.viewDate = date;
75
+ this.generateDays();
76
+ }
77
+ this.onChange(date);
78
+ this.onTouched();
79
+ }
80
+ selectMonth(monthIndex) {
81
+ this.viewDate = setMonth(this.viewDate, monthIndex);
82
+ this.currentView = 'date';
83
+ this.generateDays();
84
+ }
85
+ selectYear(year) {
86
+ this.viewDate = setYear(this.viewDate, year);
87
+ this.currentView = 'date'; // Jump straight back to date view for efficiency
88
+ this.generateDays();
89
+ }
90
+ getDayClass(date) {
91
+ const isSelected = this.selectedDate && isSameDay(date, this.selectedDate);
92
+ const isTodayDate = isToday(date);
93
+ const isOutside = !isSameMonth(date, this.viewDate);
94
+ const isDisabled = this.isDateDisabled(date);
95
+ return cn('h-9 w-9 p-0 font-normal text-sm rounded-md transition-all flex items-center justify-center', !isSelected && !isDisabled && 'hover:bg-accent hover:text-accent-foreground', isSelected && 'bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground focus:bg-primary focus:text-primary-foreground', !isSelected && isTodayDate && 'bg-accent text-accent-foreground', (isOutside || isDisabled) && 'text-muted-foreground opacity-50', isDisabled && 'cursor-not-allowed');
96
+ }
97
+ isDateDisabled(date) {
98
+ return this.disablePastDates ? isBefore(date, startOfDay(new Date())) : false;
99
+ }
100
+ // CVA Implementation
101
+ writeValue(obj) {
102
+ if (obj) {
103
+ const date = new Date(obj);
104
+ if (!isNaN(date.getTime())) {
105
+ this.selectedDate = date;
106
+ this.viewDate = date;
107
+ this.generateDays();
108
+ this.generateYears();
109
+ }
110
+ }
111
+ }
112
+ registerOnChange(fn) { this.onChange = fn; }
113
+ registerOnTouched(fn) { this.onTouched = fn; }
114
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
115
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CalendarComponent, isStandalone: true, selector: "tolle-calendar", inputs: { class: "class", disablePastDates: "disablePastDates" }, providers: [
116
+ {
117
+ provide: NG_VALUE_ACCESSOR,
118
+ useExisting: forwardRef(() => CalendarComponent),
119
+ multi: true
120
+ }
121
+ ], ngImport: i0, template: `
122
+ <div [class]="cn('p-3 border rounded-md bg-background text-popover-foreground shadow-sm inline-block w-fit', class)">
123
+
124
+ <div class="flex items-center justify-between pt-1 pb-4 gap-2">
125
+
126
+ <div class="flex items-center gap-1">
127
+ <button
128
+ type="button"
129
+ (click)="setView('month')"
130
+ [class]="cn(
131
+ 'text-sm font-semibold px-2 py-1 rounded transition-colors',
132
+ currentView === 'month' ? 'bg-secondary text-secondary-foreground' : 'hover:bg-accent hover:text-accent-foreground'
133
+ )"
134
+ >
135
+ {{ viewDate | date: 'MMMM' }}
136
+ </button>
137
+
138
+ <button
139
+ type="button"
140
+ (click)="setView('year')"
141
+ [class]="cn(
142
+ 'text-sm font-semibold px-2 py-1 rounded transition-colors',
143
+ currentView === 'year' ? 'bg-secondary text-secondary-foreground' : 'hover:bg-accent hover:text-accent-foreground'
144
+ )"
145
+ >
146
+ {{ viewDate | date: 'yyyy' }}
147
+ </button>
148
+ </div>
149
+
150
+ <div class="flex items-center space-x-1">
151
+ <button type="button" (click)="prev()" [class]="navBtnClass">
152
+ <i class="ri-arrow-left-s-line text-lg"></i>
153
+ </button>
154
+ <button type="button" (click)="next()" [class]="navBtnClass">
155
+ <i class="ri-arrow-right-s-line text-lg"></i>
156
+ </button>
157
+ </div>
158
+ </div>
159
+
160
+ <div *ngIf="currentView === 'date'" class="space-y-2 animate-in fade-in zoom-in-95 duration-200">
161
+ <div class="grid grid-cols-7 gap-1 w-full">
162
+ <span *ngFor="let day of weekDays" class="text-[0.8rem] text-muted-foreground font-normal text-center w-9">
163
+ {{ day }}
164
+ </span>
165
+ </div>
166
+ <div class="grid grid-cols-7 gap-1 w-full">
167
+ <button
168
+ *ngFor="let date of daysInMonth"
169
+ type="button"
170
+ (click)="selectDate(date)"
171
+ [disabled]="isDateDisabled(date)"
172
+ [class]="getDayClass(date)"
173
+ >
174
+ {{ date | date: 'd' }}
175
+ </button>
176
+ </div>
177
+ </div>
178
+
179
+ <div *ngIf="currentView === 'month'" class="grid grid-cols-3 gap-2 w-64 animate-in fade-in zoom-in-95 duration-200">
180
+ <button
181
+ *ngFor="let month of months; let i = index"
182
+ type="button"
183
+ (click)="selectMonth(i)"
184
+ [class]="cn(
185
+ 'text-sm py-2.5 rounded-md hover:bg-accent hover:text-accent-foreground transition-colors',
186
+ i === viewDate.getMonth() ? 'bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground' : ''
187
+ )"
188
+ >
189
+ {{ month }}
190
+ </button>
191
+ </div>
192
+
193
+ <div *ngIf="currentView === 'year'" class="grid grid-cols-4 gap-2 w-64 animate-in fade-in zoom-in-95 duration-200">
194
+ <button
195
+ *ngFor="let year of years"
196
+ type="button"
197
+ (click)="selectYear(year)"
198
+ [class]="cn(
199
+ 'text-sm py-2 rounded-md hover:bg-accent hover:text-accent-foreground transition-colors',
200
+ year === viewDate.getFullYear() ? 'bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground' : ''
201
+ )"
202
+ >
203
+ {{ year }}
204
+ </button>
205
+ </div>
206
+ </div>
207
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
208
+ }
209
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CalendarComponent, decorators: [{
210
+ type: Component,
211
+ args: [{
212
+ selector: 'tolle-calendar',
213
+ standalone: true,
214
+ imports: [CommonModule],
215
+ providers: [
216
+ {
217
+ provide: NG_VALUE_ACCESSOR,
218
+ useExisting: forwardRef(() => CalendarComponent),
219
+ multi: true
220
+ }
221
+ ],
222
+ template: `
223
+ <div [class]="cn('p-3 border rounded-md bg-background text-popover-foreground shadow-sm inline-block w-fit', class)">
224
+
225
+ <div class="flex items-center justify-between pt-1 pb-4 gap-2">
226
+
227
+ <div class="flex items-center gap-1">
228
+ <button
229
+ type="button"
230
+ (click)="setView('month')"
231
+ [class]="cn(
232
+ 'text-sm font-semibold px-2 py-1 rounded transition-colors',
233
+ currentView === 'month' ? 'bg-secondary text-secondary-foreground' : 'hover:bg-accent hover:text-accent-foreground'
234
+ )"
235
+ >
236
+ {{ viewDate | date: 'MMMM' }}
237
+ </button>
238
+
239
+ <button
240
+ type="button"
241
+ (click)="setView('year')"
242
+ [class]="cn(
243
+ 'text-sm font-semibold px-2 py-1 rounded transition-colors',
244
+ currentView === 'year' ? 'bg-secondary text-secondary-foreground' : 'hover:bg-accent hover:text-accent-foreground'
245
+ )"
246
+ >
247
+ {{ viewDate | date: 'yyyy' }}
248
+ </button>
249
+ </div>
250
+
251
+ <div class="flex items-center space-x-1">
252
+ <button type="button" (click)="prev()" [class]="navBtnClass">
253
+ <i class="ri-arrow-left-s-line text-lg"></i>
254
+ </button>
255
+ <button type="button" (click)="next()" [class]="navBtnClass">
256
+ <i class="ri-arrow-right-s-line text-lg"></i>
257
+ </button>
258
+ </div>
259
+ </div>
260
+
261
+ <div *ngIf="currentView === 'date'" class="space-y-2 animate-in fade-in zoom-in-95 duration-200">
262
+ <div class="grid grid-cols-7 gap-1 w-full">
263
+ <span *ngFor="let day of weekDays" class="text-[0.8rem] text-muted-foreground font-normal text-center w-9">
264
+ {{ day }}
265
+ </span>
266
+ </div>
267
+ <div class="grid grid-cols-7 gap-1 w-full">
268
+ <button
269
+ *ngFor="let date of daysInMonth"
270
+ type="button"
271
+ (click)="selectDate(date)"
272
+ [disabled]="isDateDisabled(date)"
273
+ [class]="getDayClass(date)"
274
+ >
275
+ {{ date | date: 'd' }}
276
+ </button>
277
+ </div>
278
+ </div>
279
+
280
+ <div *ngIf="currentView === 'month'" class="grid grid-cols-3 gap-2 w-64 animate-in fade-in zoom-in-95 duration-200">
281
+ <button
282
+ *ngFor="let month of months; let i = index"
283
+ type="button"
284
+ (click)="selectMonth(i)"
285
+ [class]="cn(
286
+ 'text-sm py-2.5 rounded-md hover:bg-accent hover:text-accent-foreground transition-colors',
287
+ i === viewDate.getMonth() ? 'bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground' : ''
288
+ )"
289
+ >
290
+ {{ month }}
291
+ </button>
292
+ </div>
293
+
294
+ <div *ngIf="currentView === 'year'" class="grid grid-cols-4 gap-2 w-64 animate-in fade-in zoom-in-95 duration-200">
295
+ <button
296
+ *ngFor="let year of years"
297
+ type="button"
298
+ (click)="selectYear(year)"
299
+ [class]="cn(
300
+ 'text-sm py-2 rounded-md hover:bg-accent hover:text-accent-foreground transition-colors',
301
+ year === viewDate.getFullYear() ? 'bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground' : ''
302
+ )"
303
+ >
304
+ {{ year }}
305
+ </button>
306
+ </div>
307
+ </div>
308
+ `
309
+ }]
310
+ }], propDecorators: { class: [{
311
+ type: Input
312
+ }], disablePastDates: [{
313
+ type: Input
314
+ }] } });
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9jYWxlbmRhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFBRSxLQUFLLEVBQVUsVUFBVSxFQUNyQyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQzlDLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUN0RCxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUNoRixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDOzs7QUFxR2hDLE1BQU0sT0FBTyxpQkFBaUI7SUFDbkIsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUVsQyxXQUFXLEdBQThCLE1BQU0sQ0FBQztJQUNoRCxRQUFRLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM1QixZQUFZLEdBQWdCLElBQUksQ0FBQztJQUVqQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RCxXQUFXLEdBQVcsRUFBRSxDQUFDO0lBQ3pCLE1BQU0sR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVB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Q0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxpQkFBaUIsQ0FBQyxFQUFPLElBQVUsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dHQS9IOUMsaUJBQWlCOzRGQUFqQixpQkFBaUIsK0hBL0ZqQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsaUJBQWlCLENBQUM7Z0JBQ2hELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRiwwQkFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzRlQsMkRBOUZTLFlBQVk7OzRGQWdHWCxpQkFBaUI7a0JBbkc3QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQzs0QkFDaEQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNGVDtpQkFDRjs4QkFFVSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIGFkZE1vbnRocywgc3ViTW9udGhzLCBzdGFydE9mTW9udGgsIGVuZE9mTW9udGgsXG4gIHN0YXJ0T2ZXZWVrLCBlbmRPZldlZWssIGVhY2hEYXlPZkludGVydmFsLCBpc1NhbWVNb250aCxcbiAgaXNTYW1lRGF5LCBpc1RvZGF5LCBzZXRNb250aCwgc2V0WWVhciwgYWRkWWVhcnMsIHN1YlllYXJzLCBpc0JlZm9yZSwgc3RhcnRPZkRheVxufSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1jYWxlbmRhcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENhbGVuZGFyQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgW2NsYXNzXT1cImNuKCdwLTMgYm9yZGVyIHJvdW5kZWQtbWQgYmctYmFja2dyb3VuZCB0ZXh0LXBvcG92ZXItZm9yZWdyb3VuZCBzaGFkb3ctc20gaW5saW5lLWJsb2NrIHctZml0JywgY2xhc3MpXCI+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHQtMSBwYi00IGdhcC0yXCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2V0VmlldygnbW9udGgnKVwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiY24oXG4gICAgICAgICAgICAgICd0ZXh0LXNtIGZvbnQtc2VtaWJvbGQgcHgtMiBweS0xIHJvdW5kZWQgdHJhbnNpdGlvbi1jb2xvcnMnLFxuICAgICAgICAgICAgICBjdXJyZW50VmlldyA9PT0gJ21vbnRoJyA/ICdiZy1zZWNvbmRhcnkgdGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZCcgOiAnaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQnXG4gICAgICAgICAgICApXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyB2aWV3RGF0ZSB8IGRhdGU6ICdNTU1NJyB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2V0VmlldygneWVhcicpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJjbihcbiAgICAgICAgICAgICAgJ3RleHQtc20gZm9udC1zZW1pYm9sZCBweC0yIHB5LTEgcm91bmRlZCB0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAgICAgICAgIGN1cnJlbnRWaWV3ID09PSAneWVhcicgPyAnYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQnIDogJ2hvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJ1xuICAgICAgICAgICAgKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgdmlld0RhdGUgfCBkYXRlOiAneXl5eScgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMVwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJwcmV2KClcIiBbY2xhc3NdPVwibmF2QnRuQ2xhc3NcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwicmktYXJyb3ctbGVmdC1zLWxpbmUgdGV4dC1sZ1wiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwibmV4dCgpXCIgW2NsYXNzXT1cIm5hdkJ0bkNsYXNzXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cInJpLWFycm93LXJpZ2h0LXMtbGluZSB0ZXh0LWxnXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudFZpZXcgPT09ICdkYXRlJ1wiIGNsYXNzPVwic3BhY2UteS0yIGFuaW1hdGUtaW4gZmFkZS1pbiB6b29tLWluLTk1IGR1cmF0aW9uLTIwMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBncmlkLWNvbHMtNyBnYXAtMSB3LWZ1bGxcIj5cbiAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgZGF5IG9mIHdlZWtEYXlzXCIgY2xhc3M9XCJ0ZXh0LVswLjhyZW1dIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb250LW5vcm1hbCB0ZXh0LWNlbnRlciB3LTlcIj5cbiAgICAgICAgICAgIHt7IGRheSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy03IGdhcC0xIHctZnVsbFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRlIG9mIGRheXNJbk1vbnRoXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdERhdGUoZGF0ZSlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzRGF0ZURpc2FibGVkKGRhdGUpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJnZXREYXlDbGFzcyhkYXRlKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgZGF0ZSB8IGRhdGU6ICdkJyB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudFZpZXcgPT09ICdtb250aCdcIiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTMgZ2FwLTIgdy02NCBhbmltYXRlLWluIGZhZGUtaW4gem9vbS1pbi05NSBkdXJhdGlvbi0yMDBcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBtb250aCBvZiBtb250aHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RNb250aChpKVwiXG4gICAgICAgICAgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgJ3RleHQtc20gcHktMi41IHJvdW5kZWQtbWQgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgdHJhbnNpdGlvbi1jb2xvcnMnLFxuICAgICAgICAgICAgaSA9PT0gdmlld0RhdGUuZ2V0TW9udGgoKSA/ICdiZy1wcmltYXJ5IHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXByaW1hcnkgaG92ZXI6dGV4dC1wcmltYXJ5LWZvcmVncm91bmQnIDogJydcbiAgICAgICAgICApXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IG1vbnRoIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50VmlldyA9PT0gJ3llYXInXCIgY2xhc3M9XCJncmlkIGdyaWQtY29scy00IGdhcC0yIHctNjQgYW5pbWF0ZS1pbiBmYWRlLWluIHpvb20taW4tOTUgZHVyYXRpb24tMjAwXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAqbmdGb3I9XCJsZXQgeWVhciBvZiB5ZWFyc1wiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgIFtjbGFzc109XCJjbihcbiAgICAgICAgICAgICd0ZXh0LXNtIHB5LTIgcm91bmRlZC1tZCBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCB0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAgICAgICB5ZWFyID09PSB2aWV3RGF0ZS5nZXRGdWxsWWVhcigpID8gJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgaG92ZXI6YmctcHJpbWFyeSBob3Zlcjp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCcgOiAnJ1xuICAgICAgICAgIClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgeWVhciB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG4gIEBJbnB1dCgpIGRpc2FibGVQYXN0RGF0ZXMgPSBmYWxzZTtcblxuICBjdXJyZW50VmlldzogJ2RhdGUnIHwgJ21vbnRoJyB8ICd5ZWFyJyA9ICdkYXRlJztcbiAgdmlld0RhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xuICBzZWxlY3RlZERhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICB3ZWVrRGF5cyA9IFsnU3UnLCAnTW8nLCAnVHUnLCAnV2UnLCAnVGgnLCAnRnInLCAnU2EnXTtcbiAgZGF5c0luTW9udGg6IERhdGVbXSA9IFtdO1xuICBtb250aHMgPSBbJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ107XG4gIHllYXJzOiBudW1iZXJbXSA9IFtdO1xuXG4gIG5hdkJ0bkNsYXNzID0gY24oJ2gtNyB3LTcgYmctdHJhbnNwYXJlbnQgcC0wIG9wYWNpdHktNTAgaG92ZXI6b3BhY2l0eS0xMDAgYm9yZGVyIGJvcmRlci1pbnB1dCByb3VuZGVkLW1kIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHRyYW5zaXRpb24tYWxsJyk7XG5cbiAgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG4gIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIHByb3RlY3RlZCBjbiA9IGNuO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZ2VuZXJhdGVEYXlzKCk7XG4gICAgdGhpcy5nZW5lcmF0ZVllYXJzKCk7XG4gIH1cblxuICBnZW5lcmF0ZURheXMoKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBzdGFydE9mV2VlayhzdGFydE9mTW9udGgodGhpcy52aWV3RGF0ZSkpO1xuICAgIGNvbnN0IGVuZCA9IGVuZE9mV2VlayhlbmRPZk1vbnRoKHRoaXMudmlld0RhdGUpKTtcbiAgICB0aGlzLmRheXNJbk1vbnRoID0gZWFjaERheU9mSW50ZXJ2YWwoeyBzdGFydCwgZW5kIH0pO1xuICB9XG5cbiAgZ2VuZXJhdGVZZWFycygpIHtcbiAgICBjb25zdCBjdXJyZW50WWVhciA9IHRoaXMudmlld0RhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAvLyBHZW5lcmF0ZXMgYSAxNi15ZWFyIHdpbmRvdyBjZW50ZXJlZCByb3VnaGx5IG9uIGN1cnJlbnQgdmlld1xuICAgIHRoaXMueWVhcnMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxNiB9LCAoXywgaSkgPT4gY3VycmVudFllYXIgLSA2ICsgaSk7XG4gIH1cblxuICBzZXRWaWV3KHZpZXc6ICdkYXRlJyB8ICdtb250aCcgfCAneWVhcicpIHtcbiAgICB0aGlzLmN1cnJlbnRWaWV3ID0gdmlldztcbiAgICAvLyBJZiBzd2l0Y2hpbmcgdG8geWVhciB2aWV3LCBlbnN1cmUgdGhlIHllYXIgZ3JpZCBpcyBjZW50ZXJlZCBvbiBjdXJyZW50IHZpZXcgeWVhclxuICAgIGlmICh2aWV3ID09PSAneWVhcicpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVZZWFycygpO1xuICAgIH1cbiAgfVxuXG4gIHByZXYoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudFZpZXcgPT09ICdkYXRlJykge1xuICAgICAgdGhpcy52aWV3RGF0ZSA9IHN1Yk1vbnRocyh0aGlzLnZpZXdEYXRlLCAxKTtcbiAgICAgIHRoaXMuZ2VuZXJhdGVEYXlzKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAneWVhcicpIHtcbiAgICAgIHRoaXMudmlld0RhdGUgPSBzdWJZZWFycyh0aGlzLnZpZXdEYXRlLCAxNik7XG4gICAgICB0aGlzLmdlbmVyYXRlWWVhcnMoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY3VycmVudFZpZXcgPT09ICdtb250aCcpIHtcbiAgICAgIHRoaXMudmlld0RhdGUgPSBzdWJZZWFycyh0aGlzLnZpZXdEYXRlLCAxKTtcbiAgICB9XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAnZGF0ZScpIHtcbiAgICAgIHRoaXMudmlld0RhdGUgPSBhZGRNb250aHModGhpcy52aWV3RGF0ZSwgMSk7XG4gICAgICB0aGlzLmdlbmVyYXRlRGF5cygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jdXJyZW50VmlldyA9PT0gJ3llYXInKSB7XG4gICAgICB0aGlzLnZpZXdEYXRlID0gYWRkWWVhcnModGhpcy52aWV3RGF0ZSwgMTYpO1xuICAgICAgdGhpcy5nZW5lcmF0ZVllYXJzKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRWaWV3ID09PSAnbW9udGgnKSB7XG4gICAgICB0aGlzLnZpZXdEYXRlID0gYWRkWWVhcnModGhpcy52aWV3RGF0ZSwgMSk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0RGF0ZShkYXRlOiBEYXRlKSB7XG4gICAgaWYgKHRoaXMuaXNEYXRlRGlzYWJsZWQoZGF0ZSkpIHJldHVybjtcblxuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTtcbiAgICBpZiAoIWlzU2FtZU1vbnRoKGRhdGUsIHRoaXMudmlld0RhdGUpKSB7XG4gICAgICB0aGlzLnZpZXdEYXRlID0gZGF0ZTtcbiAgICAgIHRoaXMuZ2VuZXJhdGVEYXlzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5vbkNoYW5nZShkYXRlKTtcbiAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICB9XG5cbiAgc2VsZWN0TW9udGgobW9udGhJbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy52aWV3RGF0ZSA9IHNldE1vbnRoKHRoaXMudmlld0RhdGUsIG1vbnRoSW5kZXgpO1xuICAgIHRoaXMuY3VycmVudFZpZXcgPSAnZGF0ZSc7XG4gICAgdGhpcy5nZW5lcmF0ZURheXMoKTtcbiAgfVxuXG4gIHNlbGVjdFllYXIoeWVhcjogbnVtYmVyKSB7XG4gICAgdGhpcy52aWV3RGF0ZSA9IHNldFllYXIodGhpcy52aWV3RGF0ZSwgeWVhcik7XG4gICAgdGhpcy5jdXJyZW50VmlldyA9ICdkYXRlJzsgLy8gSnVtcCBzdHJhaWdodCBiYWNrIHRvIGRhdGUgdmlldyBmb3IgZWZmaWNpZW5jeVxuICAgIHRoaXMuZ2VuZXJhdGVEYXlzKCk7XG4gIH1cblxuICBnZXREYXlDbGFzcyhkYXRlOiBEYXRlKSB7XG4gICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWREYXRlICYmIGlzU2FtZURheShkYXRlLCB0aGlzLnNlbGVjdGVkRGF0ZSk7XG4gICAgY29uc3QgaXNUb2RheURhdGUgPSBpc1RvZGF5KGRhdGUpO1xuICAgIGNvbnN0IGlzT3V0c2lkZSA9ICFpc1NhbWVNb250aChkYXRlLCB0aGlzLnZpZXdEYXRlKTtcbiAgICBjb25zdCBpc0Rpc2FibGVkID0gdGhpcy5pc0RhdGVEaXNhYmxlZChkYXRlKTtcblxuICAgIHJldHVybiBjbihcbiAgICAgICdoLTkgdy05IHAtMCBmb250LW5vcm1hbCB0ZXh0LXNtIHJvdW5kZWQtbWQgdHJhbnNpdGlvbi1hbGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXInLFxuICAgICAgIWlzU2VsZWN0ZWQgJiYgIWlzRGlzYWJsZWQgJiYgJ2hvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcbiAgICAgIGlzU2VsZWN0ZWQgJiYgJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgaG92ZXI6YmctcHJpbWFyeSBob3Zlcjp0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBmb2N1czpiZy1wcmltYXJ5IGZvY3VzOnRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kJyxcbiAgICAgICFpc1NlbGVjdGVkICYmIGlzVG9kYXlEYXRlICYmICdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcsXG4gICAgICAoaXNPdXRzaWRlIHx8IGlzRGlzYWJsZWQpICYmICd0ZXh0LW11dGVkLWZvcmVncm91bmQgb3BhY2l0eS01MCcsXG4gICAgICBpc0Rpc2FibGVkICYmICdjdXJzb3Itbm90LWFsbG93ZWQnXG4gICAgKTtcbiAgfVxuXG4gIGlzRGF0ZURpc2FibGVkKGRhdGU6IERhdGUpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kaXNhYmxlUGFzdERhdGVzID8gaXNCZWZvcmUoZGF0ZSwgc3RhcnRPZkRheShuZXcgRGF0ZSgpKSkgOiBmYWxzZTtcbiAgfVxuXG4gIC8vIENWQSBJbXBsZW1lbnRhdGlvblxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XG4gICAgaWYgKG9iaikge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKG9iaik7XG4gICAgICBpZiAoIWlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGRhdGU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBkYXRlO1xuICAgICAgICB0aGlzLmdlbmVyYXRlRGF5cygpO1xuICAgICAgICB0aGlzLmdlbmVyYXRlWWVhcnMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7IHRoaXMub25DaGFuZ2UgPSBmbjsgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cbn1cbiJdfQ==
@@ -0,0 +1,94 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { cn } from './utils/cn';
4
+ import * as i0 from "@angular/core";
5
+ export class CardComponent {
6
+ class = '';
7
+ cn = cn;
8
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CardComponent, isStandalone: true, selector: "tolle-card", inputs: { class: "class" }, ngImport: i0, template: `
10
+ <div [class]="cn('rounded-xl border border-border bg-card text-card-foreground shadow', class)">
11
+ <ng-content></ng-content>
12
+ </div>
13
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }] });
14
+ }
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CardComponent, decorators: [{
16
+ type: Component,
17
+ args: [{
18
+ selector: 'tolle-card',
19
+ standalone: true,
20
+ imports: [CommonModule],
21
+ template: `
22
+ <div [class]="cn('rounded-xl border border-border bg-card text-card-foreground shadow', class)">
23
+ <ng-content></ng-content>
24
+ </div>
25
+ `,
26
+ }]
27
+ }], propDecorators: { class: [{
28
+ type: Input
29
+ }] } });
30
+ export class CardHeaderComponent {
31
+ class = '';
32
+ cn = cn;
33
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CardHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
34
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CardHeaderComponent, isStandalone: true, selector: "tolle-card-header", inputs: { class: "class" }, ngImport: i0, template: `<div [class]="cn('flex flex-col space-y-1.5 p-6', class)"><ng-content></ng-content></div>`, isInline: true });
35
+ }
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CardHeaderComponent, decorators: [{
37
+ type: Component,
38
+ args: [{
39
+ selector: 'tolle-card-header',
40
+ standalone: true,
41
+ template: `<div [class]="cn('flex flex-col space-y-1.5 p-6', class)"><ng-content></ng-content></div>`,
42
+ }]
43
+ }], propDecorators: { class: [{
44
+ type: Input
45
+ }] } });
46
+ export class CardTitleComponent {
47
+ class = '';
48
+ cn = cn;
49
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CardTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
50
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CardTitleComponent, isStandalone: true, selector: "tolle-card-title", inputs: { class: "class" }, ngImport: i0, template: `<h3 [class]="cn('font-semibold leading-none tracking-tight', class)"><ng-content></ng-content></h3>`, isInline: true });
51
+ }
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CardTitleComponent, decorators: [{
53
+ type: Component,
54
+ args: [{
55
+ selector: 'tolle-card-title',
56
+ standalone: true,
57
+ template: `<h3 [class]="cn('font-semibold leading-none tracking-tight', class)"><ng-content></ng-content></h3>`,
58
+ }]
59
+ }], propDecorators: { class: [{
60
+ type: Input
61
+ }] } });
62
+ export class CardContentComponent {
63
+ class = '';
64
+ cn = cn;
65
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CardContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
66
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CardContentComponent, isStandalone: true, selector: "tolle-card-content", inputs: { class: "class" }, ngImport: i0, template: `<div [class]="cn('p-6 pt-0', class)"><ng-content></ng-content></div>`, isInline: true });
67
+ }
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CardContentComponent, decorators: [{
69
+ type: Component,
70
+ args: [{
71
+ selector: 'tolle-card-content',
72
+ standalone: true,
73
+ template: `<div [class]="cn('p-6 pt-0', class)"><ng-content></ng-content></div>`,
74
+ }]
75
+ }], propDecorators: { class: [{
76
+ type: Input
77
+ }] } });
78
+ export class CardFooterComponent {
79
+ class = '';
80
+ cn = cn;
81
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CardFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
82
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CardFooterComponent, isStandalone: true, selector: "tolle-card-footer", inputs: { class: "class" }, ngImport: i0, template: `<div [class]="cn('flex items-center p-6 pt-0', class)"><ng-content></ng-content></div>`, isInline: true });
83
+ }
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CardFooterComponent, decorators: [{
85
+ type: Component,
86
+ args: [{
87
+ selector: 'tolle-card-footer',
88
+ standalone: true,
89
+ template: `<div [class]="cn('flex items-center p-6 pt-0', class)"><ng-content></ng-content></div>`,
90
+ }]
91
+ }], propDecorators: { class: [{
92
+ type: Input
93
+ }] } });
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL2NhcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDOztBQVloQyxNQUFNLE9BQU8sYUFBYTtJQUFZLEtBQUssR0FBRyxFQUFFLENBQUM7SUFBVyxFQUFFLEdBQUcsRUFBRSxDQUFDO3dHQUF2RCxhQUFhOzRGQUFiLGFBQWEsa0dBTmQ7Ozs7R0FJVCwyREFMUyxZQUFZOzs0RkFPWCxhQUFhO2tCQVZ6QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixRQUFRLEVBQUU7Ozs7R0FJVDtpQkFDRjs4QkFDcUMsS0FBSztzQkFBYixLQUFLOztBQU9uQyxNQUFNLE9BQU8sbUJBQW1CO0lBQVksS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUFXLEVBQUUsR0FBRyxFQUFFLENBQUM7d0dBQTdELG1CQUFtQjs0RkFBbkIsbUJBQW1CLHlHQUZwQiwyRkFBMkY7OzRGQUUxRixtQkFBbUI7a0JBTC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSwyRkFBMkY7aUJBQ3RHOzhCQUMyQyxLQUFLO3NCQUFiLEtBQUs7O0FBT3pDLE1BQU0sT0FBTyxrQkFBa0I7SUFBWSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQzt3R0FBNUQsa0JBQWtCOzRGQUFsQixrQkFBa0Isd0dBRm5CLHFHQUFxRzs7NEZBRXBHLGtCQUFrQjtrQkFMOUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLHFHQUFxRztpQkFDaEg7OEJBQzBDLEtBQUs7c0JBQWIsS0FBSzs7QUFPeEMsTUFBTSxPQUFPLG9CQUFvQjtJQUFZLEtBQUssR0FBRyxFQUFFLENBQUM7SUFBVyxFQUFFLEdBQUcsRUFBRSxDQUFDO3dHQUE5RCxvQkFBb0I7NEZBQXBCLG9CQUFvQiwwR0FGckIsc0VBQXNFOzs0RkFFckUsb0JBQW9CO2tCQUxoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxvQkFBb0I7b0JBQzlCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsc0VBQXNFO2lCQUNqRjs4QkFDNEMsS0FBSztzQkFBYixLQUFLOztBQU8xQyxNQUFNLE9BQU8sbUJBQW1CO0lBQVksS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUFXLEVBQUUsR0FBRyxFQUFFLENBQUM7d0dBQTdELG1CQUFtQjs0RkFBbkIsbUJBQW1CLHlHQUZwQix3RkFBd0Y7OzRGQUV2RixtQkFBbUI7a0JBTC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSx3RkFBd0Y7aUJBQ25HOzhCQUMyQyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtY2FyZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgW2NsYXNzXT1cImNuKCdyb3VuZGVkLXhsIGJvcmRlciBib3JkZXItYm9yZGVyIGJnLWNhcmQgdGV4dC1jYXJkLWZvcmVncm91bmQgc2hhZG93JywgY2xhc3MpXCI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIENhcmRDb21wb25lbnQgeyBASW5wdXQoKSBjbGFzcyA9ICcnOyBwcm90ZWN0ZWQgY24gPSBjbjsgfVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1jYXJkLWhlYWRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlOiBgPGRpdiBbY2xhc3NdPVwiY24oJ2ZsZXggZmxleC1jb2wgc3BhY2UteS0xLjUgcC02JywgY2xhc3MpXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PmAsXG59KVxuZXhwb3J0IGNsYXNzIENhcmRIZWFkZXJDb21wb25lbnQgeyBASW5wdXQoKSBjbGFzcyA9ICcnOyBwcm90ZWN0ZWQgY24gPSBjbjsgfVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1jYXJkLXRpdGxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGU6IGA8aDMgW2NsYXNzXT1cImNuKCdmb250LXNlbWlib2xkIGxlYWRpbmctbm9uZSB0cmFja2luZy10aWdodCcsIGNsYXNzKVwiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L2gzPmAsXG59KVxuZXhwb3J0IGNsYXNzIENhcmRUaXRsZUNvbXBvbmVudCB7IEBJbnB1dCgpIGNsYXNzID0gJyc7IHByb3RlY3RlZCBjbiA9IGNuOyB9XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLWNhcmQtY29udGVudCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlOiBgPGRpdiBbY2xhc3NdPVwiY24oJ3AtNiBwdC0wJywgY2xhc3MpXCI+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvZGl2PmAsXG59KVxuZXhwb3J0IGNsYXNzIENhcmRDb250ZW50Q29tcG9uZW50IHsgQElucHV0KCkgY2xhc3MgPSAnJzsgcHJvdGVjdGVkIGNuID0gY247IH1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtY2FyZC1mb290ZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZTogYDxkaXYgW2NsYXNzXT1cImNuKCdmbGV4IGl0ZW1zLWNlbnRlciBwLTYgcHQtMCcsIGNsYXNzKVwiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L2Rpdj5gLFxufSlcbmV4cG9ydCBjbGFzcyBDYXJkRm9vdGVyQ29tcG9uZW50IHsgQElucHV0KCkgY2xhc3MgPSAnJzsgcHJvdGVjdGVkIGNuID0gY247IH1cbiJdfQ==
@@ -0,0 +1,100 @@
1
+ import { Component, Input, forwardRef } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { cn } from './utils/cn';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ export class CheckboxComponent {
8
+ cdr;
9
+ class = '';
10
+ disabled = false;
11
+ size = 'default';
12
+ checked = false;
13
+ onChange = () => { };
14
+ onTouched = () => { };
15
+ constructor(cdr) {
16
+ this.cdr = cdr;
17
+ }
18
+ cn = cn;
19
+ get sizeClasses() {
20
+ return cn(this.size === 'xs' && 'h-3.5 w-3.5', this.size === 'sm' && 'h-4 w-4', this.size === 'default' && 'h-5 w-5', this.size === 'lg' && 'h-6 w-6');
21
+ }
22
+ toggle() {
23
+ if (this.disabled)
24
+ return;
25
+ this.checked = !this.checked;
26
+ this.onChange(this.checked);
27
+ this.onTouched();
28
+ }
29
+ // --- ControlValueAccessor ---
30
+ writeValue(value) {
31
+ this.checked = value;
32
+ this.cdr.markForCheck();
33
+ }
34
+ registerOnChange(fn) { this.onChange = fn; }
35
+ registerOnTouched(fn) { this.onTouched = fn; }
36
+ setDisabledState(isDisabled) { this.disabled = isDisabled; }
37
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CheckboxComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
38
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CheckboxComponent, isStandalone: true, selector: "tolle-checkbox", inputs: { class: "class", disabled: "disabled", size: "size" }, providers: [
39
+ {
40
+ provide: NG_VALUE_ACCESSOR,
41
+ useExisting: forwardRef(() => CheckboxComponent),
42
+ multi: true
43
+ }
44
+ ], ngImport: i0, template: `
45
+ <div
46
+ (click)="toggle()"
47
+ [class]="cn(
48
+ 'group flex h-5 w-5 shrink-0 cursor-pointer items-center justify-center rounded-sm border border-primary ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',
49
+ checked ? 'bg-primary text-primary-foreground' : 'bg-transparent',
50
+ sizeClasses,
51
+ class
52
+ )"
53
+ >
54
+ <i
55
+ *ngIf="checked"
56
+ class="ri-check-line font-bold"
57
+ [class]="size === 'xs' ? 'text-[10px]' : 'text-[14px]'"
58
+ ></i>
59
+ </div>
60
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
61
+ }
62
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CheckboxComponent, decorators: [{
63
+ type: Component,
64
+ args: [{
65
+ selector: 'tolle-checkbox',
66
+ standalone: true,
67
+ imports: [CommonModule],
68
+ providers: [
69
+ {
70
+ provide: NG_VALUE_ACCESSOR,
71
+ useExisting: forwardRef(() => CheckboxComponent),
72
+ multi: true
73
+ }
74
+ ],
75
+ template: `
76
+ <div
77
+ (click)="toggle()"
78
+ [class]="cn(
79
+ 'group flex h-5 w-5 shrink-0 cursor-pointer items-center justify-center rounded-sm border border-primary ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50',
80
+ checked ? 'bg-primary text-primary-foreground' : 'bg-transparent',
81
+ sizeClasses,
82
+ class
83
+ )"
84
+ >
85
+ <i
86
+ *ngIf="checked"
87
+ class="ri-check-line font-bold"
88
+ [class]="size === 'xs' ? 'text-[10px]' : 'text-[14px]'"
89
+ ></i>
90
+ </div>
91
+ `
92
+ }]
93
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { class: [{
94
+ type: Input
95
+ }], disabled: [{
96
+ type: Input
97
+ }], size: [{
98
+ type: Input
99
+ }] } });
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9jaGVja2JveC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7OztBQStCaEMsTUFBTSxPQUFPLGlCQUFpQjtJQVVSO0lBVFgsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsSUFBSSxHQUFtQyxTQUFTLENBQUM7SUFFMUQsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUVoQixRQUFRLEdBQVEsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0lBQ3pCLFNBQVMsR0FBUSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFFMUIsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7SUFBRyxDQUFDO0lBRXBDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFFbEIsSUFBSSxXQUFXO1FBQ2IsT0FBTyxFQUFFLENBQ1AsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksYUFBYSxFQUNuQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxTQUFTLEVBQy9CLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLFNBQVMsRUFDcEMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksU0FBUyxDQUNoQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELCtCQUErQjtJQUMvQixVQUFVLENBQUMsS0FBYztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPLElBQVUsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELGlCQUFpQixDQUFDLEVBQU8sSUFBVSxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekQsZ0JBQWdCLENBQUMsVUFBbUIsSUFBVSxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7d0dBdENoRSxpQkFBaUI7NEZBQWpCLGlCQUFpQiw2SEF6QmpCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDaEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLDBCQUNTOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JULDJEQXhCUyxZQUFZOzs0RkEwQlgsaUJBQWlCO2tCQTdCN0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsa0JBQWtCLENBQUM7NEJBQ2hELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO29CQUNELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCVDtpQkFDRjtzRkFFVSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBmb3J3YXJkUmVmLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi91dGlscy9jbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLWNoZWNrYm94JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2hlY2tib3hDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZSgpXCJcbiAgICAgIFtjbGFzc109XCJjbihcbiAgICAgICAgJ2dyb3VwIGZsZXggaC01IHctNSBzaHJpbmstMCBjdXJzb3ItcG9pbnRlciBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1zbSBib3JkZXIgYm9yZGVyLXByaW1hcnkgcmluZy1vZmZzZXQtYmFja2dyb3VuZCB0cmFuc2l0aW9uLWFsbCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuICAgICAgICBjaGVja2VkID8gJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQnIDogJ2JnLXRyYW5zcGFyZW50JyxcbiAgICAgICAgc2l6ZUNsYXNzZXMsXG4gICAgICAgIGNsYXNzXG4gICAgICApXCJcbiAgICA+XG4gICAgICA8aVxuICAgICAgICAqbmdJZj1cImNoZWNrZWRcIlxuICAgICAgICBjbGFzcz1cInJpLWNoZWNrLWxpbmUgZm9udC1ib2xkXCJcbiAgICAgICAgW2NsYXNzXT1cInNpemUgPT09ICd4cycgPyAndGV4dC1bMTBweF0nIDogJ3RleHQtWzE0cHhdJ1wiXG4gICAgICA+PC9pPlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrYm94Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBASW5wdXQoKSBjbGFzcyA9ICcnO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBzaXplOiAneHMnIHwgJ3NtJyB8ICdkZWZhdWx0JyB8ICdsZycgPSAnZGVmYXVsdCc7XG5cbiAgY2hlY2tlZCA9IGZhbHNlO1xuXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgcHJvdGVjdGVkIGNuID0gY247XG5cbiAgZ2V0IHNpemVDbGFzc2VzKCkge1xuICAgIHJldHVybiBjbihcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ3hzJyAmJiAnaC0zLjUgdy0zLjUnLFxuICAgICAgdGhpcy5zaXplID09PSAnc20nICYmICdoLTQgdy00JyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2RlZmF1bHQnICYmICdoLTUgdy01JyxcbiAgICAgIHRoaXMuc2l6ZSA9PT0gJ2xnJyAmJiAnaC02IHctNidcbiAgICApO1xuICB9XG5cbiAgdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgdGhpcy5jaGVja2VkID0gIXRoaXMuY2hlY2tlZDtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuY2hlY2tlZCk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIC8vIC0tLSBDb250cm9sVmFsdWVBY2Nlc3NvciAtLS1cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tlZCA9IHZhbHVlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7IHRoaXMub25DaGFuZ2UgPSBmbjsgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7IHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkOyB9XG59XG4iXX0=