@seniorsistemas/angular-components 19.9.7 → 19.9.8-develop-5d2dfb27

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 (166) hide show
  1. package/card/lib/card/card.component.d.ts +6 -2
  2. package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +0 -1
  3. package/datepicker/README.md +6 -2
  4. package/datepicker/lib/datepicker/date-segment-input.d.ts +7 -1
  5. package/datepicker/lib/datepicker/datepicker.component.d.ts +137 -3
  6. package/dialog/lib/src/dialog/services/dialog.service.d.ts +2 -0
  7. package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +3 -3
  8. package/esm2022/autocomplete/lib/autocomplete/autocomplete.component.mjs +8 -3
  9. package/esm2022/autocomplete/lib/autocomplete/components/autocomplete-chip/autocomplete-chip.component.mjs +4 -3
  10. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.component.mjs +3 -3
  11. package/esm2022/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.component.mjs +4 -2
  12. package/esm2022/button/lib/button/button.component.mjs +3 -3
  13. package/esm2022/card/lib/card/card.component.mjs +13 -5
  14. package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +3 -3
  15. package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +3 -3
  16. package/esm2022/chips/lib/chips/chip-item/chip-item.component.mjs +3 -3
  17. package/esm2022/chips/lib/chips/chips/chips.component.mjs +3 -3
  18. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/sds-light-style.mjs +3 -2
  19. package/esm2022/collapse-link/lib/collapse-link/collapse-link.component.mjs +3 -3
  20. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +14 -9
  21. package/esm2022/datepicker/lib/datepicker/date-segment-input.mjs +19 -2
  22. package/esm2022/datepicker/lib/datepicker/datepicker.component.mjs +405 -38
  23. package/esm2022/dialog/lib/src/dialog/dialog.component.mjs +3 -3
  24. package/esm2022/dialog/lib/src/dialog/services/dialog.service.mjs +13 -1
  25. package/esm2022/drawer/lib/drawer/drawer.component.mjs +3 -3
  26. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +3 -3
  27. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +3 -3
  28. package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +6 -4
  29. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +3 -3
  30. package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +3 -3
  31. package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +3 -3
  32. package/esm2022/editor/lib/editor/editor.component.mjs +3 -3
  33. package/esm2022/editor/lib/editor/toolbar-button/editor-toolbar-button.component.mjs +3 -3
  34. package/esm2022/fieldset/lib/fieldset/fieldset.component.mjs +3 -3
  35. package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +3 -3
  36. package/esm2022/gantt/lib/gantt/components/gantt/bar.mjs +2 -1
  37. package/esm2022/gantt/lib/gantt/gantt.component.mjs +3 -3
  38. package/esm2022/global-search/lib/global-search/global-search.component.mjs +16 -25
  39. package/esm2022/grid-menu/lib/grid-menu/components/grid-menu-item/grid-menu-item.component.mjs +3 -3
  40. package/esm2022/input-text/lib/input-text/input-text.directive.mjs +3 -3
  41. package/esm2022/lib/locale/fallback.mjs +40 -13
  42. package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +3 -3
  43. package/esm2022/object-card/lib/object-card/object-card.component.mjs +3 -3
  44. package/esm2022/paginator/lib/paginator/paginator.component.mjs +3 -3
  45. package/esm2022/pin-code-field/lib/pin-code-field/pin-code-field.component.mjs +3 -3
  46. package/esm2022/radio-button/lib/radio-button/radio-button.component.mjs +4 -10
  47. package/esm2022/rating-scale/lib/rating-scale/rating-scale.component.mjs +3 -3
  48. package/esm2022/select/lib/select/select.component.mjs +3 -3
  49. package/esm2022/select-button/lib/select-button/components/select-button-item/select-button-item.component.mjs +3 -3
  50. package/esm2022/shared/lib/accessibility/datepicker-no-period-tab.directive.mjs +6 -6
  51. package/esm2022/side-sheet/lib/side-sheet/side-sheet.component.mjs +3 -3
  52. package/esm2022/slider/lib/slider/slider.component.mjs +67 -65
  53. package/esm2022/slider/lib/slider/slider.module.mjs +2 -2
  54. package/esm2022/split-button/lib/split-button/split-button.component.mjs +3 -3
  55. package/esm2022/star-rating/star-rating/star-rating.component.mjs +3 -3
  56. package/esm2022/stepper/lib/stepper/stepper.component.mjs +3 -3
  57. package/esm2022/switch/lib/switch/switch.component.mjs +5 -19
  58. package/esm2022/tabs/lib/tabs/tabs.component.mjs +3 -3
  59. package/esm2022/text-area/lib/text-area/text-area.component.mjs +3 -3
  60. package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +10 -3
  61. package/esm2022/thumbnails/lib/thumbnails/components/thumbnail-item/thumbnail-item.component.mjs +3 -3
  62. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +3 -3
  63. package/esm2022/tiered-menu/lib/tiered-menu/services/tiered-menu.global.service.mjs +4 -3
  64. package/esm2022/tile/lib/tile/tile.component.mjs +3 -3
  65. package/esm2022/tree/lib/tree/components/tree-node-item/tree-node-item.component.mjs +20 -3
  66. package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.component.mjs +3 -3
  67. package/fesm2022/seniorsistemas-angular-components-accordion.mjs +2 -2
  68. package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
  69. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs +10 -5
  70. package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs.map +1 -1
  71. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +5 -3
  72. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
  73. package/fesm2022/seniorsistemas-angular-components-button.mjs +2 -2
  74. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  75. package/fesm2022/seniorsistemas-angular-components-card.mjs +12 -4
  76. package/fesm2022/seniorsistemas-angular-components-card.mjs.map +1 -1
  77. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +2 -2
  78. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
  79. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +2 -2
  80. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
  81. package/fesm2022/seniorsistemas-angular-components-chips.mjs +4 -4
  82. package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
  83. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +2 -1
  84. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
  85. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +2 -2
  86. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs.map +1 -1
  87. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +13 -8
  88. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
  89. package/fesm2022/seniorsistemas-angular-components-datepicker.mjs +422 -38
  90. package/fesm2022/seniorsistemas-angular-components-datepicker.mjs.map +1 -1
  91. package/fesm2022/seniorsistemas-angular-components-dialog.mjs +14 -2
  92. package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -1
  93. package/fesm2022/seniorsistemas-angular-components-drawer.mjs +2 -2
  94. package/fesm2022/seniorsistemas-angular-components-drawer.mjs.map +1 -1
  95. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +13 -12
  96. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  97. package/fesm2022/seniorsistemas-angular-components-editor.mjs +4 -4
  98. package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -1
  99. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +2 -2
  100. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
  101. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +2 -2
  102. package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
  103. package/fesm2022/seniorsistemas-angular-components-gantt.mjs +3 -2
  104. package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
  105. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +14 -23
  106. package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
  107. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +2 -2
  108. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs.map +1 -1
  109. package/fesm2022/seniorsistemas-angular-components-input-text.mjs +2 -2
  110. package/fesm2022/seniorsistemas-angular-components-input-text.mjs.map +1 -1
  111. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +2 -2
  112. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
  113. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +2 -2
  114. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  115. package/fesm2022/seniorsistemas-angular-components-paginator.mjs +2 -2
  116. package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
  117. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs +2 -2
  118. package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs.map +1 -1
  119. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs +3 -9
  120. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs.map +1 -1
  121. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +2 -2
  122. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
  123. package/fesm2022/seniorsistemas-angular-components-select-button.mjs +2 -2
  124. package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
  125. package/fesm2022/seniorsistemas-angular-components-select.mjs +2 -2
  126. package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
  127. package/fesm2022/seniorsistemas-angular-components-shared.mjs +5 -5
  128. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  129. package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs +2 -2
  130. package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs.map +1 -1
  131. package/fesm2022/seniorsistemas-angular-components-slider.mjs +67 -65
  132. package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
  133. package/fesm2022/seniorsistemas-angular-components-split-button.mjs +2 -2
  134. package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
  135. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +2 -2
  136. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
  137. package/fesm2022/seniorsistemas-angular-components-stepper.mjs +2 -2
  138. package/fesm2022/seniorsistemas-angular-components-stepper.mjs.map +1 -1
  139. package/fesm2022/seniorsistemas-angular-components-switch.mjs +4 -18
  140. package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
  141. package/fesm2022/seniorsistemas-angular-components-tabs.mjs +2 -2
  142. package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -1
  143. package/fesm2022/seniorsistemas-angular-components-text-area.mjs +2 -2
  144. package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
  145. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +9 -2
  146. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
  147. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +2 -2
  148. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs.map +1 -1
  149. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +5 -4
  150. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  151. package/fesm2022/seniorsistemas-angular-components-tile.mjs +2 -2
  152. package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
  153. package/fesm2022/seniorsistemas-angular-components-tree.mjs +20 -3
  154. package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
  155. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +2 -2
  156. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
  157. package/fesm2022/seniorsistemas-angular-components.mjs +39 -12
  158. package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
  159. package/global-search/lib/global-search/global-search.component.d.ts +7 -3
  160. package/package.json +1 -1
  161. package/radio-button/lib/radio-button/radio-button.component.d.ts +0 -1
  162. package/slider/lib/slider/slider.component.d.ts +25 -7
  163. package/styles.css +5 -0
  164. package/switch/lib/switch/switch.component.d.ts +0 -2
  165. package/thumbnail/lib/thumbnail/thumbnail.component.d.ts +1 -0
  166. package/tree/lib/tree/components/tree-node-item/tree-node-item.component.d.ts +4 -0
@@ -8,6 +8,7 @@ import * as i1 from "@angular/forms";
8
8
  export class TreeNodeItemComponent {
9
9
  cdr = inject(ChangeDetectorRef);
10
10
  translateService = inject(TranslateService);
11
+ elementRef = inject(ElementRef);
11
12
  ariaLevel = input(0);
12
13
  showCheckbox = input(false);
13
14
  treeNodeItem;
@@ -35,6 +36,22 @@ export class TreeNodeItemComponent {
35
36
  this.toggleExpanded(this.treeNodeItem);
36
37
  }
37
38
  }
