@tolle_/tolle-ui 18.2.24 → 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.
Files changed (184) hide show
  1. package/esm2022/lib/accordion-item.component.mjs +17 -5
  2. package/esm2022/lib/alert-dialog-dynamic.component.mjs +1 -1
  3. package/esm2022/lib/alert-dialog.component.mjs +48 -10
  4. package/esm2022/lib/alert-dialog.service.mjs +13 -2
  5. package/esm2022/lib/alert.component.mjs +5 -5
  6. package/esm2022/lib/avatar.component.mjs +30 -9
  7. package/esm2022/lib/badge.component.mjs +41 -15
  8. package/esm2022/lib/breadcrumb-link.component.mjs +5 -5
  9. package/esm2022/lib/button.component.mjs +14 -3
  10. package/esm2022/lib/calendar.component.mjs +99 -17
  11. package/esm2022/lib/card.component.mjs +29 -9
  12. package/esm2022/lib/carousel/carousel.component.mjs +19 -3
  13. package/esm2022/lib/checkbox.component.mjs +44 -21
  14. package/esm2022/lib/collapsible.component.mjs +12 -4
  15. package/esm2022/lib/country-selector.component.mjs +140 -20
  16. package/esm2022/lib/data-table.component.mjs +27 -16
  17. package/esm2022/lib/date-picker.component.mjs +24 -4
  18. package/esm2022/lib/date-range-picker.component.mjs +37 -9
  19. package/esm2022/lib/dropdown-item.component.mjs +19 -5
  20. package/esm2022/lib/dropdown-label.component.mjs +3 -3
  21. package/esm2022/lib/dropdown-menu.component.mjs +3 -3
  22. package/esm2022/lib/dropdown-separator.component.mjs +3 -3
  23. package/esm2022/lib/dropdown-trigger.directive.mjs +7 -3
  24. package/esm2022/lib/empty-state.component.mjs +3 -3
  25. package/esm2022/lib/hover-card.component.mjs +4 -2
  26. package/esm2022/lib/input.component.mjs +7 -5
  27. package/esm2022/lib/label.component.mjs +2 -2
  28. package/esm2022/lib/masked-input.component.mjs +3 -3
  29. package/esm2022/lib/modal.component.mjs +58 -22
  30. package/esm2022/lib/modal.service.mjs +13 -1
  31. package/esm2022/lib/multi-select.component.mjs +228 -20
  32. package/esm2022/lib/otp.component.mjs +6 -3
  33. package/esm2022/lib/pagination.component.mjs +19 -9
  34. package/esm2022/lib/progress.component.mjs +8 -5
  35. package/esm2022/lib/radio-group.component.mjs +51 -3
  36. package/esm2022/lib/radio-item.component.mjs +46 -8
  37. package/esm2022/lib/radio-service.mjs +60 -1
  38. package/esm2022/lib/range-calendar.component.mjs +317 -98
  39. package/esm2022/lib/resizable-panel.component.mjs +5 -4
  40. package/esm2022/lib/scroll-area.component.mjs +5 -5
  41. package/esm2022/lib/segment.component.mjs +73 -7
  42. package/esm2022/lib/select-item.component.mjs +20 -2
  43. package/esm2022/lib/select-separator.component.mjs +3 -3
  44. package/esm2022/lib/select.component.mjs +221 -14
  45. package/esm2022/lib/separator.component.mjs +12 -6
  46. package/esm2022/lib/sheet-ref.mjs +8 -1
  47. package/esm2022/lib/sheet-wrapper.component.mjs +27 -11
  48. package/esm2022/lib/sheet.component.mjs +57 -16
  49. package/esm2022/lib/sheet.service.mjs +5 -1
  50. package/esm2022/lib/sidebar.component.mjs +73 -15
  51. package/esm2022/lib/skeleton.component.mjs +19 -5
  52. package/esm2022/lib/switch.component.mjs +59 -53
  53. package/esm2022/lib/tabs.component.mjs +75 -13
  54. package/esm2022/lib/tag-input.component.mjs +6 -3
  55. package/esm2022/lib/textarea.component.mjs +9 -7
  56. package/esm2022/lib/theme.service.mjs +114 -138
  57. package/esm2022/lib/toaster.component.mjs +19 -9
  58. package/esm2022/lib/toggle-group.component.mjs +76 -4
  59. package/esm2022/lib/tolle-config.mjs +1 -1
  60. package/esm2022/lib/tooltip.directive.mjs +41 -17
  61. package/esm2022/lib/utils/color.mjs +324 -0
  62. package/esm2022/public-api.mjs +2 -1
  63. package/fesm2022/tolle-ui.mjs +2645 -637
  64. package/fesm2022/tolle-ui.mjs.map +1 -1
  65. package/lib/alert-dialog.component.d.ts +10 -1
  66. package/lib/avatar.component.d.ts +16 -3
  67. package/lib/badge.component.d.ts +17 -5
  68. package/lib/button.component.d.ts +10 -3
  69. package/lib/calendar.component.d.ts +21 -3
  70. package/lib/card.component.d.ts +6 -0
  71. package/lib/carousel/carousel.component.d.ts +1 -0
  72. package/lib/checkbox.component.d.ts +12 -4
  73. package/lib/country-selector.component.d.ts +11 -2
  74. package/lib/date-picker.component.d.ts +1 -0
  75. package/lib/date-range-picker.component.d.ts +4 -1
  76. package/lib/dropdown-item.component.d.ts +4 -2
  77. package/lib/dropdown-trigger.directive.d.ts +1 -1
  78. package/lib/modal.component.d.ts +6 -0
  79. package/lib/multi-select.component.d.ts +20 -0
  80. package/lib/otp.component.d.ts +1 -0
  81. package/lib/progress.component.d.ts +1 -0
  82. package/lib/radio-group.component.d.ts +8 -0
  83. package/lib/radio-item.component.d.ts +10 -4
  84. package/lib/radio-service.d.ts +29 -0
  85. package/lib/range-calendar.component.d.ts +33 -4
  86. package/lib/segment.component.d.ts +13 -0
  87. package/lib/select-item.component.d.ts +4 -1
  88. package/lib/select.component.d.ts +20 -0
  89. package/lib/separator.component.d.ts +2 -0
  90. package/lib/sheet-wrapper.component.d.ts +4 -0
  91. package/lib/sheet.component.d.ts +10 -1
  92. package/lib/sidebar.component.d.ts +2 -0
  93. package/lib/skeleton.component.d.ts +9 -3
  94. package/lib/switch.component.d.ts +13 -20
  95. package/lib/tabs.component.d.ts +11 -1
  96. package/lib/theme.service.d.ts +21 -6
  97. package/lib/toaster.component.d.ts +2 -2
  98. package/lib/toggle-group.component.d.ts +20 -2
  99. package/lib/toggle.component.d.ts +1 -1
  100. package/lib/tolle-config.d.ts +8 -0
  101. package/lib/tooltip.directive.d.ts +3 -0
  102. package/lib/utils/color.d.ts +87 -0
  103. package/package.json +4 -1
  104. package/preset.js +28 -0
  105. package/public-api.d.ts +1 -0
  106. package/registry/docs-content.json +4214 -0
  107. package/registry/llms-full.txt +1599 -0
  108. package/registry/llms.txt +83 -0
  109. package/registry/manifest.json +4925 -0
  110. package/registry/r/accordion-item.json +21 -0
  111. package/registry/r/accordion.json +23 -0
  112. package/registry/r/alert-dialog-dynamic.json +31 -0
  113. package/registry/r/alert-dialog.json +26 -0
  114. package/registry/r/alert.json +23 -0
  115. package/registry/r/aspect-ratio.json +21 -0
  116. package/registry/r/avatar-fallback.json +16 -0
  117. package/registry/r/avatar.json +23 -0
  118. package/registry/r/badge.json +23 -0
  119. package/registry/r/breadcrumb-item.json +16 -0
  120. package/registry/r/breadcrumb-link.json +16 -0
  121. package/registry/r/breadcrumb-separator.json +16 -0
  122. package/registry/r/breadcrumb.json +21 -0
  123. package/registry/r/button-group.json +21 -0
  124. package/registry/r/button.json +23 -0
  125. package/registry/r/calendar.json +23 -0
  126. package/registry/r/card.json +21 -0
  127. package/registry/r/carousel.json +18 -0
  128. package/registry/r/checkbox.json +23 -0
  129. package/registry/r/collapsible.json +21 -0
  130. package/registry/r/context-menu-trigger.json +23 -0
  131. package/registry/r/context-menu.json +28 -0
  132. package/registry/r/country-selector.json +31 -0
  133. package/registry/r/data-table.json +38 -0
  134. package/registry/r/date-picker.json +27 -0
  135. package/registry/r/date-range-picker.json +32 -0
  136. package/registry/r/dropdown-item.json +21 -0
  137. package/registry/r/dropdown-label.json +16 -0
  138. package/registry/r/dropdown-menu.json +16 -0
  139. package/registry/r/dropdown-separator.json +16 -0
  140. package/registry/r/dropdown-trigger.json +20 -0
  141. package/registry/r/empty-state.json +23 -0
  142. package/registry/r/hover-card.json +23 -0
  143. package/registry/r/input.json +21 -0
  144. package/registry/r/label.json +21 -0
  145. package/registry/r/masked-input.json +21 -0
  146. package/registry/r/modal.json +36 -0
  147. package/registry/r/multi-select.json +33 -0
  148. package/registry/r/otp-group.json +16 -0
  149. package/registry/r/otp-slot.json +21 -0
  150. package/registry/r/otp.json +21 -0
  151. package/registry/r/pagination.json +32 -0
  152. package/registry/r/phone-number-input.json +34 -0
  153. package/registry/r/popover-content.json +21 -0
  154. package/registry/r/popover.json +18 -0
  155. package/registry/r/progress.json +21 -0
  156. package/registry/r/radio-group.json +26 -0
  157. package/registry/r/radio-item.json +26 -0
  158. package/registry/r/range-calendar.json +28 -0
  159. package/registry/r/resizable-panel-item.json +23 -0
  160. package/registry/r/resizable-panel.json +23 -0
  161. package/registry/r/resizable.json +21 -0
  162. package/registry/r/scroll-area.json +21 -0
  163. package/registry/r/segment.json +21 -0
  164. package/registry/r/select-group.json +21 -0
  165. package/registry/r/select-item.json +26 -0
  166. package/registry/r/select-separator.json +21 -0
  167. package/registry/r/select.json +31 -0
  168. package/registry/r/separator.json +21 -0
  169. package/registry/r/sheet-wrapper.json +31 -0
  170. package/registry/r/sheet.json +21 -0
  171. package/registry/r/sidebar.json +21 -0
  172. package/registry/r/skeleton.json +23 -0
  173. package/registry/r/slider.json +21 -0
  174. package/registry/r/switch.json +23 -0
  175. package/registry/r/tabs.json +23 -0
  176. package/registry/r/tag-input.json +25 -0
  177. package/registry/r/textarea.json +21 -0
  178. package/registry/r/toaster.json +26 -0
  179. package/registry/r/toggle-group.json +25 -0
  180. package/registry/r/toggle.json +23 -0
  181. package/registry/r/tolle-cell.json +16 -0
  182. package/registry/r/tooltip.json +23 -0
  183. package/registry/registry.json +1540 -0
  184. package/theme.css +56 -1
