@fundamental-ngx/core 0.35.3 → 0.35.4-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/action-bar/package.json +1 -1
- package/action-sheet/package.json +1 -1
- package/alert/package.json +1 -1
- package/avatar/package.json +1 -1
- package/avatar-group/package.json +1 -1
- package/bar/package.json +1 -1
- package/breadcrumb/breadcrumb-item.component.d.ts +20 -13
- package/breadcrumb/breadcrumb.component.d.ts +46 -34
- package/breadcrumb/breadcrumb.module.d.ts +3 -1
- package/breadcrumb/esm2020/breadcrumb-item.component.mjs +44 -23
- package/breadcrumb/esm2020/breadcrumb.component.mjs +93 -88
- package/breadcrumb/esm2020/breadcrumb.module.mjs +12 -4
- package/breadcrumb/fesm2015/fundamental-ngx-core-breadcrumb.mjs +147 -114
- package/breadcrumb/fesm2015/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
- package/breadcrumb/fesm2020/fundamental-ngx-core-breadcrumb.mjs +144 -111
- package/breadcrumb/fesm2020/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
- package/breadcrumb/package.json +1 -1
- package/busy-indicator/package.json +1 -1
- package/button/package.json +1 -1
- package/calendar/package.json +1 -1
- package/card/package.json +1 -1
- package/carousel/package.json +1 -1
- package/checkbox/package.json +1 -1
- package/combobox/package.json +1 -1
- package/content-density/package.json +3 -3
- package/date-picker/package.json +1 -1
- package/datetime/package.json +1 -1
- package/datetime-picker/package.json +1 -1
- package/dialog/package.json +1 -1
- package/dynamic-page/package.json +1 -1
- package/dynamic-side-content/package.json +1 -1
- package/esm2020/breadcrumb/breadcrumb-item.component.mjs +44 -23
- package/esm2020/breadcrumb/breadcrumb.component.mjs +93 -88
- package/esm2020/breadcrumb/breadcrumb.module.mjs +12 -4
- package/esm2020/overflow-layout/directives/overflow-expand.directive.mjs +6 -4
- package/esm2020/overflow-layout/directives/overflow-item-container-ref.directive.mjs +2 -2
- package/esm2020/overflow-layout/directives/overflow-item-ref.directive.mjs +20 -8
- package/esm2020/overflow-layout/directives/overflow-layout-item-container.directive.mjs +30 -3
- package/esm2020/overflow-layout/directives/overflow-layout-item.directive.mjs +12 -3
- package/esm2020/overflow-layout/index.mjs +3 -1
- package/esm2020/overflow-layout/interfaces/overflow-expand.interface.mjs +1 -1
- package/esm2020/overflow-layout/interfaces/overflow-item-ref.interface.mjs +1 -1
- package/esm2020/overflow-layout/interfaces/overflow-item.interface.mjs +1 -1
- package/esm2020/overflow-layout/overflow-layout.component.mjs +83 -157
- package/esm2020/overflow-layout/overflow-layout.service.mjs +241 -0
- package/esm2020/time/time-column/time-column.component.mjs +7 -8
- package/esm2020/utils/functions/resize-observable.mjs +9 -2
- package/facets/package.json +1 -1
- package/feed-input/package.json +1 -1
- package/feed-list-item/package.json +1 -1
- package/fesm2015/fundamental-ngx-core-breadcrumb.mjs +147 -114
- package/fesm2015/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-overflow-layout.mjs +378 -166
- package/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-time.mjs +6 -7
- package/fesm2015/fundamental-ngx-core-time.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-utils.mjs +8 -1
- package/fesm2015/fundamental-ngx-core-utils.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-breadcrumb.mjs +144 -111
- package/fesm2020/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-overflow-layout.mjs +375 -165
- package/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-time.mjs +6 -7
- package/fesm2020/fundamental-ngx-core-time.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-utils.mjs +8 -1
- package/fesm2020/fundamental-ngx-core-utils.mjs.map +1 -1
- package/file-uploader/package.json +1 -1
- package/fixed-card-layout/package.json +1 -1
- package/flexible-column-layout/package.json +1 -1
- package/form/package.json +1 -1
- package/formatted-text/package.json +1 -1
- package/grid-list/package.json +1 -1
- package/icon/package.json +1 -1
- package/illustrated-message/package.json +1 -1
- package/infinite-scroll/package.json +1 -1
- package/info-label/package.json +1 -1
- package/inline-help/package.json +1 -1
- package/input-group/package.json +1 -1
- package/layout-grid/package.json +1 -1
- package/layout-panel/package.json +1 -1
- package/link/package.json +1 -1
- package/list/package.json +1 -1
- package/menu/package.json +1 -1
- package/message-box/package.json +1 -1
- package/message-strip/package.json +1 -1
- package/message-toast/package.json +1 -1
- package/micro-process-flow/package.json +1 -1
- package/mobile-mode/package.json +1 -1
- package/multi-input/package.json +1 -1
- package/nested-list/package.json +1 -1
- package/notification/package.json +1 -1
- package/object-identifier/package.json +1 -1
- package/object-marker/package.json +1 -1
- package/object-number/package.json +1 -1
- package/object-status/package.json +1 -1
- package/overflow-layout/directives/overflow-expand.directive.d.ts +6 -5
- package/overflow-layout/directives/overflow-item-ref.directive.d.ts +16 -6
- package/overflow-layout/directives/overflow-layout-item-container.directive.d.ts +13 -1
- package/overflow-layout/directives/overflow-layout-item.directive.d.ts +7 -2
- package/overflow-layout/esm2020/directives/overflow-expand.directive.mjs +6 -4
- package/overflow-layout/esm2020/directives/overflow-item-container-ref.directive.mjs +2 -2
- package/overflow-layout/esm2020/directives/overflow-item-ref.directive.mjs +20 -8
- package/overflow-layout/esm2020/directives/overflow-layout-item-container.directive.mjs +30 -3
- package/overflow-layout/esm2020/directives/overflow-layout-item.directive.mjs +12 -3
- package/overflow-layout/esm2020/index.mjs +3 -1
- package/overflow-layout/esm2020/interfaces/overflow-expand.interface.mjs +1 -1
- package/overflow-layout/esm2020/interfaces/overflow-item-ref.interface.mjs +1 -1
- package/overflow-layout/esm2020/interfaces/overflow-item.interface.mjs +1 -1
- package/overflow-layout/esm2020/overflow-layout.component.mjs +83 -157
- package/overflow-layout/esm2020/overflow-layout.service.mjs +241 -0
- package/overflow-layout/fesm2015/fundamental-ngx-core-overflow-layout.mjs +378 -166
- package/overflow-layout/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
- package/overflow-layout/fesm2020/fundamental-ngx-core-overflow-layout.mjs +375 -165
- package/overflow-layout/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
- package/overflow-layout/index.d.ts +2 -0
- package/overflow-layout/interfaces/overflow-expand.interface.d.ts +4 -4
- package/overflow-layout/interfaces/overflow-item-ref.interface.d.ts +14 -3
- package/overflow-layout/interfaces/overflow-item.interface.d.ts +2 -1
- package/overflow-layout/overflow-layout.component.d.ts +19 -31
- package/overflow-layout/overflow-layout.service.d.ts +90 -0
- package/overflow-layout/package.json +14 -13
- package/overflow-layout/tokens/overflow-expand.token.d.ts +1 -1
- package/overflow-layout/tokens/overflow-item-ref.token.d.ts +1 -1
- package/package.json +1 -1
- package/pagination/package.json +1 -1
- package/panel/package.json +1 -1
- package/popover/package.json +1 -1
- package/product-switch/package.json +1 -1
- package/progress-indicator/package.json +1 -1
- package/quick-view/package.json +1 -1
- package/radio/package.json +1 -1
- package/rating-indicator/package.json +1 -1
- package/resizable-card-layout/package.json +1 -1
- package/scroll-spy/package.json +1 -1
- package/scrollbar/package.json +1 -1
- package/segmented-button/package.json +1 -1
- package/select/package.json +1 -1
- package/shared/package.json +1 -1
- package/shellbar/package.json +1 -1
- package/side-navigation/package.json +1 -1
- package/slider/package.json +1 -1
- package/split-button/package.json +1 -1
- package/splitter/package.json +1 -1
- package/status-indicator/package.json +1 -1
- package/step-input/package.json +1 -1
- package/switch/package.json +1 -1
- package/table/package.json +1 -1
- package/tabs/package.json +1 -1
- package/text/package.json +1 -1
- package/theming/package.json +1 -1
- package/tile/package.json +1 -1
- package/time/esm2020/time-column/time-column.component.mjs +7 -8
- package/time/fesm2015/fundamental-ngx-core-time.mjs +6 -7
- package/time/fesm2015/fundamental-ngx-core-time.mjs.map +1 -1
- package/time/fesm2020/fundamental-ngx-core-time.mjs +6 -7
- package/time/fesm2020/fundamental-ngx-core-time.mjs.map +1 -1
- package/time/package.json +1 -1
- package/time/time-column/time-column.component.d.ts +1 -0
- package/time-picker/package.json +1 -1
- package/timeline/package.json +1 -1
- package/title/package.json +1 -1
- package/token/package.json +1 -1
- package/toolbar/package.json +1 -1
- package/tree/package.json +1 -1
- package/upload-collection/package.json +1 -1
- package/utils/esm2020/functions/resize-observable.mjs +9 -2
- package/utils/fesm2015/fundamental-ngx-core-utils.mjs +8 -1
- package/utils/fesm2015/fundamental-ngx-core-utils.mjs.map +1 -1
- package/utils/fesm2020/fundamental-ngx-core-utils.mjs +8 -1
- package/utils/fesm2020/fundamental-ngx-core-utils.mjs.map +1 -1
- package/utils/package.json +1 -1
- package/vertical-navigation/package.json +1 -1
- package/wizard/package.json +1 -1
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { FocusKeyManager } from '@angular/cdk/a11y';
|
|
2
|
+
import { ElementRef, Injectable, Optional } from '@angular/core';
|
|
3
|
+
import { resizeObservable } from '@fundamental-ngx/core/utils';
|
|
4
|
+
import { debounceTime, distinctUntilChanged, filter, skip, Subject, Subscription } from 'rxjs';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@fundamental-ngx/core/utils";
|
|
7
|
+
export class OverflowLayoutListeningResult {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.showMore = false;
|
|
10
|
+
this.items = [];
|
|
11
|
+
this.hiddenItems = [];
|
|
12
|
+
this.visibleItems = [];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class OverflowLayoutService {
|
|
16
|
+
/** @hidden */
|
|
17
|
+
constructor(_elRef, _rtlService) {
|
|
18
|
+
this._elRef = _elRef;
|
|
19
|
+
this._rtlService = _rtlService;
|
|
20
|
+
/**
|
|
21
|
+
* Overflow Layout calculation result.
|
|
22
|
+
*/
|
|
23
|
+
this.result = new OverflowLayoutListeningResult();
|
|
24
|
+
/** @hidden */
|
|
25
|
+
this._listenToItemResize = true;
|
|
26
|
+
/** @hidden */
|
|
27
|
+
this._subscription = new Subscription();
|
|
28
|
+
/** @hidden */
|
|
29
|
+
this._allItems = [];
|
|
30
|
+
/** @hidden */
|
|
31
|
+
this._hiddenItems = [];
|
|
32
|
+
/** @hidden */
|
|
33
|
+
this._overflowItems = [];
|
|
34
|
+
/** @hidden */
|
|
35
|
+
this._detectChanges$ = new Subject();
|
|
36
|
+
/** @hidden */
|
|
37
|
+
this._result$ = new Subject();
|
|
38
|
+
/** @hidden */
|
|
39
|
+
this._dir = 'ltr';
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Observable which emits when changes detection is required.
|
|
43
|
+
*/
|
|
44
|
+
get detectChanges() {
|
|
45
|
+
return this._detectChanges$.asObservable();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Observable which emits when new calculation result is available.
|
|
49
|
+
*/
|
|
50
|
+
get onResult() {
|
|
51
|
+
return this._result$.asObservable();
|
|
52
|
+
}
|
|
53
|
+
/** @hidden */
|
|
54
|
+
ngOnDestroy() {
|
|
55
|
+
this._subscription.unsubscribe();
|
|
56
|
+
}
|
|
57
|
+
startListening(config) {
|
|
58
|
+
this.setConfig(config);
|
|
59
|
+
this.fitVisibleItems();
|
|
60
|
+
this._setFocusKeyManager();
|
|
61
|
+
this._listenToChanges();
|
|
62
|
+
this._subscribeToRtl();
|
|
63
|
+
}
|
|
64
|
+
setConfig(config) {
|
|
65
|
+
this.config = config;
|
|
66
|
+
}
|
|
67
|
+
_emitResult() {
|
|
68
|
+
this._result$.next(this.result);
|
|
69
|
+
}
|
|
70
|
+
/** @hidden */
|
|
71
|
+
_listenToChanges() {
|
|
72
|
+
this._subscription.add(this.config.items.changes.subscribe(() => {
|
|
73
|
+
setTimeout(() => {
|
|
74
|
+
this.fitVisibleItems();
|
|
75
|
+
});
|
|
76
|
+
}));
|
|
77
|
+
this._listenToSizeChanges(this._elRef.nativeElement, this.config.itemsWrapper);
|
|
78
|
+
}
|
|
79
|
+
/** @hidden */
|
|
80
|
+
_listenToSizeChanges(...elements) {
|
|
81
|
+
elements.forEach((element) => this._subscription.add(resizeObservable(element)
|
|
82
|
+
.pipe(skip(1), filter(() => this._listenToItemResize), distinctUntilChanged(), debounceTime(30))
|
|
83
|
+
.subscribe(() => {
|
|
84
|
+
setTimeout(() => {
|
|
85
|
+
this.fitVisibleItems();
|
|
86
|
+
});
|
|
87
|
+
})));
|
|
88
|
+
}
|
|
89
|
+
/** @hidden */
|
|
90
|
+
fitVisibleItems() {
|
|
91
|
+
this._listenToItemResize = false;
|
|
92
|
+
this._allItems = this.config.items.toArray();
|
|
93
|
+
let allItems = this.config.items.toArray();
|
|
94
|
+
allItems.forEach((item, index) => {
|
|
95
|
+
// Softly hide previously completely hidden item in order to correctly calculate it's size.
|
|
96
|
+
item.softHidden = true;
|
|
97
|
+
item.hidden = false;
|
|
98
|
+
item.index = index;
|
|
99
|
+
item.first = index === 0;
|
|
100
|
+
item.last = index === allItems.length - 1;
|
|
101
|
+
});
|
|
102
|
+
this._detectChanges$.next();
|
|
103
|
+
allItems = this.config.direction === 'right' ? allItems : allItems.reverse();
|
|
104
|
+
const visibleContainerItems = this.config.direction === 'right'
|
|
105
|
+
? this.config.visibleItems.toArray()
|
|
106
|
+
: this.config.visibleItems.toArray().reverse();
|
|
107
|
+
visibleContainerItems.forEach((i) => (i.containerRef.hidden = false));
|
|
108
|
+
this.result.showMore = false;
|
|
109
|
+
this._emitResult();
|
|
110
|
+
const containerWidth = this._elRef.nativeElement.getBoundingClientRect().width;
|
|
111
|
+
const itemsContainerWidth = this.config.itemsWrapper.getBoundingClientRect().width;
|
|
112
|
+
if (containerWidth >= itemsContainerWidth &&
|
|
113
|
+
this.config.visibleItems.length <= this.config.maxVisibleItems &&
|
|
114
|
+
this._hiddenItems.length === 0) {
|
|
115
|
+
// Make all items fully visible.
|
|
116
|
+
allItems.forEach((item) => {
|
|
117
|
+
item.softHidden = false;
|
|
118
|
+
});
|
|
119
|
+
this.result.showMore = false;
|
|
120
|
+
this.result.hiddenItems = this._hiddenItems;
|
|
121
|
+
this._emitResult();
|
|
122
|
+
this._listenToItemResize = true;
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
this.result.showMore = true;
|
|
126
|
+
this._emitResult();
|
|
127
|
+
let fittingElmCount = 0;
|
|
128
|
+
let fittingElmsWidth = 0;
|
|
129
|
+
let shouldHideItems = false;
|
|
130
|
+
const showMoreContainerWidth = Math.ceil(this.config.showMoreContainer.getBoundingClientRect().width);
|
|
131
|
+
let layoutWidth = Math.ceil(this.config.layoutContainerElement.getBoundingClientRect().width);
|
|
132
|
+
// Try to find all forced visible items
|
|
133
|
+
const forcedItemsIndexes = this._getForcedItemsIndexes();
|
|
134
|
+
forcedItemsIndexes.forEach((itemIndex) => {
|
|
135
|
+
const container = this.config.visibleItems.get(itemIndex);
|
|
136
|
+
if (!container) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const elementSize = this._getElementWidth(container.elementRef.nativeElement);
|
|
140
|
+
layoutWidth -= elementSize;
|
|
141
|
+
});
|
|
142
|
+
if (layoutWidth < 0 && forcedItemsIndexes.length > 0) {
|
|
143
|
+
console.warn('There is no enough space to fit all forced visible items into the container. Please adjust their visibility accordingly.');
|
|
144
|
+
}
|
|
145
|
+
this._detectChanges$.next();
|
|
146
|
+
visibleContainerItems.forEach((item, index) => {
|
|
147
|
+
const itemRef = allItems[index];
|
|
148
|
+
if (shouldHideItems && !itemRef.overflowItem.forceVisibility) {
|
|
149
|
+
item.containerRef.hidden = true;
|
|
150
|
+
item.softHidden = false;
|
|
151
|
+
itemRef.hidden = true;
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const elementSize = this._getElementWidth(item.elementRef.nativeElement);
|
|
155
|
+
const combinedWidth = fittingElmsWidth + elementSize;
|
|
156
|
+
const condition = (combinedWidth <= layoutWidth ||
|
|
157
|
+
(item === this.config.visibleItems.last &&
|
|
158
|
+
combinedWidth <= layoutWidth + showMoreContainerWidth)) &&
|
|
159
|
+
fittingElmCount < this.config.maxVisibleItems;
|
|
160
|
+
if (condition) {
|
|
161
|
+
fittingElmsWidth += elementSize;
|
|
162
|
+
fittingElmCount++;
|
|
163
|
+
}
|
|
164
|
+
else if (!itemRef.overflowItem.forceVisibility) {
|
|
165
|
+
shouldHideItems = true;
|
|
166
|
+
item.softHidden = false;
|
|
167
|
+
item.containerRef.hidden = true;
|
|
168
|
+
itemRef.hidden = true;
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
// Reverse original order back.
|
|
172
|
+
allItems = this.config.direction === 'right' ? allItems : allItems.reverse();
|
|
173
|
+
allItems.forEach((item) => {
|
|
174
|
+
item.softHidden = false;
|
|
175
|
+
});
|
|
176
|
+
let hiddenItems = allItems.filter((i) => i.hidden);
|
|
177
|
+
hiddenItems = !this.config.reverseHiddenItems ? hiddenItems.reverse() : hiddenItems;
|
|
178
|
+
const visibleItems = allItems.filter((i) => !i.hidden);
|
|
179
|
+
visibleItems.forEach((item, index) => {
|
|
180
|
+
item.index = index;
|
|
181
|
+
item.first = index === 0;
|
|
182
|
+
item.last = index === visibleItems.length - 1;
|
|
183
|
+
});
|
|
184
|
+
this._hiddenItems = hiddenItems.map((item, index) => {
|
|
185
|
+
item.first = index === 0;
|
|
186
|
+
item.last = index === hiddenItems.length - 1;
|
|
187
|
+
item.index = index;
|
|
188
|
+
return item;
|
|
189
|
+
});
|
|
190
|
+
this.result.showMore = this._hiddenItems.length > 0;
|
|
191
|
+
this.result.hiddenItems = this._hiddenItems;
|
|
192
|
+
this._emitResult();
|
|
193
|
+
this._listenToItemResize = true;
|
|
194
|
+
}
|
|
195
|
+
/** @hidden */
|
|
196
|
+
_setFocusKeyManager() {
|
|
197
|
+
if (!this.config.enableKeyboardNavigation) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
this._dir = this._rtlService?.rtl.value ? 'rtl' : 'ltr';
|
|
201
|
+
this._keyboardEventsManager = new FocusKeyManager(this._overflowItems)
|
|
202
|
+
.withWrap()
|
|
203
|
+
.withHorizontalOrientation(this._dir)
|
|
204
|
+
.skipPredicate((item) => !item.focusable || item.hidden);
|
|
205
|
+
}
|
|
206
|
+
/** @hidden Rtl change subscription */
|
|
207
|
+
_subscribeToRtl() {
|
|
208
|
+
if (!this._rtlService || !this.config.enableKeyboardNavigation) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
this._subscription.add(this._rtlService.rtl.subscribe((isRtl) => {
|
|
212
|
+
this._dir = isRtl ? 'rtl' : 'ltr';
|
|
213
|
+
this._keyboardEventsManager = this._keyboardEventsManager.withHorizontalOrientation(this._dir);
|
|
214
|
+
}));
|
|
215
|
+
}
|
|
216
|
+
/** @hidden */
|
|
217
|
+
_getForcedItemsIndexes() {
|
|
218
|
+
return this._allItems
|
|
219
|
+
.map((item, index) => (item.overflowItem.forceVisibility ? index : -1))
|
|
220
|
+
.filter((i) => i > -1);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* @hidden
|
|
224
|
+
* Returns combined width of the element including margins.
|
|
225
|
+
* @param element Element to calculate width of.
|
|
226
|
+
*/
|
|
227
|
+
_getElementWidth(element) {
|
|
228
|
+
const elementStyle = getComputedStyle(element);
|
|
229
|
+
const elementWidth = element.getBoundingClientRect().width;
|
|
230
|
+
const elementSize = elementWidth + parseFloat(elementStyle.marginLeft) + parseFloat(elementStyle.marginRight);
|
|
231
|
+
return Math.ceil(elementSize);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
OverflowLayoutService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutService, deps: [{ token: i0.ElementRef }, { token: i1.RtlService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
235
|
+
OverflowLayoutService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutService });
|
|
236
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: OverflowLayoutService, decorators: [{
|
|
237
|
+
type: Injectable
|
|
238
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.RtlService, decorators: [{
|
|
239
|
+
type: Optional
|
|
240
|
+
}] }]; } });
|
|
241
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmZsb3ctbGF5b3V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9vdmVyZmxvdy1sYXlvdXQvb3ZlcmZsb3ctbGF5b3V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFhLFFBQVEsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0JBQWdCLEVBQWMsTUFBTSw2QkFBNkIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBYyxJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBaUIzRyxNQUFNLE9BQU8sNkJBQTZCO0lBQTFDO1FBQ0ksYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixVQUFLLEdBQXNCLEVBQUUsQ0FBQztRQUM5QixnQkFBVyxHQUFzQixFQUFFLENBQUM7UUFDcEMsaUJBQVksR0FBc0IsRUFBRSxDQUFDO0lBQ3pDLENBQUM7Q0FBQTtBQUdELE1BQU0sT0FBTyxxQkFBcUI7SUFvRDlCLGNBQWM7SUFDZCxZQUFvQixNQUErQixFQUFzQixXQUE4QjtRQUFuRixXQUFNLEdBQU4sTUFBTSxDQUF5QjtRQUFzQixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUEvQ3ZHOztXQUVHO1FBQ0gsV0FBTSxHQUFHLElBQUksNkJBQTZCLEVBQUUsQ0FBQztRQUs3QyxjQUFjO1FBQ04sd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBRW5DLGNBQWM7UUFDRyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFcEQsY0FBYztRQUNOLGNBQVMsR0FBc0IsRUFBRSxDQUFDO1FBRTFDLGNBQWM7UUFDTixpQkFBWSxHQUFzQixFQUFFLENB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QUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGdCQUFnQixDQUFDLE9BQW9CO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssQ0FBQztRQUMzRCxNQUFNLFdBQVcsR0FBRyxZQUFZLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTlHLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsQyxDQUFDOztrSEFqU1EscUJBQXFCO3NIQUFyQixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVTs7MEJBc0QrQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBPcHRpb25hbCwgUXVlcnlMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyByZXNpemVPYnNlcnZhYmxlLCBSdGxTZXJ2aWNlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3V0aWxzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgT2JzZXJ2YWJsZSwgc2tpcCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPdmVyZmxvd0xheW91dEl0ZW1Db250YWluZXJEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvb3ZlcmZsb3ctbGF5b3V0LWl0ZW0tY29udGFpbmVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPdmVyZmxvd0l0ZW1SZWYgfSBmcm9tICcuL2ludGVyZmFjZXMvb3ZlcmZsb3ctaXRlbS1yZWYuaW50ZXJmYWNlJztcbmltcG9ydCB7IE92ZXJmbG93SXRlbSB9IGZyb20gJy4vaW50ZXJmYWNlcy9vdmVyZmxvdy1pdGVtLmludGVyZmFjZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3ZlcmZsb3dMYXlvdXRDb25maWcge1xuICAgIGl0ZW1zOiBRdWVyeUxpc3Q8T3ZlcmZsb3dJdGVtUmVmPjtcbiAgICB2aXNpYmxlSXRlbXM6IFF1ZXJ5TGlzdDxPdmVyZmxvd0xheW91dEl0ZW1Db250YWluZXJEaXJlY3RpdmU+O1xuICAgIGl0ZW1zV3JhcHBlcjogSFRNTEVsZW1lbnQ7XG4gICAgc2hvd01vcmVDb250YWluZXI6IEhUTUxFbGVtZW50O1xuICAgIGxheW91dENvbnRhaW5lckVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIG1heFZpc2libGVJdGVtczogbnVtYmVyO1xuICAgIGRpcmVjdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JztcbiAgICBlbmFibGVLZXlib2FyZE5hdmlnYXRpb246IGJvb2xlYW47XG4gICAgcmV2ZXJzZUhpZGRlbkl0ZW1zOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgT3ZlcmZsb3dMYXlvdXRMaXN0ZW5pbmdSZXN1bHQge1xuICAgIHNob3dNb3JlID0gZmFsc2U7XG4gICAgaXRlbXM6IE92ZXJmbG93SXRlbVJlZltdID0gW107XG4gICAgaGlkZGVuSXRlbXM6IE92ZXJmbG93SXRlbVJlZltdID0gW107XG4gICAgdmlzaWJsZUl0ZW1zOiBPdmVyZmxvd0l0ZW1SZWZbXSA9IFtdO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT3ZlcmZsb3dMYXlvdXRTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBPdmVyZmxvdyBMYXlvdXQgY29uZmlnLlxuICAgICAqL1xuICAgIGNvbmZpZzogT3ZlcmZsb3dMYXlvdXRDb25maWc7XG5cbiAgICAvKipcbiAgICAgKiBPdmVyZmxvdyBMYXlvdXQgY2FsY3VsYXRpb24gcmVzdWx0LlxuICAgICAqL1xuICAgIHJlc3VsdCA9IG5ldyBPdmVyZmxvd0xheW91dExpc3RlbmluZ1Jlc3VsdCgpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfa2V5Ym9hcmRFdmVudHNNYW5hZ2VyOiBGb2N1c0tleU1hbmFnZXI8T3ZlcmZsb3dJdGVtPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9JdGVtUmVzaXplID0gdHJ1ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hbGxJdGVtczogT3ZlcmZsb3dJdGVtUmVmW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaGlkZGVuSXRlbXM6IE92ZXJmbG93SXRlbVJlZltdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX292ZXJmbG93SXRlbXM6IE92ZXJmbG93SXRlbVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2RldGVjdENoYW5nZXMkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVzdWx0JCA9IG5ldyBTdWJqZWN0PE92ZXJmbG93TGF5b3V0TGlzdGVuaW5nUmVzdWx0PigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kaXI6ICdydGwnIHwgJ2x0cicgPSAnbHRyJztcblxuICAgIC8qKlxuICAgICAqIE9ic2VydmFibGUgd2hpY2ggZW1pdHMgd2hlbiBjaGFuZ2VzIGRldGVjdGlvbiBpcyByZXF1aXJlZC5cbiAgICAgKi9cbiAgICBnZXQgZGV0ZWN0Q2hhbmdlcygpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RldGVjdENoYW5nZXMkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9ic2VydmFibGUgd2hpY2ggZW1pdHMgd2hlbiBuZXcgY2FsY3VsYXRpb24gcmVzdWx0IGlzIGF2YWlsYWJsZS5cbiAgICAgKi9cbiAgICBnZXQgb25SZXN1bHQoKTogT2JzZXJ2YWJsZTxPdmVyZmxvd0xheW91dExpc3RlbmluZ1Jlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzdWx0JC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2VsUmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfcnRsU2VydmljZTogUnRsU2VydmljZSB8IG51bGwpIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBzdGFydExpc3RlbmluZyhjb25maWc6IE92ZXJmbG93TGF5b3V0Q29uZmlnKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICAgIHRoaXMuZml0VmlzaWJsZUl0ZW1zKCk7XG4gICAgICAgIHRoaXMuX3NldEZvY3VzS2V5TWFuYWdlcigpO1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub0NoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlVG9SdGwoKTtcbiAgICB9XG5cbiAgICBzZXRDb25maWcoY29uZmlnOiBPdmVyZmxvd0xheW91dENvbmZpZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9lbWl0UmVzdWx0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZXN1bHQkLm5leHQodGhpcy5yZXN1bHQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuVG9DaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgdGhpcy5jb25maWcuaXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpdFZpc2libGVJdGVtcygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5Ub1NpemVDaGFuZ2VzKHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQsIHRoaXMuY29uZmlnLml0ZW1zV3JhcHBlcik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Ub1NpemVDaGFuZ2VzKC4uLmVsZW1lbnRzOiBIVE1MRWxlbWVudFtdKTogdm9pZCB7XG4gICAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUoZWxlbWVudClcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuX2xpc3RlblRvSXRlbVJlc2l6ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDMwKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXRWaXNpYmxlSXRlbXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZml0VmlzaWJsZUl0ZW1zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9saXN0ZW5Ub0l0ZW1SZXNpemUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fYWxsSXRlbXMgPSB0aGlzLmNvbmZpZy5pdGVtcy50b0FycmF5KCk7XG5cbiAgICAgICAgbGV0IGFsbEl0ZW1zID0gdGhpcy5jb25maWcuaXRlbXMudG9BcnJheSgpO1xuXG4gICAgICAgIGFsbEl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAvLyBTb2Z0bHkgaGlkZSBwcmV2aW91c2x5IGNvbXBsZXRlbHkgaGlkZGVuIGl0ZW0gaW4gb3JkZXIgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSBpdCdzIHNpemUuXG4gICAgICAgICAgICBpdGVtLnNvZnRIaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgaXRlbS5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIGl0ZW0uaW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIGl0ZW0uZmlyc3QgPSBpbmRleCA9PT0gMDtcbiAgICAgICAgICAgIGl0ZW0ubGFzdCA9IGluZGV4ID09PSBhbGxJdGVtcy5sZW5ndGggLSAxO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzJC5uZXh0KCk7XG5cbiAgICAgICAgYWxsSXRlbXMgPSB0aGlzLmNvbmZpZy5kaXJlY3Rpb24gPT09ICdyaWdodCcgPyBhbGxJdGVtcyA6IGFsbEl0ZW1zLnJldmVyc2UoKTtcbiAgICAgICAgY29uc3QgdmlzaWJsZUNvbnRhaW5lckl0ZW1zID1cbiAgICAgICAgICAgIHRoaXMuY29uZmlnLmRpcmVjdGlvbiA9PT0gJ3JpZ2h0J1xuICAgICAgICAgICAgICAgID8gdGhpcy5jb25maWcudmlzaWJsZUl0ZW1zLnRvQXJyYXkoKVxuICAgICAgICAgICAgICAgIDogdGhpcy5jb25maWcudmlzaWJsZUl0ZW1zLnRvQXJyYXkoKS5yZXZlcnNlKCk7XG4gICAgICAgIHZpc2libGVDb250YWluZXJJdGVtcy5mb3JFYWNoKChpKSA9PiAoaS5jb250YWluZXJSZWYuaGlkZGVuID0gZmFsc2UpKTtcblxuICAgICAgICB0aGlzLnJlc3VsdC5zaG93TW9yZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9lbWl0UmVzdWx0KCk7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgY29uc3QgaXRlbXNDb250YWluZXJXaWR0aCA9IHRoaXMuY29uZmlnLml0ZW1zV3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb250YWluZXJXaWR0aCA+PSBpdGVtc0NvbnRhaW5lcldpZHRoICYmXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy52aXNpYmxlSXRlbXMubGVuZ3RoIDw9IHRoaXMuY29uZmlnLm1heFZpc2libGVJdGVtcyAmJlxuICAgICAgICAgICAgdGhpcy5faGlkZGVuSXRlbXMubGVuZ3RoID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gTWFrZSBhbGwgaXRlbXMgZnVsbHkgdmlzaWJsZS5cbiAgICAgICAgICAgIGFsbEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLnNvZnRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZXN1bHQuc2hvd01vcmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVzdWx0LmhpZGRlbkl0ZW1zID0gdGhpcy5faGlkZGVuSXRlbXM7XG4gICAgICAgICAgICB0aGlzLl9lbWl0UmVzdWx0KCk7XG4gICAgICAgICAgICB0aGlzLl9saXN0ZW5Ub0l0ZW1SZXNpemUgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzdWx0LnNob3dNb3JlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fZW1pdFJlc3VsdCgpO1xuICAgICAgICBsZXQgZml0dGluZ0VsbUNvdW50ID0gMDtcbiAgICAgICAgbGV0IGZpdHRpbmdFbG1zV2lkdGggPSAwO1xuICAgICAgICBsZXQgc2hvdWxkSGlkZUl0ZW1zID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgc2hvd01vcmVDb250YWluZXJXaWR0aCA9IE1hdGguY2VpbCh0aGlzLmNvbmZpZy5zaG93TW9yZUNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XG4gICAgICAgIGxldCBsYXlvdXRXaWR0aCA9IE1hdGguY2VpbCh0aGlzLmNvbmZpZy5sYXlvdXRDb250YWluZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKTtcblxuICAgICAgICAvLyBUcnkgdG8gZmluZCBhbGwgZm9yY2VkIHZpc2libGUgaXRlbXNcbiAgICAgICAgY29uc3QgZm9yY2VkSXRlbXNJbmRleGVzID0gdGhpcy5fZ2V0Rm9yY2VkSXRlbXNJbmRleGVzKCk7XG5cbiAgICAgICAgZm9yY2VkSXRlbXNJbmRleGVzLmZvckVhY2goKGl0ZW1JbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb25maWcudmlzaWJsZUl0ZW1zLmdldChpdGVtSW5kZXgpO1xuICAgICAgICAgICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50U2l6ZSA9IHRoaXMuX2dldEVsZW1lbnRXaWR0aChjb250YWluZXIuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcblxuICAgICAgICAgICAgbGF5b3V0V2lkdGggLT0gZWxlbWVudFNpemU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChsYXlvdXRXaWR0aCA8IDAgJiYgZm9yY2VkSXRlbXNJbmRleGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAnVGhlcmUgaXMgbm8gZW5vdWdoIHNwYWNlIHRvIGZpdCBhbGwgZm9yY2VkIHZpc2libGUgaXRlbXMgaW50byB0aGUgY29udGFpbmVyLiBQbGVhc2UgYWRqdXN0IHRoZWlyIHZpc2liaWxpdHkgYWNjb3JkaW5nbHkuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RldGVjdENoYW5nZXMkLm5leHQoKTtcblxuICAgICAgICB2aXNpYmxlQ29udGFpbmVySXRlbXMuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1SZWYgPSBhbGxJdGVtc1tpbmRleF07XG4gICAgICAgICAgICBpZiAoc2hvdWxkSGlkZUl0ZW1zICYmICFpdGVtUmVmLm92ZXJmbG93SXRlbS5mb3JjZVZpc2liaWxpdHkpIHtcbiAgICAgICAgICAgICAgICBpdGVtLmNvbnRhaW5lclJlZi5oaWRkZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGl0ZW0uc29mdEhpZGRlbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGl0ZW1SZWYuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRTaXplID0gdGhpcy5fZ2V0RWxlbWVudFdpZHRoKGl0ZW0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbWJpbmVkV2lkdGggPSBmaXR0aW5nRWxtc1dpZHRoICsgZWxlbWVudFNpemU7XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9XG4gICAgICAgICAgICAgICAgKGNvbWJpbmVkV2lkdGggPD0gbGF5b3V0V2lkdGggfHxcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW0gPT09IHRoaXMuY29uZmlnLnZpc2libGVJdGVtcy5sYXN0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lZFdpZHRoIDw9IGxheW91dFdpZHRoICsgc2hvd01vcmVDb250YWluZXJXaWR0aCkpICYmXG4gICAgICAgICAgICAgICAgZml0dGluZ0VsbUNvdW50IDwgdGhpcy5jb25maWcubWF4VmlzaWJsZUl0ZW1zO1xuXG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICAgICAgICAgICAgZml0dGluZ0VsbXNXaWR0aCArPSBlbGVtZW50U2l6ZTtcbiAgICAgICAgICAgICAgICBmaXR0aW5nRWxtQ291bnQrKztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWl0ZW1SZWYub3ZlcmZsb3dJdGVtLmZvcmNlVmlzaWJpbGl0eSkge1xuICAgICAgICAgICAgICAgIHNob3VsZEhpZGVJdGVtcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgaXRlbS5zb2Z0SGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaXRlbS5jb250YWluZXJSZWYuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpdGVtUmVmLmhpZGRlbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJldmVyc2Ugb3JpZ2luYWwgb3JkZXIgYmFjay5cbiAgICAgICAgYWxsSXRlbXMgPSB0aGlzLmNvbmZpZy5kaXJlY3Rpb24gPT09ICdyaWdodCcgPyBhbGxJdGVtcyA6IGFsbEl0ZW1zLnJldmVyc2UoKTtcblxuICAgICAgICBhbGxJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNvZnRIaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGhpZGRlbkl0ZW1zID0gYWxsSXRlbXMuZmlsdGVyKChpKSA9PiBpLmhpZGRlbik7XG4gICAgICAgIGhpZGRlbkl0ZW1zID0gIXRoaXMuY29uZmlnLnJldmVyc2VIaWRkZW5JdGVtcyA/IGhpZGRlbkl0ZW1zLnJldmVyc2UoKSA6IGhpZGRlbkl0ZW1zO1xuICAgICAgICBjb25zdCB2aXNpYmxlSXRlbXMgPSBhbGxJdGVtcy5maWx0ZXIoKGkpID0+ICFpLmhpZGRlbik7XG5cbiAgICAgICAgdmlzaWJsZUl0ZW1zLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpdGVtLmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICBpdGVtLmZpcnN0ID0gaW5kZXggPT09IDA7XG4gICAgICAgICAgICBpdGVtLmxhc3QgPSBpbmRleCA9PT0gdmlzaWJsZUl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2hpZGRlbkl0ZW1zID0gaGlkZGVuSXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaXRlbS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICAgICAgaXRlbS5sYXN0ID0gaW5kZXggPT09IGhpZGRlbkl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBpdGVtLmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZXN1bHQuc2hvd01vcmUgPSB0aGlzLl9oaWRkZW5JdGVtcy5sZW5ndGggPiAwO1xuICAgICAgICB0aGlzLnJlc3VsdC5oaWRkZW5JdGVtcyA9IHRoaXMuX2hpZGRlbkl0ZW1zO1xuICAgICAgICB0aGlzLl9lbWl0UmVzdWx0KCk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuVG9JdGVtUmVzaXplID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldEZvY3VzS2V5TWFuYWdlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5lbmFibGVLZXlib2FyZE5hdmlnYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kaXIgPSB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwudmFsdWUgPyAncnRsJyA6ICdsdHInO1xuICAgICAgICB0aGlzLl9rZXlib2FyZEV2ZW50c01hbmFnZXIgPSBuZXcgRm9jdXNLZXlNYW5hZ2VyKHRoaXMuX292ZXJmbG93SXRlbXMpXG4gICAgICAgICAgICAud2l0aFdyYXAoKVxuICAgICAgICAgICAgLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5fZGlyKVxuICAgICAgICAgICAgLnNraXBQcmVkaWNhdGUoKGl0ZW0pID0+ICFpdGVtLmZvY3VzYWJsZSB8fCBpdGVtLmhpZGRlbik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gUnRsIGNoYW5nZSBzdWJzY3JpcHRpb24gKi9cbiAgICBwcml2YXRlIF9zdWJzY3JpYmVUb1J0bCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ydGxTZXJ2aWNlIHx8ICF0aGlzLmNvbmZpZy5lbmFibGVLZXlib2FyZE5hdmlnYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICB0aGlzLl9ydGxTZXJ2aWNlLnJ0bC5zdWJzY3JpYmUoKGlzUnRsKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlyID0gaXNSdGwgPyAncnRsJyA6ICdsdHInO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyID0gdGhpcy5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5fZGlyKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRGb3JjZWRJdGVtc0luZGV4ZXMoKTogbnVtYmVyW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWxsSXRlbXNcbiAgICAgICAgICAgIC5tYXAoKGl0ZW0sIGluZGV4KSA9PiAoaXRlbS5vdmVyZmxvd0l0ZW0uZm9yY2VWaXNpYmlsaXR5ID8gaW5kZXggOiAtMSkpXG4gICAgICAgICAgICAuZmlsdGVyKChpKSA9PiBpID4gLTEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBSZXR1cm5zIGNvbWJpbmVkIHdpZHRoIG9mIHRoZSBlbGVtZW50IGluY2x1ZGluZyBtYXJnaW5zLlxuICAgICAqIEBwYXJhbSBlbGVtZW50IEVsZW1lbnQgdG8gY2FsY3VsYXRlIHdpZHRoIG9mLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldEVsZW1lbnRXaWR0aChlbGVtZW50OiBIVE1MRWxlbWVudCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRXaWR0aCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRTaXplID0gZWxlbWVudFdpZHRoICsgcGFyc2VGbG9hdChlbGVtZW50U3R5bGUubWFyZ2luTGVmdCkgKyBwYXJzZUZsb2F0KGVsZW1lbnRTdHlsZS5tYXJnaW5SaWdodCk7XG5cbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChlbGVtZW50U2l6ZSk7XG4gICAgfVxufVxuIl19
|