@koobiq/components 17.0.0-rc.7 → 17.0.0-rc.9

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 (135) hide show
  1. package/alert/alert.component.scss +12 -9
  2. package/badge/badge.component.scss +7 -7
  3. package/button-toggle/button-toggle.scss +5 -2
  4. package/card/_card-theme.scss +1 -1
  5. package/checkbox/checkbox.scss +10 -3
  6. package/code-block/_code-block-theme.scss +1 -1
  7. package/core/form-field/form-field-ref.d.ts +2 -0
  8. package/core/locales/locale-service.d.ts +1 -0
  9. package/core/select/common.d.ts +35 -0
  10. package/core/select/index.d.ts +1 -0
  11. package/core/selection/pseudo-checkbox/_pseudo-checkbox-theme.scss +1 -0
  12. package/dropdown/dropdown-item.scss +2 -0
  13. package/dropdown/dropdown-trigger.directive.d.ts +2 -2
  14. package/esm2022/alert/alert.component.mjs +2 -2
  15. package/esm2022/badge/badge.component.mjs +2 -2
  16. package/esm2022/button/button.component.mjs +2 -2
  17. package/esm2022/button-toggle/button-toggle.component.mjs +2 -2
  18. package/esm2022/checkbox/checkbox.mjs +2 -2
  19. package/esm2022/code-block/code-block.component.mjs +1 -1
  20. package/esm2022/core/form-field/form-field-ref.mjs +1 -1
  21. package/esm2022/core/locales/locale-service.mjs +5 -2
  22. package/esm2022/core/option/option.mjs +2 -2
  23. package/esm2022/core/select/common.mjs +120 -0
  24. package/esm2022/core/select/index.mjs +2 -1
  25. package/esm2022/core/version.mjs +2 -2
  26. package/esm2022/datepicker/calendar-header.component.mjs +1 -1
  27. package/esm2022/dropdown/dropdown-item.component.mjs +2 -2
  28. package/esm2022/dropdown/dropdown-trigger.directive.mjs +4 -4
  29. package/esm2022/file-upload/multiple-file-upload.component.mjs +2 -2
  30. package/esm2022/file-upload/single-file-upload.component.mjs +2 -2
  31. package/esm2022/form-field/form-field.mjs +2 -2
  32. package/esm2022/form-field/hint.mjs +2 -2
  33. package/esm2022/form-field/password-hint.mjs +2 -2
  34. package/esm2022/list/list-selection.component.mjs +2 -2
  35. package/esm2022/list/list.component.mjs +2 -2
  36. package/esm2022/navbar/navbar.component.mjs +2 -2
  37. package/esm2022/navbar/vertical-navbar.component.mjs +2 -2
  38. package/esm2022/popover/popover-confirm.component.mjs +3 -3
  39. package/esm2022/popover/popover.component.mjs +3 -3
  40. package/esm2022/radio/radio.component.mjs +2 -2
  41. package/esm2022/scrollbar/scrollbar.component.mjs +2 -2
  42. package/esm2022/select/select.component.mjs +18 -114
  43. package/esm2022/select/select.module.mjs +28 -28
  44. package/esm2022/table/table.component.mjs +2 -2
  45. package/esm2022/tabs/tab-group.component.mjs +54 -12
  46. package/esm2022/tabs/tab-header.component.mjs +2 -2
  47. package/esm2022/tabs/tab-nav-bar/tab-nav-bar.mjs +2 -2
  48. package/esm2022/tags/tag-default-options.mjs +1 -1
  49. package/esm2022/tags/tag-input.mjs +17 -3
  50. package/esm2022/tags/tag-list.component.mjs +2 -2
  51. package/esm2022/tags/tag.component.mjs +2 -2
  52. package/esm2022/timezone/timezone-option.component.mjs +2 -2
  53. package/esm2022/timezone/timezone-select.component.mjs +5 -5
  54. package/esm2022/toast/toast.component.mjs +3 -3
  55. package/esm2022/toast/toast.service.mjs +17 -12
  56. package/esm2022/tooltip/tooltip.component.mjs +2 -2
  57. package/esm2022/tree/tree-option.component.mjs +2 -2
  58. package/esm2022/tree-select/tree-select.component.mjs +9 -37
  59. package/esm2022/tree-select/tree-select.module.mjs +31 -11
  60. package/fesm2022/koobiq-components-alert.mjs +2 -2
  61. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  62. package/fesm2022/koobiq-components-badge.mjs +2 -2
  63. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  64. package/fesm2022/koobiq-components-button-toggle.mjs +2 -2
  65. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  66. package/fesm2022/koobiq-components-button.mjs +2 -2
  67. package/fesm2022/koobiq-components-checkbox.mjs +2 -2
  68. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  69. package/fesm2022/koobiq-components-code-block.mjs +1 -1
  70. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  71. package/fesm2022/koobiq-components-core.mjs +124 -7
  72. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  73. package/fesm2022/koobiq-components-datepicker.mjs +1 -1
  74. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  75. package/fesm2022/koobiq-components-dropdown.mjs +5 -5
  76. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  77. package/fesm2022/koobiq-components-file-upload.mjs +4 -4
  78. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  79. package/fesm2022/koobiq-components-form-field.mjs +6 -6
  80. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  81. package/fesm2022/koobiq-components-list.mjs +4 -4
  82. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  83. package/fesm2022/koobiq-components-navbar.mjs +4 -4
  84. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  85. package/fesm2022/koobiq-components-popover.mjs +4 -4
  86. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  87. package/fesm2022/koobiq-components-radio.mjs +2 -2
  88. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  89. package/fesm2022/koobiq-components-scrollbar.mjs +2 -2
  90. package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
  91. package/fesm2022/koobiq-components-select.mjs +46 -142
  92. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  93. package/fesm2022/koobiq-components-table.mjs +2 -2
  94. package/fesm2022/koobiq-components-tabs.mjs +56 -14
  95. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  96. package/fesm2022/koobiq-components-tags.mjs +20 -7
  97. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  98. package/fesm2022/koobiq-components-timezone.mjs +6 -6
  99. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  100. package/fesm2022/koobiq-components-toast.mjs +19 -13
  101. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  102. package/fesm2022/koobiq-components-tooltip.mjs +2 -2
  103. package/fesm2022/koobiq-components-tree-select.mjs +37 -44
  104. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  105. package/fesm2022/koobiq-components-tree.mjs +2 -2
  106. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  107. package/file-upload/multiple-file-upload.component.scss +9 -7
  108. package/form-field/_form-field-theme.scss +2 -2
  109. package/form-field/hint.scss +2 -0
  110. package/icon/_icon-button-theme.scss +2 -2
  111. package/list/list.scss +3 -1
  112. package/navbar/_navbar-item_horizontal.scss +5 -2
  113. package/navbar/_navbar-item_vertical.scss +5 -5
  114. package/navbar/navbar-brand.scss +1 -1
  115. package/navbar/navbar-item.scss +6 -0
  116. package/package.json +6 -6
  117. package/prebuilt-themes/dark-theme.css +1 -1
  118. package/prebuilt-themes/light-theme.css +1 -1
  119. package/radio/radio.scss +3 -1
  120. package/schematics/ng-add/index.js +4 -4
  121. package/scrollbar/scrollbar.component.scss +6 -0
  122. package/select/select.component.d.ts +2 -32
  123. package/select/select.module.d.ts +1 -1
  124. package/tabs/tab-group.component.d.ts +9 -3
  125. package/tags/_tag-theme.scss +2 -2
  126. package/tags/tag-default-options.d.ts +1 -0
  127. package/tags/tag-input.d.ts +7 -1
  128. package/timezone/timezone-select.component.d.ts +2 -1
  129. package/toast/toast.component.scss +1 -1
  130. package/toast/toast.service.d.ts +8 -4
  131. package/toggle/_toggle-theme.scss +2 -2
  132. package/tree-select/_tree-select-theme.scss +1 -1
  133. package/tree-select/tree-select.component.d.ts +4 -17
  134. package/tree-select/tree-select.module.d.ts +1 -2
  135. package/tree-select/tree-select.scss +1 -1
@@ -1,37 +1,37 @@
1
1
  import { OverlayModule } from '@angular/cdk/overlay';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { NgModule } from '@angular/core';
4
- import { KBQ_SELECT_SCROLL_STRATEGY_PROVIDER, KbqOptionModule } from '@koobiq/components/core';
4
+ import { KBQ_SELECT_SCROLL_STRATEGY_PROVIDER, KbqOptionModule, KbqSelectFooter, KbqSelectMatcher, KbqSelectSearch, KbqSelectSearchEmptyResult, KbqSelectTrigger } from '@koobiq/components/core';
5
5
  import { KbqFormFieldModule } from '@koobiq/components/form-field';
6
6
  import { KbqIconModule } from '@koobiq/components/icon';
7
7
  import { KbqTagsModule } from '@koobiq/components/tags';
8
8
  import { KbqToolTipModule } from '@koobiq/components/tooltip';
9
9
  import { KbqOptionTooltip } from './select-option.directive';
10
- import { KbqSelect, KbqSelectFooter, KbqSelectMatcher, KbqSelectSearch, KbqSelectSearchEmptyResult, KbqSelectTrigger } from './select.component';
10
+ import { KbqSelect } from './select.component';
11
11
  import * as i0 from "@angular/core";
12
12
  export class KbqSelectModule {
13
13
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: KbqSelectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
14
14
  /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.0", ngImport: i0, type: KbqSelectModule, declarations: [KbqSelect,
15
- KbqSelectSearch,
16
- KbqSelectSearchEmptyResult,
17
- KbqSelectTrigger,
18
- KbqSelectMatcher,
19
- KbqOptionTooltip,
20
- KbqSelectFooter], imports: [CommonModule,
15
+ KbqOptionTooltip], imports: [CommonModule,
21
16
  OverlayModule,
22
17
  KbqOptionModule,
23
18
  KbqIconModule,
24
19
  KbqTagsModule,
25
- KbqToolTipModule], exports: [KbqFormFieldModule,
26
- KbqSelect,
20
+ KbqToolTipModule,
27
21
  KbqSelectSearch,
28
- KbqSelectSearchEmptyResult,
29
- KbqSelectTrigger,
30
- KbqSelectMatcher,
31
22
  KbqSelectFooter,
23
+ KbqSelectMatcher,
24
+ KbqSelectTrigger,
25
+ KbqSelectSearchEmptyResult], exports: [KbqFormFieldModule,
26
+ KbqSelect,
32
27
  KbqOptionTooltip,
33
28
  KbqOptionModule,
34
- CommonModule] }); }
29
+ CommonModule,
30
+ KbqSelectSearch,
31
+ KbqSelectFooter,
32
+ KbqSelectMatcher,
33
+ KbqSelectTrigger,
34
+ KbqSelectSearchEmptyResult] }); }
35
35
  /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: KbqSelectModule, providers: [KBQ_SELECT_SCROLL_STRATEGY_PROVIDER], imports: [CommonModule,
36
36
  OverlayModule,
37
37
  KbqOptionModule,
@@ -50,30 +50,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImpor
50
50
  KbqOptionModule,
51
51
  KbqIconModule,
52
52
  KbqTagsModule,
53
- KbqToolTipModule
53
+ KbqToolTipModule,
54
+ KbqSelectSearch,
55
+ KbqSelectFooter,
56
+ KbqSelectMatcher,
57
+ KbqSelectTrigger,
58
+ KbqSelectSearchEmptyResult
54
59
  ],
55
60
  exports: [
56
61
  KbqFormFieldModule,
57
62
  KbqSelect,
58
- KbqSelectSearch,
59
- KbqSelectSearchEmptyResult,
60
- KbqSelectTrigger,
61
- KbqSelectMatcher,
62
- KbqSelectFooter,
63
63
  KbqOptionTooltip,
64
64
  KbqOptionModule,
65
- CommonModule
65
+ CommonModule,
66
+ KbqSelectSearch,
67
+ KbqSelectFooter,
68
+ KbqSelectMatcher,
69
+ KbqSelectTrigger,
70
+ KbqSelectSearchEmptyResult
66
71
  ],
67
72
  declarations: [
68
73
  KbqSelect,
69
- KbqSelectSearch,
70
- KbqSelectSearchEmptyResult,
71
- KbqSelectTrigger,
72
- KbqSelectMatcher,
73
- KbqOptionTooltip,
74
- KbqSelectFooter
74
+ KbqOptionTooltip
75
75
  ],
76
76
  providers: [KBQ_SELECT_SCROLL_STRATEGY_PROVIDER]
77
77
  }]
78
78
  }] });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMvRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFDSCxTQUFTLEVBQ1QsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsMEJBQTBCLEVBQzFCLGdCQUFnQixFQUNuQixNQUFNLG9CQUFvQixDQUFDOztBQW1DNUIsTUFBTSxPQUFPLGVBQWU7aUlBQWYsZUFBZTtrSUFBZixlQUFlLGlCQVZwQixTQUFTO1lBQ1QsZUFBZTtZQUNmLDBCQUEwQjtZQUMxQixnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLGdCQUFnQjtZQUNoQixlQUFlLGFBMUJmLFlBQVk7WUFDWixhQUFhO1lBQ2IsZUFBZTtZQUNmLGFBQWE7WUFDYixhQUFhO1lBQ2IsZ0JBQWdCLGFBR2hCLGtCQUFrQjtZQUNsQixTQUFTO1lBQ1QsZUFBZTtZQUNmLDBCQUEwQjtZQUMxQixnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLGVBQWU7WUFDZixnQkFBZ0I7WUFDaEIsZUFBZTtZQUNmLFlBQVk7a0lBYVAsZUFBZSxhQUZiLENBQUMsbUNBQW1DLENBQUMsWUE1QjVDLFlBQVk7WUFDWixhQUFhO1lBQ2IsZUFBZTtZQUNmLGFBQWE7WUFDYixhQUFhO1lBQ2IsZ0JBQWdCLEVBR2hCLGtCQUFrQjtZQVFsQixlQUFlO1lBQ2YsWUFBWTs7MkZBYVAsZUFBZTtrQkFoQzNCLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsYUFBYTt3QkFDYixnQkFBZ0I7cUJBQ25CO29CQUNELE9BQU8sRUFBRTt3QkFDTCxrQkFBa0I7d0JBQ2xCLFNBQVM7d0JBQ1QsZUFBZTt3QkFDZiwwQkFBMEI7d0JBQzFCLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLGdCQUFnQjt3QkFDaEIsZUFBZTt3QkFDZixZQUFZO3FCQUNmO29CQUNELFlBQVksRUFBRTt3QkFDVixTQUFTO3dCQUNULGVBQWU7d0JBQ2YsMEJBQTBCO3dCQUMxQixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixlQUFlO3FCQUNsQjtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQztpQkFDbkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBLQlFfU0VMRUNUX1NDUk9MTF9TVFJBVEVHWV9QUk9WSURFUiwgS2JxT3B0aW9uTW9kdWxlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2NvcmUnO1xuaW1wb3J0IHsgS2JxRm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgS2JxSWNvbk1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9pY29uJztcbmltcG9ydCB7IEticVRhZ3NNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvdGFncyc7XG5pbXBvcnQgeyBLYnFUb29sVGlwTW9kdWxlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL3Rvb2x0aXAnO1xuXG5pbXBvcnQgeyBLYnFPcHRpb25Ub29sdGlwIH0gZnJvbSAnLi9zZWxlY3Qtb3B0aW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICAgIEticVNlbGVjdCxcbiAgICBLYnFTZWxlY3RGb290ZXIsXG4gICAgS2JxU2VsZWN0TWF0Y2hlcixcbiAgICBLYnFTZWxlY3RTZWFyY2gsXG4gICAgS2JxU2VsZWN0U2VhcmNoRW1wdHlSZXN1bHQsXG4gICAgS2JxU2VsZWN0VHJpZ2dlclxufSBmcm9tICcuL3NlbGVjdC5jb21wb25lbnQnO1xuXG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIE92ZXJsYXlNb2R1bGUsXG4gICAgICAgIEticU9wdGlvbk1vZHVsZSxcbiAgICAgICAgS2JxSWNvbk1vZHVsZSxcbiAgICAgICAgS2JxVGFnc01vZHVsZSxcbiAgICAgICAgS2JxVG9vbFRpcE1vZHVsZVxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBLYnFGb3JtRmllbGRNb2R1bGUsXG4gICAgICAgIEticVNlbGVjdCxcbiAgICAgICAgS2JxU2VsZWN0U2VhcmNoLFxuICAgICAgICBLYnFTZWxlY3RTZWFyY2hFbXB0eVJlc3VsdCxcbiAgICAgICAgS2JxU2VsZWN0VHJpZ2dlcixcbiAgICAgICAgS2JxU2VsZWN0TWF0Y2hlcixcbiAgICAgICAgS2JxU2VsZWN0Rm9vdGVyLFxuICAgICAgICBLYnFPcHRpb25Ub29sdGlwLFxuICAgICAgICBLYnFPcHRpb25Nb2R1bGUsXG4gICAgICAgIENvbW1vbk1vZHVsZVxuICAgIF0sXG4gICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgIEticVNlbGVjdCxcbiAgICAgICAgS2JxU2VsZWN0U2VhcmNoLFxuICAgICAgICBLYnFTZWxlY3RTZWFyY2hFbXB0eVJlc3VsdCxcbiAgICAgICAgS2JxU2VsZWN0VHJpZ2dlcixcbiAgICAgICAgS2JxU2VsZWN0TWF0Y2hlcixcbiAgICAgICAgS2JxT3B0aW9uVG9vbHRpcCxcbiAgICAgICAgS2JxU2VsZWN0Rm9vdGVyXG4gICAgXSxcbiAgICBwcm92aWRlcnM6IFtLQlFfU0VMRUNUX1NDUk9MTF9TVFJBVEVHWV9QUk9WSURFUl1cbn0pXG5leHBvcnQgY2xhc3MgS2JxU2VsZWN0TW9kdWxlIHt9XG4iXX0=
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFDSCxtQ0FBbUMsRUFDbkMsZUFBZSxFQUNmLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLDBCQUEwQixFQUMxQixnQkFBZ0IsRUFDbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTlELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFtQy9DLE1BQU0sT0FBTyxlQUFlO2lJQUFmLGVBQWU7a0lBQWYsZUFBZSxpQkFMcEIsU0FBUztZQUNULGdCQUFnQixhQTFCaEIsWUFBWTtZQUNaLGFBQWE7WUFDYixlQUFlO1lBQ2YsYUFBYTtZQUNiLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsZUFBZTtZQUNmLGVBQWU7WUFDZixnQkFBZ0I7WUFDaEIsZ0JBQWdCO1lBQ2hCLDBCQUEwQixhQUcxQixrQkFBa0I7WUFDbEIsU0FBUztZQUNULGdCQUFnQjtZQUNoQixlQUFlO1lBQ2YsWUFBWTtZQUNaLGVBQWU7WUFDZixlQUFlO1lBQ2YsZ0JBQWdCO1lBQ2hCLGdCQUFnQjtZQUNoQiwwQkFBMEI7a0lBUXJCLGVBQWUsYUFGYixDQUFDLG1DQUFtQyxDQUFDLFlBNUI1QyxZQUFZO1lBQ1osYUFBYTtZQUNiLGVBQWU7WUFDZixhQUFhO1lBQ2IsYUFBYTtZQUNiLGdCQUFnQixFQVFoQixrQkFBa0I7WUFHbEIsZUFBZTtZQUNmLFlBQVk7OzJGQWFQLGVBQWU7a0JBaEMzQixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLDBCQUEwQjtxQkFDN0I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLGtCQUFrQjt3QkFDbEIsU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLDBCQUEwQjtxQkFDN0I7b0JBQ0QsWUFBWSxFQUFFO3dCQUNWLFNBQVM7d0JBQ1QsZ0JBQWdCO3FCQUNuQjtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQztpQkFDbkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEtCUV9TRUxFQ1RfU0NST0xMX1NUUkFURUdZX1BST1ZJREVSLFxuICAgIEticU9wdGlvbk1vZHVsZSxcbiAgICBLYnFTZWxlY3RGb290ZXIsXG4gICAgS2JxU2VsZWN0TWF0Y2hlcixcbiAgICBLYnFTZWxlY3RTZWFyY2gsXG4gICAgS2JxU2VsZWN0U2VhcmNoRW1wdHlSZXN1bHQsXG4gICAgS2JxU2VsZWN0VHJpZ2dlclxufSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvY29yZSc7XG5pbXBvcnQgeyBLYnFGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBLYnFJY29uTW9kdWxlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgS2JxVGFnc01vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy90YWdzJztcbmltcG9ydCB7IEticVRvb2xUaXBNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvdG9vbHRpcCc7XG5cbmltcG9ydCB7IEticU9wdGlvblRvb2x0aXAgfSBmcm9tICcuL3NlbGVjdC1vcHRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IEticVNlbGVjdCB9IGZyb20gJy4vc2VsZWN0LmNvbXBvbmVudCc7XG5cblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgT3ZlcmxheU1vZHVsZSxcbiAgICAgICAgS2JxT3B0aW9uTW9kdWxlLFxuICAgICAgICBLYnFJY29uTW9kdWxlLFxuICAgICAgICBLYnFUYWdzTW9kdWxlLFxuICAgICAgICBLYnFUb29sVGlwTW9kdWxlLFxuICAgICAgICBLYnFTZWxlY3RTZWFyY2gsXG4gICAgICAgIEticVNlbGVjdEZvb3RlcixcbiAgICAgICAgS2JxU2VsZWN0TWF0Y2hlcixcbiAgICAgICAgS2JxU2VsZWN0VHJpZ2dlcixcbiAgICAgICAgS2JxU2VsZWN0U2VhcmNoRW1wdHlSZXN1bHRcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtcbiAgICAgICAgS2JxRm9ybUZpZWxkTW9kdWxlLFxuICAgICAgICBLYnFTZWxlY3QsXG4gICAgICAgIEticU9wdGlvblRvb2x0aXAsXG4gICAgICAgIEticU9wdGlvbk1vZHVsZSxcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBLYnFTZWxlY3RTZWFyY2gsXG4gICAgICAgIEticVNlbGVjdEZvb3RlcixcbiAgICAgICAgS2JxU2VsZWN0TWF0Y2hlcixcbiAgICAgICAgS2JxU2VsZWN0VHJpZ2dlcixcbiAgICAgICAgS2JxU2VsZWN0U2VhcmNoRW1wdHlSZXN1bHRcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBLYnFTZWxlY3QsXG4gICAgICAgIEticU9wdGlvblRvb2x0aXBcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW0tCUV9TRUxFQ1RfU0NST0xMX1NUUkFURUdZX1BST1ZJREVSXVxufSlcbmV4cG9ydCBjbGFzcyBLYnFTZWxlY3RNb2R1bGUge31cbiJdfQ==
@@ -6,14 +6,14 @@ export class KbqTable {
6
6
  this.border = false;
7
7
  }
