@festo-ui/angular 5.1.0 → 6.0.0-dev.198

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.
Files changed (156) hide show
  1. package/{esm2020 → esm2022}/lib/components/accordion/accordion-header/accordion-header.component.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/components/accordion/accordion-item/accordion-item-body/accordion-item-body.component.mjs +4 -4
  3. package/{esm2020 → esm2022}/lib/components/accordion/accordion-item/accordion-item-header/accordion-item-header.component.mjs +4 -4
  4. package/esm2022/lib/components/accordion/accordion-item/accordion-item.component.mjs +148 -0
  5. package/esm2022/lib/components/accordion/accordion.component.mjs +59 -0
  6. package/{esm2020 → esm2022}/lib/components/breadcrumb/breadcrumb.component.mjs +4 -4
  7. package/{esm2020 → esm2022}/lib/components/buttons/button/button.component.mjs +4 -4
  8. package/{esm2020 → esm2022}/lib/components/buttons/link-button/link-button.component.mjs +4 -4
  9. package/{esm2020 → esm2022}/lib/components/chips/chip/chip.component.mjs +4 -4
  10. package/{esm2020 → esm2022}/lib/components/chips/chip-container/chip-container.component.mjs +4 -4
  11. package/esm2022/lib/components/components.module.mjs +207 -0
  12. package/{esm2020 → esm2022}/lib/components/loading-indicator/loading-indicator.component.mjs +4 -4
  13. package/{esm2020 → esm2022}/lib/components/mobile-flyout/mobile-flyout-item/mobile-flyout-item.component.mjs +6 -6
  14. package/{esm2020 → esm2022}/lib/components/mobile-flyout/mobile-flyout-page/mobile-flyout-page.component.mjs +4 -4
  15. package/{esm2020 → esm2022}/lib/components/mobile-flyout/mobile-flyout.component.mjs +4 -4
  16. package/{esm2020 → esm2022}/lib/components/pagination/pagination.component.mjs +4 -4
  17. package/{esm2020 → esm2022}/lib/components/popovers/legend/legend.component.mjs +5 -5
  18. package/{esm2020 → esm2022}/lib/components/popovers/legend/legend.directive.mjs +5 -5
  19. package/{esm2020 → esm2022}/lib/components/popovers/popover/popover.component.mjs +5 -5
  20. package/{esm2020 → esm2022}/lib/components/popovers/popover-content/popover-content.component.mjs +5 -5
  21. package/{esm2020 → esm2022}/lib/components/popovers/popover-content/popover-content.directive.mjs +5 -5
  22. package/{esm2020 → esm2022}/lib/components/popovers/popover-menu/popover-menu.component.mjs +5 -5
  23. package/{esm2020 → esm2022}/lib/components/popovers/popover.service.mjs +5 -5
  24. package/{esm2020 → esm2022}/lib/components/popovers/tooltip/tooltip.directive.mjs +5 -5
  25. package/{esm2020 → esm2022}/lib/components/progress/progress.component.mjs +4 -4
  26. package/{esm2020 → esm2022}/lib/components/scroll/scrollable.directive.mjs +5 -5
  27. package/{esm2020 → esm2022}/lib/components/search-input/search-input.component.mjs +4 -4
  28. package/esm2022/lib/components/sidebar-overlay/sidebar-overlay.component.mjs +59 -0
  29. package/{esm2020 → esm2022}/lib/components/snackbar/snackbar-container.component.mjs +4 -4
  30. package/{esm2020 → esm2022}/lib/components/snackbar/snackbar-container.directive.mjs +5 -5
  31. package/esm2022/lib/components/snackbar/snackbar.component.mjs +81 -0
  32. package/esm2022/lib/components/snackbar/snackbar.module.mjs +24 -0
  33. package/{esm2020 → esm2022}/lib/components/snackbar/snackbar.service.mjs +5 -5
  34. package/{esm2020 → esm2022}/lib/components/stepper-horizontal/step-horizontal/step-horizontal.component.mjs +4 -4
  35. package/{esm2020 → esm2022}/lib/components/stepper-horizontal/stepper-horizontal.component.mjs +4 -4
  36. package/{esm2020 → esm2022}/lib/components/stepper-vertical/step-vertical/step-vertical.component.mjs +4 -4
  37. package/{esm2020 → esm2022}/lib/components/stepper-vertical/stepper-vertical.component.mjs +4 -4
  38. package/{esm2020 → esm2022}/lib/components/table-header-cell/table-header-cell.directive.mjs +4 -4
  39. package/esm2022/lib/components/tabs/tab-pane/tab-pane.component.mjs +34 -0
  40. package/esm2022/lib/components/tabs/tabs.component.mjs +459 -0
  41. package/{esm2020 → esm2022}/lib/directives/click-outside.directive.mjs +5 -5
  42. package/{esm2020 → esm2022}/lib/festo-angular.module.mjs +5 -5
  43. package/esm2022/lib/forms/checkbox/checkbox.component.mjs +154 -0
  44. package/{esm2020 → esm2022}/lib/forms/color-indicator/color-indicator.component.mjs +4 -4
  45. package/esm2022/lib/forms/color-picker/color-picker.component.mjs +292 -0
  46. package/{esm2020 → esm2022}/lib/forms/date-picker/date-picker.component.mjs +12 -12
  47. package/{esm2020 → esm2022}/lib/forms/date-range-picker/date-range-picker.component.mjs +12 -12
  48. package/{esm2020 → esm2022}/lib/forms/flatpickr/flatpickr.component.mjs +4 -4
  49. package/{esm2020 → esm2022}/lib/forms/forms.module.mjs +62 -62
  50. package/esm2022/lib/forms/radio/radio.component.mjs +350 -0
  51. package/{esm2020 → esm2022}/lib/forms/segment/segment-control/segment-control.component.mjs +4 -4
  52. package/{esm2020 → esm2022}/lib/forms/segment/segment.component.mjs +11 -11
  53. package/{esm2020 → esm2022}/lib/forms/select/chip-text.pipe.mjs +4 -4
  54. package/{esm2020 → esm2022}/lib/forms/select/select-option/select-option.component.mjs +4 -4
  55. package/esm2022/lib/forms/select/select.component.mjs +275 -0
  56. package/esm2022/lib/forms/slider/slider.component.mjs +113 -0
  57. package/esm2022/lib/forms/switch/switch.component.mjs +121 -0
  58. package/esm2022/lib/forms/text-area/text-area.component.mjs +187 -0
  59. package/esm2022/lib/forms/text-editor/text-editor.component.mjs +308 -0
  60. package/esm2022/lib/forms/text-input/text-input.component.mjs +208 -0
  61. package/{esm2020 → esm2022}/lib/forms/time-picker/time-picker-dropdown/time-picker-dropdown.component.mjs +4 -4
  62. package/{esm2020 → esm2022}/lib/forms/time-picker/time-picker.component.mjs +11 -11
  63. package/{esm2020 → esm2022}/lib/forms/unique-selection-dispatcher.mjs +4 -4
  64. package/{esm2020 → esm2022}/lib/forms/value-accessor-base.mjs +4 -4
  65. package/{esm2020 → esm2022}/lib/modals/alert/alert.component.mjs +4 -4
  66. package/{esm2020 → esm2022}/lib/modals/confirm/confirm.component.mjs +5 -5
  67. package/{esm2020 → esm2022}/lib/modals/custom-modal/custom-modal.component.mjs +4 -4
  68. package/{esm2020 → esm2022}/lib/modals/image-gallery/image-gallery.component.mjs +5 -5
  69. package/{esm2020 → esm2022}/lib/modals/modal.service.mjs +5 -5
  70. package/{esm2020 → esm2022}/lib/modals/modals.module.mjs +5 -5
  71. package/{esm2020 → esm2022}/lib/modals/prompt/prompt.component.mjs +5 -5
  72. package/{esm2020 → esm2022}/lib/pipes/safe-html.pipe.mjs +5 -5
  73. package/{fesm2020 → fesm2022}/festo-ui-angular.mjs +512 -520
  74. package/{fesm2020 → fesm2022}/festo-ui-angular.mjs.map +1 -1
  75. package/lib/components/accordion/accordion.component.d.ts +1 -1
  76. package/lib/components/breadcrumb/breadcrumb.component.d.ts +1 -1
  77. package/lib/components/buttons/button/button.component.d.ts +1 -1
  78. package/lib/components/buttons/link-button/link-button.component.d.ts +1 -1
  79. package/lib/components/chips/chip/chip.component.d.ts +1 -1
  80. package/lib/components/chips/chip-container/chip-container.component.d.ts +1 -1
  81. package/lib/components/loading-indicator/loading-indicator.component.d.ts +1 -1
  82. package/lib/components/mobile-flyout/mobile-flyout-item/mobile-flyout-item.component.d.ts +1 -1
  83. package/lib/components/mobile-flyout/mobile-flyout-page/mobile-flyout-page.component.d.ts +1 -1
  84. package/lib/components/pagination/pagination.component.d.ts +1 -1
  85. package/lib/components/popovers/legend/legend.component.d.ts +1 -1
  86. package/lib/components/popovers/popover-content/popover-content.component.d.ts +1 -1
  87. package/lib/components/popovers/popover-menu/popover-menu.component.d.ts +1 -1
  88. package/lib/components/popovers/tooltip/tooltip.directive.d.ts +1 -1
  89. package/lib/components/progress/progress.component.d.ts +1 -1
  90. package/lib/components/scroll/scrollable.directive.d.ts +1 -1
  91. package/lib/components/search-input/search-input.component.d.ts +1 -1
  92. package/lib/components/sidebar-overlay/sidebar-overlay.component.d.ts +1 -1
  93. package/lib/components/snackbar/snackbar-container.component.d.ts +1 -1
  94. package/lib/components/snackbar/snackbar-container.directive.d.ts +1 -1
  95. package/lib/components/snackbar/snackbar.component.d.ts +1 -1
  96. package/lib/components/stepper-horizontal/step-horizontal/step-horizontal.component.d.ts +1 -1
  97. package/lib/components/stepper-horizontal/stepper-horizontal.component.d.ts +1 -1
  98. package/lib/components/stepper-vertical/step-vertical/step-vertical.component.d.ts +1 -1
  99. package/lib/components/stepper-vertical/stepper-vertical.component.d.ts +1 -1
  100. package/lib/components/table-header-cell/table-header-cell.directive.d.ts +1 -1
  101. package/lib/components/tabs/tab-pane/tab-pane.component.d.ts +1 -1
  102. package/lib/components/tabs/tabs.component.d.ts +1 -1
  103. package/lib/forms/checkbox/checkbox.component.d.ts +1 -1
  104. package/lib/forms/color-indicator/color-indicator.component.d.ts +1 -1
  105. package/lib/forms/color-picker/color-picker.component.d.ts +1 -1
  106. package/lib/forms/date-picker/date-picker.component.d.ts +1 -1
  107. package/lib/forms/date-range-picker/date-range-picker.component.d.ts +1 -1
  108. package/lib/forms/flatpickr/flatpickr.component.d.ts +1 -1
  109. package/lib/forms/radio/radio.component.d.ts +6 -6
  110. package/lib/forms/segment/segment-control/segment-control.component.d.ts +1 -1
  111. package/lib/forms/segment/segment.component.d.ts +1 -1
  112. package/lib/forms/select/select-option/select-option.component.d.ts +1 -1
  113. package/lib/forms/select/select.component.d.ts +6 -5
  114. package/lib/forms/slider/slider.component.d.ts +1 -1
  115. package/lib/forms/switch/switch.component.d.ts +1 -1
  116. package/lib/forms/text-area/text-area.component.d.ts +1 -1
  117. package/lib/forms/text-editor/text-editor.component.d.ts +1 -1
  118. package/lib/forms/text-input/text-input.component.d.ts +1 -1
  119. package/lib/forms/time-picker/time-picker-dropdown/time-picker-dropdown.component.d.ts +1 -1
  120. package/lib/forms/time-picker/time-picker.component.d.ts +1 -1
  121. package/lib/forms/value-accessor-base.d.ts +1 -1
  122. package/lib/modals/alert/alert.component.d.ts +1 -1
  123. package/lib/modals/confirm/confirm.component.d.ts +1 -1
  124. package/lib/modals/custom-modal/custom-modal.component.d.ts +1 -1
  125. package/lib/modals/image-gallery/image-gallery.component.d.ts +1 -1
  126. package/lib/modals/prompt/prompt.component.d.ts +1 -1
  127. package/package.json +17 -23
  128. package/esm2020/lib/components/accordion/accordion-item/accordion-item.component.mjs +0 -148
  129. package/esm2020/lib/components/accordion/accordion.component.mjs +0 -59
  130. package/esm2020/lib/components/components.module.mjs +0 -218
  131. package/esm2020/lib/components/sidebar-overlay/sidebar-overlay.component.mjs +0 -59
  132. package/esm2020/lib/components/snackbar/snackbar.component.mjs +0 -81
  133. package/esm2020/lib/components/snackbar/snackbar.module.mjs +0 -24
  134. package/esm2020/lib/components/tabs/tab-pane/tab-pane.component.mjs +0 -34
  135. package/esm2020/lib/components/tabs/tabs.component.mjs +0 -459
  136. package/esm2020/lib/forms/checkbox/checkbox.component.mjs +0 -154
  137. package/esm2020/lib/forms/color-picker/color-picker.component.mjs +0 -292
  138. package/esm2020/lib/forms/radio/radio.component.mjs +0 -350
  139. package/esm2020/lib/forms/select/select.component.mjs +0 -273
  140. package/esm2020/lib/forms/slider/slider.component.mjs +0 -113
  141. package/esm2020/lib/forms/switch/switch.component.mjs +0 -121
  142. package/esm2020/lib/forms/text-area/text-area.component.mjs +0 -187
  143. package/esm2020/lib/forms/text-editor/text-editor.component.mjs +0 -308
  144. package/esm2020/lib/forms/text-input/text-input.component.mjs +0 -208
  145. package/fesm2015/festo-ui-angular.mjs +0 -6504
  146. package/fesm2015/festo-ui-angular.mjs.map +0 -1
  147. /package/{esm2020 → esm2022}/festo-ui-angular.mjs +0 -0
  148. /package/{esm2020 → esm2022}/lib/components/accordion/index.mjs +0 -0
  149. /package/{esm2020 → esm2022}/lib/components/popovers/popover-ref.mjs +0 -0
  150. /package/{esm2020 → esm2022}/lib/components/popovers/popover.defaults.mjs +0 -0
  151. /package/{esm2020 → esm2022}/lib/components/popovers/popover.models.mjs +0 -0
  152. /package/{esm2020 → esm2022}/lib/components/scroll/index.mjs +0 -0
  153. /package/{esm2020 → esm2022}/lib/components/snackbar/snackbar.models.mjs +0 -0
  154. /package/{esm2020 → esm2022}/lib/forms/color-picker/color-helper.mjs +0 -0
  155. /package/{esm2020 → esm2022}/lib/modals/index.mjs +0 -0
  156. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
