@libs-ui/components-tabs 0.2.42 → 0.2.44
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/esm2022/interfaces/tab.interface.mjs +1 -1
- package/esm2022/item/item.component.mjs +26 -15
- package/esm2022/tabs.component.mjs +13 -29
- package/esm2022/utils/tabs.mjs +11 -9
- package/fesm2022/libs-ui-components-tabs.mjs +46 -63
- package/fesm2022/libs-ui-components-tabs.mjs.map +1 -1
- package/interfaces/tab.interface.d.ts +9 -0
- package/item/item.component.d.ts +9 -6
- package/package.json +1 -1
- package/tabs.component.d.ts +4 -5
- package/utils/tabs.d.ts +1 -2
- package/esm2022/services/tab.service.mjs +0 -17
- package/services/tab.service.d.ts +0 -10
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, computed,
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, inject, input, model, output, signal, viewChild } from '@angular/core';
|
|
2
2
|
import { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';
|
|
3
3
|
import { LibsUiComponentsDragContainerDirective, LibsUiDragItemDirective } from '@libs-ui/components-drag-drop';
|
|
4
4
|
import { LibsUiComponentsListComponent } from '@libs-ui/components-list';
|
|
@@ -8,7 +8,6 @@ import { TranslateService } from '@ngx-translate/core';
|
|
|
8
8
|
import { fromEvent, Subject } from 'rxjs';
|
|
9
9
|
import { debounceTime, takeUntil } from 'rxjs/operators';
|
|
10
10
|
import { LibsUiComponentsTabsItemComponent } from './item/item.component';
|
|
11
|
-
import { LibsUiTabsService } from './services/tab.service';
|
|
12
11
|
import { tabMoreListConfig } from './utils/tabs';
|
|
13
12
|
import * as i0 from "@angular/core";
|
|
14
13
|
export class LibsUiComponentsTabsComponent {
|
|
@@ -30,7 +29,7 @@ export class LibsUiComponentsTabsComponent {
|
|
|
30
29
|
ignoreCalculatorTab = input(false);
|
|
31
30
|
size = input('medium');
|
|
32
31
|
disableLabel = input();
|
|
33
|
-
|
|
32
|
+
allowDragDropPosition = input();
|
|
34
33
|
zIndex = input();
|
|
35
34
|
configCss = model();
|
|
36
35
|
popoverShowMoreTabItem = input();
|
|
@@ -39,15 +38,11 @@ export class LibsUiComponentsTabsComponent {
|
|
|
39
38
|
outFunctionsControl = output();
|
|
40
39
|
outDragTabChange = output();
|
|
41
40
|
outDisplayMoreItem = output();
|
|
41
|
+
outActionSelected = output();
|
|
42
42
|
headerEl = viewChild.required('headerEl');
|
|
43
43
|
headerLeftEl = viewChild.required('headerLeftEl');
|
|
44
44
|
headerRightEl = viewChild.required('headerRightEl');
|
|
45
|
-
tabsService = inject(LibsUiTabsService);
|
|
46
45
|
translate = inject(TranslateService);
|
|
47
|
-
constructor() {
|
|
48
|
-
effect(() => this.tabMoreListConfig.set(tabMoreListConfig(this.tabsService, this.translate, this.fieldKey(), this.fieldLabel(), this.tabs())), { allowSignalWrites: true });
|
|
49
|
-
effect(() => this.itemsDisplay.set(this.tabs().items().filter(item => item().specificDisplay)), { allowSignalWrites: true });
|
|
50
|
-
}
|
|
51
46
|
ngOnInit() {
|
|
52
47
|
this.updateTabsCssConfig();
|
|
53
48
|
if (this.ignoreCalculatorTab()) {
|
|
@@ -68,7 +63,7 @@ export class LibsUiComponentsTabsComponent {
|
|
|
68
63
|
this.displayMoreItem.set(false);
|
|
69
64
|
this.calculatorTabsItemDisplay();
|
|
70
65
|
});
|
|
71
|
-
this.changeViewTab.pipe(debounceTime(
|
|
66
|
+
this.changeViewTab.pipe(debounceTime(20), takeUntil(this.onDestroy)).subscribe(() => this.calculatorTabsItemDisplay());
|
|
72
67
|
}
|
|
73
68
|
updateTabsCssConfig() {
|
|
74
69
|
if (this.configCss()) {
|
|
@@ -108,7 +103,7 @@ export class LibsUiComponentsTabsComponent {
|
|
|
108
103
|
}
|
|
109
104
|
}
|
|
110
105
|
updateStylesDragDropOverride() {
|
|
111
|
-
if (this.
|
|
106
|
+
if (this.allowDragDropPosition()) {
|
|
112
107
|
return [
|
|
113
108
|
{
|
|
114
109
|
className: 'libs-ui-drag-drop-item-placeholder',
|
|
@@ -194,21 +189,8 @@ export class LibsUiComponentsTabsComponent {
|
|
|
194
189
|
this.popoverFunctionControlEvent()?.removePopoverOverlay();
|
|
195
190
|
this.calculatorTabsItemDisplay();
|
|
196
191
|
}
|
|
197
|
-
async
|
|
198
|
-
|
|
199
|
-
// case 'pin':
|
|
200
|
-
// await this.handlerPin(event.item);
|
|
201
|
-
// break;
|
|
202
|
-
// case 'unpin':
|
|
203
|
-
// await this.handlerUnpin(event.item);
|
|
204
|
-
// break;
|
|
205
|
-
// case 'edit':
|
|
206
|
-
// this.handlerEditTabItem(event.item);
|
|
207
|
-
// break;
|
|
208
|
-
// case 'delete':
|
|
209
|
-
// this.handlerRemoveTabItem(event.item);
|
|
210
|
-
// break;
|
|
211
|
-
// }
|
|
192
|
+
async handlerActionSelected(event) {
|
|
193
|
+
this.outActionSelected.emit(event);
|
|
212
194
|
}
|
|
213
195
|
async addTabItem(item, selected = true, addFirst) {
|
|
214
196
|
const items = this.tabs().items;
|
|
@@ -256,13 +238,15 @@ export class LibsUiComponentsTabsComponent {
|
|
|
256
238
|
this.tabs().items.update(items => items.sort((prev, next) => (prev().order || 0) - (next().order || 0)));
|
|
257
239
|
this.displayMoreItem.set(displayMoreItem);
|
|
258
240
|
this.outDisplayMoreItem.emit(this.displayMoreItem());
|
|
241
|
+
this.itemsDisplay.set(this.tabs().items().filter(item => item().specificDisplay));
|
|
242
|
+
this.tabMoreListConfig.set(tabMoreListConfig(this.translate, this.fieldKey(), this.fieldLabel(), this.tabs()));
|
|
259
243
|
}
|
|
260
244
|
ngOnDestroy() {
|
|
261
245
|
this.onDestroy.next();
|
|
262
246
|
this.onDestroy.complete();
|
|
263
247
|
}
|
|
264
248
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
265
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsTabsComponent, isStandalone: true, selector: "libs_ui-components-tabs", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, fieldKey: { classPropertyName: "fieldKey", publicName: "fieldKey", isSignal: true, isRequired: false, transformFunction: null }, fieldLabel: { classPropertyName: "fieldLabel", publicName: "fieldLabel", isSignal: true, isRequired: false, transformFunction: null }, keySelected: { classPropertyName: "keySelected", publicName: "keySelected", isSignal: true, isRequired: true, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: true, transformFunction: null }, heightTabItem: { classPropertyName: "heightTabItem", publicName: "heightTabItem", isSignal: true, isRequired: false, transformFunction: null }, ignoreCalculatorTab: { classPropertyName: "ignoreCalculatorTab", publicName: "ignoreCalculatorTab", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, transformFunction: null }, hasAnimation: { classPropertyName: "hasAnimation", publicName: "hasAnimation", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, configCss: { classPropertyName: "configCss", publicName: "configCss", isSignal: true, isRequired: false, transformFunction: null }, popoverShowMoreTabItem: { classPropertyName: "popoverShowMoreTabItem", publicName: "popoverShowMoreTabItem", isSignal: true, isRequired: false, transformFunction: null }, checkCanChangeTabSelected: { classPropertyName: "checkCanChangeTabSelected", publicName: "checkCanChangeTabSelected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { keySelected: "keySelectedChange", configCss: "configCssChange", outKeySelected: "outKeySelected", outFunctionsControl: "outFunctionsControl", outDragTabChange: "outDragTabChange", outDisplayMoreItem: "outDisplayMoreItem" }, providers: [LibsUiTabsService], viewQueries: [{ propertyName: "headerEl", first: true, predicate: ["headerEl"], descendants: true, isSignal: true }, { propertyName: "headerLeftEl", first: true, predicate: ["headerLeftEl"], descendants: true, isSignal: true }, { propertyName: "headerRightEl", first: true, predicate: ["headerRightEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"libs-ui-tab\">\n <div #headerEl\n class=\"libs-ui-tab-header z-[1] {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div #headerLeftEl\n class='libs-ui-tab-header-left'>\n <ng-content select=\"div.libs-ui-tab-header-left\"></ng-content>\n </div>\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n <div class=\"!flex w-full\"\n #elementContainerEl\n LibsUiComponentsDragContainerDirective\n [stylesOverride]=\"stylesDragDropOverrideComputed()\"\n [groupName]=\"groupName()\"\n [(items)]=\"itemsDisplay\"\n [directionDrag]=\"'horizontal'\"\n [disableDragContainer]=\"!hasAnimation()\"\n [acceptDragSameGroup]=\"hasAnimation()\"\n (outDroppedContainer)=\"handlerDropContainer($event)\">\n @for (item of itemsDisplay(); track item) {\n <div LibsUiDragItemDirective\n [disable]=\"disable() || !hasAnimation()\"\n [groupName]=\"groupName()\"\n [elementContainer]=\"elementContainerEl\"\n [dragBoundary]=\"true\"\n [dragBoundaryAcceptMouseLeaveContainer]=\"true\"\n class=\"relative libs-ui-tab-item-container\"\n [style.width.px]=\"mode() === 'space-between' ? (elementContainerEl.clientWidth/(itemsDisplay().length || 1)) : undefined\"\n [class.flex]=\"mode() === 'center-has-line'\"\n [class.items-center]=\"mode() === 'center-has-line'\">\n @if (hasAnimation() && !disable()) {\n <span class=\"libs-ui-icon-arrange text-[#9ca2ad] absolute top-[12px] left-[4px]\"></span>\n }\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [ignoreCalculatorTab]=\"true\"\n [changeViewTab]=\"changeViewTab\"\n (click)=\"handlerClickItem($event, item)\" />\n @if (mode() === 'center-has-line' && !$last) {\n <div class=\"w-[40px] h-[1px] bg-[#e6e7ea]\"></div>\n }\n </div>\n }\n </div>\n </div>\n <div class=\"flex items-center\"\n [class.ml-auto]=\"displayMoreItem() && !tabs().viewMoreIgnoreMarginLeft\">\n @if (displayMoreItem()) {\n <libs_ui-components-popover class=\"w-full h-full flex items-center\"\n [mode]=\"'click-toggle'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"{\n zIndex: popoverShowMoreTabItem()?.config?.zIndex || 1000,\n maxHeight: popoverShowMoreTabItem()?.config?.maxHeight || 287,\n maxWidth: popoverShowMoreTabItem()?.config?.maxWidth || 2048,\n width: popoverShowMoreTabItem()?.config?.width || 277, \n direction: popoverShowMoreTabItem()?.config?.direction || 'bottom',\n template: popoverShowMoreTabItem()?.config?.template || menuEl,\n whiteTheme: true,\n ignoreArrow: true,\n position: popoverShowMoreTabItem()?.config?.position || { mode: 'end', distance: 0 }\n }\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classInclude]=\"'p-[8px]'\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical rotate-90 text-[16px] mr-0'\"\n [popover]=\"{config: {content: popoverShowMoreTabItem()?.config?.content}}\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-popover>\n }\n </div>\n <div #headerRightEl\n class=\"libs-ui-tab-header-right {{ tabs().classIncludeHeaderRight || '' }}\">\n <ng-content select=\"div.libs-ui-tab-header-right\"></ng-content>\n </div>\n </div>\n <div class=\"absolute top-0 z-0 w-full\">\n <div class=\"libs-ui-tab-header {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n @for (item of tabs().items(); track item) {\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [changeViewTab]=\"changeViewTab\"\n [ignoreCalculatorTab]=\"ignoreCalculatorTab()\"\n (click)=\"handlerClickItem($event, item)\" />\n }\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #menuEl>\n <libs_ui-components-list [config]=\"tabMoreListConfig()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n</ng-template>\n", styles: [".libs-ui-tab{position:relative;display:flex;flex-direction:column;width:100%;height:100%}.libs-ui-tab .libs-ui-tab-header{position:relative;background-color:#fff;display:flex;flex-wrap:nowrap;width:100%;overflow:hidden;flex-shrink:0}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-header-center{display:flex;flex-wrap:nowrap}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-item-container .libs-ui-icon-arrange{display:none}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-item-container:hover .libs-ui-icon-arrange{display:block}.libs-ui-tab .libs-ui-tab-content-container{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: LibsUiComponentsDragContainerDirective, selector: "[LibsUiComponentsDragContainerDirective]", inputs: ["disableDragContainer", "mode", "directionDrag", "viewEncapsulation", "acceptDragSameGroup", "placeholder", "groupName", "dropToGroupName", "items", "stylesOverride"], outputs: ["itemsChange", "outDragStartContainer", "outDragOverContainer", "outDragLeaveContainer", "outDragEndContainer", "outDroppedContainer", "outDroppedContainerEmpty", "outFunctionControl"] }, { kind: "directive", type: LibsUiDragItemDirective, selector: "[LibsUiDragItemDirective]", inputs: ["fieldId", "item", "itemInContainerVirtualScroll", "throttleTimeHandlerDraggingEvent", "ignoreStopEvent", "onlyMouseDownStopEvent", "dragRootElement", "groupName", "dragBoundary", "dragBoundaryAcceptMouseLeaveContainer", "elementContainer", "zIndex", "disable"], outputs: ["outDragStart", "outDragOver", "outDragLeave", "outDragEnd", "outDropped"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsTabsItemComponent, selector: "libs_ui-components-tabs-item", inputs: ["ignoreCalculatorTab", "step", "mode", "tabs", "item", "keySelected", "fieldLabel", "fieldKey", "cssDefault", "size", "disable", "disableLabel", "zIndex", "changeViewTab"], outputs: ["itemChange", "outSelectAction"] }, { kind: "component", type: LibsUiComponentsListComponent, selector: "libs_ui-components-list", inputs: ["hiddenInputSearch", "dropdownTabKeyActive", "keySearch", "itemChangeUnSelect", "paddingLeftItem", "config", "isSearchOnline", "disable", "disableLabel", "labelConfig", "searchConfig", "searchPadding", "dividerClassInclude", "hasDivider", "buttonsOther", "hasButtonUnSelectOption", "clickExactly", "backgroundListCustom", "maxItemShow", "keySelected", "multiKeySelected", "keysDisableItem", "keysHiddenItem", "focusInputSearch", "skipFocusInputWhenKeySearchStoreUndefined", "functionCustomAddDataToStore", "functionGetItemAutoAddList", "validRequired", "showValidateBottom", "zIndex", "loadingIconSize", "templateRefSearchNoData", "resetKeyWhenSelectAllKeyDropdown", "ignoreClassDisableDefaultWhenUseKeysDisableItem"], outputs: ["outSelectKey", "outSelectMultiKey", "outUnSelectMultiKey", "outClickButtonOther", "outFieldKey", "outChangeView", "outLoading", "outFunctionsControl", "outChangStageFlagMousePopover", "outLoadItemsComplete"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
249
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsTabsComponent, isStandalone: true, selector: "libs_ui-components-tabs", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, fieldKey: { classPropertyName: "fieldKey", publicName: "fieldKey", isSignal: true, isRequired: false, transformFunction: null }, fieldLabel: { classPropertyName: "fieldLabel", publicName: "fieldLabel", isSignal: true, isRequired: false, transformFunction: null }, keySelected: { classPropertyName: "keySelected", publicName: "keySelected", isSignal: true, isRequired: true, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: true, transformFunction: null }, heightTabItem: { classPropertyName: "heightTabItem", publicName: "heightTabItem", isSignal: true, isRequired: false, transformFunction: null }, ignoreCalculatorTab: { classPropertyName: "ignoreCalculatorTab", publicName: "ignoreCalculatorTab", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, transformFunction: null }, allowDragDropPosition: { classPropertyName: "allowDragDropPosition", publicName: "allowDragDropPosition", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, configCss: { classPropertyName: "configCss", publicName: "configCss", isSignal: true, isRequired: false, transformFunction: null }, popoverShowMoreTabItem: { classPropertyName: "popoverShowMoreTabItem", publicName: "popoverShowMoreTabItem", isSignal: true, isRequired: false, transformFunction: null }, checkCanChangeTabSelected: { classPropertyName: "checkCanChangeTabSelected", publicName: "checkCanChangeTabSelected", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { keySelected: "keySelectedChange", configCss: "configCssChange", outKeySelected: "outKeySelected", outFunctionsControl: "outFunctionsControl", outDragTabChange: "outDragTabChange", outDisplayMoreItem: "outDisplayMoreItem", outActionSelected: "outActionSelected" }, viewQueries: [{ propertyName: "headerEl", first: true, predicate: ["headerEl"], descendants: true, isSignal: true }, { propertyName: "headerLeftEl", first: true, predicate: ["headerLeftEl"], descendants: true, isSignal: true }, { propertyName: "headerRightEl", first: true, predicate: ["headerRightEl"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"libs-ui-tab\">\n <div #headerEl\n class=\"libs-ui-tab-header z-[1] {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div #headerLeftEl\n class='libs-ui-tab-header-left'>\n <ng-content select=\"div.libs-ui-tab-header-left\"></ng-content>\n </div>\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n <div class=\"!flex w-full\"\n #elementContainerEl\n LibsUiComponentsDragContainerDirective\n [stylesOverride]=\"stylesDragDropOverrideComputed()\"\n [groupName]=\"groupName()\"\n [(items)]=\"itemsDisplay\"\n [directionDrag]=\"'horizontal'\"\n [disableDragContainer]=\"!allowDragDropPosition()\"\n [acceptDragSameGroup]=\"allowDragDropPosition()\"\n (outDroppedContainer)=\"handlerDropContainer($event)\">\n @for (item of itemsDisplay(); track item) {\n <div LibsUiDragItemDirective\n [disable]=\"disable() || !allowDragDropPosition()\"\n [groupName]=\"groupName()\"\n [elementContainer]=\"elementContainerEl\"\n [dragBoundary]=\"true\"\n [dragBoundaryAcceptMouseLeaveContainer]=\"true\"\n class=\"relative libs-ui-tab-item-container\"\n [style.width.px]=\"mode() === 'space-between' ? (elementContainerEl.clientWidth/(itemsDisplay().length || 1)) : undefined\"\n [class.flex]=\"mode() === 'center-has-line'\"\n [class.items-center]=\"mode() === 'center-has-line'\">\n @if (allowDragDropPosition() && !disable()) {\n <span class=\"libs-ui-icon-arrange text-[#9ca2ad] absolute top-[14px] left-[4px]\"></span>\n }\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [ignoreCalculatorTab]=\"true\"\n [changeViewTab]=\"changeViewTab\"\n (click)=\"handlerClickItem($event, item)\"\n (outActionSelected)=\"handlerActionSelected($event)\" />\n @if (mode() === 'center-has-line' && !$last) {\n <div class=\"w-[40px] h-[1px] bg-[#e6e7ea]\"></div>\n }\n </div>\n }\n </div>\n </div>\n <div class=\"flex items-center\"\n [class.ml-auto]=\"displayMoreItem() && !tabs().viewMoreIgnoreMarginLeft\">\n @if (displayMoreItem()) {\n <libs_ui-components-popover class=\"w-full h-full flex items-center\"\n [mode]=\"'click-toggle'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"{\n zIndex: popoverShowMoreTabItem()?.config?.zIndex || 1000,\n maxHeight: popoverShowMoreTabItem()?.config?.maxHeight || 287,\n maxWidth: popoverShowMoreTabItem()?.config?.maxWidth || 2048,\n width: popoverShowMoreTabItem()?.config?.width || 277, \n direction: popoverShowMoreTabItem()?.config?.direction || 'bottom',\n template: popoverShowMoreTabItem()?.config?.template || menuEl,\n whiteTheme: true,\n ignoreArrow: true,\n position: popoverShowMoreTabItem()?.config?.position || { mode: 'end', distance: 0 }\n }\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classInclude]=\"'!p-[8px]'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical rotate-90 text-[16px] mr-0'\"\n [popover]=\"{config: {content: popoverShowMoreTabItem()?.config?.content || 'i18n_view_more'}}\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-popover>\n }\n </div>\n <div #headerRightEl\n class=\"libs-ui-tab-header-right {{ tabs().classIncludeHeaderRight || '' }}\">\n <ng-content select=\"div.libs-ui-tab-header-right\"></ng-content>\n </div>\n </div>\n <div class=\"absolute top-0 z-0 w-full\">\n <div class=\"libs-ui-tab-header {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n @for (item of tabs().items(); track item) {\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [changeViewTab]=\"changeViewTab\"\n [ignoreCalculatorTab]=\"ignoreCalculatorTab()\"\n (click)=\"handlerClickItem($event, item)\" />\n }\n </div>\n </div>\n </div>\n</div>\n<ng-template #menuEl>\n <libs_ui-components-list [config]=\"tabMoreListConfig()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n</ng-template>\n", styles: [".libs-ui-tab{position:relative;display:flex;width:100%}.libs-ui-tab .libs-ui-tab-header{position:relative;background-color:#fff;display:flex;flex-wrap:nowrap;width:100%;overflow:hidden;flex-shrink:0}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-header-center{display:flex;flex-wrap:nowrap}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-item-container .libs-ui-icon-arrange{display:none}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-item-container:hover .libs-ui-icon-arrange{display:block}.libs-ui-tab .libs-ui-tab-content-container{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: LibsUiComponentsDragContainerDirective, selector: "[LibsUiComponentsDragContainerDirective]", inputs: ["disableDragContainer", "mode", "directionDrag", "viewEncapsulation", "acceptDragSameGroup", "placeholder", "groupName", "dropToGroupName", "items", "stylesOverride"], outputs: ["itemsChange", "outDragStartContainer", "outDragOverContainer", "outDragLeaveContainer", "outDragEndContainer", "outDroppedContainer", "outDroppedContainerEmpty", "outFunctionControl"] }, { kind: "directive", type: LibsUiDragItemDirective, selector: "[LibsUiDragItemDirective]", inputs: ["fieldId", "item", "itemInContainerVirtualScroll", "throttleTimeHandlerDraggingEvent", "ignoreStopEvent", "onlyMouseDownStopEvent", "dragRootElement", "groupName", "dragBoundary", "dragBoundaryAcceptMouseLeaveContainer", "elementContainer", "zIndex", "disable"], outputs: ["outDragStart", "outDragOver", "outDragLeave", "outDragEnd", "outDropped"] }, { kind: "component", type: LibsUiComponentsPopoverComponent, selector: "libs_ui-components-popover,[LibsUiComponentsPopoverDirective]", inputs: ["flagMouse", "type", "mode", "config", "ignoreShowPopover", "elementRefCustom", "classInclude", "ignoreHiddenPopoverContentWhenMouseLeave", "ignoreStopPropagationEvent", "ignoreCursorPointerModeLikeClick", "isAddContentToParentDocument", "ignoreClickOutside"], outputs: ["outEvent", "outChangStageFlagMouse", "outEventPopoverContent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsButtonsButtonComponent, selector: "libs_ui-components-buttons-button", inputs: ["flagMouse", "type", "buttonCustom", "sizeButton", "label", "disable", "isPending", "imageLeft", "classInclude", "classIconLeft", "classIconRight", "classLabel", "iconOnlyType", "popover", "ignoreStopPropagationEvent", "zIndex", "widthLabelPopover", "styleIconLeft", "styleButton", "ignoreFocusWhenInputTab", "ignoreSetClickWhenShowPopover", "ignorePointerEvent", "isActive"], outputs: ["outClick", "outPopoverEvent", "outFunctionsControl"] }, { kind: "component", type: LibsUiComponentsTabsItemComponent, selector: "libs_ui-components-tabs-item", inputs: ["ignoreCalculatorTab", "step", "mode", "tabs", "item", "keySelected", "fieldLabel", "fieldKey", "cssDefault", "size", "disable", "disableLabel", "zIndex", "changeViewTab"], outputs: ["itemChange", "outActionSelected"] }, { kind: "component", type: LibsUiComponentsListComponent, selector: "libs_ui-components-list", inputs: ["hiddenInputSearch", "dropdownTabKeyActive", "keySearch", "itemChangeUnSelect", "paddingLeftItem", "config", "isSearchOnline", "disable", "disableLabel", "labelConfig", "searchConfig", "searchPadding", "dividerClassInclude", "hasDivider", "buttonsOther", "hasButtonUnSelectOption", "clickExactly", "backgroundListCustom", "maxItemShow", "keySelected", "multiKeySelected", "keysDisableItem", "keysHiddenItem", "focusInputSearch", "skipFocusInputWhenKeySearchStoreUndefined", "functionCustomAddDataToStore", "functionGetItemsAutoAddList", "validRequired", "showValidateBottom", "zIndex", "loadingIconSize", "templateRefSearchNoData", "resetKeyWhenSelectAllKeyDropdown", "ignoreClassDisableDefaultWhenUseKeysDisableItem"], outputs: ["outSelectKey", "outSelectMultiKey", "outUnSelectMultiKey", "outClickButtonOther", "outFieldKey", "outChangeView", "outLoading", "outFunctionsControl", "outChangStageFlagMousePopover", "outLoadItemsComplete"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
266
250
|
}
|
|
267
251
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsTabsComponent, decorators: [{
|
|
268
252
|
type: Component,
|
|
@@ -273,6 +257,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
273
257
|
LibsUiComponentsButtonsButtonComponent,
|
|
274
258
|
LibsUiComponentsTabsItemComponent,
|
|
275
259
|
LibsUiComponentsListComponent
|
|
276
|
-
],
|
|
277
|
-
}]
|
|
278
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvdGFicy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvdGFicy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQWMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUNyTCxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RixPQUFPLEVBQVMsc0NBQXNDLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN2SCxPQUFPLEVBQXlDLDZCQUE2QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEgsT0FBTyxFQUEwQyxnQ0FBZ0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBbUJq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QixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1Asc0NBQXNDO3dCQUN0Qyx1QkFBdUI7d0JBQ3ZCLGdDQUFnQzt3QkFDaEMsc0NBQXNDO3dCQUN0QyxpQ0FBaUM7d0JBQ2pDLDZCQUE2QjtxQkFDOUIsYUFDVSxDQUFDLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgdmlld0NoaWxkLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IElEcm9wLCBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSwgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWRyYWctZHJvcCc7XG5pbXBvcnQgeyBJTGlzdERhdGFFbWl0S2V5LCBJTGlzdFZpZXdDb25maWdJdGVtLCBMaWJzVWlDb21wb25lbnRzTGlzdENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGlzdCc7XG5pbXBvcnQgeyBJUG9wb3ZlciwgSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgY29udmVydE9iamVjdFRvU2lnbmFsLCBpc05pbCwgdXVpZCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJVGFiQ3NzQ29uZmlnLCBJVGFiRnVuY3Rpb25Db250cm9sRXZlbnQsIElUYWJJdGVtLCBJVGFiSXRlbUV2ZW50LCBJVGFicywgVFlQRV9UQUJfTU9ERSB9IGZyb20gJy4vaW50ZXJmYWNlcy90YWIuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNUYWJzSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vaXRlbS9pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMaWJzVWlUYWJzU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdGFiLnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFiTW9yZUxpc3RDb25maWcgfSBmcm9tICcuL3V0aWxzL3RhYnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtdGFicycsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFicy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlLFxuICAgIExpYnNVaURyYWdJdGVtRGlyZWN0aXZlLFxuICAgIExpYnNVaUNvbXBvbmVudHNQb3BvdmVyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNUYWJzSXRlbUNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzTGlzdENvbXBvbmVudFxuICBdLFxuICBwcm92aWRlcnM6IFtMaWJzVWlUYWJzU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1RhYnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJvdGVjdGVkIGl0ZW1zRGlzcGxheSA9IHNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxJVGFiSXRlbT4+PihbXSk7XG4gIHByb3RlY3RlZCBkaXNwbGF5TW9yZUl0ZW0gPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcm90ZWN0ZWQgdGFiTW9yZUxpc3RDb25maWcgPSBzaWduYWw8SUxpc3RWaWV3Q29uZmlnSXRlbSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIGNoYW5nZVZpZXdUYWIgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcm90ZWN0ZWQgZ3JvdXBOYW1lID0gc2lnbmFsPHN0cmluZz4odXVpZCgpKTtcbiAgcHJvdGVjdGVkIHN0eWxlc0RyYWdEcm9wT3ZlcnJpZGVDb21wdXRlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMudXBkYXRlU3R5bGVzRHJhZ0Ryb3BPdmVycmlkZSgpKTtcblxuICBwcml2YXRlIHBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCA9IHNpZ25hbDxJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcml2YXRlIG9uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcmVhZG9ubHkgbW9kZSA9IGlucHV0PFRZUEVfVEFCX01PREU+KCdsZWZ0Jyk7XG4gIHJlYWRvbmx5IGZpZWxkS2V5ID0gaW5wdXQ8c3RyaW5nPigna2V5Jyk7XG4gIHJlYWRvbmx5IGZpZWxkTGFiZWwgPSBpbnB1dDxzdHJpbmc+KCdsYWJlbCcpO1xuICByZWFkb25seSBrZXlTZWxlY3RlZCA9IG1vZGVsLnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZSA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHRhYnMgPSBpbnB1dC5yZXF1aXJlZDxJVGFicz4oKTtcbiAgcmVhZG9ubHkgaGVpZ2h0VGFiSXRlbSA9IGlucHV0PG51bWJlcj4oNDApO1xuICByZWFkb25seSBpZ25vcmVDYWxjdWxhdG9yVGFiID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBzaXplID0gaW5wdXQ8J2xhbmdlcicgfCAnbWVkaXVtJz4oJ21lZGl1bScpO1xuICByZWFkb25seSBkaXNhYmxlTGFiZWwgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBoYXNBbmltYXRpb24gPSBpbnB1dDxib29sZWFuPih0cnVlKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBjb25maWdDc3MgPSBtb2RlbDxJVGFiQ3NzQ29uZmlnPigpO1xuICByZWFkb25seSBwb3BvdmVyU2hvd01vcmVUYWJJdGVtID0gaW5wdXQ8SVBvcG92ZXI+KCk7XG4gIHJlYWRvbmx5IGNoZWNrQ2FuQ2hhbmdlVGFiU2VsZWN0ZWQgPSBpbnB1dDwoKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPj4oKTtcblxuICByZWFkb25seSBvdXRLZXlTZWxlY3RlZCA9IG91dHB1dDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IG91dEZ1bmN0aW9uc0NvbnRyb2wgPSBvdXRwdXQ8SVRhYkZ1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuICByZWFkb25seSBvdXREcmFnVGFiQ2hhbmdlID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IG91dERpc3BsYXlNb3JlSXRlbSA9IG91dHB1dDxib29sZWFuPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVyRWwgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZj4oJ2hlYWRlckVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVyTGVmdEVsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdoZWFkZXJMZWZ0RWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBoZWFkZXJSaWdodEVsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdoZWFkZXJSaWdodEVsJyk7XG5cbiAgcHJpdmF0ZSB0YWJzU2VydmljZSA9IGluamVjdChMaWJzVWlUYWJzU2VydmljZSk7XG4gIHByaXZhdGUgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnRhYk1vcmVMaXN0Q29uZmlnLnNldCh0YWJNb3JlTGlzdENvbmZpZyh0aGlzLnRhYnNTZXJ2aWNlLCB0aGlzLnRyYW5zbGF0ZSwgdGhpcy5maWVsZEtleSgpLCB0aGlzLmZpZWxkTGFiZWwoKSwgdGhpcy50YWJzKCkpKSwgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9KVxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLml0ZW1zRGlzcGxheS5zZXQodGhpcy50YWJzKCkuaXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpdGVtKCkuc3BlY2lmaWNEaXNwbGF5KSksIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSlcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudXBkYXRlVGFic0Nzc0NvbmZpZygpO1xuICAgIGlmICh0aGlzLmlnbm9yZUNhbGN1bGF0b3JUYWIoKSkge1xuICAgICAgdGhpcy50YWJzKCkuaXRlbXMoKS5tYXAoaXRlbSA9PiBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIHNwZWNpZmljRGlzcGxheTogdHJ1ZSB9KSkpO1xuICAgIH1cbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh7XG4gICAgICBhZGRUYWJJdGVtOiB0aGlzLmFkZFRhYkl0ZW0uYmluZCh0aGlzKSxcbiAgICAgIGNhbGN1bGF0b3JUYWJJdGVtc0Rpc3BsYXk6IHRoaXMuY2FsY3VsYXRvclRhYnNJdGVtRGlzcGxheS5iaW5kKHRoaXMpLFxuICAgICAgc2VsZWN0ZWRUYWJJdGVtOiB0aGlzLmhhbmRsZXJTZWxlY3RlZFRhYkl0ZW0uYmluZCh0aGlzKVxuICAgIH0pO1xuICAgIGlmICh0aGlzLm1vZGUoKSAhPT0gJ2xlZnQnIHx8IHRoaXMuaWdub3JlQ2FsY3VsYXRvclRhYigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5waXBlKGRlYm91bmNlVGltZSgyNTApLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnRhYnMoKS5pdGVtcygpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmRpc3BsYXlNb3JlSXRlbS5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5jYWxjdWxhdG9yVGFic0l0ZW1EaXNwbGF5KCk7XG4gICAgfSk7XG4gICAgdGhpcy5jaGFuZ2VWaWV3VGFiLnBpcGUoZGVib3VuY2VUaW1lKDMwMCksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNhbGN1bGF0b3JUYWJzSXRlbURpc3BsYXkoKSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRhYnNDc3NDb25maWcoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnQ3NzKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLm1vZGUoKSkge1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIHRoaXMuY29uZmlnQ3NzLnNldCh7XG4gICAgICAgICAgZmlyc3Q6ICdtbC1bMjBweF0gbXItWzE2cHhdJyxcbiAgICAgICAgICBvdGhlcjogJ21sLVsyMHB4XSBtci1bMTZweF0nXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIHRoaXMuY29uZmlnQ3NzLnNldCh7XG4gICAgICAgICAgZmlyc3Q6ICdweC1bMTJweF0gbWwtWzE4cHhdIG1yLVsxOHB4XScsXG4gICAgICAgICAgb3RoZXI6ICdweC1bMTJweF0gbXgtWzE4cHhdJyxcbiAgICAgICAgICBoZWFkZXI6ICdmbGV4IGp1c3RpZnktY2VudGVyJ1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50YWJzKCkuaXRlbXMoKS5tYXAoaXRlbSA9PiBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIHNwZWNpZmljRGlzcGxheTogdHJ1ZSB9KSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NlbnRlci1oYXMtbGluZSc6XG4gICAgICAgIHRoaXMuY29uZmlnQ3NzLnNldCh7XG4gICAgICAgICAgZmlyc3Q6ICdweC1bMTZweF0nLFxuICAgICAgICAgIG90aGVyOiAncHgtWzE2cHhdJyxcbiAgICAgICAgICBoZWFkZXJDZW50ZXI6ICdpdGVtcy1jZW50ZXInXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRhYnMoKS5pdGVtcygpLm1hcChpdGVtID0+IGl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNEaXNwbGF5OiB0cnVlIH0pKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3BhY2UtYmV0d2Vlbic6XG4gICAgICAgIHRoaXMuY29uZmlnQ3NzLnNldCh7XG4gICAgICAgICAgZmlyc3Q6ICdteC1hdXRvJyxcbiAgICAgICAgICBvdGhlcjogJ214LWF1dG8nLFxuICAgICAgICAgIGhlYWRlckNlbnRlcjogJ3ctZnVsbCdcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGFicygpLml0ZW1zKCkubWFwKGl0ZW0gPT4gaXRlbS51cGRhdGUoZGF0YSA9PiAoeyAuLi5kYXRhLCBzcGVjaWZpY0Rpc3BsYXk6IHRydWUgfSkpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdHlsZXNEcmFnRHJvcE92ZXJyaWRlKCkge1xuICAgIGlmICh0aGlzLmhhc0FuaW1hdGlvbigpKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1wbGFjZWhvbGRlcicsXG4gICAgICAgICAgc3R5bGVzOiAnJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAnbGlicy11aS1kcmFnLWRyb3AtaXRlbScsXG4gICAgICAgICAgc3R5bGVzOiAnY3Vyc29yOiBtb3ZlOydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tZHJhZ2dpbmcnLFxuICAgICAgICAgIHN0eWxlczogJ2N1cnNvcjogbW92ZTsgYmFja2dyb3VuZDogI2RkZGRkZDsnXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0nLFxuICAgICAgICBzdHlsZXM6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLWRpc2FibGUnLFxuICAgICAgICBzdHlsZXM6ICcnXG4gICAgICB9XG4gICAgXVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJEcm9wQ29udGFpbmVyKGV2ZW50OiBJRHJvcCkge1xuICAgIGNvbnN0IHsgaXRlbURyYWdJbmZvIH0gPSBldmVudDtcbiAgICBpZiAoIWl0ZW1EcmFnSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpdGVtcyA9IHRoaXMudGFicygpLml0ZW1zO1xuICAgIGNvbnN0IHsgaW5kZXhEcmFnLCBpbmRleERyb3AgfSA9IGl0ZW1EcmFnSW5mbztcbiAgICBpZiAoaXNOaWwoaW5kZXhEcmFnKSB8fCBpc05pbChpbmRleERyb3ApIHx8IGluZGV4RHJvcCA9PT0gaW5kZXhEcmFnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGl0ZW1EcmFnID0gaXRlbXMoKVtpbmRleERyYWcgYXMgbnVtYmVyXTtcbiAgICBpdGVtcy51cGRhdGUoaXRlbXMgPT4ge1xuICAgICAgaXRlbXMuc3BsaWNlKGluZGV4RHJhZyBhcyBudW1iZXIsIDEpO1xuICAgICAgaXRlbXMuc3BsaWNlKGluZGV4RHJvcCBhcyBudW1iZXIsIDAsIGl0ZW1EcmFnKTtcbiAgICAgIHJldHVybiBbLi4uaXRlbXNdO1xuICAgIH0pO1xuICAgIHRoaXMub3V0RHJhZ1RhYkNoYW5nZS5lbWl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudChldmVudDogSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50LnNldChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZXJTZWxlY3RlZFRhYkl0ZW0oa2V5OiBzdHJpbmcsIHJlc2V0RGlzYWJsZSA9IHRydWUpIHtcbiAgICBjb25zdCBpdGVtU2VsZWN0ZWQgPSB0aGlzLnRhYnMoKS5pdGVtcygpLmZpbmQoaXRlbSA9PiBpdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0ga2V5KTtcbiAgICBpZiAoIWl0ZW1TZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVzZXREaXNhYmxlKSB7XG4gICAgICBpdGVtU2VsZWN0ZWQudXBkYXRlKGl0ZW0gPT4gKHsgLi4uaXRlbSwgZGlzYWJsZTogZmFsc2UgfSkpO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZXJDbGlja0l0ZW0oeyBzdG9wUHJvcGFnYXRpb246ICgpID0+IHsgcmV0dXJuIH0gfSBhcyBFdmVudCwgaXRlbVNlbGVjdGVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0ZWRLZXkoZXZlbnQ6IElMaXN0RGF0YUVtaXRLZXkgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlckNsaWNrSXRlbSh7IHN0b3BQcm9wYWdhdGlvbjogKCkgPT4geyByZXR1cm4gfSB9IGFzIEV2ZW50LCBjb252ZXJ0T2JqZWN0VG9TaWduYWwoZXZlbnQuaXRlbSkpO1xuICAgIHRoaXMub3V0RHJhZ1RhYkNoYW5nZS5lbWl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckNsaWNrSXRlbShldmVudDogRXZlbnQsIGl0ZW06IFdyaXRhYmxlU2lnbmFsPElUYWJJdGVtPikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChpdGVtKCkuZGlzYWJsZSB8fCB0aGlzLmRpc2FibGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaGVja0NhbkNoYW5nZVRhYlNlbGVjdGVkID0gdGhpcy5jaGVja0NhbkNoYW5nZVRhYlNlbGVjdGVkKCk7XG4gICAgaWYgKGNoZWNrQ2FuQ2hhbmdlVGFiU2VsZWN0ZWQpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgY2hlY2tDYW5DaGFuZ2VUYWJTZWxlY3RlZCgpO1xuICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlSXRlbVNlbGVjdGVkKGl0ZW0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZUl0ZW1TZWxlY3RlZChpdGVtKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlSXRlbVNlbGVjdGVkKGl0ZW06IFdyaXRhYmxlU2lnbmFsPElUYWJJdGVtPikge1xuICAgIHRoaXMua2V5U2VsZWN0ZWQuc2V0KGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldKTtcbiAgICB0aGlzLm91dEtleVNlbGVjdGVkLmVtaXQodGhpcy5rZXlTZWxlY3RlZCgpKTtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCgpPy5yZW1vdmVQb3BvdmVyT3ZlcmxheSgpO1xuICAgIHRoaXMuY2FsY3VsYXRvclRhYnNJdGVtRGlzcGxheSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJTZWxlY3RBY3Rpb24oZXZlbnQ6IElUYWJJdGVtRXZlbnQpIHtcbiAgICAvLyBzd2l0Y2ggKGV2ZW50LmFjdGlvbikge1xuICAgIC8vICAgY2FzZSAncGluJzpcbiAgICAvLyAgICAgYXdhaXQgdGhpcy5oYW5kbGVyUGluKGV2ZW50Lml0ZW0pO1xuICAgIC8vICAgICBicmVhaztcblxuICAgIC8vICAgY2FzZSAndW5waW4nOlxuICAgIC8vICAgICBhd2FpdCB0aGlzLmhhbmRsZXJVbnBpbihldmVudC5pdGVtKTtcbiAgICAvLyAgICAgYnJlYWs7XG5cbiAgICAvLyAgIGNhc2UgJ2VkaXQnOlxuICAgIC8vICAgICB0aGlzLmhhbmRsZXJFZGl0VGFiSXRlbShldmVudC5pdGVtKTtcbiAgICAvLyAgICAgYnJlYWs7XG5cbiAgICAvLyAgIGNhc2UgJ2RlbGV0ZSc6XG4gICAgLy8gICAgIHRoaXMuaGFuZGxlclJlbW92ZVRhYkl0ZW0oZXZlbnQuaXRlbSk7XG4gICAgLy8gICAgIGJyZWFrO1xuICAgIC8vIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkVGFiSXRlbShpdGVtOiBXcml0YWJsZVNpZ25hbDxJVGFiSXRlbT4sIHNlbGVjdGVkID0gdHJ1ZSwgYWRkRmlyc3Q/OiBib29sZWFuKSB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnRhYnMoKS5pdGVtcztcbiAgICBpdGVtcy51cGRhdGUoaXRlbXMgPT4ge1xuICAgICAgaWYgKGFkZEZpcnN0KSB7XG4gICAgICAgIHJldHVybiBbaXRlbSwgLi4uaXRlbXNdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFsuLi5pdGVtcywgaXRlbV07XG4gICAgfSk7XG4gICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICB0aGlzLmhhbmRsZXJDbGlja0l0ZW0oeyBzdG9wUHJvcGFnYXRpb246ICgpID0+IHsgcmV0dXJuIH0gfSBhcyBFdmVudCwgaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNhbGN1bGF0b3JUYWJzSXRlbURpc3BsYXkoKSB7XG4gICAgbGV0IGl0ZW1zID0gdGhpcy50YWJzKCkuaXRlbXMoKTtcbiAgICBjb25zdCBpbmRleEl0ZW1TZWxlY3RlZCA9IGl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSB0aGlzLmtleVNlbGVjdGVkKCkpO1xuICAgIGlmIChpbmRleEl0ZW1TZWxlY3RlZCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kaXNwbGF5TW9yZUl0ZW0uc2V0KGZhbHNlKTtcbiAgICBsZXQgZGlzcGxheU1vcmVJdGVtID0gZmFsc2U7XG4gICAgY29uc3QgaGVhZGVyV2lkdGggPSB0aGlzLmhlYWRlckVsKCkubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCB8fCAwO1xuICAgIGNvbnN0IGl0ZW1TZWxlY3RlZCA9IGl0ZW1zW2luZGV4SXRlbVNlbGVjdGVkXTtcbiAgICBjb25zdCBpdGVtU2VsZWN0ZWRXaWR0aCA9IGl0ZW1TZWxlY3RlZCgpLnNwZWNpZmljV2lkdGg7XG4gICAgbGV0IHRvdGFsV2lkdGhJdGVtc0Rpc3BsYXkgPSAodGhpcy5oZWFkZXJMZWZ0RWwoKS5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoIHx8IDApICsgKHRoaXMuaGVhZGVyUmlnaHRFbCgpLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggfHwgMCkgKyAzMjtcbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCFpdGVtKCkuc3BlY2lmaWNXaWR0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIHNwZWNpZmljRGlzcGxheTogZmFsc2UgfSkpO1xuICAgICAgY29uc3QgaXRlbVdpZHRoID0gaXRlbSgpLnNwZWNpZmljV2lkdGggfHwgMDtcbiAgICAgIGNvbnN0IHdpZHRoID0gdG90YWxXaWR0aEl0ZW1zRGlzcGxheSArIGl0ZW1XaWR0aCArIChpbmRleCA8IGluZGV4SXRlbVNlbGVjdGVkID8gaXRlbVNlbGVjdGVkV2lkdGggOiAwKTtcbiAgICAgIHRvdGFsV2lkdGhJdGVtc0Rpc3BsYXkgKz0gaXRlbVdpZHRoO1xuICAgICAgaWYgKHdpZHRoID4gaGVhZGVyV2lkdGgpIHtcbiAgICAgICAgZGlzcGxheU1vcmVJdGVtID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXRlbS51cGRhdGUoZGF0YSA9PiAoeyAuLi5kYXRhLCBzcGVjaWZpY0Rpc3BsYXk6IHRydWUgfSkpO1xuICAgIH0pO1xuICAgIGl0ZW1TZWxlY3RlZC51cGRhdGUoZGF0YSA9PiAoeyAuLi5kYXRhLCBzcGVjaWZpY0Rpc3BsYXk6IHRydWUgfSkpO1xuICAgIGNvbnN0IGRpc3BsYXkgPSBpdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtKCkuc3BlY2lmaWNEaXNwbGF5ID09PSB0cnVlKTtcbiAgICBjb25zdCBub3REaXNwbGF5ID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSgpLnNwZWNpZmljRGlzcGxheSA9PT0gZmFsc2UpO1xuICAgIGl0ZW1zID0gZGlzcGxheS5jb25jYXQobm90RGlzcGxheSk7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IGl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgb3JkZXI6IGluZGV4IH0pKSk7XG4gICAgdGhpcy50YWJzKCkuaXRlbXMudXBkYXRlKGl0ZW1zID0+IGl0ZW1zLnNvcnQoKHByZXYsIG5leHQpID0+IChwcmV2KCkub3JkZXIgfHwgMCkgLSAobmV4dCgpLm9yZGVyIHx8IDApKSk7XG4gICAgdGhpcy5kaXNwbGF5TW9yZUl0ZW0uc2V0KGRpc3BsYXlNb3JlSXRlbSk7XG4gICAgdGhpcy5vdXREaXNwbGF5TW9yZUl0ZW0uZW1pdCh0aGlzLmRpc3BsYXlNb3JlSXRlbSgpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMub25EZXN0cm95Lm5leHQoKTtcbiAgICB0aGlzLm9uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG5cbn0iLCI8ZGl2IGNsYXNzPVwibGlicy11aS10YWJcIj5cbiAgPGRpdiAjaGVhZGVyRWxcbiAgICBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlciB6LVsxXSB7eyBjb25maWdDc3MoKT8uaGVhZGVyIHx8ICcnIH19IHt7IHRhYnMoKS5jbGFzc0luY2x1ZGVIZWFkZXIgfHwgJycgfX1cIlxuICAgIFtzdHlsZS5taW5IZWlnaHQucHhdPVwiaGVpZ2h0VGFiSXRlbSgpXCI+XG4gICAgPGRpdiAjaGVhZGVyTGVmdEVsXG4gICAgICBjbGFzcz0nbGlicy11aS10YWItaGVhZGVyLWxlZnQnPlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZGl2LmxpYnMtdWktdGFiLWhlYWRlci1sZWZ0XCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXItY2VudGVyIHt7IGNvbmZpZ0NzcygpPy5oZWFkZXJDZW50ZXIgfHwgJycgfX0ge3sgdGFicygpLmNsYXNzSW5jbHVkZUhlYWRlckNlbnRlciB8fCAnJyB9fVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIiFmbGV4IHctZnVsbFwiXG4gICAgICAgICNlbGVtZW50Q29udGFpbmVyRWxcbiAgICAgICAgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmVcbiAgICAgICAgW3N0eWxlc092ZXJyaWRlXT1cInN0eWxlc0RyYWdEcm9wT3ZlcnJpZGVDb21wdXRlZCgpXCJcbiAgICAgICAgW2dyb3VwTmFtZV09XCJncm91cE5hbWUoKVwiXG4gICAgICAgIFsoaXRlbXMpXT1cIml0ZW1zRGlzcGxheVwiXG4gICAgICAgIFtkaXJlY3Rpb25EcmFnXT1cIidob3Jpem9udGFsJ1wiXG4gICAgICAgIFtkaXNhYmxlRHJhZ0NvbnRhaW5lcl09XCIhaGFzQW5pbWF0aW9uKClcIlxuICAgICAgICBbYWNjZXB0RHJhZ1NhbWVHcm91cF09XCJoYXNBbmltYXRpb24oKVwiXG4gICAgICAgIChvdXREcm9wcGVkQ29udGFpbmVyKT1cImhhbmRsZXJEcm9wQ29udGFpbmVyKCRldmVudClcIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiBpdGVtc0Rpc3BsYXkoKTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgIDxkaXYgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmVcbiAgICAgICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKSB8fCAhaGFzQW5pbWF0aW9uKClcIlxuICAgICAgICAgICAgW2dyb3VwTmFtZV09XCJncm91cE5hbWUoKVwiXG4gICAgICAgICAgICBbZWxlbWVudENvbnRhaW5lcl09XCJlbGVtZW50Q29udGFpbmVyRWxcIlxuICAgICAgICAgICAgW2RyYWdCb3VuZGFyeV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtkcmFnQm91bmRhcnlBY2NlcHRNb3VzZUxlYXZlQ29udGFpbmVyXT1cInRydWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSBsaWJzLXVpLXRhYi1pdGVtLWNvbnRhaW5lclwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibW9kZSgpID09PSAnc3BhY2UtYmV0d2VlbicgPyAoZWxlbWVudENvbnRhaW5lckVsLmNsaWVudFdpZHRoLyhpdGVtc0Rpc3BsYXkoKS5sZW5ndGggfHwgMSkpIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgIFtjbGFzcy5mbGV4XT1cIm1vZGUoKSA9PT0gJ2NlbnRlci1oYXMtbGluZSdcIlxuICAgICAgICAgICAgW2NsYXNzLml0ZW1zLWNlbnRlcl09XCJtb2RlKCkgPT09ICdjZW50ZXItaGFzLWxpbmUnXCI+XG4gICAgICAgICAgICBAaWYgKGhhc0FuaW1hdGlvbigpICYmICFkaXNhYmxlKCkpIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsaWJzLXVpLWljb24tYXJyYW5nZSB0ZXh0LVsjOWNhMmFkXSBhYnNvbHV0ZSB0b3AtWzEycHhdIGxlZnQtWzRweF1cIj48L3NwYW4+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXRhYnMtaXRlbSBjbGFzcz1cImgtZnVsbCB3LWZ1bGwgIHt7IHRhYnMoKS5jbGFzc0luY2x1ZGVJdGVtIHx8ICcnIH19XCJcbiAgICAgICAgICAgICAgW3RhYnNdPVwidGFicygpXCJcbiAgICAgICAgICAgICAgW3NpemVdPVwic2l6ZSgpXCJcbiAgICAgICAgICAgICAgWyhpdGVtKV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgW3N0ZXBdPVwiJGluZGV4KzFcIlxuICAgICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgICAgICAgICBbZGlzYWJsZUxhYmVsXT1cImRpc2FibGVMYWJlbCgpXCJcbiAgICAgICAgICAgICAgW2tleVNlbGVjdGVkXT1cImtleVNlbGVjdGVkKClcIlxuICAgICAgICAgICAgICBbZmllbGRMYWJlbF09XCJmaWVsZExhYmVsKClcIlxuICAgICAgICAgICAgICBbZmllbGRLZXldPVwiZmllbGRLZXkoKVwiXG4gICAgICAgICAgICAgIFtjc3NEZWZhdWx0XT1cIigkZmlyc3QgPyBjb25maWdDc3MoKT8uZmlyc3QgOiBjb25maWdDc3MoKT8ub3RoZXIpIHx8ICcnXCJcbiAgICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgICAgICAgICAgIFttb2RlXT1cIm1vZGUoKVwiXG4gICAgICAgICAgICAgIFtpZ25vcmVDYWxjdWxhdG9yVGFiXT1cInRydWVcIlxuICAgICAgICAgICAgICBbY2hhbmdlVmlld1RhYl09XCJjaGFuZ2VWaWV3VGFiXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDbGlja0l0ZW0oJGV2ZW50LCBpdGVtKVwiIC8+XG4gICAgICAgICAgICBAaWYgKG1vZGUoKSA9PT0gJ2NlbnRlci1oYXMtbGluZScgJiYgISRsYXN0KSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LVs0MHB4XSBoLVsxcHhdIGJnLVsjZTZlN2VhXVwiPjwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIlxuICAgICAgW2NsYXNzLm1sLWF1dG9dPVwiZGlzcGxheU1vcmVJdGVtKCkgJiYgIXRhYnMoKS52aWV3TW9yZUlnbm9yZU1hcmdpbkxlZnRcIj5cbiAgICAgIEBpZiAoZGlzcGxheU1vcmVJdGVtKCkpIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1wb3BvdmVyIGNsYXNzPVwidy1mdWxsIGgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgW21vZGVdPVwiJ2NsaWNrLXRvZ2dsZSdcIlxuICAgICAgICAgIFtpZ25vcmVIaWRkZW5Qb3BvdmVyQ29udGVudFdoZW5Nb3VzZUxlYXZlXT1cInRydWVcIlxuICAgICAgICAgIFtjb25maWddPVwie1xuICAgICAgICAgICAgekluZGV4OiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8uekluZGV4IHx8IDEwMDAsXG4gICAgICAgICAgICBtYXhIZWlnaHQ6IHBvcG92ZXJTaG93TW9yZVRhYkl0ZW0oKT8uY29uZmlnPy5tYXhIZWlnaHQgfHwgMjg3LFxuICAgICAgICAgICAgbWF4V2lkdGg6IHBvcG92ZXJTaG93TW9yZVRhYkl0ZW0oKT8uY29uZmlnPy5tYXhXaWR0aCB8fCAyMDQ4LFxuICAgICAgICAgICAgd2lkdGg6IHBvcG92ZXJTaG93TW9yZVRhYkl0ZW0oKT8uY29uZmlnPy53aWR0aCB8fCAyNzcsIFxuICAgICAgICAgICAgZGlyZWN0aW9uOiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8uZGlyZWN0aW9uIHx8ICdib3R0b20nLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHBvcG92ZXJTaG93TW9yZVRhYkl0ZW0oKT8uY29uZmlnPy50ZW1wbGF0ZSB8fCBtZW51RWwsXG4gICAgICAgICAgICB3aGl0ZVRoZW1lOiB0cnVlLFxuICAgICAgICAgICAgaWdub3JlQXJyb3c6IHRydWUsXG4gICAgICAgICAgICBwb3NpdGlvbjogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LnBvc2l0aW9uIHx8IHsgbW9kZTogJ2VuZCcsIGRpc3RhbmNlOiAwIH1cbiAgICAgICAgICB9XCJcbiAgICAgICAgICAob3V0RnVuY3Rpb25zQ29udHJvbCk9XCJoYW5kbGVyUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KCRldmVudClcIj5cbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uIFt0eXBlXT1cIididXR0b24tbGluay10aGlyZCdcIlxuICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCIncC1bOHB4XSdcIlxuICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1tb3JlLXZlcnRpY2FsIHJvdGF0ZS05MCB0ZXh0LVsxNnB4XSBtci0wJ1wiXG4gICAgICAgICAgICBbcG9wb3Zlcl09XCJ7Y29uZmlnOiB7Y29udGVudDogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LmNvbnRlbnR9fVwiXG4gICAgICAgICAgICBbaWdub3JlU3RvcFByb3BhZ2F0aW9uRXZlbnRdPVwidHJ1ZVwiIC8+XG4gICAgICAgIDwvbGlic191aS1jb21wb25lbnRzLXBvcG92ZXI+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiAjaGVhZGVyUmlnaHRFbFxuICAgICAgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXItcmlnaHQge3sgdGFicygpLmNsYXNzSW5jbHVkZUhlYWRlclJpZ2h0IHx8ICcnIH19XCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJkaXYubGlicy11aS10YWItaGVhZGVyLXJpZ2h0XCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImFic29sdXRlIHRvcC0wIHotMCB3LWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyIHt7IGNvbmZpZ0NzcygpPy5oZWFkZXIgfHwgJycgfX0ge3sgdGFicygpLmNsYXNzSW5jbHVkZUhlYWRlciB8fCAnJyB9fVwiXG4gICAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cImhlaWdodFRhYkl0ZW0oKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXIge3sgY29uZmlnQ3NzKCk/LmhlYWRlckNlbnRlciB8fCAnJyB9fSB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyQ2VudGVyIHx8ICcnIH19XCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgdGFicygpLml0ZW1zKCk7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXRhYnMtaXRlbSBjbGFzcz1cImgtZnVsbCB3LWZ1bGwge3sgdGFicygpLmNsYXNzSW5jbHVkZUl0ZW0gfHwgJycgfX1cIlxuICAgICAgICAgICAgW3RhYnNdPVwidGFicygpXCJcbiAgICAgICAgICAgIFtzaXplXT1cInNpemUoKVwiXG4gICAgICAgICAgICBbKGl0ZW0pXT1cIml0ZW1cIlxuICAgICAgICAgICAgW3N0ZXBdPVwiJGluZGV4KzFcIlxuICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlTGFiZWxdPVwiZGlzYWJsZUxhYmVsKClcIlxuICAgICAgICAgICAgW2tleVNlbGVjdGVkXT1cImtleVNlbGVjdGVkKClcIlxuICAgICAgICAgICAgW2ZpZWxkTGFiZWxdPVwiZmllbGRMYWJlbCgpXCJcbiAgICAgICAgICAgIFtmaWVsZEtleV09XCJmaWVsZEtleSgpXCJcbiAgICAgICAgICAgIFtjc3NEZWZhdWx0XT1cIigkZmlyc3QgPyBjb25maWdDc3MoKT8uZmlyc3QgOiBjb25maWdDc3MoKT8ub3RoZXIpIHx8ICcnXCJcbiAgICAgICAgICAgIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAgICAgICAgICAgW21vZGVdPVwibW9kZSgpXCJcbiAgICAgICAgICAgIFtjaGFuZ2VWaWV3VGFiXT1cImNoYW5nZVZpZXdUYWJcIlxuICAgICAgICAgICAgW2lnbm9yZUNhbGN1bGF0b3JUYWJdPVwiaWdub3JlQ2FsY3VsYXRvclRhYigpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyQ2xpY2tJdGVtKCRldmVudCwgaXRlbSlcIiAvPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNtZW51RWw+XG4gIDxsaWJzX3VpLWNvbXBvbmVudHMtbGlzdCBbY29uZmlnXT1cInRhYk1vcmVMaXN0Q29uZmlnKClcIlxuICAgIFttYXhJdGVtU2hvd109XCI1XCJcbiAgICBbaGlkZGVuSW5wdXRTZWFyY2hdPVwidHJ1ZVwiXG4gICAgW3BhZGRpbmdMZWZ0SXRlbV09XCJ0cnVlXCJcbiAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZXJTZWxlY3RlZEtleSgkZXZlbnQpXCIgLz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
260
|
+
], template: "<div class=\"libs-ui-tab\">\n <div #headerEl\n class=\"libs-ui-tab-header z-[1] {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div #headerLeftEl\n class='libs-ui-tab-header-left'>\n <ng-content select=\"div.libs-ui-tab-header-left\"></ng-content>\n </div>\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n <div class=\"!flex w-full\"\n #elementContainerEl\n LibsUiComponentsDragContainerDirective\n [stylesOverride]=\"stylesDragDropOverrideComputed()\"\n [groupName]=\"groupName()\"\n [(items)]=\"itemsDisplay\"\n [directionDrag]=\"'horizontal'\"\n [disableDragContainer]=\"!allowDragDropPosition()\"\n [acceptDragSameGroup]=\"allowDragDropPosition()\"\n (outDroppedContainer)=\"handlerDropContainer($event)\">\n @for (item of itemsDisplay(); track item) {\n <div LibsUiDragItemDirective\n [disable]=\"disable() || !allowDragDropPosition()\"\n [groupName]=\"groupName()\"\n [elementContainer]=\"elementContainerEl\"\n [dragBoundary]=\"true\"\n [dragBoundaryAcceptMouseLeaveContainer]=\"true\"\n class=\"relative libs-ui-tab-item-container\"\n [style.width.px]=\"mode() === 'space-between' ? (elementContainerEl.clientWidth/(itemsDisplay().length || 1)) : undefined\"\n [class.flex]=\"mode() === 'center-has-line'\"\n [class.items-center]=\"mode() === 'center-has-line'\">\n @if (allowDragDropPosition() && !disable()) {\n <span class=\"libs-ui-icon-arrange text-[#9ca2ad] absolute top-[14px] left-[4px]\"></span>\n }\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [ignoreCalculatorTab]=\"true\"\n [changeViewTab]=\"changeViewTab\"\n (click)=\"handlerClickItem($event, item)\"\n (outActionSelected)=\"handlerActionSelected($event)\" />\n @if (mode() === 'center-has-line' && !$last) {\n <div class=\"w-[40px] h-[1px] bg-[#e6e7ea]\"></div>\n }\n </div>\n }\n </div>\n </div>\n <div class=\"flex items-center\"\n [class.ml-auto]=\"displayMoreItem() && !tabs().viewMoreIgnoreMarginLeft\">\n @if (displayMoreItem()) {\n <libs_ui-components-popover class=\"w-full h-full flex items-center\"\n [mode]=\"'click-toggle'\"\n [ignoreHiddenPopoverContentWhenMouseLeave]=\"true\"\n [config]=\"{\n zIndex: popoverShowMoreTabItem()?.config?.zIndex || 1000,\n maxHeight: popoverShowMoreTabItem()?.config?.maxHeight || 287,\n maxWidth: popoverShowMoreTabItem()?.config?.maxWidth || 2048,\n width: popoverShowMoreTabItem()?.config?.width || 277, \n direction: popoverShowMoreTabItem()?.config?.direction || 'bottom',\n template: popoverShowMoreTabItem()?.config?.template || menuEl,\n whiteTheme: true,\n ignoreArrow: true,\n position: popoverShowMoreTabItem()?.config?.position || { mode: 'end', distance: 0 }\n }\"\n (outFunctionsControl)=\"handlerPopoverFunctionControlEvent($event)\">\n <libs_ui-components-buttons-button [type]=\"'button-link-third'\"\n [classInclude]=\"'!p-[8px]'\"\n [iconOnlyType]=\"true\"\n [classIconLeft]=\"'libs-ui-icon-more-vertical rotate-90 text-[16px] mr-0'\"\n [popover]=\"{config: {content: popoverShowMoreTabItem()?.config?.content || 'i18n_view_more'}}\"\n [ignoreStopPropagationEvent]=\"true\" />\n </libs_ui-components-popover>\n }\n </div>\n <div #headerRightEl\n class=\"libs-ui-tab-header-right {{ tabs().classIncludeHeaderRight || '' }}\">\n <ng-content select=\"div.libs-ui-tab-header-right\"></ng-content>\n </div>\n </div>\n <div class=\"absolute top-0 z-0 w-full\">\n <div class=\"libs-ui-tab-header {{ configCss()?.header || '' }} {{ tabs().classIncludeHeader || '' }}\"\n [style.minHeight.px]=\"heightTabItem()\">\n <div class=\"libs-ui-tab-header-center {{ configCss()?.headerCenter || '' }} {{ tabs().classIncludeHeaderCenter || '' }}\">\n @for (item of tabs().items(); track item) {\n <libs_ui-components-tabs-item class=\"h-full w-full {{ tabs().classIncludeItem || '' }}\"\n [tabs]=\"tabs()\"\n [size]=\"size()\"\n [(item)]=\"item\"\n [step]=\"$index+1\"\n [disable]=\"disable()\"\n [disableLabel]=\"disableLabel()\"\n [keySelected]=\"keySelected()\"\n [fieldLabel]=\"fieldLabel()\"\n [fieldKey]=\"fieldKey()\"\n [cssDefault]=\"($first ? configCss()?.first : configCss()?.other) || ''\"\n [zIndex]=\"zIndex()\"\n [mode]=\"mode()\"\n [changeViewTab]=\"changeViewTab\"\n [ignoreCalculatorTab]=\"ignoreCalculatorTab()\"\n (click)=\"handlerClickItem($event, item)\" />\n }\n </div>\n </div>\n </div>\n</div>\n<ng-template #menuEl>\n <libs_ui-components-list [config]=\"tabMoreListConfig()\"\n [maxItemShow]=\"5\"\n [hiddenInputSearch]=\"true\"\n [paddingLeftItem]=\"true\"\n (outSelectKey)=\"handlerSelectedKey($event)\" />\n</ng-template>\n", styles: [".libs-ui-tab{position:relative;display:flex;width:100%}.libs-ui-tab .libs-ui-tab-header{position:relative;background-color:#fff;display:flex;flex-wrap:nowrap;width:100%;overflow:hidden;flex-shrink:0}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-header-center{display:flex;flex-wrap:nowrap}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-item-container .libs-ui-icon-arrange{display:none}.libs-ui-tab .libs-ui-tab-header .libs-ui-tab-item-container:hover .libs-ui-icon-arrange{display:block}.libs-ui-tab .libs-ui-tab-content-container{width:100%;height:100%}\n"] }]
|
|
261
|
+
}] });
|
|
262
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvdGFicy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvdGFicy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQzdLLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBUyxzQ0FBc0MsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZILE9BQU8sRUFBeUMsNkJBQTZCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoSCxPQUFPLEVBQTBDLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFrQmpELE1BQU0sT0FBTyw2QkFBNkI7SUFFOUIsWUFBWSxHQUFHLE1BQU0sQ0FBa0MsRUFBRSxDQUFD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QUFFLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBN1BVLDZCQUE2Qjs0RkFBN0IsNkJBQTZCLDB2RkM3QjFDLHE1TEEwSEEsdW1CRHJHSSxzQ0FBc0MsMGNBQ3RDLHVCQUF1Qiw0YUFDdkIsZ0NBQWdDLDBkQUNoQyxzQ0FBc0MsaWhCQUN0QyxpQ0FBaUMsNlNBQ2pDLDZCQUE2Qjs7NEZBR3BCLDZCQUE2QjtrQkFoQnpDLFNBQVM7K0JBRUUseUJBQXlCLGNBR3ZCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxzQ0FBc0M7d0JBQ3RDLHVCQUF1Qjt3QkFDdkIsZ0NBQWdDO3dCQUNoQyxzQ0FBc0M7d0JBQ3RDLGlDQUFpQzt3QkFDakMsNkJBQTZCO3FCQUM5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBFbGVtZW50UmVmLCBpbmplY3QsIGlucHV0LCBtb2RlbCwgT25EZXN0cm95LCBPbkluaXQsIG91dHB1dCwgc2lnbmFsLCB2aWV3Q2hpbGQsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgSURyb3AsIExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlLCBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtZHJhZy1kcm9wJztcbmltcG9ydCB7IElMaXN0RGF0YUVtaXRLZXksIElMaXN0Vmlld0NvbmZpZ0l0ZW0sIExpYnNVaUNvbXBvbmVudHNMaXN0Q29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1saXN0JztcbmltcG9ydCB7IElQb3BvdmVyLCBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50LCBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtcG9wb3Zlcic7XG5pbXBvcnQgeyBjb252ZXJ0T2JqZWN0VG9TaWduYWwsIGlzTmlsLCB1dWlkIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElUYWJDc3NDb25maWcsIElUYWJGdW5jdGlvbkNvbnRyb2xFdmVudCwgSVRhYkl0ZW0sIElUYWJJdGVtRXZlbnQsIElUYWJzLCBUWVBFX1RBQl9NT0RFIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3RhYi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1RhYnNJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9pdGVtL2l0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IHRhYk1vcmVMaXN0Q29uZmlnIH0gZnJvbSAnLi91dGlscy90YWJzJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLXRhYnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFicy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYnMuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSxcbiAgICBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzVGFic0l0ZW1Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpc3RDb21wb25lbnRcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzVGFic0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwcm90ZWN0ZWQgaXRlbXNEaXNwbGF5ID0gc2lnbmFsPEFycmF5PFdyaXRhYmxlU2lnbmFsPElUYWJJdGVtPj4+KFtdKTtcbiAgcHJvdGVjdGVkIGRpc3BsYXlNb3JlSXRlbSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG4gIHByb3RlY3RlZCB0YWJNb3JlTGlzdENvbmZpZyA9IHNpZ25hbDxJTGlzdFZpZXdDb25maWdJdGVtIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgY2hhbmdlVmlld1RhYiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByb3RlY3RlZCBncm91cE5hbWUgPSBzaWduYWw8c3RyaW5nPih1dWlkKCkpO1xuICBwcm90ZWN0ZWQgc3R5bGVzRHJhZ0Ryb3BPdmVycmlkZUNvbXB1dGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy51cGRhdGVTdHlsZXNEcmFnRHJvcE92ZXJyaWRlKCkpO1xuXG4gIHByaXZhdGUgcG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50ID0gc2lnbmFsPElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICByZWFkb25seSBtb2RlID0gaW5wdXQ8VFlQRV9UQUJfTU9ERT4oJ2xlZnQnKTtcbiAgcmVhZG9ubHkgZmllbGRLZXkgPSBpbnB1dDxzdHJpbmc+KCdrZXknKTtcbiAgcmVhZG9ubHkgZmllbGRMYWJlbCA9IGlucHV0PHN0cmluZz4oJ2xhYmVsJyk7XG4gIHJlYWRvbmx5IGtleVNlbGVjdGVkID0gbW9kZWwucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgdGFicyA9IGlucHV0LnJlcXVpcmVkPElUYWJzPigpO1xuICByZWFkb25seSBoZWlnaHRUYWJJdGVtID0gaW5wdXQ8bnVtYmVyPig0MCk7XG4gIHJlYWRvbmx5IGlnbm9yZUNhbGN1bGF0b3JUYWIgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHNpemUgPSBpbnB1dDwnbGFuZ2VyJyB8ICdtZWRpdW0nPignbWVkaXVtJyk7XG4gIHJlYWRvbmx5IGRpc2FibGVMYWJlbCA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGFsbG93RHJhZ0Ryb3BQb3NpdGlvbiA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgY29uZmlnQ3NzID0gbW9kZWw8SVRhYkNzc0NvbmZpZz4oKTtcbiAgcmVhZG9ubHkgcG9wb3ZlclNob3dNb3JlVGFiSXRlbSA9IGlucHV0PElQb3BvdmVyPigpO1xuICByZWFkb25seSBjaGVja0NhbkNoYW5nZVRhYlNlbGVjdGVkID0gaW5wdXQ8KCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4+KCk7XG5cbiAgcmVhZG9ubHkgb3V0S2V5U2VsZWN0ZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElUYWJGdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0RHJhZ1RhYkNoYW5nZSA9IG91dHB1dDx2b2lkPigpO1xuICByZWFkb25seSBvdXREaXNwbGF5TW9yZUl0ZW0gPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgb3V0QWN0aW9uU2VsZWN0ZWQgPSBvdXRwdXQ8SVRhYkl0ZW1FdmVudD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlckVsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdoZWFkZXJFbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlckxlZnRFbCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaGVhZGVyTGVmdEVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVyUmlnaHRFbCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaGVhZGVyUmlnaHRFbCcpO1xuXG4gIHByaXZhdGUgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudXBkYXRlVGFic0Nzc0NvbmZpZygpO1xuICAgIGlmICh0aGlzLmlnbm9yZUNhbGN1bGF0b3JUYWIoKSkge1xuICAgICAgdGhpcy50YWJzKCkuaXRlbXMoKS5tYXAoaXRlbSA9PiBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIHNwZWNpZmljRGlzcGxheTogdHJ1ZSB9KSkpO1xuICAgIH1cbiAgICB0aGlzLm91dEZ1bmN0aW9uc0NvbnRyb2wuZW1pdCh7XG4gICAgICBhZGRUYWJJdGVtOiB0aGlzLmFkZFRhYkl0ZW0uYmluZCh0aGlzKSxcbiAgICAgIGNhbGN1bGF0b3JUYWJJdGVtc0Rpc3BsYXk6IHRoaXMuY2FsY3VsYXRvclRhYnNJdGVtRGlzcGxheS5iaW5kKHRoaXMpLFxuICAgICAgc2VsZWN0ZWRUYWJJdGVtOiB0aGlzLmhhbmRsZXJTZWxlY3RlZFRhYkl0ZW0uYmluZCh0aGlzKVxuICAgIH0pO1xuICAgIGlmICh0aGlzLm1vZGUoKSAhPT0gJ2xlZnQnIHx8IHRoaXMuaWdub3JlQ2FsY3VsYXRvclRhYigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5waXBlKGRlYm91bmNlVGltZSgyNTApLCB0YWtlVW50aWwodGhpcy5vbkRlc3Ryb3kpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnRhYnMoKS5pdGVtcygpLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmRpc3BsYXlNb3JlSXRlbS5zZXQoZmFsc2UpO1xuICAgICAgdGhpcy5jYWxjdWxhdG9yVGFic0l0ZW1EaXNwbGF5KCk7XG4gICAgfSk7XG4gICAgdGhpcy5jaGFuZ2VWaWV3VGFiLnBpcGUoZGVib3VuY2VUaW1lKDIwKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2FsY3VsYXRvclRhYnNJdGVtRGlzcGxheSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGFic0Nzc0NvbmZpZygpIHtcbiAgICBpZiAodGhpcy5jb25maWdDc3MoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRoaXMubW9kZSgpKSB7XG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgdGhpcy5jb25maWdDc3Muc2V0KHtcbiAgICAgICAgICBmaXJzdDogJ21sLVsyMHB4XSBtci1bMTZweF0nLFxuICAgICAgICAgIG90aGVyOiAnbWwtWzIwcHhdIG1yLVsxNnB4XSdcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgdGhpcy5jb25maWdDc3Muc2V0KHtcbiAgICAgICAgICBmaXJzdDogJ3B4LVsxMnB4XSBtbC1bMThweF0gbXItWzE4cHhdJyxcbiAgICAgICAgICBvdGhlcjogJ3B4LVsxMnB4XSBteC1bMThweF0nLFxuICAgICAgICAgIGhlYWRlcjogJ2ZsZXgganVzdGlmeS1jZW50ZXInXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRhYnMoKS5pdGVtcygpLm1hcChpdGVtID0+IGl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNEaXNwbGF5OiB0cnVlIH0pKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2VudGVyLWhhcy1saW5lJzpcbiAgICAgICAgdGhpcy5jb25maWdDc3Muc2V0KHtcbiAgICAgICAgICBmaXJzdDogJ3B4LVsxNnB4XScsXG4gICAgICAgICAgb3RoZXI6ICdweC1bMTZweF0nLFxuICAgICAgICAgIGhlYWRlckNlbnRlcjogJ2l0ZW1zLWNlbnRlcidcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGFicygpLml0ZW1zKCkubWFwKGl0ZW0gPT4gaXRlbS51cGRhdGUoZGF0YSA9PiAoeyAuLi5kYXRhLCBzcGVjaWZpY0Rpc3BsYXk6IHRydWUgfSkpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzcGFjZS1iZXR3ZWVuJzpcbiAgICAgICAgdGhpcy5jb25maWdDc3Muc2V0KHtcbiAgICAgICAgICBmaXJzdDogJ214LWF1dG8nLFxuICAgICAgICAgIG90aGVyOiAnbXgtYXV0bycsXG4gICAgICAgICAgaGVhZGVyQ2VudGVyOiAndy1mdWxsJ1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50YWJzKCkuaXRlbXMoKS5tYXAoaXRlbSA9PiBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIHNwZWNpZmljRGlzcGxheTogdHJ1ZSB9KSkpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVN0eWxlc0RyYWdEcm9wT3ZlcnJpZGUoKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dEcmFnRHJvcFBvc2l0aW9uKCkpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLXBsYWNlaG9sZGVyJyxcbiAgICAgICAgICBzdHlsZXM6ICcnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtJyxcbiAgICAgICAgICBzdHlsZXM6ICdjdXJzb3I6IG1vdmU7J1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1kcmFnZ2luZycsXG4gICAgICAgICAgc3R5bGVzOiAnY3Vyc29yOiBtb3ZlOyBiYWNrZ3JvdW5kOiAjZGRkZGRkOydcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGlicy11aS1kcmFnLWRyb3AtaXRlbScsXG4gICAgICAgIHN0eWxlczogJydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tZGlzYWJsZScsXG4gICAgICAgIHN0eWxlczogJydcbiAgICAgIH1cbiAgICBdXG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlckRyb3BDb250YWluZXIoZXZlbnQ6IElEcm9wKSB7XG4gICAgY29uc3QgeyBpdGVtRHJhZ0luZm8gfSA9IGV2ZW50O1xuICAgIGlmICghaXRlbURyYWdJbmZvKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy50YWJzKCkuaXRlbXM7XG4gICAgY29uc3QgeyBpbmRleERyYWcsIGluZGV4RHJvcCB9ID0gaXRlbURyYWdJbmZvO1xuICAgIGlmIChpc05pbChpbmRleERyYWcpIHx8IGlzTmlsKGluZGV4RHJvcCkgfHwgaW5kZXhEcm9wID09PSBpbmRleERyYWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXRlbURyYWcgPSBpdGVtcygpW2luZGV4RHJhZyBhcyBudW1iZXJdO1xuICAgIGl0ZW1zLnVwZGF0ZShpdGVtcyA9PiB7XG4gICAgICBpdGVtcy5zcGxpY2UoaW5kZXhEcmFnIGFzIG51bWJlciwgMSk7XG4gICAgICBpdGVtcy5zcGxpY2UoaW5kZXhEcm9wIGFzIG51bWJlciwgMCwgaXRlbURyYWcpO1xuICAgICAgcmV0dXJuIFsuLi5pdGVtc107XG4gICAgfSk7XG4gICAgdGhpcy5vdXREcmFnVGFiQ2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KGV2ZW50OiBJUG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KSB7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQuc2V0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlclNlbGVjdGVkVGFiSXRlbShrZXk6IHN0cmluZywgcmVzZXREaXNhYmxlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGl0ZW1TZWxlY3RlZCA9IHRoaXMudGFicygpLml0ZW1zKCkuZmluZChpdGVtID0+IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSBrZXkpO1xuICAgIGlmICghaXRlbVNlbGVjdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyZXNldERpc2FibGUpIHtcbiAgICAgIGl0ZW1TZWxlY3RlZC51cGRhdGUoaXRlbSA9PiAoeyAuLi5pdGVtLCBkaXNhYmxlOiBmYWxzZSB9KSk7XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlckNsaWNrSXRlbSh7IHN0b3BQcm9wYWdhdGlvbjogKCkgPT4geyByZXR1cm4gfSB9IGFzIEV2ZW50LCBpdGVtU2VsZWN0ZWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RlZEtleShldmVudDogSUxpc3REYXRhRW1pdEtleSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVyQ2xpY2tJdGVtKHsgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB7IHJldHVybiB9IH0gYXMgRXZlbnQsIGNvbnZlcnRPYmplY3RUb1NpZ25hbChldmVudC5pdGVtKSk7XG4gICAgdGhpcy5vdXREcmFnVGFiQ2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQ2xpY2tJdGVtKGV2ZW50OiBFdmVudCwgaXRlbTogV3JpdGFibGVTaWduYWw8SVRhYkl0ZW0+KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGl0ZW0oKS5kaXNhYmxlIHx8IHRoaXMuZGlzYWJsZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNoZWNrQ2FuQ2hhbmdlVGFiU2VsZWN0ZWQgPSB0aGlzLmNoZWNrQ2FuQ2hhbmdlVGFiU2VsZWN0ZWQoKTtcbiAgICBpZiAoY2hlY2tDYW5DaGFuZ2VUYWJTZWxlY3RlZCkge1xuICAgICAgY29uc3Qgc3RhdGUgPSBhd2FpdCBjaGVja0NhbkNoYW5nZVRhYlNlbGVjdGVkKCk7XG4gICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VJdGVtU2VsZWN0ZWQoaXRlbSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlSXRlbVNlbGVjdGVkKGl0ZW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2VJdGVtU2VsZWN0ZWQoaXRlbTogV3JpdGFibGVTaWduYWw8SVRhYkl0ZW0+KSB7XG4gICAgdGhpcy5rZXlTZWxlY3RlZC5zZXQoaXRlbSgpW3RoaXMuZmllbGRLZXkoKV0pO1xuICAgIHRoaXMub3V0S2V5U2VsZWN0ZWQuZW1pdCh0aGlzLmtleVNlbGVjdGVkKCkpO1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50KCk/LnJlbW92ZVBvcG92ZXJPdmVybGF5KCk7XG4gICAgdGhpcy5jYWxjdWxhdG9yVGFic0l0ZW1EaXNwbGF5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckFjdGlvblNlbGVjdGVkKGV2ZW50OiBJVGFiSXRlbUV2ZW50KSB7XG4gICAgdGhpcy5vdXRBY3Rpb25TZWxlY3RlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkVGFiSXRlbShpdGVtOiBXcml0YWJsZVNpZ25hbDxJVGFiSXRlbT4sIHNlbGVjdGVkID0gdHJ1ZSwgYWRkRmlyc3Q/OiBib29sZWFuKSB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnRhYnMoKS5pdGVtcztcbiAgICBpdGVtcy51cGRhdGUoaXRlbXMgPT4ge1xuICAgICAgaWYgKGFkZEZpcnN0KSB7XG4gICAgICAgIHJldHVybiBbaXRlbSwgLi4uaXRlbXNdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFsuLi5pdGVtcywgaXRlbV07XG4gICAgfSk7XG4gICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICB0aGlzLmhhbmRsZXJDbGlja0l0ZW0oeyBzdG9wUHJvcGFnYXRpb246ICgpID0+IHsgcmV0dXJuIH0gfSBhcyBFdmVudCwgaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNhbGN1bGF0b3JUYWJzSXRlbURpc3BsYXkoKSB7XG4gICAgbGV0IGl0ZW1zID0gdGhpcy50YWJzKCkuaXRlbXMoKTtcbiAgICBjb25zdCBpbmRleEl0ZW1TZWxlY3RlZCA9IGl0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSB0aGlzLmtleVNlbGVjdGVkKCkpO1xuICAgIGlmIChpbmRleEl0ZW1TZWxlY3RlZCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kaXNwbGF5TW9yZUl0ZW0uc2V0KGZhbHNlKTtcbiAgICBsZXQgZGlzcGxheU1vcmVJdGVtID0gZmFsc2U7XG4gICAgY29uc3QgaGVhZGVyV2lkdGggPSB0aGlzLmhlYWRlckVsKCkubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCB8fCAwO1xuICAgIGNvbnN0IGl0ZW1TZWxlY3RlZCA9IGl0ZW1zW2luZGV4SXRlbVNlbGVjdGVkXTtcbiAgICBjb25zdCBpdGVtU2VsZWN0ZWRXaWR0aCA9IGl0ZW1TZWxlY3RlZCgpLnNwZWNpZmljV2lkdGg7XG4gICAgbGV0IHRvdGFsV2lkdGhJdGVtc0Rpc3BsYXkgPSAodGhpcy5oZWFkZXJMZWZ0RWwoKS5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoIHx8IDApICsgKHRoaXMuaGVhZGVyUmlnaHRFbCgpLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggfHwgMCkgKyAzMjtcbiAgICBpdGVtcy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKCFpdGVtKCkuc3BlY2lmaWNXaWR0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIHNwZWNpZmljRGlzcGxheTogZmFsc2UgfSkpO1xuICAgICAgY29uc3QgaXRlbVdpZHRoID0gaXRlbSgpLnNwZWNpZmljV2lkdGggfHwgMDtcbiAgICAgIGNvbnN0IHdpZHRoID0gdG90YWxXaWR0aEl0ZW1zRGlzcGxheSArIGl0ZW1XaWR0aCArIChpbmRleCA8IGluZGV4SXRlbVNlbGVjdGVkID8gaXRlbVNlbGVjdGVkV2lkdGggOiAwKTtcbiAgICAgIHRvdGFsV2lkdGhJdGVtc0Rpc3BsYXkgKz0gaXRlbVdpZHRoO1xuICAgICAgaWYgKHdpZHRoID4gaGVhZGVyV2lkdGgpIHtcbiAgICAgICAgZGlzcGxheU1vcmVJdGVtID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXRlbS51cGRhdGUoZGF0YSA9PiAoeyAuLi5kYXRhLCBzcGVjaWZpY0Rpc3BsYXk6IHRydWUgfSkpO1xuICAgIH0pO1xuICAgIGl0ZW1TZWxlY3RlZC51cGRhdGUoZGF0YSA9PiAoeyAuLi5kYXRhLCBzcGVjaWZpY0Rpc3BsYXk6IHRydWUgfSkpO1xuICAgIGNvbnN0IGRpc3BsYXkgPSBpdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtKCkuc3BlY2lmaWNEaXNwbGF5ID09PSB0cnVlKTtcbiAgICBjb25zdCBub3REaXNwbGF5ID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSgpLnNwZWNpZmljRGlzcGxheSA9PT0gZmFsc2UpO1xuICAgIGl0ZW1zID0gZGlzcGxheS5jb25jYXQobm90RGlzcGxheSk7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IGl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgb3JkZXI6IGluZGV4IH0pKSk7XG4gICAgdGhpcy50YWJzKCkuaXRlbXMudXBkYXRlKGl0ZW1zID0+IGl0ZW1zLnNvcnQoKHByZXYsIG5leHQpID0+IChwcmV2KCkub3JkZXIgfHwgMCkgLSAobmV4dCgpLm9yZGVyIHx8IDApKSk7XG4gICAgdGhpcy5kaXNwbGF5TW9yZUl0ZW0uc2V0KGRpc3BsYXlNb3JlSXRlbSk7XG4gICAgdGhpcy5vdXREaXNwbGF5TW9yZUl0ZW0uZW1pdCh0aGlzLmRpc3BsYXlNb3JlSXRlbSgpKTtcbiAgICB0aGlzLml0ZW1zRGlzcGxheS5zZXQodGhpcy50YWJzKCkuaXRlbXMoKS5maWx0ZXIoaXRlbSA9PiBpdGVtKCkuc3BlY2lmaWNEaXNwbGF5KSk7XG4gICAgdGhpcy50YWJNb3JlTGlzdENvbmZpZy5zZXQodGFiTW9yZUxpc3RDb25maWcodGhpcy50cmFuc2xhdGUsIHRoaXMuZmllbGRLZXkoKSwgdGhpcy5maWVsZExhYmVsKCksIHRoaXMudGFicygpKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxuXG59IiwiPGRpdiBjbGFzcz1cImxpYnMtdWktdGFiXCI+XG4gIDxkaXYgI2hlYWRlckVsXG4gICAgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXIgei1bMV0ge3sgY29uZmlnQ3NzKCk/LmhlYWRlciB8fCAnJyB9fSB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyIHx8ICcnIH19XCJcbiAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cImhlaWdodFRhYkl0ZW0oKVwiPlxuICAgIDxkaXYgI2hlYWRlckxlZnRFbFxuICAgICAgY2xhc3M9J2xpYnMtdWktdGFiLWhlYWRlci1sZWZ0Jz5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImRpdi5saWJzLXVpLXRhYi1oZWFkZXItbGVmdFwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyLWNlbnRlciB7eyBjb25maWdDc3MoKT8uaGVhZGVyQ2VudGVyIHx8ICcnIH19IHt7IHRhYnMoKS5jbGFzc0luY2x1ZGVIZWFkZXJDZW50ZXIgfHwgJycgfX1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCIhZmxleCB3LWZ1bGxcIlxuICAgICAgICAjZWxlbWVudENvbnRhaW5lckVsXG4gICAgICAgIExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlXG4gICAgICAgIFtzdHlsZXNPdmVycmlkZV09XCJzdHlsZXNEcmFnRHJvcE92ZXJyaWRlQ29tcHV0ZWQoKVwiXG4gICAgICAgIFtncm91cE5hbWVdPVwiZ3JvdXBOYW1lKClcIlxuICAgICAgICBbKGl0ZW1zKV09XCJpdGVtc0Rpc3BsYXlcIlxuICAgICAgICBbZGlyZWN0aW9uRHJhZ109XCInaG9yaXpvbnRhbCdcIlxuICAgICAgICBbZGlzYWJsZURyYWdDb250YWluZXJdPVwiIWFsbG93RHJhZ0Ryb3BQb3NpdGlvbigpXCJcbiAgICAgICAgW2FjY2VwdERyYWdTYW1lR3JvdXBdPVwiYWxsb3dEcmFnRHJvcFBvc2l0aW9uKClcIlxuICAgICAgICAob3V0RHJvcHBlZENvbnRhaW5lcik9XCJoYW5kbGVyRHJvcENvbnRhaW5lcigkZXZlbnQpXCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXNEaXNwbGF5KCk7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICA8ZGl2IExpYnNVaURyYWdJdGVtRGlyZWN0aXZlXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgIWFsbG93RHJhZ0Ryb3BQb3NpdGlvbigpXCJcbiAgICAgICAgICAgIFtncm91cE5hbWVdPVwiZ3JvdXBOYW1lKClcIlxuICAgICAgICAgICAgW2VsZW1lbnRDb250YWluZXJdPVwiZWxlbWVudENvbnRhaW5lckVsXCJcbiAgICAgICAgICAgIFtkcmFnQm91bmRhcnldPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZHJhZ0JvdW5kYXJ5QWNjZXB0TW91c2VMZWF2ZUNvbnRhaW5lcl09XCJ0cnVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwicmVsYXRpdmUgbGlicy11aS10YWItaXRlbS1jb250YWluZXJcIlxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIm1vZGUoKSA9PT0gJ3NwYWNlLWJldHdlZW4nID8gKGVsZW1lbnRDb250YWluZXJFbC5jbGllbnRXaWR0aC8oaXRlbXNEaXNwbGF5KCkubGVuZ3RoIHx8IDEpKSA6IHVuZGVmaW5lZFwiXG4gICAgICAgICAgICBbY2xhc3MuZmxleF09XCJtb2RlKCkgPT09ICdjZW50ZXItaGFzLWxpbmUnXCJcbiAgICAgICAgICAgIFtjbGFzcy5pdGVtcy1jZW50ZXJdPVwibW9kZSgpID09PSAnY2VudGVyLWhhcy1saW5lJ1wiPlxuICAgICAgICAgICAgQGlmIChhbGxvd0RyYWdEcm9wUG9zaXRpb24oKSAmJiAhZGlzYWJsZSgpKSB7XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGlicy11aS1pY29uLWFycmFuZ2UgdGV4dC1bIzljYTJhZF0gYWJzb2x1dGUgdG9wLVsxNHB4XSBsZWZ0LVs0cHhdXCI+PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy10YWJzLWl0ZW0gY2xhc3M9XCJoLWZ1bGwgdy1mdWxsICB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSXRlbSB8fCAnJyB9fVwiXG4gICAgICAgICAgICAgIFt0YWJzXT1cInRhYnMoKVwiXG4gICAgICAgICAgICAgIFtzaXplXT1cInNpemUoKVwiXG4gICAgICAgICAgICAgIFsoaXRlbSldPVwiaXRlbVwiXG4gICAgICAgICAgICAgIFtzdGVwXT1cIiRpbmRleCsxXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVMYWJlbF09XCJkaXNhYmxlTGFiZWwoKVwiXG4gICAgICAgICAgICAgIFtrZXlTZWxlY3RlZF09XCJrZXlTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgW2ZpZWxkTGFiZWxdPVwiZmllbGRMYWJlbCgpXCJcbiAgICAgICAgICAgICAgW2ZpZWxkS2V5XT1cImZpZWxkS2V5KClcIlxuICAgICAgICAgICAgICBbY3NzRGVmYXVsdF09XCIoJGZpcnN0ID8gY29uZmlnQ3NzKCk/LmZpcnN0IDogY29uZmlnQ3NzKCk/Lm90aGVyKSB8fCAnJ1wiXG4gICAgICAgICAgICAgIFt6SW5kZXhdPVwiekluZGV4KClcIlxuICAgICAgICAgICAgICBbbW9kZV09XCJtb2RlKClcIlxuICAgICAgICAgICAgICBbaWdub3JlQ2FsY3VsYXRvclRhYl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2NoYW5nZVZpZXdUYWJdPVwiY2hhbmdlVmlld1RhYlwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVyQ2xpY2tJdGVtKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgICAob3V0QWN0aW9uU2VsZWN0ZWQpPVwiaGFuZGxlckFjdGlvblNlbGVjdGVkKCRldmVudClcIiAvPlxuICAgICAgICAgICAgQGlmIChtb2RlKCkgPT09ICdjZW50ZXItaGFzLWxpbmUnICYmICEkbGFzdCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1bNDBweF0gaC1bMXB4XSBiZy1bI2U2ZTdlYV1cIj48L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCJcbiAgICAgIFtjbGFzcy5tbC1hdXRvXT1cImRpc3BsYXlNb3JlSXRlbSgpICYmICF0YWJzKCkudmlld01vcmVJZ25vcmVNYXJnaW5MZWZ0XCI+XG4gICAgICBAaWYgKGRpc3BsYXlNb3JlSXRlbSgpKSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBjbGFzcz1cInctZnVsbCBoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXJcIlxuICAgICAgICAgIFttb2RlXT1cIidjbGljay10b2dnbGUnXCJcbiAgICAgICAgICBbaWdub3JlSGlkZGVuUG9wb3ZlckNvbnRlbnRXaGVuTW91c2VMZWF2ZV09XCJ0cnVlXCJcbiAgICAgICAgICBbY29uZmlnXT1cIntcbiAgICAgICAgICAgIHpJbmRleDogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LnpJbmRleCB8fCAxMDAwLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8ubWF4SGVpZ2h0IHx8IDI4NyxcbiAgICAgICAgICAgIG1heFdpZHRoOiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8ubWF4V2lkdGggfHwgMjA0OCxcbiAgICAgICAgICAgIHdpZHRoOiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8ud2lkdGggfHwgMjc3LCBcbiAgICAgICAgICAgIGRpcmVjdGlvbjogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LmRpcmVjdGlvbiB8fCAnYm90dG9tJyxcbiAgICAgICAgICAgIHRlbXBsYXRlOiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8udGVtcGxhdGUgfHwgbWVudUVsLFxuICAgICAgICAgICAgd2hpdGVUaGVtZTogdHJ1ZSxcbiAgICAgICAgICAgIGlnbm9yZUFycm93OiB0cnVlLFxuICAgICAgICAgICAgcG9zaXRpb246IHBvcG92ZXJTaG93TW9yZVRhYkl0ZW0oKT8uY29uZmlnPy5wb3NpdGlvbiB8fCB7IG1vZGU6ICdlbmQnLCBkaXN0YW5jZTogMCB9XG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlclBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCgkZXZlbnQpXCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCInYnV0dG9uLWxpbmstdGhpcmQnXCJcbiAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLVs4cHhdJ1wiXG4gICAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1tb3JlLXZlcnRpY2FsIHJvdGF0ZS05MCB0ZXh0LVsxNnB4XSBtci0wJ1wiXG4gICAgICAgICAgICBbcG9wb3Zlcl09XCJ7Y29uZmlnOiB7Y29udGVudDogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LmNvbnRlbnQgfHwgJ2kxOG5fdmlld19tb3JlJ319XCJcbiAgICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCIgLz5cbiAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICNoZWFkZXJSaWdodEVsXG4gICAgICBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1yaWdodCB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyUmlnaHQgfHwgJycgfX1cIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImRpdi5saWJzLXVpLXRhYi1oZWFkZXItcmlnaHRcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgdG9wLTAgei0wIHctZnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXIge3sgY29uZmlnQ3NzKCk/LmhlYWRlciB8fCAnJyB9fSB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyIHx8ICcnIH19XCJcbiAgICAgIFtzdHlsZS5taW5IZWlnaHQucHhdPVwiaGVpZ2h0VGFiSXRlbSgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyLWNlbnRlciB7eyBjb25maWdDc3MoKT8uaGVhZGVyQ2VudGVyIHx8ICcnIH19IHt7IHRhYnMoKS5jbGFzc0luY2x1ZGVIZWFkZXJDZW50ZXIgfHwgJycgfX1cIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiB0YWJzKCkuaXRlbXMoKTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtdGFicy1pdGVtIGNsYXNzPVwiaC1mdWxsIHctZnVsbCB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSXRlbSB8fCAnJyB9fVwiXG4gICAgICAgICAgICBbdGFic109XCJ0YWJzKClcIlxuICAgICAgICAgICAgW3NpemVdPVwic2l6ZSgpXCJcbiAgICAgICAgICAgIFsoaXRlbSldPVwiaXRlbVwiXG4gICAgICAgICAgICBbc3RlcF09XCIkaW5kZXgrMVwiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVMYWJlbF09XCJkaXNhYmxlTGFiZWwoKVwiXG4gICAgICAgICAgICBba2V5U2VsZWN0ZWRdPVwia2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICBbZmllbGRMYWJlbF09XCJmaWVsZExhYmVsKClcIlxuICAgICAgICAgICAgW2ZpZWxkS2V5XT1cImZpZWxkS2V5KClcIlxuICAgICAgICAgICAgW2Nzc0RlZmF1bHRdPVwiKCRmaXJzdCA/IGNvbmZpZ0NzcygpPy5maXJzdCA6IGNvbmZpZ0NzcygpPy5vdGhlcikgfHwgJydcIlxuICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgICAgICAgICBbbW9kZV09XCJtb2RlKClcIlxuICAgICAgICAgICAgW2NoYW5nZVZpZXdUYWJdPVwiY2hhbmdlVmlld1RhYlwiXG4gICAgICAgICAgICBbaWdub3JlQ2FsY3VsYXRvclRhYl09XCJpZ25vcmVDYWxjdWxhdG9yVGFiKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDbGlja0l0ZW0oJGV2ZW50LCBpdGVtKVwiIC8+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNtZW51RWw+XG4gIDxsaWJzX3VpLWNvbXBvbmVudHMtbGlzdCBbY29uZmlnXT1cInRhYk1vcmVMaXN0Q29uZmlnKClcIlxuICAgIFttYXhJdGVtU2hvd109XCI1XCJcbiAgICBbaGlkZGVuSW5wdXRTZWFyY2hdPVwidHJ1ZVwiXG4gICAgW3BhZGRpbmdMZWZ0SXRlbV09XCJ0cnVlXCJcbiAgICAob3V0U2VsZWN0S2V5KT1cImhhbmRsZXJTZWxlY3RlZEtleSgkZXZlbnQpXCIgLz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
package/esm2022/utils/tabs.mjs
CHANGED
|
@@ -1,31 +1,33 @@
|
|
|
1
|
+
import { returnListObject } from "@libs-ui/services-http-request";
|
|
1
2
|
import { escapeHtml, isNil } from "@libs-ui/utils";
|
|
2
3
|
import { of } from "rxjs";
|
|
3
|
-
export const tabMoreListConfig = (
|
|
4
|
+
export const tabMoreListConfig = (translate, fieldKey, fieldLabel, tabs) => {
|
|
4
5
|
return {
|
|
5
6
|
type: 'text',
|
|
6
7
|
httpRequestData: {
|
|
7
|
-
serviceOther:
|
|
8
|
-
functionName: '
|
|
9
|
-
argumentsValue: [
|
|
8
|
+
serviceOther: returnListObject(tabs.items().filter(item => !item().specificDisplay).map(item => item())),
|
|
9
|
+
functionName: 'listObservable',
|
|
10
|
+
argumentsValue: []
|
|
10
11
|
},
|
|
11
12
|
configTemplateText: {
|
|
12
13
|
fieldKey: fieldKey || 'key',
|
|
13
|
-
getClassItem: () => '!pl-[16px] !py-[
|
|
14
|
+
getClassItem: () => '!pl-[16px] !py-[12px]',
|
|
14
15
|
classRows: 'w-full',
|
|
15
16
|
rows: [{
|
|
16
|
-
classCols: 'flex items-center
|
|
17
|
+
classCols: 'flex items-center',
|
|
17
18
|
cols: [
|
|
18
19
|
{
|
|
19
20
|
getPopover: (item) => item.iconLeft ? { classInclude: 'flex', dataView: `<i class="${item.iconLeft} text-[16px] mr-[8px]"></i>` } : undefined
|
|
20
21
|
},
|
|
21
22
|
{
|
|
22
|
-
|
|
23
|
+
classCol: 'libs-ui-font-h6m text-[#6a7383]',
|
|
24
|
+
getValue: (data) => of(escapeHtml(translate.instant(data.item[fieldLabel] || ' ')))
|
|
23
25
|
},
|
|
24
26
|
{
|
|
25
27
|
getPopover: (item) => item.popover ? { config: item.popover } : undefined
|
|
26
28
|
},
|
|
27
29
|
{
|
|
28
|
-
getPopover: (item) => item.iconRight ? { dataView: `<i class="${item.iconRight} text-[16px]
|
|
30
|
+
getPopover: (item) => item.iconRight ? { classInclude: 'flex', dataView: `<i class="${item.iconRight} text-[16px] ml-[8px]"></i>` } : undefined
|
|
29
31
|
},
|
|
30
32
|
{
|
|
31
33
|
getConfigBadge: (item) => {
|
|
@@ -45,4 +47,4 @@ export const tabMoreListConfig = (tabsService, translate, fieldKey, fieldLabel,
|
|
|
45
47
|
}
|
|
46
48
|
};
|
|
47
49
|
};
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy90YWJzL3NyYy91dGlscy90YWJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUcxQixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFNBQTJCLEVBQUUsUUFBZ0IsRUFBRSxVQUFrQixFQUFFLElBQVcsRUFBdUIsRUFBRTtJQUN2SSxPQUFPO1FBQ0wsSUFBSSxFQUFFLE1BQU07UUFDWixlQUFlLEVBQUU7WUFDZixZQUFZLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN4RyxZQUFZLEVBQUUsZ0JBQWdCO1lBQzlCLGNBQWMsRUFBRSxFQUFFO1NBQ25CO1FBQ0Qsa0JBQWtCLEVBQUU7WUFDbEIsUUFBUSxFQUFFLFFBQVEsSUFBSSxLQUFLO1lBQzNCLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyx1QkFBdUI7WUFDM0MsU0FBUyxFQUFFLFFBQVE7WUFDbkIsSUFBSSxFQUFFLENBQUM7b0JBQ0wsU0FBUyxFQUFFLG1CQUFtQjtvQkFDOUIsSUFBSSxFQUFFO3dCQUNKOzRCQUNFLFVBQVUsRUFBRSxDQUFDLElBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLElBQUksQ0FBQyxRQUFRLDZCQUE2QixFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7eUJBQ3hKO3dCQUNEOzRCQUNFLFFBQVEsRUFBRSxpQ0FBaUM7NEJBQzNDLFFBQVEsRUFBRSxDQUFDLElBQStCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7eUJBQy9HO3dCQUNEOzRCQUNFLFVBQVUsRUFBRSxDQUFDLElBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO3lCQUNwRjt3QkFDRDs0QkFDRSxVQUFVLEVBQUUsQ0FBQyxJQUFjLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxJQUFJLENBQUMsU0FBUyw2QkFBNkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO3lCQUMxSjt3QkFDRDs0QkFDRSxjQUFjLEVBQUUsQ0FBQyxJQUFjLEVBQUUsRUFBRTtnQ0FDakMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0NBQ3RCLE9BQU8sU0FBUyxDQUFDO2dDQUNuQixDQUFDO2dDQUNELE9BQU87b0NBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSTtvQ0FDNUIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO29DQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFO29DQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxrQkFBa0I7aUNBQ3BELENBQUM7NEJBQ0osQ0FBQzt5QkFDRjtxQkFDRjtpQkFDRixDQUFDO1NBQ0g7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSURhdGFGdW5jdGlvbkNhbGxJbkNvbmZpZywgSUxpc3RWaWV3Q29uZmlnSXRlbSB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWxpc3RcIjtcbmltcG9ydCB7IHJldHVybkxpc3RPYmplY3QgfSBmcm9tIFwiQGxpYnMtdWkvc2VydmljZXMtaHR0cC1yZXF1ZXN0XCI7XG5pbXBvcnQgeyBlc2NhcGVIdG1sLCBpc05pbCB9IGZyb20gXCJAbGlicy11aS91dGlsc1wiO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyBvZiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBJVGFiSXRlbSwgSVRhYnMgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy90YWIuaW50ZXJmYWNlXCI7XG5cbmV4cG9ydCBjb25zdCB0YWJNb3JlTGlzdENvbmZpZyA9ICh0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsIGZpZWxkS2V5OiBzdHJpbmcsIGZpZWxkTGFiZWw6IHN0cmluZywgdGFiczogSVRhYnMpOiBJTGlzdFZpZXdDb25maWdJdGVtID0+IHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAndGV4dCcsXG4gICAgaHR0cFJlcXVlc3REYXRhOiB7XG4gICAgICBzZXJ2aWNlT3RoZXI6IHJldHVybkxpc3RPYmplY3QodGFicy5pdGVtcygpLmZpbHRlcihpdGVtID0+ICFpdGVtKCkuc3BlY2lmaWNEaXNwbGF5KS5tYXAoaXRlbSA9PiBpdGVtKCkpKSxcbiAgICAgIGZ1bmN0aW9uTmFtZTogJ2xpc3RPYnNlcnZhYmxlJyxcbiAgICAgIGFyZ3VtZW50c1ZhbHVlOiBbXVxuICAgIH0sXG4gICAgY29uZmlnVGVtcGxhdGVUZXh0OiB7XG4gICAgICBmaWVsZEtleTogZmllbGRLZXkgfHwgJ2tleScsXG4gICAgICBnZXRDbGFzc0l0ZW06ICgpID0+ICchcGwtWzE2cHhdICFweS1bMTJweF0nLFxuICAgICAgY2xhc3NSb3dzOiAndy1mdWxsJyxcbiAgICAgIHJvd3M6IFt7XG4gICAgICAgIGNsYXNzQ29sczogJ2ZsZXggaXRlbXMtY2VudGVyJyxcbiAgICAgICAgY29sczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGdldFBvcG92ZXI6IChpdGVtOiBJVGFiSXRlbSkgPT4gaXRlbS5pY29uTGVmdCA/IHsgY2xhc3NJbmNsdWRlOiAnZmxleCcsIGRhdGFWaWV3OiBgPGkgY2xhc3M9XCIke2l0ZW0uaWNvbkxlZnR9IHRleHQtWzE2cHhdIG1yLVs4cHhdXCI+PC9pPmAgfSA6IHVuZGVmaW5lZFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NDb2w6ICdsaWJzLXVpLWZvbnQtaDZtIHRleHQtWyM2YTczODNdJyxcbiAgICAgICAgICAgIGdldFZhbHVlOiAoZGF0YTogSURhdGFGdW5jdGlvbkNhbGxJbkNvbmZpZykgPT4gb2YoZXNjYXBlSHRtbCh0cmFuc2xhdGUuaW5zdGFudChkYXRhLml0ZW1bZmllbGRMYWJlbF0gfHwgJyAnKSkpXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBnZXRQb3BvdmVyOiAoaXRlbTogSVRhYkl0ZW0pID0+IGl0ZW0ucG9wb3ZlciA/IHsgY29uZmlnOiBpdGVtLnBvcG92ZXIgfSA6IHVuZGVmaW5lZFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZ2V0UG9wb3ZlcjogKGl0ZW06IElUYWJJdGVtKSA9PiBpdGVtLmljb25SaWdodCA/IHsgY2xhc3NJbmNsdWRlOiAnZmxleCcsIGRhdGFWaWV3OiBgPGkgY2xhc3M9XCIke2l0ZW0uaWNvblJpZ2h0fSB0ZXh0LVsxNnB4XSBtbC1bOHB4XVwiPjwvaT5gIH0gOiB1bmRlZmluZWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGdldENvbmZpZ0JhZGdlOiAoaXRlbTogSVRhYkl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgaWYgKGlzTmlsKGl0ZW0uY291bnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1vZGU6IGl0ZW0ubW9kZUNvdW50IHx8ICd4KycsXG4gICAgICAgICAgICAgICAgY291bnQ6IGl0ZW0uY291bnQsXG4gICAgICAgICAgICAgICAgbWF4Q291bnQ6IGl0ZW0ubWF4Q291bnQgfHwgOTksXG4gICAgICAgICAgICAgICAgY2xhc3NDaXJjbGU6IGl0ZW0uY2xhc3NDaXJjbGUgfHwgJ2xpYnMtdWktZm9udC1oNXInXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XVxuICAgIH1cbiAgfTtcbn0iXX0=
|