8
8
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: KbqTable, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: KbqTable, selector: "table[kbq-table]", inputs: { border: "border" }, host: { properties: { "class.kbq-table_bordered": "border" }, classAttribute: "kbq-table" }, exportAs: ["kbqTable"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: [".kbq-table{border-spacing:0}.kbq-table>thead>tr>th,.kbq-table>thead>tr>td,.kbq-table>tbody>tr>th,.kbq-table>tbody>tr>td,.kbq-table>tfoot>tr>th,.kbq-table>tfoot>tr>td{padding-top:var(--kbq-table-size-row-padding-vertical, 12px);padding-right:var(--kbq-table-size-row-padding-horizontal, 8px);padding-bottom:var(--kbq-table-size-row-padding-vertical, 12px);padding-left:var(--kbq-table-size-row-padding-horizontal, 8px);vertical-align:baseline;text-align:left}.kbq-table>thead>tr>th{border-bottom-width:var(--kbq-table-size-border-width, 1px);border-bottom-style:solid}.kbq-table .kbq-table-cell_has-button{padding-top:var(--kbq-size-xxs, 4px);padding-bottom:var(--kbq-size-xxs, 4px)}.kbq-table.kbq-table_bordered>tbody>tr th,.kbq-table.kbq-table_bordered>tbody>tr td{border-bottom-width:var(--kbq-table-size-border-width, 1px);border-bottom-style:solid}.kbq-table:not(.kbq-table_bordered)>tbody>tr>td:first-child{border-top-left-radius:var(--kbq-size-m, 12px);border-bottom-left-radius:var(--kbq-size-m, 12px)}.kbq-table:not(.kbq-table_bordered)>tbody>tr>td:last-child{border-top-right-radius:var(--kbq-size-m, 12px);border-bottom-right-radius:var(--kbq-size-m, 12px)}.kbq-table:not(.kbq-table_bordered)>tbody>tr:first-child>td:first-child{border-top-left-radius:0}.kbq-table:not(.kbq-table_bordered)>tbody>tr:first-child>td:last-child{border-top-right-radius:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
9
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: KbqTable, selector: "table[kbq-table]", inputs: { border: "border" }, host: { properties: { "class.kbq-table_bordered": "border" }, classAttribute: "kbq-table" }, exportAs: ["kbqTable"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: [".kbq-table{border-spacing:0}.kbq-table>thead>tr>th,.kbq-table>thead>tr>td,.kbq-table>tbody>tr>th,.kbq-table>tbody>tr>td,.kbq-table>tfoot>tr>th,.kbq-table>tfoot>tr>td{padding-top:var(--kbq-table-size-row-padding-vertical, 10px);padding-right:var(--kbq-table-size-row-padding-horizontal, 8px);padding-bottom:var(--kbq-table-size-row-padding-vertical, 10px);padding-left:var(--kbq-table-size-row-padding-horizontal, 8px);vertical-align:baseline;text-align:left}.kbq-table>thead>tr>th{border-bottom-width:var(--kbq-table-size-border-width, 1px);border-bottom-style:solid}.kbq-table .kbq-table-cell_has-button{padding-top:var(--kbq-size-xxs, 4px);padding-bottom:var(--kbq-size-xxs, 4px)}.kbq-table.kbq-table_bordered>tbody>tr th,.kbq-table.kbq-table_bordered>tbody>tr td{border-bottom-width:var(--kbq-table-size-border-width, 1px);border-bottom-style:solid}.kbq-table:not(.kbq-table_bordered)>tbody>tr>td:first-child{border-top-left-radius:var(--kbq-size-m, 12px);border-bottom-left-radius:var(--kbq-size-m, 12px)}.kbq-table:not(.kbq-table_bordered)>tbody>tr>td:last-child{border-top-right-radius:var(--kbq-size-m, 12px);border-bottom-right-radius:var(--kbq-size-m, 12px)}.kbq-table:not(.kbq-table_bordered)>tbody>tr:first-child>td:first-child{border-top-left-radius:0}.kbq-table:not(.kbq-table_bordered)>tbody>tr:first-child>td:last-child{border-top-right-radius:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
10
10
  }
11
11
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: KbqTable, decorators: [{
12
12
  type: Component,
13
13
  args: [{ selector: 'table[kbq-table]', exportAs: 'kbqTable', template: '<ng-content></ng-content>', host: {
14
14
  class: 'kbq-table',
15
15
  '[class.kbq-table_bordered]': 'border'
16
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".kbq-table{border-spacing:0}.kbq-table>thead>tr>th,.kbq-table>thead>tr>td,.kbq-table>tbody>tr>th,.kbq-table>tbody>tr>td,.kbq-table>tfoot>tr>th,.kbq-table>tfoot>tr>td{padding-top:var(--kbq-table-size-row-padding-vertical, 12px);padding-right:var(--kbq-table-size-row-padding-horizontal, 8px);padding-bottom:var(--kbq-table-size-row-padding-vertical, 12px);padding-left:var(--kbq-table-size-row-padding-horizontal, 8px);vertical-align:baseline;text-align:left}.kbq-table>thead>tr>th{border-bottom-width:var(--kbq-table-size-border-width, 1px);border-bottom-style:solid}.kbq-table .kbq-table-cell_has-button{padding-top:var(--kbq-size-xxs, 4px);padding-bottom:var(--kbq-size-xxs, 4px)}.kbq-table.kbq-table_bordered>tbody>tr th,.kbq-table.kbq-table_bordered>tbody>tr td{border-bottom-width:var(--kbq-table-size-border-width, 1px);border-bottom-style:solid}.kbq-table:not(.kbq-table_bordered)>tbody>tr>td:first-child{border-top-left-radius:var(--kbq-size-m, 12px);border-bottom-left-radius:var(--kbq-size-m, 12px)}.kbq-table:not(.kbq-table_bordered)>tbody>tr>td:last-child{border-top-right-radius:var(--kbq-size-m, 12px);border-bottom-right-radius:var(--kbq-size-m, 12px)}.kbq-table:not(.kbq-table_bordered)>tbody>tr:first-child>td:first-child{border-top-left-radius:0}.kbq-table:not(.kbq-table_bordered)>tbody>tr:first-child>td:last-child{border-top-right-radius:0}\n"] }]
16
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".kbq-table{border-spacing:0}.kbq-table>thead>tr>th,.kbq-table>thead>tr>td,.kbq-table>tbody>tr>th,.kbq-table>tbody>tr>td,.kbq-table>tfoot>tr>th,.kbq-table>tfoot>tr>td{padding-top:var(--kbq-table-size-row-padding-vertical, 10px);padding-right:var(--kbq-table-size-row-padding-horizontal, 8px);padding-bottom:var(--kbq-table-size-row-padding-vertical, 10px);padding-left:var(--kbq-table-size-row-padding-horizontal, 8px);vertical-align:baseline;text-align:left}.kbq-table>thead>tr>th{border-bottom-width:var(--kbq-table-size-border-width, 1px);border-bottom-style:solid}.kbq-table .kbq-table-cell_has-button{padding-top:var(--kbq-size-xxs, 4px);padding-bottom:var(--kbq-size-xxs, 4px)}.kbq-table.kbq-table_bordered>tbody>tr th,.kbq-table.kbq-table_bordered>tbody>tr td{border-bottom-width:var(--kbq-table-size-border-width, 1px);border-bottom-style:solid}.kbq-table:not(.kbq-table_bordered)>tbody>tr>td:first-child{border-top-left-radius:var(--kbq-size-m, 12px);border-bottom-left-radius:var(--kbq-size-m, 12px)}.kbq-table:not(.kbq-table_bordered)>tbody>tr>td:last-child{border-top-right-radius:var(--kbq-size-m, 12px);border-bottom-right-radius:var(--kbq-size-m, 12px)}.kbq-table:not(.kbq-table_bordered)>tbody>tr:first-child>td:first-child{border-top-left-radius:0}.kbq-table:not(.kbq-table_bordered)>tbody>tr:first-child>td:last-child{border-top-right-radius:0}\n"] }]
17
17
  }], propDecorators: { border: [{
18
18
  type: Input
19
19
  }] } });
@@ -1,4 +1,4 @@
1
- import { coerceBooleanProperty, coerceNumberProperty } from '@angular/cdk/coercion';
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
2
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, Input, Output, QueryList, ViewChild, ViewEncapsulation, InjectionToken, Inject, Optional, Directive, Attribute, forwardRef } from '@angular/core';
3
3
  import { KBQ_PARENT_ANIMATION_COMPONENT, mixinDisabled } from '@koobiq/components/core';
4
4
  import { merge, Subject, Subscription } from 'rxjs';
@@ -90,7 +90,23 @@ export class KbqTabGroup extends KbqTabGroupMixinBase {
90
90
  return this._selectedIndex;
91
91
  }
92
92
  set selectedIndex(value) {
93
- this.indexToSelect = coerceNumberProperty(value, null);
93
+ this.activeTab = value;
94
+ }
95
+ get activeTab() {
96
+ switch (typeof this.attributeToSelectBy) {
97
+ case 'number':
98
+ return this.tabs.get(this.clampTabIndex(this.attributeToSelectBy)) || null;
99
+ case 'string':
100
+ return this.tabs.toArray()
101
+ .find(({ tabId }) => tabId === this.attributeToSelectBy) || this.tabs.get(0) || null;
102
+ case 'function':
103
+ return this.attributeToSelectBy(this.tabs.toArray());
104
+ default:
105
+ return this.tabs.get(0) || null;
106
+ }
107
+ }
108
+ set activeTab(value) {
109
+ this.attributeToSelectBy = value;
94
110
  }