@@ -0,0 +1,459 @@
1
+ import { CommonModule, DOCUMENT } from '@angular/common';
2
+ import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Inject, Input, Output, ViewChild } 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: "17.0.8", 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: "17.0.8", 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-btn-text);background-color:var(--fwe-btn-hover)}.fwe-legacy-tab-item:not(.fwe-active) .fwe-legacy-tab-link:active{background-color:var(--fwe-btn-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-icon-gray)}.fwe-legacy-tab-item:not(.fwe-active) .fwe-legacy-tab-link i.fwe-icon{color:var(--fwe-icon-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;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-btn-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}\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 }); }
427
+ }
428
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FngTabsComponent, decorators: [{
429
+ type: Component,
430
+ args: [{ standalone: true, imports: [CommonModule], selector: 'fng-tabs', changeDetection: ChangeDetectionStrategy.OnPush, 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-btn-text);background-color:var(--fwe-btn-hover)}.fwe-legacy-tab-item:not(.fwe-active) .fwe-legacy-tab-link:active{background-color:var(--fwe-btn-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-icon-gray)}.fwe-legacy-tab-item:not(.fwe-active) .fwe-legacy-tab-link i.fwe-icon{color:var(--fwe-icon-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;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-btn-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}\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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy90YWJzL3RhYnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvdGFicy90YWJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUdMLHVCQUF1QixFQUV2QixTQUFTLEVBQ1QsZUFBZSxFQUVmLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFHTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7QUE0RHBFLE1BQU0sT0FBTyxnQkFBZ0I7YUFDcEIsV0FBTSxHQUFHLENBQUMsQUFBSixDQUFLO0lBd0JsQixZQUNVLEtBQWlCLEVBQ0MsUUFBa0IsRUFDcEMsUUFBbUIsRUFDbkIsRUFBcUI7UUFIckIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNDLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDcEMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQTNCTCxhQUFRLEdBQW1CLFlBQVksQ0FBQztRQUNoQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUV0RCxXQUFNLEdBQWdDLElBQUksQ0FBQztRQUMxQyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBMkIsQ0FBQztRQUNqRSxpQkFB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aUJBQWlCLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQztRQUV6RSxJQUFJLGdCQUFnQixFQUFFO1lBQ3BCLE9BQU8sS0FBSyxHQUFHLENBQUMsQ0FBQztTQUNsQjtRQUVELElBQUksaUJBQWlCLEVBQUU7WUFDckIsT0FBTyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1NBQ2xCO1FBRUQsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNaLENBQUM7OEdBMWVVLGdCQUFnQiw0Q0EyQmpCLFFBQVE7a0dBM0JQLGdCQUFnQixpVEFTVixtQkFBbUIsK1RDMUZ0QyxvekhBMEZBLGs5SkRmWSxZQUFZOzsyRkFNWCxnQkFBZ0I7a0JBUjVCLFNBQVM7aUNBQ0ksSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLFlBQ2IsVUFBVSxtQkFHSCx1QkFBdUIsQ0FBQyxNQUFNOzswQkE2QjVDLE1BQU07MkJBQUMsUUFBUTtpR0F6QlEsUUFBUTtzQkFBakMsS0FBSzt1QkFBQyxpQkFBaUI7Z0JBQ1UsV0FBVztzQkFBNUMsS0FBSzt1QkFBQyx5QkFBeUI7Z0JBRXZCLE1BQU07c0JBQWQsS0FBSztnQkFDSSxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFFK0IsS0FBSztzQkFBMUMsZUFBZTt1QkFBQyxtQkFBbUI7Z0JBQ2IsUUFBUTtzQkFBOUIsU0FBUzt1QkFBQyxVQUFVO2dCQUNJLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDSyxhQUFhO3NCQUF4QyxTQUFTO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUsIERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRJbml0LFxyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBub29wLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IEZuZ1RhYlBhbmVDb21wb25lbnQgfSBmcm9tICcuL3RhYi1wYW5lL3RhYi1wYW5lLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZuZ1RhYiB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHBhbmVJZDogc3RyaW5nIHwgbnVsbDtcclxuICBhY3RpdmU/OiBib29sZWFuO1xyXG4gIGljb24/OiBzdHJpbmcgfCBudWxsO1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxufVxyXG5cclxuLy8gZmlsbDogdXNlIHRoZSByZW1haW5pbmcgc3BhY2UgYW5kIGFkZCBpbiBzYW1lIHByb3BvcnRpb24gdG8gZXZlcnkgdGFiIGl0ZW1cclxuLy8gZXF1YWw6IG1ha2UgYWxsIHRhYiBpdGVtcyBzYW1lIHdpZHRoIChhcyB0aGUgb25lIHdpdGggbGFyZ2VzdCBjb250ZW50KVxyXG5leHBvcnQgdHlwZSBGbmdUYWJJdGVtQXBwZWFyYW5jZSA9ICdmaWxsJyB8ICdlcXVhbCcgfCAnZGVmYXVsdCc7XHJcblxyXG4vLyBsZWdhY3k6IHJlY29tbWVuZGVkIGZvciBkZXNrdG9wIG9ubHkgYXBwbGljYXRpb25zXHJcbi8vIHJlc3BvbnNpdmU6IGRlc2t0b3AsIHRhYmxldCwgbW9iaWxlIHdpdGggc2Nyb2xsYWJsZSB0YWJzXHJcbmV4cG9ydCB0eXBlIEZuZ1RhYlZpZXdUeXBlID0gJ2xlZ2FjeScgfCAncmVzcG9uc2l2ZSc7XHJcblxyXG4vLyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGxlZ2FjeSB0YWIgdmlldyB0eXBlXHJcbmV4cG9ydCBpbnRlcmZhY2UgRm5nVGFic0NvbmZpZ3VyYXRpb24ge1xyXG4gIHRhYkJhcj86IHtcclxuICAgIGZ1bGxXaWR0aD86IGJvb2xlYW47XHJcbiAgfTtcclxuICB0YWJJdGVtcz86IHtcclxuICAgIGFwcGVhcmFuY2U6IEZuZ1RhYkl0ZW1BcHBlYXJhbmNlO1xyXG4gIH07XHJcbn1cclxuXHJcbi8vIHByb3ZpZGVzIGRldGFpbHMgYWJvdXQgdGhlIGxlZnQgYW5kIHJpZ2h0IGVkZ2VzIG9mIHRoZSB0YWIgZWxlbWVudCBhbmQgdGhlIHRhYiBjb250ZW50IGVsZW1lbnRcclxuLy8gdGhlc2UgdmFsdWVzIGFyZSB1c2VkIHRvIGRldGVybWluZSB0aGUgdmlzdWFsIHBvc2l0aW9uIG9mIHRoZSB0YWIgd2l0aCByZXNwZWN0IG9mIGl0cyBwYXJlbnQgY29udGFpbmVyXHJcbmV4cG9ydCBpbnRlcmZhY2UgRm5nVGFiRGltZW5zaW9ucyB7XHJcbiAgcm9vdExlZnQ6IG51bWJlcjtcclxuICByb290UmlnaHQ6IG51bWJlcjtcclxuICBjb250ZW50TGVmdDogbnVtYmVyO1xyXG4gIGNvbnRlbnRSaWdodDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZuZ1RhYlNjcm9sbEFuaW1hdGlvbiB7XHJcbiAgZmluYWxTY3JvbGxQb3NpdGlvbjogbnVtYmVyO1xyXG4gIHNjcm9sbERlbHRhOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRm5nVGFiU2Nyb2xsSG9yaXpvbnRhbEVkZ2VzIHtcclxuICBsZWZ0OiBudW1iZXI7XHJcbiAgcmlnaHQ6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGbmdCZWZvcmVUYWJDaGFuZ2VFdmVudCB7XHJcbiAgb2s6ICgpID0+IHZvaWQ7XHJcbiAgY2FuY2VsOiAoKSA9PiB2b2lkO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG4gIHNlbGVjdG9yOiAnZm5nLXRhYnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEZuZ1RhYnNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIHN0YXRpYyBuZXh0SWQgPSAwO1xyXG4gIEBJbnB1dCgnZm5nVGFic1ZpZXdUeXBlJykgdmlld1R5cGU6IEZuZ1RhYlZpZXdUeXBlID0gJ3Jlc3BvbnNpdmUnO1xyXG4gIEBJbnB1dCgnZm5nVGFic1VzZUJvdHRvbURpdmlkZXInKSBzaG93RGl2aWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBjb25maWc6IEZuZ1RhYnNDb25maWd1cmF0aW9uIHwgbnVsbCA9IG51bGw7XHJcbiAgQE91dHB1dCgpIGZuZ0JlZm9yZVRhYkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Rm5nQmVmb3JlVGFiQ2hhbmdlRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIGZuZ1RhYkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBwcmV2aW91czogc3RyaW5nOyBjdXJyZW50OiBzdHJpbmcgfT4oKTtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihGbmdUYWJQYW5lQ29tcG9uZW50KSBwYW5lczogUXVlcnlMaXN0PEZuZ1RhYlBhbmVDb21wb25lbnQ+IHwgdW5kZWZpbmVkO1xyXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbGVyJykgc2Nyb2xsZXI6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsQWVyYScpIHNjcm9sbEFlcmE6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XHJcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsQ29udGVudCcpIHNjcm9sbENvbnRlbnQ6IEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ7XHJcblxyXG4gIGNvbXBvbmVudElkID0gYHRhYnMtJHsrK0ZuZ1RhYnNDb21wb25lbnQubmV4dElkfWA7XHJcbiAgdGFiczogRm5nVGFiW10gPSBbXTtcclxuICB1c2VDb21wYWN0RGVuc2l0eTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBhY3RpdmVUYWI6IEZuZ1RhYiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIGVsZW1TY3JvbGxlcjogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBlbGVtU2Nyb2xsQXJlYTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBlbGVtU2Nyb2xsQ29udGVudDogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RlZFdpbmRvdzogV2luZG93IHwgbnVsbDtcclxuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyITogUmVzaXplT2JzZXJ2ZXI7XHJcbiAgcHJpdmF0ZSBjb21wbGV0ZTogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcclxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHRoaXMuaW5qZWN0ZWRXaW5kb3cgPSB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3O1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgdGhpcy5pbml0VGFicygpO1xyXG4gICAgaWYgKG51bGwgPT0gdGhpcy5hY3RpdmVUYWIpIHtcclxuICAgICAgdGhpcy5wYW5lcz8ubWFwKChwYW5lLCBpKSA9PiB7XHJcbiAgICAgICAgaWYgKDAgPT09IGkpIHtcclxuICAgICAgICAgIHBhbmUuaXNWaXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZXM/LmZpbmQocGFuZSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVGFiKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVUYWIucGFuZUlkICE9IG51bGwgJiYgcGFuZS50YWJQYW5lSWQgPT09IHRoaXMuYWN0aXZlVGFiLnBhbmVJZDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChwYW5lKSB7XHJcbiAgICAgICAgcGFuZS5pc1Zpc2libGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVsZW1TY3JvbGxlciA9IHRoaXMuc2Nyb2xsZXI/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB0aGlzLmVsZW1TY3JvbGxBcmVhID0gdGhpcy5zY3JvbGxBZXJhPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgdGhpcy5lbGVtU2Nyb2xsQ29udGVudCA9IHRoaXMuc2Nyb2xsQ29udGVudD8ubmF0aXZlRWxlbWVudDtcclxuICAgIGlmICh0aGlzLmVsZW1TY3JvbGxlciA9PSBudWxsIHx8IHRoaXMuZWxlbVNjcm9sbEFyZWEgPT0gbnVsbCB8fCB0aGlzLmVsZW1TY3JvbGxDb250ZW50ID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW5pdGlhbFdpZHRoID0gdGhpcy5lbGVtU2Nyb2xsQXJlYS5vZmZzZXRXaWR0aDtcclxuICAgIGlmIChpbml0aWFsV2lkdGggIT0gbnVsbCAmJiBpbml0aWFsV2lkdGggPiA3NjgpIHtcclxuICAgICAgdGhpcy51c2VDb21wYWN0RGVuc2l0eSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZWxlbVNjcm9sbEFyZWEgPT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB3aWR0aCA9IHRoaXMuZWxlbVNjcm9sbEFyZWEub2Zmc2V0V2lkdGg7XHJcbiAgICAgIGlmICh3aWR0aCAhPSBudWxsICYmIHdpZHRoID4gNzY4ICYmIHRoaXMudXNlQ29tcGFjdERlbnNpdHkgPT09IHRydWUpIHtcclxuICAgICAgICB0aGlzLnVzZUNvbXBhY3REZW5zaXR5ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAod2lkdGggIT0gbnVsbCAmJiB3aWR0aCA8PSA3NjggJiYgdGhpcy51c2VDb21wYWN0RGVuc2l0eSA9PT0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLnVzZUNvbXBhY3REZW5zaXR5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZWxlbVNjcm9sbEFyZWEgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtU2Nyb2xsQXJlYSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5oYW5kbGVUYWJQYW5lQ2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbXBsZXRlLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmNvbXBsZXRlLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBzaG93VGFiUGFuZShpZDogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgaWYgKGlkID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzPy5maW5kKHAgPT4gcC50YWJQYW5lSWQgPT09IGlkKTtcclxuICAgIGNvbnN0IGhhbmRsZVRhYkNoYW5nZSA9IChpZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmIChwYW5lICE9IG51bGwgJiYgcGFuZS5kaXNhYmxlZCAhPT0gdHJ1ZSkge1xyXG4gICAgICAgIHRoaXMucGFuZXM/Lm1hcChwID0+IHtcclxuICAgICAgICAgIHAuaXNWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcGFuZS5pc1Zpc2libGUgPSB0cnVlO1xyXG5cclxuICAgICAgICB0aGlzLnRhYnMubWFwKHRhYiA9PiB7XHJcbiAgICAgICAgICBpZiAodGFiLnBhbmVJZCAhPT0gcGFuZS50YWJQYW5lSWQpIHtcclxuICAgICAgICAgICAgdGFiLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGFiLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5mbmdUYWJDaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgICBwcmV2aW91czogdGhpcy5hY3RpdmVUYWI/LnBhbmVJZCB8fCAnJyxcclxuICAgICAgICAgIGN1cnJlbnQ6IGlkXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSB0aGlzLnRhYnMuZmluZCh0YWIgPT4gISF0YWIuYWN0aXZlKTtcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5mbmdCZWZvcmVUYWJDaGFuZ2U/Lm9ic2VydmVycz8ubGVuZ3RoID4gMCAmJiBwYW5lPy5kaXNhYmxlZCAhPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmZuZ0JlZm9yZVRhYkNoYW5nZS5lbWl0KHtcclxuICAgICAgICBvazogKCkgPT4ge1xyXG4gICAgICAgICAgaGFuZGxlVGFiQ2hhbmdlKGlkKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbmNlbDogKCkgPT4ge1xyXG4gICAgICAgICAgbm9vcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBoYW5kbGVUYWJDaGFuZ2UoaWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlVGFiU2Nyb2xsKGV2ZW50OiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmVsZW1TY3JvbGxDb250ZW50ID09IG51bGwgfHwgdGhpcy5lbGVtU2Nyb2xsQXJlYSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNjcm9sbENvbnRlbnRXaWR0aCA9IHRoaXMuZWxlbVNjcm9sbENvbnRlbnQub2Zmc2V0V2lkdGg7XHJcbiAgICBjb25zdCBzY3JvbGxBcmVhV2lkdGggPSB0aGlzLmVsZW1TY3JvbGxBcmVhLm9mZnNldFdpZHRoO1xyXG5cclxuICAgIC8vIGNoZWNrIGlmIG5vIHNjcm9sbCBpcyBuZWVkZWRcclxuICAgIGlmIChzY3JvbGxBcmVhV2lkdGggPiBzY3JvbGxDb250ZW50V2lkdGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNoZWNrIGluZGV4XHJcbiAgICBpZiAoIXRoaXMuaW5kZXhJc0luUmFuZ2UoaW5kZXgpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBhbHdheXMgc2Nyb2xsIHRvIDAgaWYgc2Nyb2xsaW5nIHRvIHRoZSBmaXJzdCB0YWJcclxuICAgIGlmIChpbmRleCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnNjcm9sbFRvKDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gYWx3YXlzIHNjcm9sbCB0byB0aGUgbWF4IHZhbHVlIGlmIHNjcm9sbGluZyB0byB0aGUgbGFzdCB0YWJcclxuICAgIGlmIChpbmRleCA9PT0gdGhpcy50YWJzLmxlbmd0aCAtIDEpIHtcclxuICAgICAgdGhpcy5zY3JvbGxUbyh0aGlzLmVsZW1TY3JvbGxDb250ZW50Lm9mZnNldFdpZHRoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRUYWI6IEhUTUxFbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgdGhpcy5zY3JvbGxJbnRvVmlldyhpbmRleCwgY3VycmVudFRhYik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRUYWJzKCkge1xyXG4gICAgdGhpcy50YWJzID0gW107XHJcbiAgICB0aGlzLnBhbmVzPy5tYXAoKHBhbmUsIGkpID0+IHtcclxuICAgICAgcGFuZS50YWJJZCA9IHRoaXMuY29tcG9uZW50SWQgKyAnLXRhYi0nICsgaTtcclxuICAgICAgY29uc3QgdGFiOiBGbmdUYWIgPSB7XHJcbiAgICAgICAgbmFtZTogbnVsbCAhPSBwYW5lLm5hbWUgPyBwYW5lLm5hbWUgOiAnJyxcclxuICAgICAgICBwYW5lSWQ6IG51bGwgIT0gcGFuZS50YWJQYW5lSWQgPyBwYW5lLnRhYlBhbmVJZCA6IG51bGwsXHJcbiAgICAgICAgaWNvbjogbnVsbCAhPSBwYW5lLmljb24gPyBwYW5lLmljb24gOiBudWxsLFxyXG4gICAgICAgIGFjdGl2ZTogbnVsbCAhPSBwYW5lLmFjdGl2ZSA/IHBhbmUuYWN0aXZlIDogZmFsc2UsXHJcbiAgICAgICAgZGlzYWJsZWQ6IG51bGwgIT0gcGFuZS5kaXNhYmxlZCA/IHBhbmUuZGlzYWJsZWQgOiBmYWxzZVxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnRhYnMucHVzaCh0YWIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5pbml0QWN0aXZlVGFiKCk7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdEFjdGl2ZVRhYigpIHtcclxuICAgIGNvbnN0IGFjdGl2ZVRhYjogRm5nVGFiIHwgdW5kZWZpbmVkID0gdGhpcy50YWJzLmZpbmQoKHRhYjogRm5nVGFiKSA9PiAhIXRhYi5hY3RpdmUpO1xyXG4gICAgaWYgKCFhY3RpdmVUYWIgJiYgMCA8IHRoaXMudGFicy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy50YWJzWzBdID0geyAuLi50aGlzLnRhYnNbMF0sIGFjdGl2ZTogdHJ1ZSB9O1xyXG4gICAgICB0aGlzLmFjdGl2ZVRhYiA9IHRoaXMudGFic1swXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlVGFiID0gYWN0aXZlVGFiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVUYWJQYW5lQ2hhbmdlcygpIHtcclxuICAgIC8vIGZpcnN0IHN1YnNjcmliZSB0byBhbnkgY2hhbmdlcyBpbiB0YWIgcGFuZSwgc28gdGhhdCB0aGUgdGFicyBpbiB0aGlzIHZpZXcgd2lpbCBiZSB1cGRhdGVkXHJcbiAgICB0aGlzLnBhbmVzPy5mb3JFYWNoKHBhbmUgPT4ge1xyXG4gICAgICBwYW5lLmNoYW5nZXMkLnBpcGUodGFrZVVudGlsKHRoaXMuY29tcGxldGUpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIC8vIG9uIGNoYW5nZXMgaW4gYSB0YWIgcGFuZSwgd2UgaW5pdCB0aGUgdGFicyBhZ2FpblxyXG4gICAgICAgIHRoaXMuaW5pdFRhYnMoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2Nyb2xsVG8oc2Nyb2xsWDogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAoc2Nyb2xsWCA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxYID0gdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpO1xyXG4gICAgY29uc3Qgc2FmZVNjcm9sbFggPSB0aGlzLmNsYW1wU2Nyb2xsVmFsdWUoc2Nyb2xsWCk7XHJcbiAgICBpZiAoc2FmZVNjcm9sbFggPT0gbnVsbCB8fCBjdXJyZW50U2Nyb2xsWCA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNjcm9sbERlbHRhID0gc2FmZVNjcm9sbFggLSBjdXJyZW50U2Nyb2xsWDtcclxuICAgIHRoaXMuYW5pbWF0ZSh7XHJcbiAgICAgIGZpbmFsU2Nyb2xsUG9zaXRpb246IHNhZmVTY3JvbGxYLFxyXG4gICAgICBzY3JvbGxEZWx0YVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNjcm9sbEludG9WaWV3KGluZGV4OiBudW1iZXIsIHRhYjogSFRNTEVsZW1lbnQpIHtcclxuICAgIGlmICh0aGlzLmVsZW1TY3JvbGxBcmVhID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNjcm9sbFBvc2l0aW9uID0gdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpO1xyXG4gICAgY29uc3QgYmFyV2lkdGggPSB0aGlzLmVsZW1TY3JvbGxBcmVhLm9mZnNldFdpZHRoO1xyXG4gICAgaWYgKGJhcldpZHRoID09IG51bGwgfHwgc2Nyb2xsUG9zaXRpb24gPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGFiRGltZW5zaW9ucyA9IHRoaXMuY29tcHV0ZURpbWVuc2lvbnModGFiKTtcclxuICAgIGlmICh0YWJEaW1lbnNpb25zID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5leHRJbmRleCA9IHRoaXMuZmluZEFkamFjZW50VGFiSW5kZXhDbG9zZXN0VG9FZGdlKGluZGV4LCB0YWJEaW1lbnNpb25zLCBzY3JvbGxQb3NpdGlvbiwgYmFyV2lkdGgpO1xyXG4gICAgaWYgKCF0aGlzLmluZGV4SXNJblJhbmdlKG5leHRJbmRleCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNjcm9sbEluY3JlbWVudCA9IHRoaXMuY2FsY3VsYXRlU2Nyb2xsSW5jcmVtZW50KGluZGV4LCBuZXh0SW5kZXgsIHNjcm9sbFBvc2l0aW9uLCBiYXJXaWR0aCk7XHJcbiAgICBpZiAoc2Nyb2xsSW5jcmVtZW50ID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5jcmVtZW50U2Nyb2xsKHNjcm9sbEluY3JlbWVudCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluY3JlbWVudFNjcm9sbChzY3JvbGxYSW5jcmVtZW50OiBudW1iZXIpIHtcclxuICAgIC8vIG5vIHNjcm9sbCBuZWVkZWRcclxuICAgIGlmIChzY3JvbGxYSW5jcmVtZW50ID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNjcm9sbE9wZXJhdGlvbiA9IHRoaXMuZ2V0SW5jcmVtZW50U2Nyb2xsT3BlcmF0aW9uKHNjcm9sbFhJbmNyZW1lbnQpO1xyXG4gICAgaWYgKHNjcm9sbE9wZXJhdGlvbiA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYW5pbWF0ZShzY3JvbGxPcGVyYXRpb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhbmltYXRlKGFuaW1hdGlvbjogRm5nVGFiU2Nyb2xsQW5pbWF0aW9uKSB7XHJcbiAgICAvLyBubyBhbmltYXRpb24gbmVlZGVkXHJcbiAgICBpZiAoYW5pbWF0aW9uLnNjcm9sbERlbHRhID09PSAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBubyBhbmltYXRpb24gcG9zc2libGVcclxuICAgIGlmICh0aGlzLmVsZW1TY3JvbGxBcmVhID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RvcFNjcm9sbEFuaW1hdGlvbigpO1xyXG5cclxuICAgIC8vIHRoaXMgYW5pbWF0aW9uIHVzZXMgdGhlIGZsaXAgYXBwcm9hY2hcclxuICAgIC8vIGh0dHBzOi8vYWVyb3R3aXN0LmNvbS9ibG9nL2ZsaXAteW91ci1hbmltYXRpb25zL1xyXG4gICAgLy8gaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9hbmltYXRpbmctbGF5b3V0cy13aXRoLXRoZS1mbGlwLXRlY2huaXF1ZS9cclxuICAgIHRoaXMuZWxlbVNjcm9sbEFyZWEuc2Nyb2xsTGVmdCA9IGFuaW1hdGlvbi5maW5hbFNjcm9sbFBvc2l0aW9uO1xyXG4gICAgdGhpcy5zZXRTY3JvbGxDb250ZW50U3R5bGVQcm9wZXJ0eSgndHJhbnNmb3JtJywgYHRyYW5zbGF0ZVgoJHthbmltYXRpb24uc2Nyb2xsRGVsdGF9cHgpYCk7XHJcbiAgICAvLyBmb3JjZSByZXBhaW50XHJcbiAgICB0aGlzLmVsZW1TY3JvbGxBcmVhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtU2Nyb2xsZXIsICdmbmctdGFiLXNjcm9sbGVyLS1hbmltYXRpbmcnKTtcclxuICAgICAgdGhpcy5zZXRTY3JvbGxDb250ZW50U3R5bGVQcm9wZXJ0eSgndHJhbnNmb3JtJywgJ25vbmUnKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdG9wU2Nyb2xsQW5pbWF0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuZWxlbVNjcm9sbEFyZWEgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBjdXJyZW50U2Nyb2xsUG9zaXRpb24gPSB0aGlzLmdldEFuaW1hdGluZ1Njcm9sbFBvc2l0aW9uKCk7XHJcbiAgICBpZiAoY3VycmVudFNjcm9sbFBvc2l0aW9uID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtU2Nyb2xsZXIsICdmbmctdGFiLXNjcm9sbGVyLS1hbmltYXRpbmcnKTtcclxuICAgIHRoaXMuc2V0U2Nyb2xsQ29udGVudFN0eWxlUHJvcGVydHkoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGVYKDBweCknKTtcclxuICAgIHRoaXMuZWxlbVNjcm9sbEFyZWEuc2Nyb2xsTGVmdCA9IGN1cnJlbnRTY3JvbGxQb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0QW5pbWF0aW5nU2Nyb2xsUG9zaXRpb24oKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5lbGVtU2Nyb2xsQXJlYSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY3VycmVudFRyYW5zbGF0ZVggPSB0aGlzLmNhbGN1bGF0ZUN1cnJlbnRUcmFuc2xhdGVYKCk7XHJcbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gdGhpcy5lbGVtU2Nyb2xsQXJlYS5zY3JvbGxMZWZ0O1xyXG4gICAgcmV0dXJuIHNjcm9sbExlZnQgLSBjdXJyZW50VHJhbnNsYXRlWDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SW5jcmVtZW50U2Nyb2xsT3BlcmF0aW9uKHNjcm9sbFg6IG51bWJlcik6IEZuZ1RhYlNjcm9sbEFuaW1hdGlvbiB8IG51bGwge1xyXG4gICAgY29uc3QgY3VycmVudFNjcm9sbFggPSB0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCk7XHJcbiAgICBpZiAoY3VycmVudFNjcm9sbFggPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0YXJnZXRTY3JvbGxYID0gc2Nyb2xsWCArIGN1cnJlbnRTY3JvbGxYO1xyXG4gICAgY29uc3Qgc2FmZVNjcm9sbFggPSB0aGlzLmNsYW1wU2Nyb2xsVmFsdWUodGFyZ2V0U2Nyb2xsWCk7XHJcbiAgICBpZiAoc2FmZVNjcm9sbFggPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IHNjcm9sbERlbHRhID0gc2FmZVNjcm9sbFggLSBjdXJyZW50U2Nyb2xsWDtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGZpbmFsU2Nyb2xsUG9zaXRpb246IHNhZmVTY3JvbGxYLFxyXG4gICAgICBzY3JvbGxEZWx0YVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xhbXBTY3JvbGxWYWx1ZShzY3JvbGxYOiBudW1iZXIpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIGNvbnN0IGVkZ2VzID0gdGhpcy5jYWxjdWxhdGVTY3JvbGxFZGdlcygpO1xyXG4gICAgaWYgKGVkZ2VzID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoZWRnZXMubGVmdCwgc2Nyb2xsWCksIGVkZ2VzLnJpZ2h0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlU2Nyb2xsRWRnZXMoKTogRm5nVGFiU2Nyb2xsSG9yaXpvbnRhbEVkZ2VzIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5lbGVtU2Nyb2xsQXJlYSA9PSBudWxsIHx8IHRoaXMuZWxlbVNjcm9sbENvbnRlbnQgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IHNjcm9sbENvbnRlbnRXaWR0aCA9IHRoaXMuZWxlbVNjcm9sbENvbnRlbnQub2Zmc2V0V2lkdGg7XHJcbiAgICBjb25zdCBzY3JvbGxBcmVhV2lkdGggPSB0aGlzLmVsZW1TY3JvbGxBcmVhLm9mZnNldFdpZHRoO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbGVmdDogMCxcclxuICAgICAgcmlnaHQ6IHNjcm9sbENvbnRlbnRXaWR0aCAtIHNjcm9sbEFyZWFXaWR0aFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcHV0ZURpbWVuc2lvbnModGFiOiBIVE1MRWxlbWVudCk6IEZuZ1RhYkRpbWVuc2lvbnMgfCBudWxsIHtcclxuICAgIGNvbnN0IHJvb3RXaWR0aCA9IHRhYi5vZmZzZXRXaWR0aDtcclxuICAgIGNvbnN0IHJvb3RMZWZ0ID0gdGFiLm9mZnNldExlZnQ7XHJcblxyXG4gICAgY29uc3QgdGFiQ29udGVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gdGFiLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCcuZm5nLXRhYi1jb250ZW50Jyk7XHJcbiAgICBpZiAodGFiQ29udGVudCA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IHRhYkNvbnRlbnQub2Zmc2V0V2lkdGg7XHJcbiAgICBjb25zdCBjb250ZW50TGVmdCA9IHRhYkNvbnRlbnQub2Zmc2V0TGVmdDtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjb250ZW50TGVmdDogcm9vdExlZnQgKyBjb250ZW50TGVmdCxcclxuICAgICAgY29udGVudFJpZ2h0OiByb290TGVmdCArIGNvbnRlbnRMZWZ0ICsgY29udGVudFdpZHRoLFxyXG4gICAgICByb290TGVmdCxcclxuICAgICAgcm9vdFJpZ2h0OiByb290TGVmdCArIHJvb3RXaWR0aFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlU2Nyb2xsSW5jcmVtZW50KGluZGV4OiBudW1iZXIsIG5leHRJbmRleDogbnVtYmVyLCBzY3JvbGxQb3NpdGlvbjogbnVtYmVyLCBiYXJXaWR0aDogbnVtYmVyKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBjb25zdCBuZXh0VGFiOiBIVE1MRWxlbWVudCB8IG51bGwgPSAodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcclxuICAgICAgYCMke3RoaXMuY29tcG9uZW50SWR9LXRhYi0ke25leHRJbmRleH1gXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChuZXh0VGFiID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV4dFRhYkRpbWVuc2lvbnMgPSB0aGlzLmNvbXB1dGVEaW1lbnNpb25zKG5leHRUYWIpO1xyXG5cclxuICAgIGlmIChuZXh0VGFiRGltZW5zaW9ucyA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlbGF0aXZlQ29udGVudExlZnQgPSBuZXh0VGFiRGltZW5zaW9ucy5jb250ZW50TGVmdCAtIHNjcm9sbFBvc2l0aW9uIC0gYmFyV2lkdGg7XHJcbiAgICBjb25zdCByZWxhdGl2ZUNvbnRlbnRSaWdodCA9IG5leHRUYWJEaW1lbnNpb25zLmNvbnRlbnRSaWdodCAtIHNjcm9sbFBvc2l0aW9uO1xyXG4gICAgY29uc3QgbGVmdEluY3JlbWVudCA9IHJlbGF0aXZlQ29udGVudFJpZ2h0IC0gNDg7XHJcbiAgICBjb25zdCByaWdodEluY3JlbWVudCA9IHJlbGF0aXZlQ29udGVudExlZnQgKyA0ODtcclxuXHJcbiAgICBpZiAobmV4dEluZGV4IDwgaW5kZXgpIHtcclxuICAgICAgcmV0dXJuIE1hdGgubWluKGxlZnRJbmNyZW1lbnQsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBNYXRoLm1heChyaWdodEluY3JlbWVudCwgMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluZGV4SXNJblJhbmdlKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiBpbmRleCA+PSAwICYmIGluZGV4IDwgdGhpcy50YWJzLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U2Nyb2xsUG9zaXRpb24oKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5lbGVtU2Nyb2xsQXJlYSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY3VycmVudFRyYW5zbGF0ZVggPSB0aGlzLmNhbGN1bGF0ZUN1cnJlbnRUcmFuc2xhdGVYKCk7XHJcbiAgICBjb25zdCBzY3JvbGxMZWZ0ID0gdGhpcy5lbGVtU2Nyb2xsQXJlYS5zY3JvbGxMZWZ0O1xyXG5cclxuICAgIHJldHVybiBzY3JvbGxMZWZ0IC0gY3VycmVudFRyYW5zbGF0ZVg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGN1bGF0ZUN1cnJlbnRUcmFuc2xhdGVYKCk6IG51bWJlciB7XHJcbiAgICBjb25zdCB0cmFuc2Zvcm1WYWx1ZSA9IHRoaXMuZ2V0U2Nyb2xsQ29udGVudFN0eWxlVmFsdWUoJ3RyYW5zZm9ybScpO1xyXG4gICAgaWYgKHRyYW5zZm9ybVZhbHVlID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRyYW5zZm9ybVZhbHVlID09PSAnbm9uZScpIHtcclxuICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhlIHRyYW5zZm9ybSB2YWx1ZSBpcyBpbiBmb3JtIG9mICdtYXRyaXgoYSwgYiwgYywgZCwgdHgsIHR5KSdcclxuICAgIC8vIGdldCBhbGwgdGhlIHBhcmVudGhlc2l6ZWQgdmFsdWVzXHJcbiAgICBjb25zdCBtYXRjaCA9IC9cXCgoLis/KVxcKS8uZXhlYyh0cmFuc2Zvcm1WYWx1ZSk7XHJcbiAgICBpZiAoIW1hdGNoKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1hdHJpeFBhcmFtcyA9IG1hdGNoWzFdO1xyXG4gICAgLy8gd2UgbmVlZCB2YWx1ZSBvZiB0eCAtPiB0cmFuc2xhdGVYXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXHJcbiAgICBjb25zdCBbYSwgYiwgYywgZCwgdHgsIHR5XSA9IG1hdHJpeFBhcmFtcy5zcGxpdCgnLCcpO1xyXG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodHgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRTY3JvbGxDb250ZW50U3R5bGVWYWx1ZShwcm9wTmFtZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5lbGVtU2Nyb2xsQ29udGVudCA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmluamVjdGVkV2luZG93Py5nZXRDb21wdXRlZFN0eWxlKHRoaXMuZWxlbVNjcm9sbENvbnRlbnQpLmdldFByb3BlcnR5VmFsdWUocHJvcE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTY3JvbGxDb250ZW50U3R5bGVQcm9wZXJ0eShwcm9wTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbVNjcm9sbENvbnRlbnQsIHByb3BOYW1lLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRBZGphY2VudFRhYkluZGV4Q2xvc2VzdFRvRWRnZShpbmRleDogbnVtYmVyLCB0YWJEaW1lbnNpb25zOiBGbmdUYWJEaW1lbnNpb25zLCBzY3JvbGxQb3NpdGlvbjogbnVtYmVyLCBiYXJXaWR0aDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIC8qKlxyXG4gICAgICogdGFicyBhcmUgbGFpZCBvdXQgaW4gdGhlIHRhYiBzY3JvbGxlciBsaWtlIHRoaXM6XHJcbiAgICAgKlxyXG4gICAgICogICAgc2Nyb2xsIHBvc2l0aW9uXHJcbiAgICAgKiAgICArLS0tK1xyXG4gICAgICogICAgfCAgIHwgICBiYXIgd2lkdGhcclxuICAgICAqICAgIHwgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXHJcbiAgICAgKiAgICB8ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gICAgICogICAgfCAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZcclxuICAgICAqICAgIHwgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXHJcbiAgICAgKiAgICB2ICAgfCAgICAgICAgICAgICB0YWIgc2Nyb2xsZXIgICAgICAgICAgfFxyXG4gICAgICogICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tK1xyXG4gICAgICogICAgfCAgICB0YWIgICAgIHwgICAgICB0YWIgICAgIHwgICAgICAgIHRhYiAgICAgICAgfFxyXG4gICAgICogICAgKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tK1xyXG4gICAgICogICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcclxuICAgICAqICAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXHJcbiAgICAgKlxyXG4gICAgICogdG8gZGV0ZXJtaW5lIHRoZSBuZXh0IGFkamFjZW50IGluZGV4LCB3ZSBsb29rIGF0IHRoZSB0YWIgcm9vdCBsZWZ0IGFuZFxyXG4gICAgICogdGFiIHJvb3QgcmlnaHQsIGJvdGggcmVsYXRpdmUgdG8gdGhlIHNjcm9sbCBwb3NpdGlvbi4gaWYgdGhlIHRhYiByb290XHJcbiAgICAgKiBsZWZ0IGlzIGxlc3MgdGhhbiAwLCB0aGVuIHdlIGtub3cgaXQncyBvdXQgb2YgdmlldyB0byB0aGUgbGVmdC4gaWYgdGhlXHJcbiAgICAgKiB0YWIgcm9vdCByaWdodCBtaW51cyB0aGUgYmFyIHdpZHRoIGlzIGdyZWF0ZXIgdGhhbiAwLCB3ZSBrbm93IHRoZSB0YWIgaXNcclxuICAgICAqIG91dCBvZiB2aWV3IHRvIHRoZSByaWdodC4gZnJvbSB0aGVyZSwgd2UgZWl0aGVyIGluY3JlbWVudCBvciBkZWNyZW1lbnRcclxuICAgICAqIHRoZSBpbmRleC5cclxuICAgICAqL1xyXG4gICAgY29uc3QgcmVsYXRpdmVSb290TGVmdCA9IHRhYkRpbWVuc2lvbnMucm9vdExlZnQgLSBzY3JvbGxQb3NpdGlvbjtcclxuICAgIGNvbnN0IHJlbGF0aXZlUm9vdFJpZ2h0ID0gdGFiRGltZW5zaW9ucy5yb290UmlnaHQgLSBzY3JvbGxQb3NpdGlvbiAtIGJhcldpZHRoO1xyXG4gICAgY29uc3QgcmVsYXRpdmVSb290RGVsdGEgPSByZWxhdGl2ZVJvb3RMZWZ0ICsgcmVsYXRpdmVSb290UmlnaHQ7XHJcbiAgICBjb25zdCBsZWZ0RWRnZUlzQ2xvc2VyID0gcmVsYXRpdmVSb290TGVmdCA8IDAgfHwgcmVsYXRpdmVSb290RGVsdGEgPCAwO1xyXG4gICAgY29uc3QgcmlnaHRFZGdlSXNDbG9zZXIgPSByZWxhdGl2ZVJvb3RSaWdodCA+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==
@@ -11,19 +11,19 @@ export class FngClickOutsideDirective {
11
11
  this.clickOutside.emit(null);
12
12
  }
13
13
  }
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FngClickOutsideDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
15
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.8", type: FngClickOutsideDirective, isStandalone: true, selector: "[fngClickOutside]", outputs: { clickOutside: "clickOutside" }, host: { listeners: { "document:click": "onClick($event.target)" } }, ngImport: i0 }); }
14
16
  }
15
- FngClickOutsideDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: FngClickOutsideDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
16
- FngClickOutsideDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.1.1", type: FngClickOutsideDirective, isStandalone: true, selector: "[fngClickOutside]", outputs: { clickOutside: "clickOutside" }, host: { listeners: { "document:click": "onClick($event.target)" } }, ngImport: i0 });
17
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: FngClickOutsideDirective, decorators: [{
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: FngClickOutsideDirective, decorators: [{
18
18
  type: Directive,
19
19
  args: [{
20
20
  standalone: true,
21
21
  selector: '[fngClickOutside]'
22
22
  }]
23
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { clickOutside: [{
23
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { clickOutside: [{
24
24
  type: Output
25
25
  }], onClick: [{
26
26
  type: HostListener,
27
27
  args: ['document:click', ['$event.target']]
28
28
  }] } });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2stb3V0c2lkZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9saWIvZGlyZWN0aXZlcy9jbGljay1vdXRzaWRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU0xRixNQUFNLE9BQU8sd0JBQXdCO0lBQ25DLFlBQW9CLEtBQWlCO1FBQWpCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFHOUIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBSEQsQ0FBQztJQU1sQyxPQUFPLENBQUMsYUFBMEI7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5QjtJQUNILENBQUM7O3FIQVpVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBSnBDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxtQkFBbUI7aUJBQzlCO2lHQUtRLFlBQVk7c0JBRGxCLE1BQU07Z0JBSUEsT0FBTztzQkFEYixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1tmbmdDbGlja091dHNpZGVdJ1xufSlcbmV4cG9ydCBjbGFzcyBGbmdDbGlja091dHNpZGVEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY2xpY2tPdXRzaWRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pXG4gIHB1YmxpYyBvbkNsaWNrKHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgaW5zaWRlID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldEVsZW1lbnQpO1xuICAgIGlmICghaW5zaWRlKSB7XG4gICAgICB0aGlzLmNsaWNrT3V0c2lkZS5lbWl0KG51bGwpO1xuICAgIH1cbiAgfVxufVxuIl19
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2stb3V0c2lkZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9saWIvZGlyZWN0aXZlcy9jbGljay1vdXRzaWRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU0xRixNQUFNLE9BQU8sd0JBQXdCO0lBQ25DLFlBQW9CLEtBQWlCO1FBQWpCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFHOUIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBSEQsQ0FBQztJQU1sQyxPQUFPLENBQUMsYUFBMEI7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM5QjtJQUNILENBQUM7OEdBWlUsd0JBQXdCO2tHQUF4Qix3QkFBd0I7OzJGQUF4Qix3QkFBd0I7a0JBSnBDLFNBQVM7bUJBQUM7b0JBQ1QsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxtQkFBbUI7aUJBQzlCOytFQUtRLFlBQVk7c0JBRGxCLE1BQU07Z0JBSUEsT0FBTztzQkFEYixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1tmbmdDbGlja091dHNpZGVdJ1xufSlcbmV4cG9ydCBjbGFzcyBGbmdDbGlja091dHNpZGVEaXJlY3RpdmUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY2xpY2tPdXRzaWRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQudGFyZ2V0J10pXG4gIHB1YmxpYyBvbkNsaWNrKHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgY29uc3QgaW5zaWRlID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldEVsZW1lbnQpO1xuICAgIGlmICghaW5zaWRlKSB7XG4gICAgICB0aGlzLmNsaWNrT3V0c2lkZS5lbWl0KG51bGwpO1xuICAgIH1cbiAgfVxufVxuIl19