@libs-ui/components-tabs 0.2.10-6.2
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 +115 -0
- package/esm2022/libs-ui-components-tabs.mjs +5 -0
- package/esm2022/tabs.component.mjs +263 -0
- package/esm2022/utils/tabs.mjs +75 -0
- package/fesm2022/libs-ui-components-tabs.mjs +447 -0
- package/fesm2022/libs-ui-components-tabs.mjs.map +1 -0
- package/index.d.ts +2 -0
- package/interfaces/tab.interface.d.ts +81 -0
- package/item/item.component.d.ts +42 -0
- package/package.json +25 -0
- package/tabs.component.d.ts +59 -0
- package/utils/tabs.d.ts +4 -0
|
@@ -0,0 +1,263 @@
|
|
|
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 { convertObjectToSignal, 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 { tabMoreListConfig } from './utils/tabs';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
export class LibsUiComponentsTabsComponent {
|
|
14
|
+
/* PROPERTY */
|
|
15
|
+
itemsDisplay = signal([]);
|
|
16
|
+
displayMoreItem = signal(false);
|
|
17
|
+
tabMoreListConfig = computed(() => tabMoreListConfig(this.translate, this.fieldKey(), this.fieldLabel(), this.tabs(), this.disable()));
|
|
18
|
+
changeViewTab = new Subject();
|
|
19
|
+
groupName = signal(uuid());
|
|
20
|
+
stylesDragDropOverrideComputed = computed(() => this.updateStylesDragDropOverride());
|
|
21
|
+
popoverFunctionControlEvent = signal(undefined);
|
|
22
|
+
onDestroy = new Subject();
|
|
23
|
+
/* INPUT */
|
|
24
|
+
tabs = input.required();
|
|
25
|
+
keySelected = model.required();
|
|
26
|
+
mode = input('left');
|
|
27
|
+
fieldKey = input('key');
|
|
28
|
+
fieldLabel = input('label');
|
|
29
|
+
disable = input();
|
|
30
|
+
disableLabel = input();
|
|
31
|
+
heightTabItem = input(40);
|
|
32
|
+
ignoreCalculatorTab = input(false);
|
|
33
|
+
size = input('medium');
|
|
34
|
+
allowDragDropPosition = input();
|
|
35
|
+
zIndex = input();
|
|
36
|
+
configCss = model();
|
|
37
|
+
popoverShowMoreTabItem = input();
|
|
38
|
+
checkCanChangeTabSelected = input();
|
|
39
|
+
/* OUTPUT */
|
|
40
|
+
outKeySelected = output();
|
|
41
|
+
outFunctionsControl = output();
|
|
42
|
+
outDragTabChange = output();
|
|
43
|
+
outDisplayMoreItem = output();
|
|
44
|
+
outAction = output();
|
|
45
|
+
/* VIEW CHILD */
|
|
46
|
+
headerEl = viewChild.required('headerEl');
|
|
47
|
+
headerLeftEl = viewChild.required('headerLeftEl');
|
|
48
|
+
headerRightEl = viewChild.required('headerRightEl');
|
|
49
|
+
/* INJECT*/
|
|
50
|
+
translate = inject(TranslateService);
|
|
51
|
+
ngOnInit() {
|
|
52
|
+
this.updateTabsCssConfig();
|
|
53
|
+
this.outFunctionsControl.emit({
|
|
54
|
+
addTabsItem: this.addTabsItem.bind(this),
|
|
55
|
+
calculatorTabsItemsDisplay: this.calculatorTabsItemDisplay.bind(this),
|
|
56
|
+
selectedTabsItem: this.handlerSelectedTabsItem.bind(this)
|
|
57
|
+
});
|
|
58
|
+
if (this.mode() !== 'left' || this.ignoreCalculatorTab()) {
|
|
59
|
+
this.tabs().items().map(item => item.update(data => ({ ...data, specificDisplay: true })));
|
|
60
|
+
this.itemsDisplay.set(this.tabs().items().filter(item => item().specificDisplay));
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
fromEvent(window, 'resize').pipe(debounceTime(250), takeUntil(this.onDestroy)).subscribe(() => {
|
|
64
|
+
if (!this.tabs().items().length) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
this.displayMoreItem.set(false);
|
|
68
|
+
this.calculatorTabsItemDisplay();
|
|
69
|
+
});
|
|
70
|
+
this.changeViewTab.pipe(debounceTime(20), takeUntil(this.onDestroy)).subscribe(() => this.calculatorTabsItemDisplay());
|
|
71
|
+
}
|
|
72
|
+
/* FUNCTIONS */
|
|
73
|
+
updateTabsCssConfig() {
|
|
74
|
+
if (this.configCss()) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
switch (this.mode()) {
|
|
78
|
+
case 'left':
|
|
79
|
+
this.configCss.set({
|
|
80
|
+
first: 'ml-[20px] mr-[16px]',
|
|
81
|
+
other: 'ml-[20px] mr-[16px]'
|
|
82
|
+
});
|
|
83
|
+
break;
|
|
84
|
+
case 'center':
|
|
85
|
+
this.configCss.set({
|
|
86
|
+
first: 'px-[12px] ml-[18px] mr-[18px]',
|
|
87
|
+
other: 'px-[12px] mx-[18px]',
|
|
88
|
+
header: 'flex justify-center'
|
|
89
|
+
});
|
|
90
|
+
break;
|
|
91
|
+
case 'center-has-line':
|
|
92
|
+
this.configCss.set({
|
|
93
|
+
first: 'px-[16px]',
|
|
94
|
+
other: 'px-[16px]',
|
|
95
|
+
headerCenter: 'items-center'
|
|
96
|
+
});
|
|
97
|
+
break;
|
|
98
|
+
case 'space-between':
|
|
99
|
+
this.configCss.set({
|
|
100
|
+
first: 'mx-auto',
|
|
101
|
+
other: 'mx-auto',
|
|
102
|
+
headerCenter: 'w-full'
|
|
103
|
+
});
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
updateStylesDragDropOverride() {
|
|
108
|
+
if (this.allowDragDropPosition()) {
|
|
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 handlerSelectedTabsItem(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; } }, convertObjectToSignal(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 handlerAction(event) {
|
|
195
|
+
this.outAction.emit(event);
|
|
196
|
+
}
|
|
197
|
+
async addTabsItem(item, selected = true, addFirst) {
|
|
198
|
+
const items = this.tabs().items;
|
|
199
|
+
items.update(items => {
|
|
200
|
+
if (addFirst) {
|
|
201
|
+
return [item, ...items];
|
|
202
|
+
}
|
|
203
|
+
return [...items, item];
|
|
204
|
+
});
|
|
205
|
+
if (selected) {
|
|
206
|
+
this.handlerClickItem({ stopPropagation: () => { return; } }, item);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
async calculatorTabsItemDisplay() {
|
|
210
|
+
let items = this.tabs().items();
|
|
211
|
+
const indexItemSelected = items.findIndex(item => item()[this.fieldKey()] === this.keySelected());
|
|
212
|
+
if (indexItemSelected < 0) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
this.displayMoreItem.set(false);
|
|
216
|
+
let displayMoreItem = false;
|
|
217
|
+
const headerWidth = this.headerEl().nativeElement.clientWidth || 0;
|
|
218
|
+
const itemSelected = items[indexItemSelected];
|
|
219
|
+
const itemSelectedWidth = itemSelected().specificWidth;
|
|
220
|
+
let totalWidthItemsDisplay = (this.headerLeftEl().nativeElement.clientWidth || 0) + (this.headerRightEl().nativeElement.clientWidth || 0) + 32;
|
|
221
|
+
items.forEach((item, index) => {
|
|
222
|
+
if (!item().specificWidth) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
item.update(data => ({ ...data, specificDisplay: false }));
|
|
226
|
+
const itemWidth = item().specificWidth || 0;
|
|
227
|
+
const width = totalWidthItemsDisplay + itemWidth + (index < indexItemSelected ? itemSelectedWidth : 0);
|
|
228
|
+
totalWidthItemsDisplay += itemWidth;
|
|
229
|
+
if (width > headerWidth) {
|
|
230
|
+
displayMoreItem = true;
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
item.update(data => ({ ...data, specificDisplay: true }));
|
|
234
|
+
});
|
|
235
|
+
itemSelected.update(data => ({ ...data, specificDisplay: true }));
|
|
236
|
+
const display = items.filter(item => item().specificDisplay === true);
|
|
237
|
+
const notDisplay = items.filter(item => item().specificDisplay === false);
|
|
238
|
+
items = display.concat(notDisplay);
|
|
239
|
+
items.forEach((item, index) => item.update(data => ({ ...data, order: index })));
|
|
240
|
+
this.tabs().items.set(items.sort((prev, next) => (prev().order || 0) - (next().order || 0)));
|
|
241
|
+
this.displayMoreItem.set(displayMoreItem);
|
|
242
|
+
this.outDisplayMoreItem.emit(this.displayMoreItem());
|
|
243
|
+
this.itemsDisplay.set(this.tabs().items().filter(item => item().specificDisplay));
|
|
244
|
+
}
|
|
245
|
+
ngOnDestroy() {
|
|
246
|
+
this.onDestroy.next();
|
|
247
|
+
this.onDestroy.complete();
|
|
248
|
+
}
|
|
249
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
250
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: LibsUiComponentsTabsComponent, isStandalone: true, selector: "libs_ui-components-tabs", inputs: { tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: true, transformFunction: null }, keySelected: { classPropertyName: "keySelected", publicName: "keySelected", isSignal: true, isRequired: true, transformFunction: null }, 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 }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, disableLabel: { classPropertyName: "disableLabel", publicName: "disableLabel", isSignal: true, isRequired: false, 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 }, 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", outAction: "outAction" }, 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 (outAction)=\"handlerAction($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 }\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: ["debugId", "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", "outAction"] }, { kind: "component", type: LibsUiComponentsListComponent, selector: "libs_ui-components-list", inputs: ["hiddenInputSearch", "dropdownTabKeyActive", "keySearch", "itemChangeUnSelect", "paddingLeftItem", "config", "autoSelectedFirstItemCallOutsideBefore", "isSearchOnline", "disable", "disableLabel", "labelConfig", "searchConfig", "searchPadding", "dividerClassInclude", "hasDivider", "buttonsOther", "hasButtonUnSelectOption", "clickExactly", "backgroundListCustom", "maxItemShow", "keySelected", "multiKeySelected", "keysDisableItem", "keysHiddenItem", "focusInputSearch", "skipFocusInputWhenKeySearchStoreUndefined", "functionGetItemsAutoAddList", "validRequired", "showValidateBottom", "zIndex", "loadingIconSize", "templateRefSearchNoData", "resetKeyWhenSelectAllKeyDropdown", "ignoreClassDisableDefaultWhenUseKeysDisableItem"], outputs: ["outSelectKey", "outSelectMultiKey", "outUnSelectMultiKey", "outClickButtonOther", "outFieldKey", "outChangeView", "outLoading", "outFunctionsControl", "outChangStageFlagMousePopover", "outLoadItemsComplete"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
251
|
+
}
|
|
252
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LibsUiComponentsTabsComponent, decorators: [{
|
|
253
|
+
type: Component,
|
|
254
|
+
args: [{ selector: 'libs_ui-components-tabs', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
255
|
+
LibsUiComponentsDragContainerDirective,
|
|
256
|
+
LibsUiDragItemDirective,
|
|
257
|
+
LibsUiComponentsPopoverComponent,
|
|
258
|
+
LibsUiComponentsButtonsButtonComponent,
|
|
259
|
+
LibsUiComponentsTabsItemComponent,
|
|
260
|
+
LibsUiComponentsListComponent
|
|
261
|
+
], 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 (outAction)=\"handlerAction($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 }\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"] }]
|
|
262
|
+
}] });
|
|
263
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvdGFicy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvdGFicy9zcmMvdGFicy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQzdLLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBUyxzQ0FBc0MsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZILE9BQU8sRUFBb0IsNkJBQTZCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRixPQUFPLEVBQTBDLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFrQmpELE1BQU0sT0FBTyw2QkFBNkI7SUFFeEMsY0FBYztJQUNKLFlBQVksR0FBRyxNQUFNLENBQW1D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Q3ZCLGdDQUFnQyxxZUFDaEMsc0NBQXNDLGloQkFDdEMsaUNBQWlDLHFTQUNqQyw2QkFBNkI7OzRGQUdwQiw2QkFBNkI7a0JBaEJ6QyxTQUFTOytCQUVFLHlCQUF5QixjQUd2QixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEM7d0JBQ1Asc0NBQXNDO3dCQUN0Qyx1QkFBdUI7d0JBQ3ZCLGdDQUFnQzt3QkFDaEMsc0NBQXNDO3dCQUN0QyxpQ0FBaUM7d0JBQ2pDLDZCQUE2QjtxQkFDOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgbW9kZWwsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgdmlld0NoaWxkLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uJztcbmltcG9ydCB7IElEcm9wLCBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZSwgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWRyYWctZHJvcCc7XG5pbXBvcnQgeyBJTGlzdERhdGFFbWl0S2V5LCBMaWJzVWlDb21wb25lbnRzTGlzdENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGlzdCc7XG5pbXBvcnQgeyBJUG9wb3ZlciwgSVBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCwgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXBvcG92ZXInO1xuaW1wb3J0IHsgY29udmVydE9iamVjdFRvU2lnbmFsLCBpc05pbCwgdXVpZCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJVGFiQ3NzQ29uZmlnLCBJVGFicywgSVRhYnNGdW5jdGlvbkNvbnRyb2xFdmVudCwgSVRhYnNJdGVtLCBJVGFic0l0ZW1FdmVudCwgVFlQRV9UQUJfTU9ERSB9IGZyb20gJy4vaW50ZXJmYWNlcy90YWIuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNUYWJzSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vaXRlbS9pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyB0YWJNb3JlTGlzdENvbmZpZyB9IGZyb20gJy4vdXRpbHMvdGFicyc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy10YWJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYnMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgTGlic1VpQ29tcG9uZW50c0RyYWdDb250YWluZXJEaXJlY3RpdmUsXG4gICAgTGlic1VpRHJhZ0l0ZW1EaXJlY3RpdmUsXG4gICAgTGlic1VpQ29tcG9uZW50c1BvcG92ZXJDb21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c0J1dHRvbnNCdXR0b25Db21wb25lbnQsXG4gICAgTGlic1VpQ29tcG9uZW50c1RhYnNJdGVtQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNMaXN0Q29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c1RhYnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgLyogUFJPUEVSVFkgKi9cbiAgcHJvdGVjdGVkIGl0ZW1zRGlzcGxheSA9IHNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxJVGFic0l0ZW0+Pj4oW10pO1xuICBwcm90ZWN0ZWQgZGlzcGxheU1vcmVJdGVtID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIHRhYk1vcmVMaXN0Q29uZmlnID0gY29tcHV0ZWQoKCkgPT4gdGFiTW9yZUxpc3RDb25maWcodGhpcy50cmFuc2xhdGUsIHRoaXMuZmllbGRLZXkoKSwgdGhpcy5maWVsZExhYmVsKCksIHRoaXMudGFicygpLCB0aGlzLmRpc2FibGUoKSkpO1xuICBwcm90ZWN0ZWQgY2hhbmdlVmlld1RhYiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByb3RlY3RlZCBncm91cE5hbWUgPSBzaWduYWw8c3RyaW5nPih1dWlkKCkpO1xuICBwcm90ZWN0ZWQgc3R5bGVzRHJhZ0Ryb3BPdmVycmlkZUNvbXB1dGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy51cGRhdGVTdHlsZXNEcmFnRHJvcE92ZXJyaWRlKCkpO1xuXG4gIHByaXZhdGUgcG9wb3ZlckZ1bmN0aW9uQ29udHJvbEV2ZW50ID0gc2lnbmFsPElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKiBJTlBVVCAqL1xuICByZWFkb25seSB0YWJzID0gaW5wdXQucmVxdWlyZWQ8SVRhYnM+KCk7XG4gIHJlYWRvbmx5IGtleVNlbGVjdGVkID0gbW9kZWwucmVxdWlyZWQ8c3RyaW5nPigpO1xuICByZWFkb25seSBtb2RlID0gaW5wdXQ8VFlQRV9UQUJfTU9ERT4oJ2xlZnQnKTtcbiAgcmVhZG9ubHkgZmllbGRLZXkgPSBpbnB1dDxzdHJpbmc+KCdrZXknKTtcbiAgcmVhZG9ubHkgZmllbGRMYWJlbCA9IGlucHV0PHN0cmluZz4oJ2xhYmVsJyk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXNhYmxlTGFiZWwgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBoZWlnaHRUYWJJdGVtID0gaW5wdXQ8bnVtYmVyPig0MCk7XG4gIHJlYWRvbmx5IGlnbm9yZUNhbGN1bGF0b3JUYWIgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IHNpemUgPSBpbnB1dDwnbGFuZ2VyJyB8ICdtZWRpdW0nPignbWVkaXVtJyk7XG4gIHJlYWRvbmx5IGFsbG93RHJhZ0Ryb3BQb3NpdGlvbiA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IHpJbmRleCA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgY29uZmlnQ3NzID0gbW9kZWw8SVRhYkNzc0NvbmZpZz4oKTtcbiAgcmVhZG9ubHkgcG9wb3ZlclNob3dNb3JlVGFiSXRlbSA9IGlucHV0PElQb3BvdmVyPigpO1xuICByZWFkb25seSBjaGVja0NhbkNoYW5nZVRhYlNlbGVjdGVkID0gaW5wdXQ8KCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4+KCk7XG5cbiAgLyogT1VUUFVUICovXG4gIHJlYWRvbmx5IG91dEtleVNlbGVjdGVkID0gb3V0cHV0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJVGFic0Z1bmN0aW9uQ29udHJvbEV2ZW50PigpO1xuICByZWFkb25seSBvdXREcmFnVGFiQ2hhbmdlID0gb3V0cHV0PHZvaWQ+KCk7XG4gIHJlYWRvbmx5IG91dERpc3BsYXlNb3JlSXRlbSA9IG91dHB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBvdXRBY3Rpb24gPSBvdXRwdXQ8SVRhYnNJdGVtRXZlbnQ+KCk7XG5cbiAgLyogVklFVyBDSElMRCAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlckVsID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY+KCdoZWFkZXJFbCcpO1xuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlckxlZnRFbCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaGVhZGVyTGVmdEVsJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVyUmlnaHRFbCA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPignaGVhZGVyUmlnaHRFbCcpO1xuXG4gIC8qIElOSkVDVCovXG4gIHByaXZhdGUgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudXBkYXRlVGFic0Nzc0NvbmZpZygpO1xuICAgIHRoaXMub3V0RnVuY3Rpb25zQ29udHJvbC5lbWl0KHtcbiAgICAgIGFkZFRhYnNJdGVtOiB0aGlzLmFkZFRhYnNJdGVtLmJpbmQodGhpcyksXG4gICAgICBjYWxjdWxhdG9yVGFic0l0ZW1zRGlzcGxheTogdGhpcy5jYWxjdWxhdG9yVGFic0l0ZW1EaXNwbGF5LmJpbmQodGhpcyksXG4gICAgICBzZWxlY3RlZFRhYnNJdGVtOiB0aGlzLmhhbmRsZXJTZWxlY3RlZFRhYnNJdGVtLmJpbmQodGhpcylcbiAgICB9KTtcbiAgICBpZiAodGhpcy5tb2RlKCkgIT09ICdsZWZ0JyB8fCB0aGlzLmlnbm9yZUNhbGN1bGF0b3JUYWIoKSkge1xuICAgICAgdGhpcy50YWJzKCkuaXRlbXMoKS5tYXAoaXRlbSA9PiBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIHNwZWNpZmljRGlzcGxheTogdHJ1ZSB9KSkpO1xuICAgICAgdGhpcy5pdGVtc0Rpc3BsYXkuc2V0KHRoaXMudGFicygpLml0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gaXRlbSgpLnNwZWNpZmljRGlzcGxheSkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJykucGlwZShkZWJvdW5jZVRpbWUoMjUwKSwgdGFrZVVudGlsKHRoaXMub25EZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy50YWJzKCkuaXRlbXMoKS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5kaXNwbGF5TW9yZUl0ZW0uc2V0KGZhbHNlKTtcbiAgICAgIHRoaXMuY2FsY3VsYXRvclRhYnNJdGVtRGlzcGxheSgpO1xuICAgIH0pO1xuICAgIHRoaXMuY2hhbmdlVmlld1RhYi5waXBlKGRlYm91bmNlVGltZSgyMCksIHRha2VVbnRpbCh0aGlzLm9uRGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNhbGN1bGF0b3JUYWJzSXRlbURpc3BsYXkoKSk7XG4gIH1cblxuICAvKiBGVU5DVElPTlMgKi9cbiAgcHJpdmF0ZSB1cGRhdGVUYWJzQ3NzQ29uZmlnKCkge1xuICAgIGlmICh0aGlzLmNvbmZpZ0NzcygpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5tb2RlKCkpIHtcbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICB0aGlzLmNvbmZpZ0Nzcy5zZXQoe1xuICAgICAgICAgIGZpcnN0OiAnbWwtWzIwcHhdIG1yLVsxNnB4XScsXG4gICAgICAgICAgb3RoZXI6ICdtbC1bMjBweF0gbXItWzE2cHhdJ1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICB0aGlzLmNvbmZpZ0Nzcy5zZXQoe1xuICAgICAgICAgIGZpcnN0OiAncHgtWzEycHhdIG1sLVsxOHB4XSBtci1bMThweF0nLFxuICAgICAgICAgIG90aGVyOiAncHgtWzEycHhdIG14LVsxOHB4XScsXG4gICAgICAgICAgaGVhZGVyOiAnZmxleCBqdXN0aWZ5LWNlbnRlcidcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY2VudGVyLWhhcy1saW5lJzpcbiAgICAgICAgdGhpcy5jb25maWdDc3Muc2V0KHtcbiAgICAgICAgICBmaXJzdDogJ3B4LVsxNnB4XScsXG4gICAgICAgICAgb3RoZXI6ICdweC1bMTZweF0nLFxuICAgICAgICAgIGhlYWRlckNlbnRlcjogJ2l0ZW1zLWNlbnRlcidcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3BhY2UtYmV0d2Vlbic6XG4gICAgICAgIHRoaXMuY29uZmlnQ3NzLnNldCh7XG4gICAgICAgICAgZmlyc3Q6ICdteC1hdXRvJyxcbiAgICAgICAgICBvdGhlcjogJ214LWF1dG8nLFxuICAgICAgICAgIGhlYWRlckNlbnRlcjogJ3ctZnVsbCdcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3R5bGVzRHJhZ0Ryb3BPdmVycmlkZSgpIHtcbiAgICBpZiAodGhpcy5hbGxvd0RyYWdEcm9wUG9zaXRpb24oKSkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0tcGxhY2Vob2xkZXInLFxuICAgICAgICAgIHN0eWxlczogJydcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ2xpYnMtdWktZHJhZy1kcm9wLWl0ZW0nLFxuICAgICAgICAgIHN0eWxlczogJ2N1cnNvcjogbW92ZTsnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtLWRyYWdnaW5nJyxcbiAgICAgICAgICBzdHlsZXM6ICdjdXJzb3I6IG1vdmU7IGJhY2tncm91bmQ6ICNkZGRkZGQ7J1xuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6ICdsaWJzLXVpLWRyYWctZHJvcC1pdGVtJyxcbiAgICAgICAgc3R5bGVzOiAnJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY2xhc3NOYW1lOiAnbGlicy11aS1kcmFnLWRyb3AtaXRlbS1kaXNhYmxlJyxcbiAgICAgICAgc3R5bGVzOiAnJ1xuICAgICAgfVxuICAgIF1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVyRHJvcENvbnRhaW5lcihldmVudDogSURyb3ApIHtcbiAgICBjb25zdCB7IGl0ZW1EcmFnSW5mbyB9ID0gZXZlbnQ7XG4gICAgaWYgKCFpdGVtRHJhZ0luZm8pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnRhYnMoKS5pdGVtcztcbiAgICBjb25zdCB7IGluZGV4RHJhZywgaW5kZXhEcm9wIH0gPSBpdGVtRHJhZ0luZm87XG4gICAgaWYgKGlzTmlsKGluZGV4RHJhZykgfHwgaXNOaWwoaW5kZXhEcm9wKSB8fCBpbmRleERyb3AgPT09IGluZGV4RHJhZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpdGVtRHJhZyA9IGl0ZW1zKClbaW5kZXhEcmFnIGFzIG51bWJlcl07XG4gICAgaXRlbXMudXBkYXRlKGl0ZW1zID0+IHtcbiAgICAgIGl0ZW1zLnNwbGljZShpbmRleERyYWcgYXMgbnVtYmVyLCAxKTtcbiAgICAgIGl0ZW1zLnNwbGljZShpbmRleERyb3AgYXMgbnVtYmVyLCAwLCBpdGVtRHJhZyk7XG4gICAgICByZXR1cm4gWy4uLml0ZW1zXTtcbiAgICB9KTtcbiAgICB0aGlzLm91dERyYWdUYWJDaGFuZ2UuZW1pdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoZXZlbnQ6IElQb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQpIHtcbiAgICB0aGlzLnBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudC5zZXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVyU2VsZWN0ZWRUYWJzSXRlbShrZXk6IHN0cmluZywgcmVzZXREaXNhYmxlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGl0ZW1TZWxlY3RlZCA9IHRoaXMudGFicygpLml0ZW1zKCkuZmluZChpdGVtID0+IGl0ZW0oKVt0aGlzLmZpZWxkS2V5KCldID09PSBrZXkpO1xuICAgIGlmICghaXRlbVNlbGVjdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyZXNldERpc2FibGUpIHtcbiAgICAgIGl0ZW1TZWxlY3RlZC51cGRhdGUoaXRlbSA9PiAoeyAuLi5pdGVtLCBkaXNhYmxlOiBmYWxzZSB9KSk7XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlckNsaWNrSXRlbSh7IHN0b3BQcm9wYWdhdGlvbjogKCkgPT4geyByZXR1cm4gfSB9IGFzIEV2ZW50LCBpdGVtU2VsZWN0ZWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJTZWxlY3RlZEtleShldmVudDogSUxpc3REYXRhRW1pdEtleSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVyQ2xpY2tJdGVtKHsgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB7IHJldHVybiB9IH0gYXMgRXZlbnQsIGNvbnZlcnRPYmplY3RUb1NpZ25hbChldmVudC5pdGVtKSk7XG4gICAgdGhpcy5vdXREcmFnVGFiQ2hhbmdlLmVtaXQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQ2xpY2tJdGVtKGV2ZW50OiBFdmVudCwgaXRlbTogV3JpdGFibGVTaWduYWw8SVRhYnNJdGVtPikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChpdGVtKCkuZGlzYWJsZSB8fCB0aGlzLmRpc2FibGUoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaGVja0NhbkNoYW5nZVRhYlNlbGVjdGVkID0gdGhpcy5jaGVja0NhbkNoYW5nZVRhYlNlbGVjdGVkKCk7XG4gICAgaWYgKGNoZWNrQ2FuQ2hhbmdlVGFiU2VsZWN0ZWQpIHtcbiAgICAgIGNvbnN0IHN0YXRlID0gYXdhaXQgY2hlY2tDYW5DaGFuZ2VUYWJTZWxlY3RlZCgpO1xuICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlSXRlbVNlbGVjdGVkKGl0ZW0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZUl0ZW1TZWxlY3RlZChpdGVtKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlSXRlbVNlbGVjdGVkKGl0ZW06IFdyaXRhYmxlU2lnbmFsPElUYWJzSXRlbT4pIHtcbiAgICB0aGlzLmtleVNlbGVjdGVkLnNldChpdGVtKClbdGhpcy5maWVsZEtleSgpXSk7XG4gICAgdGhpcy5vdXRLZXlTZWxlY3RlZC5lbWl0KHRoaXMua2V5U2VsZWN0ZWQoKSk7XG4gICAgdGhpcy5wb3BvdmVyRnVuY3Rpb25Db250cm9sRXZlbnQoKT8ucmVtb3ZlUG9wb3Zlck92ZXJsYXkoKTtcbiAgICB0aGlzLmNhbGN1bGF0b3JUYWJzSXRlbURpc3BsYXkoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyQWN0aW9uKGV2ZW50OiBJVGFic0l0ZW1FdmVudCkge1xuICAgIHRoaXMub3V0QWN0aW9uLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGRUYWJzSXRlbShpdGVtOiBXcml0YWJsZVNpZ25hbDxJVGFic0l0ZW0+LCBzZWxlY3RlZCA9IHRydWUsIGFkZEZpcnN0PzogYm9vbGVhbikge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy50YWJzKCkuaXRlbXM7XG4gICAgaXRlbXMudXBkYXRlKGl0ZW1zID0+IHtcbiAgICAgIGlmIChhZGRGaXJzdCkge1xuICAgICAgICByZXR1cm4gW2l0ZW0sIC4uLml0ZW1zXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBbLi4uaXRlbXMsIGl0ZW1dO1xuICAgIH0pO1xuICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgdGhpcy5oYW5kbGVyQ2xpY2tJdGVtKHsgc3RvcFByb3BhZ2F0aW9uOiAoKSA9PiB7IHJldHVybiB9IH0gYXMgRXZlbnQsIGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjYWxjdWxhdG9yVGFic0l0ZW1EaXNwbGF5KCkge1xuICAgIGxldCBpdGVtcyA9IHRoaXMudGFicygpLml0ZW1zKCk7XG4gICAgY29uc3QgaW5kZXhJdGVtU2VsZWN0ZWQgPSBpdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtKClbdGhpcy5maWVsZEtleSgpXSA9PT0gdGhpcy5rZXlTZWxlY3RlZCgpKTtcbiAgICBpZiAoaW5kZXhJdGVtU2VsZWN0ZWQgPCAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGlzcGxheU1vcmVJdGVtLnNldChmYWxzZSk7XG4gICAgbGV0IGRpc3BsYXlNb3JlSXRlbSA9IGZhbHNlO1xuICAgIGNvbnN0IGhlYWRlcldpZHRoID0gdGhpcy5oZWFkZXJFbCgpLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggfHwgMDtcbiAgICBjb25zdCBpdGVtU2VsZWN0ZWQgPSBpdGVtc1tpbmRleEl0ZW1TZWxlY3RlZF07XG4gICAgY29uc3QgaXRlbVNlbGVjdGVkV2lkdGggPSBpdGVtU2VsZWN0ZWQoKS5zcGVjaWZpY1dpZHRoO1xuICAgIGxldCB0b3RhbFdpZHRoSXRlbXNEaXNwbGF5ID0gKHRoaXMuaGVhZGVyTGVmdEVsKCkubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCB8fCAwKSArICh0aGlzLmhlYWRlclJpZ2h0RWwoKS5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoIHx8IDApICsgMzI7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIGlmICghaXRlbSgpLnNwZWNpZmljV2lkdGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaXRlbS51cGRhdGUoZGF0YSA9PiAoeyAuLi5kYXRhLCBzcGVjaWZpY0Rpc3BsYXk6IGZhbHNlIH0pKTtcbiAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IGl0ZW0oKS5zcGVjaWZpY1dpZHRoIHx8IDA7XG4gICAgICBjb25zdCB3aWR0aCA9IHRvdGFsV2lkdGhJdGVtc0Rpc3BsYXkgKyBpdGVtV2lkdGggKyAoaW5kZXggPCBpbmRleEl0ZW1TZWxlY3RlZCA/IGl0ZW1TZWxlY3RlZFdpZHRoIDogMCk7XG4gICAgICB0b3RhbFdpZHRoSXRlbXNEaXNwbGF5ICs9IGl0ZW1XaWR0aDtcbiAgICAgIGlmICh3aWR0aCA+IGhlYWRlcldpZHRoKSB7XG4gICAgICAgIGRpc3BsYXlNb3JlSXRlbSA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGl0ZW0udXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNEaXNwbGF5OiB0cnVlIH0pKTtcbiAgICB9KTtcbiAgICBpdGVtU2VsZWN0ZWQudXBkYXRlKGRhdGEgPT4gKHsgLi4uZGF0YSwgc3BlY2lmaWNEaXNwbGF5OiB0cnVlIH0pKTtcbiAgICBjb25zdCBkaXNwbGF5ID0gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSgpLnNwZWNpZmljRGlzcGxheSA9PT0gdHJ1ZSk7XG4gICAgY29uc3Qgbm90RGlzcGxheSA9IGl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0oKS5zcGVjaWZpY0Rpc3BsYXkgPT09IGZhbHNlKTtcbiAgICBpdGVtcyA9IGRpc3BsYXkuY29uY2F0KG5vdERpc3BsYXkpO1xuICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiBpdGVtLnVwZGF0ZShkYXRhID0+ICh7IC4uLmRhdGEsIG9yZGVyOiBpbmRleCB9KSkpO1xuICAgIHRoaXMudGFicygpLml0ZW1zLnNldChpdGVtcy5zb3J0KChwcmV2LCBuZXh0KSA9PiAocHJldigpLm9yZGVyIHx8IDApIC0gKG5leHQoKS5vcmRlciB8fCAwKSkpO1xuICAgIHRoaXMuZGlzcGxheU1vcmVJdGVtLnNldChkaXNwbGF5TW9yZUl0ZW0pO1xuICAgIHRoaXMub3V0RGlzcGxheU1vcmVJdGVtLmVtaXQodGhpcy5kaXNwbGF5TW9yZUl0ZW0oKSk7XG4gICAgdGhpcy5pdGVtc0Rpc3BsYXkuc2V0KHRoaXMudGFicygpLml0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gaXRlbSgpLnNwZWNpZmljRGlzcGxheSkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMub25EZXN0cm95LmNvbXBsZXRlKCk7XG4gIH1cblxufSIsIjxkaXYgY2xhc3M9XCJsaWJzLXVpLXRhYlwiPlxuICA8ZGl2ICNoZWFkZXJFbFxuICAgIGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyIHotWzFdIHt7IGNvbmZpZ0NzcygpPy5oZWFkZXIgfHwgJycgfX0ge3sgdGFicygpLmNsYXNzSW5jbHVkZUhlYWRlciB8fCAnJyB9fVwiXG4gICAgW3N0eWxlLm1pbkhlaWdodC5weF09XCJoZWlnaHRUYWJJdGVtKClcIj5cbiAgICA8ZGl2ICNoZWFkZXJMZWZ0RWxcbiAgICAgIGNsYXNzPSdsaWJzLXVpLXRhYi1oZWFkZXItbGVmdCc+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJkaXYubGlicy11aS10YWItaGVhZGVyLWxlZnRcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1jZW50ZXIge3sgY29uZmlnQ3NzKCk/LmhlYWRlckNlbnRlciB8fCAnJyB9fSB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyQ2VudGVyIHx8ICcnIH19XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiIWZsZXggdy1mdWxsXCJcbiAgICAgICAgI2VsZW1lbnRDb250YWluZXJFbFxuICAgICAgICBMaWJzVWlDb21wb25lbnRzRHJhZ0NvbnRhaW5lckRpcmVjdGl2ZVxuICAgICAgICBbc3R5bGVzT3ZlcnJpZGVdPVwic3R5bGVzRHJhZ0Ryb3BPdmVycmlkZUNvbXB1dGVkKClcIlxuICAgICAgICBbZ3JvdXBOYW1lXT1cImdyb3VwTmFtZSgpXCJcbiAgICAgICAgWyhpdGVtcyldPVwiaXRlbXNEaXNwbGF5XCJcbiAgICAgICAgW2RpcmVjdGlvbkRyYWddPVwiJ2hvcml6b250YWwnXCJcbiAgICAgICAgW2Rpc2FibGVEcmFnQ29udGFpbmVyXT1cIiFhbGxvd0RyYWdEcm9wUG9zaXRpb24oKVwiXG4gICAgICAgIFthY2NlcHREcmFnU2FtZUdyb3VwXT1cImFsbG93RHJhZ0Ryb3BQb3NpdGlvbigpXCJcbiAgICAgICAgKG91dERyb3BwZWRDb250YWluZXIpPVwiaGFuZGxlckRyb3BDb250YWluZXIoJGV2ZW50KVwiPlxuICAgICAgICBAZm9yIChpdGVtIG9mIGl0ZW1zRGlzcGxheSgpOyB0cmFjayBpdGVtKSB7XG4gICAgICAgICAgPGRpdiBMaWJzVWlEcmFnSXRlbURpcmVjdGl2ZVxuICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpIHx8ICFhbGxvd0RyYWdEcm9wUG9zaXRpb24oKVwiXG4gICAgICAgICAgICBbZ3JvdXBOYW1lXT1cImdyb3VwTmFtZSgpXCJcbiAgICAgICAgICAgIFtlbGVtZW50Q29udGFpbmVyXT1cImVsZW1lbnRDb250YWluZXJFbFwiXG4gICAgICAgICAgICBbZHJhZ0JvdW5kYXJ5XT1cInRydWVcIlxuICAgICAgICAgICAgW2RyYWdCb3VuZGFyeUFjY2VwdE1vdXNlTGVhdmVDb250YWluZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGxpYnMtdWktdGFiLWl0ZW0tY29udGFpbmVyXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJtb2RlKCkgPT09ICdzcGFjZS1iZXR3ZWVuJyA/IChlbGVtZW50Q29udGFpbmVyRWwuY2xpZW50V2lkdGgvKGl0ZW1zRGlzcGxheSgpLmxlbmd0aCB8fCAxKSkgOiB1bmRlZmluZWRcIlxuICAgICAgICAgICAgW2NsYXNzLmZsZXhdPVwibW9kZSgpID09PSAnY2VudGVyLWhhcy1saW5lJ1wiXG4gICAgICAgICAgICBbY2xhc3MuaXRlbXMtY2VudGVyXT1cIm1vZGUoKSA9PT0gJ2NlbnRlci1oYXMtbGluZSdcIj5cbiAgICAgICAgICAgIEBpZiAoYWxsb3dEcmFnRHJvcFBvc2l0aW9uKCkgJiYgIWRpc2FibGUoKSkge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxpYnMtdWktaWNvbi1hcnJhbmdlIHRleHQtWyM5Y2EyYWRdIGFic29sdXRlIHRvcC1bMTRweF0gbGVmdC1bNHB4XVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtdGFicy1pdGVtIGNsYXNzPVwiaC1mdWxsIHctZnVsbCAge3sgdGFicygpLmNsYXNzSW5jbHVkZUl0ZW0gfHwgJycgfX1cIlxuICAgICAgICAgICAgICBbdGFic109XCJ0YWJzKClcIlxuICAgICAgICAgICAgICBbc2l6ZV09XCJzaXplKClcIlxuICAgICAgICAgICAgICBbKGl0ZW0pXT1cIml0ZW1cIlxuICAgICAgICAgICAgICBbc3RlcF09XCIkaW5kZXgrMVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlXT1cImRpc2FibGUoKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlTGFiZWxdPVwiZGlzYWJsZUxhYmVsKClcIlxuICAgICAgICAgICAgICBba2V5U2VsZWN0ZWRdPVwia2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgIFtmaWVsZExhYmVsXT1cImZpZWxkTGFiZWwoKVwiXG4gICAgICAgICAgICAgIFtmaWVsZEtleV09XCJmaWVsZEtleSgpXCJcbiAgICAgICAgICAgICAgW2Nzc0RlZmF1bHRdPVwiKCRmaXJzdCA/IGNvbmZpZ0NzcygpPy5maXJzdCA6IGNvbmZpZ0NzcygpPy5vdGhlcikgfHwgJydcIlxuICAgICAgICAgICAgICBbekluZGV4XT1cInpJbmRleCgpXCJcbiAgICAgICAgICAgICAgW21vZGVdPVwibW9kZSgpXCJcbiAgICAgICAgICAgICAgW2lnbm9yZUNhbGN1bGF0b3JUYWJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtjaGFuZ2VWaWV3VGFiXT1cImNoYW5nZVZpZXdUYWJcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlckNsaWNrSXRlbSgkZXZlbnQsIGl0ZW0pXCJcbiAgICAgICAgICAgICAgKG91dEFjdGlvbik9XCJoYW5kbGVyQWN0aW9uKCRldmVudClcIiAvPlxuICAgICAgICAgICAgQGlmIChtb2RlKCkgPT09ICdjZW50ZXItaGFzLWxpbmUnICYmICEkbGFzdCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1bNDBweF0gaC1bMXB4XSBiZy1bI2U2ZTdlYV1cIj48L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCJcbiAgICAgIFtjbGFzcy5tbC1hdXRvXT1cImRpc3BsYXlNb3JlSXRlbSgpICYmICF0YWJzKCkudmlld01vcmVJZ25vcmVNYXJnaW5MZWZ0XCI+XG4gICAgICBAaWYgKGRpc3BsYXlNb3JlSXRlbSgpKSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtcG9wb3ZlciBjbGFzcz1cInctZnVsbCBoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXJcIlxuICAgICAgICAgIFttb2RlXT1cIidjbGljay10b2dnbGUnXCJcbiAgICAgICAgICBbaWdub3JlSGlkZGVuUG9wb3ZlckNvbnRlbnRXaGVuTW91c2VMZWF2ZV09XCJ0cnVlXCJcbiAgICAgICAgICBbY29uZmlnXT1cIntcbiAgICAgICAgICAgIHpJbmRleDogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LnpJbmRleCB8fCAxMDAwLFxuICAgICAgICAgICAgbWF4SGVpZ2h0OiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8ubWF4SGVpZ2h0IHx8IDI4NyxcbiAgICAgICAgICAgIG1heFdpZHRoOiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8ubWF4V2lkdGggfHwgMjA0OCxcbiAgICAgICAgICAgIHdpZHRoOiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8ud2lkdGggfHwgMjc3LCBcbiAgICAgICAgICAgIGRpcmVjdGlvbjogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LmRpcmVjdGlvbiB8fCAnYm90dG9tJyxcbiAgICAgICAgICAgIHRlbXBsYXRlOiBwb3BvdmVyU2hvd01vcmVUYWJJdGVtKCk/LmNvbmZpZz8udGVtcGxhdGUgfHwgbWVudUVsLFxuICAgICAgICAgICAgd2hpdGVUaGVtZTogdHJ1ZSxcbiAgICAgICAgICAgIGlnbm9yZUFycm93OiB0cnVlLFxuICAgICAgICAgICAgcG9zaXRpb246IHBvcG92ZXJTaG93TW9yZVRhYkl0ZW0oKT8uY29uZmlnPy5wb3NpdGlvbiB8fCB7IG1vZGU6ICdlbmQnLCBkaXN0YW5jZTogMCB9XG4gICAgICAgICAgfVwiXG4gICAgICAgICAgKG91dEZ1bmN0aW9uc0NvbnRyb2wpPVwiaGFuZGxlclBvcG92ZXJGdW5jdGlvbkNvbnRyb2xFdmVudCgkZXZlbnQpXCI+XG4gICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbiBbdHlwZV09XCInYnV0dG9uLWxpbmstdGhpcmQnXCJcbiAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLVs4cHhdJ1wiXG4gICAgICAgICAgICBbaWNvbk9ubHlUeXBlXT1cInRydWVcIlxuICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1tb3JlLXZlcnRpY2FsIHJvdGF0ZS05MCB0ZXh0LVsxNnB4XSBtci0wJ1wiXG4gICAgICAgICAgICBbcG9wb3Zlcl09XCJ7Y29uZmlnOiB7Y29udGVudDogcG9wb3ZlclNob3dNb3JlVGFiSXRlbSgpPy5jb25maWc/LmNvbnRlbnQgfHwgJ2kxOG5fdmlld19tb3JlJ319XCJcbiAgICAgICAgICAgIFtpZ25vcmVTdG9wUHJvcGFnYXRpb25FdmVudF09XCJ0cnVlXCIgLz5cbiAgICAgICAgPC9saWJzX3VpLWNvbXBvbmVudHMtcG9wb3Zlcj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICNoZWFkZXJSaWdodEVsXG4gICAgICBjbGFzcz1cImxpYnMtdWktdGFiLWhlYWRlci1yaWdodCB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyUmlnaHQgfHwgJycgfX1cIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImRpdi5saWJzLXVpLXRhYi1oZWFkZXItcmlnaHRcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgdG9wLTAgei0wIHctZnVsbFwiPlxuICAgIDxkaXYgY2xhc3M9XCJsaWJzLXVpLXRhYi1oZWFkZXIge3sgY29uZmlnQ3NzKCk/LmhlYWRlciB8fCAnJyB9fSB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSGVhZGVyIHx8ICcnIH19XCJcbiAgICAgIFtzdHlsZS5taW5IZWlnaHQucHhdPVwiaGVpZ2h0VGFiSXRlbSgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibGlicy11aS10YWItaGVhZGVyLWNlbnRlciB7eyBjb25maWdDc3MoKT8uaGVhZGVyQ2VudGVyIHx8ICcnIH19IHt7IHRhYnMoKS5jbGFzc0luY2x1ZGVIZWFkZXJDZW50ZXIgfHwgJycgfX1cIj5cbiAgICAgICAgQGZvciAoaXRlbSBvZiB0YWJzKCkuaXRlbXMoKTsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtdGFicy1pdGVtIGNsYXNzPVwiaC1mdWxsIHctZnVsbCB7eyB0YWJzKCkuY2xhc3NJbmNsdWRlSXRlbSB8fCAnJyB9fVwiXG4gICAgICAgICAgICBbdGFic109XCJ0YWJzKClcIlxuICAgICAgICAgICAgW3NpemVdPVwic2l6ZSgpXCJcbiAgICAgICAgICAgIFsoaXRlbSldPVwiaXRlbVwiXG4gICAgICAgICAgICBbc3RlcF09XCIkaW5kZXgrMVwiXG4gICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKClcIlxuICAgICAgICAgICAgW2Rpc2FibGVMYWJlbF09XCJkaXNhYmxlTGFiZWwoKVwiXG4gICAgICAgICAgICBba2V5U2VsZWN0ZWRdPVwia2V5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICBbZmllbGRMYWJlbF09XCJmaWVsZExhYmVsKClcIlxuICAgICAgICAgICAgW2ZpZWxkS2V5XT1cImZpZWxkS2V5KClcIlxuICAgICAgICAgICAgW2Nzc0RlZmF1bHRdPVwiKCRmaXJzdCA/IGNvbmZpZ0NzcygpPy5maXJzdCA6IGNvbmZpZ0NzcygpPy5vdGhlcikgfHwgJydcIlxuICAgICAgICAgICAgW3pJbmRleF09XCJ6SW5kZXgoKVwiXG4gICAgICAgICAgICBbbW9kZV09XCJtb2RlKClcIlxuICAgICAgICAgICAgW2NoYW5nZVZpZXdUYWJdPVwiY2hhbmdlVmlld1RhYlwiXG4gICAgICAgICAgICBbaWdub3JlQ2FsY3VsYXRvclRhYl09XCJpZ25vcmVDYWxjdWxhdG9yVGFiKClcIiAvPlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjbWVudUVsPlxuICA8bGlic191aS1jb21wb25lbnRzLWxpc3QgW2NvbmZpZ109XCJ0YWJNb3JlTGlzdENvbmZpZygpXCJcbiAgICBbbWF4SXRlbVNob3ddPVwiNVwiXG4gICAgW2hpZGRlbklucHV0U2VhcmNoXT1cInRydWVcIlxuICAgIFtwYWRkaW5nTGVmdEl0ZW1dPVwidHJ1ZVwiXG4gICAgKG91dFNlbGVjdEtleSk9XCJoYW5kbGVyU2VsZWN0ZWRLZXkoJGV2ZW50KVwiIC8+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { convertObjectToSignal, escapeHtml, isNil } from "@libs-ui/utils";
|
|
2
|
+
import { of } from "rxjs";
|
|
3
|
+
import { returnListObject } from "@libs-ui/services-http-request";
|
|
4
|
+
import { signal } from "@angular/core";
|
|
5
|
+
export const tabMoreListConfig = (translate, fieldKey, fieldLabel, tabs, disable) => {
|
|
6
|
+
return {
|
|
7
|
+
type: 'text',
|
|
8
|
+
httpRequestData: signal({
|
|
9
|
+
serviceOther: returnListObject(tabs.items().filter(item => !item().specificDisplay).map(item => item())),
|
|
10
|
+
functionName: 'listObservable',
|
|
11
|
+
argumentsValue: []
|
|
12
|
+
}),
|
|
13
|
+
configTemplateText: signal({
|
|
14
|
+
fieldKey: fieldKey || 'key',
|
|
15
|
+
getClassItem: () => '!py-[12px]',
|
|
16
|
+
classRows: 'w-full',
|
|
17
|
+
notUseVirtualScroll: true,
|
|
18
|
+
rows: convertObjectToSignal([{
|
|
19
|
+
classCols: 'flex items-center',
|
|
20
|
+
cols: [
|
|
21
|
+
{
|
|
22
|
+
getPopover: (item) => {
|
|
23
|
+
if (!tabs.hasStep) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const step = (item.order || 0) + 1;
|
|
27
|
+
let classStep = 'bg-[#f8f9fa] text-[#9ca2ad]';
|
|
28
|
+
if (item.invalid) {
|
|
29
|
+
classStep = '!text-[#f15767] !bg-[#fdeaec]';
|
|
30
|
+
}
|
|
31
|
+
if (item.disable || disable) {
|
|
32
|
+
classStep = 'bg-[#f8f9fa] text-[#cdd0d6]';
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
classInclude: 'flex',
|
|
36
|
+
dataView: `
|
|
37
|
+
<div class="libs-ui-font-h6m rounded-full min-w-[24px] min-h-[24px] flex items-center justify-center mr-[8px] ${classStep}">
|
|
38
|
+
${(step <= (tabs.stepCompleted || -1)) ? `<i class="libs-ui-icon-check text-[#ffffff]"></i>` : `${step}`}
|
|
39
|
+
</div>
|
|
40
|
+
`
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
getPopover: (item) => item.iconLeft ? { classInclude: 'flex', dataView: `<i class="${item.iconLeft} text-[16px] mr-[8px]"></i>` } : undefined
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
getClassCol: (item) => `libs-ui-font-h6m ${item.invalid ? '!text-[#f15767]' : 'text-[#6a7383]'}`,
|
|
49
|
+
getValue: (data) => of(escapeHtml(translate.instant(data.item[fieldLabel] || ' ')))
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
getPopover: (item) => item.popover ? { config: item.popover } : undefined
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
getPopover: (item) => item.iconRight ? { classInclude: 'flex', dataView: `<i class="${item.iconRight} text-[16px] ml-[8px]"></i>` } : undefined
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
getConfigBadge: (item) => {
|
|
59
|
+
if (isNil(item.count)) {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
mode: item.modeCount || 'x+',
|
|
64
|
+
count: item.count,
|
|
65
|
+
maxCount: item.maxCount || 99,
|
|
66
|
+
classCircle: (item.classCircle || 'libs-ui-font-h5r') + (item.invalid ? ' !text-[#f15767] !bg-[#fdeaec]' : '')
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
}])
|
|
72
|
+
})
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy90YWJzL3NyYy91dGlscy90YWJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQUMsU0FBMkIsRUFBRSxRQUFnQixFQUFFLFVBQWtCLEVBQUUsSUFBVyxFQUFFLE9BQTRCLEVBQW1CLEVBQUU7SUFDakssT0FBTztRQUNMLElBQUksRUFBRSxNQUFNO1FBQ1osZUFBZSxFQUFFLE1BQU0sQ0FBQztZQUN0QixZQUFZLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN4RyxZQUFZLEVBQUUsZ0JBQWdCO1lBQzlCLGNBQWMsRUFBRSxFQUFFO1NBQ25CLENBQUM7UUFDRixrQkFBa0IsRUFBRSxNQUFNLENBQUM7WUFDekIsUUFBUSxFQUFFLFFBQVEsSUFBSSxLQUFLO1lBQzNCLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxZQUFZO1lBQ2hDLFNBQVMsRUFBRSxRQUFRO1lBQ25CLG1CQUFtQixFQUFFLElBQUk7WUFDekIsSUFBSSxFQUFFLHFCQUFxQixDQUFDLENBQUM7b0JBQzNCLFNBQVMsRUFBRSxt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QUFDSixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRGF0YUZ1bmN0aW9uQ2FsbEluQ29uZmlnLCBJTGlzdENvbmZpZ0l0ZW0gfSBmcm9tIFwiQGxpYnMtdWkvY29tcG9uZW50cy1saXN0XCI7XG5pbXBvcnQgeyBjb252ZXJ0T2JqZWN0VG9TaWduYWwsIGVzY2FwZUh0bWwsIGlzTmlsIH0gZnJvbSBcIkBsaWJzLXVpL3V0aWxzXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IG9mIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IElUYWJzLCBJVGFic0l0ZW0gfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy90YWIuaW50ZXJmYWNlXCI7XG5pbXBvcnQgeyByZXR1cm5MaXN0T2JqZWN0IH0gZnJvbSBcIkBsaWJzLXVpL3NlcnZpY2VzLWh0dHAtcmVxdWVzdFwiO1xuaW1wb3J0IHsgc2lnbmFsIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuZXhwb3J0IGNvbnN0IHRhYk1vcmVMaXN0Q29uZmlnID0gKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgZmllbGRLZXk6IHN0cmluZywgZmllbGRMYWJlbDogc3RyaW5nLCB0YWJzOiBJVGFicywgZGlzYWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZCk6IElMaXN0Q29uZmlnSXRlbSA9PiB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ3RleHQnLFxuICAgIGh0dHBSZXF1ZXN0RGF0YTogc2lnbmFsKHtcbiAgICAgIHNlcnZpY2VPdGhlcjogcmV0dXJuTGlzdE9iamVjdCh0YWJzLml0ZW1zKCkuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0oKS5zcGVjaWZpY0Rpc3BsYXkpLm1hcChpdGVtID0+IGl0ZW0oKSkpLFxuICAgICAgZnVuY3Rpb25OYW1lOiAnbGlzdE9ic2VydmFibGUnLFxuICAgICAgYXJndW1lbnRzVmFsdWU6IFtdXG4gICAgfSksXG4gICAgY29uZmlnVGVtcGxhdGVUZXh0OiBzaWduYWwoe1xuICAgICAgZmllbGRLZXk6IGZpZWxkS2V5IHx8ICdrZXknLFxuICAgICAgZ2V0Q2xhc3NJdGVtOiAoKSA9PiAnIXB5LVsxMnB4XScsXG4gICAgICBjbGFzc1Jvd3M6ICd3LWZ1bGwnLFxuICAgICAgbm90VXNlVmlydHVhbFNjcm9sbDogdHJ1ZSxcbiAgICAgIHJvd3M6IGNvbnZlcnRPYmplY3RUb1NpZ25hbChbe1xuICAgICAgICBjbGFzc0NvbHM6ICdmbGV4IGl0ZW1zLWNlbnRlcicsXG4gICAgICAgIGNvbHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBnZXRQb3BvdmVyOiAoaXRlbTogSVRhYnNJdGVtKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghdGFicy5oYXNTdGVwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSAoaXRlbS5vcmRlciB8fCAwKSArIDE7XG4gICAgICAgICAgICAgIGxldCBjbGFzc1N0ZXAgPSAnYmctWyNmOGY5ZmFdIHRleHQtWyM5Y2EyYWRdJztcbiAgICAgICAgICAgICAgaWYgKGl0ZW0uaW52YWxpZCkge1xuICAgICAgICAgICAgICAgIGNsYXNzU3RlcCA9ICchdGV4dC1bI2YxNTc2N10gIWJnLVsjZmRlYWVjXSc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGl0ZW0uZGlzYWJsZSB8fCBkaXNhYmxlKSB7XG4gICAgICAgICAgICAgICAgY2xhc3NTdGVwID0gJ2JnLVsjZjhmOWZhXSB0ZXh0LVsjY2RkMGQ2XSc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjbGFzc0luY2x1ZGU6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICBkYXRhVmlldzogYFxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktZm9udC1oNm0gcm91bmRlZC1mdWxsIG1pbi13LVsyNHB4XSBtaW4taC1bMjRweF0gZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbXItWzhweF0gJHtjbGFzc1N0ZXB9XCI+XG4gICAgICAgICAgICAgICAgICAgICR7KHN0ZXAgPD0gKHRhYnMuc3RlcENvbXBsZXRlZCB8fCAtMSkpID8gYDxpIGNsYXNzPVwibGlicy11aS1pY29uLWNoZWNrIHRleHQtWyNmZmZmZmZdXCI+PC9pPmAgOiBgJHtzdGVwfWB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIGBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZ2V0UG9wb3ZlcjogKGl0ZW06IElUYWJzSXRlbSkgPT4gaXRlbS5pY29uTGVmdCA/IHsgY2xhc3NJbmNsdWRlOiAnZmxleCcsIGRhdGFWaWV3OiBgPGkgY2xhc3M9XCIke2l0ZW0uaWNvbkxlZnR9IHRleHQtWzE2cHhdIG1yLVs4cHhdXCI+PC9pPmAgfSA6IHVuZGVmaW5lZFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZ2V0Q2xhc3NDb2w6IChpdGVtOiBJVGFic0l0ZW0pID0+IGBsaWJzLXVpLWZvbnQtaDZtICR7aXRlbS5pbnZhbGlkID8gJyF0ZXh0LVsjZjE1NzY3XScgOiAndGV4dC1bIzZhNzM4M10nfWAsXG4gICAgICAgICAgICBnZXRWYWx1ZTogKGRhdGE6IElEYXRhRnVuY3Rpb25DYWxsSW5Db25maWcpID0+IG9mKGVzY2FwZUh0bWwodHJhbnNsYXRlLmluc3RhbnQoZGF0YS5pdGVtW2ZpZWxkTGFiZWxdIHx8ICcgJykpKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZ2V0UG9wb3ZlcjogKGl0ZW06IElUYWJzSXRlbSkgPT4gaXRlbS5wb3BvdmVyID8geyBjb25maWc6IGl0ZW0ucG9wb3ZlciB9IDogdW5kZWZpbmVkXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBnZXRQb3BvdmVyOiAoaXRlbTogSVRhYnNJdGVtKSA9PiBpdGVtLmljb25SaWdodCA/IHsgY2xhc3NJbmNsdWRlOiAnZmxleCcsIGRhdGFWaWV3OiBgPGkgY2xhc3M9XCIke2l0ZW0uaWNvblJpZ2h0fSB0ZXh0LVsxNnB4XSBtbC1bOHB4XVwiPjwvaT5gIH0gOiB1bmRlZmluZWRcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGdldENvbmZpZ0JhZGdlOiAoaXRlbTogSVRhYnNJdGVtKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpc05pbChpdGVtLmNvdW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1vZGU6IGl0ZW0ubW9kZUNvdW50IHx8ICd4KycsXG4gICAgICAgICAgICAgICAgY291bnQ6IGl0ZW0uY291bnQsXG4gICAgICAgICAgICAgICAgbWF4Q291bnQ6IGl0ZW0ubWF4Q291bnQgfHwgOTksXG4gICAgICAgICAgICAgICAgY2xhc3NDaXJjbGU6IChpdGVtLmNsYXNzQ2lyY2xlIHx8ICdsaWJzLXVpLWZvbnQtaDVyJykgKyAoaXRlbS5pbnZhbGlkID8gJyAhdGV4dC1bI2YxNTc2N10gIWJnLVsjZmRlYWVjXScgOiAnJylcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1dKVxuICAgIH0pXG4gIH07XG59Il19
|