@ng-select/ng-select 13.9.0 → 14.0.0

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.
@@ -1,415 +0,0 @@
1
- import { DOCUMENT, NgTemplateOutlet } from '@angular/common';
2
- import { booleanAttribute, ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Inject, Input, Optional, Output, ViewChild, ViewEncapsulation, } from '@angular/core';
3
- import { animationFrameScheduler, asapScheduler, fromEvent, merge, Subject } from 'rxjs';
4
- import { auditTime, takeUntil } from 'rxjs/operators';
5
- import { isDefined } from './value-utils';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "./ng-dropdown-panel.service";
8
- const CSS_POSITIONS = ['top', 'right', 'bottom', 'left'];
9
- const SCROLL_SCHEDULER = typeof requestAnimationFrame !== 'undefined' ? animationFrameScheduler : asapScheduler;
10
- export class NgDropdownPanelComponent {
11
- constructor(_renderer, _zone, _panelService, _elementRef, _document) {
12
- this._renderer = _renderer;
13
- this._zone = _zone;
14
- this._panelService = _panelService;
15
- this._document = _document;
16
- this.items = [];
17
- this.position = 'auto';
18
- this.virtualScroll = false;
19
- this.filterValue = null;
20
- this.update = new EventEmitter();
21
- this.scroll = new EventEmitter();
22
- this.scrollToEnd = new EventEmitter();
23
- this.outsideClick = new EventEmitter();
24
- this._destroy$ = new Subject();
25
- this._scrollToEndFired = false;
26
- this._updateScrollHeight = false;
27
- this._lastScrollPosition = 0;
28
- this._dropdown = _elementRef.nativeElement;
29
- }
30
- get currentPosition() {
31
- return this._currentPosition;
32
- }
33
- get itemsLength() {
34
- return this._itemsLength;
35
- }
36
- set itemsLength(value) {
37
- if (value !== this._itemsLength) {
38
- this._itemsLength = value;
39
- this._onItemsLengthChanged();
40
- }
41
- }
42
- get _startOffset() {
43
- if (this.markedItem) {
44
- const { itemHeight, panelHeight } = this._panelService.dimensions;
45
- const offset = this.markedItem.index * itemHeight;
46
- return panelHeight > offset ? 0 : offset;
47
- }
48
- return 0;
49
- }
50
- ngOnInit() {
51
- this._select = this._dropdown.parentElement;
52
- this._virtualPadding = this.paddingElementRef.nativeElement;
53
- this._scrollablePanel = this.scrollElementRef.nativeElement;
54
- this._contentPanel = this.contentElementRef.nativeElement;
55
- this._handleScroll();
56
- this._handleOutsideClick();
57
- this._appendDropdown();
58
- this._setupMousedownListener();
59
- }
60
- ngOnChanges(changes) {
61
- if (changes.items) {
62
- const change = changes.items;
63
- this._onItemsChange(change.currentValue, change.firstChange);
64
- }
65
- }
66
- ngOnDestroy() {
67
- this._destroy$.next();
68
- this._destroy$.complete();
69
- this._destroy$.unsubscribe();
70
- if (this.appendTo) {
71
- this._renderer.removeChild(this._dropdown.parentNode, this._dropdown);
72
- }
73
- }
74
- scrollTo(option, startFromOption = false) {
75
- if (!option) {
76
- return;
77
- }
78
- const index = this.items.indexOf(option);
79
- if (index < 0 || index >= this.itemsLength) {
80
- return;
81
- }
82
- let scrollTo;
83
- if (this.virtualScroll) {
84
- const itemHeight = this._panelService.dimensions.itemHeight;
85
- scrollTo = this._panelService.getScrollTo(index * itemHeight, itemHeight, this._lastScrollPosition);
86
- }
87
- else {
88
- const item = this._dropdown.querySelector(`#${option.htmlId}`);
89
- const lastScroll = startFromOption ? item.offsetTop : this._lastScrollPosition;
90
- scrollTo = this._panelService.getScrollTo(item.offsetTop, item.clientHeight, lastScroll);
91
- }
92
- if (isDefined(scrollTo)) {
93
- this._scrollablePanel.scrollTop = scrollTo;
94
- }
95
- }
96
- scrollToTag() {
97
- const panel = this._scrollablePanel;
98
- panel.scrollTop = panel.scrollHeight - panel.clientHeight;
99
- }
100
- adjustPosition() {
101
- this._updateYPosition();
102
- }
103
- _handleDropdownPosition() {
104
- this._currentPosition = this._calculateCurrentPosition(this._dropdown);
105
- if (CSS_POSITIONS.includes(this._currentPosition)) {
106
- this._updateDropdownClass(this._currentPosition);
107
- }
108
- else {
109
- this._updateDropdownClass('bottom');
110
- }
111
- if (this.appendTo) {
112
- this._updateYPosition();
113
- }
114
- this._dropdown.style.opacity = '1';
115
- }
116
- _updateDropdownClass(currentPosition) {
117
- CSS_POSITIONS.forEach((position) => {
118
- const REMOVE_CSS_CLASS = `ng-select-${position}`;
119
- this._renderer.removeClass(this._dropdown, REMOVE_CSS_CLASS);
120
- this._renderer.removeClass(this._select, REMOVE_CSS_CLASS);
121
- });
122
- const ADD_CSS_CLASS = `ng-select-${currentPosition}`;
123
- this._renderer.addClass(this._dropdown, ADD_CSS_CLASS);
124
- this._renderer.addClass(this._select, ADD_CSS_CLASS);
125
- }
126
- _handleScroll() {
127
- this._zone.runOutsideAngular(() => {
128
- fromEvent(this.scrollElementRef.nativeElement, 'scroll')
129
- .pipe(takeUntil(this._destroy$), auditTime(0, SCROLL_SCHEDULER))
130
- .subscribe((e) => {
131
- const path = e.path || (e.composedPath && e.composedPath());
132
- if (!path || (path.length === 0 && !e.target)) {
133
- return;
134
- }
135
- const scrollTop = !path || path.length === 0 ? e.target.scrollTop : path[0].scrollTop;
136
- this._onContentScrolled(scrollTop);
137
- });
138
- });
139
- }
140
- _handleOutsideClick() {
141
- if (!this._document) {
142
- return;
143
- }
144
- this._zone.runOutsideAngular(() => {
145
- merge(fromEvent(this._document, 'touchstart', { capture: true }), fromEvent(this._document, 'click', { capture: true }))
146
- .pipe(takeUntil(this._destroy$))
147
- .subscribe(($event) => this._checkToClose($event));
148
- });
149
- }
150
- _checkToClose($event) {
151
- if (this._select.contains($event.target) || this._dropdown.contains($event.target)) {
152
- return;
153
- }
154
- const path = $event.path || ($event.composedPath && $event.composedPath());
155
- if ($event.target && $event.target.shadowRoot && path && path[0] && this._select.contains(path[0])) {
156
- return;
157
- }
158
- this._zone.run(() => this.outsideClick.emit());
159
- }
160
- _onItemsChange(items, firstChange) {
161
- this.items = items || [];
162
- this._scrollToEndFired = false;
163
- this.itemsLength = items.length;
164
- if (this.virtualScroll) {
165
- this._updateItemsRange(firstChange);
166
- }
167
- else {
168
- this._setVirtualHeight();
169
- this._updateItems(firstChange);
170
- }
171
- }
172
- _updateItems(firstChange) {
173
- this.update.emit(this.items);
174
- if (firstChange === false) {
175
- return;
176
- }
177
- this._zone.runOutsideAngular(() => {
178
- Promise.resolve().then(() => {
179
- const panelHeight = this._scrollablePanel.clientHeight;
180
- this._panelService.setDimensions(0, panelHeight);
181
- this._handleDropdownPosition();
182
- this.scrollTo(this.markedItem, firstChange);
183
- });
184
- });
185
- }
186
- _updateItemsRange(firstChange) {
187
- this._zone.runOutsideAngular(() => {
188
- this._measureDimensions().then(() => {
189
- if (firstChange) {
190
- this._renderItemsRange(this._startOffset);
191
- this._handleDropdownPosition();
192
- }
193
- else {
194
- this._renderItemsRange();
195
- }
196
- });
197
- });
198
- }
199
- _onContentScrolled(scrollTop) {
200
- if (this.virtualScroll) {
201
- this._renderItemsRange(scrollTop);
202
- }
203
- this._lastScrollPosition = scrollTop;
204
- this._fireScrollToEnd(scrollTop);
205
- }
206
- _updateVirtualHeight(height) {
207
- if (this._updateScrollHeight) {
208
- this._virtualPadding.style.height = `${height}px`;
209
- this._updateScrollHeight = false;
210
- }
211
- }
212
- _setVirtualHeight() {
213
- if (!this._virtualPadding) {
214
- return;
215
- }
216
- this._virtualPadding.style.height = `0px`;
217
- }
218
- _onItemsLengthChanged() {
219
- this._updateScrollHeight = true;
220
- }
221
- _renderItemsRange(scrollTop = null) {
222
- if (scrollTop && this._lastScrollPosition === scrollTop) {
223
- return;
224
- }
225
- scrollTop = scrollTop || this._scrollablePanel.scrollTop;
226
- const range = this._panelService.calculateItems(scrollTop, this.itemsLength, this.bufferAmount);
227
- this._updateVirtualHeight(range.scrollHeight);
228
- this._contentPanel.style.transform = `translateY(${range.topPadding}px)`;
229
- this._zone.run(() => {
230
- this.update.emit(this.items.slice(range.start, range.end));
231
- this.scroll.emit({ start: range.start, end: range.end });
232
- });
233
- if (isDefined(scrollTop) && this._lastScrollPosition === 0) {
234
- this._scrollablePanel.scrollTop = scrollTop;
235
- this._lastScrollPosition = scrollTop;
236
- }
237
- }
238
- _measureDimensions() {
239
- if (this._panelService.dimensions.itemHeight > 0 || this.itemsLength === 0) {
240
- return Promise.resolve(this._panelService.dimensions);
241
- }
242
- const [first] = this.items;
243
- this.update.emit([first]);
244
- return Promise.resolve().then(() => {
245
- const option = this._dropdown.querySelector(`#${first.htmlId}`);
246
- const optionHeight = option.clientHeight;
247
- this._virtualPadding.style.height = `${optionHeight * this.itemsLength}px`;
248
- const panelHeight = this._scrollablePanel.clientHeight;
249
- this._panelService.setDimensions(optionHeight, panelHeight);
250
- return this._panelService.dimensions;
251
- });
252
- }
253
- _fireScrollToEnd(scrollTop) {
254
- if (this._scrollToEndFired || scrollTop === 0) {
255
- return;
256
- }
257
- const padding = this.virtualScroll ? this._virtualPadding : this._contentPanel;
258
- if (scrollTop + this._dropdown.clientHeight >= padding.clientHeight - 1) {
259
- this._zone.run(() => this.scrollToEnd.emit());
260
- this._scrollToEndFired = true;
261
- }
262
- }
263
- _calculateCurrentPosition(dropdownEl) {
264
- if (this.position !== 'auto') {
265
- return this.position;
266
- }
267
- const selectRect = this._select.getBoundingClientRect();
268
- const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
269
- const offsetTop = selectRect.top + window.pageYOffset;
270
- const height = selectRect.height;
271
- const dropdownHeight = dropdownEl.getBoundingClientRect().height;
272
- if (offsetTop + height + dropdownHeight > scrollTop + document.documentElement.clientHeight) {
273
- return 'top';
274
- }
275
- else {
276
- return 'bottom';
277
- }
278
- }
279
- _appendDropdown() {
280
- if (!this.appendTo) {
281
- return;
282
- }
283
- this._parent = document.querySelector(this.appendTo);
284
- if (!this._parent) {
285
- throw new Error(`appendTo selector ${this.appendTo} did not found any parent element`);
286
- }
287
- this._updateXPosition();
288
- this._parent.appendChild(this._dropdown);
289
- }
290
- _updateXPosition() {
291
- const select = this._select.getBoundingClientRect();
292
- const parent = this._parent.getBoundingClientRect();
293
- const offsetLeft = select.left - parent.left;
294
- this._dropdown.style.left = offsetLeft + 'px';
295
- this._dropdown.style.width = select.width + 'px';
296
- this._dropdown.style.minWidth = select.width + 'px';
297
- }
298
- _updateYPosition() {
299
- const select = this._select.getBoundingClientRect();
300
- const parent = this._parent.getBoundingClientRect();
301
- const delta = select.height;
302
- if (this._currentPosition === 'top') {
303
- const offsetBottom = parent.bottom - select.bottom;
304
- this._dropdown.style.bottom = offsetBottom + delta + 'px';
305
- this._dropdown.style.top = 'auto';
306
- }
307
- else if (this._currentPosition === 'bottom') {
308
- const offsetTop = select.top - parent.top;
309
- this._dropdown.style.top = offsetTop + delta + 'px';
310
- this._dropdown.style.bottom = 'auto';
311
- }
312
- }
313
- _setupMousedownListener() {
314
- this._zone.runOutsideAngular(() => {
315
- fromEvent(this._dropdown, 'mousedown')
316
- .pipe(takeUntil(this._destroy$))
317
- .subscribe((event) => {
318
- const target = event.target;
319
- if (target.tagName === 'INPUT') {
320
- return;
321
- }
322
- event.preventDefault();
323
- });
324
- });
325
- }
326
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: NgDropdownPanelComponent, deps: [{ token: i0.Renderer2 }, { token: i0.NgZone }, { token: i1.NgDropdownPanelService }, { token: i0.ElementRef }, { token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
327
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.5", type: NgDropdownPanelComponent, isStandalone: true, selector: "ng-dropdown-panel", inputs: { items: "items", markedItem: "markedItem", position: "position", appendTo: "appendTo", bufferAmount: "bufferAmount", virtualScroll: ["virtualScroll", "virtualScroll", booleanAttribute], headerTemplate: "headerTemplate", footerTemplate: "footerTemplate", filterValue: "filterValue" }, outputs: { update: "update", scroll: "scroll", scrollToEnd: "scrollToEnd", outsideClick: "outsideClick" }, viewQueries: [{ propertyName: "contentElementRef", first: true, predicate: ["content"], descendants: true, read: ElementRef, static: true }, { propertyName: "scrollElementRef", first: true, predicate: ["scroll"], descendants: true, read: ElementRef, static: true }, { propertyName: "paddingElementRef", first: true, predicate: ["padding"], descendants: true, read: ElementRef, static: true }], usesOnChanges: true, ngImport: i0, template: `
328
- @if (headerTemplate) {
329
- <div class="ng-dropdown-header">
330
- <ng-container [ngTemplateOutlet]="headerTemplate" [ngTemplateOutletContext]="{ searchTerm: filterValue }" />
331
- </div>
332
- }
333
- <div #scroll role="listbox" class="ng-dropdown-panel-items scroll-host">
334
- <div #padding [class.total-padding]="virtualScroll"></div>
335
- <div #content [class.scrollable-content]="virtualScroll && items.length">
336
- <ng-content />
337
- </div>
338
- </div>
339
- @if (footerTemplate) {
340
- <div class="ng-dropdown-footer">
341
- <ng-container [ngTemplateOutlet]="footerTemplate" [ngTemplateOutletContext]="{ searchTerm: filterValue }" />
342
- </div>
343
- }
344
- `, isInline: true, dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
345
- }
346
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: NgDropdownPanelComponent, decorators: [{
347
- type: Component,
348
- args: [{
349
- changeDetection: ChangeDetectionStrategy.OnPush,
350
- encapsulation: ViewEncapsulation.None,
351
- selector: 'ng-dropdown-panel',
352
- standalone: true,
353
- template: `
354
- @if (headerTemplate) {
355
- <div class="ng-dropdown-header">
356
- <ng-container [ngTemplateOutlet]="headerTemplate" [ngTemplateOutletContext]="{ searchTerm: filterValue }" />
357
- </div>
358
- }
359
- <div #scroll role="listbox" class="ng-dropdown-panel-items scroll-host">
360
- <div #padding [class.total-padding]="virtualScroll"></div>
361
- <div #content [class.scrollable-content]="virtualScroll && items.length">
362
- <ng-content />
363
- </div>
364
- </div>
365
- @if (footerTemplate) {
366
- <div class="ng-dropdown-footer">
367
- <ng-container [ngTemplateOutlet]="footerTemplate" [ngTemplateOutletContext]="{ searchTerm: filterValue }" />
368
- </div>
369
- }
370
- `,
371
- imports: [NgTemplateOutlet],
372
- }]
373
- }], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.NgZone }, { type: i1.NgDropdownPanelService }, { type: i0.ElementRef }, { type: undefined, decorators: [{
374
- type: Optional
375
- }, {
376
- type: Inject,
377
- args: [DOCUMENT]
378
- }] }], propDecorators: { items: [{
379
- type: Input
380
- }], markedItem: [{
381
- type: Input
382
- }], position: [{
383
- type: Input
384
- }], appendTo: [{
385
- type: Input
386
- }], bufferAmount: [{
387
- type: Input
388
- }], virtualScroll: [{
389
- type: Input,
390
- args: [{ transform: booleanAttribute }]
391
- }], headerTemplate: [{
392
- type: Input
393
- }], footerTemplate: [{
394
- type: Input
395
- }], filterValue: [{
396
- type: Input
397
- }], update: [{
398
- type: Output
399
- }], scroll: [{
400
- type: Output
401
- }], scrollToEnd: [{
402
- type: Output
403
- }], outsideClick: [{
404
- type: Output
405
- }], contentElementRef: [{
406
- type: ViewChild,
407
- args: ['content', { read: ElementRef, static: true }]
408
- }], scrollElementRef: [{
409
- type: ViewChild,
410
- args: ['scroll', { read: ElementRef, static: true }]
411
- }], paddingElementRef: [{
412
- type: ViewChild,
413
- args: ['padding', { read: ElementRef, static: true }]
414
- }] } });
415
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZHJvcGRvd24tcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25nLXNlbGVjdC9saWIvbmctZHJvcGRvd24tcGFuZWwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RCxPQUFPLEVBQ04sZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUtMLFFBQVEsRUFDUixNQUFNLEVBSU4sU0FBUyxFQUNULGlCQUFpQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBRTFDLE1BQU0sYUFBYSxHQUF1QixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzdFLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxxQkFBcUIsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7QUEyQmhILE1BQU0sT0FBTyx3QkFBd0I7SUErQnBDLFlBQ1MsU0FBb0IsRUFDcEIsS0FBYSxFQUNiLGFBQXFDLEVBQzdDLFdBQXVCLEVBQ2UsU0FBYztRQUo1QyxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLFVBQUssR0FBTCxLQUFLLENBQVE7UUFDYixrQkFBYSxHQUFiLGFBQWEsQ0FBd0I7UUFFUCxjQUFTLEdBQVQsU0FBUyxD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QUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0MsZ0JBQWdCO3NCQUF4RSxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDRyxpQkFBaUI7c0JBQTFFLFNBQVM7dUJBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcblx0Ym9vbGVhbkF0dHJpYnV0ZSxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0RWxlbWVudFJlZixcblx0RXZlbnRFbWl0dGVyLFxuXHRJbmplY3QsXG5cdElucHV0LFxuXHROZ1pvbmUsXG5cdE9uQ2hhbmdlcyxcblx0T25EZXN0cm95LFxuXHRPbkluaXQsXG5cdE9wdGlvbmFsLFxuXHRPdXRwdXQsXG5cdFJlbmRlcmVyMixcblx0U2ltcGxlQ2hhbmdlcyxcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDaGlsZCxcblx0Vmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIsIGFzYXBTY2hlZHVsZXIsIGZyb21FdmVudCwgbWVyZ2UsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGF1ZGl0VGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTmdEcm9wZG93blBhbmVsU2VydmljZSwgUGFuZWxEaW1lbnNpb25zIH0gZnJvbSAnLi9uZy1kcm9wZG93bi1wYW5lbC5zZXJ2aWNlJztcblxuaW1wb3J0IHsgRHJvcGRvd25Qb3NpdGlvbiwgTmdPcHRpb24gfSBmcm9tICcuL25nLXNlbGVjdC50eXBlcyc7XG5pbXBvcnQgeyBpc0RlZmluZWQgfSBmcm9tICcuL3ZhbHVlLXV0aWxzJztcblxuY29uc3QgQ1NTX1BPU0lUSU9OUzogUmVhZG9ubHk8c3RyaW5nW10+ID0gWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXTtcbmNvbnN0IFNDUk9MTF9TQ0hFRFVMRVIgPSB0eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lICE9PSAndW5kZWZpbmVkJyA/IGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyIDogYXNhcFNjaGVkdWxlcjtcblxuQENvbXBvbmVudCh7XG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuXHRzZWxlY3RvcjogJ25nLWRyb3Bkb3duLXBhbmVsJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHRAaWYgKGhlYWRlclRlbXBsYXRlKSB7XG5cdFx0XHQ8ZGl2IGNsYXNzPVwibmctZHJvcGRvd24taGVhZGVyXCI+XG5cdFx0XHRcdDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGVyVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBzZWFyY2hUZXJtOiBmaWx0ZXJWYWx1ZSB9XCIgLz5cblx0XHRcdDwvZGl2PlxuXHRcdH1cblx0XHQ8ZGl2ICNzY3JvbGwgcm9sZT1cImxpc3Rib3hcIiBjbGFzcz1cIm5nLWRyb3Bkb3duLXBhbmVsLWl0ZW1zIHNjcm9sbC1ob3N0XCI+XG5cdFx0XHQ8ZGl2ICNwYWRkaW5nIFtjbGFzcy50b3RhbC1wYWRkaW5nXT1cInZpcnR1YWxTY3JvbGxcIj48L2Rpdj5cblx0XHRcdDxkaXYgI2NvbnRlbnQgW2NsYXNzLnNjcm9sbGFibGUtY29udGVudF09XCJ2aXJ0dWFsU2Nyb2xsICYmIGl0ZW1zLmxlbmd0aFwiPlxuXHRcdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9kaXY+XG5cdFx0QGlmIChmb290ZXJUZW1wbGF0ZSkge1xuXHRcdFx0PGRpdiBjbGFzcz1cIm5nLWRyb3Bkb3duLWZvb3RlclwiPlxuXHRcdFx0XHQ8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZvb3RlclRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgc2VhcmNoVGVybTogZmlsdGVyVmFsdWUgfVwiIC8+XG5cdFx0XHQ8L2Rpdj5cblx0XHR9XG5cdGAsXG5cdGltcG9ydHM6IFtOZ1RlbXBsYXRlT3V0bGV0XSxcbn0pXG5leHBvcnQgY2xhc3MgTmdEcm9wZG93blBhbmVsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cdEBJbnB1dCgpIGl0ZW1zOiBOZ09wdGlvbltdID0gW107XG5cdEBJbnB1dCgpIG1hcmtlZEl0ZW06IE5nT3B0aW9uO1xuXHRASW5wdXQoKSBwb3NpdGlvbjogRHJvcGRvd25Qb3NpdGlvbiA9ICdhdXRvJztcblx0QElucHV0KCkgYXBwZW5kVG86IHN0cmluZztcblx0QElucHV0KCkgYnVmZmVyQW1vdW50OiBudW1iZXI7XG5cdEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSB2aXJ0dWFsU2Nyb2xsID0gZmFsc2U7XG5cdEBJbnB1dCgpIGhlYWRlclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXHRASW5wdXQoKSBmb290ZXJUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55Pjtcblx0QElucHV0KCkgZmlsdGVyVmFsdWU6IHN0cmluZyA9IG51bGw7XG5cblx0QE91dHB1dCgpIHVwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cdEBPdXRwdXQoKSBzY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXIgfT4oKTtcblx0QE91dHB1dCgpIHNjcm9sbFRvRW5kID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXHRAT3V0cHV0KCkgb3V0c2lkZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG5cdEBWaWV3Q2hpbGQoJ2NvbnRlbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBjb250ZW50RWxlbWVudFJlZjogRWxlbWVudFJlZjtcblx0QFZpZXdDaGlsZCgnc2Nyb2xsJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgc2Nyb2xsRWxlbWVudFJlZjogRWxlbWVudFJlZjtcblx0QFZpZXdDaGlsZCgncGFkZGluZycsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIHBhZGRpbmdFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBfZHJvcGRvd246IEhUTUxFbGVtZW50O1xuXHRwcml2YXRlIF92aXJ0dWFsUGFkZGluZzogSFRNTEVsZW1lbnQ7XG5cdHByaXZhdGUgX3Njcm9sbGFibGVQYW5lbDogSFRNTEVsZW1lbnQ7XG5cdHByaXZhdGUgX2NvbnRlbnRQYW5lbDogSFRNTEVsZW1lbnQ7XG5cdHByaXZhdGUgX3NlbGVjdDogSFRNTEVsZW1lbnQ7XG5cdHByaXZhdGUgX3BhcmVudDogSFRNTEVsZW1lbnQ7XG5cdHByaXZhdGUgX3Njcm9sbFRvRW5kRmlyZWQgPSBmYWxzZTtcblx0cHJpdmF0ZSBfdXBkYXRlU2Nyb2xsSGVpZ2h0ID0gZmFsc2U7XG5cdHByaXZhdGUgX2xhc3RTY3JvbGxQb3NpdGlvbiA9IDA7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcblx0XHRwcml2YXRlIF96b25lOiBOZ1pvbmUsXG5cdFx0cHJpdmF0ZSBfcGFuZWxTZXJ2aWNlOiBOZ0Ryb3Bkb3duUGFuZWxTZXJ2aWNlLFxuXHRcdF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuXHRcdEBPcHRpb25hbCgpIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnksXG5cdCkge1xuXHRcdHRoaXMuX2Ryb3Bkb3duID0gX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblx0fVxuXG5cdHByaXZhdGUgX2N1cnJlbnRQb3NpdGlvbjogRHJvcGRvd25Qb3NpdGlvbjtcblxuXHRnZXQgY3VycmVudFBvc2l0aW9uKCk6IERyb3Bkb3duUG9zaXRpb24ge1xuXHRcdHJldHVybiB0aGlzLl9jdXJyZW50UG9zaXRpb247XG5cdH1cblxuXHRwcml2YXRlIF9pdGVtc0xlbmd0aDogbnVtYmVyO1xuXG5cdHByaXZhdGUgZ2V0IGl0ZW1zTGVuZ3RoKCkge1xuXHRcdHJldHVybiB0aGlzLl9pdGVtc0xlbmd0aDtcblx0fVxuXG5cdHByaXZhdGUgc2V0IGl0ZW1zTGVuZ3RoKHZhbHVlOiBudW1iZXIpIHtcblx0XHRpZiAodmFsdWUgIT09IHRoaXMuX2l0ZW1zTGVuZ3RoKSB7XG5cdFx0XHR0aGlzLl9pdGVtc0xlbmd0aCA9IHZhbHVlO1xuXHRcdFx0dGhpcy5fb25JdGVtc0xlbmd0aENoYW5nZWQoKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldCBfc3RhcnRPZmZzZXQoKSB7XG5cdFx0aWYgKHRoaXMubWFya2VkSXRlbSkge1xuXHRcdFx0Y29uc3QgeyBpdGVtSGVpZ2h0LCBwYW5lbEhlaWdodCB9ID0gdGhpcy5fcGFuZWxTZXJ2aWNlLmRpbWVuc2lvbnM7XG5cdFx0XHRjb25zdCBvZmZzZXQgPSB0aGlzLm1hcmtlZEl0ZW0uaW5kZXggKiBpdGVtSGVpZ2h0O1xuXHRcdFx0cmV0dXJuIHBhbmVsSGVpZ2h0ID4gb2Zmc2V0ID8gMCA6IG9mZnNldDtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRuZ09uSW5pdCgpIHtcblx0XHR0aGlzLl9zZWxlY3QgPSB0aGlzLl9kcm9wZG93bi5wYXJlbnRFbGVtZW50O1xuXHRcdHRoaXMuX3ZpcnR1YWxQYWRkaW5nID0gdGhpcy5wYWRkaW5nRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXHRcdHRoaXMuX3Njcm9sbGFibGVQYW5lbCA9IHRoaXMuc2Nyb2xsRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXHRcdHRoaXMuX2NvbnRlbnRQYW5lbCA9IHRoaXMuY29udGVudEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblx0XHR0aGlzLl9oYW5kbGVTY3JvbGwoKTtcblx0XHR0aGlzLl9oYW5kbGVPdXRzaWRlQ2xpY2soKTtcblx0XHR0aGlzLl9hcHBlbmREcm9wZG93bigpO1xuXHRcdHRoaXMuX3NldHVwTW91c2Vkb3duTGlzdGVuZXIoKTtcblx0fVxuXG5cdG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcblx0XHRpZiAoY2hhbmdlcy5pdGVtcykge1xuXHRcdFx0Y29uc3QgY2hhbmdlID0gY2hhbmdlcy5pdGVtcztcblx0XHRcdHRoaXMuX29uSXRlbXNDaGFuZ2UoY2hhbmdlLmN1cnJlbnRWYWx1ZSwgY2hhbmdlLmZpcnN0Q2hhbmdlKTtcblx0XHR9XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpIHtcblx0XHR0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG5cdFx0dGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcblx0XHR0aGlzLl9kZXN0cm95JC51bnN1YnNjcmliZSgpO1xuXHRcdGlmICh0aGlzLmFwcGVuZFRvKSB7XG5cdFx0XHR0aGlzLl9yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLl9kcm9wZG93bi5wYXJlbnROb2RlLCB0aGlzLl9kcm9wZG93bik7XG5cdFx0fVxuXHR9XG5cblx0c2Nyb2xsVG8ob3B0aW9uOiBOZ09wdGlvbiwgc3RhcnRGcm9tT3B0aW9uID0gZmFsc2UpIHtcblx0XHRpZiAoIW9wdGlvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IGluZGV4ID0gdGhpcy5pdGVtcy5pbmRleE9mKG9wdGlvbik7XG5cdFx0aWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLml0ZW1zTGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0bGV0IHNjcm9sbFRvO1xuXHRcdGlmICh0aGlzLnZpcnR1YWxTY3JvbGwpIHtcblx0XHRcdGNvbnN0IGl0ZW1IZWlnaHQgPSB0aGlzLl9wYW5lbFNlcnZpY2UuZGltZW5zaW9ucy5pdGVtSGVpZ2h0O1xuXHRcdFx0c2Nyb2xsVG8gPSB0aGlzLl9wYW5lbFNlcnZpY2UuZ2V0U2Nyb2xsVG8oaW5kZXggKiBpdGVtSGVpZ2h0LCBpdGVtSGVpZ2h0LCB0aGlzLl9sYXN0U2Nyb2xsUG9zaXRpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBpdGVtOiBIVE1MRWxlbWVudCA9IHRoaXMuX2Ryb3Bkb3duLnF1ZXJ5U2VsZWN0b3IoYCMke29wdGlvbi5odG1sSWR9YCk7XG5cdFx0XHRjb25zdCBsYXN0U2Nyb2xsID0gc3RhcnRGcm9tT3B0aW9uID8gaXRlbS5vZmZzZXRUb3AgOiB0aGlzLl9sYXN0U2Nyb2xsUG9zaXRpb247XG5cdFx0XHRzY3JvbGxUbyA9IHRoaXMuX3BhbmVsU2VydmljZS5nZXRTY3JvbGxUbyhpdGVtLm9mZnNldFRvcCwgaXRlbS5jbGllbnRIZWlnaHQsIGxhc3RTY3JvbGwpO1xuXHRcdH1cblxuXHRcdGlmIChpc0RlZmluZWQoc2Nyb2xsVG8pKSB7XG5cdFx0XHR0aGlzLl9zY3JvbGxhYmxlUGFuZWwuc2Nyb2xsVG9wID0gc2Nyb2xsVG87XG5cdFx0fVxuXHR9XG5cblx0c2Nyb2xsVG9UYWcoKSB7XG5cdFx0Y29uc3QgcGFuZWwgPSB0aGlzLl9zY3JvbGxhYmxlUGFuZWw7XG5cdFx0cGFuZWwuc2Nyb2xsVG9wID0gcGFuZWwuc2Nyb2xsSGVpZ2h0IC0gcGFuZWwuY2xpZW50SGVpZ2h0O1xuXHR9XG5cblx0YWRqdXN0UG9zaXRpb24oKSB7XG5cdFx0dGhpcy5fdXBkYXRlWVBvc2l0aW9uKCk7XG5cdH1cblxuXHRwcml2YXRlIF9oYW5kbGVEcm9wZG93blBvc2l0aW9uKCkge1xuXHRcdHRoaXMuX2N1cnJlbnRQb3NpdGlvbiA9IHRoaXMuX2NhbGN1bGF0ZUN1cnJlbnRQb3NpdGlvbih0aGlzLl9kcm9wZG93bik7XG5cdFx0aWYgKENTU19QT1NJVElPTlMuaW5jbHVkZXModGhpcy5fY3VycmVudFBvc2l0aW9uKSkge1xuXHRcdFx0dGhpcy5fdXBkYXRlRHJvcGRvd25DbGFzcyh0aGlzLl9jdXJyZW50UG9zaXRpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl91cGRhdGVEcm9wZG93bkNsYXNzKCdib3R0b20nKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5hcHBlbmRUbykge1xuXHRcdFx0dGhpcy5fdXBkYXRlWVBvc2l0aW9uKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5fZHJvcGRvd24uc3R5bGUub3BhY2l0eSA9ICcxJztcblx0fVxuXG5cdHByaXZhdGUgX3VwZGF0ZURyb3Bkb3duQ2xhc3MoY3VycmVudFBvc2l0aW9uOiBzdHJpbmcpIHtcblx0XHRDU1NfUE9TSVRJT05TLmZvckVhY2goKHBvc2l0aW9uKSA9PiB7XG5cdFx0XHRjb25zdCBSRU1PVkVfQ1NTX0NMQVNTID0gYG5nLXNlbGVjdC0ke3Bvc2l0aW9ufWA7XG5cdFx0XHR0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9kcm9wZG93biwgUkVNT1ZFX0NTU19DTEFTUyk7XG5cdFx0XHR0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9zZWxlY3QsIFJFTU9WRV9DU1NfQ0xBU1MpO1xuXHRcdH0pO1xuXG5cdFx0Y29uc3QgQUREX0NTU19DTEFTUyA9IGBuZy1zZWxlY3QtJHtjdXJyZW50UG9zaXRpb259YDtcblx0XHR0aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9kcm9wZG93biwgQUREX0NTU19DTEFTUyk7XG5cdFx0dGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fc2VsZWN0LCBBRERfQ1NTX0NMQVNTKTtcblx0fVxuXG5cdHByaXZhdGUgX2hhbmRsZVNjcm9sbCgpIHtcblx0XHR0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdGZyb21FdmVudCh0aGlzLnNjcm9sbEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3Njcm9sbCcpXG5cdFx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCksIGF1ZGl0VGltZSgwLCBTQ1JPTExfU0NIRURVTEVSKSlcblx0XHRcdFx0LnN1YnNjcmliZSgoZTogeyBwYXRoOyBjb21wb3NlZFBhdGg7IHRhcmdldCB9KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgcGF0aCA9IGUucGF0aCB8fCAoZS5jb21wb3NlZFBhdGggJiYgZS5jb21wb3NlZFBhdGgoKSk7XG5cdFx0XHRcdFx0aWYgKCFwYXRoIHx8IChwYXRoLmxlbmd0aCA9PT0gMCAmJiAhZS50YXJnZXQpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHNjcm9sbFRvcCA9ICFwYXRoIHx8IHBhdGgubGVuZ3RoID09PSAwID8gZS50YXJnZXQuc2Nyb2xsVG9wIDogcGF0aFswXS5zY3JvbGxUb3A7XG5cdFx0XHRcdFx0dGhpcy5fb25Db250ZW50U2Nyb2xsZWQoc2Nyb2xsVG9wKTtcblx0XHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIF9oYW5kbGVPdXRzaWRlQ2xpY2soKSB7XG5cdFx0aWYgKCF0aGlzLl9kb2N1bWVudCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXHRcdFx0bWVyZ2UoZnJvbUV2ZW50KHRoaXMuX2RvY3VtZW50LCAndG91Y2hzdGFydCcsIHsgY2FwdHVyZTogdHJ1ZSB9KSwgZnJvbUV2ZW50KHRoaXMuX2RvY3VtZW50LCAnY2xpY2snLCB7IGNhcHR1cmU6IHRydWUgfSkpXG5cdFx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG5cdFx0XHRcdC5zdWJzY3JpYmUoKCRldmVudCkgPT4gdGhpcy5fY2hlY2tUb0Nsb3NlKCRldmVudCkpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBfY2hlY2tUb0Nsb3NlKCRldmVudDogYW55KSB7XG5cdFx0aWYgKHRoaXMuX3NlbGVjdC5jb250YWlucygkZXZlbnQudGFyZ2V0KSB8fCB0aGlzLl9kcm9wZG93bi5jb250YWlucygkZXZlbnQudGFyZ2V0KSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHBhdGggPSAkZXZlbnQucGF0aCB8fCAoJGV2ZW50LmNvbXBvc2VkUGF0aCAmJiAkZXZlbnQuY29tcG9zZWRQYXRoKCkpO1xuXHRcdGlmICgkZXZlbnQudGFyZ2V0ICYmICRldmVudC50YXJnZXQuc2hhZG93Um9vdCAmJiBwYXRoICYmIHBhdGhbMF0gJiYgdGhpcy5fc2VsZWN0LmNvbnRhaW5zKHBhdGhbMF0pKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fem9uZS5ydW4oKCkgPT4gdGhpcy5vdXRzaWRlQ2xpY2suZW1pdCgpKTtcblx0fVxuXG5cdHByaXZhdGUgX29uSXRlbXNDaGFuZ2UoaXRlbXM6IE5nT3B0aW9uW10sIGZpcnN0Q2hhbmdlOiBib29sZWFuKSB7XG5cdFx0dGhpcy5pdGVtcyA9IGl0ZW1zIHx8IFtdO1xuXHRcdHRoaXMuX3Njcm9sbFRvRW5kRmlyZWQgPSBmYWxzZTtcblx0XHR0aGlzLml0ZW1zTGVuZ3RoID0gaXRlbXMubGVuZ3RoO1xuXG5cdFx0aWYgKHRoaXMudmlydHVhbFNjcm9sbCkge1xuXHRcdFx0dGhpcy5fdXBkYXRlSXRlbXNSYW5nZShmaXJzdENoYW5nZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX3NldFZpcnR1YWxIZWlnaHQoKTtcblx0XHRcdHRoaXMuX3VwZGF0ZUl0ZW1zKGZpcnN0Q2hhbmdlKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIF91cGRhdGVJdGVtcyhmaXJzdENoYW5nZTogYm9vbGVhbikge1xuXHRcdHRoaXMudXBkYXRlLmVtaXQodGhpcy5pdGVtcyk7XG5cdFx0aWYgKGZpcnN0Q2hhbmdlID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXHRcdFx0UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHBhbmVsSGVpZ2h0ID0gdGhpcy5fc2Nyb2xsYWJsZVBhbmVsLmNsaWVudEhlaWdodDtcblx0XHRcdFx0dGhpcy5fcGFuZWxTZXJ2aWNlLnNldERpbWVuc2lvbnMoMCwgcGFuZWxIZWlnaHQpO1xuXHRcdFx0XHR0aGlzLl9oYW5kbGVEcm9wZG93blBvc2l0aW9uKCk7XG5cdFx0XHRcdHRoaXMuc2Nyb2xsVG8odGhpcy5tYXJrZWRJdGVtLCBmaXJzdENoYW5nZSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgX3VwZGF0ZUl0ZW1zUmFuZ2UoZmlyc3RDaGFuZ2U6IGJvb2xlYW4pIHtcblx0XHR0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdHRoaXMuX21lYXN1cmVEaW1lbnNpb25zKCkudGhlbigoKSA9PiB7XG5cdFx0XHRcdGlmIChmaXJzdENoYW5nZSkge1xuXHRcdFx0XHRcdHRoaXMuX3JlbmRlckl0ZW1zUmFuZ2UodGhpcy5fc3RhcnRPZmZzZXQpO1xuXHRcdFx0XHRcdHRoaXMuX2hhbmRsZURyb3Bkb3duUG9zaXRpb24oKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl9yZW5kZXJJdGVtc1JhbmdlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBfb25Db250ZW50U2Nyb2xsZWQoc2Nyb2xsVG9wOiBudW1iZXIpIHtcblx0XHRpZiAodGhpcy52aXJ0dWFsU2Nyb2xsKSB7XG5cdFx0XHR0aGlzLl9yZW5kZXJJdGVtc1JhbmdlKHNjcm9sbFRvcCk7XG5cdFx0fVxuXHRcdHRoaXMuX2xhc3RTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFRvcDtcblx0XHR0aGlzLl9maXJlU2Nyb2xsVG9FbmQoc2Nyb2xsVG9wKTtcblx0fVxuXG5cdHByaXZhdGUgX3VwZGF0ZVZpcnR1YWxIZWlnaHQoaGVpZ2h0OiBudW1iZXIpIHtcblx0XHRpZiAodGhpcy5fdXBkYXRlU2Nyb2xsSGVpZ2h0KSB7XG5cdFx0XHR0aGlzLl92aXJ0dWFsUGFkZGluZy5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xuXHRcdFx0dGhpcy5fdXBkYXRlU2Nyb2xsSGVpZ2h0ID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBfc2V0VmlydHVhbEhlaWdodCgpIHtcblx0XHRpZiAoIXRoaXMuX3ZpcnR1YWxQYWRkaW5nKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5fdmlydHVhbFBhZGRpbmcuc3R5bGUuaGVpZ2h0ID0gYDBweGA7XG5cdH1cblxuXHRwcml2YXRlIF9vbkl0ZW1zTGVuZ3RoQ2hhbmdlZCgpIHtcblx0XHR0aGlzLl91cGRhdGVTY3JvbGxIZWlnaHQgPSB0cnVlO1xuXHR9XG5cblx0cHJpdmF0ZSBfcmVuZGVySXRlbXNSYW5nZShzY3JvbGxUb3AgPSBudWxsKSB7XG5cdFx0aWYgKHNjcm9sbFRvcCAmJiB0aGlzLl9sYXN0U2Nyb2xsUG9zaXRpb24gPT09IHNjcm9sbFRvcCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHNjcm9sbFRvcCA9IHNjcm9sbFRvcCB8fCB0aGlzLl9zY3JvbGxhYmxlUGFuZWwuc2Nyb2xsVG9wO1xuXHRcdGNvbnN0IHJhbmdlID0gdGhpcy5fcGFuZWxTZXJ2aWNlLmNhbGN1bGF0ZUl0ZW1zKHNjcm9sbFRvcCwgdGhpcy5pdGVtc0xlbmd0aCwgdGhpcy5idWZmZXJBbW91bnQpO1xuXHRcdHRoaXMuX3VwZGF0ZVZpcnR1YWxIZWlnaHQocmFuZ2Uuc2Nyb2xsSGVpZ2h0KTtcblx0XHR0aGlzLl9jb250ZW50UGFuZWwuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtyYW5nZS50b3BQYWRkaW5nfXB4KWA7XG5cblx0XHR0aGlzLl96b25lLnJ1bigoKSA9PiB7XG5cdFx0XHR0aGlzLnVwZGF0ZS5lbWl0KHRoaXMuaXRlbXMuc2xpY2UocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCkpO1xuXHRcdFx0dGhpcy5zY3JvbGwuZW1pdCh7IHN0YXJ0OiByYW5nZS5zdGFydCwgZW5kOiByYW5nZS5lbmQgfSk7XG5cdFx0fSk7XG5cblx0XHRpZiAoaXNEZWZpbmVkKHNjcm9sbFRvcCkgJiYgdGhpcy5fbGFzdFNjcm9sbFBvc2l0aW9uID09PSAwKSB7XG5cdFx0XHR0aGlzLl9zY3JvbGxhYmxlUGFuZWwuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuXHRcdFx0dGhpcy5fbGFzdFNjcm9sbFBvc2l0aW9uID0gc2Nyb2xsVG9wO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgX21lYXN1cmVEaW1lbnNpb25zKCk6IFByb21pc2U8UGFuZWxEaW1lbnNpb25zPiB7XG5cdFx0aWYgKHRoaXMuX3BhbmVsU2VydmljZS5kaW1lbnNpb25zLml0ZW1IZWlnaHQgPiAwIHx8IHRoaXMuaXRlbXNMZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fcGFuZWxTZXJ2aWNlLmRpbWVuc2lvbnMpO1xuXHRcdH1cblxuXHRcdGNvbnN0IFtmaXJzdF0gPSB0aGlzLml0ZW1zO1xuXHRcdHRoaXMudXBkYXRlLmVtaXQoW2ZpcnN0XSk7XG5cblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG5cdFx0XHRjb25zdCBvcHRpb24gPSB0aGlzLl9kcm9wZG93bi5xdWVyeVNlbGVjdG9yKGAjJHtmaXJzdC5odG1sSWR9YCk7XG5cdFx0XHRjb25zdCBvcHRpb25IZWlnaHQgPSBvcHRpb24uY2xpZW50SGVpZ2h0O1xuXHRcdFx0dGhpcy5fdmlydHVhbFBhZGRpbmcuc3R5bGUuaGVpZ2h0ID0gYCR7b3B0aW9uSGVpZ2h0ICogdGhpcy5pdGVtc0xlbmd0aH1weGA7XG5cdFx0XHRjb25zdCBwYW5lbEhlaWdodCA9IHRoaXMuX3Njcm9sbGFibGVQYW5lbC5jbGllbnRIZWlnaHQ7XG5cdFx0XHR0aGlzLl9wYW5lbFNlcnZpY2Uuc2V0RGltZW5zaW9ucyhvcHRpb25IZWlnaHQsIHBhbmVsSGVpZ2h0KTtcblxuXHRcdFx0cmV0dXJuIHRoaXMuX3BhbmVsU2VydmljZS5kaW1lbnNpb25zO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBfZmlyZVNjcm9sbFRvRW5kKHNjcm9sbFRvcDogbnVtYmVyKSB7XG5cdFx0aWYgKHRoaXMuX3Njcm9sbFRvRW5kRmlyZWQgfHwgc2Nyb2xsVG9wID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgcGFkZGluZyA9IHRoaXMudmlydHVhbFNjcm9sbCA/IHRoaXMuX3ZpcnR1YWxQYWRkaW5nIDogdGhpcy5fY29udGVudFBhbmVsO1xuXG5cdFx0aWYgKHNjcm9sbFRvcCArIHRoaXMuX2Ryb3Bkb3duLmNsaWVudEhlaWdodCA+PSBwYWRkaW5nLmNsaWVudEhlaWdodCAtIDEpIHtcblx0XHRcdHRoaXMuX3pvbmUucnVuKCgpID0+IHRoaXMuc2Nyb2xsVG9FbmQuZW1pdCgpKTtcblx0XHRcdHRoaXMuX3Njcm9sbFRvRW5kRmlyZWQgPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgX2NhbGN1bGF0ZUN1cnJlbnRQb3NpdGlvbihkcm9wZG93bkVsOiBIVE1MRWxlbWVudCkge1xuXHRcdGlmICh0aGlzLnBvc2l0aW9uICE9PSAnYXV0bycpIHtcblx0XHRcdHJldHVybiB0aGlzLnBvc2l0aW9uO1xuXHRcdH1cblx0XHRjb25zdCBzZWxlY3RSZWN0OiBDbGllbnRSZWN0ID0gdGhpcy5fc2VsZWN0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGNvbnN0IHNjcm9sbFRvcCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7XG5cdFx0Y29uc3Qgb2Zmc2V0VG9wID0gc2VsZWN0UmVjdC50b3AgKyB3aW5kb3cucGFnZVlPZmZzZXQ7XG5cdFx0Y29uc3QgaGVpZ2h0ID0gc2VsZWN0UmVjdC5oZWlnaHQ7XG5cdFx0Y29uc3QgZHJvcGRvd25IZWlnaHQgPSBkcm9wZG93bkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcblx0XHRpZiAob2Zmc2V0VG9wICsgaGVpZ2h0ICsgZHJvcGRvd25IZWlnaHQgPiBzY3JvbGxUb3AgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSB7XG5cdFx0XHRyZXR1cm4gJ3RvcCc7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiAnYm90dG9tJztcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIF9hcHBlbmREcm9wZG93bigpIHtcblx0XHRpZiAoIXRoaXMuYXBwZW5kVG8pIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLl9wYXJlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuYXBwZW5kVG8pO1xuXHRcdGlmICghdGhpcy5fcGFyZW50KSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGFwcGVuZFRvIHNlbGVjdG9yICR7dGhpcy5hcHBlbmRUb30gZGlkIG5vdCBmb3VuZCBhbnkgcGFyZW50IGVsZW1lbnRgKTtcblx0XHR9XG5cdFx0dGhpcy5fdXBkYXRlWFBvc2l0aW9uKCk7XG5cdFx0dGhpcy5fcGFyZW50LmFwcGVuZENoaWxkKHRoaXMuX2Ryb3Bkb3duKTtcblx0fVxuXG5cdHByaXZhdGUgX3VwZGF0ZVhQb3NpdGlvbigpIHtcblx0XHRjb25zdCBzZWxlY3QgPSB0aGlzLl9zZWxlY3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0Y29uc3QgcGFyZW50ID0gdGhpcy5fcGFyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGNvbnN0IG9mZnNldExlZnQgPSBzZWxlY3QubGVmdCAtIHBhcmVudC5sZWZ0O1xuXG5cdFx0dGhpcy5fZHJvcGRvd24uc3R5bGUubGVmdCA9IG9mZnNldExlZnQgKyAncHgnO1xuXHRcdHRoaXMuX2Ryb3Bkb3duLnN0eWxlLndpZHRoID0gc2VsZWN0LndpZHRoICsgJ3B4Jztcblx0XHR0aGlzLl9kcm9wZG93bi5zdHlsZS5taW5XaWR0aCA9IHNlbGVjdC53aWR0aCArICdweCc7XG5cdH1cblxuXHRwcml2YXRlIF91cGRhdGVZUG9zaXRpb24oKSB7XG5cdFx0Y29uc3Qgc2VsZWN0ID0gdGhpcy5fc2VsZWN0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGNvbnN0IHBhcmVudCA9IHRoaXMuX3BhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRjb25zdCBkZWx0YSA9IHNlbGVjdC5oZWlnaHQ7XG5cblx0XHRpZiAodGhpcy5fY3VycmVudFBvc2l0aW9uID09PSAndG9wJykge1xuXHRcdFx0Y29uc3Qgb2Zmc2V0Qm90dG9tID0gcGFyZW50LmJvdHRvbSAtIHNlbGVjdC5ib3R0b207XG5cdFx0XHR0aGlzLl9kcm9wZG93bi5zdHlsZS5ib3R0b20gPSBvZmZzZXRCb3R0b20gKyBkZWx0YSArICdweCc7XG5cdFx0XHR0aGlzLl9kcm9wZG93bi5zdHlsZS50b3AgPSAnYXV0byc7XG5cdFx0fSBlbHNlIGlmICh0aGlzLl9jdXJyZW50UG9zaXRpb24gPT09ICdib3R0b20nKSB7XG5cdFx0XHRjb25zdCBvZmZzZXRUb3AgPSBzZWxlY3QudG9wIC0gcGFyZW50LnRvcDtcblx0XHRcdHRoaXMuX2Ryb3Bkb3duLnN0eWxlLnRvcCA9IG9mZnNldFRvcCArIGRlbHRhICsgJ3B4Jztcblx0XHRcdHRoaXMuX2Ryb3Bkb3duLnN0eWxlLmJvdHRvbSA9ICdhdXRvJztcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIF9zZXR1cE1vdXNlZG93bkxpc3RlbmVyKCk6IHZvaWQge1xuXHRcdHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXHRcdFx0ZnJvbUV2ZW50KHRoaXMuX2Ryb3Bkb3duLCAnbW91c2Vkb3duJylcblx0XHRcdFx0LnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcblx0XHRcdFx0LnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcblx0XHRcdFx0XHRjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0XHRcdFx0aWYgKHRhcmdldC50YWdOYW1lID09PSAnSU5QVVQnKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
@@ -1,68 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class NgDropdownPanelService {
4
- constructor() {
5
- this._dimensions = {
6
- itemHeight: 0,
7
- panelHeight: 0,
8
- itemsPerViewport: 0,
9
- };
10
- }
11
- get dimensions() {
12
- return this._dimensions;
13
- }
14
- calculateItems(scrollPos, itemsLength, buffer) {
15
- const d = this._dimensions;
16
- const scrollHeight = d.itemHeight * itemsLength;
17
- const scrollTop = Math.max(0, scrollPos);
18
- const indexByScrollTop = (scrollTop / scrollHeight) * itemsLength;
19
- let end = Math.min(itemsLength, Math.ceil(indexByScrollTop) + (d.itemsPerViewport + 1));
20
- const maxStartEnd = end;
21
- const maxStart = Math.max(0, maxStartEnd - d.itemsPerViewport);
22
- let start = Math.min(maxStart, Math.floor(indexByScrollTop));
23
- let topPadding = d.itemHeight * Math.ceil(start) - d.itemHeight * Math.min(start, buffer);
24
- topPadding = !isNaN(topPadding) ? topPadding : 0;
25
- start = !isNaN(start) ? start : -1;
26
- end = !isNaN(end) ? end : -1;
27
- start -= buffer;
28
- start = Math.max(0, start);
29
- end += buffer;
30
- end = Math.min(itemsLength, end);
31
- return {
32
- topPadding,
33
- scrollHeight,
34
- start,
35
- end,
36
- };
37
- }
38
- setDimensions(itemHeight, panelHeight) {
39
- const itemsPerViewport = Math.max(1, Math.floor(panelHeight / itemHeight));
40
- this._dimensions = {
41
- itemHeight,
42
- panelHeight,
43
- itemsPerViewport,
44
- };
45
- }
46
- getScrollTo(itemTop, itemHeight, lastScroll) {
47
- const { panelHeight } = this.dimensions;
48
- const itemBottom = itemTop + itemHeight;
49
- const top = lastScroll;
50
- const bottom = top + panelHeight;
51
- if (panelHeight >= itemBottom && lastScroll === itemTop) {
52
- return null;
53
- }
54
- if (itemBottom > bottom) {
55
- return top + itemBottom - bottom;
56
- }
57
- else if (itemTop <= top) {
58
- return itemTop;
59
- }
60
- return null;
61
- }
62
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: NgDropdownPanelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
63
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: NgDropdownPanelService }); }
64
- }
65
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: NgDropdownPanelService, decorators: [{
66
- type: Injectable
67
- }] });
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZHJvcGRvd24tcGFuZWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZy1zZWxlY3QvbGliL25nLWRyb3Bkb3duLXBhbmVsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFlM0MsTUFBTSxPQUFPLHNCQUFzQjtJQURuQztRQUVTLGdCQUFXLEdBQW9CO1lBQ3RDLFVBQVUsRUFBRSxDQUFDO1lBQ2IsV0FBVyxFQUFFLENBQUM7WUFDZCxnQkFBZ0IsRUFBRSxDQUFDO1NBQ25CLENBQUM7S0E4REY7SUE1REEsSUFBSSxVQUFVO1FBQ2IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxjQUFjLENBQUMsU0FBaUIsRUFBRSxXQUFtQixFQUFFLE1BQWM7UUFDcEUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMzQixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztRQUVoRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6QyxNQUFNLGdCQUFnQixHQUFHLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNsRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV4RixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUM7UUFDeEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQy9ELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBRTdELElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFGLFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakQsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ25DLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixLQUFLLElBQUksTUFBTSxDQUFDO1FBQ2hCLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMzQixHQUFHLElBQUksTUFBTSxDQUFDO1FBQ2QsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRWpDLE9BQU87WUFDTixVQUFVO1lBQ1YsWUFBWTtZQUNaLEtBQUs7WUFDTCxHQUFHO1NBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsVUFBa0IsRUFBRSxXQUFtQjtRQUNwRCxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFdBQVcsR0FBRztZQUNsQixVQUFVO1lBQ1YsV0FBVztZQUNYLGdCQUFnQjtTQUNoQixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFlLEVBQUUsVUFBa0IsRUFBRSxVQUFrQjtRQUNsRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN4QyxNQUFNLFVBQVUsR0FBRyxPQUFPLEdBQUcsVUFBVSxDQUFDO1FBQ3hDLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQztRQUN2QixNQUFNLE1BQU0sR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDO1FBRWpDLElBQUksV0FBVyxJQUFJLFVBQVUsSUFBSSxVQUFVLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDekQsT0FBTyxJQUFJLENBQUM7UUFDYixDQUFDO1FBRUQsSUFBSSxVQUFVLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDekIsT0FBTyxHQUFHLEdBQUcsVUFBVSxHQUFHLE1BQU0sQ0FBQztRQUNsQyxDQUFDO2FBQU0sSUFBSSxPQUFPLElBQUksR0FBRyxFQUFFLENBQUM7WUFDM0IsT0FBTyxPQUFPLENBQUM7UUFDaEIsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQzs4R0FsRVcsc0JBQXNCO2tIQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBRGxDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5leHBvcnQgaW50ZXJmYWNlIEl0ZW1zUmFuZ2VSZXN1bHQge1xuXHRzY3JvbGxIZWlnaHQ6IG51bWJlcjtcblx0dG9wUGFkZGluZzogbnVtYmVyO1xuXHRzdGFydDogbnVtYmVyO1xuXHRlbmQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYW5lbERpbWVuc2lvbnMge1xuXHRpdGVtSGVpZ2h0OiBudW1iZXI7XG5cdHBhbmVsSGVpZ2h0OiBudW1iZXI7XG5cdGl0ZW1zUGVyVmlld3BvcnQ6IG51bWJlcjtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5nRHJvcGRvd25QYW5lbFNlcnZpY2Uge1xuXHRwcml2YXRlIF9kaW1lbnNpb25zOiBQYW5lbERpbWVuc2lvbnMgPSB7XG5cdFx0aXRlbUhlaWdodDogMCxcblx0XHRwYW5lbEhlaWdodDogMCxcblx0XHRpdGVtc1BlclZpZXdwb3J0OiAwLFxuXHR9O1xuXG5cdGdldCBkaW1lbnNpb25zKCkge1xuXHRcdHJldHVybiB0aGlzLl9kaW1lbnNpb25zO1xuXHR9XG5cblx0Y2FsY3VsYXRlSXRlbXMoc2Nyb2xsUG9zOiBudW1iZXIsIGl0ZW1zTGVuZ3RoOiBudW1iZXIsIGJ1ZmZlcjogbnVtYmVyKTogSXRlbXNSYW5nZVJlc3VsdCB7XG5cdFx0Y29uc3QgZCA9IHRoaXMuX2RpbWVuc2lvbnM7XG5cdFx0Y29uc3Qgc2Nyb2xsSGVpZ2h0ID0gZC5pdGVtSGVpZ2h0ICogaXRlbXNMZW5ndGg7XG5cblx0XHRjb25zdCBzY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBzY3JvbGxQb3MpO1xuXHRcdGNvbnN0IGluZGV4QnlTY3JvbGxUb3AgPSAoc2Nyb2xsVG9wIC8gc2Nyb2xsSGVpZ2h0KSAqIGl0ZW1zTGVuZ3RoO1xuXHRcdGxldCBlbmQgPSBNYXRoLm1pbihpdGVtc0xlbmd0aCwgTWF0aC5jZWlsKGluZGV4QnlTY3JvbGxUb3ApICsgKGQuaXRlbXNQZXJWaWV3cG9ydCArIDEpKTtcblxuXHRcdGNvbnN0IG1heFN0YXJ0RW5kID0gZW5kO1xuXHRcdGNvbnN0IG1heFN0YXJ0ID0gTWF0aC5tYXgoMCwgbWF4U3RhcnRFbmQgLSBkLml0ZW1zUGVyVmlld3BvcnQpO1xuXHRcdGxldCBzdGFydCA9IE1hdGgubWluKG1heFN0YXJ0LCBNYXRoLmZsb29yKGluZGV4QnlTY3JvbGxUb3ApKTtcblxuXHRcdGxldCB0b3BQYWRkaW5nID0gZC5pdGVtSGVpZ2h0ICogTWF0aC5jZWlsKHN0YXJ0KSAtIGQuaXRlbUhlaWdodCAqIE1hdGgubWluKHN0YXJ0LCBidWZmZXIpO1xuXHRcdHRvcFBhZGRpbmcgPSAhaXNOYU4odG9wUGFkZGluZykgPyB0b3BQYWRkaW5nIDogMDtcblx0XHRzdGFydCA9ICFpc05hTihzdGFydCkgPyBzdGFydCA6IC0xO1xuXHRcdGVuZCA9ICFpc05hTihlbmQpID8gZW5kIDogLTE7XG5cdFx0c3RhcnQgLT0gYnVmZmVyO1xuXHRcdHN0YXJ0ID0gTWF0aC5tYXgoMCwgc3RhcnQpO1xuXHRcdGVuZCArPSBidWZmZXI7XG5cdFx0ZW5kID0gTWF0aC5taW4oaXRlbXNMZW5ndGgsIGVuZCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wUGFkZGluZyxcblx0XHRcdHNjcm9sbEhlaWdodCxcblx0XHRcdHN0YXJ0LFxuXHRcdFx0ZW5kLFxuXHRcdH07XG5cdH1cblxuXHRzZXREaW1lbnNpb25zKGl0ZW1IZWlnaHQ6IG51bWJlciwgcGFuZWxIZWlnaHQ6IG51bWJlcikge1xuXHRcdGNvbnN0IGl0ZW1zUGVyVmlld3BvcnQgPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKHBhbmVsSGVpZ2h0IC8gaXRlbUhlaWdodCkpO1xuXHRcdHRoaXMuX2RpbWVuc2lvbnMgPSB7XG5cdFx0XHRpdGVtSGVpZ2h0LFxuXHRcdFx0cGFuZWxIZWlnaHQsXG5cdFx0XHRpdGVtc1BlclZpZXdwb3J0LFxuXHRcdH07XG5cdH1cblxuXHRnZXRTY3JvbGxUbyhpdGVtVG9wOiBudW1iZXIsIGl0ZW1IZWlnaHQ6IG51bWJlciwgbGFzdFNjcm9sbDogbnVtYmVyKSB7XG5cdFx0Y29uc3QgeyBwYW5lbEhlaWdodCB9ID0gdGhpcy5kaW1lbnNpb25zO1xuXHRcdGNvbnN0IGl0ZW1Cb3R0b20gPSBpdGVtVG9wICsgaXRlbUhlaWdodDtcblx0XHRjb25zdCB0b3AgPSBsYXN0U2Nyb2xsO1xuXHRcdGNvbnN0IGJvdHRvbSA9IHRvcCArIHBhbmVsSGVpZ2h0O1xuXG5cdFx0aWYgKHBhbmVsSGVpZ2h0ID49IGl0ZW1Cb3R0b20gJiYgbGFzdFNjcm9sbCA9PT0gaXRlbVRvcCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKGl0ZW1Cb3R0b20gPiBib3R0b20pIHtcblx0XHRcdHJldHVybiB0b3AgKyBpdGVtQm90dG9tIC0gYm90dG9tO1xuXHRcdH0gZWxzZSBpZiAoaXRlbVRvcCA8PSB0b3ApIHtcblx0XHRcdHJldHVybiBpdGVtVG9wO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG59XG4iXX0=
@@ -1,51 +0,0 @@
1
- import { booleanAttribute, ChangeDetectionStrategy, Component, Input, } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- export class NgOptionComponent {
5
- constructor(elementRef) {
6
- this.elementRef = elementRef;
7
- this.disabled = false;
8
- this.stateChange$ = new Subject();
9
- }
10
- get label() {
11
- return (this.elementRef.nativeElement.textContent || '').trim();
12
- }
13
- ngOnChanges(changes) {
14
- if (changes.disabled) {
15
- this.stateChange$.next({
16
- value: this.value,
17
- disabled: this.disabled,
18
- });
19
- }
20
- }
21
- ngAfterViewChecked() {
22
- if (this.label !== this._previousLabel) {
23
- this._previousLabel = this.label;
24
- this.stateChange$.next({
25
- value: this.value,
26
- disabled: this.disabled,
27
- label: this.elementRef.nativeElement.innerHTML,
28
- });
29
- }
30
- }
31
- ngOnDestroy() {
32
- this.stateChange$.complete();
33
- }
34
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: NgOptionComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
35
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.5", type: NgOptionComponent, isStandalone: true, selector: "ng-option", inputs: { value: "value", disabled: ["disabled", "disabled", booleanAttribute] }, usesOnChanges: true, ngImport: i0, template: `<ng-content />`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36
- }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: NgOptionComponent, decorators: [{
38
- type: Component,
39
- args: [{
40
- selector: 'ng-option',
41
- standalone: true,
42
- changeDetection: ChangeDetectionStrategy.OnPush,
43
- template: `<ng-content />`,
44
- }]
45
- }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { value: [{
46
- type: Input
47
- }], disabled: [{
48
- type: Input,
49
- args: [{ transform: booleanAttribute }]
50
- }] } });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctb3B0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZy1zZWxlY3QvbGliL25nLW9wdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVOLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsU0FBUyxFQUVULEtBQUssR0FJTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQVEvQixNQUFNLE9BQU8saUJBQWlCO0lBUTdCLFlBQW1CLFVBQW1DO1FBQW5DLGVBQVUsR0FBVixVQUFVLENBQXlCO1FBTmQsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUV6RCxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFxRCxDQUFDO0lBSWhDLENBQUM7SUFFMUQsSUFBSSxLQUFLO1FBQ1IsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqRSxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2pDLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUN0QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7Z0JBQ2pCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTthQUN2QixDQUFDLENBQUM7UUFDSixDQUFDO0lBQ0YsQ0FBQztJQUVELGtCQUFrQjtRQUNqQixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDdEIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxTQUFTO2FBQzlDLENBQUMsQ0FBQztRQUNKLENBQUM7SUFDRixDQUFDO0lBRUQsV0FBVztRQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUIsQ0FBQzs4R0FwQ1csaUJBQWlCO2tHQUFqQixpQkFBaUIsMEdBRVQsZ0JBQWdCLGtEQUoxQixnQkFBZ0I7OzJGQUVkLGlCQUFpQjtrQkFON0IsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsV0FBVztvQkFDckIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxRQUFRLEVBQUUsZ0JBQWdCO2lCQUMxQjsrRUFFUyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ2tDLFFBQVE7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRBZnRlclZpZXdDaGVja2VkLFxuXHRib29sZWFuQXR0cmlidXRlLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRFbGVtZW50UmVmLFxuXHRJbnB1dCxcblx0T25DaGFuZ2VzLFxuXHRPbkRlc3Ryb3ksXG5cdFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZy1vcHRpb24nLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0dGVtcGxhdGU6IGA8bmctY29udGVudCAvPmAsXG59KVxuZXhwb3J0IGNsYXNzIE5nT3B0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3kge1xuXHRASW5wdXQoKSB2YWx1ZTogYW55O1xuXHRASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuXHRyZWFkb25seSBzdGF0ZUNoYW5nZSQgPSBuZXcgU3ViamVjdDx7IHZhbHVlOiBhbnk7IGRpc2FibGVkOiBib29sZWFuOyBsYWJlbD86IHN0cmluZyB9PigpO1xuXG5cdHByaXZhdGUgX3ByZXZpb3VzTGFiZWw6IHN0cmluZztcblxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4pIHt9XG5cblx0Z2V0IGxhYmVsKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuICh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCB8fCAnJykudHJpbSgpO1xuXHR9XG5cblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuXHRcdGlmIChjaGFuZ2VzLmRpc2FibGVkKSB7XG5cdFx0XHR0aGlzLnN0YXRlQ2hhbmdlJC5uZXh0KHtcblx0XHRcdFx0dmFsdWU6IHRoaXMudmFsdWUsXG5cdFx0XHRcdGRpc2FibGVkOiB0aGlzLmRpc2FibGVkLFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0bmdBZnRlclZpZXdDaGVja2VkKCkge1xuXHRcdGlmICh0aGlzLmxhYmVsICE9PSB0aGlzLl9wcmV2aW91c0xhYmVsKSB7XG5cdFx0XHR0aGlzLl9wcmV2aW91c0xhYmVsID0gdGhpcy5sYWJlbDtcblx0XHRcdHRoaXMuc3RhdGVDaGFuZ2UkLm5leHQoe1xuXHRcdFx0XHR2YWx1ZTogdGhpcy52YWx1ZSxcblx0XHRcdFx0ZGlzYWJsZWQ6IHRoaXMuZGlzYWJsZWQsXG5cdFx0XHRcdGxhYmVsOiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pbm5lckhUTUwsXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRuZ09uRGVzdHJveSgpIHtcblx0XHR0aGlzLnN0YXRlQ2hhbmdlJC5jb21wbGV0ZSgpO1xuXHR9XG59XG4iXX0=