@tolle_/tolle-ui 18.2.23 → 18.2.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/accordion-item.component.mjs +17 -5
- package/esm2022/lib/alert-dialog-dynamic.component.mjs +1 -1
- package/esm2022/lib/alert-dialog.component.mjs +48 -10
- package/esm2022/lib/alert-dialog.service.mjs +13 -2
- package/esm2022/lib/alert.component.mjs +5 -5
- package/esm2022/lib/avatar.component.mjs +30 -9
- package/esm2022/lib/badge.component.mjs +41 -15
- package/esm2022/lib/breadcrumb-link.component.mjs +5 -5
- package/esm2022/lib/button.component.mjs +14 -3
- package/esm2022/lib/calendar.component.mjs +99 -17
- package/esm2022/lib/card.component.mjs +29 -9
- package/esm2022/lib/carousel/carousel.component.mjs +19 -3
- package/esm2022/lib/checkbox.component.mjs +44 -21
- package/esm2022/lib/collapsible.component.mjs +12 -4
- package/esm2022/lib/country-selector.component.mjs +140 -20
- package/esm2022/lib/data-table.component.mjs +27 -16
- package/esm2022/lib/date-picker.component.mjs +60 -25
- package/esm2022/lib/date-range-picker.component.mjs +64 -26
- package/esm2022/lib/dropdown-item.component.mjs +19 -5
- package/esm2022/lib/dropdown-label.component.mjs +3 -3
- package/esm2022/lib/dropdown-menu.component.mjs +3 -3
- package/esm2022/lib/dropdown-separator.component.mjs +3 -3
- package/esm2022/lib/dropdown-trigger.directive.mjs +7 -3
- package/esm2022/lib/empty-state.component.mjs +3 -3
- package/esm2022/lib/hover-card.component.mjs +4 -2
- package/esm2022/lib/input.component.mjs +7 -5
- package/esm2022/lib/label.component.mjs +2 -2
- package/esm2022/lib/masked-input.component.mjs +3 -3
- package/esm2022/lib/modal.component.mjs +58 -22
- package/esm2022/lib/modal.service.mjs +13 -1
- package/esm2022/lib/multi-select.component.mjs +228 -20
- package/esm2022/lib/otp.component.mjs +6 -3
- package/esm2022/lib/pagination.component.mjs +19 -9
- package/esm2022/lib/progress.component.mjs +8 -5
- package/esm2022/lib/radio-group.component.mjs +51 -3
- package/esm2022/lib/radio-item.component.mjs +46 -8
- package/esm2022/lib/radio-service.mjs +60 -1
- package/esm2022/lib/range-calendar.component.mjs +317 -98
- package/esm2022/lib/resizable-panel.component.mjs +5 -4
- package/esm2022/lib/scroll-area.component.mjs +5 -5
- package/esm2022/lib/segment.component.mjs +73 -7
- package/esm2022/lib/select-item.component.mjs +20 -2
- package/esm2022/lib/select-separator.component.mjs +3 -3
- package/esm2022/lib/select.component.mjs +221 -14
- package/esm2022/lib/separator.component.mjs +12 -6
- package/esm2022/lib/sheet-ref.mjs +8 -1
- package/esm2022/lib/sheet-wrapper.component.mjs +27 -11
- package/esm2022/lib/sheet.component.mjs +57 -16
- package/esm2022/lib/sheet.service.mjs +5 -1
- package/esm2022/lib/sidebar.component.mjs +73 -15
- package/esm2022/lib/skeleton.component.mjs +19 -5
- package/esm2022/lib/switch.component.mjs +59 -53
- package/esm2022/lib/tabs.component.mjs +75 -13
- package/esm2022/lib/tag-input.component.mjs +6 -3
- package/esm2022/lib/textarea.component.mjs +9 -7
- package/esm2022/lib/theme.service.mjs +114 -138
- package/esm2022/lib/toaster.component.mjs +19 -9
- package/esm2022/lib/toggle-group.component.mjs +76 -4
- package/esm2022/lib/tolle-config.mjs +1 -1
- package/esm2022/lib/tooltip.directive.mjs +41 -17
- package/esm2022/lib/utils/color.mjs +324 -0
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/tolle-ui.mjs +2715 -682
- package/fesm2022/tolle-ui.mjs.map +1 -1
- package/lib/alert-dialog.component.d.ts +10 -1
- package/lib/avatar.component.d.ts +16 -3
- package/lib/badge.component.d.ts +17 -5
- package/lib/button.component.d.ts +8 -1
- package/lib/calendar.component.d.ts +21 -3
- package/lib/card.component.d.ts +6 -0
- package/lib/carousel/carousel.component.d.ts +1 -0
- package/lib/checkbox.component.d.ts +12 -4
- package/lib/country-selector.component.d.ts +11 -2
- package/lib/date-picker.component.d.ts +2 -1
- package/lib/date-range-picker.component.d.ts +5 -2
- package/lib/dropdown-item.component.d.ts +4 -2
- package/lib/dropdown-trigger.directive.d.ts +1 -1
- package/lib/modal.component.d.ts +6 -0
- package/lib/multi-select.component.d.ts +20 -0
- package/lib/otp.component.d.ts +1 -0
- package/lib/progress.component.d.ts +1 -0
- package/lib/radio-group.component.d.ts +8 -0
- package/lib/radio-item.component.d.ts +10 -4
- package/lib/radio-service.d.ts +29 -0
- package/lib/range-calendar.component.d.ts +33 -4
- package/lib/segment.component.d.ts +13 -0
- package/lib/select-item.component.d.ts +4 -1
- package/lib/select.component.d.ts +20 -0
- package/lib/separator.component.d.ts +2 -0
- package/lib/sheet-wrapper.component.d.ts +4 -0
- package/lib/sheet.component.d.ts +10 -1
- package/lib/sidebar.component.d.ts +2 -0
- package/lib/skeleton.component.d.ts +9 -3
- package/lib/switch.component.d.ts +13 -20
- package/lib/tabs.component.d.ts +11 -1
- package/lib/theme.service.d.ts +21 -6
- package/lib/toaster.component.d.ts +2 -2
- package/lib/toggle-group.component.d.ts +20 -2
- package/lib/tolle-config.d.ts +8 -0
- package/lib/tooltip.directive.d.ts +3 -0
- package/lib/utils/color.d.ts +87 -0
- package/package.json +4 -1
- package/preset.js +28 -0
- package/public-api.d.ts +1 -0
- package/registry/docs-content.json +4214 -0
- package/registry/llms-full.txt +1599 -0
- package/registry/llms.txt +83 -0
- package/registry/manifest.json +4925 -0
- package/registry/r/accordion-item.json +21 -0
- package/registry/r/accordion.json +23 -0
- package/registry/r/alert-dialog-dynamic.json +31 -0
- package/registry/r/alert-dialog.json +26 -0
- package/registry/r/alert.json +23 -0
- package/registry/r/aspect-ratio.json +21 -0
- package/registry/r/avatar-fallback.json +16 -0
- package/registry/r/avatar.json +23 -0
- package/registry/r/badge.json +23 -0
- package/registry/r/breadcrumb-item.json +16 -0
- package/registry/r/breadcrumb-link.json +16 -0
- package/registry/r/breadcrumb-separator.json +16 -0
- package/registry/r/breadcrumb.json +21 -0
- package/registry/r/button-group.json +21 -0
- package/registry/r/button.json +23 -0
- package/registry/r/calendar.json +23 -0
- package/registry/r/card.json +21 -0
- package/registry/r/carousel.json +18 -0
- package/registry/r/checkbox.json +23 -0
- package/registry/r/collapsible.json +21 -0
- package/registry/r/context-menu-trigger.json +23 -0
- package/registry/r/context-menu.json +28 -0
- package/registry/r/country-selector.json +31 -0
- package/registry/r/data-table.json +38 -0
- package/registry/r/date-picker.json +27 -0
- package/registry/r/date-range-picker.json +32 -0
- package/registry/r/dropdown-item.json +21 -0
- package/registry/r/dropdown-label.json +16 -0
- package/registry/r/dropdown-menu.json +16 -0
- package/registry/r/dropdown-separator.json +16 -0
- package/registry/r/dropdown-trigger.json +20 -0
- package/registry/r/empty-state.json +23 -0
- package/registry/r/hover-card.json +23 -0
- package/registry/r/input.json +21 -0
- package/registry/r/label.json +21 -0
- package/registry/r/masked-input.json +21 -0
- package/registry/r/modal.json +36 -0
- package/registry/r/multi-select.json +33 -0
- package/registry/r/otp-group.json +16 -0
- package/registry/r/otp-slot.json +21 -0
- package/registry/r/otp.json +21 -0
- package/registry/r/pagination.json +32 -0
- package/registry/r/phone-number-input.json +34 -0
- package/registry/r/popover-content.json +21 -0
- package/registry/r/popover.json +18 -0
- package/registry/r/progress.json +21 -0
- package/registry/r/radio-group.json +26 -0
- package/registry/r/radio-item.json +26 -0
- package/registry/r/range-calendar.json +28 -0
- package/registry/r/resizable-panel-item.json +23 -0
- package/registry/r/resizable-panel.json +23 -0
- package/registry/r/resizable.json +21 -0
- package/registry/r/scroll-area.json +21 -0
- package/registry/r/segment.json +21 -0
- package/registry/r/select-group.json +21 -0
- package/registry/r/select-item.json +26 -0
- package/registry/r/select-separator.json +21 -0
- package/registry/r/select.json +31 -0
- package/registry/r/separator.json +21 -0
- package/registry/r/sheet-wrapper.json +31 -0
- package/registry/r/sheet.json +21 -0
- package/registry/r/sidebar.json +21 -0
- package/registry/r/skeleton.json +23 -0
- package/registry/r/slider.json +21 -0
- package/registry/r/switch.json +23 -0
- package/registry/r/tabs.json +23 -0
- package/registry/r/tag-input.json +25 -0
- package/registry/r/textarea.json +21 -0
- package/registry/r/toaster.json +26 -0
- package/registry/r/toggle-group.json +25 -0
- package/registry/r/toggle.json +23 -0
- package/registry/r/tolle-cell.json +16 -0
- package/registry/r/tooltip.json +23 -0
- package/registry/registry.json +1540 -0
- package/theme.css +60 -5
|
@@ -27,7 +27,7 @@ export class PaginationComponent {
|
|
|
27
27
|
initialized = false;
|
|
28
28
|
cd = inject(ChangeDetectorRef);
|
|
29
29
|
cn = cn;
|
|
30
|
-
navBtnClass = 'h-8 w-8 p-0 flex items-center justify-center rounded-md border border-input bg-background hover:bg-accent hover:text-accent-foreground disabled:opacity-50 disabled:cursor-not-allowed';
|
|
30
|
+
navBtnClass = 'h-8 w-8 p-0 flex items-center justify-center rounded-md border border-input bg-background hover:bg-accent hover:text-accent-foreground disabled:opacity-50 disabled:cursor-not-allowed focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 cursor-pointer';
|
|
31
31
|
ngOnInit() {
|
|
32
32
|
if (this.pageSizeOptions.length === 0) {
|
|
33
33
|
this.pageSizeOptions = [10, 20, 30, 50];
|
|
@@ -115,6 +115,7 @@ export class PaginationComponent {
|
|
|
115
115
|
}
|
|
116
116
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
117
117
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: PaginationComponent, isStandalone: true, selector: "tolle-pagination", inputs: { class: "class", showPageLinks: "showPageLinks", showPageOptions: "showPageOptions", showCurrentPageInfo: "showCurrentPageInfo", currentPageInfoTemplate: "currentPageInfoTemplate", totalRecords: "totalRecords", currentPageSize: "currentPageSize", currentPage: "currentPage", pageSizeOptions: "pageSizeOptions" }, outputs: { onPageNumberChange: "onPageNumberChange", onPageSizeChange: "onPageSizeChange" }, usesOnChanges: true, ngImport: i0, template: `
|
|
118
|
+
<nav role="navigation" aria-label="pagination">
|
|
118
119
|
<div [class]="cn('flex items-center justify-between px-2 py-4', class)">
|
|
119
120
|
|
|
120
121
|
<div *ngIf="showCurrentPageInfo" class="text-sm text-muted-foreground">
|
|
@@ -151,16 +152,18 @@ export class PaginationComponent {
|
|
|
151
152
|
<button
|
|
152
153
|
(click)="previousPage()"
|
|
153
154
|
[disabled]="currentPage === 1"
|
|
155
|
+
aria-label="Go to previous page"
|
|
154
156
|
[class]="navBtnClass"
|
|
155
157
|
>
|
|
156
|
-
<i class="ri-arrow-left-s-line"></i>
|
|
158
|
+
<i aria-hidden="true" class="ri-arrow-left-s-line"></i>
|
|
157
159
|
</button>
|
|
158
160
|
|
|
159
161
|
<button
|
|
160
162
|
*ngFor="let page of displayPageIndex"
|
|
161
163
|
(click)="selectPage(page)"
|
|
164
|
+
[attr.aria-current]="currentPage === page ? 'page' : null"
|
|
162
165
|
[class]="cn(
|
|
163
|
-
'h-8 w-8 text-sm rounded-md flex items-center justify-center transition-colors',
|
|
166
|
+
'h-8 w-8 text-sm rounded-md flex items-center justify-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 cursor-pointer',
|
|
164
167
|
currentPage === page
|
|
165
168
|
? 'bg-primary text-primary-foreground font-medium'
|
|
166
169
|
: 'hover:bg-accent hover:text-accent-foreground'
|
|
@@ -172,15 +175,17 @@ export class PaginationComponent {
|
|
|
172
175
|
<button
|
|
173
176
|
(click)="nextPage()"
|
|
174
177
|
[disabled]="currentPage === totalPages || totalPages === 0"
|
|
178
|
+
aria-label="Go to next page"
|
|
175
179
|
[class]="navBtnClass"
|
|
176
180
|
>
|
|
177
|
-
<i class="ri-arrow-right-s-line"></i>
|
|
181
|
+
<i aria-hidden="true" class="ri-arrow-right-s-line"></i>
|
|
178
182
|
</button>
|
|
179
183
|
</div>
|
|
180
184
|
</div>
|
|
181
185
|
</div>
|
|
182
186
|
</div>
|
|
183
|
-
|
|
187
|
+
</nav>
|
|
188
|
+
`, 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: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: SelectComponent, selector: "tolle-select", inputs: ["placeholder", "class", "disabled", "searchable", "size", "readonly"] }, { kind: "component", type: SelectItemComponent, selector: "tolle-select-item", inputs: ["value", "class", "selected", "disabled", "multiSelect", "id", "active"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
184
189
|
}
|
|
185
190
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PaginationComponent, decorators: [{
|
|
186
191
|
type: Component,
|
|
@@ -189,6 +194,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
189
194
|
standalone: true,
|
|
190
195
|
imports: [CommonModule, FormsModule, SelectComponent, SelectItemComponent],
|
|
191
196
|
template: `
|
|
197
|
+
<nav role="navigation" aria-label="pagination">
|
|
192
198
|
<div [class]="cn('flex items-center justify-between px-2 py-4', class)">
|
|
193
199
|
|
|
194
200
|
<div *ngIf="showCurrentPageInfo" class="text-sm text-muted-foreground">
|
|
@@ -225,16 +231,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
225
231
|
<button
|
|
226
232
|
(click)="previousPage()"
|
|
227
233
|
[disabled]="currentPage === 1"
|
|
234
|
+
aria-label="Go to previous page"
|
|
228
235
|
[class]="navBtnClass"
|
|
229
236
|
>
|
|
230
|
-
<i class="ri-arrow-left-s-line"></i>
|
|
237
|
+
<i aria-hidden="true" class="ri-arrow-left-s-line"></i>
|
|
231
238
|
</button>
|
|
232
239
|
|
|
233
240
|
<button
|
|
234
241
|
*ngFor="let page of displayPageIndex"
|
|
235
242
|
(click)="selectPage(page)"
|
|
243
|
+
[attr.aria-current]="currentPage === page ? 'page' : null"
|
|
236
244
|
[class]="cn(
|
|
237
|
-
'h-8 w-8 text-sm rounded-md flex items-center justify-center transition-colors',
|
|
245
|
+
'h-8 w-8 text-sm rounded-md flex items-center justify-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 cursor-pointer',
|
|
238
246
|
currentPage === page
|
|
239
247
|
? 'bg-primary text-primary-foreground font-medium'
|
|
240
248
|
: 'hover:bg-accent hover:text-accent-foreground'
|
|
@@ -246,14 +254,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
246
254
|
<button
|
|
247
255
|
(click)="nextPage()"
|
|
248
256
|
[disabled]="currentPage === totalPages || totalPages === 0"
|
|
257
|
+
aria-label="Go to next page"
|
|
249
258
|
[class]="navBtnClass"
|
|
250
259
|
>
|
|
251
|
-
<i class="ri-arrow-right-s-line"></i>
|
|
260
|
+
<i aria-hidden="true" class="ri-arrow-right-s-line"></i>
|
|
252
261
|
</button>
|
|
253
262
|
</div>
|
|
254
263
|
</div>
|
|
255
264
|
</div>
|
|
256
265
|
</div>
|
|
266
|
+
</nav>
|
|
257
267
|
`,
|
|
258
268
|
changeDetection: ChangeDetectionStrategy.OnPush
|
|
259
269
|
}]
|
|
@@ -280,4 +290,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
280
290
|
}], onPageSizeChange: [{
|
|
281
291
|
type: Output
|
|
282
292
|
}] } });
|
|
283
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL3BhZ2luYXRpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQTJFNUQsTUFBTSxPQUFPLG1CQUFtQjtJQUNyQixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsYUFBYSxHQUFHLElBQUksQ0FBQztJQUNyQixlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLG1CQUFtQixHQUFHLElBQUksQ0FBQztJQUMzQix1QkFBdUIsQ0FBVTtJQUVqQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDckIsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUNoQixlQUFlLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUU1QyxrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBQ2hELGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFFeEQsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNmLEtBQUssR0FBRyxDQUFDLENBQUM7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RSxtQkFBbUIsQ0FBQztvQkFDMUUsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrRVQ7b0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQ2hEOzhCQUVVLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUVJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi91dGlscy9jbic7XG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1NlbGVjdENvbXBvbmVudH0gZnJvbSAnLi9zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7U2VsZWN0SXRlbUNvbXBvbmVudH0gZnJvbSAnLi9zZWxlY3QtaXRlbS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1wYWdpbmF0aW9uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFNlbGVjdENvbXBvbmVudCwgU2VsZWN0SXRlbUNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBbY2xhc3NdPVwiY24oJ2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweC0yIHB5LTQnLCBjbGFzcylcIj5cblxuICAgICAgPGRpdiAqbmdJZj1cInNob3dDdXJyZW50UGFnZUluZm9cIiBjbGFzcz1cInRleHQtc20gdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXJyZW50UGFnZUluZm9UZW1wbGF0ZTsgZWxzZSBkZWZhdWx0UmVwb3J0XCI+XG4gICAgICAgICAge3sgcGFnZVJlcG9ydCB9fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0UmVwb3J0PlxuICAgICAgICAgIFNob3dpbmcge3sgZmlyc3QgfX0gdG8ge3sgbGFzdCB9fSBvZiB7eyB0b3RhbFJlY29yZHMgfX0gZW50cmllc1xuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTYgbGc6c3BhY2UteC04XCI+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cInNob3dQYWdlT3B0aW9uc1wiIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC0yXCI+XG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+Um93cyBwZXIgcGFnZTwvcD5cbiAgICAgICAgICA8dG9sbGUtc2VsZWN0XG4gICAgICAgICAgICBjbGFzcz1cInctWzcwcHhdXCJcbiAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICBbbmdNb2RlbF09XCJjdXJyZW50UGFnZVNpemVcIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8dG9sbGUtc2VsZWN0LWl0ZW0gKm5nRm9yPVwibGV0IG9wdCBvZiBwYWdlU2l6ZU9wdGlvbnNcIiBbdmFsdWVdPVwib3B0XCI+XG4gICAgICAgICAgICAgIHt7IG9wdCB9fVxuICAgICAgICAgICAgPC90b2xsZS1zZWxlY3QtaXRlbT5cbiAgICAgICAgICA8L3RvbGxlLXNlbGVjdD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhc2hvd1BhZ2VMaW5rc1wiIGNsYXNzPVwiZmxleCB3LVsxMDBweF0gaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtc20gZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgIFBhZ2Uge3sgY3VycmVudFBhZ2UgfX0gb2Yge3sgdG90YWxQYWdlcyB9fVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dQYWdlTGlua3NcIiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMVwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwicHJldmlvdXNQYWdlKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IDFcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwibmF2QnRuQ2xhc3NcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cInJpLWFycm93LWxlZnQtcy1saW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHBhZ2Ugb2YgZGlzcGxheVBhZ2VJbmRleFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQYWdlKHBhZ2UpXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICdoLTggdy04IHRleHQtc20gcm91bmRlZC1tZCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAgICAgICAgICAgY3VycmVudFBhZ2UgPT09IHBhZ2VcbiAgICAgICAgICAgICAgICAgID8gJ2JnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgZm9udC1tZWRpdW0nXG4gICAgICAgICAgICAgICAgICA6ICdob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCdcbiAgICAgICAgICAgICAgKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IHBhZ2UgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJuZXh0UGFnZSgpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSB0b3RhbFBhZ2VzIHx8IHRvdGFsUGFnZXMgPT09IDBcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwibmF2QnRuQ2xhc3NcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cInJpLWFycm93LXJpZ2h0LXMtbGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQYWdpbmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBjbGFzcyA9ICcnO1xuICBASW5wdXQoKSBzaG93UGFnZUxpbmtzID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd1BhZ2VPcHRpb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0N1cnJlbnRQYWdlSW5mbyA9IHRydWU7XG4gIEBJbnB1dCgpIGN1cnJlbnRQYWdlSW5mb1RlbXBsYXRlPzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkcyA9IDA7XG4gIEBJbnB1dCgpIGN1cnJlbnRQYWdlU2l6ZSA9IDEwO1xuICBASW5wdXQoKSBjdXJyZW50UGFnZSA9IDE7XG4gIEBJbnB1dCgpIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbMTAsIDIwLCAzMCwgNTBdO1xuXG4gIEBPdXRwdXQoKSBvblBhZ2VOdW1iZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIG9uUGFnZVNpemVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICB0b3RhbFBhZ2VzID0gMDtcbiAgZmlyc3QgPSAwO1xuICBsYXN0ID0gMDtcbiAgZGlzcGxheVBhZ2VJbmRleDogbnVtYmVyW10gPSBbXTtcbiAgcGFnZVJlcG9ydCA9ICcnO1xuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjZCA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByb3RlY3RlZCBjbiA9IGNuO1xuXG4gIG5hdkJ0bkNsYXNzID0gJ2gtOCB3LTggcC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkJztcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYWdlU2l6ZU9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IFsxMCwgMjAsIDMwLCA1MF07XG4gICAgfVxuICAgIHRoaXMuaW5pdGlhbGl6ZVBhZ2luYXRpb24oKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAvLyBPbmx5IHJlLWluaXQgaWYgbWVhbmluZ2Z1bCBkYXRhIGNoYW5nZXNcbiAgICBpZiAoY2hhbmdlc1sndG90YWxSZWNvcmRzJ10gfHwgY2hhbmdlc1snY3VycmVudFBhZ2UnXSB8fCBjaGFuZ2VzWydjdXJyZW50UGFnZVNpemUnXSkge1xuICAgICAgdGhpcy5pbml0aWFsaXplUGFnaW5hdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVBhZ2luYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5jYWxjUGFnaW5hdGlvbigpO1xuICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgbmV4dFBhZ2UoKSB7XG4gICAgaWYgKHRoaXMudG90YWxQYWdlcyA+IHRoaXMuY3VycmVudFBhZ2UpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UrKztcbiAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByZXZpb3VzUGFnZSgpIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IDEpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UtLTtcbiAgICAgIHRoaXMuZW1pdENoYW5nZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdFBhZ2UocGFnZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPT09IHBhZ2UpIHJldHVybjtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZTtcbiAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgfVxuXG4gIHNpemVDaGFuZ2Uoc2l6ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZVNpemUgPSBzaXplO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxOyAvLyBSZXNldCB0byBwYWdlIDEgb24gc2l6ZSBjaGFuZ2VcbiAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbGNQYWdpbmF0aW9uKCk7XG4gICAgdGhpcy5vblBhZ2VOdW1iZXJDaGFuZ2UuZW1pdCh0aGlzLmN1cnJlbnRQYWdlKTtcbiAgICB0aGlzLm9uUGFnZVNpemVDaGFuZ2UuZW1pdCh0aGlzLmN1cnJlbnRQYWdlU2l6ZSk7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGNhbGNQYWdpbmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMudG90YWxQYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsUmVjb3JkcyAvIHRoaXMuY3VycmVudFBhZ2VTaXplKSB8fCAwO1xuXG4gICAgLy8gQm91bmRzIGNoZWNrXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0aGlzLnRvdGFsUGFnZXMgJiYgdGhpcy50b3RhbFBhZ2VzID4gMCkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMudG90YWxQYWdlcztcbiAgICB9XG5cbiAgICB0aGlzLmZpcnN0ID0gdGhpcy50b3RhbFJlY29yZHMgPT09IDAgPyAwIDogKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMuY3VycmVudFBhZ2VTaXplICsgMTtcbiAgICB0aGlzLmxhc3QgPSBNYXRoLm1pbih0aGlzLnRvdGFsUmVjb3JkcywgdGhpcy5jdXJyZW50UGFnZSAqIHRoaXMuY3VycmVudFBhZ2VTaXplKTtcblxuICAgIC8vIENhbGN1bGF0ZSBTbGlkaW5nIFdpbmRvdyBmb3IgUGFnZSBOdW1iZXJzIChNYXggNSB2aXNpYmxlKVxuICAgIGNvbnN0IHBhZ2VzOiBudW1iZXJbXSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IHRoaXMudG90YWxQYWdlcyB9LCAoXywgaSkgPT4gaSArIDEpO1xuXG4gICAgaWYgKHRoaXMudG90YWxQYWdlcyA8PSA1KSB7XG4gICAgICB0aGlzLmRpc3BsYXlQYWdlSW5kZXggPSBwYWdlcztcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHN0YXJ0ID0gTWF0aC5tYXgoMCwgdGhpcy5jdXJyZW50UGFnZSAtIDMpO1xuICAgICAgbGV0IGVuZCA9IHN0YXJ0ICsgNTtcblxuICAgICAgaWYgKGVuZCA+IHRoaXMudG90YWxQYWdlcykge1xuICAgICAgICBlbmQgPSB0aGlzLnRvdGFsUGFnZXM7XG4gICAgICAgIHN0YXJ0ID0gZW5kIC0gNTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZGlzcGxheVBhZ2VJbmRleCA9IHBhZ2VzLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8vIFRlbXBsYXRlIFBhcnNpbmdcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZUluZm9UZW1wbGF0ZSkge1xuICAgICAgdGhpcy5wYWdlUmVwb3J0ID0gdGhpcy5jdXJyZW50UGFnZUluZm9UZW1wbGF0ZS5yZXBsYWNlKFxuICAgICAgICAve2ZpcnN0fXx7bGFzdH18e3RvdGFsUmVjb3Jkc318e2N1cnJlbnRQYWdlfXx7Y3VycmVudFBhZ2VTaXplfXx7dG90YWxQYWdlc30vZyxcbiAgICAgICAgKG1hdGNoKSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChtYXRjaCkge1xuICAgICAgICAgICAgY2FzZSAne2ZpcnN0fSc6IHJldHVybiBgJHt0aGlzLmZpcnN0fWA7XG4gICAgICAgICAgICBjYXNlICd7bGFzdH0nOiByZXR1cm4gYCR7dGhpcy5sYXN0fWA7XG4gICAgICAgICAgICBjYXNlICd7dG90YWxSZWNvcmRzfSc6IHJldHVybiBgJHt0aGlzLnRvdGFsUmVjb3Jkc31gO1xuICAgICAgICAgICAgY2FzZSAne3RvdGFsUGFnZXN9JzogcmV0dXJuIGAke3RoaXMudG90YWxQYWdlc31gO1xuICAgICAgICAgICAgY2FzZSAne2N1cnJlbnRQYWdlfSc6IHJldHVybiBgJHt0aGlzLmN1cnJlbnRQYWdlfWA7XG4gICAgICAgICAgICBjYXNlICd7Y3VycmVudFBhZ2VTaXplfSc6IHJldHVybiBgJHt0aGlzLmN1cnJlbnRQYWdlU2l6ZX1gO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
293
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL3BhZ2luYXRpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQWdGNUQsTUFBTSxPQUFPLG1CQUFtQjtJQUNyQixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsYUFBYSxHQUFHLElBQUksQ0FBQztJQUNyQixlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLG1CQUFtQixHQUFHLElBQUksQ0FBQztJQUMzQix1QkFBdUIsQ0FBVTtJQUVqQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDckIsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUNoQixlQUFlLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUU1QyxrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBQ2hELGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFFeEQsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNmLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDVixJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQ1QsZ0JBQWdCLEdBQWEsRUFBRSxDQUFDO0lBQ2hDLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFFUixXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLEVBQUUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM3QixFQUFFLEdBQUcsRUFBRSxDQUFDO0lBRWxCLFdBQVcsR0FBRywyU0FBMlMsQ0FBQztJQUUxVCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsMENBQTBDO1FBQzFDLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQ3BGLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQzFCLENBQUM7UUFDRCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVk7UUFDckIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUk7WUFBRSxPQUFPO1FBQ3RDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVk7UUFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7UUFDdkQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxVQUFVO1FBQ2hCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFM0UsZUFBZTtRQUNmLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3JDLENBQUM7UUFFRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztRQUM3RixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVqRiw0REFBNEQ7UUFDNUQsTUFBTSxLQUFLLEdBQWEsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFakYsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzlDLElBQUksR0FBRyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7WUFFcEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUMxQixHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDdEIsS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDbEIsQ0FBQztZQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBRUQsbUJBQW1CO1FBQ25CLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUNwRCw2RUFBNkUsRUFDN0UsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDUixRQUFRLEtBQUssRUFBRSxDQUFDO29CQUNkLEtBQUssU0FBUyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDdkMsS0FBSyxRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNyQyxLQUFLLGdCQUFnQixDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDckQsS0FBSyxjQUFjLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNqRCxLQUFLLGVBQWUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ25ELEtBQUssbUJBQW1CLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUMzRCxPQUFPLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQztnQkFDeEIsQ0FBQztZQUNILENBQUMsQ0FDRixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7d0dBOUhVLG1CQUFtQjs0RkFBbkIsbUJBQW1CLGdnQkExRXBCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVFVCwyREF4RVMsWUFBWSwrUEFBRSxXQUFXLCtWQUFFLGVBQWUseUlBQUUsbUJBQW1COzs0RkEyRTlELG1CQUFtQjtrQkE5RS9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixDQUFDO29CQUMxRSxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUVUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs4QkFFVSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFSSxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtTZWxlY3RDb21wb25lbnR9IGZyb20gJy4vc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQge1NlbGVjdEl0ZW1Db21wb25lbnR9IGZyb20gJy4vc2VsZWN0LWl0ZW0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtcGFnaW5hdGlvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBTZWxlY3RDb21wb25lbnQsIFNlbGVjdEl0ZW1Db21wb25lbnRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuYXYgcm9sZT1cIm5hdmlnYXRpb25cIiBhcmlhLWxhYmVsPVwicGFnaW5hdGlvblwiPlxuICAgIDxkaXYgW2NsYXNzXT1cImNuKCdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtMiBweS00JywgY2xhc3MpXCI+XG5cbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93Q3VycmVudFBhZ2VJbmZvXCIgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3VycmVudFBhZ2VJbmZvVGVtcGxhdGU7IGVsc2UgZGVmYXVsdFJlcG9ydFwiPlxuICAgICAgICAgIHt7IHBhZ2VSZXBvcnQgfX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFJlcG9ydD5cbiAgICAgICAgICBTaG93aW5nIHt7IGZpcnN0IH19IHRvIHt7IGxhc3QgfX0gb2Yge3sgdG90YWxSZWNvcmRzIH19IGVudHJpZXNcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC02IGxnOnNwYWNlLXgtOFwiPlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzaG93UGFnZU9wdGlvbnNcIiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMlwiPlxuICAgICAgICAgIDxwIGNsYXNzPVwidGV4dC1zbSBmb250LW1lZGl1bVwiPlJvd3MgcGVyIHBhZ2U8L3A+XG4gICAgICAgICAgPHRvbGxlLXNlbGVjdFxuICAgICAgICAgICAgY2xhc3M9XCJ3LVs3MHB4XVwiXG4gICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiY3VycmVudFBhZ2VTaXplXCJcbiAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNpemVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHRvbGxlLXNlbGVjdC1pdGVtICpuZ0Zvcj1cImxldCBvcHQgb2YgcGFnZVNpemVPcHRpb25zXCIgW3ZhbHVlXT1cIm9wdFwiPlxuICAgICAgICAgICAgICB7eyBvcHQgfX1cbiAgICAgICAgICAgIDwvdG9sbGUtc2VsZWN0LWl0ZW0+XG4gICAgICAgICAgPC90b2xsZS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTJcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNob3dQYWdlTGlua3NcIiBjbGFzcz1cImZsZXggdy1bMTAwcHhdIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICBQYWdlIHt7IGN1cnJlbnRQYWdlIH19IG9mIHt7IHRvdGFsUGFnZXMgfX1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93UGFnZUxpbmtzXCIgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTFcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlID09PSAxXCJcbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkdvIHRvIHByZXZpb3VzIHBhZ2VcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwibmF2QnRuQ2xhc3NcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cInJpLWFycm93LWxlZnQtcy1saW5lXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHBhZ2Ugb2YgZGlzcGxheVBhZ2VJbmRleFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQYWdlKHBhZ2UpXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cImN1cnJlbnRQYWdlID09PSBwYWdlID8gJ3BhZ2UnIDogbnVsbFwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJjbihcbiAgICAgICAgICAgICAgICAnaC04IHctOCB0ZXh0LXNtIHJvdW5kZWQtbWQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGN1cnNvci1wb2ludGVyJyxcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZSA9PT0gcGFnZVxuICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBmb250LW1lZGl1bSdcbiAgICAgICAgICAgICAgICAgIDogJ2hvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJ1xuICAgICAgICAgICAgICApXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgcGFnZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRQYWdlKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFBhZ2UgPT09IHRvdGFsUGFnZXMgfHwgdG90YWxQYWdlcyA9PT0gMFwiXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJHbyB0byBuZXh0IHBhZ2VcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwibmF2QnRuQ2xhc3NcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIiBjbGFzcz1cInJpLWFycm93LXJpZ2h0LXMtbGluZVwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwvbmF2PlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBQYWdpbmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBjbGFzcyA9ICcnO1xuICBASW5wdXQoKSBzaG93UGFnZUxpbmtzID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd1BhZ2VPcHRpb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0N1cnJlbnRQYWdlSW5mbyA9IHRydWU7XG4gIEBJbnB1dCgpIGN1cnJlbnRQYWdlSW5mb1RlbXBsYXRlPzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkcyA9IDA7XG4gIEBJbnB1dCgpIGN1cnJlbnRQYWdlU2l6ZSA9IDEwO1xuICBASW5wdXQoKSBjdXJyZW50UGFnZSA9IDE7XG4gIEBJbnB1dCgpIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbMTAsIDIwLCAzMCwgNTBdO1xuXG4gIEBPdXRwdXQoKSBvblBhZ2VOdW1iZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIG9uUGFnZVNpemVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICB0b3RhbFBhZ2VzID0gMDtcbiAgZmlyc3QgPSAwO1xuICBsYXN0ID0gMDtcbiAgZGlzcGxheVBhZ2VJbmRleDogbnVtYmVyW10gPSBbXTtcbiAgcGFnZVJlcG9ydCA9ICcnO1xuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjZCA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByb3RlY3RlZCBjbiA9IGNuO1xuXG4gIG5hdkJ0bkNsYXNzID0gJ2gtOCB3LTggcC0wIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtbWQgYm9yZGVyIGJvcmRlci1pbnB1dCBiZy1iYWNrZ3JvdW5kIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIGRpc2FibGVkOm9wYWNpdHktNTAgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBjdXJzb3ItcG9pbnRlcic7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSBbMTAsIDIwLCAzMCwgNTBdO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxpemVQYWdpbmF0aW9uKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gT25seSByZS1pbml0IGlmIG1lYW5pbmdmdWwgZGF0YSBjaGFuZ2VzXG4gICAgaWYgKGNoYW5nZXNbJ3RvdGFsUmVjb3JkcyddIHx8IGNoYW5nZXNbJ2N1cnJlbnRQYWdlJ10gfHwgY2hhbmdlc1snY3VycmVudFBhZ2VTaXplJ10pIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVBhZ2luYXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVQYWdpbmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuY2FsY1BhZ2luYXRpb24oKTtcbiAgICBpZiAoIXRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5leHRQYWdlKCkge1xuICAgIGlmICh0aGlzLnRvdGFsUGFnZXMgPiB0aGlzLmN1cnJlbnRQYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlKys7XG4gICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICBwcmV2aW91c1BhZ2UoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiAxKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLS07XG4gICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RQYWdlKHBhZ2U6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID09PSBwYWdlKSByZXR1cm47XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2U7XG4gICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gIH1cblxuICBzaXplQ2hhbmdlKHNpemU6IG51bWJlcikge1xuICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gc2l6ZTtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTsgLy8gUmVzZXQgdG8gcGFnZSAxIG9uIHNpemUgY2hhbmdlXG4gICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgdGhpcy5jYWxjUGFnaW5hdGlvbigpO1xuICAgIHRoaXMub25QYWdlTnVtYmVyQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50UGFnZSk7XG4gICAgdGhpcy5vblBhZ2VTaXplQ2hhbmdlLmVtaXQodGhpcy5jdXJyZW50UGFnZVNpemUpO1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjUGFnaW5hdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy50b3RhbFJlY29yZHMgLyB0aGlzLmN1cnJlbnRQYWdlU2l6ZSkgfHwgMDtcblxuICAgIC8vIEJvdW5kcyBjaGVja1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlID4gdGhpcy50b3RhbFBhZ2VzICYmIHRoaXMudG90YWxQYWdlcyA+IDApIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnRvdGFsUGFnZXM7XG4gICAgfVxuXG4gICAgdGhpcy5maXJzdCA9IHRoaXMudG90YWxSZWNvcmRzID09PSAwID8gMCA6ICh0aGlzLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLmN1cnJlbnRQYWdlU2l6ZSArIDE7XG4gICAgdGhpcy5sYXN0ID0gTWF0aC5taW4odGhpcy50b3RhbFJlY29yZHMsIHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLmN1cnJlbnRQYWdlU2l6ZSk7XG5cbiAgICAvLyBDYWxjdWxhdGUgU2xpZGluZyBXaW5kb3cgZm9yIFBhZ2UgTnVtYmVycyAoTWF4IDUgdmlzaWJsZSlcbiAgICBjb25zdCBwYWdlczogbnVtYmVyW10gPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLnRvdGFsUGFnZXMgfSwgKF8sIGkpID0+IGkgKyAxKTtcblxuICAgIGlmICh0aGlzLnRvdGFsUGFnZXMgPD0gNSkge1xuICAgICAgdGhpcy5kaXNwbGF5UGFnZUluZGV4ID0gcGFnZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBzdGFydCA9IE1hdGgubWF4KDAsIHRoaXMuY3VycmVudFBhZ2UgLSAzKTtcbiAgICAgIGxldCBlbmQgPSBzdGFydCArIDU7XG5cbiAgICAgIGlmIChlbmQgPiB0aGlzLnRvdGFsUGFnZXMpIHtcbiAgICAgICAgZW5kID0gdGhpcy50b3RhbFBhZ2VzO1xuICAgICAgICBzdGFydCA9IGVuZCAtIDU7XG4gICAgICB9XG4gICAgICB0aGlzLmRpc3BsYXlQYWdlSW5kZXggPSBwYWdlcy5zbGljZShzdGFydCwgZW5kKTtcbiAgICB9XG5cbiAgICAvLyBUZW1wbGF0ZSBQYXJzaW5nXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2VJbmZvVGVtcGxhdGUpIHtcbiAgICAgIHRoaXMucGFnZVJlcG9ydCA9IHRoaXMuY3VycmVudFBhZ2VJbmZvVGVtcGxhdGUucmVwbGFjZShcbiAgICAgICAgL3tmaXJzdH18e2xhc3R9fHt0b3RhbFJlY29yZHN9fHtjdXJyZW50UGFnZX18e2N1cnJlbnRQYWdlU2l6ZX18e3RvdGFsUGFnZXN9L2csXG4gICAgICAgIChtYXRjaCkgPT4ge1xuICAgICAgICAgIHN3aXRjaCAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNhc2UgJ3tmaXJzdH0nOiByZXR1cm4gYCR7dGhpcy5maXJzdH1gO1xuICAgICAgICAgICAgY2FzZSAne2xhc3R9JzogcmV0dXJuIGAke3RoaXMubGFzdH1gO1xuICAgICAgICAgICAgY2FzZSAne3RvdGFsUmVjb3Jkc30nOiByZXR1cm4gYCR7dGhpcy50b3RhbFJlY29yZHN9YDtcbiAgICAgICAgICAgIGNhc2UgJ3t0b3RhbFBhZ2VzfSc6IHJldHVybiBgJHt0aGlzLnRvdGFsUGFnZXN9YDtcbiAgICAgICAgICAgIGNhc2UgJ3tjdXJyZW50UGFnZX0nOiByZXR1cm4gYCR7dGhpcy5jdXJyZW50UGFnZX1gO1xuICAgICAgICAgICAgY2FzZSAne2N1cnJlbnRQYWdlU2l6ZX0nOiByZXR1cm4gYCR7dGhpcy5jdXJyZW50UGFnZVNpemV9YDtcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiBtYXRjaDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -5,6 +5,9 @@ import * as i0 from "@angular/core";
|
|
|
5
5
|
export class ProgressComponent {
|
|
6
6
|
value = 0;
|
|
7
7
|
class = '';
|
|
8
|
+
get clampedValue() {
|
|
9
|
+
return Math.min(100, Math.max(0, this.value ?? 0));
|
|
10
|
+
}
|
|
8
11
|
get computedClass() {
|
|
9
12
|
return cn("relative h-2 w-full overflow-hidden rounded-full bg-primary/20", this.class);
|
|
10
13
|
}
|
|
@@ -15,11 +18,11 @@ export class ProgressComponent {
|
|
|
15
18
|
role="progressbar"
|
|
16
19
|
[attr.aria-valuemin]="0"
|
|
17
20
|
[attr.aria-valuemax]="100"
|
|
18
|
-
[attr.aria-valuenow]="
|
|
21
|
+
[attr.aria-valuenow]="clampedValue"
|
|
19
22
|
>
|
|
20
23
|
<div
|
|
21
24
|
class="h-full w-full flex-1 bg-primary transition-all duration-300 ease-in-out"
|
|
22
|
-
[style.transform]="'translateX(-' + (100 -
|
|
25
|
+
[style.transform]="'translateX(-' + (100 - clampedValue) + '%)'"
|
|
23
26
|
></div>
|
|
24
27
|
</div>
|
|
25
28
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
@@ -36,11 +39,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
36
39
|
role="progressbar"
|
|
37
40
|
[attr.aria-valuemin]="0"
|
|
38
41
|
[attr.aria-valuemax]="100"
|
|
39
|
-
[attr.aria-valuenow]="
|
|
42
|
+
[attr.aria-valuenow]="clampedValue"
|
|
40
43
|
>
|
|
41
44
|
<div
|
|
42
45
|
class="h-full w-full flex-1 bg-primary transition-all duration-300 ease-in-out"
|
|
43
|
-
[style.transform]="'translateX(-' + (100 -
|
|
46
|
+
[style.transform]="'translateX(-' + (100 - clampedValue) + '%)'"
|
|
44
47
|
></div>
|
|
45
48
|
</div>
|
|
46
49
|
`
|
|
@@ -50,4 +53,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
50
53
|
}], class: [{
|
|
51
54
|
type: Input
|
|
52
55
|
}] } });
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9wcm9ncmVzcy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBcUJoQyxNQUFNLE9BQU8saUJBQWlCO0lBQ2pCLEtBQUssR0FBa0IsQ0FBQyxDQUFDO0lBQ3pCLEtBQUssR0FBVyxFQUFFLENBQUM7SUFFNUIsSUFBSSxZQUFZO1FBQ1osT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksYUFBYTtRQUNiLE9BQU8sRUFBRSxDQUNMLGdFQUFnRSxFQUNoRSxJQUFJLENBQUMsS0FBSyxDQUNiLENBQUM7SUFDTixDQUFDO3dHQWJRLGlCQUFpQjs0RkFBakIsaUJBQWlCLHNIQWZoQjs7Ozs7Ozs7Ozs7OztHQWFYLDJEQWRXLFlBQVk7OzRGQWdCYixpQkFBaUI7a0JBbkI3QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7OztHQWFYO2lCQUNGOzhCQUVZLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0b2xsZS1wcm9ncmVzcycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgIFtjbGFzc109XCJjb21wdXRlZENsYXNzXCJcbiAgICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiXG4gICAgICBbYXR0ci5hcmlhLXZhbHVlbWluXT1cIjBcIlxuICAgICAgW2F0dHIuYXJpYS12YWx1ZW1heF09XCIxMDBcIlxuICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJjbGFtcGVkVmFsdWVcIlxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJoLWZ1bGwgdy1mdWxsIGZsZXgtMSBiZy1wcmltYXJ5IHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBlYXNlLWluLW91dFwiXG4gICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZVgoLScgKyAoMTAwIC0gY2xhbXBlZFZhbHVlKSArICclKSdcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIFByb2dyZXNzQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSB2YWx1ZTogbnVtYmVyIHwgbnVsbCA9IDA7XG4gICAgQElucHV0KCkgY2xhc3M6IHN0cmluZyA9ICcnO1xuXG4gICAgZ2V0IGNsYW1wZWRWYWx1ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gTWF0aC5taW4oMTAwLCBNYXRoLm1heCgwLCB0aGlzLnZhbHVlID8/IDApKTtcbiAgICB9XG5cbiAgICBnZXQgY29tcHV0ZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIGNuKFxuICAgICAgICAgICAgXCJyZWxhdGl2ZSBoLTIgdy1mdWxsIG92ZXJmbG93LWhpZGRlbiByb3VuZGVkLWZ1bGwgYmctcHJpbWFyeS8yMFwiLFxuICAgICAgICAgICAgdGhpcy5jbGFzc1xuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -13,11 +13,16 @@ export class RadioGroupComponent {
|
|
|
13
13
|
value;
|
|
14
14
|
onChange = () => { };
|
|
15
15
|
onTouched = () => { };
|
|
16
|
+
/** Suppresses onChange while applying a programmatic writeValue(). */
|
|
17
|
+
suppress = false;
|
|
16
18
|
constructor(radioService) {
|
|
17
19
|
this.radioService = radioService;
|
|
18
20
|
this.radioService.selectedValue$.subscribe(val => {
|
|
19
21
|
this.value = val;
|
|
20
|
-
this.
|
|
22
|
+
if (!this.suppress) {
|
|
23
|
+
this.onChange(val);
|
|
24
|
+
this.onTouched();
|
|
25
|
+
}
|
|
21
26
|
});
|
|
22
27
|
}
|
|
23
28
|
setDisabledState(isDisabled) {
|
|
@@ -29,13 +34,53 @@ export class RadioGroupComponent {
|
|
|
29
34
|
}
|
|
30
35
|
writeValue(value) {
|
|
31
36
|
this.value = value;
|
|
37
|
+
this.suppress = true;
|
|
32
38
|
this.radioService.select(value);
|
|
39
|
+
this.suppress = false;
|
|
33
40
|
}
|
|
34
41
|
registerOnChange(fn) { this.onChange = fn; }
|
|
35
42
|
registerOnTouched(fn) { this.onTouched = fn; }
|
|
43
|
+
/**
|
|
44
|
+
* WAI-ARIA radio group keyboard nav: Arrow Down/Right select+focus the next
|
|
45
|
+
* enabled item, Arrow Up/Left the previous. Wraps around and skips disabled
|
|
46
|
+
* items; moving selection also moves focus.
|
|
47
|
+
*/
|
|
48
|
+
onKeydown(event) {
|
|
49
|
+
if (this.disabled)
|
|
50
|
+
return;
|
|
51
|
+
const key = event.key;
|
|
52
|
+
const forward = key === 'ArrowDown' || key === 'ArrowRight';
|
|
53
|
+
const backward = key === 'ArrowUp' || key === 'ArrowLeft';
|
|
54
|
+
if (!forward && !backward)
|
|
55
|
+
return;
|
|
56
|
+
const items = this.radioService.getEnabledItems();
|
|
57
|
+
if (!items.length)
|
|
58
|
+
return;
|
|
59
|
+
event.preventDefault();
|
|
60
|
+
const target = event.target;
|
|
61
|
+
let current = target
|
|
62
|
+
? items.findIndex(i => i.hostElement === target || i.hostElement.contains(target))
|
|
63
|
+
: -1;
|
|
64
|
+
if (current < 0) {
|
|
65
|
+
// Fall back to the currently selected item.
|
|
66
|
+
current = items.findIndex(i => i.value === this.value);
|
|
67
|
+
}
|
|
68
|
+
let next;
|
|
69
|
+
if (current < 0) {
|
|
70
|
+
next = forward ? 0 : items.length - 1;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
next = forward
|
|
74
|
+
? (current + 1) % items.length
|
|
75
|
+
: (current - 1 + items.length) % items.length;
|
|
76
|
+
}
|
|
77
|
+
const targetItem = items[next];
|
|
78
|
+
this.radioService.select(targetItem.value);
|
|
79
|
+
targetItem.focusItem();
|
|
80
|
+
}
|
|
36
81
|
cn = cn;
|
|
37
82
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RadioGroupComponent, deps: [{ token: i1.RadioService }], target: i0.ɵɵFactoryTarget.Component });
|
|
38
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: RadioGroupComponent, isStandalone: true, selector: "tolle-radio-group", inputs: { class: "class", disabled: "disabled", name: "name" }, providers: [
|
|
83
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: RadioGroupComponent, isStandalone: true, selector: "tolle-radio-group", inputs: { class: "class", disabled: "disabled", name: "name" }, host: { listeners: { "keydown": "onKeydown($event)" } }, providers: [
|
|
39
84
|
RadioService,
|
|
40
85
|
{
|
|
41
86
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -62,6 +107,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
62
107
|
multi: true
|
|
63
108
|
}
|
|
64
109
|
],
|
|
110
|
+
host: {
|
|
111
|
+
'(keydown)': 'onKeydown($event)'
|
|
112
|
+
},
|
|
65
113
|
template: `
|
|
66
114
|
<div [class]="cn('grid gap-2', class)" role="radiogroup">
|
|
67
115
|
<ng-content></ng-content>
|
|
@@ -75,4 +123,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
75
123
|
}], name: [{
|
|
76
124
|
type: Input
|
|
77
125
|
}] } });
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9yYWRpby1ncm91cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUE4QixNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7QUF1QjdDLE1BQU0sT0FBTyxtQkFBbUI7SUFZVjtJQVhYLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDWCxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLElBQUksR0FBRyxlQUFlLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRTVFLEtBQUssQ0FBTTtJQUNYLFFBQVEsR0FBUSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDekIsU0FBUyxHQUFRLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUUxQixzRUFBc0U7SUFDOUQsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUV6QixZQUFvQixZQUEwQjtRQUExQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7WUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUs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VSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFa0IsRUFBRSxHQUFHLEVBQUUsQ0FBQzt3R0FqRmhCLG1CQUFtQjs0RkFBbkIsbUJBQW1CLHlMQWpCbkI7WUFDVCxZQUFZO1lBQ1o7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDbEQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLCtDQUlTOzs7O0dBSVQsMkRBaEJTLFlBQVk7OzRGQWtCWCxtQkFBbUI7a0JBckIvQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLFNBQVMsRUFBRTt3QkFDVCxZQUFZO3dCQUNaOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDOzRCQUNsRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtvQkFDRCxJQUFJLEVBQUU7d0JBQ0osV0FBVyxFQUFFLG1CQUFtQjtxQkFDakM7b0JBQ0QsUUFBUSxFQUFFOzs7O0dBSVQ7aUJBQ0Y7aUZBRVUsS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBmb3J3YXJkUmVmLCBBZnRlckNvbnRlbnRJbml0LCBPbkNoYW5nZXN9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi91dGlscy9jbic7XG5pbXBvcnQge1JhZGlvU2VydmljZX0gZnJvbSAnLi9yYWRpby1zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtcmFkaW8tZ3JvdXAnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgUmFkaW9TZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmFkaW9Hcm91cENvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSxcbiAgaG9zdDoge1xuICAgICcoa2V5ZG93biknOiAnb25LZXlkb3duKCRldmVudCknXG4gIH0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBbY2xhc3NdPVwiY24oJ2dyaWQgZ2FwLTInLCBjbGFzcylcIiByb2xlPVwicmFkaW9ncm91cFwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIFJhZGlvR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgbmFtZSA9IGByYWRpby1ncm91cC0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gO1xuXG4gIHZhbHVlOiBhbnk7XG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICAvKiogU3VwcHJlc3NlcyBvbkNoYW5nZSB3aGlsZSBhcHBseWluZyBhIHByb2dyYW1tYXRpYyB3cml0ZVZhbHVlKCkuICovXG4gIHByaXZhdGUgc3VwcHJlc3MgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJhZGlvU2VydmljZTogUmFkaW9TZXJ2aWNlKSB7XG4gICAgdGhpcy5yYWRpb1NlcnZpY2Uuc2VsZWN0ZWRWYWx1ZSQuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgICAgaWYgKCF0aGlzLnN1cHByZXNzKSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodmFsKTtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGU/KGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB0aGlzLnJhZGlvU2VydmljZS5zZXREaXNhYmxlZChpc0Rpc2FibGVkKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKCkge1xuICAgIHRoaXMucmFkaW9TZXJ2aWNlLnNldERpc2FibGVkKHRoaXMuZGlzYWJsZWQpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuc3VwcHJlc3MgPSB0cnVlO1xuICAgIHRoaXMucmFkaW9TZXJ2aWNlLnNlbGVjdCh2YWx1ZSk7XG4gICAgdGhpcy5zdXBwcmVzcyA9IGZhbHNlO1xuICB9XG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQgeyB0aGlzLm9uQ2hhbmdlID0gZm47IH1cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQgeyB0aGlzLm9uVG91Y2hlZCA9IGZuOyB9XG5cbiAgLyoqXG4gICAqIFdBSS1BUklBIHJhZGlvIGdyb3VwIGtleWJvYXJkIG5hdjogQXJyb3cgRG93bi9SaWdodCBzZWxlY3QrZm9jdXMgdGhlIG5leHRcbiAgICogZW5hYmxlZCBpdGVtLCBBcnJvdyBVcC9MZWZ0IHRoZSBwcmV2aW91cy4gV3JhcHMgYXJvdW5kIGFuZCBza2lwcyBkaXNhYmxlZFxuICAgKiBpdGVtczsgbW92aW5nIHNlbGVjdGlvbiBhbHNvIG1vdmVzIGZvY3VzLlxuICAgKi9cbiAgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHJldHVybjtcblxuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcbiAgICBjb25zdCBmb3J3YXJkID0ga2V5ID09PSAnQXJyb3dEb3duJyB8fCBrZXkgPT09ICdBcnJvd1JpZ2h0JztcbiAgICBjb25zdCBiYWNrd2FyZCA9IGtleSA9PT0gJ0Fycm93VXAnIHx8IGtleSA9PT0gJ0Fycm93TGVmdCc7XG4gICAgaWYgKCFmb3J3YXJkICYmICFiYWNrd2FyZCkgcmV0dXJuO1xuXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnJhZGlvU2VydmljZS5nZXRFbmFibGVkSXRlbXMoKTtcbiAgICBpZiAoIWl0ZW1zLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgbGV0IGN1cnJlbnQgPSB0YXJnZXRcbiAgICAgID8gaXRlbXMuZmluZEluZGV4KGkgPT4gaS5ob3N0RWxlbWVudCA9PT0gdGFyZ2V0IHx8IGkuaG9zdEVsZW1lbnQuY29udGFpbnModGFyZ2V0KSlcbiAgICAgIDogLTE7XG4gICAgaWYgKGN1cnJlbnQgPCAwKSB7XG4gICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtLlxuICAgICAgY3VycmVudCA9IGl0ZW1zLmZpbmRJbmRleChpID0+IGkudmFsdWUgPT09IHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIGxldCBuZXh0OiBudW1iZXI7XG4gICAgaWYgKGN1cnJlbnQgPCAwKSB7XG4gICAgICBuZXh0ID0gZm9yd2FyZCA/IDAgOiBpdGVtcy5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0ID0gZm9yd2FyZFxuICAgICAgICA/IChjdXJyZW50ICsgMSkgJSBpdGVtcy5sZW5ndGhcbiAgICAgICAgOiAoY3VycmVudCAtIDEgKyBpdGVtcy5sZW5ndGgpICUgaXRlbXMubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldEl0ZW0gPSBpdGVtc1tuZXh0XTtcbiAgICB0aGlzLnJhZGlvU2VydmljZS5zZWxlY3QodGFyZ2V0SXRlbS52YWx1ZSk7XG4gICAgdGFyZ2V0SXRlbS5mb2N1c0l0ZW0oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBjbiA9IGNuO1xufVxuIl19
|
|
@@ -8,19 +8,34 @@ import * as i2 from "@angular/common";
|
|
|
8
8
|
export class RadioItemComponent {
|
|
9
9
|
radioService;
|
|
10
10
|
cdr;
|
|
11
|
+
el;
|
|
11
12
|
value;
|
|
12
13
|
disabled = false;
|
|
13
14
|
class = '';
|
|
14
15
|
isSelected = false;
|
|
15
16
|
groupDisabled = false;
|
|
17
|
+
/** Whether this item is the single roving tab stop for the group. */
|
|
18
|
+
isTabbable = false;
|
|
16
19
|
sub = new Subscription();
|
|
17
20
|
get isEffectiveDisabled() {
|
|
18
21
|
return this.disabled || this.groupDisabled;
|
|
19
22
|
}
|
|
20
23
|
// Inject ChangeDetectorRef to ensure UI updates when service emits
|
|
21
|
-
constructor(radioService, cdr) {
|
|
24
|
+
constructor(radioService, cdr, el) {
|
|
22
25
|
this.radioService = radioService;
|
|
23
26
|
this.cdr = cdr;
|
|
27
|
+
this.el = el;
|
|
28
|
+
}
|
|
29
|
+
// --- RovingRadioItem contract (used by the group/service for keyboard nav) ---
|
|
30
|
+
get hostElement() {
|
|
31
|
+
return this.el.nativeElement;
|
|
32
|
+
}
|
|
33
|
+
isItemDisabled() {
|
|
34
|
+
return this.isEffectiveDisabled;
|
|
35
|
+
}
|
|
36
|
+
focusItem() {
|
|
37
|
+
const radioEl = this.el.nativeElement.querySelector('[role="radio"]');
|
|
38
|
+
radioEl?.focus();
|
|
24
39
|
}
|
|
25
40
|
ngOnInit() {
|
|
26
41
|
// Listen for selection changes
|
|
@@ -33,15 +48,22 @@ export class RadioItemComponent {
|
|
|
33
48
|
this.groupDisabled = dis;
|
|
34
49
|
this.cdr.markForCheck(); // Trigger UI refresh
|
|
35
50
|
}));
|
|
51
|
+
// Listen for roving tabindex changes (which single item is tab-reachable)
|
|
52
|
+
this.sub.add(this.radioService.tabbableValue$.subscribe(val => {
|
|
53
|
+
this.isTabbable = (val === this.value);
|
|
54
|
+
this.cdr.markForCheck(); // Trigger UI refresh
|
|
55
|
+
}));
|
|
56
|
+
this.radioService.register(this);
|
|
36
57
|
}
|
|
37
58
|
select() {
|
|
38
59
|
this.radioService.select(this.value);
|
|
39
60
|
}
|
|
40
61
|
ngOnDestroy() {
|
|
62
|
+
this.radioService.unregister(this);
|
|
41
63
|
this.sub.unsubscribe(); // Clean up subscriptions
|
|
42
64
|
}
|
|
43
65
|
cn = cn;
|
|
44
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RadioItemComponent, deps: [{ token: i1.RadioService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
66
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RadioItemComponent, deps: [{ token: i1.RadioService }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
45
67
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: RadioItemComponent, isStandalone: true, selector: "tolle-radio-item", inputs: { value: "value", disabled: "disabled", class: "class" }, ngImport: i0, template: `
|
|
46
68
|
<div
|
|
47
69
|
(click)="!isEffectiveDisabled && select()"
|
|
@@ -50,9 +72,17 @@ export class RadioItemComponent {
|
|
|
50
72
|
isEffectiveDisabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'
|
|
51
73
|
)"
|
|
52
74
|
>
|
|
53
|
-
<div
|
|
75
|
+
<div
|
|
76
|
+
role="radio"
|
|
77
|
+
[attr.aria-checked]="isSelected"
|
|
78
|
+
[attr.aria-disabled]="isEffectiveDisabled || null"
|
|
79
|
+
[attr.data-state]="isSelected ? 'checked' : 'unchecked'"
|
|
80
|
+
[attr.tabindex]="isEffectiveDisabled ? -1 : (isTabbable ? 0 : -1)"
|
|
81
|
+
(keydown.enter)="isEffectiveDisabled ? null : select()"
|
|
82
|
+
(keydown.space)="isEffectiveDisabled ? null : select(); $event.preventDefault()"
|
|
83
|
+
[class]="cn(
|
|
54
84
|
'aspect-square h-4 w-4 rounded-full border border-primary text-primary transition-all flex items-center justify-center',
|
|
55
|
-
'ring-offset-background focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',
|
|
85
|
+
'outline-none ring-offset-background focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',
|
|
56
86
|
!isEffectiveDisabled && 'group-hover:border-primary/70',
|
|
57
87
|
isSelected ? 'bg-background' : 'bg-transparent',
|
|
58
88
|
class
|
|
@@ -83,9 +113,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
83
113
|
isEffectiveDisabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer'
|
|
84
114
|
)"
|
|
85
115
|
>
|
|
86
|
-
<div
|
|
116
|
+
<div
|
|
117
|
+
role="radio"
|
|
118
|
+
[attr.aria-checked]="isSelected"
|
|
119
|
+
[attr.aria-disabled]="isEffectiveDisabled || null"
|
|
120
|
+
[attr.data-state]="isSelected ? 'checked' : 'unchecked'"
|
|
121
|
+
[attr.tabindex]="isEffectiveDisabled ? -1 : (isTabbable ? 0 : -1)"
|
|
122
|
+
(keydown.enter)="isEffectiveDisabled ? null : select()"
|
|
123
|
+
(keydown.space)="isEffectiveDisabled ? null : select(); $event.preventDefault()"
|
|
124
|
+
[class]="cn(
|
|
87
125
|
'aspect-square h-4 w-4 rounded-full border border-primary text-primary transition-all flex items-center justify-center',
|
|
88
|
-
'ring-offset-background focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',
|
|
126
|
+
'outline-none ring-offset-background focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',
|
|
89
127
|
!isEffectiveDisabled && 'group-hover:border-primary/70',
|
|
90
128
|
isSelected ? 'bg-background' : 'bg-transparent',
|
|
91
129
|
class
|
|
@@ -102,11 +140,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
102
140
|
</div>
|
|
103
141
|
`
|
|
104
142
|
}]
|
|
105
|
-
}], ctorParameters: () => [{ type: i1.RadioService }, { type: i0.ChangeDetectorRef }], propDecorators: { value: [{
|
|
143
|
+
}], ctorParameters: () => [{ type: i1.RadioService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { value: [{
|
|
106
144
|
type: Input
|
|
107
145
|
}], disabled: [{
|
|
108
146
|
type: Input
|
|
109
147
|
}], class: [{
|
|
110
148
|
type: Input
|
|
111
149
|
}] } });
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
150
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8taXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL3JhZGlvLWl0ZW0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFvRCxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVoQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBeUNwQyxNQUFNLE9BQU8sa0JBQWtCO0lBa0JuQjtJQUNBO0lBQ0E7SUFuQkQsS0FBSyxDQUFNO0lBQ1gsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBRXBCLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUN0QixxRUFBcUU7SUFDckUsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUVYLEdBQUcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBRWpDLElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzdDLENBQUM7SUFFRCxtRUFBbUU7SUFDbkUsWUFDVSxZQUEwQixFQUMxQixHQUFzQixFQUN0QixFQUEyQjtRQUYzQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixPQUFFLEdBQUYsRUFBRSxDQUF5QjtJQUNsQyxDQUFDO0lBRUosZ0ZBQWdGO0lBQ2hGLElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDL0IsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNsQyxDQUFDO0lBRUQsU0FBUztRQUNQLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBdUIsQ0FBQztRQUM1RixPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELFFBQVE7UUFDTiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxxQkFBcUI7UUFDaEQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FDVixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUM7WUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLHFCQUFxQjtRQUNoRCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsMEVBQTBFO1FBQzFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMvQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMscUJBQXFCO1FBQ2hELENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyx5QkFBeUI7SUFDbkQsQ0FBQztJQUVTLEVBQUUsR0FBRyxFQUFFLENBQUM7d0dBMUVQLGtCQUFrQjs0RkFBbEIsa0JBQWtCLDhJQW5DbkI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlDVCwyREFsQ1MsWUFBWTs7NEZBb0NYLGtCQUFrQjtrQkF2QzlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQ1Q7aUJBQ0Y7MElBRVUsS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPbkRlc3Ryb3ksIENoYW5nZURldGVjdG9yUmVmLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcbmltcG9ydCB7IFJhZGlvU2VydmljZSwgUm92aW5nUmFkaW9JdGVtIH0gZnJvbSAnLi9yYWRpby1zZXJ2aWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1yYWRpby1pdGVtJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgKGNsaWNrKT1cIiFpc0VmZmVjdGl2ZURpc2FibGVkICYmIHNlbGVjdCgpXCJcbiAgICAgIFtjbGFzc109XCJjbihcbiAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIHNwYWNlLXgtMiBncm91cCBweS0xJyxcbiAgICAgICAgaXNFZmZlY3RpdmVEaXNhYmxlZCA/ICdjdXJzb3Itbm90LWFsbG93ZWQgb3BhY2l0eS01MCcgOiAnY3Vyc29yLXBvaW50ZXInXG4gICAgICApXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIHJvbGU9XCJyYWRpb1wiXG4gICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJpc1NlbGVjdGVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0VmZmVjdGl2ZURpc2FibGVkIHx8IG51bGxcIlxuICAgICAgICBbYXR0ci5kYXRhLXN0YXRlXT1cImlzU2VsZWN0ZWQgPyAnY2hlY2tlZCcgOiAndW5jaGVja2VkJ1wiXG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cImlzRWZmZWN0aXZlRGlzYWJsZWQgPyAtMSA6IChpc1RhYmJhYmxlID8gMCA6IC0xKVwiXG4gICAgICAgIChrZXlkb3duLmVudGVyKT1cImlzRWZmZWN0aXZlRGlzYWJsZWQgPyBudWxsIDogc2VsZWN0KClcIlxuICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJpc0VmZmVjdGl2ZURpc2FibGVkID8gbnVsbCA6IHNlbGVjdCgpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICAgIFtjbGFzc109XCJjbihcbiAgICAgICAgJ2FzcGVjdC1zcXVhcmUgaC00IHctNCByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci1wcmltYXJ5IHRleHQtcHJpbWFyeSB0cmFuc2l0aW9uLWFsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlcicsXG4gICAgICAgICdvdXRsaW5lLW5vbmUgcmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTInLFxuICAgICAgICAhaXNFZmZlY3RpdmVEaXNhYmxlZCAmJiAnZ3JvdXAtaG92ZXI6Ym9yZGVyLXByaW1hcnkvNzAnLFxuICAgICAgICBpc1NlbGVjdGVkID8gJ2JnLWJhY2tncm91bmQnIDogJ2JnLXRyYW5zcGFyZW50JyxcbiAgICAgICAgY2xhc3NcbiAgICAgIClcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiaXNTZWxlY3RlZFwiXG4gICAgICAgICAgY2xhc3M9XCJoLTIuNSB3LTIuNSByb3VuZGVkLWZ1bGwgYmctcHJpbWFyeSBhbmltYXRlLWluIHpvb20taW4tNTAgZHVyYXRpb24tMjAwXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHNlbGVjdC1ub25lXCIgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cIiFpc0VmZmVjdGl2ZURpc2FibGVkXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgUmFkaW9JdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIFJvdmluZ1JhZGlvSXRlbSB7XG4gIEBJbnB1dCgpIHZhbHVlOiBhbnk7XG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG5cbiAgaXNTZWxlY3RlZCA9IGZhbHNlO1xuICBncm91cERpc2FibGVkID0gZmFsc2U7XG4gIC8qKiBXaGV0aGVyIHRoaXMgaXRlbSBpcyB0aGUgc2luZ2xlIHJvdmluZyB0YWIgc3RvcCBmb3IgdGhlIGdyb3VwLiAqL1xuICBpc1RhYmJhYmxlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBzdWIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgZ2V0IGlzRWZmZWN0aXZlRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5ncm91cERpc2FibGVkO1xuICB9XG5cbiAgLy8gSW5qZWN0IENoYW5nZURldGVjdG9yUmVmIHRvIGVuc3VyZSBVSSB1cGRhdGVzIHdoZW4gc2VydmljZSBlbWl0c1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJhZGlvU2VydmljZTogUmFkaW9TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuICApIHt9XG5cbiAgLy8gLS0tIFJvdmluZ1JhZGlvSXRlbSBjb250cmFjdCAodXNlZCBieSB0aGUgZ3JvdXAvc2VydmljZSBmb3Iga2V5Ym9hcmQgbmF2KSAtLS1cbiAgZ2V0IGhvc3RFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgaXNJdGVtRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNFZmZlY3RpdmVEaXNhYmxlZDtcbiAgfVxuXG4gIGZvY3VzSXRlbSgpOiB2b2lkIHtcbiAgICBjb25zdCByYWRpb0VsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tyb2xlPVwicmFkaW9cIl0nKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgcmFkaW9FbD8uZm9jdXMoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIExpc3RlbiBmb3Igc2VsZWN0aW9uIGNoYW5nZXNcbiAgICB0aGlzLnN1Yi5hZGQoXG4gICAgICB0aGlzLnJhZGlvU2VydmljZS5zZWxlY3RlZFZhbHVlJC5zdWJzY3JpYmUodmFsID0+IHtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkID0gKHZhbCA9PT0gdGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpOyAvLyBUcmlnZ2VyIFVJIHJlZnJlc2hcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBmb3IgZ3JvdXAtbGV2ZWwgZGlzYWJsZWQgc3RhdGVcbiAgICB0aGlzLnN1Yi5hZGQoXG4gICAgICB0aGlzLnJhZGlvU2VydmljZS5kaXNhYmxlZCQuc3Vic2NyaWJlKGRpcyA9PiB7XG4gICAgICAgIHRoaXMuZ3JvdXBEaXNhYmxlZCA9IGRpcztcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7IC8vIFRyaWdnZXIgVUkgcmVmcmVzaFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIGZvciByb3ZpbmcgdGFiaW5kZXggY2hhbmdlcyAod2hpY2ggc2luZ2xlIGl0ZW0gaXMgdGFiLXJlYWNoYWJsZSlcbiAgICB0aGlzLnN1Yi5hZGQoXG4gICAgICB0aGlzLnJhZGlvU2VydmljZS50YWJiYWJsZVZhbHVlJC5zdWJzY3JpYmUodmFsID0+IHtcbiAgICAgICAgdGhpcy5pc1RhYmJhYmxlID0gKHZhbCA9PT0gdGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpOyAvLyBUcmlnZ2VyIFVJIHJlZnJlc2hcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHRoaXMucmFkaW9TZXJ2aWNlLnJlZ2lzdGVyKHRoaXMpO1xuICB9XG5cbiAgc2VsZWN0KCkge1xuICAgIHRoaXMucmFkaW9TZXJ2aWNlLnNlbGVjdCh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmFkaW9TZXJ2aWNlLnVucmVnaXN0ZXIodGhpcyk7XG4gICAgdGhpcy5zdWIudW5zdWJzY3JpYmUoKTsgLy8gQ2xlYW4gdXAgc3Vic2NyaXB0aW9uc1xuICB9XG5cbiAgcHJvdGVjdGVkIGNuID0gY247XG59XG4iXX0=
|
|
@@ -6,13 +6,72 @@ export class RadioService {
|
|
|
6
6
|
selectedValue$ = this.selectedValueSource.asObservable();
|
|
7
7
|
disabledSource = new BehaviorSubject(false);
|
|
8
8
|
disabled$ = this.disabledSource.asObservable();
|
|
9
|
+
/**
|
|
10
|
+
* The single value that is allowed in the tab order (roving tabindex).
|
|
11
|
+
* It is the selected value, or - when nothing is selected - the first
|
|
12
|
+
* enabled item's value. Recomputed asynchronously so the registry is
|
|
13
|
+
* complete before any item reads it (avoids partial-registry glitches).
|
|
14
|
+
*/
|
|
15
|
+
tabbableValueSource = new BehaviorSubject(undefined);
|
|
16
|
+
tabbableValue$ = this.tabbableValueSource.asObservable();
|
|
17
|
+
/** Registered items in DOM (registration) order. */
|
|
18
|
+
items = [];
|
|
19
|
+
recomputeScheduled = false;
|
|
20
|
+
get value() {
|
|
21
|
+
return this.selectedValueSource.value;
|
|
22
|
+
}
|
|
9
23
|
select(value) {
|
|
10
24
|
if (!this.disabledSource.value) {
|
|
11
25
|
this.selectedValueSource.next(value);
|
|
26
|
+
this.scheduleRecompute();
|
|
12
27
|
}
|
|
13
28
|
}
|
|
14
29
|
setDisabled(isDisabled) {
|
|
15
30
|
this.disabledSource.next(isDisabled);
|
|
31
|
+
this.scheduleRecompute();
|
|
32
|
+
}
|
|
33
|
+
register(item) {
|
|
34
|
+
if (this.items.indexOf(item) === -1) {
|
|
35
|
+
this.items.push(item);
|
|
36
|
+
this.scheduleRecompute();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
unregister(item) {
|
|
40
|
+
const i = this.items.indexOf(item);
|
|
41
|
+
if (i > -1) {
|
|
42
|
+
this.items.splice(i, 1);
|
|
43
|
+
this.scheduleRecompute();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Ordered, non-disabled items - used for arrow-key navigation. */
|
|
47
|
+
getEnabledItems() {
|
|
48
|
+
return this.items.filter(i => !i.isItemDisabled());
|
|
49
|
+
}
|
|
50
|
+
scheduleRecompute() {
|
|
51
|
+
if (this.recomputeScheduled)
|
|
52
|
+
return;
|
|
53
|
+
this.recomputeScheduled = true;
|
|
54
|
+
// Defer to a microtask so all items have registered (and the current
|
|
55
|
+
// change-detection pass has completed) before the tabbable value updates.
|
|
56
|
+
Promise.resolve().then(() => {
|
|
57
|
+
this.recomputeScheduled = false;
|
|
58
|
+
this.recomputeTabbable();
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
recomputeTabbable() {
|
|
62
|
+
const selected = this.selectedValueSource.value;
|
|
63
|
+
const selectedItem = this.items.find(i => i.value === selected && !i.isItemDisabled());
|
|
64
|
+
let tabbable;
|
|
65
|
+
if (selectedItem) {
|
|
66
|
+
tabbable = selectedItem.value;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
const firstEnabled = this.items.find(i => !i.isItemDisabled());
|
|
70
|
+
tabbable = firstEnabled ? firstEnabled.value : undefined;
|
|
71
|
+
}
|
|
72
|
+
if (tabbable !== this.tabbableValueSource.value) {
|
|
73
|
+
this.tabbableValueSource.next(tabbable);
|
|
74
|
+
}
|
|
16
75
|
}
|
|
17
76
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RadioService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
18
77
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RadioService });
|
|
@@ -20,4 +79,4 @@ export class RadioService {
|
|
|
20
79
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RadioService, decorators: [{
|
|
21
80
|
type: Injectable
|
|
22
81
|
}] });
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvcmFkaW8tc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBZXZDLE1BQU0sT0FBTyxZQUFZO0lBQ2YsbUJBQW1CLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7SUFDN0QsY0FBYyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVqRCxjQUFjLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDN0QsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFL0M7Ozs7O09BS0c7SUFDSyxtQkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBTSxTQUFTLENBQUMsQ0FBQztJQUNsRSxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXpELG9EQUFvRDtJQUM1QyxLQUFLLEdBQXNCLEVBQUUsQ0FBQztJQUM5QixrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFFbkMsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBVTtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsVUFBbUI7UUFDN0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFxQjtRQUM1QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsSUFBcUI7UUFDOUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELG1FQUFtRTtJQUNuRSxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxrQkFBa0I7WUFBRSxPQUFPO1FBQ3BDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDL0IscUVBQXFFO1FBQ3JFLDBFQUEwRTtRQUMxRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUMxQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDO1FBQ2hELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUV2RixJQUFJLFFBQWEsQ0FBQztRQUNsQixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLFFBQVEsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELFFBQVEsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMzRCxDQUFDO1FBRUQsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7d0dBbEZVLFlBQVk7NEdBQVosWUFBWTs7NEZBQVosWUFBWTtrQkFEeEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIENvbnRyYWN0IGltcGxlbWVudGVkIGJ5IGB0b2xsZS1yYWRpby1pdGVtYCBzbyB0aGUgZ3JvdXAvc2VydmljZSBjYW4gZHJpdmVcbiAqIHJvdmluZyB0YWJpbmRleCArIGFycm93LWtleSBuYXZpZ2F0aW9uIHdpdGhvdXQgaW1wb3J0aW5nIHRoZSBjb21wb25lbnRcbiAqICh3aGljaCB3b3VsZCBjcmVhdGUgYSBjaXJjdWxhciBkZXBlbmRlbmN5KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3ZpbmdSYWRpb0l0ZW0ge1xuICB2YWx1ZTogYW55O1xuICBpc0l0ZW1EaXNhYmxlZCgpOiBib29sZWFuO1xuICBob3N0RWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIGZvY3VzSXRlbSgpOiB2b2lkO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmFkaW9TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzZWxlY3RlZFZhbHVlU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuICBzZWxlY3RlZFZhbHVlJCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZVNvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGRpc2FibGVkU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGRpc2FibGVkJCA9IHRoaXMuZGlzYWJsZWRTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLyoqXG4gICAqIFRoZSBzaW5nbGUgdmFsdWUgdGhhdCBpcyBhbGxvd2VkIGluIHRoZSB0YWIgb3JkZXIgKHJvdmluZyB0YWJpbmRleCkuXG4gICAqIEl0IGlzIHRoZSBzZWxlY3RlZCB2YWx1ZSwgb3IgLSB3aGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQgLSB0aGUgZmlyc3RcbiAgICogZW5hYmxlZCBpdGVtJ3MgdmFsdWUuIFJlY29tcHV0ZWQgYXN5bmNocm9ub3VzbHkgc28gdGhlIHJlZ2lzdHJ5IGlzXG4gICAqIGNvbXBsZXRlIGJlZm9yZSBhbnkgaXRlbSByZWFkcyBpdCAoYXZvaWRzIHBhcnRpYWwtcmVnaXN0cnkgZ2xpdGNoZXMpLlxuICAgKi9cbiAgcHJpdmF0ZSB0YWJiYWJsZVZhbHVlU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XG4gIHRhYmJhYmxlVmFsdWUkID0gdGhpcy50YWJiYWJsZVZhbHVlU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8qKiBSZWdpc3RlcmVkIGl0ZW1zIGluIERPTSAocmVnaXN0cmF0aW9uKSBvcmRlci4gKi9cbiAgcHJpdmF0ZSBpdGVtczogUm92aW5nUmFkaW9JdGVtW10gPSBbXTtcbiAgcHJpdmF0ZSByZWNvbXB1dGVTY2hlZHVsZWQgPSBmYWxzZTtcblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRWYWx1ZVNvdXJjZS52YWx1ZTtcbiAgfVxuXG4gIHNlbGVjdCh2YWx1ZTogYW55KSB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkU291cmNlLnZhbHVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVTb3VyY2UubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLnNjaGVkdWxlUmVjb21wdXRlKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0RGlzYWJsZWQoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWRTb3VyY2UubmV4dChpc0Rpc2FibGVkKTtcbiAgICB0aGlzLnNjaGVkdWxlUmVjb21wdXRlKCk7XG4gIH1cblxuICByZWdpc3RlcihpdGVtOiBSb3ZpbmdSYWRpb0l0ZW0pIHtcbiAgICBpZiAodGhpcy5pdGVtcy5pbmRleE9mKGl0ZW0pID09PSAtMSkge1xuICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgdGhpcy5zY2hlZHVsZVJlY29tcHV0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHVucmVnaXN0ZXIoaXRlbTogUm92aW5nUmFkaW9JdGVtKSB7XG4gICAgY29uc3QgaSA9IHRoaXMuaXRlbXMuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaSA+IC0xKSB7XG4gICAgICB0aGlzLml0ZW1zLnNwbGljZShpLCAxKTtcbiAgICAgIHRoaXMuc2NoZWR1bGVSZWNvbXB1dGUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogT3JkZXJlZCwgbm9uLWRpc2FibGVkIGl0ZW1zIC0gdXNlZCBmb3IgYXJyb3cta2V5IG5hdmlnYXRpb24uICovXG4gIGdldEVuYWJsZWRJdGVtcygpOiBSb3ZpbmdSYWRpb0l0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMuZmlsdGVyKGkgPT4gIWkuaXNJdGVtRGlzYWJsZWQoKSk7XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlUmVjb21wdXRlKCkge1xuICAgIGlmICh0aGlzLnJlY29tcHV0ZVNjaGVkdWxlZCkgcmV0dXJuO1xuICAgIHRoaXMucmVjb21wdXRlU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAvLyBEZWZlciB0byBhIG1pY3JvdGFzayBzbyBhbGwgaXRlbXMgaGF2ZSByZWdpc3RlcmVkIChhbmQgdGhlIGN1cnJlbnRcbiAgICAvLyBjaGFuZ2UtZGV0ZWN0aW9uIHBhc3MgaGFzIGNvbXBsZXRlZCkgYmVmb3JlIHRoZSB0YWJiYWJsZSB2YWx1ZSB1cGRhdGVzLlxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5yZWNvbXB1dGVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVjb21wdXRlVGFiYmFibGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb21wdXRlVGFiYmFibGUoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkVmFsdWVTb3VyY2UudmFsdWU7XG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5pdGVtcy5maW5kKGkgPT4gaS52YWx1ZSA9PT0gc2VsZWN0ZWQgJiYgIWkuaXNJdGVtRGlzYWJsZWQoKSk7XG5cbiAgICBsZXQgdGFiYmFibGU6IGFueTtcbiAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICB0YWJiYWJsZSA9IHNlbGVjdGVkSXRlbS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlyc3RFbmFibGVkID0gdGhpcy5pdGVtcy5maW5kKGkgPT4gIWkuaXNJdGVtRGlzYWJsZWQoKSk7XG4gICAgICB0YWJiYWJsZSA9IGZpcnN0RW5hYmxlZCA/IGZpcnN0RW5hYmxlZC52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAodGFiYmFibGUgIT09IHRoaXMudGFiYmFibGVWYWx1ZVNvdXJjZS52YWx1ZSkge1xuICAgICAgdGhpcy50YWJiYWJsZVZhbHVlU291cmNlLm5leHQodGFiYmFibGUpO1xuICAgIH1cbiAgfVxufVxuIl19
|