95
111
  constructor(elementRef, changeDetectorRef, vertical, defaultConfig) {
96
112
  super(elementRef);
@@ -104,14 +120,15 @@ export class KbqTabGroup extends KbqTabGroupMixinBase {
104
120
  this.headerPosition = 'above';
105
121
  /** Output to enable support for two-way binding on `[(selectedIndex)]` */
106
122
  this.selectedIndexChange = new EventEmitter();
123
+ /** Event emitted when the tab selection has changed. */
124
+ this.activeTabChange = new EventEmitter();
107
125
  /** Event emitted when focus has changed within a tab group. */
108
126
  this.focusChange = new EventEmitter();
109
127
  /** Event emitted when the body animation has completed */
110
128
  this.animationDone = new EventEmitter();
111
129
  /** Event emitted when the tab selection has changed. */
112
130
  this.selectedTabChange = new EventEmitter(true);
113
- /** The tab index that should be selected after the content has been checked. */
114
- this.indexToSelect = 0;
131
+ this.attributeToSelectBy = null;
115
132
  /** Snapshot of the height of the tab body wrapper before another tab is activated. */
116
133
  this.tabBodyWrapperHeight = 0;
117
134
  /** Subscription to tabs being added/removed. */
@@ -138,7 +155,7 @@ export class KbqTabGroup extends KbqTabGroupMixinBase {
138
155
  ngAfterContentChecked() {
139
156
  // Don't clamp the `indexToSelect` immediately in the setter because it can happen that
140
157
  // the amount of tabs changes before the actual change detection runs.
141
- const indexToSelect = this.indexToSelect = this.clampTabIndex(this.indexToSelect);
158
+ const indexToSelect = this.getTabIndexToSelect();
142
159
  // If there is a change in selected index, emit a change event. Should not trigger if
143
160
  // the selected index has not yet been initialized.
144
161
  if (this._selectedIndex !== indexToSelect) {
@@ -151,7 +168,11 @@ export class KbqTabGroup extends KbqTabGroupMixinBase {
151
168
  Promise.resolve().then(() => {
152
169
  this.tabs.forEach((tab, index) => tab.isActive = index === indexToSelect);
153
170
  if (!isFirstRun) {
171
+ const tabToSelect = this.activeTab;
154
172
  this.selectedIndexChange.emit(indexToSelect);
173
+ this.activeTabChange.emit(this.attributeToSelectBy && typeof this.attributeToSelectBy === 'function' && tabToSelect
174
+ ? tabToSelect
175
+ : this.attributeToSelectBy);
155
176
  }
156
177
  });
157
178
  }
@@ -175,17 +196,19 @@ export class KbqTabGroup extends KbqTabGroupMixinBase {
175
196
  // able to re-render the content as new tabs are added or removed.
176
197
  this.tabsSubscription = this.tabs.changes
177
198
  .subscribe(() => {
178
- const indexToSelect = this.clampTabIndex(this.indexToSelect);
199
+ // const indexToSelect = this.clampTabIndex(this.indexToSelect);
200
+ const indexToSelect = this.getTabIndexToSelect();
179
201
  // Maintain the previously-selected tab if a new tab is added or removed and there is no
180
202
  // explicit change that selects a different tab.
181
203
  if (indexToSelect === this._selectedIndex) {
182
204
  const tabs = this.tabs.toArray();
183
205
  for (let i = 0; i < tabs.length; i++) {
184
206
  if (tabs[i].isActive) {
185
- // Assign both to the `_indexToSelect` and `_selectedIndex` so we don't fire a changed
207
+ // Assign both to the `activeTab` and `_selectedIndex` so we don't fire a changed
186
208
  // event, otherwise the consumer may end up in an infinite loop in some edge cases like
187
209
  // adding a tab within the `selectedIndexChange` event.
188
- this.indexToSelect = this._selectedIndex = i;
210
+ this._selectedIndex = i;
211
+ this.onSelectFocusedIndex(i);
189
212
  break;
190
213
  }
191
214
  }
@@ -240,7 +263,8 @@ export class KbqTabGroup extends KbqTabGroupMixinBase {
240
263
  if (tab.disabled) {
241
264
  return;
242
265
  }
243
- this.selectedIndex = tabHeader.focusIndex = index;
266
+ this.onSelectFocusedIndex(index);
267
+ tabHeader.focusIndex = index;
244
268
  }
245
269
  /** Retrieves the tabindex for the tab. */
246
270
  getTabIndex(tab, index) {
@@ -249,6 +273,13 @@ export class KbqTabGroup extends KbqTabGroupMixinBase {
249
273
  }
250
274
  return this.selectedIndex === index ? 0 : -1;
251
275
  }
276
+ onSelectFocusedIndex($event) {
277
+ if (typeof this.attributeToSelectBy === 'string') {
278
+ this.activeTab = this.tabs.get($event)?.tabId || null;
279
+ return;
280
+ }
281
+ this.activeTab = $event;
282
+ }
252
283
  createChangeEvent(index) {
253
284
  const event = new KbqTabChangeEvent();
254
285
  event.index = index;
@@ -288,8 +319,15 @@ export class KbqTabGroup extends KbqTabGroupMixinBase {
288
319
  // (since Math.max(NaN, 0) === NaN).
289
320
  return Math.min(this.tabs.length - 1, Math.max(index || 0, 0));
290
321
  }
322
+ getTabIndexToSelect() {
323
+ const currentSelectedTab = this.activeTab;
324
+ if (currentSelectedTab === null) {
325
+ return 0;
326
+ }
327
+ return this.tabs?.toArray().indexOf(currentSelectedTab);
328
+ }
291
329
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: KbqTabGroup, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: 'vertical', attribute: true }, { token: KBQ_TABS_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
292
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: KbqTabGroup, selector: "kbq-tab-group", inputs: { disabled: "disabled", transparent: "transparent", onSurface: "onSurface", dynamicHeight: "dynamicHeight", selectedIndex: "selectedIndex", headerPosition: "headerPosition", animationDuration: "animationDuration" }, outputs: { selectedIndexChange: "selectedIndexChange", focusChange: "focusChange", animationDone: "animationDone", selectedTabChange: "selectedTabChange" }, host: { listeners: { "window:resize": "resizeStream.next($event)" }, properties: { "class.kbq-tab-group_filled": "!transparent", "class.kbq-tab-group_transparent": "transparent", "class.kbq-tab-group_on-background": "!onSurface", "class.kbq-tab-group_on-surface": "onSurface", "class.kbq-tab-group_dynamic-height": "dynamicHeight", "class.kbq-tab-group_inverted-header": "headerPosition === \"below\"" }, classAttribute: "kbq-tab-group" }, providers: [{ provide: KBQ_PARENT_ANIMATION_COMPONENT, useExisting: forwardRef((() => this)) }], queries: [{ propertyName: "tabs", predicate: KbqTab }], viewQueries: [{ propertyName: "tabBodyWrapper", first: true, predicate: ["tabBodyWrapper"], descendants: true }, { propertyName: "tabHeader", first: true, predicate: ["tabHeader"], descendants: true }], exportAs: ["kbqTabGroup"], usesInheritance: true, ngImport: i0, template: "<kbq-tab-header\n #tabHeader\n [vertical]=\"vertical\"\n [selectedIndex]=\"selectedIndex\"\n (indexFocused)=\"focusChanged($event)\"\n (selectFocusedIndex)=\"selectedIndex = $event\">\n\n <div class=\"kbq-tab-label\"\n kbqTabLabelWrapper\n cdkMonitorElementFocus\n [attr.tabindex]=\"getTabIndex(tab, i)\"\n [class.kbq-tab-label_horizontal]=\"!vertical\"\n [class.kbq-tab-label_vertical]=\"vertical\"\n [class.kbq-tab-label_empty]=\"tab.empty\"\n [class.kbq-selected]=\"selectedIndex == i\"\n *ngFor=\"let tab of tabs; let i = index\"\n [tab]=\"tab\"\n [id]=\"getTabLabelId(i)\"\n [disabled]=\"tab.disabled\"\n (click)=\"handleClick(tab, tabHeader, i)\"\n\n [kbqTooltip]=\"tab.tooltipTitle\"\n [kbqTooltipDisabled]=\"!tab.empty && !tab.isOverflown\"\n [kbqTrigger]=\"'hover, focus'\"\n [kbqPlacement]=\"tab.tooltipPlacement\">\n\n <div #labelContent class=\"kbq-tab-label__content\"\n [class.kbq-tab-label__template]=\"tab.templateLabel\">\n <!-- If there is a label template, use it. -->\n <ng-template [ngIf]=\"tab.templateLabel\">\n <ng-template [cdkPortalOutlet]=\"tab.templateLabel\"></ng-template>\n </ng-template>\n\n <!-- If there is not a label template, fall back to the text label. -->\n <ng-template [ngIf]=\"!tab.templateLabel\">{{ tab.textLabel }}</ng-template>\n </div>\n </div>\n</kbq-tab-header>\n\n<div class=\"kbq-tab-body__wrapper\" #tabBodyWrapper>\n <kbq-tab-body\n *ngFor=\"let tab of tabs; let i = index\"\n [id]=\"getTabContentId(i)\"\n [class.kbq-tab-body__active]=\"selectedIndex == i\"\n [content]=\"tab.content!\"\n [position]=\"tab.position!\"\n [origin]=\"tab.origin!\"\n [animationDuration]=\"animationDuration\"\n (onCentered)=\"removeTabBodyWrapperHeight()\"\n (onCentering)=\"setTabBodyWrapperHeight($event)\">\n </kbq-tab-body>\n</div>\n", styles: [".kbq-tab-group{display:flex;flex-direction:column;box-sizing:border-box;text-align:left}.kbq-tab-group.kbq-tab-group_inverted-header{flex-direction:column-reverse}.kbq-tab-group_vertical{flex-direction:row}.kbq-tab-group_vertical .kbq-tab-list__content{gap:var(--kbq-tabs-size-tab-stack-vertical-content-gap-vertical, 8px) 0}.kbq-tab-group_vertical .kbq-tab-header__content{overflow-y:auto}.kbq-tab-body__wrapper{display:flex;overflow:hidden;position:relative}.kbq-tab-body{inset:0;position:absolute;display:block;overflow:hidden}.kbq-tab-body.kbq-tab-body__active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.kbq-tab-group.kbq-tab-group_dynamic-height .kbq-tab-body.kbq-tab-body__active{overflow-y:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: i3.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "directive", type: i4.KbqTooltipTrigger, selector: "[kbqTooltip]", inputs: ["kbqVisible", "kbqPlacement", "kbqPlacementPriority", "kbqTooltip", "kbqTooltipDisabled", "kbqEnterDelay", "kbqLeaveDelay", "kbqTrigger", "kbqTooltipClass", "kbqTooltipColor"], outputs: ["kbqPlacementChange", "kbqVisibleChange"], exportAs: ["kbqTooltip"] }, { kind: "directive", type: i5.KbqTabLabelWrapper, selector: "[kbqTabLabelWrapper]", inputs: ["disabled", "tab"] }, { kind: "component", type: i6.KbqTabBody, selector: "kbq-tab-body", inputs: ["position", "content", "origin", "animationDuration"], outputs: ["onCentering", "beforeCentering", "afterLeavingCenter", "onCentered"] }, { kind: "component", type: i7.KbqTabHeader, selector: "kbq-tab-header", inputs: ["selectedIndex", "vertical"], outputs: ["selectFocusedIndex", "indexFocused"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
330
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: KbqTabGroup, selector: "kbq-tab-group", inputs: { disabled: "disabled", transparent: "transparent", onSurface: "onSurface", dynamicHeight: "dynamicHeight", selectedIndex: "selectedIndex", activeTab: "activeTab", headerPosition: "headerPosition", animationDuration: "animationDuration" }, outputs: { selectedIndexChange: "selectedIndexChange", activeTabChange: "activeTabChange", focusChange: "focusChange", animationDone: "animationDone", selectedTabChange: "selectedTabChange" }, host: { listeners: { "window:resize": "resizeStream.next($event)" }, properties: { "class.kbq-tab-group_filled": "!transparent", "class.kbq-tab-group_transparent": "transparent", "class.kbq-tab-group_on-background": "!onSurface", "class.kbq-tab-group_on-surface": "onSurface", "class.kbq-tab-group_dynamic-height": "dynamicHeight", "class.kbq-tab-group_inverted-header": "headerPosition === \"below\"" }, classAttribute: "kbq-tab-group" }, providers: [{ provide: KBQ_PARENT_ANIMATION_COMPONENT, useExisting: forwardRef((() => this)) }], queries: [{ propertyName: "tabs", predicate: KbqTab }], viewQueries: [{ propertyName: "tabBodyWrapper", first: true, predicate: ["tabBodyWrapper"], descendants: true }, { propertyName: "tabHeader", first: true, predicate: ["tabHeader"], descendants: true }], exportAs: ["kbqTabGroup"], usesInheritance: true, ngImport: i0, template: "<kbq-tab-header\n #tabHeader\n [vertical]=\"vertical\"\n [selectedIndex]=\"selectedIndex\"\n (indexFocused)=\"focusChanged($event)\"\n (selectFocusedIndex)=\"onSelectFocusedIndex($event)\">\n\n <div class=\"kbq-tab-label\"\n kbqTabLabelWrapper\n cdkMonitorElementFocus\n [attr.tabindex]=\"getTabIndex(tab, i)\"\n [class.kbq-tab-label_horizontal]=\"!vertical\"\n [class.kbq-tab-label_vertical]=\"vertical\"\n [class.kbq-tab-label_empty]=\"tab.empty\"\n [class.kbq-selected]=\"selectedIndex == i\"\n *ngFor=\"let tab of tabs; let i = index\"\n [tab]=\"tab\"\n [id]=\"getTabLabelId(i)\"\n [disabled]=\"tab.disabled\"\n (click)=\"handleClick(tab, tabHeader, i)\"\n\n [kbqTooltip]=\"tab.tooltipTitle\"\n [kbqTooltipDisabled]=\"!tab.empty && !tab.isOverflown\"\n [kbqTrigger]=\"'hover, focus'\"\n [kbqPlacement]=\"tab.tooltipPlacement\">\n\n <div #labelContent class=\"kbq-tab-label__content\"\n [class.kbq-tab-label__template]=\"tab.templateLabel\">\n <!-- If there is a label template, use it. -->\n <ng-template [ngIf]=\"tab.templateLabel\">\n <ng-template [cdkPortalOutlet]=\"tab.templateLabel\"></ng-template>\n </ng-template>\n\n <!-- If there is not a label template, fall back to the text label. -->\n <ng-template [ngIf]=\"!tab.templateLabel\">{{ tab.textLabel }}</ng-template>\n </div>\n </div>\n</kbq-tab-header>\n\n<div class=\"kbq-tab-body__wrapper\" #tabBodyWrapper>\n <kbq-tab-body\n *ngFor=\"let tab of tabs; let i = index\"\n [id]=\"getTabContentId(i)\"\n [class.kbq-tab-body__active]=\"selectedIndex == i\"\n [content]=\"tab.content!\"\n [position]=\"tab.position!\"\n [origin]=\"tab.origin!\"\n [animationDuration]=\"animationDuration\"\n (onCentered)=\"removeTabBodyWrapperHeight()\"\n (onCentering)=\"setTabBodyWrapperHeight($event)\">\n </kbq-tab-body>\n</div>\n", styles: [".kbq-tab-group{display:flex;flex-direction:column;box-sizing:border-box;text-align:left}.kbq-tab-group.kbq-tab-group_inverted-header{flex-direction:column-reverse}.kbq-tab-group_vertical{flex-direction:row}.kbq-tab-group_vertical .kbq-tab-list__content{gap:var(--kbq-tabs-size-tab-stack-vertical-content-gap-vertical, 8px) 0}.kbq-tab-group_vertical .kbq-tab-header__content{overflow-y:auto}.kbq-tab-body__wrapper{display:flex;overflow:hidden;position:relative}.kbq-tab-body{inset:0;position:absolute;display:block;overflow:hidden}.kbq-tab-body.kbq-tab-body__active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.kbq-tab-group.kbq-tab-group_dynamic-height .kbq-tab-body.kbq-tab-body__active{overflow-y:hidden}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "directive", type: i3.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "directive", type: i4.KbqTooltipTrigger, selector: "[kbqTooltip]", inputs: ["kbqVisible", "kbqPlacement", "kbqPlacementPriority", "kbqTooltip", "kbqTooltipDisabled", "kbqEnterDelay", "kbqLeaveDelay", "kbqTrigger", "kbqTooltipClass", "kbqTooltipColor"], outputs: ["kbqPlacementChange", "kbqVisibleChange"], exportAs: ["kbqTooltip"] }, { kind: "directive", type: i5.KbqTabLabelWrapper, selector: "[kbqTabLabelWrapper]", inputs: ["disabled", "tab"] }, { kind: "component", type: i6.KbqTabBody, selector: "kbq-tab-body", inputs: ["position", "content", "origin", "animationDuration"], outputs: ["onCentering", "beforeCentering", "afterLeavingCenter", "onCentered"] }, { kind: "component", type: i7.KbqTabHeader, selector: "kbq-tab-header", inputs: ["selectedIndex", "vertical"], outputs: ["selectFocusedIndex", "indexFocused"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
293
331
  }
294
332
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: KbqTabGroup, decorators: [{
295
333
  type: Component,
@@ -302,7 +340,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImpor
302
340
  '[class.kbq-tab-group_dynamic-height]': 'dynamicHeight',
303
341
  '[class.kbq-tab-group_inverted-header]': 'headerPosition === "below"',
304
342
  '(window:resize)': 'resizeStream.next($event)'
305
- }, providers: [{ provide: KBQ_PARENT_ANIMATION_COMPONENT, useExisting: forwardRef((() => this)) }], template: "<kbq-tab-header\n #tabHeader\n [vertical]=\"vertical\"\n [selectedIndex]=\"selectedIndex\"\n (indexFocused)=\"focusChanged($event)\"\n (selectFocusedIndex)=\"selectedIndex = $event\">\n\n <div class=\"kbq-tab-label\"\n kbqTabLabelWrapper\n cdkMonitorElementFocus\n [attr.tabindex]=\"getTabIndex(tab, i)\"\n [class.kbq-tab-label_horizontal]=\"!vertical\"\n [class.kbq-tab-label_vertical]=\"vertical\"\n [class.kbq-tab-label_empty]=\"tab.empty\"\n [class.kbq-selected]=\"selectedIndex == i\"\n *ngFor=\"let tab of tabs; let i = index\"\n [tab]=\"tab\"\n [id]=\"getTabLabelId(i)\"\n [disabled]=\"tab.disabled\"\n (click)=\"handleClick(tab, tabHeader, i)\"\n\n [kbqTooltip]=\"tab.tooltipTitle\"\n [kbqTooltipDisabled]=\"!tab.empty && !tab.isOverflown\"\n [kbqTrigger]=\"'hover, focus'\"\n [kbqPlacement]=\"tab.tooltipPlacement\">\n\n <div #labelContent class=\"kbq-tab-label__content\"\n [class.kbq-tab-label__template]=\"tab.templateLabel\">\n <!-- If there is a label template, use it. -->\n <ng-template [ngIf]=\"tab.templateLabel\">\n <ng-template [cdkPortalOutlet]=\"tab.templateLabel\"></ng-template>\n </ng-template>\n\n <!-- If there is not a label template, fall back to the text label. -->\n <ng-template [ngIf]=\"!tab.templateLabel\">{{ tab.textLabel }}</ng-template>\n </div>\n </div>\n</kbq-tab-header>\n\n<div class=\"kbq-tab-body__wrapper\" #tabBodyWrapper>\n <kbq-tab-body\n *ngFor=\"let tab of tabs; let i = index\"\n [id]=\"getTabContentId(i)\"\n [class.kbq-tab-body__active]=\"selectedIndex == i\"\n [content]=\"tab.content!\"\n [position]=\"tab.position!\"\n [origin]=\"tab.origin!\"\n [animationDuration]=\"animationDuration\"\n (onCentered)=\"removeTabBodyWrapperHeight()\"\n (onCentering)=\"setTabBodyWrapperHeight($event)\">\n </kbq-tab-body>\n</div>\n", styles: [".kbq-tab-group{display:flex;flex-direction:column;box-sizing:border-box;text-align:left}.kbq-tab-group.kbq-tab-group_inverted-header{flex-direction:column-reverse}.kbq-tab-group_vertical{flex-direction:row}.kbq-tab-group_vertical .kbq-tab-list__content{gap:var(--kbq-tabs-size-tab-stack-vertical-content-gap-vertical, 8px) 0}.kbq-tab-group_vertical .kbq-tab-header__content{overflow-y:auto}.kbq-tab-body__wrapper{display:flex;overflow:hidden;position:relative}.kbq-tab-body{inset:0;position:absolute;display:block;overflow:hidden}.kbq-tab-body.kbq-tab-body__active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.kbq-tab-group.kbq-tab-group_dynamic-height .kbq-tab-body.kbq-tab-body__active{overflow-y:hidden}\n"] }]
343
+ }, providers: [{ provide: KBQ_PARENT_ANIMATION_COMPONENT, useExisting: forwardRef((() => this)) }], template: "<kbq-tab-header\n #tabHeader\n [vertical]=\"vertical\"\n [selectedIndex]=\"selectedIndex\"\n (indexFocused)=\"focusChanged($event)\"\n (selectFocusedIndex)=\"onSelectFocusedIndex($event)\">\n\n <div class=\"kbq-tab-label\"\n kbqTabLabelWrapper\n cdkMonitorElementFocus\n [attr.tabindex]=\"getTabIndex(tab, i)\"\n [class.kbq-tab-label_horizontal]=\"!vertical\"\n [class.kbq-tab-label_vertical]=\"vertical\"\n [class.kbq-tab-label_empty]=\"tab.empty\"\n [class.kbq-selected]=\"selectedIndex == i\"\n *ngFor=\"let tab of tabs; let i = index\"\n [tab]=\"tab\"\n [id]=\"getTabLabelId(i)\"\n [disabled]=\"tab.disabled\"\n (click)=\"handleClick(tab, tabHeader, i)\"\n\n [kbqTooltip]=\"tab.tooltipTitle\"\n [kbqTooltipDisabled]=\"!tab.empty && !tab.isOverflown\"\n [kbqTrigger]=\"'hover, focus'\"\n [kbqPlacement]=\"tab.tooltipPlacement\">\n\n <div #labelContent class=\"kbq-tab-label__content\"\n [class.kbq-tab-label__template]=\"tab.templateLabel\">\n <!-- If there is a label template, use it. -->\n <ng-template [ngIf]=\"tab.templateLabel\">\n <ng-template [cdkPortalOutlet]=\"tab.templateLabel\"></ng-template>\n </ng-template>\n\n <!-- If there is not a label template, fall back to the text label. -->\n <ng-template [ngIf]=\"!tab.templateLabel\">{{ tab.textLabel }}</ng-template>\n </div>\n </div>\n</kbq-tab-header>\n\n<div class=\"kbq-tab-body__wrapper\" #tabBodyWrapper>\n <kbq-tab-body\n *ngFor=\"let tab of tabs; let i = index\"\n [id]=\"getTabContentId(i)\"\n [class.kbq-tab-body__active]=\"selectedIndex == i\"\n [content]=\"tab.content!\"\n [position]=\"tab.position!\"\n [origin]=\"tab.origin!\"\n [animationDuration]=\"animationDuration\"\n (onCentered)=\"removeTabBodyWrapperHeight()\"\n (onCentering)=\"setTabBodyWrapperHeight($event)\">\n </kbq-tab-body>\n</div>\n", styles: [".kbq-tab-group{display:flex;flex-direction:column;box-sizing:border-box;text-align:left}.kbq-tab-group.kbq-tab-group_inverted-header{flex-direction:column-reverse}.kbq-tab-group_vertical{flex-direction:row}.kbq-tab-group_vertical .kbq-tab-list__content{gap:var(--kbq-tabs-size-tab-stack-vertical-content-gap-vertical, 8px) 0}.kbq-tab-group_vertical .kbq-tab-header__content{overflow-y:auto}.kbq-tab-body__wrapper{display:flex;overflow:hidden;position:relative}.kbq-tab-body{inset:0;position:absolute;display:block;overflow:hidden}.kbq-tab-body.kbq-tab-body__active{position:relative;overflow-x:hidden;overflow-y:auto;z-index:1;flex-grow:1}.kbq-tab-group.kbq-tab-group_dynamic-height .kbq-tab-body.kbq-tab-body__active{overflow-y:hidden}\n"] }]
306
344
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
307
345
  type: Attribute,
308
346
  args: ['vertical']
@@ -328,12 +366,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImpor
328
366
  type: Input
329
367
  }], selectedIndex: [{
330
368
  type: Input
369
+ }], activeTab: [{
370
+ type: Input
331
371
  }], headerPosition: [{
332
372
  type: Input
333
373
  }], animationDuration: [{
334
374
  type: Input
335
375
  }], selectedIndexChange: [{
336
376
  type: Output
377
+ }], activeTabChange: [{
378
+ type: Output
337
379
  }], focusChange: [{
338
380
  type: Output
339
381
  }], animationDone: [{
@@ -341,4 +383,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImpor
341
383
  }], selectedTabChange: [{
342
384
  type: Output
343
385
  }] } });
344
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvdGFicy90YWItZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy90YWJzL3RhYi1ncm91cC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BGLE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxNQUFNLEVBQ04sUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBRVQsVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBa0IsOEJBQThCLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEcsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7QUFPekMsTUFBTSxPQUFPLDJCQUEyQjtpSUFBM0IsMkJBQTJCO3FIQUEzQiwyQkFBMkI7OzJGQUEzQiwyQkFBMkI7a0JBSnZDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdGQUFnRjtvQkFDMUYsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLG1DQUFtQyxFQUFFO2lCQUN2RDs7QUFPRCxNQUFN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O3dCQUNsRCxxQ0FBcUMsRUFBRSxZQUFZO3dCQUNuRCxrQ0FBa0MsRUFBRSxXQUFXO3dCQUMvQyxzQ0FBc0MsRUFBRSxlQUFlO3dCQUN2RCx1Q0FBdUMsRUFBRSw0QkFBNEI7d0JBQ3JFLGlCQUFpQixFQUFFLDJCQUEyQjtxQkFDakQsYUFDVSxDQUFDLEVBQUUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFDLEVBQUUsQ0FBQzs7MEJBNkV4RixTQUFTOzJCQUFDLFVBQVU7OzBCQUNwQixNQUFNOzJCQUFDLGVBQWU7OzBCQUFHLFFBQVE7eUNBdkViLElBQUk7c0JBQTVCLGVBQWU7dUJBQUMsTUFBTTtnQkFFeUIsY0FBYztzQkFBN0QsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRUgsU0FBUztzQkFBbkQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUVoQyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBSUYsYUFBYTtzQkFEaEIsS0FBSztnQkFhRixhQUFhO3NCQURoQixLQUFLO2dCQVlHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdhLG1CQUFtQjtzQkFBckMsTUFBTTtnQkFHWSxXQUFXO3NCQUE3QixNQUFNO2dCQUdZLGFBQWE7c0JBQS9CLE1BQU07Z0JBR1ksaUJBQWlCO3NCQUFuQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudENoZWNrZWQsXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBJbmplY3QsXG4gICAgT3B0aW9uYWwsXG4gICAgRGlyZWN0aXZlLFxuICAgIEF0dHJpYnV0ZSxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYW5EaXNhYmxlQ3RvciwgS0JRX1BBUkVOVF9BTklNQVRJT05fQ09NUE9ORU5ULCBtaXhpbkRpc2FibGVkIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2NvcmUnO1xuaW1wb3J0IHsgbWVyZ2UsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBLYnFUYWJIZWFkZXIgfSBmcm9tICcuL3RhYi1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEticVRhYiB9IGZyb20gJy4vdGFiLmNvbXBvbmVudCc7XG5cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdrYnEtdGFiLWdyb3VwW2ticS1hbGlnbi10YWJzLWNlbnRlcl0sIFtrYnEtdGFiLW5hdi1iYXJdW2ticS1hbGlnbi10YWJzLWNlbnRlcl0nLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdrYnEtdGFiLWdyb3VwX2FsaWduLWxhYmVscy1jZW50ZXInIH1cbn0pXG5leHBvcnQgY2xhc3MgS2JxQWxpZ25UYWJzQ2VudGVyQ3NzU3R5bGVyIHt9XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAna2JxLXRhYi1ncm91cFtrYnEtYWxpZ24tdGFicy1lbmRdLCBba2JxLXRhYi1uYXYtYmFyXVtrYnEtYWxpZ24tdGFicy1lbmRdJyxcbiAgICBob3N0OiB7IGNsYXNzOiAna2JxLXRhYi1ncm91cF9hbGlnbi1sYWJlbHMtZW5kJyB9XG59KVxuZXhwb3J0IGNsYXNzIEticUFsaWduVGFic0VuZENzc1N0eWxlciB7fVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ2ticS10YWItZ3JvdXBba2JxLXN0cmV0Y2gtdGFic10sIFtrYnEtdGFiLW5hdi1iYXJdW2ticS1zdHJldGNoLXRhYnNdJyxcbiAgICBob3N0OiB7IGNsYXNzOiAna2JxLXRhYi1ncm91cF9zdHJldGNoLWxhYmVscycgfVxufSlcbmV4cG9ydCBjbGFzcyBLYnFTdHJldGNoVGFic0Nzc1N0eWxlciB7fVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ2ticS10YWItZ3JvdXBbdmVydGljYWxdLCBba2JxLXRhYi1uYXYtYmFyXVt2ZXJ0aWNhbF0nLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdrYnEtdGFiLWdyb3VwX3ZlcnRpY2FsJyB9XG59KVxuZXhwb3J0IGNsYXNzIEticVZlcnRpY2FsVGFic0Nzc1N0eWxlciB7fVxuXG4vKiogVXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgSUQncyBmb3IgZWFjaCB0YWIgY29tcG9uZW50ICovXG5sZXQgbmV4dElkID0gMDtcblxuLyoqIEEgc2ltcGxlIGNoYW5nZSBldmVudCBlbWl0dGVkIG9uIGZvY3VzIG9yIHNlbGVjdGlvbiBjaGFuZ2VzLiAqL1xuZXhwb3J0IGNsYXNzIEticVRhYkNoYW5nZUV2ZW50IHtcbiAgICAvKiogSW5kZXggb2YgdGhlIGN1cnJlbnRseS1zZWxlY3RlZCB0YWIuICovXG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICAvKiogUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50bHktc2VsZWN0ZWQgdGFiLiAqL1xuICAgIHRhYjogS2JxVGFiO1xufVxuXG4vKiogUG9zc2libGUgcG9zaXRpb25zIGZvciB0aGUgdGFiIGhlYWRlci4gKi9cbmV4cG9ydCB0eXBlIEticVRhYkhlYWRlclBvc2l0aW9uID0gJ2Fib3ZlJyB8ICdiZWxvdyc7XG5cbi8qKiBPYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGhlIGRlZmF1bHQgb3B0aW9ucyBmb3IgdGhlIHRhYnMgbW9kdWxlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBJS2JxVGFic0NvbmZpZyB7XG4gICAgLyoqIER1cmF0aW9uIGZvciB0aGUgdGFiIGFuaW1hdGlvbi4gTXVzdCBiZSBhIHZhbGlkIENTUyB2YWx1ZSAoZS5nLiA2MDBtcykuICovXG4gICAgYW5pbWF0aW9uRHVyYXRpb24/OiBzdHJpbmc7XG59XG5cbi8qKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCB0byBwcm92aWRlIHRoZSBkZWZhdWx0IG9wdGlvbnMgdGhlIHRhYnMgbW9kdWxlLiAqL1xuZXhwb3J0IGNvbnN0IEtCUV9UQUJTX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdLQlFfVEFCU19DT05GSUcnKTtcblxuLy8gQm9pbGVycGxhdGUgZm9yIGFwcGx5aW5nIG1peGlucyB0byBLYnFUYWJHcm91cC5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgY2xhc3MgS2JxVGFiR3JvdXBCYXNlIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cbn1cblxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjb25zdCBLYnFUYWJHcm91cE1peGluQmFzZTogQ2FuRGlzYWJsZUN0b3IgJiB0eXBlb2YgS2JxVGFiR3JvdXBCYXNlID0gbWl4aW5EaXNhYmxlZChLYnFUYWJHcm91cEJhc2UpO1xuXG4vKipcbiAqIFRhYi1ncm91cCBjb21wb25lbnQuICBTdXBwb3J0cyBiYXNpYyB0YWIgcGFpcnMgKGxhYmVsICsgY29udGVudCkgYW5kIGluY2x1ZGVzXG4gKiBrZXlib2FyZCBuYXZpZ2F0aW9uLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ticS10YWItZ3JvdXAnLFxuICAgIGV4cG9ydEFzOiAna2JxVGFiR3JvdXAnLFxuICAgIHRlbXBsYXRlVXJsOiAndGFiLWdyb3VwLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWyd0YWItZ3JvdXAuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW5wdXRzOiBbJ2Rpc2FibGVkJ10sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ticS10YWItZ3JvdXAnLFxuICAgICAgICAnW2NsYXNzLmticS10YWItZ3JvdXBfZmlsbGVkXSc6ICchdHJhbnNwYXJlbnQnLFxuICAgICAgICAnW2NsYXNzLmticS10YWItZ3JvdXBfdHJhbnNwYXJlbnRdJzogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtdGFiLWdyb3VwX29uLWJhY2tncm91bmRdJzogJyFvblN1cmZhY2UnLFxuICAgICAgICAnW2NsYXNzLmticS10YWItZ3JvdXBfb24tc3VyZmFjZV0nOiAnb25TdXJmYWNlJyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtdGFiLWdyb3VwX2R5bmFtaWMtaGVpZ2h0XSc6ICdkeW5hbWljSGVpZ2h0JyxcbiAgICAgICAgJ1tjbGFzcy5rYnEtdGFiLWdyb3VwX2ludmVydGVkLWhlYWRlcl0nOiAnaGVhZGVyUG9zaXRpb24gPT09IFwiYmVsb3dcIicsXG4gICAgICAgICcod2luZG93OnJlc2l6ZSknOiAncmVzaXplU3RyZWFtLm5leHQoJGV2ZW50KSdcbiAgICB9LFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogS0JRX1BBUkVOVF9BTklNQVRJT05fQ09NUE9ORU5ULCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiB0aGlzKSB9XVxufSlcbmV4cG9ydCBjbGFzcyBLYnFUYWJHcm91cCBleHRlbmRzIEticVRhYkdyb3VwTWl4aW5CYXNlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgT25EZXN0cm95IHtcbiAgICByZWFkb25seSByZXNpemVTdHJlYW0gPSBuZXcgU3ViamVjdDxFdmVudD4oKTtcblxuICAgIHZlcnRpY2FsOiBib29sZWFuO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihLYnFUYWIpIHRhYnM6IFF1ZXJ5TGlzdDxLYnFUYWI+O1xuXG4gICAgQFZpZXdDaGlsZCgndGFiQm9keVdyYXBwZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgdGFiQm9keVdyYXBwZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBAVmlld0NoaWxkKCd0YWJIZWFkZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgdGFiSGVhZGVyOiBLYnFUYWJIZWFkZXI7XG5cbiAgICBASW5wdXQoKSB0cmFuc3BhcmVudDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIG9uU3VyZmFjZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHRhYiBncm91cCBzaG91bGQgZ3JvdyB0byB0aGUgc2l6ZSBvZiB0aGUgYWN0aXZlIHRhYi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBkeW5hbWljSGVpZ2h0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHluYW1pY0hlaWdodDtcbiAgICB9XG5cbiAgICBzZXQgZHluYW1pY0hlaWdodCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9keW5hbWljSGVpZ2h0ID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9keW5hbWljSGVpZ2h0ID0gZmFsc2U7XG5cbiAgICAvKiogVGhlIGluZGV4IG9mIHRoZSBhY3RpdmUgdGFiLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNlbGVjdGVkSW5kZXgoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEluZGV4O1xuICAgIH1cblxuICAgIHNldCBzZWxlY3RlZEluZGV4KHZhbHVlOiBudW1iZXIgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuaW5kZXhUb1NlbGVjdCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCBudWxsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZWxlY3RlZEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBQb3NpdGlvbiBvZiB0aGUgdGFiIGhlYWRlci4gKi9cbiAgICBASW5wdXQoKSBoZWFkZXJQb3NpdGlvbjogS2JxVGFiSGVhZGVyUG9zaXRpb24gPSAnYWJvdmUnO1xuXG4gICAgLyoqIER1cmF0aW9uIGZvciB0aGUgdGFiIGFuaW1hdGlvbi4gTXVzdCBiZSBhIHZhbGlkIENTUyB2YWx1ZSAoZS5nLiA2MDBtcykuICovXG4gICAgQElucHV0KCkgYW5pbWF0aW9uRHVyYXRpb246IHN0cmluZztcblxuICAgIC8qKiBPdXRwdXQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHR3by13YXkgYmluZGluZyBvbiBgWyhzZWxlY3RlZEluZGV4KV1gICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdGVkSW5kZXhDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGZvY3VzIGhhcyBjaGFuZ2VkIHdpdGhpbiBhIHRhYiBncm91cC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgZm9jdXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxLYnFUYWJDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEticVRhYkNoYW5nZUV2ZW50PigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgYm9keSBhbmltYXRpb24gaGFzIGNvbXBsZXRlZCAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBhbmltYXRpb25Eb25lOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSB0YWIgc2VsZWN0aW9uIGhhcyBjaGFuZ2VkLiAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3RlZFRhYkNoYW5nZTogRXZlbnRFbWl0dGVyPEticVRhYkNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8S2JxVGFiQ2hhbmdlRXZlbnQ+KHRydWUpO1xuXG4gICAgLyoqIFRoZSB0YWIgaW5kZXggdGhhdCBzaG91bGQgYmUgc2VsZWN0ZWQgYWZ0ZXIgdGhlIGNvbnRlbnQgaGFzIGJlZW4gY2hlY2tlZC4gKi9cbiAgICBwcml2YXRlIGluZGV4VG9TZWxlY3Q6IG51bWJlciB8IG51bGwgPSAwO1xuXG4gICAgLyoqIFNuYXBzaG90IG9mIHRoZSBoZWlnaHQgb2YgdGhlIHRhYiBib2R5IHdyYXBwZXIgYmVmb3JlIGFub3RoZXIgdGFiIGlzIGFjdGl2YXRlZC4gKi9cbiAgICBwcml2YXRlIHRhYkJvZHlXcmFwcGVySGVpZ2h0ID0gMDtcblxuICAgIC8qKiBTdWJzY3JpcHRpb24gdG8gdGFicyBiZWluZyBhZGRlZC9yZW1vdmVkLiAqL1xuICAgIHByaXZhdGUgdGFic1N1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcblxuICAgIC8qKiBTdWJzY3JpcHRpb24gdG8gY2hhbmdlcyBpbiB0aGUgdGFiIGxhYmVscy4gKi9cbiAgICBwcml2YXRlIHRhYkxhYmVsU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuICAgIHByaXZhdGUgcmVzaXplU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBncm91cElkOiBudW1iZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZXNpemVEZWJvdW5jZUludGVydmFsOiBudW1iZXIgPSAxMDA7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3ZlcnRpY2FsJykgdmVydGljYWw6IHN0cmluZyxcbiAgICAgICAgQEluamVjdChLQlFfVEFCU19DT05GSUcpIEBPcHRpb25hbCgpIGRlZmF1bHRDb25maWc/OiBJS2JxVGFic0NvbmZpZ1xuICAgICkge1xuICAgICAgICBzdXBlcihlbGVtZW50UmVmKTtcblxuICAgICAgICB0aGlzLnZlcnRpY2FsID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZlcnRpY2FsKTtcblxuICAgICAgICB0aGlzLmdyb3VwSWQgPSBuZXh0SWQrKztcbiAgICAgICAgdGhpcy5hbmltYXRpb25EdXJhdGlvbiA9IGRlZmF1bHRDb25maWc/LmFuaW1hdGlvbkR1cmF0aW9uIHx8ICcwbXMnO1xuXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9SZXNpemUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZnRlciB0aGUgY29udGVudCBpcyBjaGVja2VkLCB0aGlzIGNvbXBvbmVudCBrbm93cyB3aGF0IHRhYnMgaGF2ZSBiZWVuIGRlZmluZWRcbiAgICAgKiBhbmQgd2hhdCB0aGUgc2VsZWN0ZWQgaW5kZXggc2hvdWxkIGJlLiBUaGlzIGlzIHdoZXJlIHdlIGNhbiBrbm93IGV4YWN0bHkgd2hhdCBwb3NpdGlvblxuICAgICAqIGVhY2ggdGFiIHNob3VsZCBiZSBpbiBhY2NvcmRpbmcgdG8gdGhlIG5ldyBzZWxlY3RlZCBpbmRleCwgYW5kIGFkZGl0aW9uYWxseSB3ZSBrbm93IGhvd1xuICAgICAqIGEgbmV3IHNlbGVjdGVkIHRhYiBzaG91bGQgdHJhbnNpdGlvbiBpbiAoZnJvbSB0aGUgbGVmdCBvciByaWdodCkuXG4gICAgICovXG4gICAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgICAgICAvLyBEb24ndCBjbGFtcCB0aGUgYGluZGV4VG9TZWxlY3RgIGltbWVkaWF0ZWx5IGluIHRoZSBzZXR0ZXIgYmVjYXVzZSBpdCBjYW4gaGFwcGVuIHRoYXRcbiAgICAgICAgLy8gdGhlIGFtb3VudCBvZiB0YWJzIGNoYW5nZXMgYmVmb3JlIHRoZSBhY3R1YWwgY2hhbmdlIGRldGVjdGlvbiBydW5zLlxuICAgICAgICBjb25zdCBpbmRleFRvU2VsZWN0ID0gdGhpcy5pbmRleFRvU2VsZWN0ID0gdGhpcy5jbGFtcFRhYkluZGV4KHRoaXMuaW5kZXhUb1NlbGVjdCk7XG5cbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBjaGFuZ2UgaW4gc2VsZWN0ZWQgaW5kZXgsIGVtaXQgYSBjaGFuZ2UgZXZlbnQuIFNob3VsZCBub3QgdHJpZ2dlciBpZlxuICAgICAgICAvLyB0aGUgc2VsZWN0ZWQgaW5kZXggaGFzIG5vdCB5ZXQgYmVlbiBpbml0aWFsaXplZC5cbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkSW5kZXggIT09IGluZGV4VG9TZWxlY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzRmlyc3RSdW4gPSB0aGlzLl9zZWxlY3RlZEluZGV4ID09IG51bGw7XG5cbiAgICAgICAgICAgIGlmICghaXNGaXJzdFJ1bikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJDaGFuZ2UuZW1pdCh0aGlzLmNyZWF0ZUNoYW5nZUV2ZW50KGluZGV4VG9TZWxlY3QpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2hhbmdpbmcgdGhlc2UgdmFsdWVzIGFmdGVyIGNoYW5nZSBkZXRlY3Rpb24gaGFzIHJ1blxuICAgICAgICAgICAgLy8gc2luY2UgdGhlIGNoZWNrZWQgY29udGVudCBtYXkgY29udGFpbiByZWZlcmVuY2VzIHRvIHRoZW0uXG4gICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYnMuZm9yRWFjaCgodGFiLCBpbmRleCkgPT4gdGFiLmlzQWN0aXZlID0gaW5kZXggPT09IGluZGV4VG9TZWxlY3QpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFpc0ZpcnN0UnVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleENoYW5nZS5lbWl0KGluZGV4VG9TZWxlY3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0dXAgdGhlIHBvc2l0aW9uIGZvciBlYWNoIHRhYiBhbmQgb3B0aW9uYWxseSBzZXR1cCBhbiBvcmlnaW4gb24gdGhlIG5leHQgc2VsZWN0ZWQgdGFiLlxuICAgICAgICB0aGlzLnRhYnMuZm9yRWFjaCgodGFiOiBLYnFUYWIsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHRhYi5wb3NpdGlvbiA9IGluZGV4IC0gaW5kZXhUb1NlbGVjdDtcblxuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHNlbGVjdGVkIHRhYiwgdGhlbiBzZXQgdXAgYW4gb3JpZ2luIGZvciB0aGUgbmV4dCBzZWxlY3RlZCB0YWJcbiAgICAgICAgICAgIC8vIGlmIGl0IGRvZXNuJ3QgaGF2ZSBvbmUgYWxyZWFkeS5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZEluZGV4ICE9IG51bGwgJiYgdGFiLnBvc2l0aW9uID09PSAwICYmICF0YWIub3JpZ2luKSB7XG4gICAgICAgICAgICAgICAgdGFiLm9yaWdpbiA9IGluZGV4VG9TZWxlY3QgLSB0aGlzLl9zZWxlY3RlZEluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRJbmRleCAhPT0gaW5kZXhUb1NlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleCA9IGluZGV4VG9TZWxlY3Q7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvVGFiTGFiZWxzKCk7XG5cbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gdGhlIGFtb3VudCBvZiB0YWJzLCBpbiBvcmRlciB0byBiZVxuICAgICAgICAvLyBhYmxlIHRvIHJlLXJlbmRlciB0aGUgY29udGVudCBhcyBuZXcgdGFicyBhcmUgYWRkZWQgb3IgcmVtb3ZlZC5cbiAgICAgICAgdGhpcy50YWJzU3Vic2NyaXB0aW9uID0gdGhpcy50YWJzLmNoYW5nZXNcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4VG9TZWxlY3QgPSB0aGlzLmNsYW1wVGFiSW5kZXgodGhpcy5pbmRleFRvU2VsZWN0KTtcblxuICAgICAgICAgICAgICAgIC8vIE1haW50YWluIHRoZSBwcmV2aW91c2x5LXNlbGVjdGVkIHRhYiBpZiBhIG5ldyB0YWIgaXMgYWRkZWQgb3IgcmVtb3ZlZCBhbmQgdGhlcmUgaXMgbm9cbiAgICAgICAgICAgICAgICAvLyBleHBsaWNpdCBjaGFuZ2UgdGhhdCBzZWxlY3RzIGEgZGlmZmVyZW50IHRhYi5cbiAgICAgICAgICAgICAgICBpZiAoaW5kZXhUb1NlbGVjdCA9PT0gdGhpcy5fc2VsZWN0ZWRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWJzID0gdGhpcy50YWJzLnRvQXJyYXkoKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWJzW2ldLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXNzaWduIGJvdGggdG8gdGhlIGBfaW5kZXhUb1NlbGVjdGAgYW5kIGBfc2VsZWN0ZWRJbmRleGAgc28gd2UgZG9uJ3QgZmlyZSBhIGNoYW5nZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBldmVudCwgb3RoZXJ3aXNlIHRoZSBjb25zdW1lciBtYXkgZW5kIHVwIGluIGFuIGluZmluaXRlIGxvb3AgaW4gc29tZSBlZGdlIGNhc2VzIGxpa2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGRpbmcgYSB0YWIgd2l0aGluIHRoZSBgc2VsZWN0ZWRJbmRleENoYW5nZWAgZXZlbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmRleFRvU2VsZWN0ID0gdGhpcy5fc2VsZWN0ZWRJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmliZVRvVGFiTGFiZWxzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGVja092ZXJmbG93KCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudGFic1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnRhYkxhYmVsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgZm9jdXNDaGFuZ2VkKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5mb2N1c0NoYW5nZS5lbWl0KHRoaXMuY3JlYXRlQ2hhbmdlRXZlbnQoaW5kZXgpKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhIHVuaXF1ZSBpZCBmb3IgZWFjaCB0YWIgbGFiZWwgZWxlbWVudCAqL1xuICAgIGdldFRhYkxhYmVsSWQoaTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGBrYnEtdGFiLWxhYmVsLSR7dGhpcy5ncm91cElkfS0ke2l9YDtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhIHVuaXF1ZSBpZCBmb3IgZWFjaCB0YWIgY29udGVudCBlbGVtZW50ICovXG4gICAgZ2V0VGFiQ29udGVudElkKGk6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBga2JxLXRhYi1jb250ZW50LSR7dGhpcy5ncm91cElkfS0ke2l9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBoZWlnaHQgb2YgdGhlIGJvZHkgd3JhcHBlciB0byB0aGUgaGVpZ2h0IG9mIHRoZSBhY3RpdmF0aW5nIHRhYiBpZiBkeW5hbWljXG4gICAgICogaGVpZ2h0IHByb3BlcnR5IGlzIHRydWUuXG4gICAgICovXG4gICAgc2V0VGFiQm9keVdyYXBwZXJIZWlnaHQodGFiSGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9keW5hbWljSGVpZ2h0IHx8ICF0aGlzLnRhYkJvZHlXcmFwcGVySGVpZ2h0KSB7IHJldHVybjsgfVxuXG4gICAgICAgIGNvbnN0IHdyYXBwZXI6IEhUTUxFbGVtZW50ID0gdGhpcy50YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIHdyYXBwZXIuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy50YWJCb2R5V3JhcHBlckhlaWdodH1weGA7XG5cbiAgICAgICAgLy8gVGhpcyBjb25kaXRpb25hbCBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gcGFpbnQgdGhlIGhlaWdodCBzbyB0aGF0XG4gICAgICAgIC8vIHRoZSBhbmltYXRpb24gdG8gdGhlIG5ldyBoZWlnaHQgY2FuIGhhdmUgYW4gb3JpZ2luLlxuICAgICAgICBpZiAodGhpcy50YWJCb2R5V3JhcHBlci5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCkge1xuICAgICAgICAgICAgd3JhcHBlci5zdHlsZS5oZWlnaHQgPSBgJHt0YWJIZWlnaHR9cHhgO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFJlbW92ZXMgdGhlIGhlaWdodCBvZiB0aGUgdGFiIGJvZHkgd3JhcHBlci4gKi9cbiAgICByZW1vdmVUYWJCb2R5V3JhcHBlckhlaWdodCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWJCb2R5V3JhcHBlckhlaWdodCA9IHRoaXMudGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgIHRoaXMudGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICAgICAgdGhpcy5hbmltYXRpb25Eb25lLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKiogSGFuZGxlIGNsaWNrIGV2ZW50cywgc2V0dGluZyBuZXcgc2VsZWN0ZWQgaW5kZXggaWYgYXBwcm9wcmlhdGUuICovXG4gICAgaGFuZGxlQ2xpY2sodGFiOiBLYnFUYWIsIHRhYkhlYWRlcjogS2JxVGFiSGVhZGVyLCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0YWIuZGlzYWJsZWQpIHsgcmV0dXJuOyB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gdGFiSGVhZGVyLmZvY3VzSW5kZXggPSBpbmRleDtcbiAgICB9XG5cbiAgICAvKiogUmV0cmlldmVzIHRoZSB0YWJpbmRleCBmb3IgdGhlIHRhYi4gKi9cbiAgICBnZXRUYWJJbmRleCh0YWI6IEticVRhYiwgaW5kZXg6IG51bWJlcik6IG51bWJlciB8IG51bGwge1xuICAgICAgICBpZiAodGFiLmRpc2FibGVkKSB7IHJldHVybiBudWxsOyB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gaW5kZXggPyAwIDogLTE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja092ZXJmbG93ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnRhYkhlYWRlci5pdGVtc1xuICAgICAgICAgICAgLmZvckVhY2goKGhlYWRlclRhYikgPT4gaGVhZGVyVGFiLmNoZWNrT3ZlcmZsb3coKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDaGFuZ2VFdmVudChpbmRleDogbnVtYmVyKTogS2JxVGFiQ2hhbmdlRXZlbnQge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBLYnFUYWJDaGFuZ2VFdmVudCgpO1xuICAgICAgICBldmVudC5pbmRleCA9IGluZGV4O1xuXG4gICAgICAgIGlmICh0aGlzLnRhYnMgJiYgdGhpcy50YWJzLmxlbmd0aCkge1xuICAgICAgICAgICAgZXZlbnQudGFiID0gdGhpcy50YWJzLnRvQXJyYXkoKVtpbmRleF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3Vic2NyaWJlcyB0byBjaGFuZ2VzIGluIHRoZSB0YWIgbGFiZWxzLiBUaGlzIGlzIG5lZWRlZCwgYmVjYXVzZSB0aGUgQElucHV0IGZvciB0aGUgbGFiZWwgaXNcbiAgICAgKiBvbiB0aGUgS2JxVGFiIGNvbXBvbmVudCwgd2hlcmVhcyB0aGUgZGF0YSBiaW5kaW5nIGlzIGluc2lkZSB0aGUgS2JxVGFiR3JvdXAuIEluIG9yZGVyIGZvciB0aGVcbiAgICAgKiBiaW5kaW5nIHRvIGJlIHVwZGF0ZWQsIHdlIG5lZWQgdG8gc3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gaXQgYW5kIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICAgICAqIG1hbnVhbGx5LlxuICAgICAqL1xuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9UYWJMYWJlbHMoKSB7XG4gICAgICAgIGlmICh0aGlzLnRhYkxhYmVsU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnRhYkxhYmVsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRhYkxhYmVsU3Vic2NyaXB0aW9uID0gbWVyZ2UoLi4udGhpcy50YWJzLm1hcCgodGFiKSA9PiB0YWIuc3RhdGVDaGFuZ2VzKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb1Jlc2l6ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZlcnRpY2FsKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmICh0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uID0gdGhpcy5yZXNpemVTdHJlYW1cbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLnJlc2l6ZURlYm91bmNlSW50ZXJ2YWwpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLmNoZWNrT3ZlcmZsb3cpO1xuICAgIH1cblxuICAgIC8qKiBDbGFtcHMgdGhlIGdpdmVuIGluZGV4IHRvIHRoZSBib3VuZHMgb2YgMCBhbmQgdGhlIHRhYnMgbGVuZ3RoLiAqL1xuICAgIHByaXZhdGUgY2xhbXBUYWJJbmRleChpbmRleDogbnVtYmVyIHwgbnVsbCk6IG51bWJlciB7XG4gICAgICAgIC8vIE5vdGUgdGhlIGB8fCAwYCwgd2hpY2ggZW5zdXJlcyB0aGF0IHZhbHVlcyBsaWtlIE5hTiBjYW4ndCBnZXQgdGhyb3VnaFxuICAgICAgICAvLyBhbmQgd2hpY2ggd291bGQgb3RoZXJ3aXNlIHRocm93IHRoZSBjb21wb25lbnQgaW50byBhbiBpbmZpbml0ZSBsb29wXG4gICAgICAgIC8vIChzaW5jZSBNYXRoLm1heChOYU4sIDApID09PSBOYU4pLlxuICAgICAgICByZXR1cm4gTWF0aC5taW4odGhpcy50YWJzLmxlbmd0aCAtIDEsIE1hdGgubWF4KGluZGV4IHx8IDAsIDApKTtcbiAgICB9XG59XG4iLCI8a2JxLXRhYi1oZWFkZXJcbiAgICAjdGFiSGVhZGVyXG4gICAgW3ZlcnRpY2FsXT1cInZlcnRpY2FsXCJcbiAgICBbc2VsZWN0ZWRJbmRleF09XCJzZWxlY3RlZEluZGV4XCJcbiAgICAoaW5kZXhGb2N1c2VkKT1cImZvY3VzQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAoc2VsZWN0Rm9jdXNlZEluZGV4KT1cInNlbGVjdGVkSW5kZXggPSAkZXZlbnRcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJrYnEtdGFiLWxhYmVsXCJcbiAgICAgICAgIGticVRhYkxhYmVsV3JhcHBlclxuICAgICAgICAgY2RrTW9uaXRvckVsZW1lbnRGb2N1c1xuICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZ2V0VGFiSW5kZXgodGFiLCBpKVwiXG4gICAgICAgICBbY2xhc3Mua2JxLXRhYi1sYWJlbF9ob3Jpem9udGFsXT1cIiF2ZXJ0aWNhbFwiXG4gICAgICAgICBbY2xhc3Mua2JxLXRhYi1sYWJlbF92ZXJ0aWNhbF09XCJ2ZXJ0aWNhbFwiXG4gICAgICAgICBbY2xhc3Mua2JxLXRhYi1sYWJlbF9lbXB0eV09XCJ0YWIuZW1wdHlcIlxuICAgICAgICAgW2NsYXNzLmticS1zZWxlY3RlZF09XCJzZWxlY3RlZEluZGV4ID09IGlcIlxuICAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgIFt0YWJdPVwidGFiXCJcbiAgICAgICAgIFtpZF09XCJnZXRUYWJMYWJlbElkKGkpXCJcbiAgICAgICAgIFtkaXNhYmxlZF09XCJ0YWIuZGlzYWJsZWRcIlxuICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKHRhYiwgdGFiSGVhZGVyLCBpKVwiXG5cbiAgICAgICAgIFtrYnFUb29sdGlwXT1cInRhYi50b29sdGlwVGl0bGVcIlxuICAgICAgICAgW2ticVRvb2x0aXBEaXNhYmxlZF09XCIhdGFiLmVtcHR5ICYmICF0YWIuaXNPdmVyZmxvd25cIlxuICAgICAgICAgW2ticVRyaWdnZXJdPVwiJ2hvdmVyLCBmb2N1cydcIlxuICAgICAgICAgW2ticVBsYWNlbWVudF09XCJ0YWIudG9vbHRpcFBsYWNlbWVudFwiPlxuXG4gICAgICAgIDxkaXYgI2xhYmVsQ29udGVudCBjbGFzcz1cImticS10YWItbGFiZWxfX2NvbnRlbnRcIlxuICAgICAgICAgICAgW2NsYXNzLmticS10YWItbGFiZWxfX3RlbXBsYXRlXT1cInRhYi50ZW1wbGF0ZUxhYmVsXCI+XG4gICAgICAgICAgICA8IS0tIElmIHRoZXJlIGlzIGEgbGFiZWwgdGVtcGxhdGUsIHVzZSBpdC4gLS0+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwidGFiLnRlbXBsYXRlTGFiZWxcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW2Nka1BvcnRhbE91dGxldF09XCJ0YWIudGVtcGxhdGVMYWJlbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICA8IS0tIElmIHRoZXJlIGlzIG5vdCBhIGxhYmVsIHRlbXBsYXRlLCBmYWxsIGJhY2sgdG8gdGhlIHRleHQgbGFiZWwuIC0tPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiF0YWIudGVtcGxhdGVMYWJlbFwiPnt7IHRhYi50ZXh0TGFiZWwgfX08L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwva2JxLXRhYi1oZWFkZXI+XG5cbjxkaXYgY2xhc3M9XCJrYnEtdGFiLWJvZHlfX3dyYXBwZXJcIiAjdGFiQm9keVdyYXBwZXI+XG4gICAgPGticS10YWItYm9keVxuICAgICAgICAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBbaWRdPVwiZ2V0VGFiQ29udGVudElkKGkpXCJcbiAgICAgICAgW2NsYXNzLmticS10YWItYm9keV9fYWN0aXZlXT1cInNlbGVjdGVkSW5kZXggPT0gaVwiXG4gICAgICAgIFtjb250ZW50XT1cInRhYi5jb250ZW50IVwiXG4gICAgICAgIFtwb3NpdGlvbl09XCJ0YWIucG9zaXRpb24hXCJcbiAgICAgICAgW29yaWdpbl09XCJ0YWIub3JpZ2luIVwiXG4gICAgICAgIFthbmltYXRpb25EdXJhdGlvbl09XCJhbmltYXRpb25EdXJhdGlvblwiXG4gICAgICAgIChvbkNlbnRlcmVkKT1cInJlbW92ZVRhYkJvZHlXcmFwcGVySGVpZ2h0KClcIlxuICAgICAgICAob25DZW50ZXJpbmcpPVwic2V0VGFiQm9keVdyYXBwZXJIZWlnaHQoJGV2ZW50KVwiPlxuICAgIDwva2JxLXRhYi1ib2R5PlxuPC9kaXY+XG4iXX0=
386
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvdGFicy90YWItZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy90YWJzL3RhYi1ncm91cC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxNQUFNLEVBQ04sUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBRVQsVUFBVSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBa0IsOEJBQThCLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEcsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7QUFPekMsTUFBTSxPQUFPLDJCQUEyQjtpSUFBM0IsMkJBQTJCO3FIQUEzQiwyQkFBMkI7OzJGQUEzQiwyQkFBMkI7a0JBSnZDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGdGQUFnRjtvQkFDMUYsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLG1DQUFtQyxFQUFFO2lCQUN2RDs7QUFPRCxNQUFNLE9BQU8sd0JBQXdC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QURoQixLQUFLO2dCQWFGLGFBQWE7c0JBRGhCLEtBQUs7Z0JBWUYsU0FBUztzQkFEWixLQUFLO2dCQW9CRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHYSxtQkFBbUI7c0JBQXJDLE1BQU07Z0JBR1ksZUFBZTtzQkFBakMsTUFBTTtnQkFHWSxXQUFXO3NCQUE3QixNQUFNO2dCQUdZLGFBQWE7c0JBQS9CLE1BQU07Z0JBR1ksaUJBQWlCO3NCQUFuQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIEluamVjdCxcbiAgICBPcHRpb25hbCxcbiAgICBEaXJlY3RpdmUsXG4gICAgQXR0cmlidXRlLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgZm9yd2FyZFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhbkRpc2FibGVDdG9yLCBLQlFfUEFSRU5UX0FOSU1BVElPTl9DT01QT05FTlQsIG1peGluRGlzYWJsZWQgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvY29yZSc7XG5pbXBvcnQgeyBtZXJnZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEticVRhYkhlYWRlciB9IGZyb20gJy4vdGFiLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgS2JxVGFiIH0gZnJvbSAnLi90YWIuY29tcG9uZW50JztcblxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ2ticS10YWItZ3JvdXBba2JxLWFsaWduLXRhYnMtY2VudGVyXSwgW2ticS10YWItbmF2LWJhcl1ba2JxLWFsaWduLXRhYnMtY2VudGVyXScsXG4gICAgaG9zdDogeyBjbGFzczogJ2ticS10YWItZ3JvdXBfYWxpZ24tbGFiZWxzLWNlbnRlcicgfVxufSlcbmV4cG9ydCBjbGFzcyBLYnFBbGlnblRhYnNDZW50ZXJDc3NTdHlsZXIge31cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdrYnEtdGFiLWdyb3VwW2ticS1hbGlnbi10YWJzLWVuZF0sIFtrYnEtdGFiLW5hdi1iYXJdW2ticS1hbGlnbi10YWJzLWVuZF0nLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdrYnEtdGFiLWdyb3VwX2FsaWduLWxhYmVscy1lbmQnIH1cbn0pXG5leHBvcnQgY2xhc3MgS2JxQWxpZ25UYWJzRW5kQ3NzU3R5bGVyIHt9XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAna2JxLXRhYi1ncm91cFtrYnEtc3RyZXRjaC10YWJzXSwgW2ticS10YWItbmF2LWJhcl1ba2JxLXN0cmV0Y2gtdGFic10nLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdrYnEtdGFiLWdyb3VwX3N0cmV0Y2gtbGFiZWxzJyB9XG59KVxuZXhwb3J0IGNsYXNzIEticVN0cmV0Y2hUYWJzQ3NzU3R5bGVyIHt9XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAna2JxLXRhYi1ncm91cFt2ZXJ0aWNhbF0sIFtrYnEtdGFiLW5hdi1iYXJdW3ZlcnRpY2FsXScsXG4gICAgaG9zdDogeyBjbGFzczogJ2ticS10YWItZ3JvdXBfdmVydGljYWwnIH1cbn0pXG5leHBvcnQgY2xhc3MgS2JxVmVydGljYWxUYWJzQ3NzU3R5bGVyIHt9XG5cbi8qKiBVc2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRCdzIGZvciBlYWNoIHRhYiBjb21wb25lbnQgKi9cbmxldCBuZXh0SWQgPSAwO1xuXG4vKiogQSBzaW1wbGUgY2hhbmdlIGV2ZW50IGVtaXR0ZWQgb24gZm9jdXMgb3Igc2VsZWN0aW9uIGNoYW5nZXMuICovXG5leHBvcnQgY2xhc3MgS2JxVGFiQ2hhbmdlRXZlbnQge1xuICAgIC8qKiBJbmRleCBvZiB0aGUgY3VycmVudGx5LXNlbGVjdGVkIHRhYi4gKi9cbiAgICBpbmRleDogbnVtYmVyO1xuICAgIC8qKiBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnRseS1zZWxlY3RlZCB0YWIuICovXG4gICAgdGFiOiBLYnFUYWI7XG59XG5cbi8qKiBQb3NzaWJsZSBwb3NpdGlvbnMgZm9yIHRoZSB0YWIgaGVhZGVyLiAqL1xuZXhwb3J0IHR5cGUgS2JxVGFiSGVhZGVyUG9zaXRpb24gPSAnYWJvdmUnIHwgJ2JlbG93JztcblxuLyoqIE9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBvcHRpb25zIGZvciB0aGUgdGFicyBtb2R1bGUuICovXG5leHBvcnQgaW50ZXJmYWNlIElLYnFUYWJzQ29uZmlnIHtcbiAgICAvKiogRHVyYXRpb24gZm9yIHRoZSB0YWIgYW5pbWF0aW9uLiBNdXN0IGJlIGEgdmFsaWQgQ1NTIHZhbHVlIChlLmcuIDYwMG1zKS4gKi9cbiAgICBhbmltYXRpb25EdXJhdGlvbj86IHN0cmluZztcbn1cblxuLyoqIEluamVjdGlvbiB0b2tlbiB0aGF0IGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgdGhlIGRlZmF1bHQgb3B0aW9ucyB0aGUgdGFicyBtb2R1bGUuICovXG5leHBvcnQgY29uc3QgS0JRX1RBQlNfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ0tCUV9UQUJTX0NPTkZJRycpO1xuXG4vLyBCb2lsZXJwbGF0ZSBmb3IgYXBwbHlpbmcgbWl4aW5zIHRvIEticVRhYkdyb3VwLlxuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjbGFzcyBLYnFUYWJHcm91cEJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxufVxuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGNvbnN0IEticVRhYkdyb3VwTWl4aW5CYXNlOiBDYW5EaXNhYmxlQ3RvciAmIHR5cGVvZiBLYnFUYWJHcm91cEJhc2UgPSBtaXhpbkRpc2FibGVkKEticVRhYkdyb3VwQmFzZSk7XG5cbmV4cG9ydCB0eXBlIEticVRhYlNlbGVjdEJ5ID0gc3RyaW5nIHwgbnVtYmVyIHwgKCh0YWJzOiBLYnFUYWJbXSkgPT4gS2JxVGFiIHwgbnVsbCk7XG5cbi8qKlxuICogVGFiLWdyb3VwIGNvbXBvbmVudC4gIFN1cHBvcnRzIGJhc2ljIHRhYiBwYWlycyAobGFiZWwgKyBjb250ZW50KSBhbmQgaW5jbHVkZXNcbiAqIGtleWJvYXJkIG5hdmlnYXRpb24uXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAna2JxLXRhYi1ncm91cCcsXG4gICAgZXhwb3J0QXM6ICdrYnFUYWJHcm91cCcsXG4gICAgdGVtcGxhdGVVcmw6ICd0YWItZ3JvdXAuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ3RhYi1ncm91cC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBpbnB1dHM6IFsnZGlzYWJsZWQnXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAna2JxLXRhYi1ncm91cCcsXG4gICAgICAgICdbY2xhc3Mua2JxLXRhYi1ncm91cF9maWxsZWRdJzogJyF0cmFuc3BhcmVudCcsXG4gICAgICAgICdbY2xhc3Mua2JxLXRhYi1ncm91cF90cmFuc3BhcmVudF0nOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAnW2NsYXNzLmticS10YWItZ3JvdXBfb24tYmFja2dyb3VuZF0nOiAnIW9uU3VyZmFjZScsXG4gICAgICAgICdbY2xhc3Mua2JxLXRhYi1ncm91cF9vbi1zdXJmYWNlXSc6ICdvblN1cmZhY2UnLFxuICAgICAgICAnW2NsYXNzLmticS10YWItZ3JvdXBfZHluYW1pYy1oZWlnaHRdJzogJ2R5bmFtaWNIZWlnaHQnLFxuICAgICAgICAnW2NsYXNzLmticS10YWItZ3JvdXBfaW52ZXJ0ZWQtaGVhZGVyXSc6ICdoZWFkZXJQb3NpdGlvbiA9PT0gXCJiZWxvd1wiJyxcbiAgICAgICAgJyh3aW5kb3c6cmVzaXplKSc6ICdyZXNpemVTdHJlYW0ubmV4dCgkZXZlbnQpJ1xuICAgIH0sXG4gICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBLQlFfUEFSRU5UX0FOSU1BVElPTl9DT01QT05FTlQsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IHRoaXMpIH1dXG59KVxuZXhwb3J0IGNsYXNzIEticVRhYkdyb3VwIGV4dGVuZHMgS2JxVGFiR3JvdXBNaXhpbkJhc2UgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBPbkRlc3Ryb3kge1xuICAgIHJlYWRvbmx5IHJlc2l6ZVN0cmVhbSA9IG5ldyBTdWJqZWN0PEV2ZW50PigpO1xuXG4gICAgdmVydGljYWw6IGJvb2xlYW47XG5cbiAgICBAQ29udGVudENoaWxkcmVuKEticVRhYikgdGFiczogUXVlcnlMaXN0PEticVRhYj47XG5cbiAgICBAVmlld0NoaWxkKCd0YWJCb2R5V3JhcHBlcicsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJCb2R5V3JhcHBlcjogRWxlbWVudFJlZjtcblxuICAgIEBWaWV3Q2hpbGQoJ3RhYkhlYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KSB0YWJIZWFkZXI6IEticVRhYkhlYWRlcjtcblxuICAgIEBJbnB1dCgpIHRyYW5zcGFyZW50OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgb25TdXJmYWNlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciB0aGUgdGFiIGdyb3VwIHNob3VsZCBncm93IHRvIHRoZSBzaXplIG9mIHRoZSBhY3RpdmUgdGFiLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGR5bmFtaWNIZWlnaHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9keW5hbWljSGVpZ2h0O1xuICAgIH1cblxuICAgIHNldCBkeW5hbWljSGVpZ2h0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2R5bmFtaWNIZWlnaHQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2R5bmFtaWNIZWlnaHQgPSBmYWxzZTtcblxuICAgIC8qKiBUaGUgaW5kZXggb2YgdGhlIGFjdGl2ZSB0YWIuICovXG4gICAgQElucHV0KClcbiAgICBnZXQgc2VsZWN0ZWRJbmRleCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSW5kZXg7XG4gICAgfVxuXG4gICAgc2V0IHNlbGVjdGVkSW5kZXgodmFsdWU6IG51bWJlciB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZWxlY3RlZEluZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGFjdGl2ZVRhYigpOiBLYnFUYWIgfCBudWxsIHtcbiAgICAgICAgc3dpdGNoICh0eXBlb2YgdGhpcy5hdHRyaWJ1dGVUb1NlbGVjdEJ5KSB7XG4gICAgICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRhYnMuZ2V0KHRoaXMuY2xhbXBUYWJJbmRleCh0aGlzLmF0dHJpYnV0ZVRvU2VsZWN0QnkpKSB8fCBudWxsO1xuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50YWJzLnRvQXJyYXkoKVxuICAgICAgICAgICAgICAgICAgICAuZmluZCgoeyB0YWJJZCB9KSA9PiB0YWJJZCA9PT0gdGhpcy5hdHRyaWJ1dGVUb1NlbGVjdEJ5KSB8fCB0aGlzLnRhYnMuZ2V0KDApIHx8IG51bGw7XG4gICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlVG9TZWxlY3RCeSh0aGlzLnRhYnMudG9BcnJheSgpKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFicy5nZXQoMCkgfHwgbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldCBhY3RpdmVUYWIodmFsdWU6IEticVRhYlNlbGVjdEJ5IHwgbnVsbCkge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZVRvU2VsZWN0QnkgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogUG9zaXRpb24gb2YgdGhlIHRhYiBoZWFkZXIuICovXG4gICAgQElucHV0KCkgaGVhZGVyUG9zaXRpb246IEticVRhYkhlYWRlclBvc2l0aW9uID0gJ2Fib3ZlJztcblxuICAgIC8qKiBEdXJhdGlvbiBmb3IgdGhlIHRhYiBhbmltYXRpb24uIE11c3QgYmUgYSB2YWxpZCBDU1MgdmFsdWUgKGUuZy4gNjAwbXMpLiAqL1xuICAgIEBJbnB1dCgpIGFuaW1hdGlvbkR1cmF0aW9uOiBzdHJpbmc7XG5cbiAgICAvKiogT3V0cHV0IHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0d28td2F5IGJpbmRpbmcgb24gYFsoc2VsZWN0ZWRJbmRleCldYCAqL1xuICAgIEBPdXRwdXQoKSByZWFkb25seSBzZWxlY3RlZEluZGV4Q2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgdGFiIHNlbGVjdGlvbiBoYXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgYWN0aXZlVGFiQ2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgbnVtYmVyIHwgS2JxVGFiPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgbnVtYmVyIHwgS2JxVGFiPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiBmb2N1cyBoYXMgY2hhbmdlZCB3aXRoaW4gYSB0YWIgZ3JvdXAuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGZvY3VzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8S2JxVGFiQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxLYnFUYWJDaGFuZ2VFdmVudD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGJvZHkgYW5pbWF0aW9uIGhhcyBjb21wbGV0ZWQgKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgYW5pbWF0aW9uRG9uZTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgdGFiIHNlbGVjdGlvbiBoYXMgY2hhbmdlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VsZWN0ZWRUYWJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxLYnFUYWJDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEticVRhYkNoYW5nZUV2ZW50Pih0cnVlKTtcblxuICAgIHByaXZhdGUgYXR0cmlidXRlVG9TZWxlY3RCeTogS2JxVGFiU2VsZWN0QnkgfCBudWxsICA9IG51bGw7XG5cbiAgICAvKiogU25hcHNob3Qgb2YgdGhlIGhlaWdodCBvZiB0aGUgdGFiIGJvZHkgd3JhcHBlciBiZWZvcmUgYW5vdGhlciB0YWIgaXMgYWN0aXZhdGVkLiAqL1xuICAgIHByaXZhdGUgdGFiQm9keVdyYXBwZXJIZWlnaHQgPSAwO1xuXG4gICAgLyoqIFN1YnNjcmlwdGlvbiB0byB0YWJzIGJlaW5nIGFkZGVkL3JlbW92ZWQuICovXG4gICAgcHJpdmF0ZSB0YWJzU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuXG4gICAgLyoqIFN1YnNjcmlwdGlvbiB0byBjaGFuZ2VzIGluIHRoZSB0YWIgbGFiZWxzLiAqL1xuICAgIHByaXZhdGUgdGFiTGFiZWxTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG4gICAgcHJpdmF0ZSByZXNpemVTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGdyb3VwSWQ6IG51bWJlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc2l6ZURlYm91bmNlSW50ZXJ2YWw6IG51bWJlciA9IDEwMDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQEF0dHJpYnV0ZSgndmVydGljYWwnKSB2ZXJ0aWNhbDogc3RyaW5nLFxuICAgICAgICBASW5qZWN0KEtCUV9UQUJTX0NPTkZJRykgQE9wdGlvbmFsKCkgZGVmYXVsdENvbmZpZz86IElLYnFUYWJzQ29uZmlnXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYpO1xuXG4gICAgICAgIHRoaXMudmVydGljYWwgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmVydGljYWwpO1xuXG4gICAgICAgIHRoaXMuZ3JvdXBJZCA9IG5leHRJZCsrO1xuICAgICAgICB0aGlzLmFuaW1hdGlvbkR1cmF0aW9uID0gZGVmYXVsdENvbmZpZz8uYW5pbWF0aW9uRHVyYXRpb24gfHwgJzBtcyc7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1Jlc2l6ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFmdGVyIHRoZSBjb250ZW50IGlzIGNoZWNrZWQsIHRoaXMgY29tcG9uZW50IGtub3dzIHdoYXQgdGFicyBoYXZlIGJlZW4gZGVmaW5lZFxuICAgICAqIGFuZCB3aGF0IHRoZSBzZWxlY3RlZCBpbmRleCBzaG91bGQgYmUuIFRoaXMgaXMgd2hlcmUgd2UgY2FuIGtub3cgZXhhY3RseSB3aGF0IHBvc2l0aW9uXG4gICAgICogZWFjaCB0YWIgc2hvdWxkIGJlIGluIGFjY29yZGluZyB0byB0aGUgbmV3IHNlbGVjdGVkIGluZGV4LCBhbmQgYWRkaXRpb25hbGx5IHdlIGtub3cgaG93XG4gICAgICogYSBuZXcgc2VsZWN0ZWQgdGFiIHNob3VsZCB0cmFuc2l0aW9uIGluIChmcm9tIHRoZSBsZWZ0IG9yIHJpZ2h0KS5cbiAgICAgKi9cbiAgICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgICAgIC8vIERvbid0IGNsYW1wIHRoZSBgaW5kZXhUb1NlbGVjdGAgaW1tZWRpYXRlbHkgaW4gdGhlIHNldHRlciBiZWNhdXNlIGl0IGNhbiBoYXBwZW4gdGhhdFxuICAgICAgICAvLyB0aGUgYW1vdW50IG9mIHRhYnMgY2hhbmdlcyBiZWZvcmUgdGhlIGFjdHVhbCBjaGFuZ2UgZGV0ZWN0aW9uIHJ1bnMuXG4gICAgICAgIGNvbnN0IGluZGV4VG9TZWxlY3QgPSB0aGlzLmdldFRhYkluZGV4VG9TZWxlY3QoKTtcblxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBzZWxlY3RlZCBpbmRleCwgZW1pdCBhIGNoYW5nZSBldmVudC4gU2hvdWxkIG5vdCB0cmlnZ2VyIGlmXG4gICAgICAgIC8vIHRoZSBzZWxlY3RlZCBpbmRleCBoYXMgbm90IHlldCBiZWVuIGluaXRpYWxpemVkLlxuICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRJbmRleCAhPT0gaW5kZXhUb1NlbGVjdCkge1xuICAgICAgICAgICAgY29uc3QgaXNGaXJzdFJ1biA9IHRoaXMuX3NlbGVjdGVkSW5kZXggPT0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFpc0ZpcnN0UnVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkNoYW5nZS5lbWl0KHRoaXMuY3JlYXRlQ2hhbmdlRXZlbnQoaW5kZXhUb1NlbGVjdCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDaGFuZ2luZyB0aGVzZSB2YWx1ZXMgYWZ0ZXIgY2hhbmdlIGRldGVjdGlvbiBoYXMgcnVuXG4gICAgICAgICAgICAvLyBzaW5jZSB0aGUgY2hlY2tlZCBjb250ZW50IG1heSBjb250YWluIHJlZmVyZW5jZXMgdG8gdGhlbS5cbiAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGFicy5mb3JFYWNoKCh0YWIsIGluZGV4KSA9PiB0YWIuaXNBY3RpdmUgPSBpbmRleCA9PT0gaW5kZXhUb1NlbGVjdCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWlzRmlyc3RSdW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFiVG9TZWxlY3QgPSB0aGlzLmFjdGl2ZVRhYjtcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXhDaGFuZ2UuZW1pdChpbmRleFRvU2VsZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVUYWJDaGFuZ2UuZW1pdChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlVG9TZWxlY3RCeSAmJiB0eXBlb2YgdGhpcy5hdHRyaWJ1dGVUb1NlbGVjdEJ5ID09PSAnZnVuY3Rpb24nICYmIHRhYlRvU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0YWJUb1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5hdHRyaWJ1dGVUb1NlbGVjdEJ5IGFzIHN0cmluZyB8IG51bWJlclxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0dXAgdGhlIHBvc2l0aW9uIGZvciBlYWNoIHRhYiBhbmQgb3B0aW9uYWxseSBzZXR1cCBhbiBvcmlnaW4gb24gdGhlIG5leHQgc2VsZWN0ZWQgdGFiLlxuICAgICAgICB0aGlzLnRhYnMuZm9yRWFjaCgodGFiOiBLYnFUYWIsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIHRhYi5wb3NpdGlvbiA9IGluZGV4IC0gaW5kZXhUb1NlbGVjdDtcblxuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHNlbGVjdGVkIHRhYiwgdGhlbiBzZXQgdXAgYW4gb3JpZ2luIGZvciB0aGUgbmV4dCBzZWxlY3RlZCB0YWJcbiAgICAgICAgICAgIC8vIGlmIGl0IGRvZXNuJ3QgaGF2ZSBvbmUgYWxyZWFkeS5cbiAgICAgICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZEluZGV4ICE9IG51bGwgJiYgdGFiLnBvc2l0aW9uID09PSAwICYmICF0YWIub3JpZ2luKSB7XG4gICAgICAgICAgICAgICAgdGFiLm9yaWdpbiA9IGluZGV4VG9TZWxlY3QgLSB0aGlzLl9zZWxlY3RlZEluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWRJbmRleCAhPT0gaW5kZXhUb1NlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleCA9IGluZGV4VG9TZWxlY3Q7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvVGFiTGFiZWxzKCk7XG5cbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gdGhlIGFtb3VudCBvZiB0YWJzLCBpbiBvcmRlciB0byBiZVxuICAgICAgICAvLyBhYmxlIHRvIHJlLXJlbmRlciB0aGUgY29udGVudCBhcyBuZXcgdGFicyBhcmUgYWRkZWQgb3IgcmVtb3ZlZC5cbiAgICAgICAgdGhpcy50YWJzU3Vic2NyaXB0aW9uID0gdGhpcy50YWJzLmNoYW5nZXNcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IGluZGV4VG9TZWxlY3QgPSB0aGlzLmNsYW1wVGFiSW5kZXgodGhpcy5pbmRleFRvU2VsZWN0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleFRvU2VsZWN0ID0gdGhpcy5nZXRUYWJJbmRleFRvU2VsZWN0KCk7XG5cbiAgICAgICAgICAgICAgICAvLyBNYWludGFpbiB0aGUgcHJldmlvdXNseS1zZWxlY3RlZCB0YWIgaWYgYSBuZXcgdGFiIGlzIGFkZGVkIG9yIHJlbW92ZWQgYW5kIHRoZXJlIGlzIG5vXG4gICAgICAgICAgICAgICAgLy8gZXhwbGljaXQgY2hhbmdlIHRoYXQgc2VsZWN0cyBhIGRpZmZlcmVudCB0YWIuXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4VG9TZWxlY3QgPT09IHRoaXMuX3NlbGVjdGVkSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFicyA9IHRoaXMudGFicy50b0FycmF5KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFic1tpXS5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFzc2lnbiBib3RoIHRvIHRoZSBgYWN0aXZlVGFiYCBhbmQgYF9zZWxlY3RlZEluZGV4YCBzbyB3ZSBkb24ndCBmaXJlIGEgY2hhbmdlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV2ZW50LCBvdGhlcndpc2UgdGhlIGNvbnN1bWVyIG1heSBlbmQgdXAgaW4gYW4gaW5maW5pdGUgbG9vcCBpbiBzb21lIGVkZ2UgY2FzZXMgbGlrZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZGluZyBhIHRhYiB3aXRoaW4gdGhlIGBzZWxlY3RlZEluZGV4Q2hhbmdlYCBldmVudC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0Rm9jdXNlZEluZGV4KGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1RhYkxhYmVscygpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hlY2tPdmVyZmxvdygpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnRhYnNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy50YWJMYWJlbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGZvY3VzQ2hhbmdlZChpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuZm9jdXNDaGFuZ2UuZW1pdCh0aGlzLmNyZWF0ZUNoYW5nZUV2ZW50KGluZGV4KSk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYSB1bmlxdWUgaWQgZm9yIGVhY2ggdGFiIGxhYmVsIGVsZW1lbnQgKi9cbiAgICBnZXRUYWJMYWJlbElkKGk6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBga2JxLXRhYi1sYWJlbC0ke3RoaXMuZ3JvdXBJZH0tJHtpfWA7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYSB1bmlxdWUgaWQgZm9yIGVhY2ggdGFiIGNvbnRlbnQgZWxlbWVudCAqL1xuICAgIGdldFRhYkNvbnRlbnRJZChpOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYGticS10YWItY29udGVudC0ke3RoaXMuZ3JvdXBJZH0tJHtpfWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgaGVpZ2h0IG9mIHRoZSBib2R5IHdyYXBwZXIgdG8gdGhlIGhlaWdodCBvZiB0aGUgYWN0aXZhdGluZyB0YWIgaWYgZHluYW1pY1xuICAgICAqIGhlaWdodCBwcm9wZXJ0eSBpcyB0cnVlLlxuICAgICAqL1xuICAgIHNldFRhYkJvZHlXcmFwcGVySGVpZ2h0KHRhYkhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fZHluYW1pY0hlaWdodCB8fCAhdGhpcy50YWJCb2R5V3JhcHBlckhlaWdodCkgeyByZXR1cm47IH1cblxuICAgICAgICBjb25zdCB3cmFwcGVyOiBIVE1MRWxlbWVudCA9IHRoaXMudGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudDtcblxuICAgICAgICB3cmFwcGVyLnN0eWxlLmhlaWdodCA9IGAke3RoaXMudGFiQm9keVdyYXBwZXJIZWlnaHR9cHhgO1xuXG4gICAgICAgIC8vIFRoaXMgY29uZGl0aW9uYWwgZm9yY2VzIHRoZSBicm93c2VyIHRvIHBhaW50IHRoZSBoZWlnaHQgc28gdGhhdFxuICAgICAgICAvLyB0aGUgYW5pbWF0aW9uIHRvIHRoZSBuZXcgaGVpZ2h0IGNhbiBoYXZlIGFuIG9yaWdpbi5cbiAgICAgICAgaWYgKHRoaXMudGFiQm9keVdyYXBwZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQpIHtcbiAgICAgICAgICAgIHdyYXBwZXIuc3R5bGUuaGVpZ2h0ID0gYCR7dGFiSGVpZ2h0fXB4YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBSZW1vdmVzIHRoZSBoZWlnaHQgb2YgdGhlIHRhYiBib2R5IHdyYXBwZXIuICovXG4gICAgcmVtb3ZlVGFiQm9keVdyYXBwZXJIZWlnaHQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFiQm9keVdyYXBwZXJIZWlnaHQgPSB0aGlzLnRhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICB0aGlzLnRhYkJvZHlXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgICAgIHRoaXMuYW5pbWF0aW9uRG9uZS5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZSBjbGljayBldmVudHMsIHNldHRpbmcgbmV3IHNlbGVjdGVkIGluZGV4IGlmIGFwcHJvcHJpYXRlLiAqL1xuICAgIGhhbmRsZUNsaWNrKHRhYjogS2JxVGFiLCB0YWJIZWFkZXI6IEticVRhYkhlYWRlciwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAodGFiLmRpc2FibGVkKSB7IHJldHVybjsgfVxuXG4gICAgICAgIHRoaXMub25TZWxlY3RGb2N1c2VkSW5kZXgoaW5kZXgpO1xuICAgICAgICB0YWJIZWFkZXIuZm9jdXNJbmRleCA9IGluZGV4O1xuICAgIH1cblxuICAgIC8qKiBSZXRyaWV2ZXMgdGhlIHRhYmluZGV4IGZvciB0aGUgdGFiLiAqL1xuICAgIGdldFRhYkluZGV4KHRhYjogS2JxVGFiLCBpbmRleDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgICAgIGlmICh0YWIuZGlzYWJsZWQpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEluZGV4ID09PSBpbmRleCA/IDAgOiAtMTtcbiAgICB9XG5cbiAgICBvblNlbGVjdEZvY3VzZWRJbmRleCgkZXZlbnQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYXR0cmlidXRlVG9TZWxlY3RCeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVGFiID0gdGhpcy50YWJzLmdldCgkZXZlbnQpPy50YWJJZCB8fCBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSAkZXZlbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja092ZXJmbG93ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnRhYkhlYWRlci5pdGVtc1xuICAgICAgICAgICAgLmZvckVhY2goKGhlYWRlclRhYikgPT4gaGVhZGVyVGFiLmNoZWNrT3ZlcmZsb3coKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDaGFuZ2VFdmVudChpbmRleDogbnVtYmVyKTogS2JxVGFiQ2hhbmdlRXZlbnQge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBLYnFUYWJDaGFuZ2VFdmVudCgpO1xuICAgICAgICBldmVudC5pbmRleCA9IGluZGV4O1xuXG4gICAgICAgIGlmICh0aGlzLnRhYnMgJiYgdGhpcy50YWJzLmxlbmd0aCkge1xuICAgICAgICAgICAgZXZlbnQudGFiID0gdGhpcy50YWJzLnRvQXJyYXkoKVtpbmRleF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3Vic2NyaWJlcyB0byBjaGFuZ2VzIGluIHRoZSB0YWIgbGFiZWxzLiBUaGlzIGlzIG5lZWRlZCwgYmVjYXVzZSB0aGUgQElucHV0IGZvciB0aGUgbGFiZWwgaXNcbiAgICAgKiBvbiB0aGUgS2JxVGFiIGNvbXBvbmVudCwgd2hlcmVhcyB0aGUgZGF0YSBiaW5kaW5nIGlzIGluc2lkZSB0aGUgS2JxVGFiR3JvdXAuIEluIG9yZGVyIGZvciB0aGVcbiAgICAgKiBiaW5kaW5nIHRvIGJlIHVwZGF0ZWQsIHdlIG5lZWQgdG8gc3Vic2NyaWJlIHRvIGNoYW5nZXMgaW4gaXQgYW5kIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvblxuICAgICAqIG1hbnVhbGx5LlxuICAgICAqL1xuICAgIHByaXZhdGUgc3Vic2NyaWJlVG9UYWJMYWJlbHMoKSB7XG4gICAgICAgIGlmICh0aGlzLnRhYkxhYmVsU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnRhYkxhYmVsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRhYkxhYmVsU3Vic2NyaXB0aW9uID0gbWVyZ2UoLi4udGhpcy50YWJzLm1hcCgodGFiKSA9PiB0YWIuc3RhdGVDaGFuZ2VzKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb1Jlc2l6ZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZlcnRpY2FsKSB7IHJldHVybjsgfVxuXG4gICAgICAgIGlmICh0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uID0gdGhpcy5yZXNpemVTdHJlYW1cbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLnJlc2l6ZURlYm91bmNlSW50ZXJ2YWwpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLmNoZWNrT3ZlcmZsb3cpO1xuICAgIH1cblxuICAgIC8qKiBDbGFtcHMgdGhlIGdpdmVuIGluZGV4IHRvIHRoZSBib3VuZHMgb2YgMCBhbmQgdGhlIHRhYnMgbGVuZ3RoLiAqL1xuICAgIHByaXZhdGUgY2xhbXBUYWJJbmRleChpbmRleDogbnVtYmVyIHwgbnVsbCk6IG51bWJlciB7XG4gICAgICAgIC8vIE5vdGUgdGhlIGB8fCAwYCwgd2hpY2ggZW5zdXJlcyB0aGF0IHZhbHVlcyBsaWtlIE5hTiBjYW4ndCBnZXQgdGhyb3VnaFxuICAgICAgICAvLyBhbmQgd2hpY2ggd291bGQgb3RoZXJ3aXNlIHRocm93IHRoZSBjb21wb25lbnQgaW50byBhbiBpbmZpbml0ZSBsb29wXG4gICAgICAgIC8vIChzaW5jZSBNYXRoLm1heChOYU4sIDApID09PSBOYU4pLlxuICAgICAgICByZXR1cm4gTWF0aC5taW4odGhpcy50YWJzLmxlbmd0aCAtIDEsIE1hdGgubWF4KGluZGV4IHx8IDAsIDApKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRhYkluZGV4VG9TZWxlY3QoKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdGVkVGFiID0gdGhpcy5hY3RpdmVUYWI7XG4gICAgICAgIGlmIChjdXJyZW50U2VsZWN0ZWRUYWIgPT09IG51bGwpIHsgcmV0dXJuIDA7IH1cbiAgICAgICAgcmV0dXJuIHRoaXMudGFicz8udG9BcnJheSgpLmluZGV4T2YoY3VycmVudFNlbGVjdGVkVGFiKTtcbiAgICB9XG59XG4iLCI8a2JxLXRhYi1oZWFkZXJcbiAgICAjdGFiSGVhZGVyXG4gICAgW3ZlcnRpY2FsXT1cInZlcnRpY2FsXCJcbiAgICBbc2VsZWN0ZWRJbmRleF09XCJzZWxlY3RlZEluZGV4XCJcbiAgICAoaW5kZXhGb2N1c2VkKT1cImZvY3VzQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAoc2VsZWN0Rm9jdXNlZEluZGV4KT1cIm9uU2VsZWN0Rm9jdXNlZEluZGV4KCRldmVudClcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJrYnEtdGFiLWxhYmVsXCJcbiAgICAgICAgIGticVRhYkxhYmVsV3JhcHBlclxuICAgICAgICAgY2RrTW9uaXRvckVsZW1lbnRGb2N1c1xuICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZ2V0VGFiSW5kZXgodGFiLCBpKVwiXG4gICAgICAgICBbY2xhc3Mua2JxLXRhYi1sYWJlbF9ob3Jpem9udGFsXT1cIiF2ZXJ0aWNhbFwiXG4gICAgICAgICBbY2xhc3Mua2JxLXRhYi1sYWJlbF92ZXJ0aWNhbF09XCJ2ZXJ0aWNhbFwiXG4gICAgICAgICBbY2xhc3Mua2JxLXRhYi1sYWJlbF9lbXB0eV09XCJ0YWIuZW1wdHlcIlxuICAgICAgICAgW2NsYXNzLmticS1zZWxlY3RlZF09XCJzZWxlY3RlZEluZGV4ID09IGlcIlxuICAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgIFt0YWJdPVwidGFiXCJcbiAgICAgICAgIFtpZF09XCJnZXRUYWJMYWJlbElkKGkpXCJcbiAgICAgICAgIFtkaXNhYmxlZF09XCJ0YWIuZGlzYWJsZWRcIlxuICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKHRhYiwgdGFiSGVhZGVyLCBpKVwiXG5cbiAgICAgICAgIFtrYnFUb29sdGlwXT1cInRhYi50b29sdGlwVGl0bGVcIlxuICAgICAgICAgW2ticVRvb2x0aXBEaXNhYmxlZF09XCIhdGFiLmVtcHR5ICYmICF0YWIuaXNPdmVyZmxvd25cIlxuICAgICAgICAgW2ticVRyaWdnZXJdPVwiJ2hvdmVyLCBmb2N1cydcIlxuICAgICAgICAgW2ticVBsYWNlbWVudF09XCJ0YWIudG9vbHRpcFBsYWNlbWVudFwiPlxuXG4gICAgICAgIDxkaXYgI2xhYmVsQ29udGVudCBjbGFzcz1cImticS10YWItbGFiZWxfX2NvbnRlbnRcIlxuICAgICAgICAgICAgW2NsYXNzLmticS10YWItbGFiZWxfX3RlbXBsYXRlXT1cInRhYi50ZW1wbGF0ZUxhYmVsXCI+XG4gICAgICAgICAgICA8IS0tIElmIHRoZXJlIGlzIGEgbGFiZWwgdGVtcGxhdGUsIHVzZSBpdC4gLS0+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwidGFiLnRlbXBsYXRlTGFiZWxcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW2Nka1BvcnRhbE91dGxldF09XCJ0YWIudGVtcGxhdGVMYWJlbFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICA8IS0tIElmIHRoZXJlIGlzIG5vdCBhIGxhYmVsIHRlbXBsYXRlLCBmYWxsIGJhY2sgdG8gdGhlIHRleHQgbGFiZWwuIC0tPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiF0YWIudGVtcGxhdGVMYWJlbFwiPnt7IHRhYi50ZXh0TGFiZWwgfX08L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwva2JxLXRhYi1oZWFkZXI+XG5cbjxkaXYgY2xhc3M9XCJrYnEtdGFiLWJvZHlfX3dyYXBwZXJcIiAjdGFiQm9keVdyYXBwZXI+XG4gICAgPGticS10YWItYm9keVxuICAgICAgICAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICBbaWRdPVwiZ2V0VGFiQ29udGVudElkKGkpXCJcbiAgICAgICAgW2NsYXNzLmticS10YWItYm9keV9fYWN0aXZlXT1cInNlbGVjdGVkSW5kZXggPT0gaVwiXG4gICAgICAgIFtjb250ZW50XT1cInRhYi5jb250ZW50IVwiXG4gICAgICAgIFtwb3NpdGlvbl09XCJ0YWIucG9zaXRpb24hXCJcbiAgICAgICAgW29yaWdpbl09XCJ0YWIub3JpZ2luIVwiXG4gICAgICAgIFthbmltYXRpb25EdXJhdGlvbl09XCJhbmltYXRpb25EdXJhdGlvblwiXG4gICAgICAgIChvbkNlbnRlcmVkKT1cInJlbW92ZVRhYkJvZHlXcmFwcGVySGVpZ2h0KClcIlxuICAgICAgICAob25DZW50ZXJpbmcpPVwic2V0VGFiQm9keVdyYXBwZXJIZWlnaHQoJGV2ZW50KVwiPlxuICAgIDwva2JxLXRhYi1ib2R5PlxuPC9kaXY+XG4iXX0=
@@ -29,7 +29,7 @@ export class KbqTabHeader extends KbqPaginatedTabHeader {
29
29
  event.preventDefault();
30
30
  }
31
31
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: KbqTabHeader, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.ViewportRuler }, { token: i0.NgZone }, { token: i2.Platform }, { token: i3.Directionality, optional: true }, { token: ANIMATION_MODULE_TYPE, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
32
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: KbqTabHeader, selector: "kbq-tab-header", inputs: { selectedIndex: "selectedIndex", vertical: "vertical" }, outputs: { selectFocusedIndex: "selectFocusedIndex", indexFocused: "indexFocused" }, host: { properties: { "class.kbq-tab-header_vertical": "vertical", "class.kbq-tab-header__pagination-controls_enabled": "showPaginationControls", "class.kbq-tab-header_rtl": "getLayoutDirection() == 'rtl'" }, classAttribute: "kbq-tab-header" }, queries: [{ propertyName: "items", predicate: KbqTabLabelWrapper }], viewQueries: [{ propertyName: "tabListContainer", first: true, predicate: ["tabListContainer"], descendants: true, static: true }, { propertyName: "tabList", first: true, predicate: ["tabList"], descendants: true, static: true }, { propertyName: "nextPaginator", first: true, predicate: ["nextPaginator"], descendants: true }, { propertyName: "previousPaginator", first: true, predicate: ["previousPaginator"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"kbq-tab-header__pagination kbq-tab-header__pagination_before\"\n #previousPaginator\n [class.kbq-disabled]=\"disableScrollBefore\"\n (click)=\"handlePaginatorClick('before')\"\n (mousedown)=\"handlePaginatorPress('before', $event)\"\n (touchend)=\"stopInterval()\">\n\n <i kbq-icon=\"mc-angle-left-M_16\"></i>\n</div>\n\n<div class=\"kbq-tab-header__content\"\n #tabListContainer\n (keydown)=\"handleKeydown($event)\">\n\n <div class=\"kbq-tab-list\"\n #tabList\n (cdkObserveContent)=\"onContentChanges()\">\n <div class=\"kbq-tab-list__content\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n\n<div class=\"kbq-tab-header__pagination kbq-tab-header__pagination_after\"\n #nextPaginator\n [class.kbq-disabled]=\"disableScrollAfter\"\n (mousedown)=\"handlePaginatorPress('after', $event)\"\n (click)=\"handlePaginatorClick('after')\"\n (touchend)=\"stopInterval()\">\n\n <i kbq-icon=\"mc-angle-right-M_16\"></i>\n</div>\n", styles: [".kbq-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.kbq-tab-list__content{display:flex}.kbq-tab-group_align-labels-center .kbq-tab-list__content{justify-content:center}.kbq-tab-group_align-labels-end .kbq-tab-list__content{justify-content:flex-end}.kbq-tab-header_vertical .kbq-tab-list__content{flex-direction:column}.kbq-tab-header__pagination{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;cursor:pointer;z-index:2;-webkit-tap-highlight-color:transparent;touch-action:none;padding-left:12px;padding-right:12px}.kbq-tab-header__pagination-controls_enabled .kbq-tab-header__pagination{display:flex}.kbq-tab-header__content{display:flex;flex-grow:1;z-index:1;overflow:hidden}.kbq-tab-list{position:relative;width:100%;transition:transform .5s cubic-bezier(.35,0,.25,1)}.kbq-tab-label{position:relative;box-sizing:border-box;display:inline-flex;justify-content:center;align-items:center;text-align:center;white-space:nowrap;cursor:pointer;padding:calc(var(--kbq-tabs-size-tab-item-padding-vertical, 8px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px)) calc(var(--kbq-tabs-size-tab-item-padding-horizontal, 12px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px));border-width:var(--kbq-tabs-size-tab-item-focus-outline-width, 2px);border-style:solid;border-color:transparent;border-radius:var(--kbq-tabs-size-tab-item-border-radius, 8px);outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.kbq-tab-label.kbq-selected{cursor:default}.kbq-tab-label.cdk-keyboard-focused{z-index:1}.kbq-tab-label.kbq-disabled{pointer-events:none}.kbq-tab-label .kbq-tab-label__content{display:flex;gap:var(--kbq-tabs-size-tab-item-content-gap-horizontal, 4px)}.kbq-tab-label.kbq-tab-label_vertical{justify-content:flex-start}.kbq-tab-label.kbq-tab-label_vertical .kbq-tab-label__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbq-tab-group_stretch-labels .kbq-tab-label{flex-basis:0;flex-grow:1}\n"], dependencies: [{ kind: "component", type: i4.KbqIcon, selector: "[kbq-icon]", inputs: ["color", "small", "autoColor"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
32
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: KbqTabHeader, selector: "kbq-tab-header", inputs: { selectedIndex: "selectedIndex", vertical: "vertical" }, outputs: { selectFocusedIndex: "selectFocusedIndex", indexFocused: "indexFocused" }, host: { properties: { "class.kbq-tab-header_vertical": "vertical", "class.kbq-tab-header__pagination-controls_enabled": "showPaginationControls", "class.kbq-tab-header_rtl": "getLayoutDirection() == 'rtl'" }, classAttribute: "kbq-tab-header" }, queries: [{ propertyName: "items", predicate: KbqTabLabelWrapper }], viewQueries: [{ propertyName: "tabListContainer", first: true, predicate: ["tabListContainer"], descendants: true, static: true }, { propertyName: "tabList", first: true, predicate: ["tabList"], descendants: true, static: true }, { propertyName: "nextPaginator", first: true, predicate: ["nextPaginator"], descendants: true }, { propertyName: "previousPaginator", first: true, predicate: ["previousPaginator"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"kbq-tab-header__pagination kbq-tab-header__pagination_before\"\n #previousPaginator\n [class.kbq-disabled]=\"disableScrollBefore\"\n (click)=\"handlePaginatorClick('before')\"\n (mousedown)=\"handlePaginatorPress('before', $event)\"\n (touchend)=\"stopInterval()\">\n\n <i kbq-icon=\"mc-angle-left-M_16\"></i>\n</div>\n\n<div class=\"kbq-tab-header__content\"\n #tabListContainer\n (keydown)=\"handleKeydown($event)\">\n\n <div class=\"kbq-tab-list\"\n #tabList\n (cdkObserveContent)=\"onContentChanges()\">\n <div class=\"kbq-tab-list__content\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n\n<div class=\"kbq-tab-header__pagination kbq-tab-header__pagination_after\"\n #nextPaginator\n [class.kbq-disabled]=\"disableScrollAfter\"\n (mousedown)=\"handlePaginatorPress('after', $event)\"\n (click)=\"handlePaginatorClick('after')\"\n (touchend)=\"stopInterval()\">\n\n <i kbq-icon=\"mc-angle-right-M_16\"></i>\n</div>\n", styles: [".kbq-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.kbq-tab-list__content{display:flex}.kbq-tab-group_align-labels-center .kbq-tab-list__content{justify-content:center}.kbq-tab-group_align-labels-end .kbq-tab-list__content{justify-content:flex-end}.kbq-tab-header_vertical .kbq-tab-list__content{flex-direction:column}.kbq-tab-header__pagination{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;cursor:pointer;z-index:2;-webkit-tap-highlight-color:transparent;touch-action:none;padding-left:12px;padding-right:12px}.kbq-tab-header__pagination-controls_enabled .kbq-tab-header__pagination{display:flex}.kbq-tab-header__content{display:flex;flex-grow:1;z-index:1;overflow:hidden}.kbq-tab-list{position:relative;width:100%;transition:transform .5s cubic-bezier(.35,0,.25,1)}.kbq-tab-label{position:relative;box-sizing:border-box;display:inline-flex;justify-content:center;align-items:center;text-align:center;white-space:nowrap;cursor:pointer;padding:calc(var(--kbq-tabs-size-tab-item-padding-vertical, 6px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px)) calc(var(--kbq-tabs-size-tab-item-padding-horizontal, 12px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px));border-width:var(--kbq-tabs-size-tab-item-focus-outline-width, 2px);border-style:solid;border-color:transparent;border-radius:var(--kbq-tabs-size-tab-item-border-radius, 8px);outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.kbq-tab-label.kbq-selected{cursor:default}.kbq-tab-label.cdk-keyboard-focused{z-index:1}.kbq-tab-label.kbq-disabled{pointer-events:none}.kbq-tab-label .kbq-tab-label__content{display:flex;gap:var(--kbq-tabs-size-tab-item-content-gap-horizontal, 4px)}.kbq-tab-label.kbq-tab-label_vertical{justify-content:flex-start}.kbq-tab-label.kbq-tab-label_vertical .kbq-tab-label__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbq-tab-group_stretch-labels .kbq-tab-label{flex-basis:0;flex-grow:1}\n"], dependencies: [{ kind: "component", type: i4.KbqIcon, selector: "[kbq-icon]", inputs: ["color", "small", "autoColor"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None }); }
33
33
  }
34
34
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: KbqTabHeader, decorators: [{
35
35
  type: Component,
@@ -38,7 +38,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImpor
38
38
  '[class.kbq-tab-header_vertical]': 'vertical',
39
39
  '[class.kbq-tab-header__pagination-controls_enabled]': 'showPaginationControls',
40
40
  '[class.kbq-tab-header_rtl]': 'getLayoutDirection() == \'rtl\''
41
- }, template: "<div class=\"kbq-tab-header__pagination kbq-tab-header__pagination_before\"\n #previousPaginator\n [class.kbq-disabled]=\"disableScrollBefore\"\n (click)=\"handlePaginatorClick('before')\"\n (mousedown)=\"handlePaginatorPress('before', $event)\"\n (touchend)=\"stopInterval()\">\n\n <i kbq-icon=\"mc-angle-left-M_16\"></i>\n</div>\n\n<div class=\"kbq-tab-header__content\"\n #tabListContainer\n (keydown)=\"handleKeydown($event)\">\n\n <div class=\"kbq-tab-list\"\n #tabList\n (cdkObserveContent)=\"onContentChanges()\">\n <div class=\"kbq-tab-list__content\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n\n<div class=\"kbq-tab-header__pagination kbq-tab-header__pagination_after\"\n #nextPaginator\n [class.kbq-disabled]=\"disableScrollAfter\"\n (mousedown)=\"handlePaginatorPress('after', $event)\"\n (click)=\"handlePaginatorClick('after')\"\n (touchend)=\"stopInterval()\">\n\n <i kbq-icon=\"mc-angle-right-M_16\"></i>\n</div>\n", styles: [".kbq-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.kbq-tab-list__content{display:flex}.kbq-tab-group_align-labels-center .kbq-tab-list__content{justify-content:center}.kbq-tab-group_align-labels-end .kbq-tab-list__content{justify-content:flex-end}.kbq-tab-header_vertical .kbq-tab-list__content{flex-direction:column}.kbq-tab-header__pagination{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;cursor:pointer;z-index:2;-webkit-tap-highlight-color:transparent;touch-action:none;padding-left:12px;padding-right:12px}.kbq-tab-header__pagination-controls_enabled .kbq-tab-header__pagination{display:flex}.kbq-tab-header__content{display:flex;flex-grow:1;z-index:1;overflow:hidden}.kbq-tab-list{position:relative;width:100%;transition:transform .5s cubic-bezier(.35,0,.25,1)}.kbq-tab-label{position:relative;box-sizing:border-box;display:inline-flex;justify-content:center;align-items:center;text-align:center;white-space:nowrap;cursor:pointer;padding:calc(var(--kbq-tabs-size-tab-item-padding-vertical, 8px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px)) calc(var(--kbq-tabs-size-tab-item-padding-horizontal, 12px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px));border-width:var(--kbq-tabs-size-tab-item-focus-outline-width, 2px);border-style:solid;border-color:transparent;border-radius:var(--kbq-tabs-size-tab-item-border-radius, 8px);outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.kbq-tab-label.kbq-selected{cursor:default}.kbq-tab-label.cdk-keyboard-focused{z-index:1}.kbq-tab-label.kbq-disabled{pointer-events:none}.kbq-tab-label .kbq-tab-label__content{display:flex;gap:var(--kbq-tabs-size-tab-item-content-gap-horizontal, 4px)}.kbq-tab-label.kbq-tab-label_vertical{justify-content:flex-start}.kbq-tab-label.kbq-tab-label_vertical .kbq-tab-label__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbq-tab-group_stretch-labels .kbq-tab-label{flex-basis:0;flex-grow:1}\n"] }]
41
+ }, template: "<div class=\"kbq-tab-header__pagination kbq-tab-header__pagination_before\"\n #previousPaginator\n [class.kbq-disabled]=\"disableScrollBefore\"\n (click)=\"handlePaginatorClick('before')\"\n (mousedown)=\"handlePaginatorPress('before', $event)\"\n (touchend)=\"stopInterval()\">\n\n <i kbq-icon=\"mc-angle-left-M_16\"></i>\n</div>\n\n<div class=\"kbq-tab-header__content\"\n #tabListContainer\n (keydown)=\"handleKeydown($event)\">\n\n <div class=\"kbq-tab-list\"\n #tabList\n (cdkObserveContent)=\"onContentChanges()\">\n <div class=\"kbq-tab-list__content\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n\n<div class=\"kbq-tab-header__pagination kbq-tab-header__pagination_after\"\n #nextPaginator\n [class.kbq-disabled]=\"disableScrollAfter\"\n (mousedown)=\"handlePaginatorPress('after', $event)\"\n (click)=\"handlePaginatorClick('after')\"\n (touchend)=\"stopInterval()\">\n\n <i kbq-icon=\"mc-angle-right-M_16\"></i>\n</div>\n", styles: [".kbq-tab-header{display:flex;overflow:hidden;position:relative;flex-shrink:0}.kbq-tab-list__content{display:flex}.kbq-tab-group_align-labels-center .kbq-tab-list__content{justify-content:center}.kbq-tab-group_align-labels-end .kbq-tab-list__content{justify-content:flex-end}.kbq-tab-header_vertical .kbq-tab-list__content{flex-direction:column}.kbq-tab-header__pagination{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;display:none;justify-content:center;align-items:center;cursor:pointer;z-index:2;-webkit-tap-highlight-color:transparent;touch-action:none;padding-left:12px;padding-right:12px}.kbq-tab-header__pagination-controls_enabled .kbq-tab-header__pagination{display:flex}.kbq-tab-header__content{display:flex;flex-grow:1;z-index:1;overflow:hidden}.kbq-tab-list{position:relative;width:100%;transition:transform .5s cubic-bezier(.35,0,.25,1)}.kbq-tab-label{position:relative;box-sizing:border-box;display:inline-flex;justify-content:center;align-items:center;text-align:center;white-space:nowrap;cursor:pointer;padding:calc(var(--kbq-tabs-size-tab-item-padding-vertical, 6px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px)) calc(var(--kbq-tabs-size-tab-item-padding-horizontal, 12px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px));border-width:var(--kbq-tabs-size-tab-item-focus-outline-width, 2px);border-style:solid;border-color:transparent;border-radius:var(--kbq-tabs-size-tab-item-border-radius, 8px);outline:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.kbq-tab-label.kbq-selected{cursor:default}.kbq-tab-label.cdk-keyboard-focused{z-index:1}.kbq-tab-label.kbq-disabled{pointer-events:none}.kbq-tab-label .kbq-tab-label__content{display:flex;gap:var(--kbq-tabs-size-tab-item-content-gap-horizontal, 4px)}.kbq-tab-label.kbq-tab-label_vertical{justify-content:flex-start}.kbq-tab-label.kbq-tab-label_vertical .kbq-tab-label__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbq-tab-group_stretch-labels .kbq-tab-label{flex-basis:0;flex-grow:1}\n"] }]
42
42
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.ViewportRuler }, { type: i0.NgZone }, { type: i2.Platform }, { type: i3.Directionality, decorators: [{
43
43
  type: Optional
44
44
  }] }, { type: undefined, decorators: [{
@@ -97,7 +97,7 @@ export class KbqTabNav {
97
97
  this.links.notifyOnChanges();
98
98
  }
99
99
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: KbqTabNav, deps: [{ token: 'vertical', attribute: true }], target: i0.ɵɵFactoryTarget.Component }); }
100
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: KbqTabNav, selector: "[kbq-tab-nav-bar]", inputs: { transparent: "transparent", onSurface: "onSurface" }, host: { properties: { "class.kbq-tab-nav-bar_filled": "!transparent", "class.kbq-tab-nav-bar_transparent": "transparent", "class.kbq-tab-nav-bar_on-background": "!onSurface", "class.kbq-tab-nav-bar_on-surface": "onSurface" }, classAttribute: "kbq-tab-nav-bar" }, queries: [{ propertyName: "links", predicate: KbqTabLink }], exportAs: ["kbqTabNavBar", "kbqTabNav"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: [".kbq-tab-link{vertical-align:top;text-decoration:none;-webkit-tap-highlight-color:transparent;position:relative;box-sizing:border-box;display:inline-flex;justify-content:center;align-items:center;text-align:center;white-space:nowrap;cursor:pointer;padding:calc(var(--kbq-tabs-size-tab-item-padding-vertical, 8px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px)) calc(var(--kbq-tabs-size-tab-item-padding-horizontal, 12px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px));border-width:var(--kbq-tabs-size-tab-item-focus-outline-width, 2px);border-style:solid;border-color:transparent;border-radius:var(--kbq-tabs-size-tab-item-border-radius, 8px);outline:none}.kbq-tab-link.kbq-selected{cursor:default}.kbq-tab-link.cdk-keyboard-focused{z-index:1}.kbq-tab-link.kbq-disabled{pointer-events:none}.kbq-tab-link .kbq-tab-label__content{display:flex;gap:var(--kbq-tabs-size-tab-item-content-gap-horizontal, 4px)}.kbq-tab-link.kbq-tab-label_vertical{justify-content:flex-start}.kbq-tab-link.kbq-tab-label_vertical .kbq-tab-label__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbq-tab-link .kbq-tab-group_stretch-labels .kbq-tab-link{flex-basis:0;flex-grow:1}.kbq-tab-nav-bar{display:flex;flex-grow:1;position:relative}.kbq-tab-nav-bar .kbq-tab-group_align-labels-center{justify-content:center}.kbq-tab-nav-bar .kbq-tab-group_align-labels-end{justify-content:flex-end}.kbq-tab-nav-bar.kbq-tab-group_vertical{flex-direction:column;flex-grow:0;gap:var(--kbq-tabs-size-tab-stack-vertical-content-gap-vertical, 8px) 0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
100
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.0", type: KbqTabNav, selector: "[kbq-tab-nav-bar]", inputs: { transparent: "transparent", onSurface: "onSurface" }, host: { properties: { "class.kbq-tab-nav-bar_filled": "!transparent", "class.kbq-tab-nav-bar_transparent": "transparent", "class.kbq-tab-nav-bar_on-background": "!onSurface", "class.kbq-tab-nav-bar_on-surface": "onSurface" }, classAttribute: "kbq-tab-nav-bar" }, queries: [{ propertyName: "links", predicate: KbqTabLink }], exportAs: ["kbqTabNavBar", "kbqTabNav"], ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: [".kbq-tab-link{vertical-align:top;text-decoration:none;-webkit-tap-highlight-color:transparent;position:relative;box-sizing:border-box;display:inline-flex;justify-content:center;align-items:center;text-align:center;white-space:nowrap;cursor:pointer;padding:calc(var(--kbq-tabs-size-tab-item-padding-vertical, 6px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px)) calc(var(--kbq-tabs-size-tab-item-padding-horizontal, 12px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px));border-width:var(--kbq-tabs-size-tab-item-focus-outline-width, 2px);border-style:solid;border-color:transparent;border-radius:var(--kbq-tabs-size-tab-item-border-radius, 8px);outline:none}.kbq-tab-link.kbq-selected{cursor:default}.kbq-tab-link.cdk-keyboard-focused{z-index:1}.kbq-tab-link.kbq-disabled{pointer-events:none}.kbq-tab-link .kbq-tab-label__content{display:flex;gap:var(--kbq-tabs-size-tab-item-content-gap-horizontal, 4px)}.kbq-tab-link.kbq-tab-label_vertical{justify-content:flex-start}.kbq-tab-link.kbq-tab-label_vertical .kbq-tab-label__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbq-tab-link .kbq-tab-group_stretch-labels .kbq-tab-link{flex-basis:0;flex-grow:1}.kbq-tab-nav-bar{display:flex;flex-grow:1;position:relative}.kbq-tab-nav-bar .kbq-tab-group_align-labels-center{justify-content:center}.kbq-tab-nav-bar .kbq-tab-group_align-labels-end{justify-content:flex-end}.kbq-tab-nav-bar.kbq-tab-group_vertical{flex-direction:column;flex-grow:0;gap:var(--kbq-tabs-size-tab-stack-vertical-content-gap-vertical, 8px) 0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
101
101
  }
102
102
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImport: i0, type: KbqTabNav, decorators: [{
103
103
  type: Component,
@@ -107,7 +107,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImpor
107
107
  '[class.kbq-tab-nav-bar_transparent]': 'transparent',
108
108
  '[class.kbq-tab-nav-bar_on-background]': '!onSurface',
109
109
  '[class.kbq-tab-nav-bar_on-surface]': 'onSurface'
110
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".kbq-tab-link{vertical-align:top;text-decoration:none;-webkit-tap-highlight-color:transparent;position:relative;box-sizing:border-box;display:inline-flex;justify-content:center;align-items:center;text-align:center;white-space:nowrap;cursor:pointer;padding:calc(var(--kbq-tabs-size-tab-item-padding-vertical, 8px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px)) calc(var(--kbq-tabs-size-tab-item-padding-horizontal, 12px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px));border-width:var(--kbq-tabs-size-tab-item-focus-outline-width, 2px);border-style:solid;border-color:transparent;border-radius:var(--kbq-tabs-size-tab-item-border-radius, 8px);outline:none}.kbq-tab-link.kbq-selected{cursor:default}.kbq-tab-link.cdk-keyboard-focused{z-index:1}.kbq-tab-link.kbq-disabled{pointer-events:none}.kbq-tab-link .kbq-tab-label__content{display:flex;gap:var(--kbq-tabs-size-tab-item-content-gap-horizontal, 4px)}.kbq-tab-link.kbq-tab-label_vertical{justify-content:flex-start}.kbq-tab-link.kbq-tab-label_vertical .kbq-tab-label__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbq-tab-link .kbq-tab-group_stretch-labels .kbq-tab-link{flex-basis:0;flex-grow:1}.kbq-tab-nav-bar{display:flex;flex-grow:1;position:relative}.kbq-tab-nav-bar .kbq-tab-group_align-labels-center{justify-content:center}.kbq-tab-nav-bar .kbq-tab-group_align-labels-end{justify-content:flex-end}.kbq-tab-nav-bar.kbq-tab-group_vertical{flex-direction:column;flex-grow:0;gap:var(--kbq-tabs-size-tab-stack-vertical-content-gap-vertical, 8px) 0}\n"] }]
110
+ }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".kbq-tab-link{vertical-align:top;text-decoration:none;-webkit-tap-highlight-color:transparent;position:relative;box-sizing:border-box;display:inline-flex;justify-content:center;align-items:center;text-align:center;white-space:nowrap;cursor:pointer;padding:calc(var(--kbq-tabs-size-tab-item-padding-vertical, 6px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px)) calc(var(--kbq-tabs-size-tab-item-padding-horizontal, 12px) - var(--kbq-tabs-size-tab-item-focus-outline-width, 2px));border-width:var(--kbq-tabs-size-tab-item-focus-outline-width, 2px);border-style:solid;border-color:transparent;border-radius:var(--kbq-tabs-size-tab-item-border-radius, 8px);outline:none}.kbq-tab-link.kbq-selected{cursor:default}.kbq-tab-link.cdk-keyboard-focused{z-index:1}.kbq-tab-link.kbq-disabled{pointer-events:none}.kbq-tab-link .kbq-tab-label__content{display:flex;gap:var(--kbq-tabs-size-tab-item-content-gap-horizontal, 4px)}.kbq-tab-link.kbq-tab-label_vertical{justify-content:flex-start}.kbq-tab-link.kbq-tab-label_vertical .kbq-tab-label__content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.kbq-tab-link .kbq-tab-group_stretch-labels .kbq-tab-link{flex-basis:0;flex-grow:1}.kbq-tab-nav-bar{display:flex;flex-grow:1;position:relative}.kbq-tab-nav-bar .kbq-tab-group_align-labels-center{justify-content:center}.kbq-tab-nav-bar .kbq-tab-group_align-labels-end{justify-content:flex-end}.kbq-tab-nav-bar.kbq-tab-group_vertical{flex-direction:column;flex-grow:0;gap:var(--kbq-tabs-size-tab-stack-vertical-content-gap-vertical, 8px) 0}\n"] }]
111
111
  }], ctorParameters: () => [{ type: undefined, decorators: [{
112
112
  type: Attribute,
113
113
  args: ['vertical']