@libs-ui/components-tabs 0.2.36
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/README.md +3 -0
- package/esm2022/index.mjs +3 -0
- package/esm2022/interfaces/tab.interface.mjs +2 -0
- package/esm2022/item/item.component.mjs +95 -0
- package/esm2022/libs-ui-components-tabs.mjs +5 -0
- package/esm2022/services/tab.service.mjs +14 -0
- package/esm2022/tabs.component.mjs +274 -0
- package/esm2022/utils/tabs.mjs +51 -0
- package/fesm2022/libs-ui-components-tabs.mjs +427 -0
- package/fesm2022/libs-ui-components-tabs.mjs.map +1 -0
- package/index.d.ts +2 -0
- package/interfaces/tab.interface.d.ts +68 -0
- package/item/item.component.d.ts +39 -0
- package/package.json +25 -0
- package/services/tab.service.d.ts +7 -0
- package/tabs.component.d.ts +59 -0
- package/utils/tabs.d.ts +5 -0
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, inject, input, model, output, signal, viewChild } from '@angular/core';
|
|
2
|
+
import { LibsUiComponentsButtonsButtonComponent } from '@libs-ui/components-buttons-button';
|
|
3
|
+
import { LibsUiComponentsDragContainerDirective, LibsUiDragItemDirective } from '@libs-ui/components-drag-drop';
|
|
4
|
+
import { LibsUiComponentsListComponent } from '@libs-ui/components-list';
|
|
5
|
+
import { LibsUiComponentsPopoverComponent } from '@libs-ui/components-popover';
|
|
6
|
+
import { isNil, uuid } from '@libs-ui/utils';
|
|
7
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
8
|
+
import { fromEvent, Subject } from 'rxjs';
|
|
9
|
+
import { debounceTime, takeUntil } from 'rxjs/operators';
|
|
10
|
+
import { LibsUiComponentsTabsItemComponent } from './item/item.component';
|
|
11
|
+
import { LibsUiTabsService } from './services/tab.service';
|
|
12
|
+
import { tabMoreListConfig } from './utils/tabs';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
export class LibsUiComponentsTabsComponent {
|
|
15
|
+
itemsDisplayComputed = computed(() => this.tabs().items().filter(item => item().specificDisplay));
|
|
16
|
+
displayMoreItem = signal(false);
|
|
17
|
+
tabMoreListConfig = signal(undefined);
|
|
18
|
+
changeViewTab = new Subject();
|
|
19
|
+
groupName = signal(uuid());
|
|
20
|
+
stylesDragDropOverrideComputed = computed(() => this.updateStylesDragDropOverride());
|
|
21
|
+
popoverFunctionControlEvent = signal(undefined);
|
|
22
|
+
onDestroy = new Subject();
|
|
23
|
+
mode = input('left');
|
|
24
|
+
fieldKey = input('key');
|
|
25
|
+
fieldLabel = input('label');
|
|
26
|
+
keySelected = model.required();
|
|
27
|
+
disable = input();
|
|
28
|
+
tabs = input.required();
|
|
29
|
+
heightTabItem = input(40);
|
|
30
|
+
ignoreCalculatorTab = input(false);
|
|
31
|
+
size = input('medium');
|
|
32
|
+
disableLabel = input();
|
|
33
|
+
hasAnimation = input(true);
|
|
34
|
+
zIndex = input();
|
|
35
|
+
configCss = model();
|
|
36
|
+
popoverShowMoreTabItem = input();
|
|
37
|
+
checkCanChangeTabSelected = input();
|
|
38
|
+
outKeySelected = output();
|
|
39
|
+
outFunctionsControl = output();
|
|
40
|
+
outDragTabChange = output();
|
|
41
|
+
outDisplayMoreItem = output();
|
|
42
|
+
headerEl = viewChild.required('headerEl');
|
|
43
|
+
headerLeftEl = viewChild.required('headerLeftEl');
|
|
44
|
+
headerRightEl = viewChild.required('headerRightEl');
|
|
45
|
+
tabsService = inject(LibsUiTabsService);
|
|
46
|
+
translate = inject(TranslateService);
|
|
47
|
+
ngOnInit() {
|
|
48
|
+
this.updateTabsCssConfig();
|
|
49
|
+
this.tabMoreListConfig.set(tabMoreListConfig(this.tabsService, this.translate, this.fieldKey(), this.fieldLabel(), this.tabs()));
|
|
50
|
+
if (this.ignoreCalculatorTab()) {
|
|
51
|
+
this.tabs().items().map(item => item.update(data => ({ ...data, specificDisplay: true })));
|
|
52
|
+
}
|
|
53
|
+
this.outFunctionsControl.emit({
|
|
54
|
+
addTabItem: this.addTabItem.bind(this),
|
|
55
|
+
calculatorTabItemsDisplay: this.calculatorTabsItemDisplay.bind(this),
|
|
56
|
+
selectedTabItem: this.handlerSelectedTabItem.bind(this)
|
|
57
|
+
});
|
|
58
|
+
if (this.mode() !== 'left' || this.ignoreCalculatorTab()) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
fromEvent(window, 'resize').pipe(debounceTime(250), takeUntil(this.onDestroy)).subscribe(() => {
|
|
62
|
+
if (!this.tabs().items().length) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
this.displayMoreItem.set(false);
|
|
66
|
+
this.calculatorTabsItemDisplay();
|
|
67
|
+
});
|
|
68
|
+
this.changeViewTab.pipe(takeUntil(this.onDestroy)).subscribe(() => this.calculatorTabsItemDisplay());
|
|
69
|
+
}
|
|
70
|
+
updateTabsCssConfig() {
|
|
71
|
+
if (this.configCss()) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
switch (this.mode()) {
|
|
75
|
+
case 'left':
|
|
76
|
+
this.configCss.set({
|
|
77
|
+
first: 'ml-[20px] mr-[16px]',
|
|
78
|
+
other: 'ml-[20px] mr-[16px]'
|
|
79
|
+
});
|
|
80
|
+
break;
|
|
81
|
+
case 'center':
|
|
82
|
+
this.configCss.set({
|
|
83
|
+
first: 'px-[12px] ml-[18px] mr-[18px]',
|
|
84
|
+
other: 'px-[12px] mx-[18px]',
|
|
85
|
+
header: 'flex justify-center'
|
|
86
|
+
});
|
|
87
|
+
this.tabs().items().map(item => item.update(data => ({ ...data, specificDisplay: true })));
|
|
88
|
+
break;
|
|
89
|
+
case 'center-has-line':
|
|
90
|
+
this.configCss.set({
|
|
91
|
+
first: 'px-[16px]',
|
|
92
|
+
other: 'px-[16px]',
|
|
93
|
+
headerCenter: 'items-center'
|
|
94
|
+
});
|
|
95
|
+
this.tabs().items().map(item => item.update(data => ({ ...data, specificDisplay: true })));
|
|
96
|
+
break;
|
|
97
|
+
case 'space-between':
|
|
98
|
+
this.configCss.set({
|
|
99
|
+
first: 'mx-auto',
|
|
100
|
+
other: 'mx-auto',
|
|
101
|
+
headerCenter: 'w-full'
|
|
102
|
+
});
|
|
103
|
+
this.tabs().items().map(item => item.update(data => ({ ...data, specificDisplay: true })));
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
updateStylesDragDropOverride() {
|
|
108
|
+
if (this.hasAnimation()) {
|
|
109
|
+
return [
|
|
110
|
+
{
|
|
111
|
+
className: 'libs-ui-drag-drop-item-placeholder',
|
|
112
|
+
styles: ''
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
className: 'libs-ui-drag-drop-item',
|
|
116
|
+
styles: 'cursor: move;'
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
className: 'libs-ui-drag-drop-item-dragging',
|
|
120
|
+
styles: 'cursor: move; background: #dddddd;'
|
|
121
|
+
}
|
|
122
|
+
];
|
|
123
|
+
}
|
|
124
|
+
return [
|
|
125
|
+
{
|
|
126
|
+
className: 'libs-ui-drag-drop-item',
|
|
127
|
+
styles: ''
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
className: 'libs-ui-drag-drop-item-disable',
|
|
131
|
+
styles: ''
|
|
132
|
+
}
|
|
133
|
+
];
|
|
134
|
+
}
|
|
135
|
+
handlerDropContainer(event) {
|
|
136
|
+
const { itemDragInfo } = event;
|
|
137
|
+
if (!itemDragInfo) {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const items = this.tabs().items;
|
|
141
|
+
const { indexDrag, indexDrop } = itemDragInfo;
|
|
142
|
+
if (isNil(indexDrag) || isNil(indexDrop) || indexDrop === indexDrag) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const itemDrag = items()[indexDrag];
|
|
146
|
+
items.update(items => {
|
|
147
|
+
items.splice(indexDrag, 1);
|
|
148
|
+
items.splice(indexDrop, 0, itemDrag);
|
|
149
|
+
return [...items];
|
|
150
|
+
});
|
|
151
|
+
this.outDragTabChange.emit();
|
|
152
|
+
}
|
|
153
|
+
handlerPopoverFunctionControlEvent(event) {
|
|
154
|
+
this.popoverFunctionControlEvent.set(event);
|
|
155
|
+
}
|
|
156
|
+
async handlerSelectedTabItem(key, resetDisable = true) {
|
|
157
|
+
const itemSelected = this.tabs().items().find(item => item()[this.fieldKey()] === key);
|
|
158
|
+
if (!itemSelected) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (resetDisable) {
|
|
162
|
+
itemSelected.update(item => ({ ...item, disable: false }));
|
|
163
|
+
}
|
|
164
|
+
this.handlerClickItem({ stopPropagation: () => { return; } }, itemSelected);
|
|
165
|
+
}
|
|
166
|
+
handlerSelectedKey(event) {
|
|
167
|
+
if (!event) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
this.handlerClickItem({ stopPropagation: () => { return; } }, event.item);
|
|
171
|
+
this.outDragTabChange.emit();
|
|
172
|
+
}
|
|
173
|
+
async handlerClickItem(event, item) {
|
|
174
|
+
event.stopPropagation();
|
|
175
|
+
if (item().disable || this.disable()) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
const checkCanChangeTabSelected = this.checkCanChangeTabSelected();
|
|
179
|
+
if (checkCanChangeTabSelected) {
|
|
180
|
+
const state = await checkCanChangeTabSelected();
|
|
181
|
+
if (state) {
|
|
182
|
+
this.changeItemSelected(item);
|
|
183
|
+
}
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
this.changeItemSelected(item);
|
|
187
|
+
}
|
|
188
|
+
changeItemSelected(item) {
|
|
189
|
+
this.keySelected.set(item()[this.fieldKey()]);
|
|
190
|
+
this.outKeySelected.emit(this.keySelected());
|
|
191
|
+
this.popoverFunctionControlEvent()?.removePopoverOverlay();
|
|
192
|
+
this.calculatorTabsItemDisplay();
|
|
193
|
+
}
|
|
194
|
+
async handlerSelectAction(event) {
|
|
195
|
+
// switch (event.action) {
|
|
196
|
+
// case 'pin':
|
|
197
|
+
// await this.handlerPin(event.item);
|
|
198
|
+
// break;
|
|
199
|
+
// case 'unpin':
|
|
200
|
+
// await this.handlerUnpin(event.item);
|
|
201
|
+
// break;
|
|
202
|
+
// case 'edit':
|
|
203
|
+
// this.handlerEditTabItem(event.item);
|
|
204
|
+
// break;
|
|
205
|
+
// case 'delete':
|
|
206
|
+
// this.handlerRemoveTabItem(event.item);
|
|
207
|
+
// break;
|
|
208
|
+
// }
|
|
209
|
+
}
|
|
210
|
+
async addTabItem(item, selected = true, addFirst) {
|
|
211
|
+
const items = this.tabs().items;
|
|
212
|
+
items.update(items => {
|
|
213
|
+
if (addFirst) {
|
|
214
|
+
return [item, ...items];
|
|
215
|
+
}
|
|
216
|
+
return [...items, item];
|
|
217
|
+
});
|
|
218
|
+
if (selected) {
|
|
219
|
+
this.handlerClickItem({ stopPropagation: () => { return; } }, item);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
async calculatorTabsItemDisplay() {
|
|
223
|
+
let items = this.tabs().items();
|
|
224
|
+
const indexItemSelected = items.findIndex(item => item()[this.fieldKey()] === this.keySelected());
|
|
225
|
+
if (indexItemSelected < 0) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
this.displayMoreItem.set(false);
|
|
229
|
+
let displayMoreItem = false;
|
|
230
|
+
const headerWidth = this.headerEl().nativeElement.clientWidth || 0;
|
|
231
|
+
const itemSelected = items[indexItemSelected];
|
|
232
|
+
const itemSelectedWidth = itemSelected().specificWidth;
|
|
233
|
+
let totalWidthItemsDisplay = (this.headerLeftEl().nativeElement.clientWidth || 0) + (this.headerRightEl().nativeElement.clientWidth || 0) + 32;
|
|
234
|
+
items.forEach((item, index) => {
|
|
235
|
+
if (!item().specificWidth) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
item.update(data => ({ ...data, specificDisplay: false }));
|
|
239
|
+
const itemWidth = item().specificWidth || 0;
|
|
240
|
+
const width = totalWidthItemsDisplay + itemWidth + (index < indexItemSelected ? itemSelectedWidth : 0);
|
|
241
|
+
totalWidthItemsDisplay += itemWidth;
|
|
242
|
+
if (width > headerWidth) {
|
|
243
|
+
displayMoreItem = true;
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
item.update(data => ({ ...data, specificDisplay: true }));
|
|
247
|
+
});
|
|
248
|
+
itemSelected.update(data => ({ ...data, specificDisplay: true }));
|
|
249
|
+
const display = items.filter(item => item().specificDisplay);
|
|
250
|
+
const notDisplay = items.filter(item => !item().specificDisplay);
|
|
251
|
+
items = display.concat(notDisplay);
|
|
252
|
+
items.forEach((item, index) => item.update(data => ({ ...data, order: index })));
|
|
253
|
+
this.displayMoreItem.set(displayMoreItem);
|
|
254
|
+
this.outDisplayMoreItem.emit(this.displayMoreItem());
|
|
255
|
+
}
|
|
256
|
+
ngOnDestroy() {
|
|
257
|
+
this.onDestroy.next();
|
|
258
|
+
this.onDestroy.complete();
|
|
259
|
+
}
|
|
260
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
261
|
+
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]=\"itemsDisplayComputed()\"\n [directionDrag]=\"'horizontal'\"\n [disableDragContainer]=\"!hasAnimation()\"\n [acceptDragSameGroup]=\"hasAnimation()\"\n (outDroppedContainer)=\"handlerDropContainer($event)\">\n @for (item of itemsDisplayComputed(); track item) {\n <div LibsUiDragItemDirective\n [disable]=\"disable() || !hasAnimation()\"\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/(itemsDisplayComputed().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 [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", "data", "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 });
|
|
262
|
+
}
|
|
263
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsTabsComponent, decorators: [{
|
|
264
|
+
type: Component,
|
|
265
|
+
args: [{ selector: 'libs_ui-components-tabs', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
266
|
+
LibsUiComponentsDragContainerDirective,
|
|
267
|
+
LibsUiDragItemDirective,
|
|
268
|
+
LibsUiComponentsPopoverComponent,
|
|
269
|
+
LibsUiComponentsButtonsButtonComponent,
|
|
270
|
+
LibsUiComponentsTabsItemComponent,
|
|
271
|
+
LibsUiComponentsListComponent
|
|
272
|
+
], providers: [LibsUiTabsService], 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]=\"itemsDisplayComputed()\"\n [directionDrag]=\"'horizontal'\"\n [disableDragContainer]=\"!hasAnimation()\"\n [acceptDragSameGroup]=\"hasAnimation()\"\n (outDroppedContainer)=\"handlerDropContainer($event)\">\n @for (item of itemsDisplayComputed(); track item) {\n <div LibsUiDragItemDirective\n [disable]=\"disable() || !hasAnimation()\"\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/(itemsDisplayComputed().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 [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"] }]
|
|
273
|
+
}] });
|
|
274
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvdGFicy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvdGFicy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQzdLLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBUyxzQ0FBc0MsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZILE9BQU8sRUFBeUMsNkJBQTZCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoSCxPQUFPLEVBQTBDLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkgsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFtQmpELE1BQU0sT0FBTyw2QkFBNkI7SUFF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LENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBM1FVLDZCQUE2Qjs0RkFBN0IsNkJBQTZCLG8xRUFGN0IsQ0FBQyxpQkFBaUIsQ0FBQyxnWEM3QmhDLGlzTEF1SEEseW9CRGpHSSxzQ0FBc0MsMGNBQ3RDLHVCQUF1Qiw0YUFDdkIsZ0NBQWdDLDBkQUNoQyxzQ0FBc0MsaWhCQUN0QyxpQ0FBaUMsMlNBQ2pDLDZCQUE2Qjs7NEZBSXBCLDZCQUE2QjtrQkFqQnpDLFNBQVM7K0JBRUUseUJBQXlCLGNBR3ZCLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxzQ0FBc0M7d0JBQ3RDLHVCQUF1Qjt3QkFDdkIsZ0NBQWdDO3dCQUNoQyxzQ0FBc0M7d0JBQ3RDLGlDQUFpQzt3QkFDakMsNkJBQTZCO3FCQUM5QixhQUNVLENBQUMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgdmlld0NoaWxkLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IElEcm9wLCBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSwgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWRyYWctZHJvcCc7XG5pbXBvcnQgeyBJTGlzdERhdGFFbWl0S2V5LCBJTGlzdFZpZXdDb25maWdJdGVtLCBMaWJzVWlDb21wb25lbnRzTGlzdENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGlzdCc7XG5pbXBvcnQgeyBJUG9wb3ZlciwgSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgaXNOaWwsIHV1aWQgfSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSVRhYkNzc0NvbmZpZywgSVRhYkZ1bmN0aW9uQ29udHJvbEV2ZW50LCBJVGFiSXRlbSwgSVRhYkl0ZW1FdmVudCwgSVRhYnMsIFRZUEVfVEFCX01PREUgfSBmcm9tICcuL2ludGVyZmFjZXMvdGFiLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzVGFic0l0ZW1Db21wb25lbnQgfSBmcm9tICcuL2l0ZW0vaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlic1VpVGFic1NlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3RhYi5zZXJ2aWNlJztcbmltcG9ydCB7IHRhYk1vcmVMaXN0Q29uZmlnIH0gZnJvbSAnLi91dGlscy90YWJzJztcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGlic191aS1jb21wb25lbnRzLXRhYnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFicy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYnMuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSxcbiAgICBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZSxcbiAgICBMaWJzVWlDb21wb25lbnRzUG9wb3ZlckNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzVGFic0l0ZW1Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0xpc3RDb21wb25lbnRcbiAgXSxcbiAgcHJvdmlkZXJzOiBbTGlic1VpVGFic1NlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIExpYnNVaUNvbXBvbmVudHNUYWJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByb3RlY3RlZCBpdGVtc0Rpc3BsYXlDb21wdXRlZCA9IGNvbXB1dGVkPEFycmF5PFdyaXRhYmxlU2lnbmFsPElUYWJJdGVtPj4+KCgpID0+IHRoaXMudGFicygpLml0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gaXRlbSgpLnNwZWNpZmljRGlzcGxheSkpO1xuICBwcm90ZWN0ZWQgZGlzcGxheU1vcmVJdGVtID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIHRhYk1vcmVMaXN0Q29uZmlnID0gc2lnbmFsPElMaXN0Vmlld0NvbmZpZ0l0ZW0gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBjaGFuZ2VWaWV3VGFiID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJvdGVjdGVkIGdyb3VwTmFtZSA9IHNpZ25hbDxzdHJpbmc+KHV1aWQoKSk7XG4gIHByb3RlY3RlZCBzdHlsZXNEcmFnRHJvcE92ZXJyaWRlQ29tcHV0ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnVwZGF0ZVN0eWxlc0RyYWdEcm9wT3ZlcnJpZGUoKSk7XG5cbiAgcHJpdmF0ZSBwb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQgPSBzaWduYWw8SVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSBvbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IG1vZGUgPSBpbnB1dDxUWVBFX1RBQl9NT0RFPignbGVmdCcpO1xuICByZWFkb25seSBmaWVsZEtleSA9IGlucHV0PHN0cmluZz4oJ2tleScpO1xuICByZWFkb25seSBmaWVsZExhYmVsID0gaW5wdXQ8c3RyaW5nPignbGFiZWwnKTtcbiAgcmVhZG9ubHkga2V5U2VsZWN0ZWQgPSBtb2RlbC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSB0YWJzID0gaW5wdXQucmVxdWlyZWQ8SVRhYnM+KCk7XG4gIHJlYWRvbmx5IGhlaWdodFRhYkl0ZW0gPSBpbnB1dDxudW1iZXI+KDQwKTtcbiAgcmVhZG9ubHkgaWdub3JlQ2FsY3VsYXRvclRhYiA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcmVhZG9ubHkgc2l6ZSA9IGlucHV0PCdsYW5nZXInIHwgJ21lZGl1bSc+KCdtZWRpdW0nKTtcbiAgcmVhZG9ubHkgZGlzYWJsZUxhYmVsID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgaGFzQW5pbWF0aW9uID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgY29uZmlnQ3NzID0gbW9kZWw8SVRhYkNzc0NvbmZpZz4oKTtcbiAgcmVhZG9ubHkgcG9wb3ZlclNob3dNb3JlVGFiSXRlbSA9IGlucHV0PElQb3BvdmVyPigpO1xuICByZWFkb25seSBjaGVja0NhbkNoYW5nZVRhYlNlbGVjdGVkID0gaW5wdXQ8KCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4+KCk7XG5cbiAgcmVhZG9ubHkgb3V0S2V5U2VsZWN0ZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBvdXRGdW5jdGlvbnNDb250cm9sID0gb3V0cHV0PElUYWJGdW5jdGlvbkNvbnRyb2xFdmVudD4oKTtcbiAgcmVhZG9ubHkgb3V0RHJhZ1RhYkNoYW5nZSA9IG91dHB1dDx2b2lkPigpO1xuICByZWFkb25seSBvdXREaXNwbGF5TW9yZUl0ZW0gPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlckVsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdoZWFkZXJFbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlckxlZnRFbCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaGVhZGVyTGVmdEVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVyUmlnaHRFbCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaGVhZGVyUmlnaHRFbCcpO1xuXG4gIHByaXZhdGUgdGFic1NlcnZpY2UgPSBpbmplY3QoTGlic1VpVGFic1NlcnZpY2UpO1xuICBwcml2YXRlIHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnVwZGF0ZVRhYnNDc3NDb25maWcoKTtcbiAgICB0aGlzLnRhYk1vcmVMaXN0Q29uZmlnLnNldCh0YWJNb3JlTGlzdENvbmZpZyh0aGlzLnRhYnNTZXJ2aWNlLCB0aGlzLnRyYW5zbGF0ZSwgdGhpcy5maWVsZEtleSgpLCB0aGlzLmZpZWxkTGFiZWwoKSwgdGhpcy50YWJzKCkpKTtcbiAgICBpZiAodGhpcy5pZ25vcmVDYWxjdWxhdG9yVGFiKCkpIHtcbiAgICAgIHRoaXMudGFicygpLml0ZW1zKCkubWFwKGl0ZW0gPT4gaXRlbS51cGRhdGUoZGF0YSA9PiAoeyAuLi5kYXRhLCBzcGVjaWZpY0Rpc3BsYXk6IHRydWUgfSkpKTtcbiAgICB9XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQoe1xuICAgICAgYWRkVGFiSXRlbTogdGhpcy5hZGRUYWJJdGVtLmJpbmQodGhpcyksXG4gICAgICBjYWxjdWxhdG9yVGFiSXRlbXNEaXNwbGF5OiB0aGlzLmNhbGN1bGF0b3JUYWJzSXRlbURpc3BsYXkuYmluZCh0aGlzKSxcbiAgICAgIHNlbGVjdGVkVGFiSXRlbTogdGhpcy5oYW5kbGVyU2VsZWN0ZWRUYWJJdGVtLmJpbmQodGhpcylcbiAgICB9KTtcbiAgICBpZiAodGhpcy5tb2RlKCkgIT09ICdsZWZ0JyB8fCB0aGlzLmlnbm9yZUNhbGN1bGF0b3JUYWIoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZShkZWJvdW5jZVRpbWUoMjUwKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy50YWJzKCkuaXRlbXMoKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5kaXNwbGF5TW9yZUl0ZW0uc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuY2FsY3VsYXRvclRhYnNJdGVtRGlzcGxheSgpO1xuICAgIH0pO1xuICAgIHRoaXMuY2hhbmdlVmlld1RhYi5waXBlKHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNhbGN1bGF0b3JUYWJzSXRlbURpc3BsYXkoKSk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVRhYnNDc3NDb25maWcoKSB7XG4gICAgaWYgKHRoaXMuY29uZmlnQ3NzKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLm1vZGUoKSkge1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgIHRoaXMuY29uZmlnQ3NzLnNldCh7XG4gICAgICAgICAgZmlyc3Q6ICdtbC1bMjBweF0gbXItWzE2cHhdJyxcbiAgICAgICAgICBvdGhlcjogJ21sLVsyMHB4XSBtci1bMTZweF0nXG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIHRoaXMuY29uZmlnQ3NzLnNldCh7XG4gICAgICAgICAgZmlyc3Q6ICdweC1bMTJweF0gbWwtWzE4cHhdIG1yLVsxOHB4XScsXG4gICAgICAgICAgb3RoZXI6ICdweC1bMTJweF0gbXgtWzE4cHhdJyxcbiAgICAgICAgICBoZWFkZXI6ICdmbGV4IGp1c3RpZnktY2VudGVyJ1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50YWJzKCkuaXRlbXMoKS5tYXAoaXRlbSA9PiBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIHNwZWNpZmljRGlzcGxheTogdHJ1ZSB9KSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NlbnRlci1oYXMtbGluZSc6XG4gICAgICAgIHRoaXMuY29uZmlnQ3NzLnNldCh7XG4gICAgICAgICAgZmlyc3Q6ICdweC1bMTZweF0nLFxuICAgICAgICAgIG90aGVyOiAncHgtWzE2cHhdJyxcbiAgICAgICAgICBoZWFkZXJDZW50ZXI6ICdpdGVtcy1jZW50ZXInXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRhYnMoKS5pdGVtcygpLm1hcChpdGVtID0+IGl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNEaXNwbGF5OiB0cnVlIH0pKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3BhY2UtYmV0d2Vlbic6XG4gICAgICAgIHRoaXMuY29uZmlnQ3NzLnNldCh7XG4gICAgICAgICAgZmlyc3Q6ICdteC1hdXRvJyxcbiAgICAgICAgICBvdGhlcjogJ214LWF1dG8nLFxuICAgICAgICAgIGhlYWRlckNlbnRlcjogJ3ctZnVsbCdcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGFicygpLml0ZW1zKCkubWFwKGl0ZW0gPT4gaXRlbS51cGRhdGUoZGF0YSA9PiAoeyAuLi5kYXRhLCBzcGVjaWZpY0Rpc3BsYXk6IHRydWUgfSkpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdHlsZXNEcmFnRHJvcE92ZXJyaWRlKCkge1xuICAgIGlmICh0aGlzLmhhc0FuaW1hdGlvbigpKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1wbGFjZWhvbGRlcicsXG4gICAgICAgICAgc3R5bGVzOiAnJ1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NOYW1lOiAnbGlicy11aS1kcmFnLWRyb3AtaXRlbScsXG4gICAgICAgICAgc3R5bGVzOiAnY3Vyc29yOiBtb3ZlOydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tZHJhZ2dpbmcnLFxuICAgICAgICAgIHN0eWxlczogJ2N1cnNvcjogbW92ZTsgYmFja2dyb3VuZDogI2RkZGRkZDsnXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGNsYXNzTmFtZTogJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0nLFxuICAgICAgICBzdHlsZXM6ICcnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLWRpc2FibGUnLFxuICAgICAgICBzdHlsZXM6ICcnXG4gICAgICB9XG4gICAgXVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJEcm9wQ29udGFpbmVyKGV2ZW50OiBJRHJvcCkge1xuICAgIGNvbnN0IHsgaXRlbURyYWdJbmZvIH0gPSBldmVudDtcbiAgICBpZiAoIWl0ZW1EcmFnSW5mbykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpdGVtcyA9IHRoaXMudGFicygpLml0ZW1zO1xuICAgIGNvbnN0IHsgaW5kZXhEcmFnLCBpbmRleERyb3AgfSA9IGl0ZW1EcmFnSW5mbztcbiAgICBpZiAoaXNOaWwoaW5kZXhEcmFnKSB8fCBpc05pbChpbmRleERyb3ApIHx8IGluZGV4RHJvcCA9PT0gaW5kZXhEcmFnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGl0ZW1EcmFnID0gaXRlbXMoKVtpbmRleERyYWcgYXMgbnVtYmVyXTtcbiAgICBpdGVtcy51cGRhdGUoaXRlbXMgPT4ge1xuICAgICAgaXRlbXMuc3BsaWNlKGluZGV4RHJhZyBhcyBudW1iZXIsIDEpO1xuICAgICAgaXRlbXMuc3BsaWNlKGluZGV4RHJvcCBhcyBudW1iZXIsIDAsIGl0ZW1EcmFnKTtcbiAgICAgIHJldHVybiBbLi4uaXRlbXNdO1xuICAgIH0pO1xuICAgIHRoaXMub3V0RHJhZ1RhYkNoYW5nZS5lbWl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlclBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudChldmVudDogSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCkge1xuICAgIHRoaXMucG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50LnNldChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZXJTZWxlY3RlZFRhYkl0ZW0oa2V5OiBzdHJpbmcsIHJlc2V0RGlzYWJsZSA9IHRydWUpIHtcbiAgICBjb25zdCBpdGVtU2VsZWN0ZWQgPSB0aGlzLnRhYnMoKS5pdGVtcygpLmZpbmQoaXRlbSA9PiBpdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0ga2V5KTtcbiAgICBpZiAoIWl0ZW1TZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVzZXREaXNhYmxlKSB7XG4gICAgICBpdGVtU2VsZWN0ZWQudXBkYXRlKGl0ZW0gPT4gKHsgLi4uaXRlbSwgZGlzYWJsZTogZmFsc2UgfSkpO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZXJDbGlja0l0ZW0oeyBzdG9wUHJvcGFnYXRpb246ICgpID0+IHsgcmV0dXJuIH0gfSBhcyBFdmVudCwgaXRlbVNlbGVjdGVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyU2VsZWN0ZWRLZXkoZXZlbnQ6IElMaXN0RGF0YUVtaXRLZXkgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlckNsaWNrSXRlbSh7IHN0b3BQcm9wYWdhdGlvbjogKCkgPT4geyByZXR1cm4gfSB9IGFzIEV2ZW50LCBldmVudC5pdGVtKTtcbiAgICB0aGlzLm91dERyYWdUYWJDaGFuZ2UuZW1pdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJDbGlja0l0ZW0oZXZlbnQ6IEV2ZW50LCBpdGVtOiBXcml0YWJsZVNpZ25hbDxJVGFiSXRlbT4pIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoaXRlbSgpLmRpc2FibGUgfHwgdGhpcy5kaXNhYmxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY2hlY2tDYW5DaGFuZ2VUYWJTZWxlY3RlZCA9IHRoaXMuY2hlY2tDYW5DaGFuZ2VUYWJTZWxlY3RlZCgpO1xuICAgIGlmIChjaGVja0NhbkNoYW5nZVRhYlNlbGVjdGVkKSB7XG4gICAgICBjb25zdCBzdGF0ZSA9IGF3YWl0IGNoZWNrQ2FuQ2hhbmdlVGFiU2VsZWN0ZWQoKTtcbiAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZUl0ZW1TZWxlY3RlZChpdGVtKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VJdGVtU2VsZWN0ZWQoaXRlbSk7XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZUl0ZW1TZWxlY3RlZChpdGVtOiBXcml0YWJsZVNpZ25hbDxJVGFiSXRlbT4pIHtcbiAgICB0aGlzLmtleVNlbGVjdGVkLnNldChpdGVtKClbdGhpcy5maWVsZEtleSgpXSk7XG4gICAgdGhpcy5vdXRLZXlTZWxlY3RlZC5lbWl0KHRoaXMua2V5U2VsZWN0ZWQoKSk7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoKT8ucmVtb3ZlUG9wb3Zlck92ZXJsYXkoKTtcbiAgICB0aGlzLmNhbGN1bGF0b3JUYWJzSXRlbURpc3BsYXkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2VsZWN0QWN0aW9uKGV2ZW50OiBJVGFiSXRlbUV2ZW50KSB7XG4gICAgLy8gc3dpdGNoIChldmVudC5hY3Rpb24pIHtcbiAgICAvLyAgIGNhc2UgJ3Bpbic6XG4gICAgLy8gICAgIGF3YWl0IHRoaXMuaGFuZGxlclBpbihldmVudC5pdGVtKTtcbiAgICAvLyAgICAgYnJlYWs7XG5cbiAgICAvLyAgIGNhc2UgJ3VucGluJzpcbiAgICAvLyAgICAgYXdhaXQgdGhpcy5oYW5kbGVyVW5waW4oZXZlbnQuaXRlbSk7XG4gICAgLy8gICAgIGJyZWFrO1xuXG4gICAgLy8gICBjYXNlICdlZGl0JzpcbiAgICAvLyAgICAgdGhpcy5oYW5kbGVyRWRpdFRhYkl0ZW0oZXZlbnQuaXRlbSk7XG4gICAgLy8gICAgIGJyZWFrO1xuXG4gICAgLy8gICBjYXNlICdkZWxldGUnOlxuICAgIC8vICAgICB0aGlzLmhhbmRsZXJSZW1vdmVUYWJJdGVtKGV2ZW50Lml0ZW0pO1xuICAgIC8vICAgICBicmVhaztcbiAgICAvLyB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFkZFRhYkl0ZW0oaXRlbTogV3JpdGFibGVTaWduYWw8SVRhYkl0ZW0+LCBzZWxlY3RlZCA9IHRydWUsIGFkZEZpcnN0PzogYm9vbGVhbikge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy50YWJzKCkuaXRlbXM7XG4gICAgaXRlbXMudXBkYXRlKGl0ZW1zID0+IHtcbiAgICAgIGlmIChhZGRGaXJzdCkge1xuICAgICAgICByZXR1cm4gW2l0ZW0sIC4uLml0ZW1zXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbLi4uaXRlbXMsIGl0ZW1dO1xuICAgIH0pO1xuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgdGhpcy5oYW5kbGVyQ2xpY2tJdGVtKHsgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB7IHJldHVybiB9IH0gYXMgRXZlbnQsIGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjYWxjdWxhdG9yVGFic0l0ZW1EaXNwbGF5KCkge1xuICAgIGxldCBpdGVtcyA9IHRoaXMudGFicygpLml0ZW1zKCk7XG4gICAgY29uc3QgaW5kZXhJdGVtU2VsZWN0ZWQgPSBpdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0gdGhpcy5rZXlTZWxlY3RlZCgpKTtcbiAgICBpZiAoaW5kZXhJdGVtU2VsZWN0ZWQgPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGlzcGxheU1vcmVJdGVtLnNldChmYWxzZSk7XG4gICAgbGV0IGRpc3BsYXlNb3JlSXRlbSA9IGZhbHNlO1xuICAgIGNvbnN0IGhlYWRlcldpZHRoID0gdGhpcy5oZWFkZXJFbCgpLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggfHwgMDtcbiAgICBjb25zdCBpdGVtU2VsZWN0ZWQgPSBpdGVtc1tpbmRleEl0ZW1TZWxlY3RlZF07XG4gICAgY29uc3QgaXRlbVNlbGVjdGVkV2lkdGggPSBpdGVtU2VsZWN0ZWQoKS5zcGVjaWZpY1dpZHRoO1xuICAgIGxldCB0b3RhbFdpZHRoSXRlbXNEaXNwbGF5ID0gKHRoaXMuaGVhZGVyTGVmdEVsKCkubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCB8fCAwKSArICh0aGlzLmhlYWRlclJpZ2h0RWwoKS5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoIHx8IDApICsgMzI7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGlmICghaXRlbSgpLnNwZWNpZmljV2lkdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXRlbS51cGRhdGUoZGF0YSA9PiAoeyAuLi5kYXRhLCBzcGVjaWZpY0Rpc3BsYXk6IGZhbHNlIH0pKTtcbiAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IGl0ZW0oKS5zcGVjaWZpY1dpZHRoIHx8IDA7XG4gICAgICBjb25zdCB3aWR0aCA9IHRvdGFsV2lkdGhJdGVtc0Rpc3BsYXkgKyBpdGVtV2lkdGggKyAoaW5kZXggPCBpbmRleEl0ZW1TZWxlY3RlZCA/IGl0ZW1TZWxlY3RlZFdpZHRoIDogMCk7XG4gICAgICB0b3RhbFdpZHRoSXRlbXNEaXNwbGF5ICs9IGl0ZW1XaWR0aDtcbiAgICAgIGlmICh3aWR0aCA+IGhlYWRlcldpZHRoKSB7XG4gICAgICAgIGRpc3BsYXlNb3JlSXRlbSA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNEaXNwbGF5OiB0cnVlIH0pKTtcbiAgICB9KTtcbiAgICBpdGVtU2VsZWN0ZWQudXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNEaXNwbGF5OiB0cnVlIH0pKTtcbiAgICBjb25zdCBkaXNwbGF5ID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSgpLnNwZWNpZmljRGlzcGxheSk7XG4gICAgY29uc3Qgbm90RGlzcGxheSA9IGl0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtKCkuc3BlY2lmaWNEaXNwbGF5KTtcbiAgICBpdGVtcyA9IGRpc3BsYXkuY29uY2F0KG5vdERpc3BsYXkpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIG9yZGVyOiBpbmRleCB9KSkpO1xuICAgIHRoaXMuZGlzcGxheU1vcmVJdGVtLnNldChkaXNwbGF5TW9yZUl0ZW0pO1xuICAgIHRoaXMub3V0RGlzcGxheU1vcmVJdGVtLmVtaXQodGhpcy5kaXNwbGF5TW9yZUl0ZW0oKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxuXG59IiwiPGRpdiBjbGFzcz1cImxpYnMtdWktdGFiXCI+XG4gIDxkaXYgI2hlYWRlckVsXG4gICAgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXIgei1bMV0ge3sgY29uZmlnQ3NzKCk/LmhlYWRlciB8fCAnJyB9fSB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyIHx8ICcnIH19XCJcbiAgICBbc3R5bGUubWluSGVpZ2h0LnB4XT1cImhlaWdodFRhYkl0ZW0oKVwiPlxuICAgIDxkaXYgI2hlYWRlckxlZnRFbFxuICAgICAgY2xhc3M9J2xpYnMtdWktdGFiLWhlYWRlci1sZWZ0Jz5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImRpdi5saWJzLXVpLXRhYi1oZWFkZXItbGVmdFwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyLWNlbnRlciB7eyBjb25maWdDc3MoKT8uaGVhZGVyQ2VudGVyIHx8ICcnIH19IHt7IHRhYnMoKS5jbGFzc0luY2x1ZGVIZWFkZXJDZW50ZXIgfHwgJycgfX1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCIhZmxleCB3LWZ1bGxcIlxuICAgICAgICAjZWxlbWVudENvbnRhaW5lckVsXG4gICAgICAgIExpYnNVaUNvbXBvbmVudHNEcmFnQ29udGFpbmVyRGlyZWN0aXZlXG4gICAgICAgIFtzdHlsZXNPdmVycmlkZV09XCJzdHlsZXNEcmFnRHJvcE92ZXJyaWRlQ29tcHV0ZWQoKVwiXG4gICAgICAgIFtncm91cE5hbWVdPVwiZ3JvdXBOYW1lKClcIlxuICAgICAgICBbaXRlbXNdPVwiaXRlbXNEaXNwbGF5Q29tcHV0ZWQoKVwiXG4gICAgICAgIFtkaXJlY3Rpb25EcmFnXT1cIidob3Jpem9udGFsJ1wiXG4gICAgICAgIFtkaXNhYmxlRHJhZ0NvbnRhaW5lcl09XCIhaGFzQW5pbWF0aW9uKClcIlxuICAgICAgICBbYWNjZXB0RHJhZ1NhbWVHcm91cF09XCJoYXNBbmltYXRpb24oKVwiXG4gICAgICAgIChvdXREcm9wcGVkQ29udGFpbmVyKT1cImhhbmRsZXJEcm9wQ29udGFpbmVyKCRldmVudClcIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiBpdGVtc0Rpc3BsYXlDb21wdXRlZCgpOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgPGRpdiBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZVxuICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpIHx8ICFoYXNBbmltYXRpb24oKVwiXG4gICAgICAgICAgICBbZWxlbWVudENvbnRhaW5lcl09XCJlbGVtZW50Q29udGFpbmVyRWxcIlxuICAgICAgICAgICAgW2RyYWdCb3VuZGFyeV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtkcmFnQm91bmRhcnlBY2NlcHRNb3VzZUxlYXZlQ29udGFpbmVyXT1cInRydWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSBsaWJzLXVpLXRhYi1pdGVtLWNvbnRhaW5lclwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibW9kZSgpID09PSAnc3BhY2UtYmV0d2VlbicgPyAoZWxlbWVudENvbnRhaW5lckVsLmNsaWVudFdpZHRoLyhpdGVtc0Rpc3BsYXlDb21wdXRlZCgpLmxlbmd0aCB8fCAxKSkgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgW2NsYXNzLmZsZXhdPVwibW9kZSgpID09PSAnY2VudGVyLWhhcy1saW5lJ1wiXG4gICAgICAgICAgICBbY2xhc3MuaXRlbXMtY2VudGVyXT1cIm1vZGUoKSA9PT0gJ2NlbnRlci1oYXMtbGluZSdcIj5cbiAgICAgICAgICAgIEBpZiAoaGFzQW5pbWF0aW9uKCkgJiYgIWRpc2FibGUoKSkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktaWNvbi1hcnJhbmdlIHRleHQtWyM5Y2EyYWRdIGFic29sdXRlIHRvcC1bMTJweF0gbGVmdC1bNHB4XVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtdGFicy1pdGVtIGNsYXNzPVwiaC1mdWxsIHctZnVsbCAge3sgdGFicygpLmNsYXNzSW5jbHVkZUl0ZW0gfHwgJycgfX1cIlxuICAgICAgICAgICAgICBbdGFic109XCJ0YWJzKClcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJzaXplKClcIlxuICAgICAgICAgICAgICBbKGl0ZW0pXT1cIml0ZW1cIlxuICAgICAgICAgICAgICBbc3RlcF09XCIkaW5kZXgrMVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlTGFiZWxdPVwiZGlzYWJsZUxhYmVsKClcIlxuICAgICAgICAgICAgICBba2V5U2VsZWN0ZWRdPVwia2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIFtmaWVsZExhYmVsXT1cImZpZWxkTGFiZWwoKVwiXG4gICAgICAgICAgICAgIFtmaWVsZEtleV09XCJmaWVsZEtleSgpXCJcbiAgICAgICAgICAgICAgW2Nzc0RlZmF1bHRdPVwiKCRmaXJzdCA/IGNvbmZpZ0NzcygpPy5maXJzdCA6IGNvbmZpZ0NzcygpPy5vdGhlcikgfHwgJydcIlxuICAgICAgICAgICAgICBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICAgICAgICAgICAgW21vZGVdPVwibW9kZSgpXCJcbiAgICAgICAgICAgICAgW2lnbm9yZUNhbGN1bGF0b3JUYWJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtjaGFuZ2VWaWV3VGFiXT1cImNoYW5nZVZpZXdUYWJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlckNsaWNrSXRlbSgkZXZlbnQsIGl0ZW0pXCIgLz5cbiAgICAgICAgICAgIEBpZiAobW9kZSgpID09PSAnY2VudGVyLWhhcy1saW5lJyAmJiAhJGxhc3QpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctWzQwcHhdIGgtWzFweF0gYmctWyNlNmU3ZWFdXCI+PC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiXG4gICAgICBbY2xhc3MubWwtYXV0b109XCJkaXNwbGF5TW9yZUl0ZW0oKSAmJiAhdGFicygpLnZpZXdNb3JlSWdub3JlTWFyZ2luTGVmdFwiPlxuICAgICAgQGlmIChkaXNwbGF5TW9yZUl0ZW0oKSkge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXBvcG92ZXIgY2xhc3M9XCJ3LWZ1bGwgaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyXCJcbiAgICAgICAgICBbbW9kZV09XCInY2xpY2stdG9nZ2xlJ1wiXG4gICAgICAgICAgW2lnbm9yZUhpZGRlblBvcG92ZXJDb250ZW50V2hlbk1vdXNlTGVhdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJ7XG4gICAgICAgICAgICB6SW5kZXg6IHBvcG92ZXJTaG93TW9yZVRhYkl0ZW0oKT8uY29uZmlnPy56SW5kZXggfHwgMTAwMCxcbiAgICAgICAgICAgIG1heEhlaWdodDogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/Lm1heEhlaWdodCB8fCAyODcsXG4gICAgICAgICAgICBtYXhXaWR0aDogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/Lm1heFdpZHRoIHx8IDIwNDgsXG4gICAgICAgICAgICB3aWR0aDogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LndpZHRoIHx8IDI3NywgXG4gICAgICAgICAgICBkaXJlY3Rpb246IHBvcG92ZXJTaG93TW9yZVRhYkl0ZW0oKT8uY29uZmlnPy5kaXJlY3Rpb24gfHwgJ2JvdHRvbScsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LnRlbXBsYXRlIHx8IG1lbnVFbCxcbiAgICAgICAgICAgIHdoaXRlVGhlbWU6IHRydWUsXG4gICAgICAgICAgICBpZ25vcmVBcnJvdzogdHJ1ZSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8ucG9zaXRpb24gfHwgeyBtb2RlOiAnZW5kJywgZGlzdGFuY2U6IDAgfVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIChvdXRGdW5jdGlvbnNDb250cm9sKT1cImhhbmRsZXJQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoJGV2ZW50KVwiPlxuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b24gW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXRoaXJkJ1wiXG4gICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIidwLVs4cHhdJ1wiXG4gICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLW1vcmUtdmVydGljYWwgcm90YXRlLTkwIHRleHQtWzE2cHhdIG1yLTAnXCJcbiAgICAgICAgICAgIFtwb3BvdmVyXT1cIntjb25maWc6IHtjb250ZW50OiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8uY29udGVudH19XCJcbiAgICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCIgLz5cbiAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICNoZWFkZXJSaWdodEVsXG4gICAgICBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1yaWdodCB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyUmlnaHQgfHwgJycgfX1cIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImRpdi5saWJzLXVpLXRhYi1oZWFkZXItcmlnaHRcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgdG9wLTAgei0wIHctZnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXIge3sgY29uZmlnQ3NzKCk/LmhlYWRlciB8fCAnJyB9fSB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyIHx8ICcnIH19XCJcbiAgICAgIFtzdHlsZS5taW5IZWlnaHQucHhdPVwiaGVpZ2h0VGFiSXRlbSgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyLWNlbnRlciB7eyBjb25maWdDc3MoKT8uaGVhZGVyQ2VudGVyIHx8ICcnIH19IHt7IHRhYnMoKS5jbGFzc0luY2x1ZGVIZWFkZXJDZW50ZXIgfHwgJycgfX1cIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiB0YWJzKCkuaXRlbXMoKTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtdGFicy1pdGVtIGNsYXNzPVwiaC1mdWxsIHctZnVsbCB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSXRlbSB8fCAnJyB9fVwiXG4gICAgICAgICAgICBbdGFic109XCJ0YWJzKClcIlxuICAgICAgICAgICAgW3NpemVdPVwic2l6ZSgpXCJcbiAgICAgICAgICAgIFsoaXRlbSldPVwiaXRlbVwiXG4gICAgICAgICAgICBbc3RlcF09XCIkaW5kZXgrMVwiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVMYWJlbF09XCJkaXNhYmxlTGFiZWwoKVwiXG4gICAgICAgICAgICBba2V5U2VsZWN0ZWRdPVwia2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICBbZmllbGRMYWJlbF09XCJmaWVsZExhYmVsKClcIlxuICAgICAgICAgICAgW2ZpZWxkS2V5XT1cImZpZWxkS2V5KClcIlxuICAgICAgICAgICAgW2Nzc0RlZmF1bHRdPVwiKCRmaXJzdCA/IGNvbmZpZ0NzcygpPy5maXJzdCA6IGNvbmZpZ0NzcygpPy5vdGhlcikgfHwgJydcIlxuICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgICAgICAgICBbbW9kZV09XCJtb2RlKClcIlxuICAgICAgICAgICAgW2NoYW5nZVZpZXdUYWJdPVwiY2hhbmdlVmlld1RhYlwiXG4gICAgICAgICAgICBbaWdub3JlQ2FsY3VsYXRvclRhYl09XCJpZ25vcmVDYWxjdWxhdG9yVGFiKClcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZXJDbGlja0l0ZW0oJGV2ZW50LCBpdGVtKVwiIC8+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI21lbnVFbD5cbiAgPGxpYnNfdWktY29tcG9uZW50cy1saXN0IFtjb25maWddPVwidGFiTW9yZUxpc3RDb25maWcoKVwiXG4gICAgW21heEl0ZW1TaG93XT1cIjVcIlxuICAgIFtwYWRkaW5nTGVmdEl0ZW1dPVwidHJ1ZVwiXG4gICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0ZWRLZXkoJGV2ZW50KVwiIC8+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { escapeHtml, isNil } from "@libs-ui/utils";
|
|
2
|
+
export const tabMoreListConfig = (tabsService, translate, fieldKey, fieldLabel, tabs) => {
|
|
3
|
+
return {
|
|
4
|
+
type: 'text',
|
|
5
|
+
httpRequestData: {
|
|
6
|
+
serviceOther: tabsService,
|
|
7
|
+
functionName: 'listTabItemsMore',
|
|
8
|
+
argumentsValue: [tabs.items().filter(item => !item().specificDisplay).map(item => item())],
|
|
9
|
+
convertResponseData: (response) => {
|
|
10
|
+
console.log(response);
|
|
11
|
+
return response;
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
configTemplateText: {
|
|
15
|
+
fieldKey: fieldKey || 'key',
|
|
16
|
+
getClassItem: () => 'py-[4px]',
|
|
17
|
+
classRows: 'w-full',
|
|
18
|
+
rows: [{
|
|
19
|
+
classCols: 'flex items-center py-[8px]',
|
|
20
|
+
cols: [
|
|
21
|
+
{
|
|
22
|
+
getPopover: (item) => item.iconLeft ? { classInclude: 'flex', dataView: `<i class="${item.iconLeft} text-[16px] mr-[8px]"></i>` } : undefined
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
getValue: (item) => escapeHtml(translate.instant(item[fieldLabel] || ' '))
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
getPopover: (item) => item.popover ? { config: item.popover } : undefined
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
getPopover: (item) => item.iconRight ? { dataView: `<i class="${item.iconRight} text-[16px] mr-[8px]"></i>` } : undefined
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
getConfigBadge: (item) => {
|
|
35
|
+
if (isNil(item.count)) {
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
mode: item.modeCount || 'x+',
|
|
40
|
+
count: item.count,
|
|
41
|
+
maxCount: item.maxCount || 99,
|
|
42
|
+
classCircle: item.classCircle || 'libs-ui-font-h5r'
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
]
|
|
47
|
+
}]
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy90YWJzL3NyYy91dGlscy90YWJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFLbkQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxXQUE4QixFQUFFLFNBQTJCLEVBQUUsUUFBZ0IsRUFBRSxVQUFrQixFQUFFLElBQVcsRUFBdUIsRUFBRTtJQUN2SyxPQUFPO1FBQ0wsSUFBSSxFQUFFLE1BQU07UUFDWixlQUFlLEVBQUU7WUFDZixZQUFZLEVBQUUsV0FBVztZQUN6QixZQUFZLEVBQUUsa0JBQWtCO1lBQ2hDLGNBQWMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDMUYsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFdEIsT0FBTyxRQUFRLENBQUE7WUFDakIsQ0FBQztTQUNGO1FBQ0Qsa0JBQWtCLEVBQUU7WUFDbEIsUUFBUSxFQUFFLFFBQVEsSUFBSSxLQUFLO1lBQzNCLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVO1lBQzlCLFNBQVMsRUFBRSxRQUFRO1lBQ25CLElBQUksRUFBRSxDQUFDO29CQUNMLFNBQVMsRUFBRSw0QkFBNEI7b0JBQ3ZDLElBQUksRUFBRTt3QkFDSjs0QkFDRSxVQUFVLEVBQUUsQ0FBQyxJQUFjLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsYUFBYSxJQUFJLENBQUMsUUFBUSw2QkFBNkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO3lCQUN4Sjt3QkFDRDs0QkFDRSxRQUFRLEVBQUUsQ0FBQyxJQUFjLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQzt5QkFDckY7d0JBQ0Q7NEJBQ0UsVUFBVSxFQUFFLENBQUMsSUFBYyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVM7eUJBQ3BGO3dCQUNEOzRCQUNFLFVBQVUsRUFBRSxDQUFDLElBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsYUFBYSxJQUFJLENBQUMsU0FBUyw2QkFBNkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO3lCQUNwSTt3QkFDRDs0QkFDRSxjQUFjLEVBQUUsQ0FBQyxJQUFjLEVBQUUsRUFBRTtnQ0FDakMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0NBQ3RCLE9BQU8sU0FBUyxDQUFDO2dDQUNuQixDQUFDO2dDQUNELE9BQU87b0NBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSTtvQ0FDNUIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO29DQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFO29DQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsSUFBSSxrQkFBa0I7aUNBQ3BELENBQUM7NEJBQ0osQ0FBQzt5QkFDRjtxQkFDRjtpQkFDRixDQUFDO1NBQ0g7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUxpc3RWaWV3Q29uZmlnSXRlbSB9IGZyb20gXCJAbGlicy11aS9jb21wb25lbnRzLWxpc3RcIjtcbmltcG9ydCB7IGVzY2FwZUh0bWwsIGlzTmlsIH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IElUYWJJdGVtLCBJVGFicyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL3RhYi5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IExpYnNVaVRhYnNTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3RhYi5zZXJ2aWNlXCI7XG5cbmV4cG9ydCBjb25zdCB0YWJNb3JlTGlzdENvbmZpZyA9ICh0YWJzU2VydmljZTogTGlic1VpVGFic1NlcnZpY2UsIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgZmllbGRLZXk6IHN0cmluZywgZmllbGRMYWJlbDogc3RyaW5nLCB0YWJzOiBJVGFicyk6IElMaXN0Vmlld0NvbmZpZ0l0ZW0gPT4ge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICd0ZXh0JyxcbiAgICBodHRwUmVxdWVzdERhdGE6IHtcbiAgICAgIHNlcnZpY2VPdGhlcjogdGFic1NlcnZpY2UsXG4gICAgICBmdW5jdGlvbk5hbWU6ICdsaXN0VGFiSXRlbXNNb3JlJyxcbiAgICAgIGFyZ3VtZW50c1ZhbHVlOiBbdGFicy5pdGVtcygpLmZpbHRlcihpdGVtID0+ICFpdGVtKCkuc3BlY2lmaWNEaXNwbGF5KS5tYXAoaXRlbSA9PiBpdGVtKCkpXSxcbiAgICAgIGNvbnZlcnRSZXNwb25zZURhdGE6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICB9LFxuICAgIH0sXG4gICAgY29uZmlnVGVtcGxhdGVUZXh0OiB7XG4gICAgICBmaWVsZEtleTogZmllbGRLZXkgfHwgJ2tleScsXG4gICAgICBnZXRDbGFzc0l0ZW06ICgpID0+ICdweS1bNHB4XScsXG4gICAgICBjbGFzc1Jvd3M6ICd3LWZ1bGwnLFxuICAgICAgcm93czogW3tcbiAgICAgICAgY2xhc3NDb2xzOiAnZmxleCBpdGVtcy1jZW50ZXIgcHktWzhweF0nLFxuICAgICAgICBjb2xzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZ2V0UG9wb3ZlcjogKGl0ZW06IElUYWJJdGVtKSA9PiBpdGVtLmljb25MZWZ0ID8geyBjbGFzc0luY2x1ZGU6ICdmbGV4JywgZGF0YVZpZXc6IGA8aSBjbGFzcz1cIiR7aXRlbS5pY29uTGVmdH0gdGV4dC1bMTZweF0gbXItWzhweF1cIj48L2k+YCB9IDogdW5kZWZpbmVkXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBnZXRWYWx1ZTogKGl0ZW06IElUYWJJdGVtKSA9PiBlc2NhcGVIdG1sKHRyYW5zbGF0ZS5pbnN0YW50KGl0ZW1bZmllbGRMYWJlbF0gfHwgJyAnKSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGdldFBvcG92ZXI6IChpdGVtOiBJVGFiSXRlbSkgPT4gaXRlbS5wb3BvdmVyID8geyBjb25maWc6IGl0ZW0ucG9wb3ZlciB9IDogdW5kZWZpbmVkXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBnZXRQb3BvdmVyOiAoaXRlbTogSVRhYkl0ZW0pID0+IGl0ZW0uaWNvblJpZ2h0ID8geyBkYXRhVmlldzogYDxpIGNsYXNzPVwiJHtpdGVtLmljb25SaWdodH0gdGV4dC1bMTZweF0gbXItWzhweF1cIj48L2k+YCB9IDogdW5kZWZpbmVkXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBnZXRDb25maWdCYWRnZTogKGl0ZW06IElUYWJJdGVtKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpc05pbChpdGVtLmNvdW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtb2RlOiBpdGVtLm1vZGVDb3VudCB8fCAneCsnLFxuICAgICAgICAgICAgICAgIGNvdW50OiBpdGVtLmNvdW50LFxuICAgICAgICAgICAgICAgIG1heENvdW50OiBpdGVtLm1heENvdW50IHx8IDk5LFxuICAgICAgICAgICAgICAgIGNsYXNzQ2lyY2xlOiBpdGVtLmNsYXNzQ2lyY2xlIHx8ICdsaWJzLXVpLWZvbnQtaDVyJ1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfV1cbiAgICB9XG4gIH07XG59Il19
|