39
+ focusNextNode(event) {
40
+ this.moveFocus(event, 1);
41
+ }
42
+ focusPreviousNode(event) {
43
+ this.moveFocus(event, -1);
44
+ }
45
+ moveFocus(event, offset) {
46
+ const root = this.elementRef.nativeElement.closest('.tree') || document;
47
+ const items = Array.from(root.querySelectorAll('.tree-node-item'));
48
+ const currentIndex = items.indexOf(document.activeElement);
49
+ if (currentIndex === -1) {
50
+ return;
51
+ }
52
+ event.preventDefault();
53
+ items[currentIndex + offset]?.focus();
54
+ }
38
55
  onCheckboxEnter(node) {
39
56
  const newState = node.checked === true ? false : true;
40
57
  node.checked = newState;
@@ -100,7 +117,7 @@ export class TreeNodeItemComponent {
100
117
  this.treeNodeEdit.emit(payload);
101
118
  }
102
119
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TreeNodeItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
103
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TreeNodeItemComponent, isStandalone: true, selector: "s-tree-node-item", inputs: { ariaLevel: { classPropertyName: "ariaLevel", publicName: "ariaLevel", isSignal: true, isRequired: false, transformFunction: null }, showCheckbox: { classPropertyName: "showCheckbox", publicName: "showCheckbox", isSignal: true, isRequired: false, transformFunction: null }, treeNodeItem: { classPropertyName: "treeNodeItem", publicName: "treeNodeItem", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { treeNodeItemClicked: "treeNodeItemClicked", treeNodeEdit: "treeNodeEdit", nodeExpanded: "nodeExpanded", nodeCollapsed: "nodeCollapsed" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true, read: ElementRef }], ngImport: i0, template: "@if (treeNodeItem) {\n <div\n class=\"tree-node-item\"\n role=\"treeitem\"\n [class.tree-node-item-selected]=\"treeNodeItem.checked\"\n [class.selectable]=\"hasChildren\"\n [attr.aria-expanded]=\"hasChildren ? treeNodeItem.isExpanded : null\"\n [attr.aria-selected]=\"treeNodeItem.checked === true\"\n [attr.aria-label]=\"treeNodeItem.label\"\n [attr.aria-level]=\"ariaLevel()\"\n tabindex=\"0\"\n (keydown.enter)=\"handleTreeNodeItemClick($event)\"\n (keydown.arrowRight)=\"expandNode()\"\n (keydown.arrowLeft)=\"collapseNode()\"\n >\n @if (hasChildren || treeNodeItem.leaf === true) {\n <div\n class=\"arrow\"\n (click)=\"toggleExpanded(treeNodeItem)\"\n >\n @if (!treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.collapsedIcon || 'fas fa-chevron-right'\"></i>\n }\n @if (treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.expandedIcon || 'fas fa-chevron-down'\"></i>\n }\n </div>\n }\n\n <div\n class=\"tree-node-item-text\"\n (click)=\"handleTreeNodeItemClick($event)\"\n >\n @if (treeNodeItem.icon || treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-icon\">\n @if (treeNodeItem.icon && !treeNodeItem.isEditing) {\n <i [class]=\"treeNodeItem.icon\"></i>\n }\n @if (treeNodeItem.isEditing) {\n <i\n class=\"fas fa-edit edit\"\n (click)=\"saveEdit($event)\"\n ></i>\n }\n </span>\n }\n\n @if (showCheckbox() && !treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"treeNodeItem.checked === true\"\n [indeterminate]=\"treeNodeItem.checked === null\"\n [attr.aria-checked]=\"treeNodeItem.checked === null ? 'mixed' : treeNodeItem.checked\"\n [attr.aria-label]=\"ariaLabel\"\n role=\"checkbox\"\n tabindex=\"0\"\n (keydown.enter)=\"onCheckboxEnter(treeNodeItem)\"\n />\n </span>\n }\n\n <span class=\"tree-node-item-text-label\">\n @if (treeNodeItem.isEditing) {\n <input\n #input\n type=\"text\"\n sInputText\n class=\"tree-node-item-text-input\"\n [(ngModel)]=\"treeNodeItem.editNewValue\"\n (keydown.enter)=\"saveEdit($event)\"\n (keydown.escape)=\"cancelEdit($event)\"\n (click)=\"$event.stopPropagation()\"\n aria-label=\"Editar nome do item\"\n aria-live=\"polite\"\n />\n } @else if (!treeNodeItem.isEditing) {\n {{ treeNodeItem.label }}\n }\n </span>\n\n @if (editable) {\n <span class=\"tree-node-item-text-editable\">\n <i\n class=\"fas fa-pencil-alt\"\n (click)=\"toggleEditing($event)\"\n aria-label=\"Editar item\"\n tabindex=\"0\"\n ></i>\n </span>\n }\n </div>\n </div>\n}\n\n@if (hasChildren && treeNodeItem.isExpanded) {\n <div\n @fadeExpand\n class=\"child\"\n role=\"group\"\n @childrenAnimation\n >\n @for (child of treeNodeItem.children; track $index) {\n <s-tree-node-item\n [showCheckbox]=\"showCheckbox()\"\n [treeNodeItem]=\"child\"\n [ariaLevel]=\"ariaLevel() + 1\"\n (treeNodeItemClicked)=\"handleTreeNodeItemClicked($event)\"\n (treeNodeEdit)=\"treeNodeEditChildEvent($event)\"\n (nodeExpanded)=\"nodeExpanded.emit($event)\"\n (nodeCollapsed)=\"nodeCollapsed.emit($event)\"\n class=\"child-item\"\n />\n }\n </div>\n}\n\n", styles: [".tree-node-item{width:100%;display:flex;cursor:pointer}.tree-node-item .arrow{padding:3px 9px;display:flex;align-items:center;justify-content:center}.tree-node-item-text{flex:1;display:flex;padding:3px 0;align-items:center}.tree-node-item-text:hover{background:#f1f7f8}.tree-node-item-text-icon{display:flex;align-items:center;justify-content:center;padding-right:9px}.tree-node-item-text-icon .edit{color:#428bca}.tree-node-item-text-label{color:#212533;font-family:Open Sans;font-size:14px;font-style:normal;font-weight:400;line-height:150%;display:flex;flex:1}.tree-node-item-text-checkbox{padding-right:9px;display:flex}.tree-node-item-text-checkbox input[type=checkbox]{accent-color:#428bca;width:14px;height:14px}.tree-node-item-text-editable{display:flex;align-items:center;justify-content:flex-end}.tree-node-item-text-editable i{padding:9px}.tree-node-item-text-input{flex:1}.tree-node-item.selectable .tree-node-item-text-label{font-family:Open Sans;font-size:14px;font-style:normal;font-weight:700}.tree-node-item.selectable *{cursor:pointer}.tree-node-item-selected .tree-node-item-text{background:#d5e8ec}.child{overflow:hidden;padding-left:2.2em;display:flex;flex-direction:column;gap:5px}.child-item:first-child{padding-top:5px}\n"], dependencies: [{ kind: "component", type: TreeNodeItemComponent, selector: "s-tree-node-item", inputs: ["ariaLevel", "showCheckbox", "treeNodeItem"], outputs: ["treeNodeItemClicked", "treeNodeEdit", "nodeExpanded", "nodeCollapsed"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: InputTextDirective, selector: "input[sInputText]" }], animations: [
120
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TreeNodeItemComponent, isStandalone: true, selector: "s-tree-node-item", inputs: { ariaLevel: { classPropertyName: "ariaLevel", publicName: "ariaLevel", isSignal: true, isRequired: false, transformFunction: null }, showCheckbox: { classPropertyName: "showCheckbox", publicName: "showCheckbox", isSignal: true, isRequired: false, transformFunction: null }, treeNodeItem: { classPropertyName: "treeNodeItem", publicName: "treeNodeItem", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { treeNodeItemClicked: "treeNodeItemClicked", treeNodeEdit: "treeNodeEdit", nodeExpanded: "nodeExpanded", nodeCollapsed: "nodeCollapsed" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true, read: ElementRef }], ngImport: i0, template: "@if (treeNodeItem) {\n <div\n class=\"tree-node-item\"\n role=\"treeitem\"\n [class.tree-node-item-selected]=\"treeNodeItem.checked\"\n [class.selectable]=\"hasChildren\"\n [attr.aria-expanded]=\"hasChildren ? treeNodeItem.isExpanded : null\"\n [attr.aria-selected]=\"treeNodeItem.checked === true\"\n [attr.aria-label]=\"treeNodeItem.label\"\n [attr.aria-level]=\"ariaLevel()\"\n tabindex=\"0\"\n (keydown.enter)=\"handleTreeNodeItemClick($event)\"\n (keydown.arrowRight)=\"expandNode()\"\n (keydown.arrowLeft)=\"collapseNode()\"\n (keydown.arrowDown)=\"focusNextNode($event)\"\n (keydown.arrowUp)=\"focusPreviousNode($event)\"\n >\n @if (hasChildren || treeNodeItem.leaf === true) {\n <div\n class=\"arrow\"\n (click)=\"toggleExpanded(treeNodeItem)\"\n >\n @if (!treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.collapsedIcon || 'fas fa-chevron-right'\"></i>\n }\n @if (treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.expandedIcon || 'fas fa-chevron-down'\"></i>\n }\n </div>\n }\n\n <div\n class=\"tree-node-item-text\"\n (click)=\"handleTreeNodeItemClick($event)\"\n >\n @if (treeNodeItem.icon || treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-icon\">\n @if (treeNodeItem.icon && !treeNodeItem.isEditing) {\n <i [class]=\"treeNodeItem.icon\"></i>\n }\n @if (treeNodeItem.isEditing) {\n <i\n class=\"fas fa-edit edit\"\n (click)=\"saveEdit($event)\"\n ></i>\n }\n </span>\n }\n\n @if (showCheckbox() && !treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"treeNodeItem.checked === true\"\n [indeterminate]=\"treeNodeItem.checked === null\"\n [attr.aria-checked]=\"treeNodeItem.checked === null ? 'mixed' : treeNodeItem.checked\"\n [attr.aria-label]=\"ariaLabel\"\n role=\"checkbox\"\n tabindex=\"0\"\n (keydown.enter)=\"onCheckboxEnter(treeNodeItem)\"\n />\n </span>\n }\n\n <span class=\"tree-node-item-text-label\">\n @if (treeNodeItem.isEditing) {\n <input\n #input\n type=\"text\"\n sInputText\n class=\"tree-node-item-text-input\"\n [(ngModel)]=\"treeNodeItem.editNewValue\"\n (keydown.enter)=\"saveEdit($event)\"\n (keydown.escape)=\"cancelEdit($event)\"\n (click)=\"$event.stopPropagation()\"\n aria-label=\"Editar nome do item\"\n aria-live=\"polite\"\n />\n } @else if (!treeNodeItem.isEditing) {\n {{ treeNodeItem.label }}\n }\n </span>\n\n @if (editable) {\n <span class=\"tree-node-item-text-editable\">\n <i\n class=\"fas fa-pencil-alt\"\n (click)=\"toggleEditing($event)\"\n aria-label=\"Editar item\"\n tabindex=\"0\"\n ></i>\n </span>\n }\n </div>\n </div>\n}\n\n@if (hasChildren && treeNodeItem.isExpanded) {\n <div\n @fadeExpand\n class=\"child\"\n role=\"group\"\n @childrenAnimation\n >\n @for (child of treeNodeItem.children; track $index) {\n <s-tree-node-item\n [showCheckbox]=\"showCheckbox()\"\n [treeNodeItem]=\"child\"\n [ariaLevel]=\"ariaLevel() + 1\"\n (treeNodeItemClicked)=\"handleTreeNodeItemClicked($event)\"\n (treeNodeEdit)=\"treeNodeEditChildEvent($event)\"\n (nodeExpanded)=\"nodeExpanded.emit($event)\"\n (nodeCollapsed)=\"nodeCollapsed.emit($event)\"\n class=\"child-item\"\n />\n }\n </div>\n}\n\n", styles: [".tree-node-item{width:100%;display:flex;cursor:pointer}.tree-node-item:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.tree-node-item .arrow{padding:3px 9px;display:flex;align-items:center;justify-content:center}.tree-node-item-text{flex:1;display:flex;padding:3px 0;align-items:center}.tree-node-item-text:hover{background:#f1f7f8}.tree-node-item-text-icon{display:flex;align-items:center;justify-content:center;padding-right:9px}.tree-node-item-text-icon .edit{color:#428bca}.tree-node-item-text-label{color:#212533;font-family:Open Sans;font-size:14px;font-style:normal;font-weight:400;line-height:150%;display:flex;flex:1}.tree-node-item-text-checkbox{padding-right:9px;display:flex}.tree-node-item-text-checkbox input[type=checkbox]{accent-color:#428bca;width:14px;height:14px}.tree-node-item-text-checkbox input[type=checkbox]:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.tree-node-item-text-editable{display:flex;align-items:center;justify-content:flex-end}.tree-node-item-text-editable i{padding:9px;border-radius:50%}.tree-node-item-text-editable i:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.tree-node-item-text-input{flex:1}.tree-node-item.selectable .tree-node-item-text-label{font-family:Open Sans;font-size:14px;font-style:normal;font-weight:700}.tree-node-item.selectable *{cursor:pointer}.tree-node-item-selected .tree-node-item-text{background:#d5e8ec}.child{overflow:hidden;padding-left:2.2em;padding-right:5px;display:flex;flex-direction:column;gap:5px}.child-item:first-child{padding-top:5px}.child-item:last-child{padding-bottom:5px}\n"], dependencies: [{ kind: "component", type: TreeNodeItemComponent, selector: "s-tree-node-item", inputs: ["ariaLevel", "showCheckbox", "treeNodeItem"], outputs: ["treeNodeItemClicked", "treeNodeEdit", "nodeExpanded", "nodeCollapsed"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: InputTextDirective, selector: "input[sInputText]" }], animations: [
104
121
  trigger('fadeExpand', [
105
122
  transition(':enter', [
106
123
  style({ height: '0px', opacity: 0, overflow: 'hidden' }),
@@ -136,7 +153,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
136
153
  ], { optional: true }),
137
154
  ]),
138
155
  ]),
139
- ], standalone: true, imports: [FormsModule, InputTextDirective], template: "@if (treeNodeItem) {\n <div\n class=\"tree-node-item\"\n role=\"treeitem\"\n [class.tree-node-item-selected]=\"treeNodeItem.checked\"\n [class.selectable]=\"hasChildren\"\n [attr.aria-expanded]=\"hasChildren ? treeNodeItem.isExpanded : null\"\n [attr.aria-selected]=\"treeNodeItem.checked === true\"\n [attr.aria-label]=\"treeNodeItem.label\"\n [attr.aria-level]=\"ariaLevel()\"\n tabindex=\"0\"\n (keydown.enter)=\"handleTreeNodeItemClick($event)\"\n (keydown.arrowRight)=\"expandNode()\"\n (keydown.arrowLeft)=\"collapseNode()\"\n >\n @if (hasChildren || treeNodeItem.leaf === true) {\n <div\n class=\"arrow\"\n (click)=\"toggleExpanded(treeNodeItem)\"\n >\n @if (!treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.collapsedIcon || 'fas fa-chevron-right'\"></i>\n }\n @if (treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.expandedIcon || 'fas fa-chevron-down'\"></i>\n }\n </div>\n }\n\n <div\n class=\"tree-node-item-text\"\n (click)=\"handleTreeNodeItemClick($event)\"\n >\n @if (treeNodeItem.icon || treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-icon\">\n @if (treeNodeItem.icon && !treeNodeItem.isEditing) {\n <i [class]=\"treeNodeItem.icon\"></i>\n }\n @if (treeNodeItem.isEditing) {\n <i\n class=\"fas fa-edit edit\"\n (click)=\"saveEdit($event)\"\n ></i>\n }\n </span>\n }\n\n @if (showCheckbox() && !treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"treeNodeItem.checked === true\"\n [indeterminate]=\"treeNodeItem.checked === null\"\n [attr.aria-checked]=\"treeNodeItem.checked === null ? 'mixed' : treeNodeItem.checked\"\n [attr.aria-label]=\"ariaLabel\"\n role=\"checkbox\"\n tabindex=\"0\"\n (keydown.enter)=\"onCheckboxEnter(treeNodeItem)\"\n />\n </span>\n }\n\n <span class=\"tree-node-item-text-label\">\n @if (treeNodeItem.isEditing) {\n <input\n #input\n type=\"text\"\n sInputText\n class=\"tree-node-item-text-input\"\n [(ngModel)]=\"treeNodeItem.editNewValue\"\n (keydown.enter)=\"saveEdit($event)\"\n (keydown.escape)=\"cancelEdit($event)\"\n (click)=\"$event.stopPropagation()\"\n aria-label=\"Editar nome do item\"\n aria-live=\"polite\"\n />\n } @else if (!treeNodeItem.isEditing) {\n {{ treeNodeItem.label }}\n }\n </span>\n\n @if (editable) {\n <span class=\"tree-node-item-text-editable\">\n <i\n class=\"fas fa-pencil-alt\"\n (click)=\"toggleEditing($event)\"\n aria-label=\"Editar item\"\n tabindex=\"0\"\n ></i>\n </span>\n }\n </div>\n </div>\n}\n\n@if (hasChildren && treeNodeItem.isExpanded) {\n <div\n @fadeExpand\n class=\"child\"\n role=\"group\"\n @childrenAnimation\n >\n @for (child of treeNodeItem.children; track $index) {\n <s-tree-node-item\n [showCheckbox]=\"showCheckbox()\"\n [treeNodeItem]=\"child\"\n [ariaLevel]=\"ariaLevel() + 1\"\n (treeNodeItemClicked)=\"handleTreeNodeItemClicked($event)\"\n (treeNodeEdit)=\"treeNodeEditChildEvent($event)\"\n (nodeExpanded)=\"nodeExpanded.emit($event)\"\n (nodeCollapsed)=\"nodeCollapsed.emit($event)\"\n class=\"child-item\"\n />\n }\n </div>\n}\n\n", styles: [".tree-node-item{width:100%;display:flex;cursor:pointer}.tree-node-item .arrow{padding:3px 9px;display:flex;align-items:center;justify-content:center}.tree-node-item-text{flex:1;display:flex;padding:3px 0;align-items:center}.tree-node-item-text:hover{background:#f1f7f8}.tree-node-item-text-icon{display:flex;align-items:center;justify-content:center;padding-right:9px}.tree-node-item-text-icon .edit{color:#428bca}.tree-node-item-text-label{color:#212533;font-family:Open Sans;font-size:14px;font-style:normal;font-weight:400;line-height:150%;display:flex;flex:1}.tree-node-item-text-checkbox{padding-right:9px;display:flex}.tree-node-item-text-checkbox input[type=checkbox]{accent-color:#428bca;width:14px;height:14px}.tree-node-item-text-editable{display:flex;align-items:center;justify-content:flex-end}.tree-node-item-text-editable i{padding:9px}.tree-node-item-text-input{flex:1}.tree-node-item.selectable .tree-node-item-text-label{font-family:Open Sans;font-size:14px;font-style:normal;font-weight:700}.tree-node-item.selectable *{cursor:pointer}.tree-node-item-selected .tree-node-item-text{background:#d5e8ec}.child{overflow:hidden;padding-left:2.2em;display:flex;flex-direction:column;gap:5px}.child-item:first-child{padding-top:5px}\n"] }]
156
+ ], standalone: true, imports: [FormsModule, InputTextDirective], template: "@if (treeNodeItem) {\n <div\n class=\"tree-node-item\"\n role=\"treeitem\"\n [class.tree-node-item-selected]=\"treeNodeItem.checked\"\n [class.selectable]=\"hasChildren\"\n [attr.aria-expanded]=\"hasChildren ? treeNodeItem.isExpanded : null\"\n [attr.aria-selected]=\"treeNodeItem.checked === true\"\n [attr.aria-label]=\"treeNodeItem.label\"\n [attr.aria-level]=\"ariaLevel()\"\n tabindex=\"0\"\n (keydown.enter)=\"handleTreeNodeItemClick($event)\"\n (keydown.arrowRight)=\"expandNode()\"\n (keydown.arrowLeft)=\"collapseNode()\"\n (keydown.arrowDown)=\"focusNextNode($event)\"\n (keydown.arrowUp)=\"focusPreviousNode($event)\"\n >\n @if (hasChildren || treeNodeItem.leaf === true) {\n <div\n class=\"arrow\"\n (click)=\"toggleExpanded(treeNodeItem)\"\n >\n @if (!treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.collapsedIcon || 'fas fa-chevron-right'\"></i>\n }\n @if (treeNodeItem.isExpanded) {\n <i [class]=\"treeNodeItem.expandedIcon || 'fas fa-chevron-down'\"></i>\n }\n </div>\n }\n\n <div\n class=\"tree-node-item-text\"\n (click)=\"handleTreeNodeItemClick($event)\"\n >\n @if (treeNodeItem.icon || treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-icon\">\n @if (treeNodeItem.icon && !treeNodeItem.isEditing) {\n <i [class]=\"treeNodeItem.icon\"></i>\n }\n @if (treeNodeItem.isEditing) {\n <i\n class=\"fas fa-edit edit\"\n (click)=\"saveEdit($event)\"\n ></i>\n }\n </span>\n }\n\n @if (showCheckbox() && !treeNodeItem.isEditing) {\n <span class=\"tree-node-item-text-checkbox\">\n <input\n type=\"checkbox\"\n [checked]=\"treeNodeItem.checked === true\"\n [indeterminate]=\"treeNodeItem.checked === null\"\n [attr.aria-checked]=\"treeNodeItem.checked === null ? 'mixed' : treeNodeItem.checked\"\n [attr.aria-label]=\"ariaLabel\"\n role=\"checkbox\"\n tabindex=\"0\"\n (keydown.enter)=\"onCheckboxEnter(treeNodeItem)\"\n />\n </span>\n }\n\n <span class=\"tree-node-item-text-label\">\n @if (treeNodeItem.isEditing) {\n <input\n #input\n type=\"text\"\n sInputText\n class=\"tree-node-item-text-input\"\n [(ngModel)]=\"treeNodeItem.editNewValue\"\n (keydown.enter)=\"saveEdit($event)\"\n (keydown.escape)=\"cancelEdit($event)\"\n (click)=\"$event.stopPropagation()\"\n aria-label=\"Editar nome do item\"\n aria-live=\"polite\"\n />\n } @else if (!treeNodeItem.isEditing) {\n {{ treeNodeItem.label }}\n }\n </span>\n\n @if (editable) {\n <span class=\"tree-node-item-text-editable\">\n <i\n class=\"fas fa-pencil-alt\"\n (click)=\"toggleEditing($event)\"\n aria-label=\"Editar item\"\n tabindex=\"0\"\n ></i>\n </span>\n }\n </div>\n </div>\n}\n\n@if (hasChildren && treeNodeItem.isExpanded) {\n <div\n @fadeExpand\n class=\"child\"\n role=\"group\"\n @childrenAnimation\n >\n @for (child of treeNodeItem.children; track $index) {\n <s-tree-node-item\n [showCheckbox]=\"showCheckbox()\"\n [treeNodeItem]=\"child\"\n [ariaLevel]=\"ariaLevel() + 1\"\n (treeNodeItemClicked)=\"handleTreeNodeItemClicked($event)\"\n (treeNodeEdit)=\"treeNodeEditChildEvent($event)\"\n (nodeExpanded)=\"nodeExpanded.emit($event)\"\n (nodeCollapsed)=\"nodeCollapsed.emit($event)\"\n class=\"child-item\"\n />\n }\n </div>\n}\n\n", styles: [".tree-node-item{width:100%;display:flex;cursor:pointer}.tree-node-item:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.tree-node-item .arrow{padding:3px 9px;display:flex;align-items:center;justify-content:center}.tree-node-item-text{flex:1;display:flex;padding:3px 0;align-items:center}.tree-node-item-text:hover{background:#f1f7f8}.tree-node-item-text-icon{display:flex;align-items:center;justify-content:center;padding-right:9px}.tree-node-item-text-icon .edit{color:#428bca}.tree-node-item-text-label{color:#212533;font-family:Open Sans;font-size:14px;font-style:normal;font-weight:400;line-height:150%;display:flex;flex:1}.tree-node-item-text-checkbox{padding-right:9px;display:flex}.tree-node-item-text-checkbox input[type=checkbox]{accent-color:#428bca;width:14px;height:14px}.tree-node-item-text-checkbox input[type=checkbox]:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.tree-node-item-text-editable{display:flex;align-items:center;justify-content:flex-end}.tree-node-item-text-editable i{padding:9px;border-radius:50%}.tree-node-item-text-editable i:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.tree-node-item-text-input{flex:1}.tree-node-item.selectable .tree-node-item-text-label{font-family:Open Sans;font-size:14px;font-style:normal;font-weight:700}.tree-node-item.selectable *{cursor:pointer}.tree-node-item-selected .tree-node-item-text{background:#d5e8ec}.child{overflow:hidden;padding-left:2.2em;padding-right:5px;display:flex;flex-direction:column;gap:5px}.child-item:first-child{padding-top:5px}.child-item:last-child{padding-bottom:5px}\n"] }]
140
157
  }], propDecorators: { treeNodeItem: [{
141
158
  type: Input
142
159
  }], treeNodeItemClicked: [{
@@ -151,4 +168,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
151
168
  type: ViewChild,
152
169
  args: ['input', { read: ElementRef }]
153
170
  }] } });
