@festo-ui/angular 8.2.0-dev.617 → 8.2.0-dev.622
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/css/bundle.css +1 -1
- package/css/popover.css +1 -1
- package/fesm2022/festo-ui-angular.mjs +516 -262
- package/fesm2022/festo-ui-angular.mjs.map +1 -1
- package/lib/components/components.module.d.ts +3 -1
- package/lib/components/overlay/overlay-content/overlay-content.component.d.ts +5 -0
- package/lib/components/overlay/overlay-outlet.directive.d.ts +64 -0
- package/lib/components/popovers/popover.defaults.d.ts +0 -18
- package/lib/components/popovers/popover.models.d.ts +2 -1
- package/lib/components/popovers/tooltip/tooltip.directive.d.ts +7 -0
- package/lib/forms/value-accessor-base.d.ts +1 -1
- package/package.json +9 -11
- package/public-api.d.ts +2 -0
- package/scss/base/icons-svg.scss +1 -1
- package/scss/base/image-gallery.scss +2 -2
- package/scss/base/popover.scss +2 -2
- package/scss/base/styles.scss +4 -4
- package/esm2022/festo-ui-angular.mjs +0 -5
- package/esm2022/lib/components/accordion/accordion-header/accordion-header.component.mjs +0 -11
- package/esm2022/lib/components/accordion/accordion-item/accordion-item-body/accordion-item-body.component.mjs +0 -15
- package/esm2022/lib/components/accordion/accordion-item/accordion-item-header/accordion-item-header.component.mjs +0 -28
- package/esm2022/lib/components/accordion/accordion-item/accordion-item.component.mjs +0 -148
- package/esm2022/lib/components/accordion/accordion.component.mjs +0 -59
- package/esm2022/lib/components/accordion/index.mjs +0 -6
- package/esm2022/lib/components/bottom-sheet/bottom-sheet.component.mjs +0 -97
- package/esm2022/lib/components/breadcrumb/breadcrumb.component.mjs +0 -26
- package/esm2022/lib/components/buttons/button/button.component.mjs +0 -48
- package/esm2022/lib/components/buttons/link-button/link-button.component.mjs +0 -34
- package/esm2022/lib/components/chips/chip/chip.component.mjs +0 -38
- package/esm2022/lib/components/chips/chip-container/chip-container.component.mjs +0 -17
- package/esm2022/lib/components/components.module.mjs +0 -212
- package/esm2022/lib/components/loading-indicator/loading-indicator.component.mjs +0 -17
- package/esm2022/lib/components/mobile-flyout/mobile-flyout-item/mobile-flyout-item.component.mjs +0 -39
- package/esm2022/lib/components/mobile-flyout/mobile-flyout-page/mobile-flyout-page.component.mjs +0 -65
- package/esm2022/lib/components/mobile-flyout/mobile-flyout.component.mjs +0 -69
- package/esm2022/lib/components/pagination/pagination.component.mjs +0 -57
- package/esm2022/lib/components/popovers/legend/legend.component.mjs +0 -42
- package/esm2022/lib/components/popovers/legend/legend.directive.mjs +0 -31
- package/esm2022/lib/components/popovers/popover/popover.component.mjs +0 -31
- package/esm2022/lib/components/popovers/popover-content/popover-content.component.mjs +0 -80
- package/esm2022/lib/components/popovers/popover-content/popover-content.directive.mjs +0 -39
- package/esm2022/lib/components/popovers/popover-menu/popover-menu.component.mjs +0 -67
- package/esm2022/lib/components/popovers/popover-ref.mjs +0 -25
- package/esm2022/lib/components/popovers/popover.defaults.mjs +0 -59
- package/esm2022/lib/components/popovers/popover.models.mjs +0 -7
- package/esm2022/lib/components/popovers/popover.service.mjs +0 -140
- package/esm2022/lib/components/popovers/tooltip/tooltip.directive.mjs +0 -101
- package/esm2022/lib/components/progress/progress.component.mjs +0 -22
- package/esm2022/lib/components/scroll/index.mjs +0 -2
- package/esm2022/lib/components/scroll/scrollable.directive.mjs +0 -75
- package/esm2022/lib/components/search-input/search-input.component.mjs +0 -182
- package/esm2022/lib/components/sidebar-overlay/sidebar-overlay.component.mjs +0 -59
- package/esm2022/lib/components/snackbar/snackbar-container.component.mjs +0 -21
- package/esm2022/lib/components/snackbar/snackbar-container.directive.mjs +0 -80
- package/esm2022/lib/components/snackbar/snackbar.component.mjs +0 -81
- package/esm2022/lib/components/snackbar/snackbar.models.mjs +0 -2
- package/esm2022/lib/components/snackbar/snackbar.module.mjs +0 -24
- package/esm2022/lib/components/snackbar/snackbar.service.mjs +0 -23
- package/esm2022/lib/components/stepper-horizontal/step-horizontal/step-horizontal.component.mjs +0 -19
- package/esm2022/lib/components/stepper-horizontal/stepper-horizontal.component.mjs +0 -52
- package/esm2022/lib/components/stepper-vertical/step-vertical/step-vertical.component.mjs +0 -57
- package/esm2022/lib/components/stepper-vertical/stepper-vertical.component.mjs +0 -54
- package/esm2022/lib/components/table-header-cell/table-header-cell.directive.mjs +0 -60
- package/esm2022/lib/components/tabs/tab-pane/tab-pane.component.mjs +0 -34
- package/esm2022/lib/components/tabs/tabs.component.mjs +0 -459
- package/esm2022/lib/directives/click-outside.directive.mjs +0 -29
- package/esm2022/lib/festo-angular.module.mjs +0 -21
- package/esm2022/lib/forms/checkbox/checkbox.component.mjs +0 -154
- package/esm2022/lib/forms/color-indicator/color-indicator.component.mjs +0 -88
- package/esm2022/lib/forms/color-picker/color-helper.mjs +0 -129
- package/esm2022/lib/forms/color-picker/color-picker.component.mjs +0 -292
- package/esm2022/lib/forms/date-picker/date-picker.component.mjs +0 -205
- package/esm2022/lib/forms/date-range-picker/date-range-picker.component.mjs +0 -231
- package/esm2022/lib/forms/flatpickr/flatpickr.component.mjs +0 -55
- package/esm2022/lib/forms/forms.module.mjs +0 -132
- package/esm2022/lib/forms/radio/radio.component.mjs +0 -349
- package/esm2022/lib/forms/segment/segment-control/segment-control.component.mjs +0 -65
- package/esm2022/lib/forms/segment/segment.component.mjs +0 -139
- package/esm2022/lib/forms/select/chip-text.pipe.mjs +0 -39
- package/esm2022/lib/forms/select/select-option/select-option.component.mjs +0 -23
- package/esm2022/lib/forms/select/select.component.mjs +0 -273
- package/esm2022/lib/forms/slider/slider.component.mjs +0 -117
- package/esm2022/lib/forms/switch/switch.component.mjs +0 -121
- package/esm2022/lib/forms/text-area/text-area.component.mjs +0 -187
- package/esm2022/lib/forms/text-editor/text-editor.component.mjs +0 -307
- package/esm2022/lib/forms/text-input/text-input.component.mjs +0 -208
- package/esm2022/lib/forms/time-picker/time-picker-dropdown/time-picker-dropdown.component.mjs +0 -107
- package/esm2022/lib/forms/time-picker/time-picker.component.mjs +0 -204
- package/esm2022/lib/forms/unique-selection-dispatcher.mjs +0 -41
- package/esm2022/lib/forms/value-accessor-base.mjs +0 -41
- package/esm2022/lib/modals/alert/alert.component.mjs +0 -55
- package/esm2022/lib/modals/confirm/confirm.component.mjs +0 -56
- package/esm2022/lib/modals/custom-modal/custom-modal.component.mjs +0 -88
- package/esm2022/lib/modals/image-gallery/image-gallery.component.mjs +0 -80
- package/esm2022/lib/modals/index.mjs +0 -2
- package/esm2022/lib/modals/modal.service.mjs +0 -118
- package/esm2022/lib/modals/modals.module.mjs +0 -27
- package/esm2022/lib/modals/prompt/prompt.component.mjs +0 -114
- package/esm2022/lib/pipes/safe-html.pipe.mjs +0 -21
- package/esm2022/public-api.mjs +0 -66
|
@@ -1,459 +0,0 @@
|
|
|
1
|
-
import { CommonModule, DOCUMENT } from '@angular/common';
|
|
2
|
-
import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Inject, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
3
|
-
import { noop, Subject } from 'rxjs';
|
|
4
|
-
import { takeUntil } from 'rxjs/operators';
|
|
5
|
-
import { FngTabPaneComponent } from './tab-pane/tab-pane.component';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@angular/common";
|
|
8
|
-
export class FngTabsComponent {
|
|
9
|
-
static { this.nextId = 0; }
|
|
10
|
-
constructor(elRef, document, renderer, cd) {
|
|
11
|
-
this.elRef = elRef;
|
|
12
|
-
this.document = document;
|
|
13
|
-
this.renderer = renderer;
|
|
14
|
-
this.cd = cd;
|
|
15
|
-
this.viewType = 'responsive';
|
|
16
|
-
this.showDivider = false;
|
|
17
|
-
this.config = null;
|
|
18
|
-
this.fngBeforeTabChange = new EventEmitter();
|
|
19
|
-
this.fngTabChange = new EventEmitter();
|
|
20
|
-
this.componentId = `tabs-${++FngTabsComponent.nextId}`;
|
|
21
|
-
this.tabs = [];
|
|
22
|
-
this.useCompactDensity = true;
|
|
23
|
-
this.activeTab = undefined;
|
|
24
|
-
this.complete = new Subject();
|
|
25
|
-
this.injectedWindow = this.document.defaultView;
|
|
26
|
-
}
|
|
27
|
-
ngAfterContentInit() {
|
|
28
|
-
this.initTabs();
|
|
29
|
-
if (null == this.activeTab) {
|
|
30
|
-
this.panes?.map((pane, i) => {
|
|
31
|
-
if (0 === i) {
|
|
32
|
-
pane.isVisible = true;
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
const pane = this.panes?.find(pane => {
|
|
38
|
-
if (this.activeTab) {
|
|
39
|
-
return this.activeTab.paneId != null && pane.tabPaneId === this.activeTab.paneId;
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
return false;
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
if (pane) {
|
|
46
|
-
pane.isVisible = true;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
ngAfterViewInit() {
|
|
51
|
-
this.elemScroller = this.scroller?.nativeElement;
|
|
52
|
-
this.elemScrollArea = this.scrollAera?.nativeElement;
|
|
53
|
-
this.elemScrollContent = this.scrollContent?.nativeElement;
|
|
54
|
-
if (this.elemScroller == null || this.elemScrollArea == null || this.elemScrollContent == null) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
const initialWidth = this.elemScrollArea.offsetWidth;
|
|
58
|
-
if (initialWidth != null && initialWidth > 768) {
|
|
59
|
-
this.useCompactDensity = false;
|
|
60
|
-
this.cd.detectChanges();
|
|
61
|
-
}
|
|
62
|
-
this.resizeObserver = new ResizeObserver(() => {
|
|
63
|
-
if (this.elemScrollArea == null) {
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
const width = this.elemScrollArea.offsetWidth;
|
|
67
|
-
if (width != null && width > 768 && this.useCompactDensity === true) {
|
|
68
|
-
this.useCompactDensity = false;
|
|
69
|
-
this.cd.detectChanges();
|
|
70
|
-
}
|
|
71
|
-
else if (width != null && width <= 768 && this.useCompactDensity === false) {
|
|
72
|
-
this.useCompactDensity = true;
|
|
73
|
-
this.cd.detectChanges();
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
if (this.elemScrollArea != null) {
|
|
77
|
-
this.resizeObserver.observe(this.elemScrollArea);
|
|
78
|
-
}
|
|
79
|
-
this.handleTabPaneChanges();
|
|
80
|
-
}
|
|
81
|
-
ngOnDestroy() {
|
|
82
|
-
this.complete.next(true);
|
|
83
|
-
this.complete.unsubscribe();
|
|
84
|
-
}
|
|
85
|
-
showTabPane(id) {
|
|
86
|
-
if (id == null) {
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
const pane = this.panes?.find(p => p.tabPaneId === id);
|
|
90
|
-
const handleTabChange = (id) => {
|
|
91
|
-
if (pane != null && pane.disabled !== true) {
|
|
92
|
-
this.panes?.map(p => {
|
|
93
|
-
p.isVisible = false;
|
|
94
|
-
});
|
|
95
|
-
pane.isVisible = true;
|
|
96
|
-
this.tabs.map(tab => {
|
|
97
|
-
if (tab.paneId !== pane.tabPaneId) {
|
|
98
|
-
tab.active = false;
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
tab.active = true;
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
this.fngTabChange.emit({
|
|
105
|
-
previous: this.activeTab?.paneId || '',
|
|
106
|
-
current: id
|
|
107
|
-
});
|
|
108
|
-
this.activeTab = this.tabs.find(tab => !!tab.active);
|
|
109
|
-
this.cd.detectChanges();
|
|
110
|
-
}
|
|
111
|
-
};
|
|
112
|
-
if (this.fngBeforeTabChange?.observers?.length > 0 && pane?.disabled !== true) {
|
|
113
|
-
this.fngBeforeTabChange.emit({
|
|
114
|
-
ok: () => {
|
|
115
|
-
handleTabChange(id);
|
|
116
|
-
},
|
|
117
|
-
cancel: () => {
|
|
118
|
-
noop();
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
handleTabChange(id);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
handleTabScroll(event, index) {
|
|
127
|
-
if (this.elemScrollContent == null || this.elemScrollArea == null) {
|
|
128
|
-
return;
|
|
129
|
-
}
|
|
130
|
-
const scrollContentWidth = this.elemScrollContent.offsetWidth;
|
|
131
|
-
const scrollAreaWidth = this.elemScrollArea.offsetWidth;
|
|
132
|
-
// check if no scroll is needed
|
|
133
|
-
if (scrollAreaWidth > scrollContentWidth) {
|
|
134
|
-
return;
|
|
135
|
-
}
|
|
136
|
-
// check index
|
|
137
|
-
if (!this.indexIsInRange(index)) {
|
|
138
|
-
return;
|
|
139
|
-
}
|
|
140
|
-
// always scroll to 0 if scrolling to the first tab
|
|
141
|
-
if (index === 0) {
|
|
142
|
-
this.scrollTo(0);
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
// always scroll to the max value if scrolling to the last tab
|
|
146
|
-
if (index === this.tabs.length - 1) {
|
|
147
|
-
this.scrollTo(this.elemScrollContent.offsetWidth);
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
const currentTab = event.target;
|
|
151
|
-
this.scrollIntoView(index, currentTab);
|
|
152
|
-
}
|
|
153
|
-
initTabs() {
|
|
154
|
-
this.tabs = [];
|
|
155
|
-
this.panes?.map((pane, i) => {
|
|
156
|
-
pane.tabId = this.componentId + '-tab-' + i;
|
|
157
|
-
const tab = {
|
|
158
|
-
name: null != pane.name ? pane.name : '',
|
|
159
|
-
paneId: null != pane.tabPaneId ? pane.tabPaneId : null,
|
|
160
|
-
icon: null != pane.icon ? pane.icon : null,
|
|
161
|
-
active: null != pane.active ? pane.active : false,
|
|
162
|
-
disabled: null != pane.disabled ? pane.disabled : false
|
|
163
|
-
};
|
|
164
|
-
this.tabs.push(tab);
|
|
165
|
-
});
|
|
166
|
-
this.initActiveTab();
|
|
167
|
-
this.cd.detectChanges();
|
|
168
|
-
}
|
|
169
|
-
initActiveTab() {
|
|
170
|
-
const activeTab = this.tabs.find((tab) => !!tab.active);
|
|
171
|
-
if (!activeTab && 0 < this.tabs.length) {
|
|
172
|
-
this.tabs[0] = { ...this.tabs[0], active: true };
|
|
173
|
-
this.activeTab = this.tabs[0];
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
this.activeTab = activeTab;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
handleTabPaneChanges() {
|
|
180
|
-
// first subscribe to any changes in tab pane, so that the tabs in this view wiil be updated
|
|
181
|
-
this.panes?.forEach(pane => {
|
|
182
|
-
pane.changes$.pipe(takeUntil(this.complete)).subscribe(() => {
|
|
183
|
-
// on changes in a tab pane, we init the tabs again
|
|
184
|
-
this.initTabs();
|
|
185
|
-
});
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
scrollTo(scrollX) {
|
|
189
|
-
if (scrollX == null) {
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
const currentScrollX = this.getScrollPosition();
|
|
193
|
-
const safeScrollX = this.clampScrollValue(scrollX);
|
|
194
|
-
if (safeScrollX == null || currentScrollX == null) {
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
const scrollDelta = safeScrollX - currentScrollX;
|
|
198
|
-
this.animate({
|
|
199
|
-
finalScrollPosition: safeScrollX,
|
|
200
|
-
scrollDelta
|
|
201
|
-
});
|
|
202
|
-
}
|
|
203
|
-
scrollIntoView(index, tab) {
|
|
204
|
-
if (this.elemScrollArea == null) {
|
|
205
|
-
return;
|
|
206
|
-
}
|
|
207
|
-
const scrollPosition = this.getScrollPosition();
|
|
208
|
-
const barWidth = this.elemScrollArea.offsetWidth;
|
|
209
|
-
if (barWidth == null || scrollPosition == null) {
|
|
210
|
-
return;
|
|
211
|
-
}
|
|
212
|
-
const tabDimensions = this.computeDimensions(tab);
|
|
213
|
-
if (tabDimensions == null) {
|
|
214
|
-
return;
|
|
215
|
-
}
|
|
216
|
-
const nextIndex = this.findAdjacentTabIndexClosestToEdge(index, tabDimensions, scrollPosition, barWidth);
|
|
217
|
-
if (!this.indexIsInRange(nextIndex)) {
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
const scrollIncrement = this.calculateScrollIncrement(index, nextIndex, scrollPosition, barWidth);
|
|
221
|
-
if (scrollIncrement == null) {
|
|
222
|
-
return;
|
|
223
|
-
}
|
|
224
|
-
this.incrementScroll(scrollIncrement);
|
|
225
|
-
}
|
|
226
|
-
incrementScroll(scrollXIncrement) {
|
|
227
|
-
// no scroll needed
|
|
228
|
-
if (scrollXIncrement === 0) {
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
const scrollOperation = this.getIncrementScrollOperation(scrollXIncrement);
|
|
232
|
-
if (scrollOperation == null) {
|
|
233
|
-
return;
|
|
234
|
-
}
|
|
235
|
-
this.animate(scrollOperation);
|
|
236
|
-
}
|
|
237
|
-
animate(animation) {
|
|
238
|
-
// no animation needed
|
|
239
|
-
if (animation.scrollDelta === 0) {
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
// no animation possible
|
|
243
|
-
if (this.elemScrollArea == null) {
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
|
-
this.stopScrollAnimation();
|
|
247
|
-
// this animation uses the flip approach
|
|
248
|
-
// https://aerotwist.com/blog/flip-your-animations/
|
|
249
|
-
// https://css-tricks.com/animating-layouts-with-the-flip-technique/
|
|
250
|
-
this.elemScrollArea.scrollLeft = animation.finalScrollPosition;
|
|
251
|
-
this.setScrollContentStyleProperty('transform', `translateX(${animation.scrollDelta}px)`);
|
|
252
|
-
// force repaint
|
|
253
|
-
this.elemScrollArea.getBoundingClientRect();
|
|
254
|
-
requestAnimationFrame(() => {
|
|
255
|
-
this.renderer.addClass(this.elemScroller, 'fng-tab-scroller--animating');
|
|
256
|
-
this.setScrollContentStyleProperty('transform', 'none');
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
|
-
stopScrollAnimation() {
|
|
260
|
-
if (this.elemScrollArea == null) {
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
const currentScrollPosition = this.getAnimatingScrollPosition();
|
|
264
|
-
if (currentScrollPosition == null) {
|
|
265
|
-
return;
|
|
266
|
-
}
|
|
267
|
-
this.renderer.removeClass(this.elemScroller, 'fng-tab-scroller--animating');
|
|
268
|
-
this.setScrollContentStyleProperty('transform', 'translateX(0px)');
|
|
269
|
-
this.elemScrollArea.scrollLeft = currentScrollPosition;
|
|
270
|
-
}
|
|
271
|
-
getAnimatingScrollPosition() {
|
|
272
|
-
if (this.elemScrollArea == null) {
|
|
273
|
-
return null;
|
|
274
|
-
}
|
|
275
|
-
const currentTranslateX = this.calculateCurrentTranslateX();
|
|
276
|
-
const scrollLeft = this.elemScrollArea.scrollLeft;
|
|
277
|
-
return scrollLeft - currentTranslateX;
|
|
278
|
-
}
|
|
279
|
-
getIncrementScrollOperation(scrollX) {
|
|
280
|
-
const currentScrollX = this.getScrollPosition();
|
|
281
|
-
if (currentScrollX == null) {
|
|
282
|
-
return null;
|
|
283
|
-
}
|
|
284
|
-
const targetScrollX = scrollX + currentScrollX;
|
|
285
|
-
const safeScrollX = this.clampScrollValue(targetScrollX);
|
|
286
|
-
if (safeScrollX == null) {
|
|
287
|
-
return null;
|
|
288
|
-
}
|
|
289
|
-
const scrollDelta = safeScrollX - currentScrollX;
|
|
290
|
-
return {
|
|
291
|
-
finalScrollPosition: safeScrollX,
|
|
292
|
-
scrollDelta
|
|
293
|
-
};
|
|
294
|
-
}
|
|
295
|
-
clampScrollValue(scrollX) {
|
|
296
|
-
const edges = this.calculateScrollEdges();
|
|
297
|
-
if (edges == null) {
|
|
298
|
-
return null;
|
|
299
|
-
}
|
|
300
|
-
return Math.min(Math.max(edges.left, scrollX), edges.right);
|
|
301
|
-
}
|
|
302
|
-
calculateScrollEdges() {
|
|
303
|
-
if (this.elemScrollArea == null || this.elemScrollContent == null) {
|
|
304
|
-
return null;
|
|
305
|
-
}
|
|
306
|
-
const scrollContentWidth = this.elemScrollContent.offsetWidth;
|
|
307
|
-
const scrollAreaWidth = this.elemScrollArea.offsetWidth;
|
|
308
|
-
return {
|
|
309
|
-
left: 0,
|
|
310
|
-
right: scrollContentWidth - scrollAreaWidth
|
|
311
|
-
};
|
|
312
|
-
}
|
|
313
|
-
computeDimensions(tab) {
|
|
314
|
-
const rootWidth = tab.offsetWidth;
|
|
315
|
-
const rootLeft = tab.offsetLeft;
|
|
316
|
-
const tabContent = tab.querySelector('.fng-tab-content');
|
|
317
|
-
if (tabContent == null) {
|
|
318
|
-
return null;
|
|
319
|
-
}
|
|
320
|
-
const contentWidth = tabContent.offsetWidth;
|
|
321
|
-
const contentLeft = tabContent.offsetLeft;
|
|
322
|
-
return {
|
|
323
|
-
contentLeft: rootLeft + contentLeft,
|
|
324
|
-
contentRight: rootLeft + contentLeft + contentWidth,
|
|
325
|
-
rootLeft,
|
|
326
|
-
rootRight: rootLeft + rootWidth
|
|
327
|
-
};
|
|
328
|
-
}
|
|
329
|
-
calculateScrollIncrement(index, nextIndex, scrollPosition, barWidth) {
|
|
330
|
-
const nextTab = this.elRef.nativeElement.querySelector(`#${this.componentId}-tab-${nextIndex}`);
|
|
331
|
-
if (nextTab == null) {
|
|
332
|
-
return null;
|
|
333
|
-
}
|
|
334
|
-
const nextTabDimensions = this.computeDimensions(nextTab);
|
|
335
|
-
if (nextTabDimensions == null) {
|
|
336
|
-
return null;
|
|
337
|
-
}
|
|
338
|
-
const relativeContentLeft = nextTabDimensions.contentLeft - scrollPosition - barWidth;
|
|
339
|
-
const relativeContentRight = nextTabDimensions.contentRight - scrollPosition;
|
|
340
|
-
const leftIncrement = relativeContentRight - 48;
|
|
341
|
-
const rightIncrement = relativeContentLeft + 48;
|
|
342
|
-
if (nextIndex < index) {
|
|
343
|
-
return Math.min(leftIncrement, 0);
|
|
344
|
-
}
|
|
345
|
-
return Math.max(rightIncrement, 0);
|
|
346
|
-
}
|
|
347
|
-
indexIsInRange(index) {
|
|
348
|
-
return index >= 0 && index < this.tabs.length;
|
|
349
|
-
}
|
|
350
|
-
getScrollPosition() {
|
|
351
|
-
if (this.elemScrollArea == null) {
|
|
352
|
-
return null;
|
|
353
|
-
}
|
|
354
|
-
const currentTranslateX = this.calculateCurrentTranslateX();
|
|
355
|
-
const scrollLeft = this.elemScrollArea.scrollLeft;
|
|
356
|
-
return scrollLeft - currentTranslateX;
|
|
357
|
-
}
|
|
358
|
-
calculateCurrentTranslateX() {
|
|
359
|
-
const transformValue = this.getScrollContentStyleValue('transform');
|
|
360
|
-
if (transformValue == null) {
|
|
361
|
-
return 0;
|
|
362
|
-
}
|
|
363
|
-
if (transformValue === 'none') {
|
|
364
|
-
return 0;
|
|
365
|
-
}
|
|
366
|
-
// the transform value is in form of 'matrix(a, b, c, d, tx, ty)'
|
|
367
|
-
// get all the parenthesized values
|
|
368
|
-
const match = /\((.+?)\)/.exec(transformValue);
|
|
369
|
-
if (!match) {
|
|
370
|
-
return 0;
|
|
371
|
-
}
|
|
372
|
-
const matrixParams = match[1];
|
|
373
|
-
// we need value of tx -> translateX
|
|
374
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
375
|
-
const [a, b, c, d, tx, ty] = matrixParams.split(',');
|
|
376
|
-
return parseFloat(tx);
|
|
377
|
-
}
|
|
378
|
-
getScrollContentStyleValue(propName) {
|
|
379
|
-
if (this.elemScrollContent == null) {
|
|
380
|
-
return;
|
|
381
|
-
}
|
|
382
|
-
return this.injectedWindow?.getComputedStyle(this.elemScrollContent).getPropertyValue(propName);
|
|
383
|
-
}
|
|
384
|
-
setScrollContentStyleProperty(propName, value) {
|
|
385
|
-
this.renderer.setStyle(this.elemScrollContent, propName, value);
|
|
386
|
-
}
|
|
387
|
-
findAdjacentTabIndexClosestToEdge(index, tabDimensions, scrollPosition, barWidth) {
|
|
388
|
-
/**
|
|
389
|
-
* tabs are laid out in the tab scroller like this:
|
|
390
|
-
*
|
|
391
|
-
* scroll position
|
|
392
|
-
* +---+
|
|
393
|
-
* | | bar width
|
|
394
|
-
* | +-----------------------------------+
|
|
395
|
-
* | | |
|
|
396
|
-
* | v v
|
|
397
|
-
* | +-----------------------------------+
|
|
398
|
-
* v | tab scroller |
|
|
399
|
-
* +------------+--------------+-------------------+
|
|
400
|
-
* | tab | tab | tab |
|
|
401
|
-
* +------------+--------------+-------------------+
|
|
402
|
-
* | |
|
|
403
|
-
* +-----------------------------------+
|
|
404
|
-
*
|
|
405
|
-
* to determine the next adjacent index, we look at the tab root left and
|
|
406
|
-
* tab root right, both relative to the scroll position. if the tab root
|
|
407
|
-
* left is less than 0, then we know it's out of view to the left. if the
|
|
408
|
-
* tab root right minus the bar width is greater than 0, we know the tab is
|
|
409
|
-
* out of view to the right. from there, we either increment or decrement
|
|
410
|
-
* the index.
|
|
411
|
-
*/
|
|
412
|
-
const relativeRootLeft = tabDimensions.rootLeft - scrollPosition;
|
|
413
|
-
const relativeRootRight = tabDimensions.rootRight - scrollPosition - barWidth;
|
|
414
|
-
const relativeRootDelta = relativeRootLeft + relativeRootRight;
|
|
415
|
-
const leftEdgeIsCloser = relativeRootLeft < 0 || relativeRootDelta < 0;
|
|
416
|
-
const rightEdgeIsCloser = relativeRootRight > 0 || relativeRootDelta > 0;
|
|
417
|
-
if (leftEdgeIsCloser) {
|
|
418
|
-
return index - 1;
|
|
419
|
-
}
|
|
420
|
-
if (rightEdgeIsCloser) {
|
|
421
|
-
return index + 1;
|
|
422
|
-
}
|
|
423
|
-
return -1;
|
|
424
|
-
}
|
|
425
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: FngTabsComponent, deps: [{ token: i0.ElementRef }, { token: DOCUMENT }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
426
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.2", type: FngTabsComponent, isStandalone: true, selector: "fng-tabs", inputs: { viewType: ["fngTabsViewType", "viewType"], showDivider: ["fngTabsUseBottomDivider", "showDivider"], config: "config" }, outputs: { fngBeforeTabChange: "fngBeforeTabChange", fngTabChange: "fngTabChange" }, queries: [{ propertyName: "panes", predicate: FngTabPaneComponent }], viewQueries: [{ propertyName: "scroller", first: true, predicate: ["scroller"], descendants: true }, { propertyName: "scrollAera", first: true, predicate: ["scrollAera"], descendants: true }, { propertyName: "scrollContent", first: true, predicate: ["scrollContent"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"viewType === 'legacy'\">\r\n <div class=\"fwe-legacy-tabs\">\r\n <ul\r\n role=\"tablist\"\r\n class=\"fwe-legacy-tab-bar\"\r\n [class.fwe-legacy-tab-bar-full-width]=\"config?.tabBar?.fullWidth\"\r\n [class.fwe-legacy-tab-items-equal-width]=\"'equal' === config?.tabItems?.appearance\"\r\n [class.fwe-legacy-tab-items-fill]=\"'fill' === config?.tabItems?.appearance\"\r\n >\r\n <li\r\n *ngFor=\"let tab of tabs; let i = index\"\r\n class=\"fwe-legacy-tab-item\"\r\n [ngClass]=\"{ 'fwe-active': tab?.active, 'fwe-disabled': tab?.disabled }\"\r\n >\r\n <ng-container *ngIf=\"null == tab?.icon\">\r\n <a\r\n [id]=\"componentId + '-tab-' + i\"\r\n [attr.aria-controls]=\"tab.paneId\"\r\n [attr.aria-selected]=\"true === tab?.active ? true : false\"\r\n [attr.aria-disabled]=\"true === tab?.disabled ? true : false\"\r\n role=\"tab\"\r\n class=\"fwe-legacy-tab-link\"\r\n (click)=\"showTabPane(tab.paneId)\"\r\n >{{ tab.name }}</a\r\n >\r\n </ng-container>\r\n <ng-container *ngIf=\"null != tab?.icon\">\r\n <a\r\n [id]=\"componentId + '-tab-' + i\"\r\n [attr.aria-controls]=\"tab.paneId\"\r\n [attr.aria-selected]=\"true === tab?.active ? true : false\"\r\n [attr.aria-disabled]=\"true === tab?.disabled ? true : false\"\r\n role=\"tab\"\r\n class=\"fwe-legacy-tab-link\"\r\n (click)=\"showTabPane(tab.paneId)\"\r\n [class.fwe-can-swap-icon]=\"2 === tabs.length && 1 === i\"\r\n >\r\n <i [class]=\"'fwe-icon ' + tab.icon\"></i>\r\n <span>{{ tab.name }}</span>\r\n </a>\r\n </ng-container>\r\n </li>\r\n </ul>\r\n <div class=\"fwe-legacy-tab-panel-content\">\r\n <ng-container *ngTemplateOutlet=\"tabPanelContent\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"viewType !== 'legacy'\">\r\n <div class=\"fng-tab-bar\" role=\"tablist\">\r\n <div class=\"fng-tab-scroller\" #scroller>\r\n <div\r\n class=\"fng-tab-scroller-scroll-area fng-tab-scroller-scroll-area--scroll\"\r\n [class.fng-tab-scroller-scroll-area--compact]=\"useCompactDensity\"\r\n #scrollAera\r\n >\r\n <div class=\"fng-tab-scroller-scroll-content\" [class.fng-tab-scroller-scroll-content--with-divider]=\"showDivider\" #scrollContent>\r\n <button\r\n *ngFor=\"let tab of tabs; let i = index\"\r\n role=\"tab\"\r\n class=\"fng-tab\"\r\n [id]=\"componentId + '-tab-' + i\"\r\n [attr.aria-controls]=\"tab.paneId\"\r\n [attr.aria-selected]=\"true === tab?.active ? true : false\"\r\n [tabindex]=\"i === 0 ? 0 : -1\"\r\n [class.fng-tab--active]=\"tab?.active\"\r\n [class.fng-tab--disabled]=\"tab?.disabled\"\r\n (click)=\"handleTabScroll($event, i); showTabPane(tab.paneId)\"\r\n >\r\n <span class=\"fng-tab-content\">\r\n <span class=\"fng-tab-text-label\">{{ tab.name }}</span>\r\n </span>\r\n <span class=\"fng-tab-indicator\" [class.fng-tab-indicator--active]=\"tab?.active\">\r\n <span class=\"fng-tab-indicator-content fng-tab-indicator-content--underline\"></span>\r\n </span>\r\n </button>\r\n <div class=\"fng-tab-scroller-divider-line\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"fng-tab-panel-content\">\r\n <ng-container *ngTemplateOutlet=\"tabPanelContent\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #tabPanelContent>\r\n <ng-content></ng-content>\r\n</ng-template>\r\n", styles: [".fwe-legacy-tabs{margin:48px 0;width:100%;height:100%}.fwe-legacy-tab-bar{display:flex;flex-wrap:nowrap;width:75%;padding-left:0;margin-bottom:0;margin-top:0;list-style:none;font-size:var(--fwe-font-size-base)}.fwe-legacy-tab-bar.fwe-legacy-tab-bar-full-width{width:100%}.fwe-legacy-tab-bar.fwe-legacy-tab-items-fill .fwe-legacy-tab-item{flex:1 1 auto}.fwe-legacy-tab-bar.fwe-legacy-tab-items-equal-width .fwe-legacy-tab-item{flex:1 1 0}.fwe-legacy-tab-item{height:48px;max-height:48px;background-color:var(--fwe-gray-300);border-right:2px solid var(--fwe-gray-100);text-align:center}.fwe-legacy-tab-item:last-child{border-right:none}.fwe-legacy-tab-item.fwe-active{background-color:var(--fwe-white)}.fwe-legacy-tab-item.fwe-active .fwe-legacy-tab-link{color:var(--fwe-caerul)}.fwe-legacy-tab-item.fwe-disabled{background-color:var(--fwe-control-disabled)}.fwe-legacy-tab-item.fwe-disabled .fwe-legacy-tab-link{color:var(--fwe-text-disabled)}.fwe-legacy-tab-item:not(.fwe-active){border-bottom:2px solid var(--fwe-gray-100)}.fwe-legacy-tab-item:not(.fwe-active) .fwe-legacy-tab-link{padding:11px 16px}.fwe-legacy-tab-item:not(.fwe-active) .fwe-legacy-tab-link:hover{color:var(--fwe-text);background-color:var(--fwe-control-hover)}.fwe-legacy-tab-item:not(.fwe-active) .fwe-legacy-tab-link:active{background-color:var(--fwe-control-active)}.fwe-legacy-tab-link{display:inline-block;width:100%;height:46px;padding:11px 16px 13px;line-height:24px;cursor:pointer;color:var(--fwe-black);white-space:nowrap}.fwe-legacy-tab-link i.fwe-icon{padding-right:8px;vertical-align:initial}.fwe-legacy-tab-link i.fwe-icon.fwe-icon-lg{position:relative;top:3px}.fwe-legacy-tab-panel-content{padding:48px 24px;background-color:var(--fwe-white);height:100%;overflow:auto}@media (max-width: 375px){.fwe-legacy-tab-bar{justify-content:space-between;background-color:var(--fwe-white);width:100%}.fwe-legacy-tab-item{background-color:var(--fwe-white);border-right:2px solid var(--fwe-white)}.fwe-legacy-tab-item:not(.fwe-active){border-bottom:2px solid var(--fwe-white)}.fwe-legacy-tab-item:not(.fwe-active) .fwe-legacy-tab-link{color:var(--fwe-hero-gray)}.fwe-legacy-tab-item:not(.fwe-active) .fwe-legacy-tab-link i.fwe-icon{color:var(--fwe-hero-gray)}.fwe-legacy-tab-link.fwe-can-swap-icon{direction:rtl}.fwe-legacy-tab-link.fwe-can-swap-icon i.fwe-icon{padding-left:8px;padding-right:0}}.fng-tab-panel-content{padding:48px 24px;background-color:var(--fwe-white);height:100%;overflow:auto}.fng-tab-bar{width:100%}.fng-tab-scroller{overflow-y:hidden}.fng-tab-scroller-scroll-area{position:relative;display:flex;overflow-x:hidden}.fng-tab-scroller-scroll-area::-webkit-scrollbar{display:none}.fng-tab-scroller-scroll-area--scroll{overflow-x:scroll}.fng-tab-scroller-scroll-content{position:relative;display:flex;flex:1 0 auto;transform:none;will-change:transform;padding:0 17px 0 16px}.fng-tab-scroller-scroll-content--with-divider .fng-tab-scroller-divider-line{display:block}.fng-tab-scroller--animating .fng-tab-scroller-scroll-content{transition:.25s transform cubic-bezier(.4,0,.2,1)}.fng-tab-scroller-divider-line{display:none;position:absolute;inset:0;border-bottom:1px solid var(--fwe-control)}.fng-tab-indicator{display:flex;position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;pointer-events:none;z-index:1}.fng-tab-indicator-content{transform-origin:left;opacity:0}.fng-tab-indicator-content--underline{align-self:flex-end;box-sizing:border-box;width:100%;border-top-style:solid}.fng-tab-indicator .fng-tab-indicator-content{transition:.25s transform cubic-bezier(.4,0,.2,1)}.fng-tab-indicator .fng-tab-indicator-content--underline{border-top:4px solid var(--fwe-caerul)}.fng-tab-indicator--active .fng-tab-indicator-content{opacity:1}.fng-tab{position:relative;display:flex;flex:1 0 auto;justify-content:center;padding:0;margin:0;border:none;outline:none;background:none;text-align:center;white-space:nowrap;cursor:pointer;-webkit-appearance:none;appearance:none;z-index:1;height:36px}.fng-tab:hover .fng-tab-text-label{color:var(--fwe-caerul)}.fng-tab:active .fng-tab-text-label{color:var(--fwe-hero-active)}.fng-tab:not(:last-child){margin-right:32px}.fng-tab::-moz-focus-inner{padding:0;border:0}.fng-tab .fng-tab-text-label{color:var(--fwe-text)}.fng-tab--active .fng-tab-text-label{color:var(--fwe-caerul)}.fng-tab--disabled .fng-tab-text-label{color:var(--fwe-text-disabled)}.fng-tab-content{position:relative;display:flex;align-items:flex-start;justify-content:center;height:inherit;pointer-events:none}.fng-tab-text-label{display:inline-block;z-index:2}.fng-tab-scroller-scroll-area:not(.fng-tab-scroller-scroll-area--compact) .fng-tab{flex:none}.fng-tab-scroller-scroll-area:not(.fng-tab-scroller-scroll-area--compact) .fng-tab:not(:last-child){margin-right:64px}.fng-tab-scroller-scroll-area:not(.fng-tab-scroller-scroll-area--compact) .fng-tab-scroller-scroll-content{padding:0 32px}.fng-tab-scroller-scroll-area:not(.fng-tab-scroller-scroll-area--compact) .fng-tab-scroller-divider-line{padding-right:64px}.fng-tab-scroller-scroll-area.fng-tab-scroller-scroll-area--scroll{overflow-x:hidden}@media (hover: none){.fng-tab-scroller-scroll-area.fng-tab-scroller-scroll-area--scroll{overflow-x:auto}@-moz-document url-prefix(){.fng-tab-scroller-scroll-area.fng-tab-scroller-scroll-area--scroll{scrollbar-width:thin;scrollbar-color:var(--fwe-control-scrollbar) transparent}}}@media (hover: none) and (pointer: fine){.fng-tab-scroller-scroll-area.fng-tab-scroller-scroll-area--scroll::-webkit-scrollbar{width:14px}.fng-tab-scroller-scroll-area.fng-tab-scroller-scroll-area--scroll::-webkit-scrollbar-track{background:transparent}.fng-tab-scroller-scroll-area.fng-tab-scroller-scroll-area--scroll::-webkit-scrollbar-thumb{overflow:visible;background-color:var(--fwe-control-scrollbar);border:3px solid rgba(242,243,245,0);-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:8px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
427
|
-
}
|
|
428
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: FngTabsComponent, decorators: [{
|
|
429
|
-
type: Component,
|
|
430
|
-
args: [{ standalone: true, imports: [CommonModule], selector: 'fng-tabs', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"viewType === 'legacy'\">\r\n <div class=\"fwe-legacy-tabs\">\r\n <ul\r\n role=\"tablist\"\r\n class=\"fwe-legacy-tab-bar\"\r\n [class.fwe-legacy-tab-bar-full-width]=\"config?.tabBar?.fullWidth\"\r\n [class.fwe-legacy-tab-items-equal-width]=\"'equal' === config?.tabItems?.appearance\"\r\n [class.fwe-legacy-tab-items-fill]=\"'fill' === config?.tabItems?.appearance\"\r\n >\r\n <li\r\n *ngFor=\"let tab of tabs; let i = index\"\r\n class=\"fwe-legacy-tab-item\"\r\n [ngClass]=\"{ 'fwe-active': tab?.active, 'fwe-disabled': tab?.disabled }\"\r\n >\r\n <ng-container *ngIf=\"null == tab?.icon\">\r\n <a\r\n [id]=\"componentId + '-tab-' + i\"\r\n [attr.aria-controls]=\"tab.paneId\"\r\n [attr.aria-selected]=\"true === tab?.active ? true : false\"\r\n [attr.aria-disabled]=\"true === tab?.disabled ? true : false\"\r\n role=\"tab\"\r\n class=\"fwe-legacy-tab-link\"\r\n (click)=\"showTabPane(tab.paneId)\"\r\n >{{ tab.name }}</a\r\n >\r\n </ng-container>\r\n <ng-container *ngIf=\"null != tab?.icon\">\r\n <a\r\n [id]=\"componentId + '-tab-' + i\"\r\n [attr.aria-controls]=\"tab.paneId\"\r\n [attr.aria-selected]=\"true === tab?.active ? true : false\"\r\n [attr.aria-disabled]=\"true === tab?.disabled ? true : false\"\r\n role=\"tab\"\r\n class=\"fwe-legacy-tab-link\"\r\n (click)=\"showTabPane(tab.paneId)\"\r\n [class.fwe-can-swap-icon]=\"2 === tabs.length && 1 === i\"\r\n >\r\n <i [class]=\"'fwe-icon ' + tab.icon\"></i>\r\n <span>{{ tab.name }}</span>\r\n </a>\r\n </ng-container>\r\n </li>\r\n </ul>\r\n <div class=\"fwe-legacy-tab-panel-content\">\r\n <ng-container *ngTemplateOutlet=\"tabPanelContent\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"viewType !== 'legacy'\">\r\n <div class=\"fng-tab-bar\" role=\"tablist\">\r\n <div class=\"fng-tab-scroller\" #scroller>\r\n <div\r\n class=\"fng-tab-scroller-scroll-area fng-tab-scroller-scroll-area--scroll\"\r\n [class.fng-tab-scroller-scroll-area--compact]=\"useCompactDensity\"\r\n #scrollAera\r\n >\r\n <div class=\"fng-tab-scroller-scroll-content\" [class.fng-tab-scroller-scroll-content--with-divider]=\"showDivider\" #scrollContent>\r\n <button\r\n *ngFor=\"let tab of tabs; let i = index\"\r\n role=\"tab\"\r\n class=\"fng-tab\"\r\n [id]=\"componentId + '-tab-' + i\"\r\n [attr.aria-controls]=\"tab.paneId\"\r\n [attr.aria-selected]=\"true === tab?.active ? true : false\"\r\n [tabindex]=\"i === 0 ? 0 : -1\"\r\n [class.fng-tab--active]=\"tab?.active\"\r\n [class.fng-tab--disabled]=\"tab?.disabled\"\r\n (click)=\"handleTabScroll($event, i); showTabPane(tab.paneId)\"\r\n >\r\n <span class=\"fng-tab-content\">\r\n <span class=\"fng-tab-text-label\">{{ tab.name }}</span>\r\n </span>\r\n <span class=\"fng-tab-indicator\" [class.fng-tab-indicator--active]=\"tab?.active\">\r\n <span class=\"fng-tab-indicator-content fng-tab-indicator-content--underline\"></span>\r\n </span>\r\n </button>\r\n <div class=\"fng-tab-scroller-divider-line\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"fng-tab-panel-content\">\r\n <ng-container *ngTemplateOutlet=\"tabPanelContent\"></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n\r\n<ng-template #tabPanelContent>\r\n <ng-content></ng-content>\r\n</ng-template>\r\n", styles: [".fwe-legacy-tabs{margin:48px 0;width:100%;height:100%}.fwe-legacy-tab-bar{display:flex;flex-wrap:nowrap;width:75%;padding-left:0;margin-bottom:0;margin-top:0;list-style:none;font-size:var(--fwe-font-size-base)}.fwe-legacy-tab-bar.fwe-legacy-tab-bar-full-width{width:100%}.fwe-legacy-tab-bar.fwe-legacy-tab-items-fill .fwe-legacy-tab-item{flex:1 1 auto}.fwe-legacy-tab-bar.fwe-legacy-tab-items-equal-width .fwe-legacy-tab-item{flex:1 1 0}.fwe-legacy-tab-item{height:48px;max-height:48px;background-color:var(--fwe-gray-300);border-right:2px solid var(--fwe-gray-100);text-align:center}.fwe-legacy-tab-item:last-child{border-right:none}.fwe-legacy-tab-item.fwe-active{background-color:var(--fwe-white)}.fwe-legacy-tab-item.fwe-active .fwe-legacy-tab-link{color:var(--fwe-caerul)}.fwe-legacy-tab-item.fwe-disabled{background-color:var(--fwe-control-disabled)}.fwe-legacy-tab-item.fwe-disabled .fwe-legacy-tab-link{color:var(--fwe-text-disabled)}.fwe-legacy-tab-item:not(.fwe-active){border-bottom:2px solid var(--fwe-gray-100)}.fwe-legacy-tab-item:not(.fwe-active) .fwe-legacy-tab-link{padding:11px 16px}.fwe-legacy-tab-item:not(.fwe-active) .fwe-legacy-tab-link:hover{color:var(--fwe-text);background-color:var(--fwe-control-hover)}.fwe-legacy-tab-item:not(.fwe-active) .fwe-legacy-tab-link:active{background-color:var(--fwe-control-active)}.fwe-legacy-tab-link{display:inline-block;width:100%;height:46px;padding:11px 16px 13px;line-height:24px;cursor:pointer;color:var(--fwe-black);white-space:nowrap}.fwe-legacy-tab-link i.fwe-icon{padding-right:8px;vertical-align:initial}.fwe-legacy-tab-link i.fwe-icon.fwe-icon-lg{position:relative;top:3px}.fwe-legacy-tab-panel-content{padding:48px 24px;background-color:var(--fwe-white);height:100%;overflow:auto}@media (max-width: 375px){.fwe-legacy-tab-bar{justify-content:space-between;background-color:var(--fwe-white);width:100%}.fwe-legacy-tab-item{background-color:var(--fwe-white);border-right:2px solid var(--fwe-white)}.fwe-legacy-tab-item:not(.fwe-active){border-bottom:2px solid var(--fwe-white)}.fwe-legacy-tab-item:not(.fwe-active) .fwe-legacy-tab-link{color:var(--fwe-hero-gray)}.fwe-legacy-tab-item:not(.fwe-active) .fwe-legacy-tab-link i.fwe-icon{color:var(--fwe-hero-gray)}.fwe-legacy-tab-link.fwe-can-swap-icon{direction:rtl}.fwe-legacy-tab-link.fwe-can-swap-icon i.fwe-icon{padding-left:8px;padding-right:0}}.fng-tab-panel-content{padding:48px 24px;background-color:var(--fwe-white);height:100%;overflow:auto}.fng-tab-bar{width:100%}.fng-tab-scroller{overflow-y:hidden}.fng-tab-scroller-scroll-area{position:relative;display:flex;overflow-x:hidden}.fng-tab-scroller-scroll-area::-webkit-scrollbar{display:none}.fng-tab-scroller-scroll-area--scroll{overflow-x:scroll}.fng-tab-scroller-scroll-content{position:relative;display:flex;flex:1 0 auto;transform:none;will-change:transform;padding:0 17px 0 16px}.fng-tab-scroller-scroll-content--with-divider .fng-tab-scroller-divider-line{display:block}.fng-tab-scroller--animating .fng-tab-scroller-scroll-content{transition:.25s transform cubic-bezier(.4,0,.2,1)}.fng-tab-scroller-divider-line{display:none;position:absolute;inset:0;border-bottom:1px solid var(--fwe-control)}.fng-tab-indicator{display:flex;position:absolute;top:0;left:0;justify-content:center;width:100%;height:100%;pointer-events:none;z-index:1}.fng-tab-indicator-content{transform-origin:left;opacity:0}.fng-tab-indicator-content--underline{align-self:flex-end;box-sizing:border-box;width:100%;border-top-style:solid}.fng-tab-indicator .fng-tab-indicator-content{transition:.25s transform cubic-bezier(.4,0,.2,1)}.fng-tab-indicator .fng-tab-indicator-content--underline{border-top:4px solid var(--fwe-caerul)}.fng-tab-indicator--active .fng-tab-indicator-content{opacity:1}.fng-tab{position:relative;display:flex;flex:1 0 auto;justify-content:center;padding:0;margin:0;border:none;outline:none;background:none;text-align:center;white-space:nowrap;cursor:pointer;-webkit-appearance:none;appearance:none;z-index:1;height:36px}.fng-tab:hover .fng-tab-text-label{color:var(--fwe-caerul)}.fng-tab:active .fng-tab-text-label{color:var(--fwe-hero-active)}.fng-tab:not(:last-child){margin-right:32px}.fng-tab::-moz-focus-inner{padding:0;border:0}.fng-tab .fng-tab-text-label{color:var(--fwe-text)}.fng-tab--active .fng-tab-text-label{color:var(--fwe-caerul)}.fng-tab--disabled .fng-tab-text-label{color:var(--fwe-text-disabled)}.fng-tab-content{position:relative;display:flex;align-items:flex-start;justify-content:center;height:inherit;pointer-events:none}.fng-tab-text-label{display:inline-block;z-index:2}.fng-tab-scroller-scroll-area:not(.fng-tab-scroller-scroll-area--compact) .fng-tab{flex:none}.fng-tab-scroller-scroll-area:not(.fng-tab-scroller-scroll-area--compact) .fng-tab:not(:last-child){margin-right:64px}.fng-tab-scroller-scroll-area:not(.fng-tab-scroller-scroll-area--compact) .fng-tab-scroller-scroll-content{padding:0 32px}.fng-tab-scroller-scroll-area:not(.fng-tab-scroller-scroll-area--compact) .fng-tab-scroller-divider-line{padding-right:64px}.fng-tab-scroller-scroll-area.fng-tab-scroller-scroll-area--scroll{overflow-x:hidden}@media (hover: none){.fng-tab-scroller-scroll-area.fng-tab-scroller-scroll-area--scroll{overflow-x:auto}@-moz-document url-prefix(){.fng-tab-scroller-scroll-area.fng-tab-scroller-scroll-area--scroll{scrollbar-width:thin;scrollbar-color:var(--fwe-control-scrollbar) transparent}}}@media (hover: none) and (pointer: fine){.fng-tab-scroller-scroll-area.fng-tab-scroller-scroll-area--scroll::-webkit-scrollbar{width:14px}.fng-tab-scroller-scroll-area.fng-tab-scroller-scroll-area--scroll::-webkit-scrollbar-track{background:transparent}.fng-tab-scroller-scroll-area.fng-tab-scroller-scroll-area--scroll::-webkit-scrollbar-thumb{overflow:visible;background-color:var(--fwe-control-scrollbar);border:3px solid rgba(242,243,245,0);-webkit-background-clip:padding-box;background-clip:padding-box;border-radius:8px}}\n"] }]
|
|
431
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: Document, decorators: [{
|
|
432
|
-
type: Inject,
|
|
433
|
-
args: [DOCUMENT]
|
|
434
|
-
}] }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }], propDecorators: { viewType: [{
|
|
435
|
-
type: Input,
|
|
436
|
-
args: ['fngTabsViewType']
|
|
437
|
-
}], showDivider: [{
|
|
438
|
-
type: Input,
|
|
439
|
-
args: ['fngTabsUseBottomDivider']
|
|
440
|
-
}], config: [{
|
|
441
|
-
type: Input
|
|
442
|
-
}], fngBeforeTabChange: [{
|
|
443
|
-
type: Output
|
|
444
|
-
}], fngTabChange: [{
|
|
445
|
-
type: Output
|
|
446
|
-
}], panes: [{
|
|
447
|
-
type: ContentChildren,
|
|
448
|
-
args: [FngTabPaneComponent]
|
|
449
|
-
}], scroller: [{
|
|
450
|
-
type: ViewChild,
|
|
451
|
-
args: ['scroller']
|
|
452
|
-
}], scrollAera: [{
|
|
453
|
-
type: ViewChild,
|
|
454
|
-
args: ['scrollAera']
|
|
455
|
-
}], scrollContent: [{
|
|
456
|
-
type: ViewChild,
|
|
457
|
-
args: ['scrollContent']
|
|
458
|
-
}] } });
|
|
459
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy90YWJzL3RhYnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvdGFicy90YWJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsZUFBZSxFQUVmLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFHTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7O0FBNkRwRSxNQUFNLE9BQU8sZ0JBQWdCO2FBQ3BCLFdBQU0sR0FBRyxDQUFDLEFBQUosQ0FBSztJQXdCbEIsWUFDVSxLQUFpQixFQUNDLFFBQWtCLEVBQ3BDLFFBQW1CLEVBQ25CLEVBQXFCO1FBSHJCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ3BDLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUEzQkwsYUFBUSxHQUFtQixZQUFZLENBQUM7UUFDaEMsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFdEQsV0FBTSxHQUFnQyxJQUFJLENBQUM7UUFDMUMsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQTJCLENB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LENBQUMsWUFDYixVQUFVLG1CQUdILHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7OzBCQTZCbEMsTUFBTTsyQkFBQyxRQUFRO2lHQXpCUSxRQUFRO3NCQUFqQyxLQUFLO3VCQUFDLGlCQUFpQjtnQkFDVSxXQUFXO3NCQUE1QyxLQUFLO3VCQUFDLHlCQUF5QjtnQkFFdkIsTUFBTTtzQkFBZCxLQUFLO2dCQUNJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUUrQixLQUFLO3NCQUExQyxlQUFlO3VCQUFDLG1CQUFtQjtnQkFDYixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ0ksVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNLLGFBQWE7c0JBQXhDLFNBQVM7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyQ29udGVudEluaXQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkcmVuLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBSZW5kZXJlcjIsXHJcbiAgVmlld0NoaWxkLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IG5vb3AsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgRm5nVGFiUGFuZUNvbXBvbmVudCB9IGZyb20gJy4vdGFiLXBhbmUvdGFiLXBhbmUuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRm5nVGFiIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgcGFuZUlkOiBzdHJpbmcgfCBudWxsO1xyXG4gIGFjdGl2ZT86IGJvb2xlYW47XHJcbiAgaWNvbj86IHN0cmluZyB8IG51bGw7XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG59XHJcblxyXG4vLyBmaWxsOiB1c2UgdGhlIHJlbWFpbmluZyBzcGFjZSBhbmQgYWRkIGluIHNhbWUgcHJvcG9ydGlvbiB0byBldmVyeSB0YWIgaXRlbVxyXG4vLyBlcXVhbDogbWFrZSBhbGwgdGFiIGl0ZW1zIHNhbWUgd2lkdGggKGFzIHRoZSBvbmUgd2l0aCBsYXJnZXN0IGNvbnRlbnQpXHJcbmV4cG9ydCB0eXBlIEZuZ1RhYkl0ZW1BcHBlYXJhbmNlID0gJ2ZpbGwnIHwgJ2VxdWFsJyB8ICdkZWZhdWx0JztcclxuXHJcbi8vIGxlZ2FjeTogcmVjb21tZW5kZWQgZm9yIGRlc2t0b3Agb25seSBhcHBsaWNhdGlvbnNcclxuLy8gcmVzcG9uc2l2ZTogZGVza3RvcCwgdGFibGV0LCBtb2JpbGUgd2l0aCBzY3JvbGxhYmxlIHRhYnNcclxuZXhwb3J0IHR5cGUgRm5nVGFiVmlld1R5cGUgPSAnbGVnYWN5JyB8ICdyZXNwb25zaXZlJztcclxuXHJcbi8vIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgbGVnYWN5IHRhYiB2aWV3IHR5cGVcclxuZXhwb3J0IGludGVyZmFjZSBGbmdUYWJzQ29uZmlndXJhdGlvbiB7XHJcbiAgdGFiQmFyPzoge1xyXG4gICAgZnVsbFdpZHRoPzogYm9vbGVhbjtcclxuICB9O1xyXG4gIHRhYkl0ZW1zPzoge1xyXG4gICAgYXBwZWFyYW5jZTogRm5nVGFiSXRlbUFwcGVhcmFuY2U7XHJcbiAgfTtcclxufVxyXG5cclxuLy8gcHJvdmlkZXMgZGV0YWlscyBhYm91dCB0aGUgbGVmdCBhbmQgcmlnaHQgZWRnZXMgb2YgdGhlIHRhYiBlbGVtZW50IGFuZCB0aGUgdGFiIGNvbnRlbnQgZWxlbWVudFxyXG4vLyB0aGVzZSB2YWx1ZXMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB2aXN1YWwgcG9zaXRpb24gb2YgdGhlIHRhYiB3aXRoIHJlc3BlY3Qgb2YgaXRzIHBhcmVudCBjb250YWluZXJcclxuZXhwb3J0IGludGVyZmFjZSBGbmdUYWJEaW1lbnNpb25zIHtcclxuICByb290TGVmdDogbnVtYmVyO1xyXG4gIHJvb3RSaWdodDogbnVtYmVyO1xyXG4gIGNvbnRlbnRMZWZ0OiBudW1iZXI7XHJcbiAgY29udGVudFJpZ2h0OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRm5nVGFiU2Nyb2xsQW5pbWF0aW9uIHtcclxuICBmaW5hbFNjcm9sbFBvc2l0aW9uOiBudW1iZXI7XHJcbiAgc2Nyb2xsRGVsdGE6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGbmdUYWJTY3JvbGxIb3Jpem9udGFsRWRnZXMge1xyXG4gIGxlZnQ6IG51bWJlcjtcclxuICByaWdodDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZuZ0JlZm9yZVRhYkNoYW5nZUV2ZW50IHtcclxuICBvazogKCkgPT4gdm9pZDtcclxuICBjYW5jZWw6ICgpID0+IHZvaWQ7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXHJcbiAgc2VsZWN0b3I6ICdmbmctdGFicycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYnMuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGbmdUYWJzQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBzdGF0aWMgbmV4dElkID0gMDtcclxuICBASW5wdXQoJ2ZuZ1RhYnNWaWV3VHlwZScpIHZpZXdUeXBlOiBGbmdUYWJWaWV3VHlwZSA9ICdyZXNwb25zaXZlJztcclxuICBASW5wdXQoJ2ZuZ1RhYnNVc2VCb3R0b21EaXZpZGVyJykgc2hvd0RpdmlkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgY29uZmlnOiBGbmdUYWJzQ29uZmlndXJhdGlvbiB8IG51bGwgPSBudWxsO1xyXG4gIEBPdXRwdXQoKSBmbmdCZWZvcmVUYWJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEZuZ0JlZm9yZVRhYkNoYW5nZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBmbmdUYWJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcHJldmlvdXM6IHN0cmluZzsgY3VycmVudDogc3RyaW5nIH0+KCk7XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oRm5nVGFiUGFuZUNvbXBvbmVudCkgcGFuZXM6IFF1ZXJ5TGlzdDxGbmdUYWJQYW5lQ29tcG9uZW50PiB8IHVuZGVmaW5lZDtcclxuICBAVmlld0NoaWxkKCdzY3JvbGxlcicpIHNjcm9sbGVyOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xyXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbEFlcmEnKSBzY3JvbGxBZXJhOiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xyXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbENvbnRlbnQnKSBzY3JvbGxDb250ZW50OiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICBjb21wb25lbnRJZCA9IGB0YWJzLSR7KytGbmdUYWJzQ29tcG9uZW50Lm5leHRJZH1gO1xyXG4gIHRhYnM6IEZuZ1RhYltdID0gW107XHJcbiAgdXNlQ29tcGFjdERlbnNpdHk6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByaXZhdGUgYWN0aXZlVGFiOiBGbmdUYWIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBlbGVtU2Nyb2xsZXI6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgZWxlbVNjcm9sbEFyZWE6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgZWxlbVNjcm9sbENvbnRlbnQ6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0ZWRXaW5kb3c6IFdpbmRvdyB8IG51bGw7XHJcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlciE6IFJlc2l6ZU9ic2VydmVyO1xyXG4gIHByaXZhdGUgY29tcGxldGU6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICB0aGlzLmluamVjdGVkV2luZG93ID0gdGhpcy5kb2N1bWVudC5kZWZhdWx0VmlldztcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgIHRoaXMuaW5pdFRhYnMoKTtcclxuICAgIGlmIChudWxsID09IHRoaXMuYWN0aXZlVGFiKSB7XHJcbiAgICAgIHRoaXMucGFuZXM/Lm1hcCgocGFuZSwgaSkgPT4ge1xyXG4gICAgICAgIGlmICgwID09PSBpKSB7XHJcbiAgICAgICAgICBwYW5lLmlzVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzPy5maW5kKHBhbmUgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVRhYikge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVGFiLnBhbmVJZCAhPSBudWxsICYmIHBhbmUudGFiUGFuZUlkID09PSB0aGlzLmFjdGl2ZVRhYi5wYW5lSWQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAocGFuZSkge1xyXG4gICAgICAgIHBhbmUuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5lbGVtU2Nyb2xsZXIgPSB0aGlzLnNjcm9sbGVyPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgdGhpcy5lbGVtU2Nyb2xsQXJlYSA9IHRoaXMuc2Nyb2xsQWVyYT8ubmF0aXZlRWxlbWVudDtcclxuICAgIHRoaXMuZWxlbVNjcm9sbENvbnRlbnQgPSB0aGlzLnNjcm9sbENvbnRlbnQ/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAodGhpcy5lbGVtU2Nyb2xsZXIgPT0gbnVsbCB8fCB0aGlzLmVsZW1TY3JvbGxBcmVhID09IG51bGwgfHwgdGhpcy5lbGVtU2Nyb2xsQ29udGVudCA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGluaXRpYWxXaWR0aCA9IHRoaXMuZWxlbVNjcm9sbEFyZWEub2Zmc2V0V2lkdGg7XHJcbiAgICBpZiAoaW5pdGlhbFdpZHRoICE9IG51bGwgJiYgaW5pdGlhbFdpZHRoID4gNzY4KSB7XHJcbiAgICAgIHRoaXMudXNlQ29tcGFjdERlbnNpdHkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVsZW1TY3JvbGxBcmVhID09IG51bGwpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmVsZW1TY3JvbGxBcmVhLm9mZnNldFdpZHRoO1xyXG4gICAgICBpZiAod2lkdGggIT0gbnVsbCAmJiB3aWR0aCA+IDc2OCAmJiB0aGlzLnVzZUNvbXBhY3REZW5zaXR5ID09PSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy51c2VDb21wYWN0RGVuc2l0eSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9IGVsc2UgaWYgKHdpZHRoICE9IG51bGwgJiYgd2lkdGggPD0gNzY4ICYmIHRoaXMudXNlQ29tcGFjdERlbnNpdHkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy51c2VDb21wYWN0RGVuc2l0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmVsZW1TY3JvbGxBcmVhICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuZWxlbVNjcm9sbEFyZWEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaGFuZGxlVGFiUGFuZUNoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb21wbGV0ZS5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5jb21wbGV0ZS51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgc2hvd1RhYlBhbmUoaWQ6IHN0cmluZyB8IG51bGwpIHtcclxuICAgIGlmIChpZCA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lcz8uZmluZChwID0+IHAudGFiUGFuZUlkID09PSBpZCk7XHJcbiAgICBjb25zdCBoYW5kbGVUYWJDaGFuZ2UgPSAoaWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAocGFuZSAhPSBudWxsICYmIHBhbmUuZGlzYWJsZWQgIT09IHRydWUpIHtcclxuICAgICAgICB0aGlzLnBhbmVzPy5tYXAocCA9PiB7XHJcbiAgICAgICAgICBwLmlzVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHBhbmUuaXNWaXNpYmxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy50YWJzLm1hcCh0YWIgPT4ge1xyXG4gICAgICAgICAgaWYgKHRhYi5wYW5lSWQgIT09IHBhbmUudGFiUGFuZUlkKSB7XHJcbiAgICAgICAgICAgIHRhYi5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRhYi5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZm5nVGFiQ2hhbmdlLmVtaXQoe1xyXG4gICAgICAgICAgcHJldmlvdXM6IHRoaXMuYWN0aXZlVGFiPy5wYW5lSWQgfHwgJycsXHJcbiAgICAgICAgICBjdXJyZW50OiBpZFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlVGFiID0gdGhpcy50YWJzLmZpbmQodGFiID0+ICEhdGFiLmFjdGl2ZSk7XHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMuZm5nQmVmb3JlVGFiQ2hhbmdlPy5vYnNlcnZlcnM/Lmxlbmd0aCA+IDAgJiYgcGFuZT8uZGlzYWJsZWQgIT09IHRydWUpIHtcclxuICAgICAgdGhpcy5mbmdCZWZvcmVUYWJDaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgb2s6ICgpID0+IHtcclxuICAgICAgICAgIGhhbmRsZVRhYkNoYW5nZShpZCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5jZWw6ICgpID0+IHtcclxuICAgICAgICAgIG5vb3AoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaGFuZGxlVGFiQ2hhbmdlKGlkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZVRhYlNjcm9sbChldmVudDogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5lbGVtU2Nyb2xsQ29udGVudCA9PSBudWxsIHx8IHRoaXMuZWxlbVNjcm9sbEFyZWEgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzY3JvbGxDb250ZW50V2lkdGggPSB0aGlzLmVsZW1TY3JvbGxDb250ZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgY29uc3Qgc2Nyb2xsQXJlYVdpZHRoID0gdGhpcy5lbGVtU2Nyb2xsQXJlYS5vZmZzZXRXaWR0aDtcclxuXHJcbiAgICAvLyBjaGVjayBpZiBubyBzY3JvbGwgaXMgbmVlZGVkXHJcbiAgICBpZiAoc2Nyb2xsQXJlYVdpZHRoID4gc2Nyb2xsQ29udGVudFdpZHRoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjaGVjayBpbmRleFxyXG4gICAgaWYgKCF0aGlzLmluZGV4SXNJblJhbmdlKGluZGV4KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWx3YXlzIHNjcm9sbCB0byAwIGlmIHNjcm9sbGluZyB0byB0aGUgZmlyc3QgdGFiXHJcbiAgICBpZiAoaW5kZXggPT09IDApIHtcclxuICAgICAgdGhpcy5zY3JvbGxUbygwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGFsd2F5cyBzY3JvbGwgdG8gdGhlIG1heCB2YWx1ZSBpZiBzY3JvbGxpbmcgdG8gdGhlIGxhc3QgdGFiXHJcbiAgICBpZiAoaW5kZXggPT09IHRoaXMudGFicy5sZW5ndGggLSAxKSB7XHJcbiAgICAgIHRoaXMuc2Nyb2xsVG8odGhpcy5lbGVtU2Nyb2xsQ29udGVudC5vZmZzZXRXaWR0aCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJyZW50VGFiOiBIVE1MRWxlbWVudCA9IGV2ZW50LnRhcmdldDtcclxuICAgIHRoaXMuc2Nyb2xsSW50b1ZpZXcoaW5kZXgsIGN1cnJlbnRUYWIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0VGFicygpIHtcclxuICAgIHRoaXMudGFicyA9IFtdO1xyXG4gICAgdGhpcy5wYW5lcz8ubWFwKChwYW5lLCBpKSA9PiB7XHJcbiAgICAgIHBhbmUudGFiSWQgPSB0aGlzLmNvbXBvbmVudElkICsgJy10YWItJyArIGk7XHJcbiAgICAgIGNvbnN0IHRhYjogRm5nVGFiID0ge1xyXG4gICAgICAgIG5hbWU6IG51bGwgIT0gcGFuZS5uYW1lID8gcGFuZS5uYW1lIDogJycsXHJcbiAgICAgICAgcGFuZUlkOiBudWxsICE9IHBhbmUudGFiUGFuZUlkID8gcGFuZS50YWJQYW5lSWQgOiBudWxsLFxyXG4gICAgICAgIGljb246IG51bGwgIT0gcGFuZS5pY29uID8gcGFuZS5pY29uIDogbnVsbCxcclxuICAgICAgICBhY3RpdmU6IG51bGwgIT0gcGFuZS5hY3RpdmUgPyBwYW5lLmFjdGl2ZSA6IGZhbHNlLFxyXG4gICAgICAgIGRpc2FibGVkOiBudWxsICE9IHBhbmUuZGlzYWJsZWQgPyBwYW5lLmRpc2FibGVkIDogZmFsc2VcclxuICAgICAgfTtcclxuICAgICAgdGhpcy50YWJzLnB1c2godGFiKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuaW5pdEFjdGl2ZVRhYigpO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRBY3RpdmVUYWIoKSB7XHJcbiAgICBjb25zdCBhY3RpdmVUYWI6IEZuZ1RhYiB8IHVuZGVmaW5lZCA9IHRoaXMudGFicy5maW5kKCh0YWI6IEZuZ1RhYikgPT4gISF0YWIuYWN0aXZlKTtcclxuICAgIGlmICghYWN0aXZlVGFiICYmIDAgPCB0aGlzLnRhYnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMudGFic1swXSA9IHsgLi4udGhpcy50YWJzWzBdLCBhY3RpdmU6IHRydWUgfTtcclxuICAgICAgdGhpcy5hY3RpdmVUYWIgPSB0aGlzLnRhYnNbMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFjdGl2ZVRhYiA9IGFjdGl2ZVRhYjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlVGFiUGFuZUNoYW5nZXMoKSB7XHJcbiAgICAvLyBmaXJzdCBzdWJzY3JpYmUgdG8gYW55IGNoYW5nZXMgaW4gdGFiIHBhbmUsIHNvIHRoYXQgdGhlIHRhYnMgaW4gdGhpcyB2aWV3IHdpaWwgYmUgdXBkYXRlZFxyXG4gICAgdGhpcy5wYW5lcz8uZm9yRWFjaChwYW5lID0+IHtcclxuICAgICAgcGFuZS5jaGFuZ2VzJC5waXBlKHRha2VVbnRpbCh0aGlzLmNvbXBsZXRlKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAvLyBvbiBjaGFuZ2VzIGluIGEgdGFiIHBhbmUsIHdlIGluaXQgdGhlIHRhYnMgYWdhaW5cclxuICAgICAgICB0aGlzLmluaXRUYWJzKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNjcm9sbFRvKHNjcm9sbFg6IG51bWJlciB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHNjcm9sbFggPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBjdXJyZW50U2Nyb2xsWCA9IHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKTtcclxuICAgIGNvbnN0IHNhZmVTY3JvbGxYID0gdGhpcy5jbGFtcFNjcm9sbFZhbHVlKHNjcm9sbFgpO1xyXG4gICAgaWYgKHNhZmVTY3JvbGxYID09IG51bGwgfHwgY3VycmVudFNjcm9sbFggPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzY3JvbGxEZWx0YSA9IHNhZmVTY3JvbGxYIC0gY3VycmVudFNjcm9sbFg7XHJcbiAgICB0aGlzLmFuaW1hdGUoe1xyXG4gICAgICBmaW5hbFNjcm9sbFBvc2l0aW9uOiBzYWZlU2Nyb2xsWCxcclxuICAgICAgc2Nyb2xsRGVsdGFcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzY3JvbGxJbnRvVmlldyhpbmRleDogbnVtYmVyLCB0YWI6IEhUTUxFbGVtZW50KSB7XHJcbiAgICBpZiAodGhpcy5lbGVtU2Nyb2xsQXJlYSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzY3JvbGxQb3NpdGlvbiA9IHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKTtcclxuICAgIGNvbnN0IGJhcldpZHRoID0gdGhpcy5lbGVtU2Nyb2xsQXJlYS5vZmZzZXRXaWR0aDtcclxuICAgIGlmIChiYXJXaWR0aCA9PSBudWxsIHx8IHNjcm9sbFBvc2l0aW9uID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRhYkRpbWVuc2lvbnMgPSB0aGlzLmNvbXB1dGVEaW1lbnNpb25zKHRhYik7XHJcbiAgICBpZiAodGFiRGltZW5zaW9ucyA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXh0SW5kZXggPSB0aGlzLmZpbmRBZGphY2VudFRhYkluZGV4Q2xvc2VzdFRvRWRnZShpbmRleCwgdGFiRGltZW5zaW9ucywgc2Nyb2xsUG9zaXRpb24sIGJhcldpZHRoKTtcclxuICAgIGlmICghdGhpcy5pbmRleElzSW5SYW5nZShuZXh0SW5kZXgpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzY3JvbGxJbmNyZW1lbnQgPSB0aGlzLmNhbGN1bGF0ZVNjcm9sbEluY3JlbWVudChpbmRleCwgbmV4dEluZGV4LCBzY3JvbGxQb3NpdGlvbiwgYmFyV2lkdGgpO1xyXG4gICAgaWYgKHNjcm9sbEluY3JlbWVudCA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluY3JlbWVudFNjcm9sbChzY3JvbGxJbmNyZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbmNyZW1lbnRTY3JvbGwoc2Nyb2xsWEluY3JlbWVudDogbnVtYmVyKSB7XHJcbiAgICAvLyBubyBzY3JvbGwgbmVlZGVkXHJcbiAgICBpZiAoc2Nyb2xsWEluY3JlbWVudCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzY3JvbGxPcGVyYXRpb24gPSB0aGlzLmdldEluY3JlbWVudFNjcm9sbE9wZXJhdGlvbihzY3JvbGxYSW5jcmVtZW50KTtcclxuICAgIGlmIChzY3JvbGxPcGVyYXRpb24gPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmFuaW1hdGUoc2Nyb2xsT3BlcmF0aW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYW5pbWF0ZShhbmltYXRpb246IEZuZ1RhYlNjcm9sbEFuaW1hdGlvbikge1xyXG4gICAgLy8gbm8gYW5pbWF0aW9uIG5lZWRlZFxyXG4gICAgaWYgKGFuaW1hdGlvbi5zY3JvbGxEZWx0YSA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbm8gYW5pbWF0aW9uIHBvc3NpYmxlXHJcbiAgICBpZiAodGhpcy5lbGVtU2Nyb2xsQXJlYSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0b3BTY3JvbGxBbmltYXRpb24oKTtcclxuXHJcbiAgICAvLyB0aGlzIGFuaW1hdGlvbiB1c2VzIHRoZSBmbGlwIGFwcHJvYWNoXHJcbiAgICAvLyBodHRwczovL2Flcm90d2lzdC5jb20vYmxvZy9mbGlwLXlvdXItYW5pbWF0aW9ucy9cclxuICAgIC8vIGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vYW5pbWF0aW5nLWxheW91dHMtd2l0aC10aGUtZmxpcC10ZWNobmlxdWUvXHJcbiAgICB0aGlzLmVsZW1TY3JvbGxBcmVhLnNjcm9sbExlZnQgPSBhbmltYXRpb24uZmluYWxTY3JvbGxQb3NpdGlvbjtcclxuICAgIHRoaXMuc2V0U2Nyb2xsQ29udGVudFN0eWxlUHJvcGVydHkoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGVYKCR7YW5pbWF0aW9uLnNjcm9sbERlbHRhfXB4KWApO1xyXG4gICAgLy8gZm9yY2UgcmVwYWludFxyXG4gICAgdGhpcy5lbGVtU2Nyb2xsQXJlYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbVNjcm9sbGVyLCAnZm5nLXRhYi1zY3JvbGxlci0tYW5pbWF0aW5nJyk7XHJcbiAgICAgIHRoaXMuc2V0U2Nyb2xsQ29udGVudFN0eWxlUHJvcGVydHkoJ3RyYW5zZm9ybScsICdub25lJyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RvcFNjcm9sbEFuaW1hdGlvbigpIHtcclxuICAgIGlmICh0aGlzLmVsZW1TY3JvbGxBcmVhID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY3VycmVudFNjcm9sbFBvc2l0aW9uID0gdGhpcy5nZXRBbmltYXRpbmdTY3JvbGxQb3NpdGlvbigpO1xyXG4gICAgaWYgKGN1cnJlbnRTY3JvbGxQb3NpdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbVNjcm9sbGVyLCAnZm5nLXRhYi1zY3JvbGxlci0tYW5pbWF0aW5nJyk7XHJcbiAgICB0aGlzLnNldFNjcm9sbENvbnRlbnRTdHlsZVByb3BlcnR5KCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlWCgwcHgpJyk7XHJcbiAgICB0aGlzLmVsZW1TY3JvbGxBcmVhLnNjcm9sbExlZnQgPSBjdXJyZW50U2Nyb2xsUG9zaXRpb247XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEFuaW1hdGluZ1Njcm9sbFBvc2l0aW9uKCk6IG51bWJlciB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMuZWxlbVNjcm9sbEFyZWEgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IGN1cnJlbnRUcmFuc2xhdGVYID0gdGhpcy5jYWxjdWxhdGVDdXJyZW50VHJhbnNsYXRlWCgpO1xyXG4gICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHRoaXMuZWxlbVNjcm9sbEFyZWEuc2Nyb2xsTGVmdDtcclxuICAgIHJldHVybiBzY3JvbGxMZWZ0IC0gY3VycmVudFRyYW5zbGF0ZVg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEluY3JlbWVudFNjcm9sbE9wZXJhdGlvbihzY3JvbGxYOiBudW1iZXIpOiBGbmdUYWJTY3JvbGxBbmltYXRpb24gfCBudWxsIHtcclxuICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxYID0gdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpO1xyXG4gICAgaWYgKGN1cnJlbnRTY3JvbGxYID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGFyZ2V0U2Nyb2xsWCA9IHNjcm9sbFggKyBjdXJyZW50U2Nyb2xsWDtcclxuICAgIGNvbnN0IHNhZmVTY3JvbGxYID0gdGhpcy5jbGFtcFNjcm9sbFZhbHVlKHRhcmdldFNjcm9sbFgpO1xyXG4gICAgaWYgKHNhZmVTY3JvbGxYID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzY3JvbGxEZWx0YSA9IHNhZmVTY3JvbGxYIC0gY3VycmVudFNjcm9sbFg7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmaW5hbFNjcm9sbFBvc2l0aW9uOiBzYWZlU2Nyb2xsWCxcclxuICAgICAgc2Nyb2xsRGVsdGFcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsYW1wU2Nyb2xsVmFsdWUoc2Nyb2xsWDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBjb25zdCBlZGdlcyA9IHRoaXMuY2FsY3VsYXRlU2Nyb2xsRWRnZXMoKTtcclxuICAgIGlmIChlZGdlcyA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KGVkZ2VzLmxlZnQsIHNjcm9sbFgpLCBlZGdlcy5yaWdodCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZVNjcm9sbEVkZ2VzKCk6IEZuZ1RhYlNjcm9sbEhvcml6b250YWxFZGdlcyB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMuZWxlbVNjcm9sbEFyZWEgPT0gbnVsbCB8fCB0aGlzLmVsZW1TY3JvbGxDb250ZW50ID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzY3JvbGxDb250ZW50V2lkdGggPSB0aGlzLmVsZW1TY3JvbGxDb250ZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgY29uc3Qgc2Nyb2xsQXJlYVdpZHRoID0gdGhpcy5lbGVtU2Nyb2xsQXJlYS5vZmZzZXRXaWR0aDtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGxlZnQ6IDAsXHJcbiAgICAgIHJpZ2h0OiBzY3JvbGxDb250ZW50V2lkdGggLSBzY3JvbGxBcmVhV2lkdGhcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXB1dGVEaW1lbnNpb25zKHRhYjogSFRNTEVsZW1lbnQpOiBGbmdUYWJEaW1lbnNpb25zIHwgbnVsbCB7XHJcbiAgICBjb25zdCByb290V2lkdGggPSB0YWIub2Zmc2V0V2lkdGg7XHJcbiAgICBjb25zdCByb290TGVmdCA9IHRhYi5vZmZzZXRMZWZ0O1xyXG5cclxuICAgIGNvbnN0IHRhYkNvbnRlbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IHRhYi5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignLmZuZy10YWItY29udGVudCcpO1xyXG4gICAgaWYgKHRhYkNvbnRlbnQgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250ZW50V2lkdGggPSB0YWJDb250ZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgY29uc3QgY29udGVudExlZnQgPSB0YWJDb250ZW50Lm9mZnNldExlZnQ7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY29udGVudExlZnQ6IHJvb3RMZWZ0ICsgY29udGVudExlZnQsXHJcbiAgICAgIGNvbnRlbnRSaWdodDogcm9vdExlZnQgKyBjb250ZW50TGVmdCArIGNvbnRlbnRXaWR0aCxcclxuICAgICAgcm9vdExlZnQsXHJcbiAgICAgIHJvb3RSaWdodDogcm9vdExlZnQgKyByb290V2lkdGhcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZVNjcm9sbEluY3JlbWVudChpbmRleDogbnVtYmVyLCBuZXh0SW5kZXg6IG51bWJlciwgc2Nyb2xsUG9zaXRpb246IG51bWJlciwgYmFyV2lkdGg6IG51bWJlcik6IG51bWJlciB8IG51bGwge1xyXG4gICAgY29uc3QgbmV4dFRhYjogSFRNTEVsZW1lbnQgfCBudWxsID0gKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXHJcbiAgICAgIGAjJHt0aGlzLmNvbXBvbmVudElkfS10YWItJHtuZXh0SW5kZXh9YFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAobmV4dFRhYiA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5leHRUYWJEaW1lbnNpb25zID0gdGhpcy5jb21wdXRlRGltZW5zaW9ucyhuZXh0VGFiKTtcclxuXHJcbiAgICBpZiAobmV4dFRhYkRpbWVuc2lvbnMgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZWxhdGl2ZUNvbnRlbnRMZWZ0ID0gbmV4dFRhYkRpbWVuc2lvbnMuY29udGVudExlZnQgLSBzY3JvbGxQb3NpdGlvbiAtIGJhcldpZHRoO1xyXG4gICAgY29uc3QgcmVsYXRpdmVDb250ZW50UmlnaHQgPSBuZXh0VGFiRGltZW5zaW9ucy5jb250ZW50UmlnaHQgLSBzY3JvbGxQb3NpdGlvbjtcclxuICAgIGNvbnN0IGxlZnRJbmNyZW1lbnQgPSByZWxhdGl2ZUNvbnRlbnRSaWdodCAtIDQ4O1xyXG4gICAgY29uc3QgcmlnaHRJbmNyZW1lbnQgPSByZWxhdGl2ZUNvbnRlbnRMZWZ0ICsgNDg7XHJcblxyXG4gICAgaWYgKG5leHRJbmRleCA8IGluZGV4KSB7XHJcbiAgICAgIHJldHVybiBNYXRoLm1pbihsZWZ0SW5jcmVtZW50LCAwKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTWF0aC5tYXgocmlnaHRJbmNyZW1lbnQsIDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbmRleElzSW5SYW5nZShpbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gaW5kZXggPj0gMCAmJiBpbmRleCA8IHRoaXMudGFicy5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFNjcm9sbFBvc2l0aW9uKCk6IG51bWJlciB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMuZWxlbVNjcm9sbEFyZWEgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IGN1cnJlbnRUcmFuc2xhdGVYID0gdGhpcy5jYWxjdWxhdGVDdXJyZW50VHJhbnNsYXRlWCgpO1xyXG4gICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHRoaXMuZWxlbVNjcm9sbEFyZWEuc2Nyb2xsTGVmdDtcclxuXHJcbiAgICByZXR1cm4gc2Nyb2xsTGVmdCAtIGN1cnJlbnRUcmFuc2xhdGVYO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYWxjdWxhdGVDdXJyZW50VHJhbnNsYXRlWCgpOiBudW1iZXIge1xyXG4gICAgY29uc3QgdHJhbnNmb3JtVmFsdWUgPSB0aGlzLmdldFNjcm9sbENvbnRlbnRTdHlsZVZhbHVlKCd0cmFuc2Zvcm0nKTtcclxuICAgIGlmICh0cmFuc2Zvcm1WYWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0cmFuc2Zvcm1WYWx1ZSA9PT0gJ25vbmUnKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRoZSB0cmFuc2Zvcm0gdmFsdWUgaXMgaW4gZm9ybSBvZiAnbWF0cml4KGEsIGIsIGMsIGQsIHR4LCB0eSknXHJcbiAgICAvLyBnZXQgYWxsIHRoZSBwYXJlbnRoZXNpemVkIHZhbHVlc1xyXG4gICAgY29uc3QgbWF0Y2ggPSAvXFwoKC4rPylcXCkvLmV4ZWModHJhbnNmb3JtVmFsdWUpO1xyXG4gICAgaWYgKCFtYXRjaCkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtYXRyaXhQYXJhbXMgPSBtYXRjaFsxXTtcclxuICAgIC8vIHdlIG5lZWQgdmFsdWUgb2YgdHggLT4gdHJhbnNsYXRlWFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xyXG4gICAgY29uc3QgW2EsIGIsIGMsIGQsIHR4LCB0eV0gPSBtYXRyaXhQYXJhbXMuc3BsaXQoJywnKTtcclxuICAgIHJldHVybiBwYXJzZUZsb2F0KHR4KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2Nyb2xsQ29udGVudFN0eWxlVmFsdWUocHJvcE5hbWU6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZWxlbVNjcm9sbENvbnRlbnQgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5pbmplY3RlZFdpbmRvdz8uZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVsZW1TY3JvbGxDb250ZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2Nyb2xsQ29udGVudFN0eWxlUHJvcGVydHkocHJvcE5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1TY3JvbGxDb250ZW50LCBwcm9wTmFtZSwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kQWRqYWNlbnRUYWJJbmRleENsb3Nlc3RUb0VkZ2UoXHJcbiAgICBpbmRleDogbnVtYmVyLFxyXG4gICAgdGFiRGltZW5zaW9uczogRm5nVGFiRGltZW5zaW9ucyxcclxuICAgIHNjcm9sbFBvc2l0aW9uOiBudW1iZXIsXHJcbiAgICBiYXJXaWR0aDogbnVtYmVyXHJcbiAgKTogbnVtYmVyIHtcclxuICAgIC8qKlxyXG4gICAgICogdGFicyBhcmUgbGFpZCBvdXQgaW4gdGhlIHRhYiBzY3JvbGxlciBsaWtlIHRoaXM6XHJcbiAgICAgKlxyXG4gICAgICogICAgc2Nyb2xsIHBvc2l0aW9uXHJcbiAgICAgKiAgICArLS0tK1xyXG4gICAgICogICAgfCAgIHwgICBiYXIgd2lkdGhcclxuICAgICAqICAgIHwgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXHJcbiAgICAgKiAgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gICAgICogICAgfCAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZcclxuICAgICAqICAgIHwgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXHJcbiAgICAgKiAgICB2ICAgfCAgICAgICAgICAgICB0YWIgc2Nyb2xsZXIgICAgICAgICAgfFxyXG4gICAgICogICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tK1xyXG4gICAgICogICAgfCAgICB0YWIgICAgIHwgICAgICB0YWIgICAgIHwgICAgICAgIHRhYiAgICAgICAgfFxyXG4gICAgICogICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tK1xyXG4gICAgICogICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICAgICAqICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXHJcbiAgICAgKlxyXG4gICAgICogdG8gZGV0ZXJtaW5lIHRoZSBuZXh0IGFkamFjZW50IGluZGV4LCB3ZSBsb29rIGF0IHRoZSB0YWIgcm9vdCBsZWZ0IGFuZFxyXG4gICAgICogdGFiIHJvb3QgcmlnaHQsIGJvdGggcmVsYXRpdmUgdG8gdGhlIHNjcm9sbCBwb3NpdGlvbi4gaWYgdGhlIHRhYiByb290XHJcbiAgICAgKiBsZWZ0IGlzIGxlc3MgdGhhbiAwLCB0aGVuIHdlIGtub3cgaXQncyBvdXQgb2YgdmlldyB0byB0aGUgbGVmdC4gaWYgdGhlXHJcbiAgICAgKiB0YWIgcm9vdCByaWdodCBtaW51cyB0aGUgYmFyIHdpZHRoIGlzIGdyZWF0ZXIgdGhhbiAwLCB3ZSBrbm93IHRoZSB0YWIgaXNcclxuICAgICAqIG91dCBvZiB2aWV3IHRvIHRoZSByaWdodC4gZnJvbSB0aGVyZSwgd2UgZWl0aGVyIGluY3JlbWVudCBvciBkZWNyZW1lbnRcclxuICAgICAqIHRoZSBpbmRleC5cclxuICAgICAqL1xyXG4gICAgY29uc3QgcmVsYXRpdmVSb290TGVmdCA9IHRhYkRpbWVuc2lvbnMucm9vdExlZnQgLSBzY3JvbGxQb3NpdGlvbjtcclxuICAgIGNvbnN0IHJlbGF0aXZlUm9vdFJpZ2h0ID0gdGFiRGltZW5zaW9ucy5yb290UmlnaHQgLSBzY3JvbGxQb3NpdGlvbiAtIGJhcldpZHRoO1xyXG4gICAgY29uc3QgcmVsYXRpdmVSb290RGVsdGEgPSByZWxhdGl2ZVJvb3RMZWZ0ICsgcmVsYXRpdmVSb290UmlnaHQ7XHJcbiAgICBjb25zdCBsZWZ0RWRnZUlzQ2xvc2VyID0gcmVsYXRpdmVSb290TGVmdCA8IDAgfHwgcmVsYXRpdmVSb290RGVsdGEgPCAwO1xyXG4gICAgY29uc3QgcmlnaHRFZGdlSXNDbG9zZXIgPSByZWxhdGl2ZVJvb3RSaWdodCA+IDAgfHwgcmVsYXRpdmVSb290RGVsdGEgPiAwO1xyXG5cclxuICAgIGlmIChsZWZ0RWRnZUlzQ2xvc2VyKSB7XHJcbiAgICAgIHJldHVybiBpbmRleCAtIDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJpZ2h0RWRnZUlzQ2xvc2VyKSB7XHJcbiAgICAgIHJldHVybiBpbmRleCArIDE7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwidmlld1R5cGUgPT09ICdsZWdhY3knXCI+XHJcbiAgPGRpdiBjbGFzcz1cImZ3ZS1sZWdhY3ktdGFic1wiPlxyXG4gICAgPHVsXHJcbiAgICAgIHJvbGU9XCJ0YWJsaXN0XCJcclxuICAgICAgY2xhc3M9XCJmd2UtbGVnYWN5LXRhYi1iYXJcIlxyXG4gICAgICBbY2xhc3MuZndlLWxlZ2FjeS10YWItYmFyLWZ1bGwtd2lkdGhdPVwiY29uZmlnPy50YWJCYXI/LmZ1bGxXaWR0aFwiXHJcbiAgICAgIFtjbGFzcy5md2UtbGVnYWN5LXRhYi1pdGVtcy1lcXVhbC13aWR0aF09XCInZXF1YWwnID09PSBjb25maWc/LnRhYkl0ZW1zPy5hcHBlYXJhbmNlXCJcclxuICAgICAgW2NsYXNzLmZ3ZS1sZWdhY3ktdGFiLWl0ZW1zLWZpbGxdPVwiJ2ZpbGwnID09PSBjb25maWc/LnRhYkl0ZW1zPy5hcHBlYXJhbmNlXCJcclxuICAgID5cclxuICAgICAgPGxpXHJcbiAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICBjbGFzcz1cImZ3ZS1sZWdhY3ktdGFiLWl0ZW1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Z3ZS1hY3RpdmUnOiB0YWI/LmFjdGl2ZSwgJ2Z3ZS1kaXNhYmxlZCc6IHRhYj8uZGlzYWJsZWQgfVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibnVsbCA9PSB0YWI/Lmljb25cIj5cclxuICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgIFtpZF09XCJjb21wb25lbnRJZCArICctdGFiLScgKyBpXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJ0YWIucGFuZUlkXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJ0cnVlID09PSB0YWI/LmFjdGl2ZSA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwidHJ1ZSA9PT0gdGFiPy5kaXNhYmxlZCA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgIHJvbGU9XCJ0YWJcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImZ3ZS1sZWdhY3ktdGFiLWxpbmtcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd1RhYlBhbmUodGFiLnBhbmVJZClcIlxyXG4gICAgICAgICAgICA+e3sgdGFiLm5hbWUgfX08L2FcclxuICAgICAgICAgID5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibnVsbCAhPSB0YWI/Lmljb25cIj5cclxuICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgIFtpZF09XCJjb21wb25lbnRJZCArICctdGFiLScgKyBpXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJ0YWIucGFuZUlkXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJ0cnVlID09PSB0YWI/LmFjdGl2ZSA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwidHJ1ZSA9PT0gdGFiPy5kaXNhYmxlZCA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgIHJvbGU9XCJ0YWJcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImZ3ZS1sZWdhY3ktdGFiLWxpbmtcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd1RhYlBhbmUodGFiLnBhbmVJZClcIlxyXG4gICAgICAgICAgICBbY2xhc3MuZndlLWNhbi1zd2FwLWljb25dPVwiMiA9PT0gdGFicy5sZW5ndGggJiYgMSA9PT0gaVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpIFtjbGFzc109XCInZndlLWljb24gJyArIHRhYi5pY29uXCI+PC9pPlxyXG4gICAgICAgICAgICA8c3Bhbj57eyB0YWIubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZndlLWxlZ2FjeS10YWItcGFuZWwtY29udGVudFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFiUGFuZWxDb250ZW50XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctY29udGFpbmVyICpuZ0lmPVwidmlld1R5cGUgIT09ICdsZWdhY3knXCI+XHJcbiAgPGRpdiBjbGFzcz1cImZuZy10YWItYmFyXCIgcm9sZT1cInRhYmxpc3RcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbmctdGFiLXNjcm9sbGVyXCIgI3Njcm9sbGVyPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJmbmctdGFiLXNjcm9sbGVyLXNjcm9sbC1hcmVhIGZuZy10YWItc2Nyb2xsZXItc2Nyb2xsLWFyZWEtLXNjcm9sbFwiXHJcbiAgICAgICAgW2NsYXNzLmZuZy10YWItc2Nyb2xsZXItc2Nyb2xsLWFyZWEtLWNvbXBhY3RdPVwidXNlQ29tcGFjdERlbnNpdHlcIlxyXG4gICAgICAgICNzY3JvbGxBZXJhXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm5nLXRhYi1zY3JvbGxlci1zY3JvbGwtY29udGVudFwiIFtjbGFzcy5mbmctdGFiLXNjcm9sbGVyLXNjcm9sbC1jb250ZW50LS13aXRoLWRpdmlkZXJdPVwic2hvd0RpdmlkZXJcIiAjc2Nyb2xsQ29udGVudD5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgcm9sZT1cInRhYlwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZm5nLXRhYlwiXHJcbiAgICAgICAgICAgIFtpZF09XCJjb21wb25lbnRJZCArICctdGFiLScgKyBpXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJ0YWIucGFuZUlkXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJ0cnVlID09PSB0YWI/LmFjdGl2ZSA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCJpID09PSAwID8gMCA6IC0xXCJcclxuICAgICAgICAgICAgW2NsYXNzLmZuZy10YWItLWFjdGl2ZV09XCJ0YWI/LmFjdGl2ZVwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5mbmctdGFiLS1kaXNhYmxlZF09XCJ0YWI/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVRhYlNjcm9sbCgkZXZlbnQsIGkpOyBzaG93VGFiUGFuZSh0YWIucGFuZUlkKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm5nLXRhYi1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbmctdGFiLXRleHQtbGFiZWxcIj57eyB0YWIubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZuZy10YWItaW5kaWNhdG9yXCIgW2NsYXNzLmZuZy10YWItaW5kaWNhdG9yLS1hY3RpdmVdPVwidGFiPy5hY3RpdmVcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZuZy10YWItaW5kaWNhdG9yLWNvbnRlbnQgZm5nLXRhYi1pbmRpY2F0b3ItY29udGVudC0tdW5kZXJsaW5lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbmctdGFiLXNjcm9sbGVyLWRpdmlkZXItbGluZVwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImZuZy10YWItcGFuZWwtY29udGVudFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFiUGFuZWxDb250ZW50XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy1jb250YWluZXI+XHJcblxyXG48bmctdGVtcGxhdGUgI3RhYlBhbmVsQ29udGVudD5cclxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { Directive, Output, EventEmitter, HostListener } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class FngClickOutsideDirective {
|
|
4
|
-
constructor(elRef) {
|
|
5
|
-
this.elRef = elRef;
|
|
6
|
-
this.clickOutside = new EventEmitter();
|
|
7
|
-
}
|
|
8
|
-
onClick(targetElement) {
|
|
9
|
-
const inside = this.elRef.nativeElement.contains(targetElement);
|
|
10
|
-
if (!inside) {
|
|
11
|
-
this.clickOutside.emit(null);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: FngClickOutsideDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
15
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.2", type: FngClickOutsideDirective, isStandalone: true, selector: "[fngClickOutside]", outputs: { clickOutside: "clickOutside" }, host: { listeners: { "document:click": "onClick($event.target)" } }, ngImport: i0 }); }
|
|
16
|
-
}
|
|
17
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.2", ngImport: i0, type: FngClickOutsideDirective, decorators: [{
|
|
18
|
-
type: Directive,
|
|
19
|
-
args: [{
|
|
20
|
-
standalone: true,
|
|
21
|
-
selector: '[fngClickOutside]'
|
|
22
|
-
}]
|
|
23
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { clickOutside: [{
|
|
24
|
-
type: Output
|
|
25
|
-
}], onClick: [{
|
|
26
|
-
type: HostListener,
|
|
27
|
-
args: ['document:click', ['$event.target']]
|
|
28
|
-
}] } });
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2stb3V0c2lkZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9saWIvZGlyZWN0aXZlcy9jbGljay1vdXRzaWRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU0xRixNQUFNLE9BQU8sd0JBQXdCO0lBQ25DLFlBQW9CLEtBQWlCO1FBQWpCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFHOUIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBSEQsQ0FBQztJQU1sQyxPQUFPLENBQUMsYUFBMEI7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDOzhHQVpVLHdCQUF3QjtrR0FBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQUpwQyxTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsbUJBQW1CO2lCQUM5QjsrRUFLUSxZQUFZO3NCQURsQixNQUFNO2dCQUlBLE9BQU87c0JBRGIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdbZm5nQ2xpY2tPdXRzaWRlXSdcbn0pXG5leHBvcnQgY2xhc3MgRm5nQ2xpY2tPdXRzaWRlRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZikge31cblxuICBAT3V0cHV0KClcbiAgcHVibGljIGNsaWNrT3V0c2lkZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50LnRhcmdldCddKVxuICBwdWJsaWMgb25DbGljayh0YXJnZXRFbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGNvbnN0IGluc2lkZSA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyh0YXJnZXRFbGVtZW50KTtcbiAgICBpZiAoIWluc2lkZSkge1xuICAgICAgdGhpcy5jbGlja091dHNpZGUuZW1pdChudWxsKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|