@@ -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
- `, 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL3BhZ2luYXRpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQWdGNUQsTUFBTSxPQUFPLG1CQUFtQjtJQUNyQixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsYUFBYSxHQUFHLElBQUksQ0FBQztJQUNyQixlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLG1CQUFtQixHQUFHLElBQUksQ0FBQztJQUMzQix1QkFBdUIsQ0FBVTtJQUVqQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0lBQ2pCLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDckIsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUNoQixlQUFlLEdBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUU1QyxrQkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0lBQ2hELGdCQUFnQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFFeEQsVUFBVSxHQUFHLENBQUMsQ0FBQztJQUNmLEtBQUssR0FBRyxDQUFDLENBQUM7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ZSxFQUFFLG1CQUFtQixDQUFDO29CQUMxRSxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUVUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDs4QkFFVSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFSSxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtTZWxlY3RDb21wb25lbnR9IGZyb20gJy4vc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQge1NlbGVjdEl0ZW1Db21wb25lbnR9IGZyb20gJy4vc2VsZWN0LWl0ZW0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtcGFnaW5hdGlvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBTZWxlY3RDb21wb25lbnQsIFNlbGVjdEl0ZW1Db21wb25lbnRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxuYXYgcm9sZT1cIm5hdmlnYXRpb25cIiBhcmlhLWxhYmVsPVwicGFnaW5hdGlvblwiPlxuICAgIDxkaXYgW2NsYXNzXT1cImNuKCdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHgtMiBweS00JywgY2xhc3MpXCI+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]="value"
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 - (value || 0)) + '%)'"
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]="value"
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 - (value || 0)) + '%)'"
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9wcm9ncmVzcy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBcUJoQyxNQUFNLE9BQU8saUJBQWlCO0lBQ2pCLEtBQUssR0FBa0IsQ0FBQyxDQUFDO0lBQ3pCLEtBQUssR0FBVyxFQUFFLENBQUM7SUFFNUIsSUFBSSxhQUFhO1FBQ2IsT0FBTyxFQUFFLENBQ0wsZ0VBQWdFLEVBQ2hFLElBQUksQ0FBQyxLQUFLLENBQ2IsQ0FBQztJQUNOLENBQUM7d0dBVFEsaUJBQWlCOzRGQUFqQixpQkFBaUIsc0hBZmhCOzs7Ozs7Ozs7Ozs7O0dBYVgsMkRBZFcsWUFBWTs7NEZBZ0JiLGlCQUFpQjtrQkFuQjdCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7O0dBYVg7aUJBQ0Y7OEJBRVksS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3RvbGxlLXByb2dyZXNzJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgPGRpdlxuICAgICAgW2NsYXNzXT1cImNvbXB1dGVkQ2xhc3NcIlxuICAgICAgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgIFthdHRyLmFyaWEtdmFsdWVtaW5dPVwiMFwiXG4gICAgICBbYXR0ci5hcmlhLXZhbHVlbWF4XT1cIjEwMFwiXG4gICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cInZhbHVlXCJcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiaC1mdWxsIHctZnVsbCBmbGV4LTEgYmctcHJpbWFyeSB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgZWFzZS1pbi1vdXRcIlxuICAgICAgICBbc3R5bGUudHJhbnNmb3JtXT1cIid0cmFuc2xhdGVYKC0nICsgKDEwMCAtICh2YWx1ZSB8fCAwKSkgKyAnJSknXCJcbiAgICAgID48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc0NvbXBvbmVudCB7XG4gICAgQElucHV0KCkgdmFsdWU6IG51bWJlciB8IG51bGwgPSAwO1xuICAgIEBJbnB1dCgpIGNsYXNzOiBzdHJpbmcgPSAnJztcblxuICAgIGdldCBjb21wdXRlZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gY24oXG4gICAgICAgICAgICBcInJlbGF0aXZlIGgtMiB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtZnVsbCBiZy1wcmltYXJ5LzIwXCIsXG4gICAgICAgICAgICB0aGlzLmNsYXNzXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
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.onChange(val);
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9yYWRpby1ncm91cC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUE4QixNQUFNLGVBQWUsQ0FBQztBQUN4RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDaEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDOzs7QUFvQjdDLE1BQU0sT0FBTyxtQkFBbUI7SUFTVjtJQVJYLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDWCxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLElBQUksR0FBRyxlQUFlLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBRTVFLEtBQUssQ0FBTTtJQUNYLFFBQVEsR0FBUSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDekIsU0FBUyxHQUFRLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUUxQixZQUFvQixZQUEwQjtRQUExQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUM1QyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUM7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBRSxVQUFtQjtRQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVU7UUFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELGdCQUFnQixDQUFDLEVBQU8sSUFBVSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsaUJBQWlCLENBQUMsRUFBTyxJQUFVLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUV0QyxFQUFFLEdBQUcsRUFBRSxDQUFDO3dHQWhDaEIsbUJBQW1COzRGQUFuQixtQkFBbUIsZ0lBZG5CO1lBQ1QsWUFBWTtZQUNaO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7Z0JBQ2xELEtBQUssRUFBRSxJQUFJO2FBQ1o7U0FDRiwrQ0FDUzs7OztHQUlULDJEQWJTLFlBQVk7OzRGQWVYLG1CQUFtQjtrQkFsQi9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsU0FBUyxFQUFFO3dCQUNULFlBQVk7d0JBQ1o7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsb0JBQW9CLENBQUM7NEJBQ2xELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO29CQUNELFFBQVEsRUFBRTs7OztHQUlUO2lCQUNGO2lGQUVVLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgZm9yd2FyZFJlZiwgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuaW1wb3J0IHtSYWRpb1NlcnZpY2V9IGZyb20gJy4vcmFkaW8tc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLXJhZGlvLWdyb3VwJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHByb3ZpZGVyczogW1xuICAgIFJhZGlvU2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFJhZGlvR3JvdXBDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBbY2xhc3NdPVwiY24oJ2dyaWQgZ2FwLTInLCBjbGFzcylcIiByb2xlPVwicmFkaW9ncm91cFwiPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIFJhZGlvR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgbmFtZSA9IGByYWRpby1ncm91cC0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gO1xuXG4gIHZhbHVlOiBhbnk7XG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7fTtcbiAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJhZGlvU2VydmljZTogUmFkaW9TZXJ2aWNlKSB7XG4gICAgdGhpcy5yYWRpb1NlcnZpY2Uuc2VsZWN0ZWRWYWx1ZSQuc3Vic2NyaWJlKHZhbCA9PiB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsO1xuICAgICAgdGhpcy5vbkNoYW5nZSh2YWwpO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMucmFkaW9TZXJ2aWNlLnNldERpc2FibGVkKGlzRGlzYWJsZWQpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5yYWRpb1NlcnZpY2Uuc2V0RGlzYWJsZWQodGhpcy5kaXNhYmxlZCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5yYWRpb1NlcnZpY2Uuc2VsZWN0KHZhbHVlKTtcbiAgfVxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vbkNoYW5nZSA9IGZuOyB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHsgdGhpcy5vblRvdWNoZWQgPSBmbjsgfVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBjbiA9IGNuO1xufVxuIl19
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 [class]="cn(
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 [class]="cn(
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8taXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL3JhZGlvLWl0ZW0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUF3QyxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVoQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBaUNwQyxNQUFNLE9BQU8sa0JBQWtCO0lBZ0JuQjtJQUNBO0lBaEJELEtBQUssQ0FBTTtJQUNYLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUVwQixVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ25CLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFFZCxHQUFHLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUVqQyxJQUFJLG1CQUFtQjtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM3QyxDQUFDO0lBRUQsbUVBQW1FO0lBQ25FLFlBQ1UsWUFBMEIsRUFDMUIsR0FBc0I7UUFEdEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7SUFDN0IsQ0FBQztJQUVKLFFBQVE7UUFDTiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxxQkFBcUI7UUFDaEQsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLHdDQUF3QztRQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FDVixJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUM7WUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLHFCQUFxQjtRQUNoRCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMseUJBQXlCO0lBQ25ELENBQUM7SUFFUyxFQUFFLEdBQUcsRUFBRSxDQUFDO3dHQTlDUCxrQkFBa0I7NEZBQWxCLGtCQUFrQiw4SUEzQm5COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJULDJEQTFCUyxZQUFZOzs0RkE0Qlgsa0JBQWtCO2tCQS9COUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5QlQ7aUJBQ0Y7aUhBRVUsS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPbkRlc3Ryb3ksIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcbmltcG9ydCB7IFJhZGlvU2VydmljZSB9IGZyb20gJy4vcmFkaW8tc2VydmljZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtcmFkaW8taXRlbScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgIChjbGljayk9XCIhaXNFZmZlY3RpdmVEaXNhYmxlZCAmJiBzZWxlY3QoKVwiXG4gICAgICBbY2xhc3NdPVwiY24oXG4gICAgICAgICdmbGV4IGl0ZW1zLWNlbnRlciBzcGFjZS14LTIgZ3JvdXAgcHktMScsXG4gICAgICAgIGlzRWZmZWN0aXZlRGlzYWJsZWQgPyAnY3Vyc29yLW5vdC1hbGxvd2VkIG9wYWNpdHktNTAnIDogJ2N1cnNvci1wb2ludGVyJ1xuICAgICAgKVwiXG4gICAgPlxuICAgICAgPGRpdiBbY2xhc3NdPVwiY24oXG4gICAgICAgICdhc3BlY3Qtc3F1YXJlIGgtNCB3LTQgcm91bmRlZC1mdWxsIGJvcmRlciBib3JkZXItcHJpbWFyeSB0ZXh0LXByaW1hcnkgdHJhbnNpdGlvbi1hbGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXInLFxuICAgICAgICAncmluZy1vZmZzZXQtYmFja2dyb3VuZCBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTInLFxuICAgICAgICAhaXNFZmZlY3RpdmVEaXNhYmxlZCAmJiAnZ3JvdXAtaG92ZXI6Ym9yZGVyLXByaW1hcnkvNzAnLFxuICAgICAgICBpc1NlbGVjdGVkID8gJ2JnLWJhY2tncm91bmQnIDogJ2JnLXRyYW5zcGFyZW50JyxcbiAgICAgICAgY2xhc3NcbiAgICAgIClcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiaXNTZWxlY3RlZFwiXG4gICAgICAgICAgY2xhc3M9XCJoLTIuNSB3LTIuNSByb3VuZGVkLWZ1bGwgYmctcHJpbWFyeSBhbmltYXRlLWluIHpvb20taW4tNTAgZHVyYXRpb24tMjAwXCJcbiAgICAgICAgPjwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtc20gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHNlbGVjdC1ub25lXCIgW2NsYXNzLmN1cnNvci1wb2ludGVyXT1cIiFpc0VmZmVjdGl2ZURpc2FibGVkXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgUmFkaW9JdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSB2YWx1ZTogYW55O1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBjbGFzcyA9ICcnO1xuXG4gIGlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgZ3JvdXBEaXNhYmxlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgc3ViID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gIGdldCBpc0VmZmVjdGl2ZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRpc2FibGVkIHx8IHRoaXMuZ3JvdXBEaXNhYmxlZDtcbiAgfVxuXG4gIC8vIEluamVjdCBDaGFuZ2VEZXRlY3RvclJlZiB0byBlbnN1cmUgVUkgdXBkYXRlcyB3aGVuIHNlcnZpY2UgZW1pdHNcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByYWRpb1NlcnZpY2U6IFJhZGlvU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIExpc3RlbiBmb3Igc2VsZWN0aW9uIGNoYW5nZXNcbiAgICB0aGlzLnN1Yi5hZGQoXG4gICAgICB0aGlzLnJhZGlvU2VydmljZS5zZWxlY3RlZFZhbHVlJC5zdWJzY3JpYmUodmFsID0+IHtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkID0gKHZhbCA9PT0gdGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpOyAvLyBUcmlnZ2VyIFVJIHJlZnJlc2hcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBmb3IgZ3JvdXAtbGV2ZWwgZGlzYWJsZWQgc3RhdGVcbiAgICB0aGlzLnN1Yi5hZGQoXG4gICAgICB0aGlzLnJhZGlvU2VydmljZS5kaXNhYmxlZCQuc3Vic2NyaWJlKGRpcyA9PiB7XG4gICAgICAgIHRoaXMuZ3JvdXBEaXNhYmxlZCA9IGRpcztcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7IC8vIFRyaWdnZXIgVUkgcmVmcmVzaFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgc2VsZWN0KCkge1xuICAgIHRoaXMucmFkaW9TZXJ2aWNlLnNlbGVjdCh0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3ViLnVuc3Vic2NyaWJlKCk7IC8vIENsZWFuIHVwIHN1YnNjcmlwdGlvbnNcbiAgfVxuXG4gIHByb3RlY3RlZCBjbiA9IGNuO1xufVxuIl19
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvcmFkaW8tc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBQyxlQUFlLEVBQVUsTUFBTSxNQUFNLENBQUM7O0FBRzlDLE1BQU0sT0FBTyxZQUFZO0lBQ2YsbUJBQW1CLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7SUFDN0QsY0FBYyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVqRCxjQUFjLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDN0QsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFL0MsTUFBTSxDQUFDLEtBQVU7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLFVBQW1CO1FBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7d0dBZlUsWUFBWTs0R0FBWixZQUFZOzs0RkFBWixZQUFZO2tCQUR4QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmFkaW9TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzZWxlY3RlZFZhbHVlU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuICBzZWxlY3RlZFZhbHVlJCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZVNvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGRpc2FibGVkU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGRpc2FibGVkJCA9IHRoaXMuZGlzYWJsZWRTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG5cbiAgc2VsZWN0KHZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWRTb3VyY2UudmFsdWUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZVNvdXJjZS5uZXh0KHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBzZXREaXNhYmxlZChpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZFNvdXJjZS5uZXh0KGlzRGlzYWJsZWQpO1xuICB9XG59XG4iXX0=
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaW8tc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvcmFkaW8tc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBZXZDLE1BQU0sT0FBTyxZQUFZO0lBQ2YsbUJBQW1CLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7SUFDN0QsY0FBYyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUVqRCxjQUFjLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7SUFDN0QsU0FBUyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFL0M7Ozs7O09BS0c7SUFDSyxtQkFBbUIsR0FBRyxJQUFJLGVBQWUsQ0FBTSxTQUFTLENBQUMsQ0FBQztJQUNsRSxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBRXpELG9EQUFvRDtJQUM1QyxLQUFLLEdBQXNCLEVBQUUsQ0FBQztJQUM5QixrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFFbkMsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBVTtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsVUFBbUI7UUFDN0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFxQjtRQUM1QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsSUFBcUI7UUFDOUIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELG1FQUFtRTtJQUNuRSxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxrQkFBa0I7WUFBRSxPQUFPO1FBQ3BDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDL0IscUVBQXFFO1FBQ3JFLDBFQUEwRTtRQUMxRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUMxQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDO1FBQ2hELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUV2RixJQUFJLFFBQWEsQ0FBQztRQUNsQixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLFFBQVEsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQ2hDLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELFFBQVEsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMzRCxDQUFDO1FBRUQsSUFBSSxRQUFRLEtBQUssSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7d0dBbEZVLFlBQVk7NEdBQVosWUFBWTs7NEZBQVosWUFBWTtrQkFEeEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIENvbnRyYWN0IGltcGxlbWVudGVkIGJ5IGB0b2xsZS1yYWRpby1pdGVtYCBzbyB0aGUgZ3JvdXAvc2VydmljZSBjYW4gZHJpdmVcbiAqIHJvdmluZyB0YWJpbmRleCArIGFycm93LWtleSBuYXZpZ2F0aW9uIHdpdGhvdXQgaW1wb3J0aW5nIHRoZSBjb21wb25lbnRcbiAqICh3aGljaCB3b3VsZCBjcmVhdGUgYSBjaXJjdWxhciBkZXBlbmRlbmN5KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3ZpbmdSYWRpb0l0ZW0ge1xuICB2YWx1ZTogYW55O1xuICBpc0l0ZW1EaXNhYmxlZCgpOiBib29sZWFuO1xuICBob3N0RWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gIGZvY3VzSXRlbSgpOiB2b2lkO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmFkaW9TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzZWxlY3RlZFZhbHVlU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xuICBzZWxlY3RlZFZhbHVlJCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZVNvdXJjZS5hc09ic2VydmFibGUoKTtcblxuICBwcml2YXRlIGRpc2FibGVkU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGRpc2FibGVkJCA9IHRoaXMuZGlzYWJsZWRTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG5cbiAgLyoqXG4gICAqIFRoZSBzaW5nbGUgdmFsdWUgdGhhdCBpcyBhbGxvd2VkIGluIHRoZSB0YWIgb3JkZXIgKHJvdmluZyB0YWJpbmRleCkuXG4gICAqIEl0IGlzIHRoZSBzZWxlY3RlZCB2YWx1ZSwgb3IgLSB3aGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQgLSB0aGUgZmlyc3RcbiAgICogZW5hYmxlZCBpdGVtJ3MgdmFsdWUuIFJlY29tcHV0ZWQgYXN5bmNocm9ub3VzbHkgc28gdGhlIHJlZ2lzdHJ5IGlzXG4gICAqIGNvbXBsZXRlIGJlZm9yZSBhbnkgaXRlbSByZWFkcyBpdCAoYXZvaWRzIHBhcnRpYWwtcmVnaXN0cnkgZ2xpdGNoZXMpLlxuICAgKi9cbiAgcHJpdmF0ZSB0YWJiYWJsZVZhbHVlU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XG4gIHRhYmJhYmxlVmFsdWUkID0gdGhpcy50YWJiYWJsZVZhbHVlU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIC8qKiBSZWdpc3RlcmVkIGl0ZW1zIGluIERPTSAocmVnaXN0cmF0aW9uKSBvcmRlci4gKi9cbiAgcHJpdmF0ZSBpdGVtczogUm92aW5nUmFkaW9JdGVtW10gPSBbXTtcbiAgcHJpdmF0ZSByZWNvbXB1dGVTY2hlZHVsZWQgPSBmYWxzZTtcblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRWYWx1ZVNvdXJjZS52YWx1ZTtcbiAgfVxuXG4gIHNlbGVjdCh2YWx1ZTogYW55KSB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkU291cmNlLnZhbHVlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVTb3VyY2UubmV4dCh2YWx1ZSk7XG4gICAgICB0aGlzLnNjaGVkdWxlUmVjb21wdXRlKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0RGlzYWJsZWQoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWRTb3VyY2UubmV4dChpc0Rpc2FibGVkKTtcbiAgICB0aGlzLnNjaGVkdWxlUmVjb21wdXRlKCk7XG4gIH1cblxuICByZWdpc3RlcihpdGVtOiBSb3ZpbmdSYWRpb0l0ZW0pIHtcbiAgICBpZiAodGhpcy5pdGVtcy5pbmRleE9mKGl0ZW0pID09PSAtMSkge1xuICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgdGhpcy5zY2hlZHVsZVJlY29tcHV0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHVucmVnaXN0ZXIoaXRlbTogUm92aW5nUmFkaW9JdGVtKSB7XG4gICAgY29uc3QgaSA9IHRoaXMuaXRlbXMuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAoaSA+IC0xKSB7XG4gICAgICB0aGlzLml0ZW1zLnNwbGljZShpLCAxKTtcbiAgICAgIHRoaXMuc2NoZWR1bGVSZWNvbXB1dGUoKTtcbiAgICB9XG4gIH1cblxuICAvKiogT3JkZXJlZCwgbm9uLWRpc2FibGVkIGl0ZW1zIC0gdXNlZCBmb3IgYXJyb3cta2V5IG5hdmlnYXRpb24uICovXG4gIGdldEVuYWJsZWRJdGVtcygpOiBSb3ZpbmdSYWRpb0l0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMuZmlsdGVyKGkgPT4gIWkuaXNJdGVtRGlzYWJsZWQoKSk7XG4gIH1cblxuICBwcml2YXRlIHNjaGVkdWxlUmVjb21wdXRlKCkge1xuICAgIGlmICh0aGlzLnJlY29tcHV0ZVNjaGVkdWxlZCkgcmV0dXJuO1xuICAgIHRoaXMucmVjb21wdXRlU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAvLyBEZWZlciB0byBhIG1pY3JvdGFzayBzbyBhbGwgaXRlbXMgaGF2ZSByZWdpc3RlcmVkIChhbmQgdGhlIGN1cnJlbnRcbiAgICAvLyBjaGFuZ2UtZGV0ZWN0aW9uIHBhc3MgaGFzIGNvbXBsZXRlZCkgYmVmb3JlIHRoZSB0YWJiYWJsZSB2YWx1ZSB1cGRhdGVzLlxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5yZWNvbXB1dGVTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVjb21wdXRlVGFiYmFibGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb21wdXRlVGFiYmFibGUoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkVmFsdWVTb3VyY2UudmFsdWU7XG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5pdGVtcy5maW5kKGkgPT4gaS52YWx1ZSA9PT0gc2VsZWN0ZWQgJiYgIWkuaXNJdGVtRGlzYWJsZWQoKSk7XG5cbiAgICBsZXQgdGFiYmFibGU6IGFueTtcbiAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICB0YWJiYWJsZSA9IHNlbGVjdGVkSXRlbS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlyc3RFbmFibGVkID0gdGhpcy5pdGVtcy5maW5kKGkgPT4gIWkuaXNJdGVtRGlzYWJsZWQoKSk7XG4gICAgICB0YWJiYWJsZSA9IGZpcnN0RW5hYmxlZCA/IGZpcnN0RW5hYmxlZC52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAodGFiYmFibGUgIT09IHRoaXMudGFiYmFibGVWYWx1ZVNvdXJjZS52YWx1ZSkge1xuICAgICAgdGhpcy50YWJiYWJsZVZhbHVlU291cmNlLm5leHQodGFiYmFibGUpO1xuICAgIH1cbiAgfVxufVxuIl19