154
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3RyZWUvc3JjL2xpYi90cmVlL2NvbXBvbmVudHMvdHJlZS1ub2RlLWl0ZW0vdHJlZS1ub2RlLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3RyZWUvc3JjL2xpYi90cmVlL2NvbXBvbmVudHMvdHJlZS1ub2RlLWl0ZW0vdHJlZS1ub2RlLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUYsT0FBTyxFQUNILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQzs7O0FBOEJuRixNQUFNLE9BQU8scUJBQXFCO0lBQ2IsR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2hDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRXBELFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIsWUFBWSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixZ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QUUsQ0FBQztvQ0FDckQsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQ0FDOUYsRUFDRCxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FDckI7NkJBQ0osQ0FBQzt5QkFDTCxDQUFDO3FCQUNMLGNBQ1csSUFBSSxXQUNQLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDOzhCQVFqQyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFFbUMsS0FBSztzQkFBOUMsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgcXVlcnksIHN0YWdnZXIsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE91dHB1dCxcclxuICAgIFZpZXdDaGlsZCxcclxuICAgIGlucHV0LFxyXG4gICAgaW5qZWN0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBJbnRlcm5hbFRyZWVOb2RlSXRlbSwgVHJlZU5vZGVFZGl0IH0gZnJvbSAnLi4vLi4vTW9kZWxzL3RyZWUubW9kZWxzJztcclxuaW1wb3J0IHsgSW5wdXRUZXh0RGlyZWN0aXZlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9pbnB1dC10ZXh0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzLXRyZWUtbm9kZS1pdGVtJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi90cmVlLW5vZGUtaXRlbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi90cmVlLW5vZGUtaXRlbS5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgYW5pbWF0aW9uczogW1xyXG4gICAgICAgIHRyaWdnZXIoJ2ZhZGVFeHBhbmQnLCBbXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcclxuICAgICAgICAgICAgICAgIHN0eWxlKHsgaGVpZ2h0OiAnMHB4Jywgb3BhY2l0eTogMCwgb3ZlcmZsb3c6ICdoaWRkZW4nIH0pLFxyXG4gICAgICAgICAgICAgICAgYW5pbWF0ZSgnMjAwbXMgZWFzZS1vdXQnLCBzdHlsZSh7IGhlaWdodDogJyonLCBvcGFjaXR5OiAxIH0pKSxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFthbmltYXRlKCcxNTBtcyBlYXNlLWluJywgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBvcGFjaXR5OiAwIH0pKV0pLFxyXG4gICAgICAgIF0pLFxyXG4gICAgICAgIHRyaWdnZXIoJ2NoaWxkcmVuQW5pbWF0aW9uJywgW1xyXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXHJcbiAgICAgICAgICAgICAgICBxdWVyeShcclxuICAgICAgICAgICAgICAgICAgICAnOmVudGVyJyxcclxuICAgICAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMTBweCknIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFnZ2VyKDYwLCBbYW5pbWF0ZSgnMjAwbXMgZWFzZS1vdXQnLCBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknIH0pKV0pLFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBvcHRpb25hbDogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgXSksXHJcbiAgICAgICAgXSksXHJcbiAgICBdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtGb3Jtc01vZHVsZSwgSW5wdXRUZXh0RGlyZWN0aXZlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRyZWVOb2RlSXRlbUNvbXBvbmVudCB7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XHJcblxyXG4gICAgcmVhZG9ubHkgYXJpYUxldmVsID0gaW5wdXQoMCk7XHJcbiAgICByZWFkb25seSBzaG93Q2hlY2tib3ggPSBpbnB1dChmYWxzZSk7XHJcbiAgICBASW5wdXQoKSB0cmVlTm9kZUl0ZW0hOiBJbnRlcm5hbFRyZWVOb2RlSXRlbTtcclxuICAgIEBPdXRwdXQoKSB0cmVlTm9kZUl0ZW1DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjx7IGl0ZW06IEludGVybmFsVHJlZU5vZGVJdGVtOyBldmVudDogRXZlbnQgfT4oKTtcclxuICAgIEBPdXRwdXQoKSB0cmVlTm9kZUVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVOb2RlRWRpdD4oKTtcclxuICAgIEBPdXRwdXQoKSBub2RlRXhwYW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEludGVybmFsVHJlZU5vZGVJdGVtPigpO1xyXG4gICAgQE91dHB1dCgpIG5vZGVDb2xsYXBzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEludGVybmFsVHJlZU5vZGVJdGVtPigpO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGlucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuXHJcbiAgICBnZXQgaGFzQ2hpbGRyZW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhKHRoaXMudHJlZU5vZGVJdGVtPy5jaGlsZHJlbiAmJiB0aGlzLnRyZWVOb2RlSXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZWRpdGFibGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJlZU5vZGVJdGVtPy5lZGl0YWJsZSB8fCBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYXJpYUxhYmVsKCkge1xyXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnNlbGVjdCcpfSAke3RoaXMudHJlZU5vZGVJdGVtLmxhYmVsfWA7XHJcbiAgICB9XHJcblxyXG4gICAgZXhwYW5kTm9kZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNDaGlsZHJlbiAmJiAhdGhpcy50cmVlTm9kZUl0ZW0uaXNFeHBhbmRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUV4cGFuZGVkKHRoaXMudHJlZU5vZGVJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29sbGFwc2VOb2RlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0NoaWxkcmVuICYmIHRoaXMudHJlZU5vZGVJdGVtLmlzRXhwYW5kZWQpIHtcclxuICAgICAgICAgICAgdGhpcy50b2dnbGVFeHBhbmRlZCh0aGlzLnRyZWVOb2RlSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hlY2tib3hFbnRlcihub2RlOiBJbnRlcm5hbFRyZWVOb2RlSXRlbSkge1xyXG4gICAgICAgIGNvbnN0IG5ld1N0YXRlID0gbm9kZS5jaGVja2VkID09PSB0cnVlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgIG5vZGUuY2hlY2tlZCA9IG5ld1N0YXRlO1xyXG4gICAgICAgIHRoaXMudHJlZU5vZGVJdGVtQ2xpY2tlZC5lbWl0KHsgaXRlbTogbm9kZSwgZXZlbnQ6IG5ldyBLZXlib2FyZEV2ZW50KCdrZXlkb3duJywgeyBrZXk6ICdFbnRlcicgfSkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlVHJlZU5vZGVJdGVtQ2xpY2soZXZlbnQ6IEV2ZW50LCB0cmVlTm9kZUl0ZW0/OiBJbnRlcm5hbFRyZWVOb2RlSXRlbSkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0cmVlTm9kZUl0ZW0gfHwgdGhpcy50cmVlTm9kZUl0ZW07XHJcbiAgICAgICAgdGhpcy50cmVlTm9kZUl0ZW1DbGlja2VkLmVtaXQoeyBpdGVtLCBldmVudCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVUcmVlTm9kZUl0ZW1DbGlja2VkKHsgZXZlbnQsIGl0ZW0gfTogeyBldmVudDogRXZlbnQ7IGl0ZW06IEludGVybmFsVHJlZU5vZGVJdGVtIH0pIHtcclxuICAgICAgICBpZiAoaXRlbS5pc0VkaXRpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmhhbmRsZVRyZWVOb2RlSXRlbUNsaWNrKGV2ZW50LCBpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVFeHBhbmRlZCh0cmVlTm9kZUl0ZW06IEludGVybmFsVHJlZU5vZGVJdGVtKSB7XHJcbiAgICAgICAgdHJlZU5vZGVJdGVtLmlzRXhwYW5kZWQgPSAhdHJlZU5vZGVJdGVtLmlzRXhwYW5kZWQ7XHJcbiAgICAgICAgaWYgKHRyZWVOb2RlSXRlbS5pc0V4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZUV4cGFuZGVkLmVtaXQodHJlZU5vZGVJdGVtKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm5vZGVDb2xsYXBzZWQuZW1pdCh0cmVlTm9kZUl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVFZGl0aW5nKCRldmVudDogRXZlbnQpIHtcclxuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgdGhpcy50cmVlTm9kZUl0ZW0uaXNFZGl0aW5nID0gIXRoaXMudHJlZU5vZGVJdGVtLmlzRWRpdGluZztcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMudHJlZU5vZGVJdGVtLmlzRWRpdGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnRyZWVOb2RlSXRlbS5lZGl0TmV3VmFsdWUgPSB0aGlzLnRyZWVOb2RlSXRlbS5sYWJlbDtcclxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0Py5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgICAgICBpbnB1dD8uZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2FuY2VsRWRpdCgkZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIHRoaXMudHJlZU5vZGVJdGVtLmlzRWRpdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudHJlZU5vZGVJdGVtLmVkaXROZXdWYWx1ZSA9ICcnO1xyXG4gICAgICAgIHRoaXMudHJlZU5vZGVJdGVtLmVkaXRQcmV2aW91c1ZhbHVlID0gJyc7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVFZGl0KCRldmVudDogRXZlbnQpIHtcclxuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgdGhpcy50cmVlTm9kZUl0ZW0uaXNFZGl0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCF0aGlzLnRyZWVOb2RlSXRlbS5lZGl0TmV3VmFsdWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmVlTm9kZUl0ZW0uZWRpdFByZXZpb3VzVmFsdWUgPSB0aGlzLnRyZWVOb2RlSXRlbS5sYWJlbDtcclxuICAgICAgICB0aGlzLnRyZWVOb2RlSXRlbS5sYWJlbCA9IHRoaXMudHJlZU5vZGVJdGVtLmVkaXROZXdWYWx1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgcmV2ZXJ0QWN0aW9uID0gKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRyZWVOb2RlSXRlbS5sYWJlbCA9IHRoaXMudHJlZU5vZGVJdGVtLmVkaXRQcmV2aW91c1ZhbHVlIGFzIHN0cmluZztcclxuICAgICAgICAgICAgdGhpcy50cmVlTm9kZUl0ZW0uaXNFZGl0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudHJlZU5vZGVFZGl0LmVtaXQoe1xyXG4gICAgICAgICAgICByZXZlcnRBY3Rpb24sXHJcbiAgICAgICAgICAgIGl0ZW06IHRoaXMudHJlZU5vZGVJdGVtLFxyXG4gICAgICAgICAgICBuZXdWYWx1ZTogdGhpcy50cmVlTm9kZUl0ZW0uZWRpdE5ld1ZhbHVlLFxyXG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlOiB0aGlzLnRyZWVOb2RlSXRlbS5lZGl0UHJldmlvdXNWYWx1ZSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0cmVlTm9kZUVkaXRDaGlsZEV2ZW50KHBheWxvYWQ6IFRyZWVOb2RlRWRpdCkge1xyXG4gICAgICAgIHRoaXMudHJlZU5vZGVFZGl0LmVtaXQocGF5bG9hZCk7XHJcbiAgICB9XHJcbn1cclxuIiwiQGlmICh0cmVlTm9kZUl0ZW0pIHtcbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwidHJlZS1ub2RlLWl0ZW1cIlxuICAgICAgICByb2xlPVwidHJlZWl0ZW1cIlxuICAgICAgICBbY2xhc3MudHJlZS1ub2RlLWl0ZW0tc2VsZWN0ZWRdPVwidHJlZU5vZGVJdGVtLmNoZWNrZWRcIlxuICAgICAgICBbY2xhc3Muc2VsZWN0YWJsZV09XCJoYXNDaGlsZHJlblwiXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaGFzQ2hpbGRyZW4gPyB0cmVlTm9kZUl0ZW0uaXNFeHBhbmRlZCA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cInRyZWVOb2RlSXRlbS5jaGVja2VkID09PSB0cnVlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0cmVlTm9kZUl0ZW0ubGFiZWxcIlxuICAgICAgICBbYXR0ci5hcmlhLWxldmVsXT1cImFyaWFMZXZlbCgpXCJcbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiaGFuZGxlVHJlZU5vZGVJdGVtQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duLmFycm93UmlnaHQpPVwiZXhwYW5kTm9kZSgpXCJcbiAgICAgICAgKGtleWRvd24uYXJyb3dMZWZ0KT1cImNvbGxhcHNlTm9kZSgpXCJcbiAgICA+XG4gICAgICAgIEBpZiAoaGFzQ2hpbGRyZW4gfHwgdHJlZU5vZGVJdGVtLmxlYWYgPT09IHRydWUpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFycm93XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRXhwYW5kZWQodHJlZU5vZGVJdGVtKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGlmICghdHJlZU5vZGVJdGVtLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cInRyZWVOb2RlSXRlbS5jb2xsYXBzZWRJY29uIHx8ICdmYXMgZmEtY2hldnJvbi1yaWdodCdcIj48L2k+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAodHJlZU5vZGVJdGVtLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cInRyZWVOb2RlSXRlbS5leHBhbmRlZEljb24gfHwgJ2ZhcyBmYS1jaGV2cm9uLWRvd24nXCI+PC9pPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ0cmVlLW5vZGUtaXRlbS10ZXh0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVUcmVlTm9kZUl0ZW1DbGljaygkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGlmICh0cmVlTm9kZUl0ZW0uaWNvbiB8fCB0cmVlTm9kZUl0ZW0uaXNFZGl0aW5nKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cmVlLW5vZGUtaXRlbS10ZXh0LWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICh0cmVlTm9kZUl0ZW0uaWNvbiAmJiAhdHJlZU5vZGVJdGVtLmlzRWRpdGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cInRyZWVOb2RlSXRlbS5pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAodHJlZU5vZGVJdGVtLmlzRWRpdGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1lZGl0IGVkaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlRWRpdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoc2hvd0NoZWNrYm94KCkgJiYgIXRyZWVOb2RlSXRlbS5pc0VkaXRpbmcpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRyZWUtbm9kZS1pdGVtLXRleHQtY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwidHJlZU5vZGVJdGVtLmNoZWNrZWQgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwidHJlZU5vZGVJdGVtLmNoZWNrZWQgPT09IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cInRyZWVOb2RlSXRlbS5jaGVja2VkID09PSBudWxsID8gJ21peGVkJyA6IHRyZWVOb2RlSXRlbS5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25DaGVja2JveEVudGVyKHRyZWVOb2RlSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cmVlLW5vZGUtaXRlbS10ZXh0LWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgQGlmICh0cmVlTm9kZUl0ZW0uaXNFZGl0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgI2lucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzSW5wdXRUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRyZWUtbm9kZS1pdGVtLXRleHQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0cmVlTm9kZUl0ZW0uZWRpdE5ld1ZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNhdmVFZGl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cImNhbmNlbEVkaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJFZGl0YXIgbm9tZSBkbyBpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoIXRyZWVOb2RlSXRlbS5pc0VkaXRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAge3sgdHJlZU5vZGVJdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICBAaWYgKGVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cmVlLW5vZGUtaXRlbS10ZXh0LWVkaXRhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1wZW5jaWwtYWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVFZGl0aW5nKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkVkaXRhciBpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbn1cblxuQGlmIChoYXNDaGlsZHJlbiAmJiB0cmVlTm9kZUl0ZW0uaXNFeHBhbmRlZCkge1xuICAgIDxkaXZcbiAgICAgICAgQGZhZGVFeHBhbmRcbiAgICAgICAgY2xhc3M9XCJjaGlsZFwiXG4gICAgICAgIHJvbGU9XCJncm91cFwiXG4gICAgICAgIEBjaGlsZHJlbkFuaW1hdGlvblxuICAgID5cbiAgICAgICAgQGZvciAoY2hpbGQgb2YgdHJlZU5vZGVJdGVtLmNoaWxkcmVuOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxzLXRyZWUtbm9kZS1pdGVtXG4gICAgICAgICAgICAgICAgW3Nob3dDaGVja2JveF09XCJzaG93Q2hlY2tib3goKVwiXG4gICAgICAgICAgICAgICAgW3RyZWVOb2RlSXRlbV09XCJjaGlsZFwiXG4gICAgICAgICAgICAgICAgW2FyaWFMZXZlbF09XCJhcmlhTGV2ZWwoKSArIDFcIlxuICAgICAgICAgICAgICAgICh0cmVlTm9kZUl0ZW1DbGlja2VkKT1cImhhbmRsZVRyZWVOb2RlSXRlbUNsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHRyZWVOb2RlRWRpdCk9XCJ0cmVlTm9kZUVkaXRDaGlsZEV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChub2RlRXhwYW5kZWQpPVwibm9kZUV4cGFuZGVkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG5vZGVDb2xsYXBzZWQpPVwibm9kZUNvbGxhcHNlZC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpbGQtaXRlbVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG59XG5cbiJdfQ==
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1ub2RlLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3RyZWUvc3JjL2xpYi90cmVlL2NvbXBvbmVudHMvdHJlZS1ub2RlLWl0ZW0vdHJlZS1ub2RlLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3RyZWUvc3JjL2xpYi90cmVlL2NvbXBvbmVudHMvdHJlZS1ub2RlLWl0ZW0vdHJlZS1ub2RlLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUYsT0FBTyxFQUNILGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQzs7O0FBOEJuRixNQUFNLE9BQU8scUJBQXFCO0lBQ2IsR0FBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2hDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVDLFVBQVUsR0FBRyxNQUFNLENBQTBCLFVBQVUsQ0FBQyxDQUFDO0lBRWpFLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckIs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WTtzQkFBcEIsS0FBSztnQkFDSSxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRW1DLEtBQUs7c0JBQTlDLFNBQVM7dUJBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFuaW1hdGUsIHF1ZXJ5LCBzdGFnZ2VyLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBpbnB1dCxcclxuICAgIGluamVjdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgSW50ZXJuYWxUcmVlTm9kZUl0ZW0sIFRyZWVOb2RlRWRpdCB9IGZyb20gJy4uLy4uL01vZGVscy90cmVlLm1vZGVscyc7XHJcbmltcG9ydCB7IElucHV0VGV4dERpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvaW5wdXQtdGV4dCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy10cmVlLW5vZGUtaXRlbScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZS1ub2RlLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vdHJlZS1ub2RlLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGFuaW1hdGlvbnM6IFtcclxuICAgICAgICB0cmlnZ2VyKCdmYWRlRXhwYW5kJywgW1xyXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXHJcbiAgICAgICAgICAgICAgICBzdHlsZSh7IGhlaWdodDogJzBweCcsIG9wYWNpdHk6IDAsIG92ZXJmbG93OiAnaGlkZGVuJyB9KSxcclxuICAgICAgICAgICAgICAgIGFuaW1hdGUoJzIwMG1zIGVhc2Utb3V0Jywgc3R5bGUoeyBoZWlnaHQ6ICcqJywgb3BhY2l0eTogMSB9KSksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbYW5pbWF0ZSgnMTUwbXMgZWFzZS1pbicsIHN0eWxlKHsgaGVpZ2h0OiAnMHB4Jywgb3BhY2l0eTogMCB9KSldKSxcclxuICAgICAgICBdKSxcclxuICAgICAgICB0cmlnZ2VyKCdjaGlsZHJlbkFuaW1hdGlvbicsIFtcclxuICAgICAgICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xyXG4gICAgICAgICAgICAgICAgcXVlcnkoXHJcbiAgICAgICAgICAgICAgICAgICAgJzplbnRlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAsIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTEwcHgpJyB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhZ2dlcig2MCwgW2FuaW1hdGUoJzIwMG1zIGVhc2Utb3V0Jywgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJyB9KSldKSxcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIHsgb3B0aW9uYWw6IHRydWUgfSxcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIF0pLFxyXG4gICAgICAgIF0pLFxyXG4gICAgXSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbRm9ybXNNb2R1bGUsIElucHV0VGV4dERpcmVjdGl2ZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUcmVlTm9kZUl0ZW1Db21wb25lbnQge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0PEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PihFbGVtZW50UmVmKTtcclxuXHJcbiAgICByZWFkb25seSBhcmlhTGV2ZWwgPSBpbnB1dCgwKTtcclxuICAgIHJlYWRvbmx5IHNob3dDaGVja2JveCA9IGlucHV0KGZhbHNlKTtcclxuICAgIEBJbnB1dCgpIHRyZWVOb2RlSXRlbSE6IEludGVybmFsVHJlZU5vZGVJdGVtO1xyXG4gICAgQE91dHB1dCgpIHRyZWVOb2RlSXRlbUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaXRlbTogSW50ZXJuYWxUcmVlTm9kZUl0ZW07IGV2ZW50OiBFdmVudCB9PigpO1xyXG4gICAgQE91dHB1dCgpIHRyZWVOb2RlRWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8VHJlZU5vZGVFZGl0PigpO1xyXG4gICAgQE91dHB1dCgpIG5vZGVFeHBhbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SW50ZXJuYWxUcmVlTm9kZUl0ZW0+KCk7XHJcbiAgICBAT3V0cHV0KCkgbm9kZUNvbGxhcHNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SW50ZXJuYWxUcmVlTm9kZUl0ZW0+KCk7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgaW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG5cclxuICAgIGdldCBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISEodGhpcy50cmVlTm9kZUl0ZW0/LmNoaWxkcmVuICYmIHRoaXMudHJlZU5vZGVJdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBlZGl0YWJsZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50cmVlTm9kZUl0ZW0/LmVkaXRhYmxlIHx8IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBhcmlhTGFiZWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3RoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuc2VsZWN0Jyl9ICR7dGhpcy50cmVlTm9kZUl0ZW0ubGFiZWx9YDtcclxuICAgIH1cclxuXHJcbiAgICBleHBhbmROb2RlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0NoaWxkcmVuICYmICF0aGlzLnRyZWVOb2RlSXRlbS5pc0V4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlRXhwYW5kZWQodGhpcy50cmVlTm9kZUl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb2xsYXBzZU5vZGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hpbGRyZW4gJiYgdGhpcy50cmVlTm9kZUl0ZW0uaXNFeHBhbmRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUV4cGFuZGVkKHRoaXMudHJlZU5vZGVJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9jdXNOZXh0Tm9kZShldmVudDogRXZlbnQpIHtcclxuICAgICAgICB0aGlzLm1vdmVGb2N1cyhldmVudCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9jdXNQcmV2aW91c05vZGUoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5tb3ZlRm9jdXMoZXZlbnQsIC0xKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1vdmVGb2N1cyhldmVudDogRXZlbnQsIG9mZnNldDogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb3Nlc3Q8SFRNTEVsZW1lbnQ+KCcudHJlZScpIHx8IGRvY3VtZW50O1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuZnJvbShyb290LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCcudHJlZS1ub2RlLWl0ZW0nKSk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gaXRlbXMuaW5kZXhPZihkb2N1bWVudC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KTtcclxuICAgICAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGl0ZW1zW2N1cnJlbnRJbmRleCArIG9mZnNldF0/LmZvY3VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGVja2JveEVudGVyKG5vZGU6IEludGVybmFsVHJlZU5vZGVJdGVtKSB7XHJcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSBub2RlLmNoZWNrZWQgPT09IHRydWUgPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgbm9kZS5jaGVja2VkID0gbmV3U3RhdGU7XHJcbiAgICAgICAgdGhpcy50cmVlTm9kZUl0ZW1DbGlja2VkLmVtaXQoeyBpdGVtOiBub2RlLCBldmVudDogbmV3IEtleWJvYXJkRXZlbnQoJ2tleWRvd24nLCB7IGtleTogJ0VudGVyJyB9KSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVUcmVlTm9kZUl0ZW1DbGljayhldmVudDogRXZlbnQsIHRyZWVOb2RlSXRlbT86IEludGVybmFsVHJlZU5vZGVJdGVtKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IHRyZWVOb2RlSXRlbSB8fCB0aGlzLnRyZWVOb2RlSXRlbTtcclxuICAgICAgICB0aGlzLnRyZWVOb2RlSXRlbUNsaWNrZWQuZW1pdCh7IGl0ZW0sIGV2ZW50IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZVRyZWVOb2RlSXRlbUNsaWNrZWQoeyBldmVudCwgaXRlbSB9OiB7IGV2ZW50OiBFdmVudDsgaXRlbTogSW50ZXJuYWxUcmVlTm9kZUl0ZW0gfSkge1xyXG4gICAgICAgIGlmIChpdGVtLmlzRWRpdGluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaGFuZGxlVHJlZU5vZGVJdGVtQ2xpY2soZXZlbnQsIGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUV4cGFuZGVkKHRyZWVOb2RlSXRlbTogSW50ZXJuYWxUcmVlTm9kZUl0ZW0pIHtcclxuICAgICAgICB0cmVlTm9kZUl0ZW0uaXNFeHBhbmRlZCA9ICF0cmVlTm9kZUl0ZW0uaXNFeHBhbmRlZDtcclxuICAgICAgICBpZiAodHJlZU5vZGVJdGVtLmlzRXhwYW5kZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5ub2RlRXhwYW5kZWQuZW1pdCh0cmVlTm9kZUl0ZW0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZUNvbGxhcHNlZC5lbWl0KHRyZWVOb2RlSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUVkaXRpbmcoJGV2ZW50OiBFdmVudCkge1xyXG4gICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB0aGlzLnRyZWVOb2RlSXRlbS5pc0VkaXRpbmcgPSAhdGhpcy50cmVlTm9kZUl0ZW0uaXNFZGl0aW5nO1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBpZiAodGhpcy50cmVlTm9kZUl0ZW0uaXNFZGl0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHJlZU5vZGVJdGVtLmVkaXROZXdWYWx1ZSA9IHRoaXMudHJlZU5vZGVJdGVtLmxhYmVsO1xyXG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlucHV0Py5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjYW5jZWxFZGl0KCRldmVudDogRXZlbnQpIHtcclxuICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgdGhpcy50cmVlTm9kZUl0ZW0uaXNFZGl0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50cmVlTm9kZUl0ZW0uZWRpdE5ld1ZhbHVlID0gJyc7XHJcbiAgICAgICAgdGhpcy50cmVlTm9kZUl0ZW0uZWRpdFByZXZpb3VzVmFsdWUgPSAnJztcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUVkaXQoJGV2ZW50OiBFdmVudCkge1xyXG4gICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB0aGlzLnRyZWVOb2RlSXRlbS5pc0VkaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIXRoaXMudHJlZU5vZGVJdGVtLmVkaXROZXdWYWx1ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRyZWVOb2RlSXRlbS5lZGl0UHJldmlvdXNWYWx1ZSA9IHRoaXMudHJlZU5vZGVJdGVtLmxhYmVsO1xyXG4gICAgICAgIHRoaXMudHJlZU5vZGVJdGVtLmxhYmVsID0gdGhpcy50cmVlTm9kZUl0ZW0uZWRpdE5ld1ZhbHVlO1xyXG5cclxuICAgICAgICBjb25zdCByZXZlcnRBY3Rpb24gPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudHJlZU5vZGVJdGVtLmxhYmVsID0gdGhpcy50cmVlTm9kZUl0ZW0uZWRpdFByZXZpb3VzVmFsdWUgYXMgc3RyaW5nO1xyXG4gICAgICAgICAgICB0aGlzLnRyZWVOb2RlSXRlbS5pc0VkaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy50cmVlTm9kZUVkaXQuZW1pdCh7XHJcbiAgICAgICAgICAgIHJldmVydEFjdGlvbixcclxuICAgICAgICAgICAgaXRlbTogdGhpcy50cmVlTm9kZUl0ZW0sXHJcbiAgICAgICAgICAgIG5ld1ZhbHVlOiB0aGlzLnRyZWVOb2RlSXRlbS5lZGl0TmV3VmFsdWUsXHJcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMudHJlZU5vZGVJdGVtLmVkaXRQcmV2aW91c1ZhbHVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRyZWVOb2RlRWRpdENoaWxkRXZlbnQocGF5bG9hZDogVHJlZU5vZGVFZGl0KSB7XHJcbiAgICAgICAgdGhpcy50cmVlTm9kZUVkaXQuZW1pdChwYXlsb2FkKTtcclxuICAgIH1cclxufVxyXG4iLCJAaWYgKHRyZWVOb2RlSXRlbSkge1xuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJ0cmVlLW5vZGUtaXRlbVwiXG4gICAgICAgIHJvbGU9XCJ0cmVlaXRlbVwiXG4gICAgICAgIFtjbGFzcy50cmVlLW5vZGUtaXRlbS1zZWxlY3RlZF09XCJ0cmVlTm9kZUl0ZW0uY2hlY2tlZFwiXG4gICAgICAgIFtjbGFzcy5zZWxlY3RhYmxlXT1cImhhc0NoaWxkcmVuXCJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJoYXNDaGlsZHJlbiA/IHRyZWVOb2RlSXRlbS5pc0V4cGFuZGVkIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwidHJlZU5vZGVJdGVtLmNoZWNrZWQgPT09IHRydWVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInRyZWVOb2RlSXRlbS5sYWJlbFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGV2ZWxdPVwiYXJpYUxldmVsKClcIlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJoYW5kbGVUcmVlTm9kZUl0ZW1DbGljaygkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24uYXJyb3dSaWdodCk9XCJleHBhbmROb2RlKClcIlxuICAgICAgICAoa2V5ZG93bi5hcnJvd0xlZnQpPVwiY29sbGFwc2VOb2RlKClcIlxuICAgICAgICAoa2V5ZG93bi5hcnJvd0Rvd24pPVwiZm9jdXNOZXh0Tm9kZSgkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24uYXJyb3dVcCk9XCJmb2N1c1ByZXZpb3VzTm9kZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICAgIEBpZiAoaGFzQ2hpbGRyZW4gfHwgdHJlZU5vZGVJdGVtLmxlYWYgPT09IHRydWUpIHtcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFycm93XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRXhwYW5kZWQodHJlZU5vZGVJdGVtKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGlmICghdHJlZU5vZGVJdGVtLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cInRyZWVOb2RlSXRlbS5jb2xsYXBzZWRJY29uIHx8ICdmYXMgZmEtY2hldnJvbi1yaWdodCdcIj48L2k+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAodHJlZU5vZGVJdGVtLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cInRyZWVOb2RlSXRlbS5leHBhbmRlZEljb24gfHwgJ2ZhcyBmYS1jaGV2cm9uLWRvd24nXCI+PC9pPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJ0cmVlLW5vZGUtaXRlbS10ZXh0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVUcmVlTm9kZUl0ZW1DbGljaygkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGlmICh0cmVlTm9kZUl0ZW0uaWNvbiB8fCB0cmVlTm9kZUl0ZW0uaXNFZGl0aW5nKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cmVlLW5vZGUtaXRlbS10ZXh0LWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICh0cmVlTm9kZUl0ZW0uaWNvbiAmJiAhdHJlZU5vZGVJdGVtLmlzRWRpdGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cInRyZWVOb2RlSXRlbS5pY29uXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAodHJlZU5vZGVJdGVtLmlzRWRpdGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1lZGl0IGVkaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlRWRpdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIEBpZiAoc2hvd0NoZWNrYm94KCkgJiYgIXRyZWVOb2RlSXRlbS5pc0VkaXRpbmcpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRyZWUtbm9kZS1pdGVtLXRleHQtY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwidHJlZU5vZGVJdGVtLmNoZWNrZWQgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwidHJlZU5vZGVJdGVtLmNoZWNrZWQgPT09IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cInRyZWVOb2RlSXRlbS5jaGVja2VkID09PSBudWxsID8gJ21peGVkJyA6IHRyZWVOb2RlSXRlbS5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25DaGVja2JveEVudGVyKHRyZWVOb2RlSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cmVlLW5vZGUtaXRlbS10ZXh0LWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgQGlmICh0cmVlTm9kZUl0ZW0uaXNFZGl0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgI2lucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzSW5wdXRUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRyZWUtbm9kZS1pdGVtLXRleHQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0cmVlTm9kZUl0ZW0uZWRpdE5ld1ZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNhdmVFZGl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cImNhbmNlbEVkaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJFZGl0YXIgbm9tZSBkbyBpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoIXRyZWVOb2RlSXRlbS5pc0VkaXRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAge3sgdHJlZU5vZGVJdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICBAaWYgKGVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cmVlLW5vZGUtaXRlbS10ZXh0LWVkaXRhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhcyBmYS1wZW5jaWwtYWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVFZGl0aW5nKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkVkaXRhciBpdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbn1cblxuQGlmIChoYXNDaGlsZHJlbiAmJiB0cmVlTm9kZUl0ZW0uaXNFeHBhbmRlZCkge1xuICAgIDxkaXZcbiAgICAgICAgQGZhZGVFeHBhbmRcbiAgICAgICAgY2xhc3M9XCJjaGlsZFwiXG4gICAgICAgIHJvbGU9XCJncm91cFwiXG4gICAgICAgIEBjaGlsZHJlbkFuaW1hdGlvblxuICAgID5cbiAgICAgICAgQGZvciAoY2hpbGQgb2YgdHJlZU5vZGVJdGVtLmNoaWxkcmVuOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxzLXRyZWUtbm9kZS1pdGVtXG4gICAgICAgICAgICAgICAgW3Nob3dDaGVja2JveF09XCJzaG93Q2hlY2tib3goKVwiXG4gICAgICAgICAgICAgICAgW3RyZWVOb2RlSXRlbV09XCJjaGlsZFwiXG4gICAgICAgICAgICAgICAgW2FyaWFMZXZlbF09XCJhcmlhTGV2ZWwoKSArIDFcIlxuICAgICAgICAgICAgICAgICh0cmVlTm9kZUl0ZW1DbGlja2VkKT1cImhhbmRsZVRyZWVOb2RlSXRlbUNsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHRyZWVOb2RlRWRpdCk9XCJ0cmVlTm9kZUVkaXRDaGlsZEV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChub2RlRXhwYW5kZWQpPVwibm9kZUV4cGFuZGVkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKG5vZGVDb2xsYXBzZWQpPVwibm9kZUNvbGxhcHNlZC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpbGQtaXRlbVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG59XG5cbiJdfQ==
@@ -145,11 +145,11 @@ export class WorkspaceSwitchComponent {
145
145
  }
