@seniorsistemas/data-seniorx-core 2.1.0 → 2.2.0

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 (97) hide show
  1. package/core/constants/chips.const.d.ts +1 -0
  2. package/core/constants/combobox.const.d.ts +1 -1
  3. package/core/constants/fileupload.const.d.ts +9 -0
  4. package/core/constants/icon-picker.const.d.ts +1 -0
  5. package/core/constants/picklist.const.d.ts +1 -0
  6. package/core/constants/table.const.d.ts +43 -0
  7. package/core/types/button.type.d.ts +18 -2
  8. package/core/types/fileupload.type.d.ts +17 -0
  9. package/core/types/filters.type.d.ts +4 -0
  10. package/core/types/table-column.type.d.ts +31 -0
  11. package/core/types/table-options.type.d.ts +90 -0
  12. package/core/types/table-shared.type.d.ts +13 -0
  13. package/core/types/table-visual.type.d.ts +23 -0
  14. package/core/types/table.type.d.ts +4 -113
  15. package/core/utils/layout.util.d.ts +4 -0
  16. package/esm2022/core/constants/chips.const.mjs +2 -1
  17. package/esm2022/core/constants/combobox.const.mjs +2 -2
  18. package/esm2022/core/constants/fileupload.const.mjs +10 -0
  19. package/esm2022/core/constants/icon-picker.const.mjs +76 -1
  20. package/esm2022/core/constants/picklist.const.mjs +2 -1
  21. package/esm2022/core/constants/table.const.mjs +53 -6
  22. package/esm2022/core/types/button.type.mjs +1 -1
  23. package/esm2022/core/types/fileupload.type.mjs +2 -0
  24. package/esm2022/core/types/filters.type.mjs +1 -1
  25. package/esm2022/core/types/table-column.type.mjs +2 -0
  26. package/esm2022/core/types/table-options.type.mjs +2 -0
  27. package/esm2022/core/types/table-shared.type.mjs +2 -0
  28. package/esm2022/core/types/table-visual.type.mjs +2 -0
  29. package/esm2022/core/types/table.type.mjs +1 -1
  30. package/esm2022/core/utils/combobox.util.mjs +2 -2
  31. package/esm2022/core/utils/layout.util.mjs +21 -5
  32. package/esm2022/features/accordion/accordion-item.component.mjs +1 -1
  33. package/esm2022/features/badge/badge.component.mjs +1 -1
  34. package/esm2022/features/button/button.component.mjs +76 -11
  35. package/esm2022/features/button/components/button-menu.component.mjs +81 -0
  36. package/esm2022/features/card-list/card/card.component.mjs +3 -3
  37. package/esm2022/features/checkbox/checkbox.component.mjs +3 -3
  38. package/esm2022/features/chips/chips.component.mjs +8 -5
  39. package/esm2022/features/color-picker/color-picker.component.mjs +1 -1
  40. package/esm2022/features/combobox/combobox.component.mjs +17 -4
  41. package/esm2022/features/fileupload/fileupload.component.mjs +311 -0
  42. package/esm2022/features/filters/filters.component.mjs +3 -3
  43. package/esm2022/features/hyperlink/hyperlink.component.mjs +3 -3
  44. package/esm2022/features/icon-picker/icon-picker.component.mjs +34 -7
  45. package/esm2022/features/info-sign/info-sign.component.mjs +1 -1
  46. package/esm2022/features/mask/mask.component.mjs +1 -1
  47. package/esm2022/features/modal/modal.component.mjs +1 -1
  48. package/esm2022/features/number-input/number-input.component.mjs +1 -1
  49. package/esm2022/features/paginator/paginator.component.mjs +3 -3
  50. package/esm2022/features/picklist/picklist.component.mjs +33 -6
  51. package/esm2022/features/row-card-list/row-card/row-card.component.mjs +3 -3
  52. package/esm2022/features/searchbox/searchbox.component.mjs +3 -3
  53. package/esm2022/features/stats-card/stats-card.component.mjs +1 -1
  54. package/esm2022/features/switch/switch.component.mjs +3 -2
  55. package/esm2022/features/table/components/table-actions-menu.component.mjs +86 -0
  56. package/esm2022/features/table/components/table-cell-content.component.mjs +124 -0
  57. package/esm2022/features/table/components/table-sort-indicator.component.mjs +65 -0
  58. package/esm2022/features/table/table.component.mjs +116 -319
  59. package/esm2022/features/table/utils/table-config.util.mjs +35 -0
  60. package/esm2022/features/table/utils/table-data.util.mjs +96 -0
  61. package/esm2022/features/table/utils/table-layout.util.mjs +25 -0
  62. package/esm2022/features/table/utils/table-truncate.pipe.mjs +19 -0
  63. package/esm2022/features/table/utils/table-visual.util.mjs +221 -0
  64. package/esm2022/features/textarea/textarea.component.mjs +1 -1
  65. package/esm2022/features/textbox/textbox.component.mjs +1 -1
  66. package/esm2022/features/tooltip/tooltip.component.mjs +12 -3
  67. package/esm2022/features/visual-sql-editor/visual-sql-editor.component.mjs +2 -2
  68. package/esm2022/locales/en.json +194 -0
  69. package/esm2022/locales/es-CO.json +187 -1
  70. package/esm2022/locales/pt.json +194 -0
  71. package/esm2022/providers/features.provider.mjs +3 -1
  72. package/esm2022/public-api.mjs +3 -1
  73. package/features/button/button.component.d.ts +14 -7
  74. package/features/button/components/button-menu.component.d.ts +25 -0
  75. package/features/chips/chips.component.d.ts +1 -0
  76. package/features/combobox/combobox.component.d.ts +4 -1
  77. package/features/fileupload/fileupload.component.d.ts +66 -0
  78. package/features/icon-picker/icon-picker.component.d.ts +3 -0
  79. package/features/modal/modal.component.d.ts +1 -1
  80. package/features/picklist/picklist.component.d.ts +6 -1
  81. package/features/table/components/table-actions-menu.component.d.ts +12 -0
  82. package/features/table/components/table-cell-content.component.d.ts +41 -0
  83. package/features/table/components/table-sort-indicator.component.d.ts +11 -0
  84. package/features/table/table.component.d.ts +28 -44
  85. package/features/table/utils/table-config.util.d.ts +3 -0
  86. package/features/table/utils/table-data.util.d.ts +10 -0
  87. package/features/table/utils/table-layout.util.d.ts +4 -0
  88. package/features/table/utils/table-truncate.pipe.d.ts +12 -0
  89. package/features/table/utils/table-visual.util.d.ts +21 -0
  90. package/features/tooltip/tooltip.component.d.ts +3 -1
  91. package/fesm2022/seniorsistemas-data-seniorx-core.mjs +3525 -1848
  92. package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
  93. package/package.json +1 -1
  94. package/public-api.d.ts +5 -2
  95. package/src/locales/en.json +194 -0
  96. package/src/locales/es-CO.json +187 -1
  97. package/src/locales/pt.json +194 -0
@@ -1,11 +1,15 @@
1
1
  import { CommonModule } from '@angular/common';
2
2
  import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, HostListener, Input, Output, ViewEncapsulation } from '@angular/core';
3
3
  import { TranslateModule } from '@ngx-translate/core';
4
- import { ButtonModule } from '@seniorsistemas/angular-components/button';
5
4
  import { getDimensionStyles } from '../../core/types/semantics.type';
5
+ import { BadgeComponent } from '../badge/badge.component';
6
+ import { ButtonMenuComponent } from './components/button-menu.component';
7
+ import { PopoverComponent } from '../popover/popover.component';
8
+ import { TooltipComponent } from '../tooltip/tooltip.component';
6
9
  import * as i0 from "@angular/core";
7
- import * as i1 from "@seniorsistemas/angular-components/button";
10
+ import * as i1 from "@angular/common";
8
11
  import * as i2 from "@ngx-translate/core";
