@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.
- package/core/constants/chips.const.d.ts +1 -0
- package/core/constants/combobox.const.d.ts +1 -1
- package/core/constants/fileupload.const.d.ts +9 -0
- package/core/constants/icon-picker.const.d.ts +1 -0
- package/core/constants/picklist.const.d.ts +1 -0
- package/core/constants/table.const.d.ts +43 -0
- package/core/types/button.type.d.ts +18 -2
- package/core/types/fileupload.type.d.ts +17 -0
- package/core/types/filters.type.d.ts +4 -0
- package/core/types/table-column.type.d.ts +31 -0
- package/core/types/table-options.type.d.ts +90 -0
- package/core/types/table-shared.type.d.ts +13 -0
- package/core/types/table-visual.type.d.ts +23 -0
- package/core/types/table.type.d.ts +4 -113
- package/core/utils/layout.util.d.ts +4 -0
- package/esm2022/core/constants/chips.const.mjs +2 -1
- package/esm2022/core/constants/combobox.const.mjs +2 -2
- package/esm2022/core/constants/fileupload.const.mjs +10 -0
- package/esm2022/core/constants/icon-picker.const.mjs +76 -1
- package/esm2022/core/constants/picklist.const.mjs +2 -1
- package/esm2022/core/constants/table.const.mjs +53 -6
- package/esm2022/core/types/button.type.mjs +1 -1
- package/esm2022/core/types/fileupload.type.mjs +2 -0
- package/esm2022/core/types/filters.type.mjs +1 -1
- package/esm2022/core/types/table-column.type.mjs +2 -0
- package/esm2022/core/types/table-options.type.mjs +2 -0
- package/esm2022/core/types/table-shared.type.mjs +2 -0
- package/esm2022/core/types/table-visual.type.mjs +2 -0
- package/esm2022/core/types/table.type.mjs +1 -1
- package/esm2022/core/utils/combobox.util.mjs +2 -2
- package/esm2022/core/utils/layout.util.mjs +21 -5
- package/esm2022/features/accordion/accordion-item.component.mjs +1 -1
- package/esm2022/features/badge/badge.component.mjs +1 -1
- package/esm2022/features/button/button.component.mjs +76 -11
- package/esm2022/features/button/components/button-menu.component.mjs +81 -0
- package/esm2022/features/card-list/card/card.component.mjs +3 -3
- package/esm2022/features/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/features/chips/chips.component.mjs +8 -5
- package/esm2022/features/color-picker/color-picker.component.mjs +1 -1
- package/esm2022/features/combobox/combobox.component.mjs +17 -4
- package/esm2022/features/fileupload/fileupload.component.mjs +311 -0
- package/esm2022/features/filters/filters.component.mjs +3 -3
- package/esm2022/features/hyperlink/hyperlink.component.mjs +3 -3
- package/esm2022/features/icon-picker/icon-picker.component.mjs +34 -7
- package/esm2022/features/info-sign/info-sign.component.mjs +1 -1
- package/esm2022/features/mask/mask.component.mjs +1 -1
- package/esm2022/features/modal/modal.component.mjs +1 -1
- package/esm2022/features/number-input/number-input.component.mjs +1 -1
- package/esm2022/features/paginator/paginator.component.mjs +3 -3
- package/esm2022/features/picklist/picklist.component.mjs +33 -6
- package/esm2022/features/row-card-list/row-card/row-card.component.mjs +3 -3
- package/esm2022/features/searchbox/searchbox.component.mjs +3 -3
- package/esm2022/features/stats-card/stats-card.component.mjs +1 -1
- package/esm2022/features/switch/switch.component.mjs +3 -2
- package/esm2022/features/table/components/table-actions-menu.component.mjs +86 -0
- package/esm2022/features/table/components/table-cell-content.component.mjs +124 -0
- package/esm2022/features/table/components/table-sort-indicator.component.mjs +65 -0
- package/esm2022/features/table/table.component.mjs +116 -319
- package/esm2022/features/table/utils/table-config.util.mjs +35 -0
- package/esm2022/features/table/utils/table-data.util.mjs +96 -0
- package/esm2022/features/table/utils/table-layout.util.mjs +25 -0
- package/esm2022/features/table/utils/table-truncate.pipe.mjs +19 -0
- package/esm2022/features/table/utils/table-visual.util.mjs +221 -0
- package/esm2022/features/textarea/textarea.component.mjs +1 -1
- package/esm2022/features/textbox/textbox.component.mjs +1 -1
- package/esm2022/features/tooltip/tooltip.component.mjs +12 -3
- package/esm2022/features/visual-sql-editor/visual-sql-editor.component.mjs +2 -2
- package/esm2022/locales/en.json +194 -0
- package/esm2022/locales/es-CO.json +187 -1
- package/esm2022/locales/pt.json +194 -0
- package/esm2022/providers/features.provider.mjs +3 -1
- package/esm2022/public-api.mjs +3 -1
- package/features/button/button.component.d.ts +14 -7
- package/features/button/components/button-menu.component.d.ts +25 -0
- package/features/chips/chips.component.d.ts +1 -0
- package/features/combobox/combobox.component.d.ts +4 -1
- package/features/fileupload/fileupload.component.d.ts +66 -0
- package/features/icon-picker/icon-picker.component.d.ts +3 -0
- package/features/modal/modal.component.d.ts +1 -1
- package/features/picklist/picklist.component.d.ts +6 -1
- package/features/table/components/table-actions-menu.component.d.ts +12 -0
- package/features/table/components/table-cell-content.component.d.ts +41 -0
- package/features/table/components/table-sort-indicator.component.d.ts +11 -0
- package/features/table/table.component.d.ts +28 -44
- package/features/table/utils/table-config.util.d.ts +3 -0
- package/features/table/utils/table-data.util.d.ts +10 -0
- package/features/table/utils/table-layout.util.d.ts +4 -0
- package/features/table/utils/table-truncate.pipe.d.ts +12 -0
- package/features/table/utils/table-visual.util.d.ts +21 -0
- package/features/tooltip/tooltip.component.d.ts +3 -1
- package/fesm2022/seniorsistemas-data-seniorx-core.mjs +3525 -1848
- package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +5 -2
- package/src/locales/en.json +194 -0
- package/src/locales/es-CO.json +187 -1
- 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 "@
|
|
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.
|
|
66
|
-
|
|
102
|
+
if (event.target === event.currentTarget) {
|
|
103
|
+
event.preventDefault();
|
|
104
|
+
event.stopPropagation();
|
|
105
|
+
}
|
|
67
106
|
}
|
|
68
|
-
|
|
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
|
|
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==
|