146
146
  }
147
147
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WorkspaceSwitchComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
148
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: WorkspaceSwitchComponent, isStandalone: true, selector: "s-workspace-switch", inputs: { workspaces: "workspaces", footerButtonLabel: "footerButtonLabel", showFooterButton: "showFooterButton", disabled: "disabled" }, outputs: { footerButtonClicked: "footerButtonClicked", selected: "selected" }, host: { listeners: { "document:click": "onClickout($event)", "keydown": "onKeydown($event)" }, properties: { "attr.tabindex": "this.tabindex" } }, viewQueries: [{ propertyName: "listItems", predicate: ["listItem"], descendants: true }], ngImport: i0, template: "<div\r\n class=\"workspace-switch\"\r\n [ngClass]=\"{ 'workspace-switch--disabled': disabled }\"\r\n (blur)=\"buttonOnBlur()\"\r\n>\r\n <div\r\n class=\"button\"\r\n (click)=\"open = !open\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspaces[selectedItemIndex].title }}</span>\r\n <span class=\"subtitle\">{{ workspaces[selectedItemIndex].subtitle }}</span>\r\n </div>\r\n <div class=\"icons\">\r\n <span class=\"fas fa-chevron-up\"></span>\r\n <span class=\"fas fa-chevron-down\"></span>\r\n </div>\r\n </div>\r\n @if (!disabled && open) {\r\n <div class=\"drop-panel\">\r\n <ul\r\n id=\"workspace-list\"\r\n class=\"workspace-list\"\r\n [ngStyle]=\"{ 'max-height': height + 'px' }\"\r\n >\r\n @for (workspace of workspaces; track workspace.id; let i = $index) {\r\n <li\r\n #listItem\r\n class=\"workspace\"\r\n [ngClass]=\"{\r\n 'workspace--focused': i === currentItemIndex && !workspace.disabled,\r\n 'workspace--disabled': workspace.disabled,\r\n }\"\r\n (click)=\"onSelectItem(workspace)\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspace.title }}</span>\r\n <span class=\"subtitle\">{{ workspace.subtitle }}</span>\r\n </div>\r\n @if (i === selectedItemIndex) {\r\n <span class=\"active-icon fas fa-check\"></span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n @if (showFooterButton) {\r\n <div class=\"footer\">\r\n <div\r\n class=\"footer__button\"\r\n (click)=\"onFooterButtonClick()\"\r\n >\r\n <span class=\"footer__button__icon fas fa-plus\"></span>\r\n <span class=\"footer__button__title\">{{ footerButtonLabel }}</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".workspace-switch{border-radius:4px;border:1px solid transparent;width:324px}.workspace-switch .button{align-items:center;background-color:#fff;border:none;border-radius:3px;cursor:pointer;display:flex;justify-content:space-between;-webkit-user-select:none;user-select:none;width:100%}.workspace-switch .button .icons{display:flex;flex-direction:column;justify-content:space-between;margin:0 12px}.workspace-switch .drop-panel{background-color:#fff;border-radius:4px;box-shadow:0 1px 5px #00000040;cursor:pointer;margin:20px 0;padding-top:4px;position:absolute;width:324px}.workspace-switch .drop-panel .workspace-list{list-style:none;overflow:auto;padding:0}.workspace-switch .drop-panel .workspace-list .workspace{align-items:center;display:flex;justify-content:space-between;-webkit-user-select:none;user-select:none}.workspace-switch .drop-panel .workspace-list .workspace .active-icon{color:#7892a1;font-size:12px;margin:0 12px}.workspace-switch .drop-panel .workspace-list .workspace--focused{background-color:#f1f7f8}.workspace-switch .drop-panel .workspace-list .workspace--disabled .item .title,.workspace-switch .drop-panel .workspace-list .workspace--disabled .item .subtitle{color:#c1c1cc}.workspace-switch .drop-panel .workspace-list .workspace:hover:not(.workspace--disabled){background-color:#f1f7f8}.workspace-switch .drop-panel .footer{border-top:1px solid #ccc;padding:12px}.workspace-switch .drop-panel .footer .footer__button{align-items:center;border:1px solid #d8d8d8;border-radius:4px;padding:8px 12px;-webkit-user-select:none;user-select:none;display:flex;justify-content:center}.workspace-switch .drop-panel .footer .footer__button .footer__button__icon{color:#333;margin-right:8px}.workspace-switch .drop-panel .footer .footer__button:active{border:1px solid #428bca}.workspace-switch .item{align-items:flex-start;display:flex;flex-direction:column;justify-content:space-between;padding:12px}.workspace-switch .item .title{color:#333;font-family:Open Sans,sans-serif;font-size:14px;font-weight:700;line-height:150%;text-transform:uppercase}.workspace-switch .item .subtitle{color:#999;font-family:Open Sans,sans-serif;font-size:12px;font-weight:400;line-height:150%}.workspace-switch:focus{border:1px solid #428bca}.workspace-switch--disabled .button{cursor:default}.workspace-switch--disabled .button .icons,.workspace-switch--disabled .item .title,.workspace-switch--disabled .item .subtitle{color:#ccc}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
148
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: WorkspaceSwitchComponent, isStandalone: true, selector: "s-workspace-switch", inputs: { workspaces: "workspaces", footerButtonLabel: "footerButtonLabel", showFooterButton: "showFooterButton", disabled: "disabled" }, outputs: { footerButtonClicked: "footerButtonClicked", selected: "selected" }, host: { listeners: { "document:click": "onClickout($event)", "keydown": "onKeydown($event)" }, properties: { "attr.tabindex": "this.tabindex" } }, viewQueries: [{ propertyName: "listItems", predicate: ["listItem"], descendants: true }], ngImport: i0, template: "<div\r\n class=\"workspace-switch\"\r\n [ngClass]=\"{ 'workspace-switch--disabled': disabled }\"\r\n (blur)=\"buttonOnBlur()\"\r\n>\r\n <div\r\n class=\"button\"\r\n (click)=\"open = !open\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspaces[selectedItemIndex].title }}</span>\r\n <span class=\"subtitle\">{{ workspaces[selectedItemIndex].subtitle }}</span>\r\n </div>\r\n <div class=\"icons\">\r\n <span class=\"fas fa-chevron-up\"></span>\r\n <span class=\"fas fa-chevron-down\"></span>\r\n </div>\r\n </div>\r\n @if (!disabled && open) {\r\n <div class=\"drop-panel\">\r\n <ul\r\n id=\"workspace-list\"\r\n class=\"workspace-list\"\r\n [ngStyle]=\"{ 'max-height': height + 'px' }\"\r\n >\r\n @for (workspace of workspaces; track workspace.id; let i = $index) {\r\n <li\r\n #listItem\r\n class=\"workspace\"\r\n [ngClass]=\"{\r\n 'workspace--focused': i === currentItemIndex && !workspace.disabled,\r\n 'workspace--disabled': workspace.disabled,\r\n }\"\r\n (click)=\"onSelectItem(workspace)\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspace.title }}</span>\r\n <span class=\"subtitle\">{{ workspace.subtitle }}</span>\r\n </div>\r\n @if (i === selectedItemIndex) {\r\n <span class=\"active-icon fas fa-check\"></span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n @if (showFooterButton) {\r\n <div class=\"footer\">\r\n <div\r\n class=\"footer__button\"\r\n (click)=\"onFooterButtonClick()\"\r\n >\r\n <span class=\"footer__button__icon fas fa-plus\"></span>\r\n <span class=\"footer__button__title\">{{ footerButtonLabel }}</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [":host{display:inline-block}:host(:focus-visible){border-radius:4px;outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.workspace-switch{border-radius:4px;border:1px solid transparent;width:324px}.workspace-switch .button{align-items:center;background-color:#fff;border:none;border-radius:3px;cursor:pointer;display:flex;justify-content:space-between;-webkit-user-select:none;user-select:none;width:100%}.workspace-switch .button .icons{display:flex;flex-direction:column;justify-content:space-between;margin:0 12px}.workspace-switch .drop-panel{background-color:#fff;border-radius:4px;box-shadow:0 1px 5px #00000040;cursor:pointer;margin:20px 0;padding-top:4px;position:absolute;width:324px}.workspace-switch .drop-panel .workspace-list{list-style:none;overflow:auto;padding:0}.workspace-switch .drop-panel .workspace-list .workspace{align-items:center;display:flex;justify-content:space-between;-webkit-user-select:none;user-select:none}.workspace-switch .drop-panel .workspace-list .workspace .active-icon{color:#7892a1;font-size:12px;margin:0 12px}.workspace-switch .drop-panel .workspace-list .workspace--focused{background-color:#f1f7f8}.workspace-switch .drop-panel .workspace-list .workspace--disabled .item .title,.workspace-switch .drop-panel .workspace-list .workspace--disabled .item .subtitle{color:#c1c1cc}.workspace-switch .drop-panel .workspace-list .workspace:hover:not(.workspace--disabled){background-color:#f1f7f8}.workspace-switch .drop-panel .footer{border-top:1px solid #ccc;padding:12px}.workspace-switch .drop-panel .footer .footer__button{align-items:center;border:1px solid #d8d8d8;border-radius:4px;padding:8px 12px;-webkit-user-select:none;user-select:none;display:flex;justify-content:center}.workspace-switch .drop-panel .footer .footer__button .footer__button__icon{color:#333;margin-right:8px}.workspace-switch .drop-panel .footer .footer__button:active{border:1px solid #428bca}.workspace-switch .item{align-items:flex-start;display:flex;flex-direction:column;justify-content:space-between;padding:12px}.workspace-switch .item .title{color:#333;font-family:Open Sans,sans-serif;font-size:14px;font-weight:700;line-height:150%;text-transform:uppercase}.workspace-switch .item .subtitle{color:#999;font-family:Open Sans,sans-serif;font-size:12px;font-weight:400;line-height:150%}.workspace-switch--disabled .button{cursor:default}.workspace-switch--disabled .button .icons,.workspace-switch--disabled .item .title,.workspace-switch--disabled .item .subtitle{color:#ccc}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
149
149
  }
150
150
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: WorkspaceSwitchComponent, decorators: [{
151
151
  type: Component,
152
- args: [{ selector: 's-workspace-switch', standalone: true, imports: [NgClass, NgStyle], template: "<div\r\n class=\"workspace-switch\"\r\n [ngClass]=\"{ 'workspace-switch--disabled': disabled }\"\r\n (blur)=\"buttonOnBlur()\"\r\n>\r\n <div\r\n class=\"button\"\r\n (click)=\"open = !open\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspaces[selectedItemIndex].title }}</span>\r\n <span class=\"subtitle\">{{ workspaces[selectedItemIndex].subtitle }}</span>\r\n </div>\r\n <div class=\"icons\">\r\n <span class=\"fas fa-chevron-up\"></span>\r\n <span class=\"fas fa-chevron-down\"></span>\r\n </div>\r\n </div>\r\n @if (!disabled && open) {\r\n <div class=\"drop-panel\">\r\n <ul\r\n id=\"workspace-list\"\r\n class=\"workspace-list\"\r\n [ngStyle]=\"{ 'max-height': height + 'px' }\"\r\n >\r\n @for (workspace of workspaces; track workspace.id; let i = $index) {\r\n <li\r\n #listItem\r\n class=\"workspace\"\r\n [ngClass]=\"{\r\n 'workspace--focused': i === currentItemIndex && !workspace.disabled,\r\n 'workspace--disabled': workspace.disabled,\r\n }\"\r\n (click)=\"onSelectItem(workspace)\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspace.title }}</span>\r\n <span class=\"subtitle\">{{ workspace.subtitle }}</span>\r\n </div>\r\n @if (i === selectedItemIndex) {\r\n <span class=\"active-icon fas fa-check\"></span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n @if (showFooterButton) {\r\n <div class=\"footer\">\r\n <div\r\n class=\"footer__button\"\r\n (click)=\"onFooterButtonClick()\"\r\n >\r\n <span class=\"footer__button__icon fas fa-plus\"></span>\r\n <span class=\"footer__button__title\">{{ footerButtonLabel }}</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [".workspace-switch{border-radius:4px;border:1px solid transparent;width:324px}.workspace-switch .button{align-items:center;background-color:#fff;border:none;border-radius:3px;cursor:pointer;display:flex;justify-content:space-between;-webkit-user-select:none;user-select:none;width:100%}.workspace-switch .button .icons{display:flex;flex-direction:column;justify-content:space-between;margin:0 12px}.workspace-switch .drop-panel{background-color:#fff;border-radius:4px;box-shadow:0 1px 5px #00000040;cursor:pointer;margin:20px 0;padding-top:4px;position:absolute;width:324px}.workspace-switch .drop-panel .workspace-list{list-style:none;overflow:auto;padding:0}.workspace-switch .drop-panel .workspace-list .workspace{align-items:center;display:flex;justify-content:space-between;-webkit-user-select:none;user-select:none}.workspace-switch .drop-panel .workspace-list .workspace .active-icon{color:#7892a1;font-size:12px;margin:0 12px}.workspace-switch .drop-panel .workspace-list .workspace--focused{background-color:#f1f7f8}.workspace-switch .drop-panel .workspace-list .workspace--disabled .item .title,.workspace-switch .drop-panel .workspace-list .workspace--disabled .item .subtitle{color:#c1c1cc}.workspace-switch .drop-panel .workspace-list .workspace:hover:not(.workspace--disabled){background-color:#f1f7f8}.workspace-switch .drop-panel .footer{border-top:1px solid #ccc;padding:12px}.workspace-switch .drop-panel .footer .footer__button{align-items:center;border:1px solid #d8d8d8;border-radius:4px;padding:8px 12px;-webkit-user-select:none;user-select:none;display:flex;justify-content:center}.workspace-switch .drop-panel .footer .footer__button .footer__button__icon{color:#333;margin-right:8px}.workspace-switch .drop-panel .footer .footer__button:active{border:1px solid #428bca}.workspace-switch .item{align-items:flex-start;display:flex;flex-direction:column;justify-content:space-between;padding:12px}.workspace-switch .item .title{color:#333;font-family:Open Sans,sans-serif;font-size:14px;font-weight:700;line-height:150%;text-transform:uppercase}.workspace-switch .item .subtitle{color:#999;font-family:Open Sans,sans-serif;font-size:12px;font-weight:400;line-height:150%}.workspace-switch:focus{border:1px solid #428bca}.workspace-switch--disabled .button{cursor:default}.workspace-switch--disabled .button .icons,.workspace-switch--disabled .item .title,.workspace-switch--disabled .item .subtitle{color:#ccc}\n"] }]
152
+ args: [{ selector: 's-workspace-switch', standalone: true, imports: [NgClass, NgStyle], template: "<div\r\n class=\"workspace-switch\"\r\n [ngClass]=\"{ 'workspace-switch--disabled': disabled }\"\r\n (blur)=\"buttonOnBlur()\"\r\n>\r\n <div\r\n class=\"button\"\r\n (click)=\"open = !open\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspaces[selectedItemIndex].title }}</span>\r\n <span class=\"subtitle\">{{ workspaces[selectedItemIndex].subtitle }}</span>\r\n </div>\r\n <div class=\"icons\">\r\n <span class=\"fas fa-chevron-up\"></span>\r\n <span class=\"fas fa-chevron-down\"></span>\r\n </div>\r\n </div>\r\n @if (!disabled && open) {\r\n <div class=\"drop-panel\">\r\n <ul\r\n id=\"workspace-list\"\r\n class=\"workspace-list\"\r\n [ngStyle]=\"{ 'max-height': height + 'px' }\"\r\n >\r\n @for (workspace of workspaces; track workspace.id; let i = $index) {\r\n <li\r\n #listItem\r\n class=\"workspace\"\r\n [ngClass]=\"{\r\n 'workspace--focused': i === currentItemIndex && !workspace.disabled,\r\n 'workspace--disabled': workspace.disabled,\r\n }\"\r\n (click)=\"onSelectItem(workspace)\"\r\n >\r\n <div class=\"item\">\r\n <span class=\"title\">{{ workspace.title }}</span>\r\n <span class=\"subtitle\">{{ workspace.subtitle }}</span>\r\n </div>\r\n @if (i === selectedItemIndex) {\r\n <span class=\"active-icon fas fa-check\"></span>\r\n }\r\n </li>\r\n }\r\n </ul>\r\n @if (showFooterButton) {\r\n <div class=\"footer\">\r\n <div\r\n class=\"footer__button\"\r\n (click)=\"onFooterButtonClick()\"\r\n >\r\n <span class=\"footer__button__icon fas fa-plus\"></span>\r\n <span class=\"footer__button__title\">{{ footerButtonLabel }}</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n</div>\r\n", styles: [":host{display:inline-block}:host(:focus-visible){border-radius:4px;outline:2px solid var(--s-focus-ring-color);outline-offset:3px}.workspace-switch{border-radius:4px;border:1px solid transparent;width:324px}.workspace-switch .button{align-items:center;background-color:#fff;border:none;border-radius:3px;cursor:pointer;display:flex;justify-content:space-between;-webkit-user-select:none;user-select:none;width:100%}.workspace-switch .button .icons{display:flex;flex-direction:column;justify-content:space-between;margin:0 12px}.workspace-switch .drop-panel{background-color:#fff;border-radius:4px;box-shadow:0 1px 5px #00000040;cursor:pointer;margin:20px 0;padding-top:4px;position:absolute;width:324px}.workspace-switch .drop-panel .workspace-list{list-style:none;overflow:auto;padding:0}.workspace-switch .drop-panel .workspace-list .workspace{align-items:center;display:flex;justify-content:space-between;-webkit-user-select:none;user-select:none}.workspace-switch .drop-panel .workspace-list .workspace .active-icon{color:#7892a1;font-size:12px;margin:0 12px}.workspace-switch .drop-panel .workspace-list .workspace--focused{background-color:#f1f7f8}.workspace-switch .drop-panel .workspace-list .workspace--disabled .item .title,.workspace-switch .drop-panel .workspace-list .workspace--disabled .item .subtitle{color:#c1c1cc}.workspace-switch .drop-panel .workspace-list .workspace:hover:not(.workspace--disabled){background-color:#f1f7f8}.workspace-switch .drop-panel .footer{border-top:1px solid #ccc;padding:12px}.workspace-switch .drop-panel .footer .footer__button{align-items:center;border:1px solid #d8d8d8;border-radius:4px;padding:8px 12px;-webkit-user-select:none;user-select:none;display:flex;justify-content:center}.workspace-switch .drop-panel .footer .footer__button .footer__button__icon{color:#333;margin-right:8px}.workspace-switch .drop-panel .footer .footer__button:active{border:1px solid #428bca}.workspace-switch .item{align-items:flex-start;display:flex;flex-direction:column;justify-content:space-between;padding:12px}.workspace-switch .item .title{color:#333;font-family:Open Sans,sans-serif;font-size:14px;font-weight:700;line-height:150%;text-transform:uppercase}.workspace-switch .item .subtitle{color:#999;font-family:Open Sans,sans-serif;font-size:12px;font-weight:400;line-height:150%}.workspace-switch--disabled .button{cursor:default}.workspace-switch--disabled .button .icons,.workspace-switch--disabled .item .title,.workspace-switch--disabled .item .subtitle{color:#ccc}\n"] }]
153
153
  }], propDecorators: { workspaces: [{
154
154
  type: Input,
155
155
  args: [{ required: true }]
@@ -176,4 +176,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
176
176
  type: HostListener,
177
177
  args: ['keydown', ['$event']]
178
178
  }] } });
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLXN3aXRjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvd29ya3NwYWNlLXN3aXRjaC9zcmMvbGliL3dvcmtzcGFjZS1zd2l0Y2gvd29ya3NwYWNlLXN3aXRjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvd29ya3NwYWNlLXN3aXRjaC9zcmMvbGliL3dvcmtzcGFjZS1zd2l0Y2gvd29ya3NwYWNlLXN3aXRjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFlBQVksRUFDWixNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7O0FBSXZCOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBUUgsTUFBTSxPQUFPLHdCQUF3QjtJQUNoQixJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFCLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRS9EOzs7O09BSUc7SUFFSSxVQUFVLEdBQWdCLEVBQUUsQ0FBQztJQUVwQzs7OztPQUlHO0lBRUksaUJBQWlCLEdBQUcsV0FBVyxDQUFDO0lBRXZDOzs7OztPQUtHO0lBRUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBRS9COzs7OztPQUtHO0lBRUksUUFBUSxHQUFHLEtBQUssQ0FBQztJQUV4Qjs7T0FFRztJQUVJLG1CQUFtQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFaEQ7OztPQUdHO0lBRUksUUFBUSxHQUE0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LElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JFLElBQUksV0FBVyxFQUFFLENBQUM7WUFDZCxXQUFXLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDdkYsQ0FBQztJQUNMLENBQUM7d0dBOUpRLHdCQUF3Qjs0RkFBeEIsd0JBQXdCLG9oQkMxQ3JDLDI1RUEyREEsMjdFRG5CYyxPQUFPLG9GQUFFLE9BQU87OzRGQUVqQix3QkFBd0I7a0JBUHBDLFNBQVM7K0JBQ0ksb0JBQW9CLGNBR2xCLElBQUksV0FDUCxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7OEJBWXBCLFVBQVU7c0JBRGhCLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQVNsQixpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBVUMsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQVVDLFFBQVE7c0JBRGQsS0FBSztnQkFPQyxtQkFBbUI7c0JBRHpCLE1BQU07Z0JBUUEsUUFBUTtzQkFEZCxNQUFNO2dCQUlBLFNBQVM7c0JBRGYsWUFBWTt1QkFBQyxVQUFVO2dCQXVCakIsUUFBUTtzQkFEZCxXQUFXO3VCQUFDLGVBQWU7Z0JBSXJCLFVBQVU7c0JBRGhCLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUW5DLFNBQVM7c0JBRGYsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzLCBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEhvc3RCaW5kaW5nLFxyXG4gICAgSG9zdExpc3RlbmVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBRdWVyeUxpc3QsXHJcbiAgICBWaWV3Q2hpbGRyZW4sXHJcbiAgICBpbmplY3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBXb3Jrc3BhY2UgfSBmcm9tICcuL21vZGVscy93b3Jrc3BhY2UnO1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnRlIGRlIHNlbGXDp8OjbyBkZSB3b3Jrc3BhY2UgZXhpYmUgdW0gZHJvcGRvd24gY29tIGEgbGlzdGEgZGUgZXNwYcOnb3MgZGUgdHJhYmFsaG9cclxuICogZGlzcG9uw612ZWlzLCBwZXJtaXRpbmRvIGFvIHVzdcOhcmlvIGFsdGVybmFyIGVudHJlIGVsZXMuIFN1cG9ydGEgbmF2ZWdhw6fDo28gcG9yIHRlY2xhZG9cclxuICogKHNldGFzLCBFbnRlciwgRXNjYXBlKSwgZXN0YWRvIGRlc2FiaWxpdGFkbyBlIHVtIGJvdMOjbyBkZSBhw6fDo28gY3VzdG9taXrDoXZlbCBubyByb2RhcMOpLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBodG1sXHJcbiAqIDxzLXdvcmtzcGFjZS1zd2l0Y2hcclxuICogICBbd29ya3NwYWNlc109XCJ3b3Jrc3BhY2VzXCJcclxuICogICBmb290ZXJCdXR0b25MYWJlbD1cIkNyaWFyIHdvcmtzcGFjZVwiXHJcbiAqICAgKHNlbGVjdGVkKT1cIm9uV29ya3NwYWNlU2VsZWN0KCRldmVudClcIlxyXG4gKiAgIChmb290ZXJCdXR0b25DbGlja2VkKT1cIm9uQ3JlYXRlKClcIlxyXG4gKiAvPlxyXG4gKiBgYGBcclxuICpcclxuICogQGNhdGVnb3J5IE5hdmVnYcOnw6NvXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy13b3Jrc3BhY2Utc3dpdGNoJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi93b3Jrc3BhY2Utc3dpdGNoLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3dvcmtzcGFjZS1zd2l0Y2guY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbTmdDbGFzcywgTmdTdHlsZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXb3Jrc3BhY2VTd2l0Y2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBlUmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTGlzdGEgZGUgd29ya3NwYWNlcyBkaXNwb27DrXZlaXMgcGFyYSBzZWxlw6fDo28uIENhbXBvIG9icmlnYXTDs3Jpby5cclxuICAgICAqIENhZGEgaXRlbSBkZXZlIGltcGxlbWVudGFyIGEgaW50ZXJmYWNlIGBXb3Jrc3BhY2VgLlxyXG4gICAgICogTGFuw6dhIHVtIGVycm8gZW0gcnVudGltZSBzZSBhIGxpc3RhIGVzdGl2ZXIgdmF6aWEuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICBwdWJsaWMgd29ya3NwYWNlczogV29ya3NwYWNlW10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSw7N0dWxvIGV4aWJpZG8gbm8gYm90w6NvIGRlIGHDp8OjbyBsb2NhbGl6YWRvIG5vIHJvZGFww6kgZG8gZHJvcGRvd24uXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgJ0FkaWNpb25hcidcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBmb290ZXJCdXR0b25MYWJlbCA9ICdBZGljaW9uYXInO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnRyb2xhIGEgdmlzaWJpbGlkYWRlIGRvIGJvdMOjbyBkZSBhw6fDo28gbm8gcm9kYXDDqSBkbyBkcm9wZG93bi5cclxuICAgICAqIFF1YW5kbyBgZmFsc2VgLCBvIGJvdMOjbyBuw6NvIMOpIHJlbmRlcml6YWRvLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaG93Rm9vdGVyQnV0dG9uID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBRdWFuZG8gYHRydWVgLCBvIGNvbXBvbmVudGUgZmljYSBkZXNhYmlsaXRhZG86IG7Do28gYWJyZSBvIGRyb3Bkb3duLFxyXG4gICAgICogbsOjbyBlbWl0ZSBldmVudG9zIGUgZmljYSBpbmFjZXNzw612ZWwgdmlhIHRlY2xhZG8gKGB0YWJpbmRleCA9IC0xYCkuXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIG8gdXN1w6FyaW8gY2xpY2Egbm8gYm90w6NvIGRlIGHDp8OjbyBkbyByb2RhcMOpIGRvIGRyb3Bkb3duLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBmb290ZXJCdXR0b25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIG8gdXN1w6FyaW8gc2VsZWNpb25hIHVtIHdvcmtzcGFjZSBkYSBsaXN0YS5cclxuICAgICAqIFJldG9ybmEgbyBvYmpldG8gYFdvcmtzcGFjZWAgc2VsZWNpb25hZG8uXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8V29ya3NwYWNlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgICBAVmlld0NoaWxkcmVuKCdsaXN0SXRlbScpXHJcbiAgICBwdWJsaWMgbGlzdEl0ZW1zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IG9wZW4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZW47XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBvcGVuKG9wZW46IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9vcGVuID0gb3BlbjtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgICAgaWYgKG9wZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlTGlzdE1heEhlaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGVpZ2h0ID0gMDtcclxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW1JbmRleCA9IDA7XHJcbiAgICBwdWJsaWMgY3VycmVudEl0ZW1JbmRleCA9IDA7XHJcblxyXG4gICAgcHJpdmF0ZSBfb3BlbiA9IGZhbHNlO1xyXG5cclxuICAgIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXHJcbiAgICBwdWJsaWMgdGFiaW5kZXggPSAwO1xyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICAgIHB1YmxpYyBvbkNsaWNrb3V0KGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcclxuICAgIHB1YmxpYyBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJyAnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW4pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHdvcmtzcGFjZSA9IHRoaXMud29ya3NwYWNlc1t0aGlzLnNlbGVjdGVkSXRlbUluZGV4XTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAod29ya3NwYWNlLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSB0aGlzLmN1cnJlbnRJdGVtSW5kZXg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy53b3Jrc3BhY2VzW3RoaXMuc2VsZWN0ZWRJdGVtSW5kZXhdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEl0ZW1JbmRleCA8IHRoaXMud29ya3NwYWNlcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtSW5kZXgrKztcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvQ3VycmVudEl0ZW0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEl0ZW1JbmRleCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW1JbmRleC0tO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsVG9DdXJyZW50SXRlbSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRhYmluZGV4ID0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZGF0aW9ucygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMud29ya3NwYWNlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXb3Jrc3BhY2VzIGxpc3QgaXMgZW1wdHkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBidXR0b25PbkJsdXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50SXRlbUluZGV4ID0gdGhpcy5zZWxlY3RlZEl0ZW1JbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25TZWxlY3RJdGVtKHdvcmtzcGFjZTogV29ya3NwYWNlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHdvcmtzcGFjZS5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gdGhpcy53b3Jrc3BhY2VzLmluZGV4T2Yod29ya3NwYWNlKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRJdGVtSW5kZXggPSB0aGlzLnNlbGVjdGVkSXRlbUluZGV4O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh3b3Jrc3BhY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkZvb3RlckJ1dHRvbkNsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZm9vdGVyQnV0dG9uQ2xpY2tlZC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlTGlzdE1heEhlaWdodCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB3b3Jrc3BhY2VMaXN0UmVmID0gdGhpcy5lUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI3dvcmtzcGFjZS1saXN0Jyk7XHJcbiAgICAgICAgY29uc3QgeyB0b3AgfSA9IHdvcmtzcGFjZUxpc3RSZWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gdG9wIC0gMjAgLSAodGhpcy5zaG93Rm9vdGVyQnV0dG9uID8gNjQgOiAwKTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zY3JvbGxUb0N1cnJlbnRJdGVtKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gdGhpcy5saXN0SXRlbXM/LnRvQXJyYXkoKVt0aGlzLmN1cnJlbnRJdGVtSW5kZXhdO1xyXG4gICAgICAgIGlmIChjdXJyZW50SXRlbSkge1xyXG4gICAgICAgICAgICBjdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ25lYXJlc3QnIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgICBjbGFzcz1cIndvcmtzcGFjZS1zd2l0Y2hcIlxyXG4gICAgW25nQ2xhc3NdPVwieyAnd29ya3NwYWNlLXN3aXRjaC0tZGlzYWJsZWQnOiBkaXNhYmxlZCB9XCJcclxuICAgIChibHVyKT1cImJ1dHRvbk9uQmx1cigpXCJcclxuPlxyXG4gICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3BlbiA9ICFvcGVuXCJcclxuICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+e3sgd29ya3NwYWNlc1tzZWxlY3RlZEl0ZW1JbmRleF0udGl0bGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VidGl0bGVcIj57eyB3b3Jrc3BhY2VzW3NlbGVjdGVkSXRlbUluZGV4XS5zdWJ0aXRsZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbnNcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYXMgZmEtY2hldnJvbi11cFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1kb3duXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBAaWYgKCFkaXNhYmxlZCAmJiBvcGVuKSB7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3AtcGFuZWxcIj5cclxuICAgICAgICAgICAgPHVsXHJcbiAgICAgICAgICAgICAgICBpZD1cIndvcmtzcGFjZS1saXN0XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwid29ya3NwYWNlLWxpc3RcIlxyXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnbWF4LWhlaWdodCc6IGhlaWdodCArICdweCcgfVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIEBmb3IgKHdvcmtzcGFjZSBvZiB3b3Jrc3BhY2VzOyB0cmFjayB3b3Jrc3BhY2UuaWQ7IGxldCBpID0gJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICNsaXN0SXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIndvcmtzcGFjZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3b3Jrc3BhY2UtLWZvY3VzZWQnOiBpID09PSBjdXJyZW50SXRlbUluZGV4ICYmICF3b3Jrc3BhY2UuZGlzYWJsZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd29ya3NwYWNlLS1kaXNhYmxlZCc6IHdvcmtzcGFjZS5kaXNhYmxlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdEl0ZW0od29ya3NwYWNlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPnt7IHdvcmtzcGFjZS50aXRsZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VidGl0bGVcIj57eyB3b3Jrc3BhY2Uuc3VidGl0bGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGkgPT09IHNlbGVjdGVkSXRlbUluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFjdGl2ZS1pY29uIGZhcyBmYS1jaGVja1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIEBpZiAoc2hvd0Zvb3RlckJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb290ZXJfX2J1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkZvb3RlckJ1dHRvbkNsaWNrKClcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXJfX2J1dHRvbl9faWNvbiBmYXMgZmEtcGx1c1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXJfX2J1dHRvbl9fdGl0bGVcIj57eyBmb290ZXJCdXR0b25MYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbjwvZGl2PlxyXG4iXX0=
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLXN3aXRjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvd29ya3NwYWNlLXN3aXRjaC9zcmMvbGliL3dvcmtzcGFjZS1zd2l0Y2gvd29ya3NwYWNlLXN3aXRjaC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvd29ya3NwYWNlLXN3aXRjaC9zcmMvbGliL3dvcmtzcGFjZS1zd2l0Y2gvd29ya3NwYWNlLXN3aXRjaC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFlBQVksRUFDWixNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7O0FBSXZCOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBUUgsTUFBTSxPQUFPLHdCQUF3QjtJQUNoQixJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFCLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRS9EOzs7O09BSUc7SUFFSSxVQUFVLEdBQWdCLEVBQUUsQ0FBQztJQUVwQzs7OztPQUlHO0lBRUksaUJBQWlCLEdBQUcsV0FBVyxDQUFDO0lBRXZDOzs7OztPQUtHO0lBRUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBRS9COzs7OztPQUtHO0lBRUksUUFBUSxHQUFHLEtBQUssQ0FBQztJQUV4Qjs7T0FFRztJQUVJLG1CQUFtQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFFaEQ7OztPQUdHO0lBRUksUUFBUSxHQUE0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LElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JFLElBQUksV0FBVyxFQUFFLENBQUM7WUFDZCxXQUFXLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDdkYsQ0FBQztJQUNMLENBQUM7d0dBOUpRLHdCQUF3Qjs0RkFBeEIsd0JBQXdCLG9oQkMxQ3JDLDI1RUEyREEsNGdGRG5CYyxPQUFPLG9GQUFFLE9BQU87OzRGQUVqQix3QkFBd0I7a0JBUHBDLFNBQVM7K0JBQ0ksb0JBQW9CLGNBR2xCLElBQUksV0FDUCxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7OEJBWXBCLFVBQVU7c0JBRGhCLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQVNsQixpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBVUMsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQVVDLFFBQVE7c0JBRGQsS0FBSztnQkFPQyxtQkFBbUI7c0JBRHpCLE1BQU07Z0JBUUEsUUFBUTtzQkFEZCxNQUFNO2dCQUlBLFNBQVM7c0JBRGYsWUFBWTt1QkFBQyxVQUFVO2dCQXVCakIsUUFBUTtzQkFEZCxXQUFXO3VCQUFDLGVBQWU7Z0JBSXJCLFVBQVU7c0JBRGhCLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBUW5DLFNBQVM7c0JBRGYsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzLCBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEhvc3RCaW5kaW5nLFxyXG4gICAgSG9zdExpc3RlbmVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBRdWVyeUxpc3QsXHJcbiAgICBWaWV3Q2hpbGRyZW4sXHJcbiAgICBpbmplY3QsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBXb3Jrc3BhY2UgfSBmcm9tICcuL21vZGVscy93b3Jrc3BhY2UnO1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnRlIGRlIHNlbGXDp8OjbyBkZSB3b3Jrc3BhY2UgZXhpYmUgdW0gZHJvcGRvd24gY29tIGEgbGlzdGEgZGUgZXNwYcOnb3MgZGUgdHJhYmFsaG9cclxuICogZGlzcG9uw612ZWlzLCBwZXJtaXRpbmRvIGFvIHVzdcOhcmlvIGFsdGVybmFyIGVudHJlIGVsZXMuIFN1cG9ydGEgbmF2ZWdhw6fDo28gcG9yIHRlY2xhZG9cclxuICogKHNldGFzLCBFbnRlciwgRXNjYXBlKSwgZXN0YWRvIGRlc2FiaWxpdGFkbyBlIHVtIGJvdMOjbyBkZSBhw6fDo28gY3VzdG9taXrDoXZlbCBubyByb2RhcMOpLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBodG1sXHJcbiAqIDxzLXdvcmtzcGFjZS1zd2l0Y2hcclxuICogICBbd29ya3NwYWNlc109XCJ3b3Jrc3BhY2VzXCJcclxuICogICBmb290ZXJCdXR0b25MYWJlbD1cIkNyaWFyIHdvcmtzcGFjZVwiXHJcbiAqICAgKHNlbGVjdGVkKT1cIm9uV29ya3NwYWNlU2VsZWN0KCRldmVudClcIlxyXG4gKiAgIChmb290ZXJCdXR0b25DbGlja2VkKT1cIm9uQ3JlYXRlKClcIlxyXG4gKiAvPlxyXG4gKiBgYGBcclxuICpcclxuICogQGNhdGVnb3J5IE5hdmVnYcOnw6NvXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy13b3Jrc3BhY2Utc3dpdGNoJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi93b3Jrc3BhY2Utc3dpdGNoLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3dvcmtzcGFjZS1zd2l0Y2guY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbTmdDbGFzcywgTmdTdHlsZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBXb3Jrc3BhY2VTd2l0Y2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBlUmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTGlzdGEgZGUgd29ya3NwYWNlcyBkaXNwb27DrXZlaXMgcGFyYSBzZWxlw6fDo28uIENhbXBvIG9icmlnYXTDs3Jpby5cclxuICAgICAqIENhZGEgaXRlbSBkZXZlIGltcGxlbWVudGFyIGEgaW50ZXJmYWNlIGBXb3Jrc3BhY2VgLlxyXG4gICAgICogTGFuw6dhIHVtIGVycm8gZW0gcnVudGltZSBzZSBhIGxpc3RhIGVzdGl2ZXIgdmF6aWEuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgICBwdWJsaWMgd29ya3NwYWNlczogV29ya3NwYWNlW10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBSw7N0dWxvIGV4aWJpZG8gbm8gYm90w6NvIGRlIGHDp8OjbyBsb2NhbGl6YWRvIG5vIHJvZGFww6kgZG8gZHJvcGRvd24uXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgJ0FkaWNpb25hcidcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBmb290ZXJCdXR0b25MYWJlbCA9ICdBZGljaW9uYXInO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnRyb2xhIGEgdmlzaWJpbGlkYWRlIGRvIGJvdMOjbyBkZSBhw6fDo28gbm8gcm9kYXDDqSBkbyBkcm9wZG93bi5cclxuICAgICAqIFF1YW5kbyBgZmFsc2VgLCBvIGJvdMOjbyBuw6NvIMOpIHJlbmRlcml6YWRvLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IHRydWVcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaG93Rm9vdGVyQnV0dG9uID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBRdWFuZG8gYHRydWVgLCBvIGNvbXBvbmVudGUgZmljYSBkZXNhYmlsaXRhZG86IG7Do28gYWJyZSBvIGRyb3Bkb3duLFxyXG4gICAgICogbsOjbyBlbWl0ZSBldmVudG9zIGUgZmljYSBpbmFjZXNzw612ZWwgdmlhIHRlY2xhZG8gKGB0YWJpbmRleCA9IC0xYCkuXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIG8gdXN1w6FyaW8gY2xpY2Egbm8gYm90w6NvIGRlIGHDp8OjbyBkbyByb2RhcMOpIGRvIGRyb3Bkb3duLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBmb290ZXJCdXR0b25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIG8gdXN1w6FyaW8gc2VsZWNpb25hIHVtIHdvcmtzcGFjZSBkYSBsaXN0YS5cclxuICAgICAqIFJldG9ybmEgbyBvYmpldG8gYFdvcmtzcGFjZWAgc2VsZWNpb25hZG8uXHJcbiAgICAgKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8V29ya3NwYWNlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgICBAVmlld0NoaWxkcmVuKCdsaXN0SXRlbScpXHJcbiAgICBwdWJsaWMgbGlzdEl0ZW1zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBwdWJsaWMgZ2V0IG9wZW4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZW47XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBvcGVuKG9wZW46IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLl9vcGVuID0gb3BlbjtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgICAgaWYgKG9wZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FsY3VsYXRlTGlzdE1heEhlaWdodCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGVpZ2h0ID0gMDtcclxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW1JbmRleCA9IDA7XHJcbiAgICBwdWJsaWMgY3VycmVudEl0ZW1JbmRleCA9IDA7XHJcblxyXG4gICAgcHJpdmF0ZSBfb3BlbiA9IGZhbHNlO1xyXG5cclxuICAgIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXHJcbiAgICBwdWJsaWMgdGFiaW5kZXggPSAwO1xyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcclxuICAgIHB1YmxpYyBvbkNsaWNrb3V0KGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcclxuICAgIHB1YmxpYyBvbktleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJyAnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm9wZW4pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHdvcmtzcGFjZSA9IHRoaXMud29ya3NwYWNlc1t0aGlzLnNlbGVjdGVkSXRlbUluZGV4XTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAod29ya3NwYWNlLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSB0aGlzLmN1cnJlbnRJdGVtSW5kZXg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy53b3Jrc3BhY2VzW3RoaXMuc2VsZWN0ZWRJdGVtSW5kZXhdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEl0ZW1JbmRleCA8IHRoaXMud29ya3NwYWNlcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRJdGVtSW5kZXgrKztcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Njcm9sbFRvQ3VycmVudEl0ZW0oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEl0ZW1JbmRleCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEl0ZW1JbmRleC0tO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2Nyb2xsVG9DdXJyZW50SXRlbSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRhYmluZGV4ID0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2YWxpZGF0aW9ucygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMud29ya3NwYWNlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXb3Jrc3BhY2VzIGxpc3QgaXMgZW1wdHkuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBidXR0b25PbkJsdXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50SXRlbUluZGV4ID0gdGhpcy5zZWxlY3RlZEl0ZW1JbmRleDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25TZWxlY3RJdGVtKHdvcmtzcGFjZTogV29ya3NwYWNlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHdvcmtzcGFjZS5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gdGhpcy53b3Jrc3BhY2VzLmluZGV4T2Yod29ya3NwYWNlKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRJdGVtSW5kZXggPSB0aGlzLnNlbGVjdGVkSXRlbUluZGV4O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuZW1pdCh3b3Jrc3BhY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkZvb3RlckJ1dHRvbkNsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZm9vdGVyQnV0dG9uQ2xpY2tlZC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfY2FsY3VsYXRlTGlzdE1heEhlaWdodCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB3b3Jrc3BhY2VMaXN0UmVmID0gdGhpcy5lUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI3dvcmtzcGFjZS1saXN0Jyk7XHJcbiAgICAgICAgY29uc3QgeyB0b3AgfSA9IHdvcmtzcGFjZUxpc3RSZWYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcblxyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gdG9wIC0gMjAgLSAodGhpcy5zaG93Rm9vdGVyQnV0dG9uID8gNjQgOiAwKTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zY3JvbGxUb0N1cnJlbnRJdGVtKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gdGhpcy5saXN0SXRlbXM/LnRvQXJyYXkoKVt0aGlzLmN1cnJlbnRJdGVtSW5kZXhdO1xyXG4gICAgICAgIGlmIChjdXJyZW50SXRlbSkge1xyXG4gICAgICAgICAgICBjdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ25lYXJlc3QnIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8ZGl2XHJcbiAgICBjbGFzcz1cIndvcmtzcGFjZS1zd2l0Y2hcIlxyXG4gICAgW25nQ2xhc3NdPVwieyAnd29ya3NwYWNlLXN3aXRjaC0tZGlzYWJsZWQnOiBkaXNhYmxlZCB9XCJcclxuICAgIChibHVyKT1cImJ1dHRvbk9uQmx1cigpXCJcclxuPlxyXG4gICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiYnV0dG9uXCJcclxuICAgICAgICAoY2xpY2spPVwib3BlbiA9ICFvcGVuXCJcclxuICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCI+e3sgd29ya3NwYWNlc1tzZWxlY3RlZEl0ZW1JbmRleF0udGl0bGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VidGl0bGVcIj57eyB3b3Jrc3BhY2VzW3NlbGVjdGVkSXRlbUluZGV4XS5zdWJ0aXRsZSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbnNcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYXMgZmEtY2hldnJvbi11cFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYXMgZmEtY2hldnJvbi1kb3duXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBAaWYgKCFkaXNhYmxlZCAmJiBvcGVuKSB7XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3AtcGFuZWxcIj5cclxuICAgICAgICAgICAgPHVsXHJcbiAgICAgICAgICAgICAgICBpZD1cIndvcmtzcGFjZS1saXN0XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwid29ya3NwYWNlLWxpc3RcIlxyXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnbWF4LWhlaWdodCc6IGhlaWdodCArICdweCcgfVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIEBmb3IgKHdvcmtzcGFjZSBvZiB3b3Jrc3BhY2VzOyB0cmFjayB3b3Jrc3BhY2UuaWQ7IGxldCBpID0gJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICNsaXN0SXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIndvcmtzcGFjZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3b3Jrc3BhY2UtLWZvY3VzZWQnOiBpID09PSBjdXJyZW50SXRlbUluZGV4ICYmICF3b3Jrc3BhY2UuZGlzYWJsZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd29ya3NwYWNlLS1kaXNhYmxlZCc6IHdvcmtzcGFjZS5kaXNhYmxlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdEl0ZW0od29ya3NwYWNlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPnt7IHdvcmtzcGFjZS50aXRsZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VidGl0bGVcIj57eyB3b3Jrc3BhY2Uuc3VidGl0bGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGkgPT09IHNlbGVjdGVkSXRlbUluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFjdGl2ZS1pY29uIGZhcyBmYS1jaGVja1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIEBpZiAoc2hvd0Zvb3RlckJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb290ZXJfX2J1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkZvb3RlckJ1dHRvbkNsaWNrKClcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXJfX2J1dHRvbl9faWNvbiBmYXMgZmEtcGx1c1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb290ZXJfX2J1dHRvbl9fdGl0bGVcIj57eyBmb290ZXJCdXR0b25MYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbjwvZGl2PlxyXG4iXX0=
@@ -152,7 +152,7 @@ class AccordionPanelComponent {
152
152
  }
153
153
  }
154
154
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AccordionPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
155
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AccordionPanelComponent, isStandalone: true, selector: "s-accordion-panel", inputs: { header: "header", badgeConfig: "badgeConfig", buttons: "buttons", disabled: "disabled", switchControl: "switchControl", validationMessage: "validationMessage", cache: "cache", validationMessageIcon: "validationMessageIcon", validationMessageIconColor: "validationMessageIconColor" }, outputs: { panelOpened: "panelOpened", panelClosed: "panelClosed" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"accordion-panel border-b border-grayscale-30\"\n [class.accordion-panel--open]=\"isOpen\"\n [class.accordion-panel--disabled]=\"disabled\"\n>\n <div\n class=\"header flex select-none items-center justify-between border-grayscale-30 bg-grayscale-0 p-4\"\n [class.bg-grayscale-10]=\"isOpen\"\n [class.border-b]=\"isOpen\"\n [class.cursor-pointer]=\"!disabled\"\n [class.cursor-auto]=\"disabled\"\n >\n <div\n class=\"header__trigger flex items-center flex-1 flex-nowrap focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary focus-visible:[outline-offset:-2px]\"\n [class.cursor-pointer]=\"!disabled\"\n [class.cursor-auto]=\"disabled\"\n role=\"button\"\n [tabindex]=\"disabled ? -1 : 0\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-controls]=\"'accordion-panel-content-' + panelId\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"onTabClick()\"\n (keydown)=\"onHeaderKeydown($event)\"\n >\n <span\n class=\"icon fas text-base mr-3\"\n [class.fa-minus]=\"isOpen\"\n [class.fa-plus]=\"!isOpen\"\n [class.text-grayscale-90]=\"!disabled\"\n [class.text-grayscale-30]=\"disabled\"\n aria-hidden=\"true\"\n >\n </span>\n @if (validationMessage) {\n <span\n class=\"exclamation-icon text-base mr-3\"\n [class]=\"validationMessageIcon\"\n [sTooltip]=\"validationMessage\"\n [class.exclamation-icon-red]=\"validationMessageIconColor === 'Red'\"\n [class.text-criticality-red]=\"validationMessageIconColor === 'Red'\"\n [class.exclamation-icon-orange]=\"validationMessageIconColor === 'Orange'\"\n [class.text-criticality-orange]=\"validationMessageIconColor === 'Orange'\"\n [class.exclamation-icon-yellow]=\"validationMessageIconColor === 'Yellow'\"\n [class.text-criticality-yellow]=\"validationMessageIconColor === 'Yellow'\"\n [class.exclamation-icon-green]=\"validationMessageIconColor === 'Green'\"\n [class.text-criticality-green]=\"validationMessageIconColor === 'Green'\"\n [class.exclamation-icon-blue]=\"validationMessageIconColor === 'Blue'\"\n [class.text-primary]=\"validationMessageIconColor === 'Blue'\"\n [class.opacity-50]=\"disabled\"\n aria-hidden=\"true\"\n >\n </span>\n }\n <span\n class=\"title font-open-sans text-sm font-bold uppercase leading-normal\"\n [class.text-grayscale-30]=\"disabled\"\n [id]=\"'accordion-panel-header-' + panelId\"\n >{{ header }}</span\n >\n </div>\n <div class=\"header__controls flex items-center ml-4\">\n @if (badgeConfig) {\n <s-badge\n [color]=\"badgeConfig.color\"\n [text]=\"badgeConfig.text\"\n ></s-badge>\n }\n\n @for (button of buttons; track button.icon) {\n <button\n class=\"icon-button text-base ml-3 p-1 border-0 bg-transparent\"\n [class.text-grayscale-90]=\"!disabled\"\n [class.text-grayscale-30]=\"disabled\"\n [class.cursor-pointer]=\"!disabled\"\n [class.cursor-auto]=\"disabled\"\n [ngClass]=\"button.icon\"\n [attr.aria-label]=\"button.label\"\n (click)=\"onIconButtonsClick($event, button.onClick)\"\n ></button>\n }\n\n @if (switchControl) {\n <s-switch\n class=\"switch pl-4\"\n [formControl]=\"switchControl\"\n (click)=\"$event.stopPropagation()\"\n >\n </s-switch>\n }\n </div>\n </div>\n\n @if (cache) {\n <div\n class=\"content bg-grayscale-0 overflow-hidden\"\n role=\"region\"\n [attr.aria-labelledby]=\"'accordion-panel-header-' + panelId\"\n [id]=\"'accordion-panel-content-' + panelId\"\n [@cacheAnimation]=\"isOpen\"\n [@.disabled]=\"isContentAnimationDisabled\"\n (@cacheAnimation.start)=\"onContentAnimationStart()\"\n (@cacheAnimation.done)=\"onContentAnimationDone()\"\n >\n <div class=\"content-container m-5\">\n <ng-container [ngTemplateOutlet]=\"panelContent\"></ng-container>\n </div>\n </div>\n } @else {\n @if (isOpen) {\n <div\n class=\"content bg-grayscale-0 overflow-hidden\"\n role=\"region\"\n [attr.aria-labelledby]=\"'accordion-panel-header-' + panelId\"\n [id]=\"'accordion-panel-content-' + panelId\"\n @cachelessAnimation\n [@.disabled]=\"isContentAnimationDisabled\"\n (@cachelessAnimation.start)=\"onContentAnimationStart()\"\n (@cachelessAnimation.done)=\"onContentAnimationDone()\"\n >\n <div class=\"content-container m-5\">\n <ng-container [ngTemplateOutlet]=\"panelContent\"></ng-container>\n </div>\n </div>\n }\n }\n</div>\n\n<ng-template #panelContent>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }, { kind: "component", type: BadgeComponent, selector: "s-badge", inputs: ["type", "color", "title", "text", "selectable", "iconClass", "iconPosition", "infoSign", "enableTruncateText"], outputs: ["selected"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: SwitchComponent, selector: "s-switch", inputs: ["readonly", "trueLabel", "falseLabel", "inputId", "label", "inputName", "disabled", "value", "showStatusLabel"], outputs: ["valueChanged"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [
155
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: AccordionPanelComponent, isStandalone: true, selector: "s-accordion-panel", inputs: { header: "header", badgeConfig: "badgeConfig", buttons: "buttons", disabled: "disabled", switchControl: "switchControl", validationMessage: "validationMessage", cache: "cache", validationMessageIcon: "validationMessageIcon", validationMessageIconColor: "validationMessageIconColor" }, outputs: { panelOpened: "panelOpened", panelClosed: "panelClosed" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"accordion-panel border-b border-grayscale-30\"\n [class.accordion-panel--open]=\"isOpen\"\n [class.accordion-panel--disabled]=\"disabled\"\n>\n <div\n class=\"header flex select-none items-center justify-between border-grayscale-30 bg-grayscale-0 p-4\"\n [class.bg-grayscale-10]=\"isOpen\"\n [class.border-b]=\"isOpen\"\n [class.cursor-pointer]=\"!disabled\"\n [class.cursor-auto]=\"disabled\"\n >\n <div\n class=\"header__trigger flex items-center flex-1 flex-nowrap focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--s-focus-ring-color,#0090ff)] focus-visible:[outline-offset:-2px]\"\n [class.cursor-pointer]=\"!disabled\"\n [class.cursor-auto]=\"disabled\"\n role=\"button\"\n [tabindex]=\"disabled ? -1 : 0\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-controls]=\"'accordion-panel-content-' + panelId\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"onTabClick()\"\n (keydown)=\"onHeaderKeydown($event)\"\n >\n <span\n class=\"icon fas text-base mr-3\"\n [class.fa-minus]=\"isOpen\"\n [class.fa-plus]=\"!isOpen\"\n [class.text-grayscale-90]=\"!disabled\"\n [class.text-grayscale-30]=\"disabled\"\n aria-hidden=\"true\"\n >\n </span>\n @if (validationMessage) {\n <span\n class=\"exclamation-icon text-base mr-3\"\n [class]=\"validationMessageIcon\"\n [sTooltip]=\"validationMessage\"\n [class.exclamation-icon-red]=\"validationMessageIconColor === 'Red'\"\n [class.text-criticality-red]=\"validationMessageIconColor === 'Red'\"\n [class.exclamation-icon-orange]=\"validationMessageIconColor === 'Orange'\"\n [class.text-criticality-orange]=\"validationMessageIconColor === 'Orange'\"\n [class.exclamation-icon-yellow]=\"validationMessageIconColor === 'Yellow'\"\n [class.text-criticality-yellow]=\"validationMessageIconColor === 'Yellow'\"\n [class.exclamation-icon-green]=\"validationMessageIconColor === 'Green'\"\n [class.text-criticality-green]=\"validationMessageIconColor === 'Green'\"\n [class.exclamation-icon-blue]=\"validationMessageIconColor === 'Blue'\"\n [class.text-primary]=\"validationMessageIconColor === 'Blue'\"\n [class.opacity-50]=\"disabled\"\n aria-hidden=\"true\"\n >\n </span>\n }\n <span\n class=\"title font-open-sans text-sm font-bold uppercase leading-normal\"\n [class.text-grayscale-30]=\"disabled\"\n [id]=\"'accordion-panel-header-' + panelId\"\n >{{ header }}</span\n >\n </div>\n <div class=\"header__controls flex items-center ml-4\">\n @if (badgeConfig) {\n <s-badge\n [color]=\"badgeConfig.color\"\n [text]=\"badgeConfig.text\"\n ></s-badge>\n }\n\n @for (button of buttons; track button.icon) {\n <button\n class=\"icon-button text-base ml-3 p-1 border-0 bg-transparent rounded-[50%] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[3px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)]\"\n [class.text-grayscale-90]=\"!disabled\"\n [class.text-grayscale-30]=\"disabled\"\n [class.cursor-pointer]=\"!disabled\"\n [class.cursor-auto]=\"disabled\"\n [ngClass]=\"button.icon\"\n [attr.aria-label]=\"button.label\"\n (click)=\"onIconButtonsClick($event, button.onClick)\"\n ></button>\n }\n\n @if (switchControl) {\n <s-switch\n class=\"switch pl-4\"\n [formControl]=\"switchControl\"\n (click)=\"$event.stopPropagation()\"\n >\n </s-switch>\n }\n </div>\n </div>\n\n @if (cache) {\n <div\n class=\"content bg-grayscale-0 overflow-hidden\"\n role=\"region\"\n [attr.aria-labelledby]=\"'accordion-panel-header-' + panelId\"\n [id]=\"'accordion-panel-content-' + panelId\"\n [@cacheAnimation]=\"isOpen\"\n [@.disabled]=\"isContentAnimationDisabled\"\n (@cacheAnimation.start)=\"onContentAnimationStart()\"\n (@cacheAnimation.done)=\"onContentAnimationDone()\"\n >\n <div class=\"content-container m-5\">\n <ng-container [ngTemplateOutlet]=\"panelContent\"></ng-container>\n </div>\n </div>\n } @else {\n @if (isOpen) {\n <div\n class=\"content bg-grayscale-0 overflow-hidden\"\n role=\"region\"\n [attr.aria-labelledby]=\"'accordion-panel-header-' + panelId\"\n [id]=\"'accordion-panel-content-' + panelId\"\n @cachelessAnimation\n [@.disabled]=\"isContentAnimationDisabled\"\n (@cachelessAnimation.start)=\"onContentAnimationStart()\"\n (@cachelessAnimation.done)=\"onContentAnimationDone()\"\n >\n <div class=\"content-container m-5\">\n <ng-container [ngTemplateOutlet]=\"panelContent\"></ng-container>\n </div>\n </div>\n }\n }\n</div>\n\n<ng-template #panelContent>\n <ng-content></ng-content>\n</ng-template>\n", dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }, { kind: "component", type: BadgeComponent, selector: "s-badge", inputs: ["type", "color", "title", "text", "selectable", "iconClass", "iconPosition", "infoSign", "enableTruncateText"], outputs: ["selected"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: SwitchComponent, selector: "s-switch", inputs: ["readonly", "trueLabel", "falseLabel", "inputId", "label", "inputName", "disabled", "value", "showStatusLabel"], outputs: ["valueChanged"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], animations: [
156
156
  trigger('cachelessAnimation', [
157
157
  transition(':enter', [style({ height: '0' }), animate('200ms linear', style({ height: '*' }))]),
158
158
  transition(':leave', [style({ height: '*' }), animate('200ms linear', style({ height: '0' }))]),
@@ -184,7 +184,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
184
184
  FormsModule,
185
185
  ReactiveFormsModule,
186
186
  NgTemplateOutlet,
187
- ], template: "<div\n class=\"accordion-panel border-b border-grayscale-30\"\n [class.accordion-panel--open]=\"isOpen\"\n [class.accordion-panel--disabled]=\"disabled\"\n>\n <div\n class=\"header flex select-none items-center justify-between border-grayscale-30 bg-grayscale-0 p-4\"\n [class.bg-grayscale-10]=\"isOpen\"\n [class.border-b]=\"isOpen\"\n [class.cursor-pointer]=\"!disabled\"\n [class.cursor-auto]=\"disabled\"\n >\n <div\n class=\"header__trigger flex items-center flex-1 flex-nowrap focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary focus-visible:[outline-offset:-2px]\"\n [class.cursor-pointer]=\"!disabled\"\n [class.cursor-auto]=\"disabled\"\n role=\"button\"\n [tabindex]=\"disabled ? -1 : 0\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-controls]=\"'accordion-panel-content-' + panelId\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"onTabClick()\"\n (keydown)=\"onHeaderKeydown($event)\"\n >\n <span\n class=\"icon fas text-base mr-3\"\n [class.fa-minus]=\"isOpen\"\n [class.fa-plus]=\"!isOpen\"\n [class.text-grayscale-90]=\"!disabled\"\n [class.text-grayscale-30]=\"disabled\"\n aria-hidden=\"true\"\n >\n </span>\n @if (validationMessage) {\n <span\n class=\"exclamation-icon text-base mr-3\"\n [class]=\"validationMessageIcon\"\n [sTooltip]=\"validationMessage\"\n [class.exclamation-icon-red]=\"validationMessageIconColor === 'Red'\"\n [class.text-criticality-red]=\"validationMessageIconColor === 'Red'\"\n [class.exclamation-icon-orange]=\"validationMessageIconColor === 'Orange'\"\n [class.text-criticality-orange]=\"validationMessageIconColor === 'Orange'\"\n [class.exclamation-icon-yellow]=\"validationMessageIconColor === 'Yellow'\"\n [class.text-criticality-yellow]=\"validationMessageIconColor === 'Yellow'\"\n [class.exclamation-icon-green]=\"validationMessageIconColor === 'Green'\"\n [class.text-criticality-green]=\"validationMessageIconColor === 'Green'\"\n [class.exclamation-icon-blue]=\"validationMessageIconColor === 'Blue'\"\n [class.text-primary]=\"validationMessageIconColor === 'Blue'\"\n [class.opacity-50]=\"disabled\"\n aria-hidden=\"true\"\n >\n </span>\n }\n <span\n class=\"title font-open-sans text-sm font-bold uppercase leading-normal\"\n [class.text-grayscale-30]=\"disabled\"\n [id]=\"'accordion-panel-header-' + panelId\"\n >{{ header }}</span\n >\n </div>\n <div class=\"header__controls flex items-center ml-4\">\n @if (badgeConfig) {\n <s-badge\n [color]=\"badgeConfig.color\"\n [text]=\"badgeConfig.text\"\n ></s-badge>\n }\n\n @for (button of buttons; track button.icon) {\n <button\n class=\"icon-button text-base ml-3 p-1 border-0 bg-transparent\"\n [class.text-grayscale-90]=\"!disabled\"\n [class.text-grayscale-30]=\"disabled\"\n [class.cursor-pointer]=\"!disabled\"\n [class.cursor-auto]=\"disabled\"\n [ngClass]=\"button.icon\"\n [attr.aria-label]=\"button.label\"\n (click)=\"onIconButtonsClick($event, button.onClick)\"\n ></button>\n }\n\n @if (switchControl) {\n <s-switch\n class=\"switch pl-4\"\n [formControl]=\"switchControl\"\n (click)=\"$event.stopPropagation()\"\n >\n </s-switch>\n }\n </div>\n </div>\n\n @if (cache) {\n <div\n class=\"content bg-grayscale-0 overflow-hidden\"\n role=\"region\"\n [attr.aria-labelledby]=\"'accordion-panel-header-' + panelId\"\n [id]=\"'accordion-panel-content-' + panelId\"\n [@cacheAnimation]=\"isOpen\"\n [@.disabled]=\"isContentAnimationDisabled\"\n (@cacheAnimation.start)=\"onContentAnimationStart()\"\n (@cacheAnimation.done)=\"onContentAnimationDone()\"\n >\n <div class=\"content-container m-5\">\n <ng-container [ngTemplateOutlet]=\"panelContent\"></ng-container>\n </div>\n </div>\n } @else {\n @if (isOpen) {\n <div\n class=\"content bg-grayscale-0 overflow-hidden\"\n role=\"region\"\n [attr.aria-labelledby]=\"'accordion-panel-header-' + panelId\"\n [id]=\"'accordion-panel-content-' + panelId\"\n @cachelessAnimation\n [@.disabled]=\"isContentAnimationDisabled\"\n (@cachelessAnimation.start)=\"onContentAnimationStart()\"\n (@cachelessAnimation.done)=\"onContentAnimationDone()\"\n >\n <div class=\"content-container m-5\">\n <ng-container [ngTemplateOutlet]=\"panelContent\"></ng-container>\n </div>\n </div>\n }\n }\n</div>\n\n<ng-template #panelContent>\n <ng-content></ng-content>\n</ng-template>\n" }]
187
+ ], template: "<div\n class=\"accordion-panel border-b border-grayscale-30\"\n [class.accordion-panel--open]=\"isOpen\"\n [class.accordion-panel--disabled]=\"disabled\"\n>\n <div\n class=\"header flex select-none items-center justify-between border-grayscale-30 bg-grayscale-0 p-4\"\n [class.bg-grayscale-10]=\"isOpen\"\n [class.border-b]=\"isOpen\"\n [class.cursor-pointer]=\"!disabled\"\n [class.cursor-auto]=\"disabled\"\n >\n <div\n class=\"header__trigger flex items-center flex-1 flex-nowrap focus-visible:outline focus-visible:outline-2 focus-visible:outline-[var(--s-focus-ring-color,#0090ff)] focus-visible:[outline-offset:-2px]\"\n [class.cursor-pointer]=\"!disabled\"\n [class.cursor-auto]=\"disabled\"\n role=\"button\"\n [tabindex]=\"disabled ? -1 : 0\"\n [attr.aria-expanded]=\"isOpen\"\n [attr.aria-controls]=\"'accordion-panel-content-' + panelId\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"onTabClick()\"\n (keydown)=\"onHeaderKeydown($event)\"\n >\n <span\n class=\"icon fas text-base mr-3\"\n [class.fa-minus]=\"isOpen\"\n [class.fa-plus]=\"!isOpen\"\n [class.text-grayscale-90]=\"!disabled\"\n [class.text-grayscale-30]=\"disabled\"\n aria-hidden=\"true\"\n >\n </span>\n @if (validationMessage) {\n <span\n class=\"exclamation-icon text-base mr-3\"\n [class]=\"validationMessageIcon\"\n [sTooltip]=\"validationMessage\"\n [class.exclamation-icon-red]=\"validationMessageIconColor === 'Red'\"\n [class.text-criticality-red]=\"validationMessageIconColor === 'Red'\"\n [class.exclamation-icon-orange]=\"validationMessageIconColor === 'Orange'\"\n [class.text-criticality-orange]=\"validationMessageIconColor === 'Orange'\"\n [class.exclamation-icon-yellow]=\"validationMessageIconColor === 'Yellow'\"\n [class.text-criticality-yellow]=\"validationMessageIconColor === 'Yellow'\"\n [class.exclamation-icon-green]=\"validationMessageIconColor === 'Green'\"\n [class.text-criticality-green]=\"validationMessageIconColor === 'Green'\"\n [class.exclamation-icon-blue]=\"validationMessageIconColor === 'Blue'\"\n [class.text-primary]=\"validationMessageIconColor === 'Blue'\"\n [class.opacity-50]=\"disabled\"\n aria-hidden=\"true\"\n >\n </span>\n }\n <span\n class=\"title font-open-sans text-sm font-bold uppercase leading-normal\"\n [class.text-grayscale-30]=\"disabled\"\n [id]=\"'accordion-panel-header-' + panelId\"\n >{{ header }}</span\n >\n </div>\n <div class=\"header__controls flex items-center ml-4\">\n @if (badgeConfig) {\n <s-badge\n [color]=\"badgeConfig.color\"\n [text]=\"badgeConfig.text\"\n ></s-badge>\n }\n\n @for (button of buttons; track button.icon) {\n <button\n class=\"icon-button text-base ml-3 p-1 border-0 bg-transparent rounded-[50%] focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-[3px] focus-visible:outline-[var(--s-focus-ring-color,#0090ff)]\"\n [class.text-grayscale-90]=\"!disabled\"\n [class.text-grayscale-30]=\"disabled\"\n [class.cursor-pointer]=\"!disabled\"\n [class.cursor-auto]=\"disabled\"\n [ngClass]=\"button.icon\"\n [attr.aria-label]=\"button.label\"\n (click)=\"onIconButtonsClick($event, button.onClick)\"\n ></button>\n }\n\n @if (switchControl) {\n <s-switch\n class=\"switch pl-4\"\n [formControl]=\"switchControl\"\n (click)=\"$event.stopPropagation()\"\n >\n </s-switch>\n }\n </div>\n </div>\n\n @if (cache) {\n <div\n class=\"content bg-grayscale-0 overflow-hidden\"\n role=\"region\"\n [attr.aria-labelledby]=\"'accordion-panel-header-' + panelId\"\n [id]=\"'accordion-panel-content-' + panelId\"\n [@cacheAnimation]=\"isOpen\"\n [@.disabled]=\"isContentAnimationDisabled\"\n (@cacheAnimation.start)=\"onContentAnimationStart()\"\n (@cacheAnimation.done)=\"onContentAnimationDone()\"\n >\n <div class=\"content-container m-5\">\n <ng-container [ngTemplateOutlet]=\"panelContent\"></ng-container>\n </div>\n </div>\n } @else {\n @if (isOpen) {\n <div\n class=\"content bg-grayscale-0 overflow-hidden\"\n role=\"region\"\n [attr.aria-labelledby]=\"'accordion-panel-header-' + panelId\"\n [id]=\"'accordion-panel-content-' + panelId\"\n @cachelessAnimation\n [@.disabled]=\"isContentAnimationDisabled\"\n (@cachelessAnimation.start)=\"onContentAnimationStart()\"\n (@cachelessAnimation.done)=\"onContentAnimationDone()\"\n >\n <div class=\"content-container m-5\">\n <ng-container [ngTemplateOutlet]=\"panelContent\"></ng-container>\n </div>\n </div>\n }\n }\n</div>\n\n<ng-template #panelContent>\n <ng-content></ng-content>\n</ng-template>\n" }]
188
188
  }], propDecorators: { header: [{
189
189
  type: Input,
190
190
  args: [{ required: true }]