12
+ const BUTTON_MENU_PANEL_CLASS = 'sdc-button-menu-popover';
9
13
  export class ButtonComponent {
10
14
  id = 'button-id';
11
15
  label = '';
@@ -51,33 +55,87 @@ export class ButtonComponent {
51
55
  this.rebuildResolvedMenuOptions();
52
56
  }
53
57
  clicked = new EventEmitter();
58
+ menuPanelClass = BUTTON_MENU_PANEL_CLASS;
54
59
  resolvedMenuOptions = [];
60
+ menuOpen = false;
55
61
  get hostWidth() {
56
62
  return this.widthStyle;
57
63
  }
58
64
  get widthStyle() {
59
65
  return String(getDimensionStyles('width', this.width)['width'] ?? 'auto');
60
66
  }
67
+ get hasMenu() {
68
+ return this.resolvedMenuOptions.length > 0;
69
+ }
70
+ get buttonClasses() {
71
+ const customClasses = (this.styleClass ?? '')
72
+ .split(/\s+/)
73
+ .filter(Boolean)
74
+ .reduce((accumulator, className) => {
75
+ accumulator[className] = true;
76
+ return accumulator;
77
+ }, {});
78
+ return {
79
+ ...customClasses,
80
+ 's-button-auxiliary': this.auxiliary,
81
+ 's-button-with-icon': !!this.icon,
82
+ 's-button-with-text': !!this.label,
83
+ 's-button-only-icon': !!this.icon && !this.label && !this.hasMenu,
84
+ 's-button-empty': !this.icon && !this.label,
85
+ 's-button-size-default': this.size === 'default',
86
+ 's-button-size-small': this.size === 'small',
87
+ 's-button-priority-default': this.priority === 'default',
88
+ 's-button-priority-primary': this.priority === 'primary',
89
+ 's-button-priority-secondary': this.priority === 'secondary',
90
+ 's-button-priority-link': this.priority === 'link',
91
+ 's-button-priority-danger': this.priority === 'danger',
92
+ 's-button-multiple': (this.caret && this.hasMenu) || !!this.rightIcon,
93
+ 's-button--slide': this.validateSlideButton(),
94
+ 's-button--rotate-animation': this.isRotateAnimation(),
95
+ 's-button-active': this.menuOpen
96
+ };
97
+ }
61
98
  onHostClick(event) {
62
99
  if (!this.disabled) {
63
100
  return;
64
101
  }
65
- event.preventDefault();
66
- event.stopPropagation();
102
+ if (event.target === event.currentTarget) {
103
+ event.preventDefault();
104
+ event.stopPropagation();
105
+ }
67
106
  }
68
- handleClick(event) {
107
+ handleButtonClick(event) {
69
108
  if (this.disabled) {
70
- event.preventDefault?.();
71
- event.stopPropagation?.();
109
+ event.preventDefault();
110
+ event.stopPropagation();
72
111
  return;
73
112
  }
74
113
  this.clicked.emit(event);
114
+ if (!this.hasMenu) {
115
+ return;
116
+ }
117
+ event.preventDefault();
118
+ event.stopPropagation();
119
+ this.menuOpen = !this.menuOpen;
120
+ }
121
+ handleMenuAction(event) {
122
+ if (event.item.disabled || event.item.divider) {
123
+ return;
124
+ }
125
+ event.item.command?.(event.originalEvent);
126
+ this.menuOpen = false;
127
+ }
128
+ onMenuOpenChange(open) {
129
+ this.menuOpen = open;
75
130
  }
76
131
  rebuildResolvedMenuOptions() {
77
132
  this.resolvedMenuOptions = this.wrapMenuCommands(this.menuOptions);
133
+ this.menuOpen = this.menuOpen && this.resolvedMenuOptions.length > 0;
78
134
  }
79
135
  wrapMenuCommands(items = []) {
80
- return items.map((item) => {
136
+ return items
137
+ .filter((item) => item.visible !== false)
138
+ .map((item) => {
81
139
  const originalCommand = item.command;
82
140
  const submenu = item.submenu?.length ? this.wrapMenuCommands(item.submenu) : undefined;
83
141
  const wrappedItem = {
@@ -109,6 +167,7 @@ export class ButtonComponent {
109
167
  disabled: !!item.disabled,
110
168
  visible: item.visible,
111
169
  dataKey: item.dataKey,
170
+ data: item.data,
112
171
  command: item.command
113
172
  ? (originalEvent) => {
114
173
  item.command?.({
@@ -122,12 +181,18 @@ export class ButtonComponent {
122
181
  };
123
182
  });
124
183
  }
184
+ validateSlideButton() {
185
+ return !!(this.slide && (this.priority === 'default' || this.priority === 'link') && this.label?.length);
186
+ }
187
+ isRotateAnimation() {
188
+ return this.animation === 'rotate';
189
+ }
125
190
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
126
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ButtonComponent, isStandalone: true, selector: "sdc-button", inputs: { id: "id", label: "label", ariaLabel: "ariaLabel", disabled: "disabled", width: "width", priority: "priority", size: "size", type: "type", icon: "icon", rightIcon: "rightIcon", auxiliary: "auxiliary", caret: "caret", tooltip: "tooltip", animation: "animation", slide: "slide", styleClass: "styleClass", badge: "badge", menuOptions: "menuOptions", menuContext: "menuContext", legacyModel: ["model", "legacyModel"] }, outputs: { clicked: "clicked" }, host: { listeners: { "click": "onHostClick($event)" }, properties: { "style.width": "this.hostWidth" } }, ngImport: i0, template: "<div class=\"sdc-button-wrapper\">\n <s-button\n class=\"sdc-button-el\"\n (clicked)=\"handleClick($event)\"\n [disabled]=\"disabled\"\n [id]=\"id\"\n [size]=\"size\"\n [type]=\"type\"\n [priority]=\"priority\"\n [label]=\"label | translate\"\n [iconClass]=\"icon\"\n [rightIconClass]=\"rightIcon\"\n [auxiliary]=\"auxiliary\"\n [caret]=\"caret!\"\n [tooltip]=\"tooltip ? (tooltip | translate) : undefined\"\n [animation]=\"animation!\"\n [slide]=\"slide!\"\n [badge]=\"badge\"\n [styleClass]=\"styleClass!\"\n [menuOptions]=\"resolvedMenuOptions\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel ? (ariaLabel | translate) : (label ? (label | translate) : null)\"\n >\n </s-button>\n</div>\n", styles: [":host{display:inline-block;vertical-align:top}.sdc-button-wrapper,.sdc-button-el{display:block;width:100%}::ng-deep .sdc-button-el button{width:100%;vertical-align:top}::ng-deep .s-button-priority-primary .s-button-icon{color:#fff!important}::ng-deep s-button button:disabled{pointer-events:none;cursor:not-allowed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor"], outputs: ["clicked"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
191
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ButtonComponent, isStandalone: true, selector: "sdc-button", inputs: { id: "id", label: "label", ariaLabel: "ariaLabel", disabled: "disabled", width: "width", priority: "priority", size: "size", type: "type", icon: "icon", rightIcon: "rightIcon", auxiliary: "auxiliary", caret: "caret", tooltip: "tooltip", animation: "animation", slide: "slide", styleClass: "styleClass", badge: "badge", menuOptions: "menuOptions", menuContext: "menuContext", legacyModel: ["model", "legacyModel"] }, outputs: { clicked: "clicked" }, host: { listeners: { "click": "onHostClick($event)" }, properties: { "style.width": "this.hostWidth" } }, ngImport: i0, template: "<ng-template #buttonSurface>\n <sdc-tooltip\n [pTooltip]=\"tooltip ? (tooltip | translate) : null\"\n [fitContent]=\"false\"\n [tooltipDisabled]=\"!tooltip\"\n >\n <div class=\"sdc-button-el\">\n <button\n [id]=\"id\"\n [type]=\"type\"\n class=\"s-button\"\n [ngClass]=\"buttonClasses\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel ? (ariaLabel | translate) : (label ? (label | translate) : null)\"\n [attr.aria-haspopup]=\"hasMenu ? 'menu' : null\"\n [attr.aria-expanded]=\"hasMenu ? menuOpen : null\"\n (click)=\"handleButtonClick($event)\"\n >\n @if (icon) {\n <span\n class=\"s-button-icon\"\n [ngClass]=\"icon\"\n [class.s-button-icon-margin-right]=\"!label && hasMenu\"\n aria-hidden=\"true\"\n ></span>\n }\n\n @if (label) {\n <span\n class=\"s-button-text\"\n [class.s-button-icon-margin-right]=\"!!rightIcon || hasMenu\"\n [class.s-button-icon-margin-left]=\"!!icon\"\n >\n {{ label | translate }}\n </span>\n }\n\n @if (rightIcon) {\n <span class=\"s-button-right-icon\" [ngClass]=\"rightIcon\" aria-hidden=\"true\"></span>\n }\n\n @if ((caret && hasMenu) || hasMenu) {\n <span class=\"menu-options-icon s-button-menu-icon fa fa-fw fa-caret-down\" aria-hidden=\"true\"></span>\n }\n </button>\n </div>\n </sdc-tooltip>\n</ng-template>\n\n<div class=\"sdc-button-wrapper\" [class.sdc-button-wrapper--with-badge]=\"!!badge\">\n @if (hasMenu) {\n <sdc-popover\n [open]=\"menuOpen\"\n [toggleOnTriggerClick]=\"false\"\n [closeOnOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [restoreFocusOnClose]=\"true\"\n [panelClass]=\"menuPanelClass\"\n (openChange)=\"onMenuOpenChange($event)\"\n >\n <div sdc-popover-trigger class=\"sdc-button-trigger\">\n <ng-container [ngTemplateOutlet]=\"buttonSurface\"></ng-container>\n </div>\n\n <div\n sdc-popover-content\n class=\"sdc-button-menu-panel\"\n role=\"menu\"\n [attr.aria-label]=\"ariaLabel ? (ariaLabel | translate) : (label ? (label | translate) : null)\"\n >\n <sdc-button-menu [items]=\"resolvedMenuOptions\" (action)=\"handleMenuAction($event)\"></sdc-button-menu>\n </div>\n </sdc-popover>\n } @else {\n <ng-container [ngTemplateOutlet]=\"buttonSurface\"></ng-container>\n }\n\n @if (badge) {\n <div class=\"badge\">\n <sdc-badge [color]=\"badge.color\" [text]=\"badge.text\" [iconClass]=\"badge.iconClass\"></sdc-badge>\n </div>\n }\n</div>\n", styles: [":host{display:inline-flex;position:relative;vertical-align:top}.sdc-button-wrapper{display:inline-flex;position:relative;width:100%}.sdc-button-wrapper--with-badge{margin-right:-15px}.sdc-button-trigger,.sdc-button-el{display:block;width:100%}.sdc-button-el button{align-items:center;border:1px solid;border-radius:var(--sdc-formfield-border-radius, 4px);color:#fff;cursor:pointer;display:inline-flex;font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);font-size:14px;height:35px;justify-content:center;max-width:100%;min-width:40px;outline:none;overflow:visible;padding:5px 10px;position:relative;text-decoration:none;text-transform:none;transition:background-color .2s ease-out,border-color .2s ease-out,color .2s ease-out;width:100%}.sdc-button-el button:disabled{background-image:none;cursor:text;filter:alpha(opacity=50);opacity:.5;pointer-events:none}.sdc-button-el button.s-button-auxiliary{border-radius:20px}.sdc-button-el button.s-button-size-small{height:25px}.sdc-button-el button.s-button-size-default{height:35px}.sdc-button-el button.s-button-with-text,.sdc-button-el button.s-button-with-icon.s-button-multiple{min-width:80px}.sdc-button-icon,.sdc-button-right-icon,.sdc-button-menu-icon{align-items:center;display:inline-flex;justify-content:center}.s-button-text{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.s-button-menu-icon{right:10px;transition:transform .2s ease-out}.s-button-icon-margin-left{margin-left:10px}.s-button-icon-margin-right{margin-right:10px}.s-button-active .s-button-menu-icon{transform:rotateX(180deg)}.sdc-button-el button.s-button-size-small.s-button-only-icon{max-height:24px;max-width:24px;min-width:24px}.sdc-button-el button.s-button-multiple .s-button-text{align-items:flex-start;display:inline-flex;justify-content:flex-start}.sdc-button-el button.s-button-with-icon .s-button-text{align-items:flex-end;display:inline-flex;justify-content:flex-end}.sdc-button-el button.s-button-priority-primary{background-color:var(--p-primary-color, #428bca);border-color:var(--p-primary-color, #428bca)}.sdc-button-el button.s-button-priority-secondary{background-color:#7892a1;border-color:#7892a1}.sdc-button-el button.s-button-priority-default{background-color:var(--sdc-formfield-default-bg, #ffffff);border-color:var(--sdc-formfield-default-border, #cccccc)}.sdc-button-el button.s-button-priority-link{background-color:transparent;border-color:transparent}.sdc-button-el button.s-button-priority-danger{background-color:#9c3a3a;border-color:#9c3a3a}.sdc-button-el button.s-button-priority-primary .s-button-icon,.sdc-button-el button.s-button-priority-primary .s-button-right-icon,.sdc-button-el button.s-button-priority-primary .s-button-text,.sdc-button-el button.s-button-priority-primary .s-button-menu-icon{color:#fff}.sdc-button-el button.s-button-priority-primary:hover{background-color:#2a6496}.sdc-button-el button.s-button-priority-primary:focus-visible{background-color:#2a6496;border-color:#22dce6}.sdc-button-el button.s-button-priority-secondary .s-button-icon,.sdc-button-el button.s-button-priority-secondary .s-button-right-icon,.sdc-button-el button.s-button-priority-secondary .s-button-text,.sdc-button-el button.s-button-priority-secondary .s-button-menu-icon{color:#fff}.sdc-button-el button.s-button-priority-secondary:hover{background-color:#546b79}.sdc-button-el button.s-button-priority-secondary:focus-visible{background-color:#546b79;border-color:#22dce6}.sdc-button-el button.s-button-priority-default .s-button-icon,.sdc-button-el button.s-button-priority-default .s-button-right-icon,.sdc-button-el button.s-button-priority-default .s-button-text,.sdc-button-el button.s-button-priority-default .s-button-menu-icon{color:var(--sdc-button-icon-default, #333333)}.sdc-button-el button.s-button-priority-default:hover{background-color:#d9d9d9}.sdc-button-el button.s-button-priority-default:focus-visible{background-color:#d9d9d9;border-color:#22dce6}.sdc-button-el button.s-button-priority-link .s-button-icon,.sdc-button-el button.s-button-priority-link .s-button-right-icon,.sdc-button-el button.s-button-priority-link .s-button-text,.sdc-button-el button.s-button-priority-link .s-button-menu-icon{color:var(--p-primary-color, #428bca)}.sdc-button-el button.s-button-priority-link:hover{background-color:transparent}.sdc-button-el button.s-button-priority-link:focus-visible{background-color:transparent;border-color:#22dce6}.sdc-button-el button.s-button-priority-danger .s-button-icon,.sdc-button-el button.s-button-priority-danger .s-button-right-icon,.sdc-button-el button.s-button-priority-danger .s-button-text,.sdc-button-el button.s-button-priority-danger .s-button-menu-icon{color:#fff}.sdc-button-el button.s-button-priority-danger:hover{background-color:#642525}.sdc-button-el button.s-button-priority-danger:focus-visible{background-color:#642525;border-color:#22dce6}.sdc-button-el button.s-button-auxiliary.s-button-only-icon{border-radius:50%}.sdc-button-el button.s-button-with-icon.s-button-with-text.s-button-multiple{min-width:100px}.sdc-button-el button.s-button-multiple.s-button-size-small.s-button-empty{min-width:25px;width:25px}.sdc-button-el button.s-button--slide .s-button-text{opacity:0;position:absolute;width:0}.sdc-button-el button.s-button--slide.s-button-with-text,.sdc-button-el button.s-button--slide.s-button-with-icon.s-button-multiple{min-width:40px}.sdc-button-el button.s-button-priority-primary:hover .s-button-icon,.sdc-button-el button.s-button-priority-primary:hover .s-button-right-icon,.sdc-button-el button.s-button-priority-primary:hover .s-button-text,.sdc-button-el button.s-button-priority-primary:hover .s-button-menu-icon{color:#fff}.sdc-button-el button.s-button-priority-primary:active:not(:disabled),.sdc-button-el button.s-button-priority-primary.s-button-active:not(:disabled){background-color:#245682;border-color:#245682}.sdc-button-el button.s-button-priority-secondary:hover .s-button-icon,.sdc-button-el button.s-button-priority-secondary:hover .s-button-right-icon,.sdc-button-el button.s-button-priority-secondary:hover .s-button-text,.sdc-button-el button.s-button-priority-secondary:hover .s-button-menu-icon{color:#fff}.sdc-button-el button.s-button-priority-secondary:active:not(:disabled),.sdc-button-el button.s-button-priority-secondary.s-button-active:not(:disabled){background-color:#495e6a;border-color:#495e6a}.sdc-button-el button.s-button-priority-default:hover .s-button-icon,.sdc-button-el button.s-button-priority-default:hover .s-button-right-icon,.sdc-button-el button.s-button-priority-default:hover .s-button-text,.sdc-button-el button.s-button-priority-default:hover .s-button-menu-icon{color:var(--sdc-button-icon-default, #333333)}.sdc-button-el button.s-button-priority-default:active:not(:disabled),.sdc-button-el button.s-button-priority-default.s-button-active:not(:disabled){background-color:#ccc;border-color:#ccc}.sdc-button-el button.s-button-priority-link:hover .s-button-icon,.sdc-button-el button.s-button-priority-link:hover .s-button-right-icon,.sdc-button-el button.s-button-priority-link:hover .s-button-text,.sdc-button-el button.s-button-priority-link:hover .s-button-menu-icon,.sdc-button-el button.s-button-priority-link:focus-visible .s-button-icon,.sdc-button-el button.s-button-priority-link:focus-visible .s-button-right-icon,.sdc-button-el button.s-button-priority-link:focus-visible .s-button-text,.sdc-button-el button.s-button-priority-link:focus-visible .s-button-menu-icon{color:#2a6496}.sdc-button-el button.s-button-priority-link:active:not(:disabled),.sdc-button-el button.s-button-priority-link.s-button-active:not(:disabled){background-color:transparent;border-color:transparent}.sdc-button-el button.s-button-priority-danger:active:not(:disabled),.sdc-button-el button.s-button-priority-danger.s-button-active:not(:disabled){background-color:#521e1e;border-color:#521e1e}.sdc-button-el button.s-button--slide:hover .s-button-text{opacity:1;position:relative;transition:1s ease;width:auto}.sdc-button-el button.s-button-priority-link:active:not(:disabled) .s-button-icon,.sdc-button-el button.s-button-priority-link:active:not(:disabled) .s-button-right-icon,.sdc-button-el button.s-button-priority-link:active:not(:disabled) .s-button-text,.sdc-button-el button.s-button-priority-link:active:not(:disabled) .s-button-menu-icon,.sdc-button-el button.s-button-priority-link.s-button-active:not(:disabled) .s-button-icon,.sdc-button-el button.s-button-priority-link.s-button-active:not(:disabled) .s-button-right-icon,.sdc-button-el button.s-button-priority-link.s-button-active:not(:disabled) .s-button-text,.sdc-button-el button.s-button-priority-link.s-button-active:not(:disabled) .s-button-menu-icon{color:#245682}.sdc-button-el button.s-button--slide:hover.s-button--rotate-animation .s-button-icon,.sdc-button-el button.s-button--slide:hover.s-button--rotate-animation .s-button-right-icon{transform:rotate(360deg);transition:1.5s ease}.sdc-button-el button.s-button-with-icon.s-button-multiple:not(.s-button-with-text) .s-button-icon{align-items:center;display:inline-flex;justify-content:center}.badge{bottom:16px;position:relative;right:15px;z-index:99}.menu-options-icon{color:#212533}::ng-deep .sdc-button-menu-popover{min-width:12rem;overflow:visible!important;padding:.25rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: BadgeComponent, selector: "sdc-badge", inputs: ["type", "color", "title", "titleParams", "text", "textParams", "selectable", "disabled", "iconClass", "iconPosition", "infoSign", "ariaLabel", "ariaLabelParams", "infoAriaLabel"], outputs: ["selected"] }, { kind: "component", type: ButtonMenuComponent, selector: "sdc-button-menu", inputs: ["items", "level"], outputs: ["action"] }, { kind: "component", type: PopoverComponent, selector: "sdc-popover", inputs: ["open", "disabled", "toggleOnTriggerClick", "closeOnOutsideClick", "closeOnEscape", "trapFocus", "focusOnOpen", "restoreFocusOnClose", "ariaLabel", "appendTo", "zIndex", "offset", "placement", "role", "matchTriggerWidth", "panelWidth", "panelMinWidth", "panelMaxWidth", "panelMaxHeight", "panelClass"], outputs: ["openChange"] }, { kind: "component", type: TooltipComponent, selector: "sdc-tooltip", inputs: ["pTooltip", "tooltipPosition", "tooltipEvent", "fitContent", "tooltipDisabled", "allowHtml"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
127
192
  }
128
193
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ButtonComponent, decorators: [{
129
194
  type: Component,
130
- args: [{ imports: [CommonModule, ButtonModule, TranslateModule], standalone: true, selector: 'sdc-button', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"sdc-button-wrapper\">\n <s-button\n class=\"sdc-button-el\"\n (clicked)=\"handleClick($event)\"\n [disabled]=\"disabled\"\n [id]=\"id\"\n [size]=\"size\"\n [type]=\"type\"\n [priority]=\"priority\"\n [label]=\"label | translate\"\n [iconClass]=\"icon\"\n [rightIconClass]=\"rightIcon\"\n [auxiliary]=\"auxiliary\"\n [caret]=\"caret!\"\n [tooltip]=\"tooltip ? (tooltip | translate) : undefined\"\n [animation]=\"animation!\"\n [slide]=\"slide!\"\n [badge]=\"badge\"\n [styleClass]=\"styleClass!\"\n [menuOptions]=\"resolvedMenuOptions\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel ? (ariaLabel | translate) : (label ? (label | translate) : null)\"\n >\n </s-button>\n</div>\n", styles: [":host{display:inline-block;vertical-align:top}.sdc-button-wrapper,.sdc-button-el{display:block;width:100%}::ng-deep .sdc-button-el button{width:100%;vertical-align:top}::ng-deep .s-button-priority-primary .s-button-icon{color:#fff!important}::ng-deep s-button button:disabled{pointer-events:none;cursor:not-allowed}\n"] }]
195
+ args: [{ imports: [CommonModule, TranslateModule, BadgeComponent, ButtonMenuComponent, PopoverComponent, TooltipComponent], standalone: true, selector: 'sdc-button', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<ng-template #buttonSurface>\n <sdc-tooltip\n [pTooltip]=\"tooltip ? (tooltip | translate) : null\"\n [fitContent]=\"false\"\n [tooltipDisabled]=\"!tooltip\"\n >\n <div class=\"sdc-button-el\">\n <button\n [id]=\"id\"\n [type]=\"type\"\n class=\"s-button\"\n [ngClass]=\"buttonClasses\"\n [disabled]=\"disabled\"\n [attr.aria-disabled]=\"disabled\"\n [attr.aria-label]=\"ariaLabel ? (ariaLabel | translate) : (label ? (label | translate) : null)\"\n [attr.aria-haspopup]=\"hasMenu ? 'menu' : null\"\n [attr.aria-expanded]=\"hasMenu ? menuOpen : null\"\n (click)=\"handleButtonClick($event)\"\n >\n @if (icon) {\n <span\n class=\"s-button-icon\"\n [ngClass]=\"icon\"\n [class.s-button-icon-margin-right]=\"!label && hasMenu\"\n aria-hidden=\"true\"\n ></span>\n }\n\n @if (label) {\n <span\n class=\"s-button-text\"\n [class.s-button-icon-margin-right]=\"!!rightIcon || hasMenu\"\n [class.s-button-icon-margin-left]=\"!!icon\"\n >\n {{ label | translate }}\n </span>\n }\n\n @if (rightIcon) {\n <span class=\"s-button-right-icon\" [ngClass]=\"rightIcon\" aria-hidden=\"true\"></span>\n }\n\n @if ((caret && hasMenu) || hasMenu) {\n <span class=\"menu-options-icon s-button-menu-icon fa fa-fw fa-caret-down\" aria-hidden=\"true\"></span>\n }\n </button>\n </div>\n </sdc-tooltip>\n</ng-template>\n\n<div class=\"sdc-button-wrapper\" [class.sdc-button-wrapper--with-badge]=\"!!badge\">\n @if (hasMenu) {\n <sdc-popover\n [open]=\"menuOpen\"\n [toggleOnTriggerClick]=\"false\"\n [closeOnOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [restoreFocusOnClose]=\"true\"\n [panelClass]=\"menuPanelClass\"\n (openChange)=\"onMenuOpenChange($event)\"\n >\n <div sdc-popover-trigger class=\"sdc-button-trigger\">\n <ng-container [ngTemplateOutlet]=\"buttonSurface\"></ng-container>\n </div>\n\n <div\n sdc-popover-content\n class=\"sdc-button-menu-panel\"\n role=\"menu\"\n [attr.aria-label]=\"ariaLabel ? (ariaLabel | translate) : (label ? (label | translate) : null)\"\n >\n <sdc-button-menu [items]=\"resolvedMenuOptions\" (action)=\"handleMenuAction($event)\"></sdc-button-menu>\n </div>\n </sdc-popover>\n } @else {\n <ng-container [ngTemplateOutlet]=\"buttonSurface\"></ng-container>\n }\n\n @if (badge) {\n <div class=\"badge\">\n <sdc-badge [color]=\"badge.color\" [text]=\"badge.text\" [iconClass]=\"badge.iconClass\"></sdc-badge>\n </div>\n }\n</div>\n", styles: [":host{display:inline-flex;position:relative;vertical-align:top}.sdc-button-wrapper{display:inline-flex;position:relative;width:100%}.sdc-button-wrapper--with-badge{margin-right:-15px}.sdc-button-trigger,.sdc-button-el{display:block;width:100%}.sdc-button-el button{align-items:center;border:1px solid;border-radius:var(--sdc-formfield-border-radius, 4px);color:#fff;cursor:pointer;display:inline-flex;font-family:var(--sdc-font-family, \"Open Sans\", sans-serif);font-size:14px;height:35px;justify-content:center;max-width:100%;min-width:40px;outline:none;overflow:visible;padding:5px 10px;position:relative;text-decoration:none;text-transform:none;transition:background-color .2s ease-out,border-color .2s ease-out,color .2s ease-out;width:100%}.sdc-button-el button:disabled{background-image:none;cursor:text;filter:alpha(opacity=50);opacity:.5;pointer-events:none}.sdc-button-el button.s-button-auxiliary{border-radius:20px}.sdc-button-el button.s-button-size-small{height:25px}.sdc-button-el button.s-button-size-default{height:35px}.sdc-button-el button.s-button-with-text,.sdc-button-el button.s-button-with-icon.s-button-multiple{min-width:80px}.sdc-button-icon,.sdc-button-right-icon,.sdc-button-menu-icon{align-items:center;display:inline-flex;justify-content:center}.s-button-text{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.s-button-menu-icon{right:10px;transition:transform .2s ease-out}.s-button-icon-margin-left{margin-left:10px}.s-button-icon-margin-right{margin-right:10px}.s-button-active .s-button-menu-icon{transform:rotateX(180deg)}.sdc-button-el button.s-button-size-small.s-button-only-icon{max-height:24px;max-width:24px;min-width:24px}.sdc-button-el button.s-button-multiple .s-button-text{align-items:flex-start;display:inline-flex;justify-content:flex-start}.sdc-button-el button.s-button-with-icon .s-button-text{align-items:flex-end;display:inline-flex;justify-content:flex-end}.sdc-button-el button.s-button-priority-primary{background-color:var(--p-primary-color, #428bca);border-color:var(--p-primary-color, #428bca)}.sdc-button-el button.s-button-priority-secondary{background-color:#7892a1;border-color:#7892a1}.sdc-button-el button.s-button-priority-default{background-color:var(--sdc-formfield-default-bg, #ffffff);border-color:var(--sdc-formfield-default-border, #cccccc)}.sdc-button-el button.s-button-priority-link{background-color:transparent;border-color:transparent}.sdc-button-el button.s-button-priority-danger{background-color:#9c3a3a;border-color:#9c3a3a}.sdc-button-el button.s-button-priority-primary .s-button-icon,.sdc-button-el button.s-button-priority-primary .s-button-right-icon,.sdc-button-el button.s-button-priority-primary .s-button-text,.sdc-button-el button.s-button-priority-primary .s-button-menu-icon{color:#fff}.sdc-button-el button.s-button-priority-primary:hover{background-color:#2a6496}.sdc-button-el button.s-button-priority-primary:focus-visible{background-color:#2a6496;border-color:#22dce6}.sdc-button-el button.s-button-priority-secondary .s-button-icon,.sdc-button-el button.s-button-priority-secondary .s-button-right-icon,.sdc-button-el button.s-button-priority-secondary .s-button-text,.sdc-button-el button.s-button-priority-secondary .s-button-menu-icon{color:#fff}.sdc-button-el button.s-button-priority-secondary:hover{background-color:#546b79}.sdc-button-el button.s-button-priority-secondary:focus-visible{background-color:#546b79;border-color:#22dce6}.sdc-button-el button.s-button-priority-default .s-button-icon,.sdc-button-el button.s-button-priority-default .s-button-right-icon,.sdc-button-el button.s-button-priority-default .s-button-text,.sdc-button-el button.s-button-priority-default .s-button-menu-icon{color:var(--sdc-button-icon-default, #333333)}.sdc-button-el button.s-button-priority-default:hover{background-color:#d9d9d9}.sdc-button-el button.s-button-priority-default:focus-visible{background-color:#d9d9d9;border-color:#22dce6}.sdc-button-el button.s-button-priority-link .s-button-icon,.sdc-button-el button.s-button-priority-link .s-button-right-icon,.sdc-button-el button.s-button-priority-link .s-button-text,.sdc-button-el button.s-button-priority-link .s-button-menu-icon{color:var(--p-primary-color, #428bca)}.sdc-button-el button.s-button-priority-link:hover{background-color:transparent}.sdc-button-el button.s-button-priority-link:focus-visible{background-color:transparent;border-color:#22dce6}.sdc-button-el button.s-button-priority-danger .s-button-icon,.sdc-button-el button.s-button-priority-danger .s-button-right-icon,.sdc-button-el button.s-button-priority-danger .s-button-text,.sdc-button-el button.s-button-priority-danger .s-button-menu-icon{color:#fff}.sdc-button-el button.s-button-priority-danger:hover{background-color:#642525}.sdc-button-el button.s-button-priority-danger:focus-visible{background-color:#642525;border-color:#22dce6}.sdc-button-el button.s-button-auxiliary.s-button-only-icon{border-radius:50%}.sdc-button-el button.s-button-with-icon.s-button-with-text.s-button-multiple{min-width:100px}.sdc-button-el button.s-button-multiple.s-button-size-small.s-button-empty{min-width:25px;width:25px}.sdc-button-el button.s-button--slide .s-button-text{opacity:0;position:absolute;width:0}.sdc-button-el button.s-button--slide.s-button-with-text,.sdc-button-el button.s-button--slide.s-button-with-icon.s-button-multiple{min-width:40px}.sdc-button-el button.s-button-priority-primary:hover .s-button-icon,.sdc-button-el button.s-button-priority-primary:hover .s-button-right-icon,.sdc-button-el button.s-button-priority-primary:hover .s-button-text,.sdc-button-el button.s-button-priority-primary:hover .s-button-menu-icon{color:#fff}.sdc-button-el button.s-button-priority-primary:active:not(:disabled),.sdc-button-el button.s-button-priority-primary.s-button-active:not(:disabled){background-color:#245682;border-color:#245682}.sdc-button-el button.s-button-priority-secondary:hover .s-button-icon,.sdc-button-el button.s-button-priority-secondary:hover .s-button-right-icon,.sdc-button-el button.s-button-priority-secondary:hover .s-button-text,.sdc-button-el button.s-button-priority-secondary:hover .s-button-menu-icon{color:#fff}.sdc-button-el button.s-button-priority-secondary:active:not(:disabled),.sdc-button-el button.s-button-priority-secondary.s-button-active:not(:disabled){background-color:#495e6a;border-color:#495e6a}.sdc-button-el button.s-button-priority-default:hover .s-button-icon,.sdc-button-el button.s-button-priority-default:hover .s-button-right-icon,.sdc-button-el button.s-button-priority-default:hover .s-button-text,.sdc-button-el button.s-button-priority-default:hover .s-button-menu-icon{color:var(--sdc-button-icon-default, #333333)}.sdc-button-el button.s-button-priority-default:active:not(:disabled),.sdc-button-el button.s-button-priority-default.s-button-active:not(:disabled){background-color:#ccc;border-color:#ccc}.sdc-button-el button.s-button-priority-link:hover .s-button-icon,.sdc-button-el button.s-button-priority-link:hover .s-button-right-icon,.sdc-button-el button.s-button-priority-link:hover .s-button-text,.sdc-button-el button.s-button-priority-link:hover .s-button-menu-icon,.sdc-button-el button.s-button-priority-link:focus-visible .s-button-icon,.sdc-button-el button.s-button-priority-link:focus-visible .s-button-right-icon,.sdc-button-el button.s-button-priority-link:focus-visible .s-button-text,.sdc-button-el button.s-button-priority-link:focus-visible .s-button-menu-icon{color:#2a6496}.sdc-button-el button.s-button-priority-link:active:not(:disabled),.sdc-button-el button.s-button-priority-link.s-button-active:not(:disabled){background-color:transparent;border-color:transparent}.sdc-button-el button.s-button-priority-danger:active:not(:disabled),.sdc-button-el button.s-button-priority-danger.s-button-active:not(:disabled){background-color:#521e1e;border-color:#521e1e}.sdc-button-el button.s-button--slide:hover .s-button-text{opacity:1;position:relative;transition:1s ease;width:auto}.sdc-button-el button.s-button-priority-link:active:not(:disabled) .s-button-icon,.sdc-button-el button.s-button-priority-link:active:not(:disabled) .s-button-right-icon,.sdc-button-el button.s-button-priority-link:active:not(:disabled) .s-button-text,.sdc-button-el button.s-button-priority-link:active:not(:disabled) .s-button-menu-icon,.sdc-button-el button.s-button-priority-link.s-button-active:not(:disabled) .s-button-icon,.sdc-button-el button.s-button-priority-link.s-button-active:not(:disabled) .s-button-right-icon,.sdc-button-el button.s-button-priority-link.s-button-active:not(:disabled) .s-button-text,.sdc-button-el button.s-button-priority-link.s-button-active:not(:disabled) .s-button-menu-icon{color:#245682}.sdc-button-el button.s-button--slide:hover.s-button--rotate-animation .s-button-icon,.sdc-button-el button.s-button--slide:hover.s-button--rotate-animation .s-button-right-icon{transform:rotate(360deg);transition:1.5s ease}.sdc-button-el button.s-button-with-icon.s-button-multiple:not(.s-button-with-text) .s-button-icon{align-items:center;display:inline-flex;justify-content:center}.badge{bottom:16px;position:relative;right:15px;z-index:99}.menu-options-icon{color:#212533}::ng-deep .sdc-button-menu-popover{min-width:12rem;overflow:visible!important;padding:.25rem}\n"] }]
131
196
  }], propDecorators: { id: [{
132
197
  type: Input
133
198
  }], label: [{
@@ -178,4 +243,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
178
243
  type: HostListener,
179
244
  args: ['click', ['$event']]
180
245
  }] } });
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvZmVhdHVyZXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2J1dHRvbi9idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQXFCLFlBQVksRUFBa0IsTUFBTSwyQ0FBMkMsQ0FBQztBQUk1RyxPQUFPLEVBQXFCLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7Ozs7QUFXeEYsTUFBTSxPQUFPLGVBQWU7SUFDakIsRUFBRSxHQUFHLFdBQVcsQ0FBQztJQUNqQixLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsU0FBUyxDQUFVO0lBQ25CLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFDakIsS0FBSyxHQUFjLE1BQU0sQ0FBQztJQUMxQixRQUFRLEdBQW1CLFNBQVMsQ0FBQztJQUNyQyxJQUFJLEdBQWUsU0FBUyxDQUFDO0lBQzdCLElBQUksR0FBVyxRQUFRLENBQUM7SUFDeEIsSUFBSSxDQUFVO0lBQ2QsU0FBUyxDQUFVO0lBQ25CLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNiLE9BQU8sQ0FBVTtJQUNqQixTQUFTLENBQVk7SUFDckIsS0FBSyxDQUFXO0lBQ2hCLFVBQVUsQ0FBVTtJQUNwQixLQUFLLENBQXFCO0lBRTNC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QUNMLENBQUM7d0dBN0lVLGVBQWU7NEZBQWYsZUFBZSwwbkJDM0I1Qix3d0JBeUJBLHNYRE5ZLFlBQVksOEJBQUUsWUFBWSxzV0FBRSxlQUFlOzs0RkFRMUMsZUFBZTtrQkFUM0IsU0FBUzs4QkFDQyxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsZUFBZSxDQUFDLGNBQzFDLElBQUksWUFDTixZQUFZLG1CQUdMLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLFFBQVE7OEJBR2hDLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQU9GLFdBQVc7c0JBRGQsS0FBSztnQkFXRixXQUFXO3NCQURkLEtBQUs7Z0JBV0YsV0FBVztzQkFEZCxLQUFLO3VCQUFDLE9BQU87Z0JBV0osT0FBTztzQkFBaEIsTUFBTTtnQkFLTyxTQUFTO3NCQUR0QixXQUFXO3VCQUFDLGFBQWE7Z0JBVWhCLFdBQVc7c0JBRHBCLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJ1dHRvbkJhZGdlQ29uZmlnLCBCdXR0b25Nb2R1bGUsIEJ1dHRvblByaW9yaXR5IH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgVGllcmVkTWVudUl0ZW1EYXRhIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy90aWVyZWQtbWVudSc7XG5cbmltcG9ydCB7IEJ1dHRvbkxlZ2FjeU1lbnVJdGVtLCBCdXR0b25NZW51Q29tbWFuZFBheWxvYWQsIEJ1dHRvblNpemUgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL2J1dHRvbi50eXBlJztcbmltcG9ydCB7IEJ1dHRvbiwgRGltZW5zaW9uLCBnZXREaW1lbnNpb25TdHlsZXMgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3NlbWFudGljcy50eXBlJztcblxuQENvbXBvbmVudCh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEJ1dHRvbk1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdzZGMtYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2J1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2J1dHRvbi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWRcbn0pXG5leHBvcnQgY2xhc3MgQnV0dG9uQ29tcG9uZW50IHtcbiAgQElucHV0KCkgaWQgPSAnYnV0dG9uLWlkJztcbiAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgQElucHV0KCkgYXJpYUxhYmVsPzogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSB3aWR0aDogRGltZW5zaW9uID0gJ2F1dG8nO1xuICBASW5wdXQoKSBwcmlvcml0eTogQnV0dG9uUHJpb3JpdHkgPSAncHJpbWFyeSc7XG4gIEBJbnB1dCgpIHNpemU6IEJ1dHRvblNpemUgPSAnZGVmYXVsdCc7XG4gIEBJbnB1dCgpIHR5cGU6IEJ1dHRvbiA9ICdidXR0b24nO1xuICBASW5wdXQoKSBpY29uPzogc3RyaW5nO1xuICBASW5wdXQoKSByaWdodEljb24/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGF1eGlsaWFyeSA9IGZhbHNlO1xuICBASW5wdXQoKSBjYXJldCA9IHRydWU7XG4gIEBJbnB1dCgpIHRvb2x0aXA/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFuaW1hdGlvbj86ICdyb3RhdGUnO1xuICBASW5wdXQoKSBzbGlkZT86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHN0eWxlQ2xhc3M/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJhZGdlPzogQnV0dG9uQmFkZ2VDb25maWc7XG5cbiAgcHJpdmF0ZSBfbWVudU9wdGlvbnM6IFRpZXJlZE1lbnVJdGVtRGF0YVtdID0gW107XG4gIHByaXZhdGUgX2xlZ2FjeU1lbnVPcHRpb25zOiBUaWVyZWRNZW51SXRlbURhdGFbXSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9tZW51Q29udGV4dD86IHVua25vd247XG5cbiAgQElucHV0KClcbiAgc2V0IG1lbnVPcHRpb25zKHZhbHVlOiBUaWVyZWRNZW51SXRlbURhdGFbXSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9tZW51T3B0aW9ucyA9IHZhbHVlID8/IFtdO1xuICAgIHRoaXMucmVidWlsZFJlc29sdmVkTWVudU9wdGlvbnMoKTtcbiAgfVxuXG4gIGdldCBtZW51T3B0aW9ucygpOiBUaWVyZWRNZW51SXRlbURhdGFbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2xlZ2FjeU1lbnVPcHRpb25zID8/IHRoaXMuX21lbnVPcHRpb25zO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IG1lbnVDb250ZXh0KHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fbWVudUNvbnRleHQgPSB2YWx1ZTtcbiAgICB0aGlzLnJlYnVpbGRSZXNvbHZlZE1lbnVPcHRpb25zKCk7XG4gIH1cblxuICBnZXQgbWVudUNvbnRleHQoKTogdW5rbm93biB7XG4gICAgcmV0dXJuIHRoaXMuX21lbnVDb250ZXh0O1xuICB9XG5cbiAgQElucHV0KCdtb2RlbCcpXG4gIHNldCBsZWdhY3lNb2RlbCh2YWx1ZTogQnV0dG9uTGVnYWN5TWVudUl0ZW1bXSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9sZWdhY3lNZW51T3B0aW9ucyA9IHRoaXMubWFwTGVnYWN5TWVudSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xlZ2FjeU1lbnVPcHRpb25zID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnJlYnVpbGRSZXNvbHZlZE1lbnVPcHRpb25zKCk7XG4gIH1cblxuICBAT3V0cHV0KCkgY2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVkTWVudU9wdGlvbnM6IFRpZXJlZE1lbnVJdGVtRGF0YVtdID0gW107XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS53aWR0aCcpXG4gIHByb3RlY3RlZCBnZXQgaG9zdFdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMud2lkdGhTdHlsZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgd2lkdGhTdHlsZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBTdHJpbmcoZ2V0RGltZW5zaW9uU3R5bGVzKCd3aWR0aCcsIHRoaXMud2lkdGgpWyd3aWR0aCddID8/ICdhdXRvJyk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIHByb3RlY3RlZCBvbkhvc3RDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0Py4oKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbj8uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jbGlja2VkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWJ1aWxkUmVzb2x2ZWRNZW51T3B0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLnJlc29sdmVkTWVudU9wdGlvbnMgPSB0aGlzLndyYXBNZW51Q29tbWFuZHModGhpcy5tZW51T3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIHdyYXBNZW51Q29tbWFuZHMoaXRlbXM6IFRpZXJlZE1lbnVJdGVtRGF0YVtdID0gW10pOiBUaWVyZWRNZW51SXRlbURhdGFbXSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3Qgb3JpZ2luYWxDb21tYW5kID0gaXRlbS5jb21tYW5kIGFzICgocGF5bG9hZD86IHVua25vd24pID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3Qgc3VibWVudSA9IGl0ZW0uc3VibWVudT8ubGVuZ3RoID8gdGhpcy53cmFwTWVudUNvbW1hbmRzKGl0ZW0uc3VibWVudSkgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGNvbnN0IHdyYXBwZWRJdGVtOiBUaWVyZWRNZW51SXRlbURhdGEgPSB7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIHN1Ym1lbnVcbiAgICAgIH07XG5cbiAgICAgIGlmIChvcmlnaW5hbENvbW1hbmQpIHtcbiAgICAgICAgd3JhcHBlZEl0ZW0uY29tbWFuZCA9IChvcmlnaW5hbEV2ZW50PzogdW5rbm93bik6IHZvaWQgPT4ge1xuICAgICAgICAgIGNvbnN0IHBheWxvYWQ6IEJ1dHRvbk1lbnVDb21tYW5kUGF5bG9hZCA9IHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQsXG4gICAgICAgICAgICBjb250ZXh0OiB0aGlzLl9tZW51Q29udGV4dCxcbiAgICAgICAgICAgIGl0ZW06IHdyYXBwZWRJdGVtLFxuICAgICAgICAgICAgZGF0YTogKGl0ZW0gYXMgeyBkYXRhPzogdW5rbm93biB9KS5kYXRhXG4gICAgICAgICAgfTtcbiAgICAgICAgICBvcmlnaW5hbENvbW1hbmQocGF5bG9hZCk7XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB3cmFwcGVkSXRlbTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwTGVnYWN5TWVudShpdGVtczogQnV0dG9uTGVnYWN5TWVudUl0ZW1bXSA9IFtdKTogVGllcmVkTWVudUl0ZW1EYXRhW10ge1xuICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLnNlcGFyYXRvcikge1xuICAgICAgICByZXR1cm4geyBkaXZpZGVyOiB0cnVlIH07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxhYmVsOiBpdGVtLmxhYmVsID8/ICcnLFxuICAgICAgICBpY29uQ2xhc3M6IGl0ZW0uaWNvbixcbiAgICAgICAgZGlzYWJsZWQ6ICEhaXRlbS5kaXNhYmxlZCxcbiAgICAgICAgdmlzaWJsZTogaXRlbS52aXNpYmxlLFxuICAgICAgICBkYXRhS2V5OiBpdGVtLmRhdGFLZXksXG4gICAgICAgIGNvbW1hbmQ6IGl0ZW0uY29tbWFuZFxuICAgICAgICAgID8gKG9yaWdpbmFsRXZlbnQ/OiB1bmtub3duKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGl0ZW0uY29tbWFuZD8uKHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50LFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgY29udGV4dDogdGhpcy5fbWVudUNvbnRleHRcbiAgICAgICAgICAgICAgfSBhcyBuZXZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHN1Ym1lbnU6IGl0ZW0uaXRlbXM/Lmxlbmd0aCA/IHRoaXMubWFwTGVnYWN5TWVudShpdGVtLml0ZW1zKSA6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNkYy1idXR0b24td3JhcHBlclwiPlxuICA8cy1idXR0b25cbiAgICBjbGFzcz1cInNkYy1idXR0b24tZWxcIlxuICAgIChjbGlja2VkKT1cImhhbmRsZUNsaWNrKCRldmVudClcIlxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2lkXT1cImlkXCJcbiAgICBbc2l6ZV09XCJzaXplXCJcbiAgICBbdHlwZV09XCJ0eXBlXCJcbiAgICBbcHJpb3JpdHldPVwicHJpb3JpdHlcIlxuICAgIFtsYWJlbF09XCJsYWJlbCB8IHRyYW5zbGF0ZVwiXG4gICAgW2ljb25DbGFzc109XCJpY29uXCJcbiAgICBbcmlnaHRJY29uQ2xhc3NdPVwicmlnaHRJY29uXCJcbiAgICBbYXV4aWxpYXJ5XT1cImF1eGlsaWFyeVwiXG4gICAgW2NhcmV0XT1cImNhcmV0IVwiXG4gICAgW3Rvb2x0aXBdPVwidG9vbHRpcCA/ICh0b29sdGlwIHwgdHJhbnNsYXRlKSA6IHVuZGVmaW5lZFwiXG4gICAgW2FuaW1hdGlvbl09XCJhbmltYXRpb24hXCJcbiAgICBbc2xpZGVdPVwic2xpZGUhXCJcbiAgICBbYmFkZ2VdPVwiYmFkZ2VcIlxuICAgIFtzdHlsZUNsYXNzXT1cInN0eWxlQ2xhc3MhXCJcbiAgICBbbWVudU9wdGlvbnNdPVwicmVzb2x2ZWRNZW51T3B0aW9uc1wiXG4gICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgPyAoYXJpYUxhYmVsIHwgdHJhbnNsYXRlKSA6IChsYWJlbCA/IChsYWJlbCB8IHRyYW5zbGF0ZSkgOiBudWxsKVwiXG4gID5cbiAgPC9zLWJ1dHRvbj5cbjwvZGl2PlxuIl19
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvZmVhdHVyZXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2J1dHRvbi9idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVV0RCxPQUFPLEVBQXFCLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDeEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBeUIsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7OztBQUVoRSxNQUFNLHVCQUF1QixHQUFHLHlCQUF5QixDQUFDO0FBVzFELE1BQU0sT0FBTyxlQUFlO0lBQ2pCLEVBQUUsR0FBRyxXQUFXLENBQUM7SUFDakIsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNYLFNBQVMsQ0FBVTtJQUNuQixRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ2pCLEtBQUssR0FBYyxNQUFNLENBQUM7SUFDMUIsUUFBUSxHQUFtQixTQUFTLENBQUM7SUFDckMsSUFBSSxHQUFlLFNBQVMsQ0FBQztJQUM3QixJQUFJLEdBQVcsUUFBUSxDQUFD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c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFPRixXQUFXO3NCQURkLEtBQUs7Z0JBV0YsV0FBVztzQkFEZCxLQUFLO2dCQVdGLFdBQVc7c0JBRGQsS0FBSzt1QkFBQyxPQUFPO2dCQVdKLE9BQU87c0JBQWhCLE1BQU07Z0JBT08sU0FBUztzQkFEdEIsV0FBVzt1QkFBQyxhQUFhO2dCQTRDaEIsV0FBVztzQkFEcEIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQge1xuICBCdXR0b25CYWRnZUNvbmZpZyxcbiAgQnV0dG9uTGVnYWN5TWVudUl0ZW0sXG4gIEJ1dHRvbk1lbnVDb21tYW5kUGF5bG9hZCxcbiAgQnV0dG9uTWVudUl0ZW1EYXRhLFxuICBCdXR0b25Qcmlvcml0eSxcbiAgQnV0dG9uU2l6ZVxufSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL2J1dHRvbi50eXBlJztcbmltcG9ydCB7IEJ1dHRvbiwgRGltZW5zaW9uLCBnZXREaW1lbnNpb25TdHlsZXMgfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzL3NlbWFudGljcy50eXBlJztcbmltcG9ydCB7IEJhZGdlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFkZ2UvYmFkZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbk1lbnVBY3Rpb25FdmVudCwgQnV0dG9uTWVudUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9idXR0b24tbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4uL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVG9vbHRpcENvbXBvbmVudCB9IGZyb20gJy4uL3Rvb2x0aXAvdG9vbHRpcC5jb21wb25lbnQnO1xuXG5jb25zdCBCVVRUT05fTUVOVV9QQU5FTF9DTEFTUyA9ICdzZGMtYnV0dG9uLW1lbnUtcG9wb3Zlcic7XG5cbkBDb21wb25lbnQoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBUcmFuc2xhdGVNb2R1bGUsIEJhZGdlQ29tcG9uZW50LCBCdXR0b25NZW51Q29tcG9uZW50LCBQb3BvdmVyQ29tcG9uZW50LCBUb29sdGlwQ29tcG9uZW50XSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdzZGMtYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2J1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2J1dHRvbi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWRcbn0pXG5leHBvcnQgY2xhc3MgQnV0dG9uQ29tcG9uZW50IHtcbiAgQElucHV0KCkgaWQgPSAnYnV0dG9uLWlkJztcbiAgQElucHV0KCkgbGFiZWwgPSAnJztcbiAgQElucHV0KCkgYXJpYUxhYmVsPzogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSB3aWR0aDogRGltZW5zaW9uID0gJ2F1dG8nO1xuICBASW5wdXQoKSBwcmlvcml0eTogQnV0dG9uUHJpb3JpdHkgPSAncHJpbWFyeSc7XG4gIEBJbnB1dCgpIHNpemU6IEJ1dHRvblNpemUgPSAnZGVmYXVsdCc7XG4gIEBJbnB1dCgpIHR5cGU6IEJ1dHRvbiA9ICdidXR0b24nO1xuICBASW5wdXQoKSBpY29uPzogc3RyaW5nO1xuICBASW5wdXQoKSByaWdodEljb24/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGF1eGlsaWFyeSA9IGZhbHNlO1xuICBASW5wdXQoKSBjYXJldCA9IHRydWU7XG4gIEBJbnB1dCgpIHRvb2x0aXA/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFuaW1hdGlvbj86ICdyb3RhdGUnO1xuICBASW5wdXQoKSBzbGlkZT86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHN0eWxlQ2xhc3M/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJhZGdlPzogQnV0dG9uQmFkZ2VDb25maWc7XG5cbiAgcHJpdmF0ZSBfbWVudU9wdGlvbnM6IEJ1dHRvbk1lbnVJdGVtRGF0YVtdID0gW107XG4gIHByaXZhdGUgX2xlZ2FjeU1lbnVPcHRpb25zOiBCdXR0b25NZW51SXRlbURhdGFbXSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9tZW51Q29udGV4dD86IHVua25vd247XG5cbiAgQElucHV0KClcbiAgc2V0IG1lbnVPcHRpb25zKHZhbHVlOiBCdXR0b25NZW51SXRlbURhdGFbXSB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9tZW51T3B0aW9ucyA9IHZhbHVlID8/IFtdO1xuICAgIHRoaXMucmVidWlsZFJlc29sdmVkTWVudU9wdGlvbnMoKTtcbiAgfVxuXG4gIGdldCBtZW51T3B0aW9ucygpOiBCdXR0b25NZW51SXRlbURhdGFbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2xlZ2FjeU1lbnVPcHRpb25zID8/IHRoaXMuX21lbnVPcHRpb25zO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IG1lbnVDb250ZXh0KHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fbWVudUNvbnRleHQgPSB2YWx1ZTtcbiAgICB0aGlzLnJlYnVpbGRSZXNvbHZlZE1lbnVPcHRpb25zKCk7XG4gIH1cblxuICBnZXQgbWVudUNvbnRleHQoKTogdW5rbm93biB7XG4gICAgcmV0dXJuIHRoaXMuX21lbnVDb250ZXh0O1xuICB9XG5cbiAgQElucHV0KCdtb2RlbCcpXG4gIHNldCBsZWdhY3lNb2RlbCh2YWx1ZTogQnV0dG9uTGVnYWN5TWVudUl0ZW1bXSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9sZWdhY3lNZW51T3B0aW9ucyA9IHRoaXMubWFwTGVnYWN5TWVudSh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xlZ2FjeU1lbnVPcHRpb25zID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnJlYnVpbGRSZXNvbHZlZE1lbnVPcHRpb25zKCk7XG4gIH1cblxuICBAT3V0cHV0KCkgY2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG1lbnVQYW5lbENsYXNzID0gQlVUVE9OX01FTlVfUEFORUxfQ0xBU1M7XG4gIHByb3RlY3RlZCByZXNvbHZlZE1lbnVPcHRpb25zOiBCdXR0b25NZW51SXRlbURhdGFbXSA9IFtdO1xuICBwcm90ZWN0ZWQgbWVudU9wZW4gPSBmYWxzZTtcblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLndpZHRoJylcbiAgcHJvdGVjdGVkIGdldCBob3N0V2lkdGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy53aWR0aFN0eWxlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldCB3aWR0aFN0eWxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN0cmluZyhnZXREaW1lbnNpb25TdHlsZXMoJ3dpZHRoJywgdGhpcy53aWR0aClbJ3dpZHRoJ10gPz8gJ2F1dG8nKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaGFzTWVudSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZE1lbnVPcHRpb25zLmxlbmd0aCA+IDA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGJ1dHRvbkNsYXNzZXMoKTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4ge1xuICAgIGNvbnN0IGN1c3RvbUNsYXNzZXMgPSAodGhpcy5zdHlsZUNsYXNzID8/ICcnKVxuICAgICAgLnNwbGl0KC9cXHMrLylcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5yZWR1Y2U8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KChhY2N1bXVsYXRvciwgY2xhc3NOYW1lKSA9PiB7XG4gICAgICAgIGFjY3VtdWxhdG9yW2NsYXNzTmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7XG4gICAgICB9LCB7fSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY3VzdG9tQ2xhc3NlcyxcbiAgICAgICdzLWJ1dHRvbi1hdXhpbGlhcnknOiB0aGlzLmF1eGlsaWFyeSxcbiAgICAgICdzLWJ1dHRvbi13aXRoLWljb24nOiAhIXRoaXMuaWNvbixcbiAgICAgICdzLWJ1dHRvbi13aXRoLXRleHQnOiAhIXRoaXMubGFiZWwsXG4gICAgICAncy1idXR0b24tb25seS1pY29uJzogISF0aGlzLmljb24gJiYgIXRoaXMubGFiZWwgJiYgIXRoaXMuaGFzTWVudSxcbiAgICAgICdzLWJ1dHRvbi1lbXB0eSc6ICF0aGlzLmljb24gJiYgIXRoaXMubGFiZWwsXG4gICAgICAncy1idXR0b24tc2l6ZS1kZWZhdWx0JzogdGhpcy5zaXplID09PSAnZGVmYXVsdCcsXG4gICAgICAncy1idXR0b24tc2l6ZS1zbWFsbCc6IHRoaXMuc2l6ZSA9PT0gJ3NtYWxsJyxcbiAgICAgICdzLWJ1dHRvbi1wcmlvcml0eS1kZWZhdWx0JzogdGhpcy5wcmlvcml0eSA9PT0gJ2RlZmF1bHQnLFxuICAgICAgJ3MtYnV0dG9uLXByaW9yaXR5LXByaW1hcnknOiB0aGlzLnByaW9yaXR5ID09PSAncHJpbWFyeScsXG4gICAgICAncy1idXR0b24tcHJpb3JpdHktc2Vjb25kYXJ5JzogdGhpcy5wcmlvcml0eSA9PT0gJ3NlY29uZGFyeScsXG4gICAgICAncy1idXR0b24tcHJpb3JpdHktbGluayc6IHRoaXMucHJpb3JpdHkgPT09ICdsaW5rJyxcbiAgICAgICdzLWJ1dHRvbi1wcmlvcml0eS1kYW5nZXInOiB0aGlzLnByaW9yaXR5ID09PSAnZGFuZ2VyJyxcbiAgICAgICdzLWJ1dHRvbi1tdWx0aXBsZSc6ICh0aGlzLmNhcmV0ICYmIHRoaXMuaGFzTWVudSkgfHwgISF0aGlzLnJpZ2h0SWNvbixcbiAgICAgICdzLWJ1dHRvbi0tc2xpZGUnOiB0aGlzLnZhbGlkYXRlU2xpZGVCdXR0b24oKSxcbiAgICAgICdzLWJ1dHRvbi0tcm90YXRlLWFuaW1hdGlvbic6IHRoaXMuaXNSb3RhdGVBbmltYXRpb24oKSxcbiAgICAgICdzLWJ1dHRvbi1hY3RpdmUnOiB0aGlzLm1lbnVPcGVuXG4gICAgfTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIG9uSG9zdENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVCdXR0b25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jbGlja2VkLmVtaXQoZXZlbnQpO1xuXG4gICAgaWYgKCF0aGlzLmhhc01lbnUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMubWVudU9wZW4gPSAhdGhpcy5tZW51T3BlbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVNZW51QWN0aW9uKGV2ZW50OiBCdXR0b25NZW51QWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuaXRlbS5kaXNhYmxlZCB8fCBldmVudC5pdGVtLmRpdmlkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudC5pdGVtLmNvbW1hbmQ/LihldmVudC5vcmlnaW5hbEV2ZW50KTtcbiAgICB0aGlzLm1lbnVPcGVuID0gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgb25NZW51T3BlbkNoYW5nZShvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5tZW51T3BlbiA9IG9wZW47XG4gIH1cblxuICBwcml2YXRlIHJlYnVpbGRSZXNvbHZlZE1lbnVPcHRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMucmVzb2x2ZWRNZW51T3B0aW9ucyA9IHRoaXMud3JhcE1lbnVDb21tYW5kcyh0aGlzLm1lbnVPcHRpb25zKTtcbiAgICB0aGlzLm1lbnVPcGVuID0gdGhpcy5tZW51T3BlbiAmJiB0aGlzLnJlc29sdmVkTWVudU9wdGlvbnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgd3JhcE1lbnVDb21tYW5kcyhpdGVtczogQnV0dG9uTWVudUl0ZW1EYXRhW10gPSBbXSk6IEJ1dHRvbk1lbnVJdGVtRGF0YVtdIHtcbiAgICByZXR1cm4gaXRlbXNcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udmlzaWJsZSAhPT0gZmFsc2UpXG4gICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IG9yaWdpbmFsQ29tbWFuZCA9IGl0ZW0uY29tbWFuZCBhcyAoKHBheWxvYWQ/OiB1bmtub3duKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3Qgc3VibWVudSA9IGl0ZW0uc3VibWVudT8ubGVuZ3RoID8gdGhpcy53cmFwTWVudUNvbW1hbmRzKGl0ZW0uc3VibWVudSkgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgY29uc3Qgd3JhcHBlZEl0ZW06IEJ1dHRvbk1lbnVJdGVtRGF0YSA9IHtcbiAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgIHN1Ym1lbnVcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAob3JpZ2luYWxDb21tYW5kKSB7XG4gICAgICAgICAgd3JhcHBlZEl0ZW0uY29tbWFuZCA9IChvcmlnaW5hbEV2ZW50PzogdW5rbm93bik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZDogQnV0dG9uTWVudUNvbW1hbmRQYXlsb2FkID0ge1xuICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50LFxuICAgICAgICAgICAgICBjb250ZXh0OiB0aGlzLl9tZW51Q29udGV4dCxcbiAgICAgICAgICAgICAgaXRlbTogd3JhcHBlZEl0ZW0sXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW0uZGF0YVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG9yaWdpbmFsQ29tbWFuZChwYXlsb2FkKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHdyYXBwZWRJdGVtO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1hcExlZ2FjeU1lbnUoaXRlbXM6IEJ1dHRvbkxlZ2FjeU1lbnVJdGVtW10gPSBbXSk6IEJ1dHRvbk1lbnVJdGVtRGF0YVtdIHtcbiAgICByZXR1cm4gaXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICBpZiAoaXRlbS5zZXBhcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIHsgZGl2aWRlcjogdHJ1ZSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBsYWJlbDogaXRlbS5sYWJlbCA/PyAnJyxcbiAgICAgICAgaWNvbkNsYXNzOiBpdGVtLmljb24sXG4gICAgICAgIGRpc2FibGVkOiAhIWl0ZW0uZGlzYWJsZWQsXG4gICAgICAgIHZpc2libGU6IGl0ZW0udmlzaWJsZSxcbiAgICAgICAgZGF0YUtleTogaXRlbS5kYXRhS2V5LFxuICAgICAgICBkYXRhOiBpdGVtLmRhdGEsXG4gICAgICAgIGNvbW1hbmQ6IGl0ZW0uY29tbWFuZFxuICAgICAgICAgID8gKG9yaWdpbmFsRXZlbnQ/OiB1bmtub3duKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGl0ZW0uY29tbWFuZD8uKHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbEV2ZW50LFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgY29udGV4dDogdGhpcy5fbWVudUNvbnRleHRcbiAgICAgICAgICAgICAgfSBhcyBuZXZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIHN1Ym1lbnU6IGl0ZW0uaXRlbXM/Lmxlbmd0aCA/IHRoaXMubWFwTGVnYWN5TWVudShpdGVtLml0ZW1zKSA6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVTbGlkZUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy5zbGlkZSAmJiAodGhpcy5wcmlvcml0eSA9PT0gJ2RlZmF1bHQnIHx8IHRoaXMucHJpb3JpdHkgPT09ICdsaW5rJykgJiYgdGhpcy5sYWJlbD8ubGVuZ3RoKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNSb3RhdGVBbmltYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYW5pbWF0aW9uID09PSAncm90YXRlJztcbiAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNidXR0b25TdXJmYWNlPlxuICA8c2RjLXRvb2x0aXBcbiAgICBbcFRvb2x0aXBdPVwidG9vbHRpcCA/ICh0b29sdGlwIHwgdHJhbnNsYXRlKSA6IG51bGxcIlxuICAgIFtmaXRDb250ZW50XT1cImZhbHNlXCJcbiAgICBbdG9vbHRpcERpc2FibGVkXT1cIiF0b29sdGlwXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJzZGMtYnV0dG9uLWVsXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgIFt0eXBlXT1cInR5cGVcIlxuICAgICAgICBjbGFzcz1cInMtYnV0dG9uXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiYnV0dG9uQ2xhc3Nlc1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCA/IChhcmlhTGFiZWwgfCB0cmFuc2xhdGUpIDogKGxhYmVsID8gKGxhYmVsIHwgdHJhbnNsYXRlKSA6IG51bGwpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJoYXNNZW51ID8gJ21lbnUnIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaGFzTWVudSA/IG1lbnVPcGVuIDogbnVsbFwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVCdXR0b25DbGljaygkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgQGlmIChpY29uKSB7XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwicy1idXR0b24taWNvblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJpY29uXCJcbiAgICAgICAgICAgIFtjbGFzcy5zLWJ1dHRvbi1pY29uLW1hcmdpbi1yaWdodF09XCIhbGFiZWwgJiYgaGFzTWVudVwiXG4gICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGxhYmVsKSB7XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwicy1idXR0b24tdGV4dFwiXG4gICAgICAgICAgICBbY2xhc3Mucy1idXR0b24taWNvbi1tYXJnaW4tcmlnaHRdPVwiISFyaWdodEljb24gfHwgaGFzTWVudVwiXG4gICAgICAgICAgICBbY2xhc3Mucy1idXR0b24taWNvbi1tYXJnaW4tbGVmdF09XCIhIWljb25cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGxhYmVsIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChyaWdodEljb24pIHtcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInMtYnV0dG9uLXJpZ2h0LWljb25cIiBbbmdDbGFzc109XCJyaWdodEljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKChjYXJldCAmJiBoYXNNZW51KSB8fCBoYXNNZW51KSB7XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LW9wdGlvbnMtaWNvbiBzLWJ1dHRvbi1tZW51LWljb24gZmEgZmEtZncgZmEtY2FyZXQtZG93blwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgfVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvc2RjLXRvb2x0aXA+XG48L25nLXRlbXBsYXRlPlxuXG48ZGl2IGNsYXNzPVwic2RjLWJ1dHRvbi13cmFwcGVyXCIgW2NsYXNzLnNkYy1idXR0b24td3JhcHBlci0td2l0aC1iYWRnZV09XCIhIWJhZGdlXCI+XG4gIEBpZiAoaGFzTWVudSkge1xuICAgIDxzZGMtcG9wb3ZlclxuICAgICAgW29wZW5dPVwibWVudU9wZW5cIlxuICAgICAgW3RvZ2dsZU9uVHJpZ2dlckNsaWNrXT1cImZhbHNlXCJcbiAgICAgIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cInRydWVcIlxuICAgICAgW2Nsb3NlT25Fc2NhcGVdPVwidHJ1ZVwiXG4gICAgICBbcmVzdG9yZUZvY3VzT25DbG9zZV09XCJ0cnVlXCJcbiAgICAgIFtwYW5lbENsYXNzXT1cIm1lbnVQYW5lbENsYXNzXCJcbiAgICAgIChvcGVuQ2hhbmdlKT1cIm9uTWVudU9wZW5DaGFuZ2UoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPGRpdiBzZGMtcG9wb3Zlci10cmlnZ2VyIGNsYXNzPVwic2RjLWJ1dHRvbi10cmlnZ2VyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiYnV0dG9uU3VyZmFjZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXZcbiAgICAgICAgc2RjLXBvcG92ZXItY29udGVudFxuICAgICAgICBjbGFzcz1cInNkYy1idXR0b24tbWVudS1wYW5lbFwiXG4gICAgICAgIHJvbGU9XCJtZW51XCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgPyAoYXJpYUxhYmVsIHwgdHJhbnNsYXRlKSA6IChsYWJlbCA/IChsYWJlbCB8IHRyYW5zbGF0ZSkgOiBudWxsKVwiXG4gICAgICA+XG4gICAgICAgIDxzZGMtYnV0dG9uLW1lbnUgW2l0ZW1zXT1cInJlc29sdmVkTWVudU9wdGlvbnNcIiAoYWN0aW9uKT1cImhhbmRsZU1lbnVBY3Rpb24oJGV2ZW50KVwiPjwvc2RjLWJ1dHRvbi1tZW51PlxuICAgICAgPC9kaXY+XG4gICAgPC9zZGMtcG9wb3Zlcj5cbiAgfSBAZWxzZSB7XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJidXR0b25TdXJmYWNlXCI+PC9uZy1jb250YWluZXI+XG4gIH1cblxuICBAaWYgKGJhZGdlKSB7XG4gICAgPGRpdiBjbGFzcz1cImJhZGdlXCI+XG4gICAgICA8c2RjLWJhZGdlIFtjb2xvcl09XCJiYWRnZS5jb2xvclwiIFt0ZXh0XT1cImJhZGdlLnRleHRcIiBbaWNvbkNsYXNzXT1cImJhZGdlLmljb25DbGFzc1wiPjwvc2RjLWJhZGdlPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,81 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, signal } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class ButtonMenuComponent {
6
+ items = [];
7
+ level = 0;
8
+ action = new EventEmitter();
9
+ expandedIndex = signal(null);
10
+ get visibleItems() {
11
+ return this.items.filter((item) => item.visible !== false);
12
+ }
13
+ trackItem(index, item) {
14
+ return item.dataKey ?? item.label ?? `${this.level}-${index}`;
15
+ }
16
+ hasSubmenu(item) {
17
+ return this.getVisibleSubmenu(item).length > 0;
18
+ }
19
+ isExpanded(index) {
20
+ return this.expandedIndex() === index;
21
+ }
22
+ getVisibleSubmenu(item) {
23
+ return item.submenu?.filter((child) => child.visible !== false) ?? [];
24
+ }
25
+ openSubmenu(index) {
26
+ const item = this.visibleItems[index];
27
+ this.expandedIndex.set(item && this.hasSubmenu(item) ? index : null);
28
+ }
29
+ closeSubmenu(index) {
30
+ if (index === undefined || this.expandedIndex() === index) {
31
+ this.expandedIndex.set(null);
32
+ }
33
+ }
34
+ onEntryFocusOut(event, index) {
35
+ const nextTarget = event.relatedTarget;
36
+ const currentTarget = event.currentTarget;
37
+ if (!(currentTarget instanceof HTMLElement) || !(nextTarget instanceof Node) || !currentTarget.contains(nextTarget)) {
38
+ this.closeSubmenu(index);
39
+ }
40
+ }
41
+ onItemClick(item, index, event) {
42
+ event.preventDefault();
43
+ event.stopPropagation();
44
+ if (item.disabled) {
45
+ return;
46
+ }
47
+ if (this.hasSubmenu(item)) {
48
+ this.expandedIndex.set(this.isExpanded(index) ? null : index);
49
+ return;
50
+ }
51
+ this.action.emit({ item, originalEvent: event });
52
+ }
53
+ onItemKeydown(item, index, event) {
54
+ if (event.key === 'Enter' || event.key === ' ') {
55
+ this.onItemClick(item, index, event);
56
+ return;
57
+ }
58
+ if (event.key === 'ArrowRight' && this.hasSubmenu(item)) {
59
+ event.preventDefault();
60
+ this.openSubmenu(index);
61
+ return;
62
+ }
63
+ if (event.key === 'ArrowLeft' || event.key === 'Escape') {
64
+ event.preventDefault();
65
+ this.closeSubmenu(index);
66
+ }
67
+ }
68
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ButtonMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
69
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ButtonMenuComponent, isStandalone: true, selector: "sdc-button-menu", inputs: { items: "items", level: "level" }, outputs: { action: "action" }, ngImport: i0, template: "<div class=\"sdc-button-menu\" role=\"menu\">\n @for (item of visibleItems; track trackItem($index, item)) {\n @if (item.divider) {\n <hr class=\"sdc-button-menu__separator\">\n } @else {\n <div\n class=\"sdc-button-menu__entry\"\n [class.sdc-button-menu__entry--expanded]=\"isExpanded($index)\"\n [class.sdc-button-menu__entry--disabled]=\"item.disabled\"\n (mouseenter)=\"openSubmenu($index)\"\n (mouseleave)=\"closeSubmenu($index)\"\n (focusout)=\"onEntryFocusOut($event, $index)\"\n >\n <button\n type=\"button\"\n class=\"sdc-button-menu__item\"\n role=\"menuitem\"\n [disabled]=\"item.disabled\"\n [attr.aria-haspopup]=\"hasSubmenu(item) ? 'menu' : null\"\n [attr.aria-expanded]=\"hasSubmenu(item) ? isExpanded($index) : null\"\n (focus)=\"openSubmenu($index)\"\n (click)=\"onItemClick(item, $index, $event)\"\n (keydown)=\"onItemKeydown(item, $index, $event)\"\n >\n @if (item.iconClass) {\n <span class=\"sdc-button-menu__icon\" [ngClass]=\"item.iconClass\" aria-hidden=\"true\"></span>\n }\n\n <span class=\"sdc-button-menu__label\">{{ item.label }}</span>\n\n @if (hasSubmenu(item)) {\n <span class=\"sdc-button-menu__caret fas fa-chevron-right\" aria-hidden=\"true\"></span>\n }\n </button>\n\n @if (hasSubmenu(item) && isExpanded($index)) {\n <div class=\"sdc-button-menu__submenu\">\n <sdc-button-menu\n [items]=\"getVisibleSubmenu(item)\"\n [level]=\"level + 1\"\n (action)=\"action.emit($event)\"\n ></sdc-button-menu>\n </div>\n }\n </div>\n }\n }\n</div>\n", styles: [":host{display:block}.sdc-button-menu{margin:0;min-width:12rem;padding:0}.sdc-button-menu__entry{position:relative}.sdc-button-menu__item{align-items:center;background:transparent;border:0;border-radius:.375rem;color:var(--sdc-text-default, #111827);cursor:pointer;display:inline-flex;gap:.625rem;justify-content:flex-start;min-height:2.25rem;padding:0 .75rem;text-align:left;width:100%}.sdc-button-menu__item:focus-visible{outline:var(--sdc-focus-outline, 2px solid #428bca);outline-offset:2px}.sdc-button-menu__item:disabled{cursor:not-allowed;opacity:.55}.sdc-button-menu__entry--expanded>.sdc-button-menu__item,.sdc-button-menu__item:hover:not(:disabled){background:var(--sdc-split-menu-option-hover-bg, #f5f7fa)}.sdc-button-menu__label{flex:1 1 auto;min-width:0}.sdc-button-menu__icon,.sdc-button-menu__caret{align-items:center;display:inline-flex;flex:0 0 auto;justify-content:center}.sdc-button-menu__separator{border:0;border-top:1px solid var(--sdc-border-default, #d1d5db);margin:.25rem 0}.sdc-button-menu__submenu{background:var(--sdc-split-menu-bg, #ffffff);border:1px solid var(--sdc-border-strong, #d1d5db);border-radius:.5rem;box-shadow:var(--sdc-shadow-sm, 0 2px 8px rgba(0, 0, 0, .08));left:calc(100% - .25rem);min-width:12rem;padding:.25rem;position:absolute;top:-.25rem;z-index:2}\n"], dependencies: [{ kind: "component", type: ButtonMenuComponent, selector: "sdc-button-menu", inputs: ["items", "level"], outputs: ["action"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
70
+ }
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ButtonMenuComponent, decorators: [{
72
+ type: Component,
73
+ args: [{ selector: 'sdc-button-menu', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"sdc-button-menu\" role=\"menu\">\n @for (item of visibleItems; track trackItem($index, item)) {\n @if (item.divider) {\n <hr class=\"sdc-button-menu__separator\">\n } @else {\n <div\n class=\"sdc-button-menu__entry\"\n [class.sdc-button-menu__entry--expanded]=\"isExpanded($index)\"\n [class.sdc-button-menu__entry--disabled]=\"item.disabled\"\n (mouseenter)=\"openSubmenu($index)\"\n (mouseleave)=\"closeSubmenu($index)\"\n (focusout)=\"onEntryFocusOut($event, $index)\"\n >\n <button\n type=\"button\"\n class=\"sdc-button-menu__item\"\n role=\"menuitem\"\n [disabled]=\"item.disabled\"\n [attr.aria-haspopup]=\"hasSubmenu(item) ? 'menu' : null\"\n [attr.aria-expanded]=\"hasSubmenu(item) ? isExpanded($index) : null\"\n (focus)=\"openSubmenu($index)\"\n (click)=\"onItemClick(item, $index, $event)\"\n (keydown)=\"onItemKeydown(item, $index, $event)\"\n >\n @if (item.iconClass) {\n <span class=\"sdc-button-menu__icon\" [ngClass]=\"item.iconClass\" aria-hidden=\"true\"></span>\n }\n\n <span class=\"sdc-button-menu__label\">{{ item.label }}</span>\n\n @if (hasSubmenu(item)) {\n <span class=\"sdc-button-menu__caret fas fa-chevron-right\" aria-hidden=\"true\"></span>\n }\n </button>\n\n @if (hasSubmenu(item) && isExpanded($index)) {\n <div class=\"sdc-button-menu__submenu\">\n <sdc-button-menu\n [items]=\"getVisibleSubmenu(item)\"\n [level]=\"level + 1\"\n (action)=\"action.emit($event)\"\n ></sdc-button-menu>\n </div>\n }\n </div>\n }\n }\n</div>\n", styles: [":host{display:block}.sdc-button-menu{margin:0;min-width:12rem;padding:0}.sdc-button-menu__entry{position:relative}.sdc-button-menu__item{align-items:center;background:transparent;border:0;border-radius:.375rem;color:var(--sdc-text-default, #111827);cursor:pointer;display:inline-flex;gap:.625rem;justify-content:flex-start;min-height:2.25rem;padding:0 .75rem;text-align:left;width:100%}.sdc-button-menu__item:focus-visible{outline:var(--sdc-focus-outline, 2px solid #428bca);outline-offset:2px}.sdc-button-menu__item:disabled{cursor:not-allowed;opacity:.55}.sdc-button-menu__entry--expanded>.sdc-button-menu__item,.sdc-button-menu__item:hover:not(:disabled){background:var(--sdc-split-menu-option-hover-bg, #f5f7fa)}.sdc-button-menu__label{flex:1 1 auto;min-width:0}.sdc-button-menu__icon,.sdc-button-menu__caret{align-items:center;display:inline-flex;flex:0 0 auto;justify-content:center}.sdc-button-menu__separator{border:0;border-top:1px solid var(--sdc-border-default, #d1d5db);margin:.25rem 0}.sdc-button-menu__submenu{background:var(--sdc-split-menu-bg, #ffffff);border:1px solid var(--sdc-border-strong, #d1d5db);border-radius:.5rem;box-shadow:var(--sdc-shadow-sm, 0 2px 8px rgba(0, 0, 0, .08));left:calc(100% - .25rem);min-width:12rem;padding:.25rem;position:absolute;top:-.25rem;z-index:2}\n"] }]
74
+ }], propDecorators: { items: [{
75
+ type: Input
76
+ }], level: [{
77
+ type: Input
78
+ }], action: [{
79
+ type: Output
80
+ }] } });
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy9idXR0b24vY29tcG9uZW50cy9idXR0b24tbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2J1dHRvbi9jb21wb25lbnRzL2J1dHRvbi1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBaUJ4RyxNQUFNLE9BQU8sbUJBQW1CO0lBQ3JCLEtBQUssR0FBeUIsRUFBRSxDQUFDO0lBQ2pDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFFVCxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQXlCLENBQUM7SUFFMUMsYUFBYSxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFFL0QsSUFBYyxZQUFZO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVTLFNBQVMsQ0FBQyxLQUFhLEVBQUUsSUFBd0I7UUFDekQsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ2hFLENBQUM7SUFFUyxVQUFVLENBQUMsSUFBd0I7UUFDM0MsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FB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Q3hELEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO3dHQWhGVSxtQkFBbUI7NEZBQW5CLG1CQUFtQixzSkNsQmhDLGt4REFnREEsODBDRDlCYSxtQkFBbUIsNEdBTHBCLFlBQVk7OzRGQUtYLG1CQUFtQjtrQkFSL0IsU0FBUzsrQkFDRSxpQkFBaUIsY0FDZixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsbUJBR04sdUJBQXVCLENBQUMsTUFBTTs4QkFHdEMsS0FBSztzQkFBYixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxNQUFNO3NCQUFmLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHR5cGUgeyBCdXR0b25NZW51SXRlbURhdGEgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3R5cGVzL2J1dHRvbi50eXBlJztcblxuZXhwb3J0IHR5cGUgQnV0dG9uTWVudUFjdGlvbkV2ZW50ID0ge1xuICBpdGVtOiBCdXR0b25NZW51SXRlbURhdGE7XG4gIG9yaWdpbmFsRXZlbnQ6IEV2ZW50O1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2RjLWJ1dHRvbi1tZW51JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9idXR0b24tbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9idXR0b24tbWVudS5jb21wb25lbnQuc2NzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEJ1dHRvbk1lbnVDb21wb25lbnQge1xuICBASW5wdXQoKSBpdGVtczogQnV0dG9uTWVudUl0ZW1EYXRhW10gPSBbXTtcbiAgQElucHV0KCkgbGV2ZWwgPSAwO1xuXG4gIEBPdXRwdXQoKSBhY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPEJ1dHRvbk1lbnVBY3Rpb25FdmVudD4oKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZXhwYW5kZWRJbmRleCA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcblxuICBwcm90ZWN0ZWQgZ2V0IHZpc2libGVJdGVtcygpOiBCdXR0b25NZW51SXRlbURhdGFbXSB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnZpc2libGUgIT09IGZhbHNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0cmFja0l0ZW0oaW5kZXg6IG51bWJlciwgaXRlbTogQnV0dG9uTWVudUl0ZW1EYXRhKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXRlbS5kYXRhS2V5ID8/IGl0ZW0ubGFiZWwgPz8gYCR7dGhpcy5sZXZlbH0tJHtpbmRleH1gO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhc1N1Ym1lbnUoaXRlbTogQnV0dG9uTWVudUl0ZW1EYXRhKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VmlzaWJsZVN1Ym1lbnUoaXRlbSkubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0V4cGFuZGVkKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5leHBhbmRlZEluZGV4KCkgPT09IGluZGV4O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFZpc2libGVTdWJtZW51KGl0ZW06IEJ1dHRvbk1lbnVJdGVtRGF0YSk6IEJ1dHRvbk1lbnVJdGVtRGF0YVtdIHtcbiAgICByZXR1cm4gaXRlbS5zdWJtZW51Py5maWx0ZXIoKGNoaWxkKSA9PiBjaGlsZC52aXNpYmxlICE9PSBmYWxzZSkgPz8gW107XG4gIH1cblxuICBwcm90ZWN0ZWQgb3BlblN1Ym1lbnUoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLnZpc2libGVJdGVtc1tpbmRleF07XG4gICAgdGhpcy5leHBhbmRlZEluZGV4LnNldChpdGVtICYmIHRoaXMuaGFzU3VibWVudShpdGVtKSA/IGluZGV4IDogbnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xvc2VTdWJtZW51KGluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQgfHwgdGhpcy5leHBhbmRlZEluZGV4KCkgPT09IGluZGV4KSB7XG4gICAgICB0aGlzLmV4cGFuZGVkSW5kZXguc2V0KG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvbkVudHJ5Rm9jdXNPdXQoZXZlbnQ6IEZvY3VzRXZlbnQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0VGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldDtcblxuICAgIGlmICghKGN1cnJlbnRUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgfHwgIShuZXh0VGFyZ2V0IGluc3RhbmNlb2YgTm9kZSkgfHwgIWN1cnJlbnRUYXJnZXQuY29udGFpbnMobmV4dFRhcmdldCkpIHtcbiAgICAgIHRoaXMuY2xvc2VTdWJtZW51KGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb25JdGVtQ2xpY2soaXRlbTogQnV0dG9uTWVudUl0ZW1EYXRhLCBpbmRleDogbnVtYmVyLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKGl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNTdWJtZW51KGl0ZW0pKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkSW5kZXguc2V0KHRoaXMuaXNFeHBhbmRlZChpbmRleCkgPyBudWxsIDogaW5kZXgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9uLmVtaXQoeyBpdGVtLCBvcmlnaW5hbEV2ZW50OiBldmVudCB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkl0ZW1LZXlkb3duKGl0ZW06IEJ1dHRvbk1lbnVJdGVtRGF0YSwgaW5kZXg6IG51bWJlciwgZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInIHx8IGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICB0aGlzLm9uSXRlbUNsaWNrKGl0ZW0sIGluZGV4LCBldmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnICYmIHRoaXMuaGFzU3VibWVudShpdGVtKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMub3BlblN1Ym1lbnUoaW5kZXgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB0aGlzLmNsb3NlU3VibWVudShpbmRleCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2RjLWJ1dHRvbi1tZW51XCIgcm9sZT1cIm1lbnVcIj5cbiAgQGZvciAoaXRlbSBvZiB2aXNpYmxlSXRlbXM7IHRyYWNrIHRyYWNrSXRlbSgkaW5kZXgsIGl0ZW0pKSB7XG4gICAgQGlmIChpdGVtLmRpdmlkZXIpIHtcbiAgICAgIDxociBjbGFzcz1cInNkYy1idXR0b24tbWVudV9fc2VwYXJhdG9yXCI+XG4gICAgfSBAZWxzZSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwic2RjLWJ1dHRvbi1tZW51X19lbnRyeVwiXG4gICAgICAgIFtjbGFzcy5zZGMtYnV0dG9uLW1lbnVfX2VudHJ5LS1leHBhbmRlZF09XCJpc0V4cGFuZGVkKCRpbmRleClcIlxuICAgICAgICBbY2xhc3Muc2RjLWJ1dHRvbi1tZW51X19lbnRyeS0tZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cIm9wZW5TdWJtZW51KCRpbmRleClcIlxuICAgICAgICAobW91c2VsZWF2ZSk9XCJjbG9zZVN1Ym1lbnUoJGluZGV4KVwiXG4gICAgICAgIChmb2N1c291dCk9XCJvbkVudHJ5Rm9jdXNPdXQoJGV2ZW50LCAkaW5kZXgpXCJcbiAgICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwic2RjLWJ1dHRvbi1tZW51X19pdGVtXCJcbiAgICAgICAgICByb2xlPVwibWVudWl0ZW1cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cImhhc1N1Ym1lbnUoaXRlbSkgPyAnbWVudScgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImhhc1N1Ym1lbnUoaXRlbSkgPyBpc0V4cGFuZGVkKCRpbmRleCkgOiBudWxsXCJcbiAgICAgICAgICAoZm9jdXMpPVwib3BlblN1Ym1lbnUoJGluZGV4KVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0sICRpbmRleCwgJGV2ZW50KVwiXG4gICAgICAgICAgKGtleWRvd24pPVwib25JdGVtS2V5ZG93bihpdGVtLCAkaW5kZXgsICRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgQGlmIChpdGVtLmljb25DbGFzcykge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZGMtYnV0dG9uLW1lbnVfX2ljb25cIiBbbmdDbGFzc109XCJpdGVtLmljb25DbGFzc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1idXR0b24tbWVudV9fbGFiZWxcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxuXG4gICAgICAgICAgQGlmIChoYXNTdWJtZW51KGl0ZW0pKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkYy1idXR0b24tbWVudV9fY2FyZXQgZmFzIGZhLWNoZXZyb24tcmlnaHRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICBAaWYgKGhhc1N1Ym1lbnUoaXRlbSkgJiYgaXNFeHBhbmRlZCgkaW5kZXgpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNkYy1idXR0b24tbWVudV9fc3VibWVudVwiPlxuICAgICAgICAgICAgPHNkYy1idXR0b24tbWVudVxuICAgICAgICAgICAgICBbaXRlbXNdPVwiZ2V0VmlzaWJsZVN1Ym1lbnUoaXRlbSlcIlxuICAgICAgICAgICAgICBbbGV2ZWxdPVwibGV2ZWwgKyAxXCJcbiAgICAgICAgICAgICAgKGFjdGlvbik9XCJhY3Rpb24uZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L3NkYy1idXR0b24tbWVudT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICB9XG48L2Rpdj5cbiJdfQ==