@ngrdt/tabs 0.0.17 → 0.0.19

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,270 +0,0 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, DestroyRef, ElementRef, EventEmitter, HostBinding, HostListener, inject, Input, Output, QueryList, Renderer2, ViewChild, ViewChildren, ViewEncapsulation, } from '@angular/core';
2
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
- import { canTransition$, RDT_GUARDED_COMPONENT, RdtChildDirective, } from '@ngrdt/core';
4
- import { RdtHTMLUtils } from '@ngrdt/utils';
5
- import { firstValueFrom, timer } from 'rxjs';
6
- import { RdtTabControllerDirective } from '../../directives/rdt-tab-controller.directive';
7
- import { RdtTabComponent } from '../tab/rdt-tab.component';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@ngrdt/core";
10
- import * as i2 from "@angular/common";
11
- export class RdtTabContainerComponent {
12
- destroyRef = inject(DestroyRef);
13
- stateId = null;
14
- set value(val) {
15
- if (this.activeTab && this.activeTab.stateId !== val) {
16
- // TODO
17
- //this.activeTab.onViewWillLeave();
18
- }
19
- this._value = val;
20
- this.setCurrent();
21
- }
22
- get value() {
23
- return this._value;
24
- }
25
- _value;
26
- disabled = false;
27
- formAutofocus = true;
28
- panelPosition = 'top';
29
- valueChange = new EventEmitter();
30
- tabsList;
31
- tabHeaderButtons;
32
- tabContent;
33
- _active = false;
34
- get active() {
35
- return this._active;
36
- }
37
- set active(value) {
38
- this._active = value;
39
- this.cd.markForCheck();
40
- }
41
- get isTopLevel() {
42
- return !this.parentTab;
43
- }
44
- parentTab = inject(RdtTabComponent, { optional: true });
45
- controller = inject(RdtTabControllerDirective, {
46
- optional: true,
47
- });
48
- cd = inject(ChangeDetectorRef);
49
- elRef = inject(ElementRef);
50
- renderer = inject(Renderer2);
51
- currentTemplate = null;
52
- currentTab = null;
53
- get classes() {
54
- return `dp3-tab-container panel-${this.panelPosition}`;
55
- }
56
- get isHorizontal() {
57
- return this.panelPosition === 'top' || this.panelPosition === 'bottom';
58
- }
59
- get isVertical() {
60
- return !this.isHorizontal;
61
- }
62
- attrRole = 'tablist';
63
- get hasNonDisabledTabs() {
64
- return this.tabsList.some((tab) => !tab.disabled);
65
- }
66
- get activeTab() {
67
- return this.getTabByValue(this.value);
68
- }
69
- getTabByValue(value) {
70
- return this.tabsList?.find((tab) => tab.stateId === value);
71
- }
72
- ngAfterContentInit() {
73
- this.controller?.onTabContainerChanges();
74
- timer(0)
75
- .pipe(takeUntilDestroyed(this.destroyRef))
76
- .subscribe(() => this.setCurrent());
77
- this.tabsList.changes
78
- .pipe(takeUntilDestroyed(this.destroyRef))
79
- .subscribe(() => {
80
- this.controller?.onTabChanges();
81
- this.setCurrent();
82
- this.cd.markForCheck();
83
- });
84
- if (this.stateId === null && this.controller) {
85
- const id = this.controller.getTabContainerIndex(this);
86
- this.stateId = `tab-container-${id}`;
87
- }
88
- }
89
- getState() {
90
- return {
91
- id: this.stateId,
92
- value: this.value,
93
- tabStates: this.tabsList.map((tab) => tab.getState()),
94
- };
95
- }
96
- applyState(state) {
97
- this.value = state.value;
98
- this.scrollCurrentButtonIntoView();
99
- const states = [...state.tabStates];
100
- const tabs = this.tabsList.toArray();
101
- const minLen = Math.min(states.length, tabs.length);
102
- for (let i = 0; i < minLen; i++) {
103
- if (tabs[i].stateId === states[i].id) {
104
- tabs[i].applyState(states[i]);
105
- tabs[i] = states[i] = null;
106
- }
107
- }
108
- tabs.forEach((tab, tabI) => {
109
- if (!tab) {
110
- return;
111
- }
112
- for (let offset = 0; offset < states.length; offset++) {
113
- const prev = tabI - offset;
114
- const next = tabI + offset;
115
- if (prev > 0 && states[prev]?.id === tab.stateId) {
116
- tab.applyState(states[prev]);
117
- states[prev] = null;
118
- return;
119
- }
120
- else if (next < states.length && states[next]?.id === tab.stateId) {
121
- tab.applyState(states[next]);
122
- states[next] = null;
123
- return;
124
- }
125
- }
126
- });
127
- }
128
- scrollIntoView() {
129
- this.elRef?.nativeElement?.scrollIntoView({ behavior: 'smooth' });
130
- }
131
- async activateTab(value) {
132
- const nextTab = this.getTabByValue(value);
133
- const can = await firstValueFrom(canTransition$(this.activeTab?.contDir, nextTab?.contDir));
134
- if (can) {
135
- this.value = value;
136
- this.valueChange.emit(value);
137
- }
138
- }
139
- scrollCurrentButtonIntoView() {
140
- if (!this.tabsList || !this.tabHeaderButtons) {
141
- return;
142
- }
143
- const tabIndex = this.tabsList
144
- .toArray()
145
- .findIndex((tab) => tab.stateId === this.value);
146
- const buttonRef = this.tabHeaderButtons.get(tabIndex);
147
- if (buttonRef) {
148
- RdtHTMLUtils.scrollIntoViewHorizontallyWithinParent(buttonRef.nativeElement);
149
- }
150
- }
151
- onClick(event) {
152
- this.controller?.activateTabContainerFromClick(this, event.timeStamp);
153
- }
154
- setCurrent() {
155
- if (!this.tabsList) {
156
- return;
157
- }
158
- if (this.value == undefined) {
159
- const firstEnabled = this.getFirstEnabledTab();
160
- if (firstEnabled) {
161
- this.value = firstEnabled.stateId;
162
- }
163
- else {
164
- return;
165
- }
166
- }
167
- const found = this.tabsList.find((tab) => tab.stateId === this.value);
168
- if (!found) {
169
- const first = this.getFirstEnabledTab();
170
- if (first) {
171
- this.activateTab(first.stateId);
172
- return;
173
- }
174
- else {
175
- console.error('Active tab not found.', this.tabsList.toArray(), this.value);
176
- return;
177
- }
178
- }
179
- this.setTab(found);
180
- }
181
- setTab(tab) {
182
- if (this.currentTab !== tab) {
183
- this.solidifyTabContentSize();
184
- this.currentTab = tab;
185
- this.currentTemplate = tab.templateRef;
186
- this.cd.markForCheck();
187
- //tab.onViewWillEnter();
188
- }
189
- if (this.formAutofocus && tab.formAutofocus) {
190
- // Wait until template is attached to DOM
191
- timer(0)
192
- .pipe(takeUntilDestroyed(this.destroyRef), takeUntilDestroyed(tab.destroyRef))
193
- .subscribe(() => tab.focusForm());
194
- }
195
- setTimeout(() => this.releaseTabContentSize());
196
- }
197
- // Swapping template in template outlet will cause large css recalc
198
- // fix size to previous tab and in case they are the same size
199
- // the recalc isn't noticable
200
- solidifyTabContentSize() {
201
- const el = this.tabContent.nativeElement;
202
- const bb = el.getBoundingClientRect();
203
- this.renderer.setStyle(el, 'width', bb.width + 'px');
204
- this.renderer.setStyle(el, 'height', bb.height + 'px');
205
- }
206
- releaseTabContentSize() {
207
- const el = this.tabContent.nativeElement;
208
- this.renderer.removeStyle(el, 'width');
209
- this.renderer.removeStyle(el, 'height');
210
- }
211
- getFirstEnabledTab() {
212
- return this.tabsList.find((t) => !t.disabled);
213
- }
214
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtTabContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
215
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: RdtTabContainerComponent, selector: "rdt-tab-container", inputs: { stateId: "stateId", value: "value", disabled: "disabled", formAutofocus: "formAutofocus", panelPosition: "panelPosition" }, outputs: { valueChange: "valueChange" }, host: { listeners: { "click": "onClick($event)" }, properties: { "class.active": "this._active", "class": "this.classes", "class.panel-horizontal": "this.isHorizontal", "class.panel-vertical": "this.isVertical", "attr.role": "this.attrRole" } }, providers: [
216
- {
217
- provide: RDT_GUARDED_COMPONENT,
218
- useExisting: RdtTabContainerComponent,
219
- },
220
- ], queries: [{ propertyName: "tabsList", predicate: RdtTabComponent }], viewQueries: [{ propertyName: "tabContent", first: true, predicate: ["tabContent"], descendants: true, static: true }, { propertyName: "tabHeaderButtons", predicate: ["headerButton"], descendants: true }], hostDirectives: [{ directive: i1.RdtChildDirective }], ngImport: i0, template: "<div class=\"tab-header-panel\" *ngIf=\"tabsList\">\r\n <button\r\n *ngFor=\"let tab of tabsList\"\r\n #headerButton\r\n class=\"px-2 py-1 tab-header-button\"\r\n (click)=\"activateTab(tab.stateId)\"\r\n [class.active]=\"value === tab.stateId\"\r\n [disabled]=\"tab.disabled\"\r\n [hidden]=\"!tab.visible\"\r\n role=\"tab\"\r\n [attr.aria-selected]=\"value === tab.stateId\"\r\n [attr.aria-controls]=\"'panel-' + tab.stateId\"\r\n [attr.tabindex]=\"value === tab.stateId ? 0 : -1\"\r\n [id]=\"'tab-' + tab.stateId\"\r\n [class]=\"tab.buttonClass\"\r\n type=\"button\"\r\n >\r\n {{ tab.label }}\r\n </button>\r\n</div>\r\n<div\r\n class=\"tab-content\"\r\n role=\"tabpanel\"\r\n [id]=\"'panel-' + value\"\r\n [attr.aria-labelledby]=\"'tab-' + value\"\r\n #tabContent\r\n>\r\n <ng-template [ngTemplateOutlet]=\"currentTemplate\"></ng-template>\r\n</div>\r\n", styles: ["dp3-tab-container{--tab-header-border-height: 2px;--tab-header-border-color: #e2e8f0;--tab-text-color: rgb(100, 116, 139);--active-tab-text-color: var(--primary-blue);--active-tab-border-color: var(--primary-blue);--disabled-tab-text-color: #b1b9c5;--tab-vertical-button-width: 200px;display:block;position:relative}dp3-tab-container.active>.tab-header-panel{background-color:var(--hover-blue)}dp3-tab-container.panel-vertical{display:flex}dp3-tab-container.panel-vertical>.tab-header-panel{position:absolute;top:0;height:100%;width:var(--tab-vertical-button-width);overflow-y:auto}dp3-tab-container.panel-vertical>.tab-header-panel>button{text-align:left;width:100%;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}dp3-tab-container.panel-vertical>.tab-content{width:calc(100% - var(--tab-vertical-button-width))}dp3-tab-container.panel-right{flex-direction:row-reverse}dp3-tab-container.panel-right>.tab-header-panel{right:0}dp3-tab-container.panel-left>.tab-header-panel{left:0}dp3-tab-container.panel-left>.tab-content{margin-left:var(--tab-vertical-button-width)}dp3-tab-container.panel-horizontal>.tab-header-panel{width:100%;white-space:nowrap;overflow-x:auto}dp3-tab-container.panel-bottom{display:flex;flex-direction:column-reverse}dp3-tab-container .tab-header-panel{position:relative;background-color:rgba(var(--primary-blue-rgb),.045)}dp3-tab-container .tab-header-panel:after{content:\"\";position:absolute;width:100%;height:var(--tab-header-border-height);background-color:var(--tab-header-border-color);margin-top:var(--tab-header-border-height);bottom:0;left:0;z-index:-1}dp3-tab-container .dot{position:absolute;width:.85rem;height:.85rem;padding:0 .1rem;background-color:var(--primary-blue);color:var(--white);font-size:x-small;border-radius:100%;top:.25rem;right:0rem}dp3-tab-container .tab-header-button{position:relative;background:none;font:inherit;outline:inherit;border:none;color:var(--tab-text-color);font-weight:700;font-size:1.1rem}dp3-tab-container .tab-header-button.active{position:relative;color:var(--active-tab-text-color)}dp3-tab-container .tab-header-button.active:after{content:\"\";position:absolute;width:100%;height:var(--tab-header-border-height);background-color:var(--active-tab-text-color);margin-top:var(--tab-header-border-height);bottom:0;left:0}dp3-tab-container .tab-header-button:disabled{color:var(--disabled-tab-text-color)}dp3-tab-container .tab-header-button.padding-small{padding-right:1.1rem!important}dp3-tab-container .tab-header-button.padding-large{padding-right:1.3rem!important}dp3-tab-container>.tab-content{min-width:0;width:100%;padding:.5rem}dp3-tab-container>.tab-content:has(>.dp3-tab-container){padding:0}dp3-tab-container>.tab-content>.dp3-tab-container{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
221
- }
222
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtTabContainerComponent, decorators: [{
223
- type: Component,
224
- args: [{ selector: 'rdt-tab-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
225
- {
226
- provide: RDT_GUARDED_COMPONENT,
227
- useExisting: RdtTabContainerComponent,
228
- },
229
- ], hostDirectives: [RdtChildDirective], encapsulation: ViewEncapsulation.None, template: "<div class=\"tab-header-panel\" *ngIf=\"tabsList\">\r\n <button\r\n *ngFor=\"let tab of tabsList\"\r\n #headerButton\r\n class=\"px-2 py-1 tab-header-button\"\r\n (click)=\"activateTab(tab.stateId)\"\r\n [class.active]=\"value === tab.stateId\"\r\n [disabled]=\"tab.disabled\"\r\n [hidden]=\"!tab.visible\"\r\n role=\"tab\"\r\n [attr.aria-selected]=\"value === tab.stateId\"\r\n [attr.aria-controls]=\"'panel-' + tab.stateId\"\r\n [attr.tabindex]=\"value === tab.stateId ? 0 : -1\"\r\n [id]=\"'tab-' + tab.stateId\"\r\n [class]=\"tab.buttonClass\"\r\n type=\"button\"\r\n >\r\n {{ tab.label }}\r\n </button>\r\n</div>\r\n<div\r\n class=\"tab-content\"\r\n role=\"tabpanel\"\r\n [id]=\"'panel-' + value\"\r\n [attr.aria-labelledby]=\"'tab-' + value\"\r\n #tabContent\r\n>\r\n <ng-template [ngTemplateOutlet]=\"currentTemplate\"></ng-template>\r\n</div>\r\n", styles: ["dp3-tab-container{--tab-header-border-height: 2px;--tab-header-border-color: #e2e8f0;--tab-text-color: rgb(100, 116, 139);--active-tab-text-color: var(--primary-blue);--active-tab-border-color: var(--primary-blue);--disabled-tab-text-color: #b1b9c5;--tab-vertical-button-width: 200px;display:block;position:relative}dp3-tab-container.active>.tab-header-panel{background-color:var(--hover-blue)}dp3-tab-container.panel-vertical{display:flex}dp3-tab-container.panel-vertical>.tab-header-panel{position:absolute;top:0;height:100%;width:var(--tab-vertical-button-width);overflow-y:auto}dp3-tab-container.panel-vertical>.tab-header-panel>button{text-align:left;width:100%;white-space:nowrap;overflow-x:hidden;text-overflow:ellipsis}dp3-tab-container.panel-vertical>.tab-content{width:calc(100% - var(--tab-vertical-button-width))}dp3-tab-container.panel-right{flex-direction:row-reverse}dp3-tab-container.panel-right>.tab-header-panel{right:0}dp3-tab-container.panel-left>.tab-header-panel{left:0}dp3-tab-container.panel-left>.tab-content{margin-left:var(--tab-vertical-button-width)}dp3-tab-container.panel-horizontal>.tab-header-panel{width:100%;white-space:nowrap;overflow-x:auto}dp3-tab-container.panel-bottom{display:flex;flex-direction:column-reverse}dp3-tab-container .tab-header-panel{position:relative;background-color:rgba(var(--primary-blue-rgb),.045)}dp3-tab-container .tab-header-panel:after{content:\"\";position:absolute;width:100%;height:var(--tab-header-border-height);background-color:var(--tab-header-border-color);margin-top:var(--tab-header-border-height);bottom:0;left:0;z-index:-1}dp3-tab-container .dot{position:absolute;width:.85rem;height:.85rem;padding:0 .1rem;background-color:var(--primary-blue);color:var(--white);font-size:x-small;border-radius:100%;top:.25rem;right:0rem}dp3-tab-container .tab-header-button{position:relative;background:none;font:inherit;outline:inherit;border:none;color:var(--tab-text-color);font-weight:700;font-size:1.1rem}dp3-tab-container .tab-header-button.active{position:relative;color:var(--active-tab-text-color)}dp3-tab-container .tab-header-button.active:after{content:\"\";position:absolute;width:100%;height:var(--tab-header-border-height);background-color:var(--active-tab-text-color);margin-top:var(--tab-header-border-height);bottom:0;left:0}dp3-tab-container .tab-header-button:disabled{color:var(--disabled-tab-text-color)}dp3-tab-container .tab-header-button.padding-small{padding-right:1.1rem!important}dp3-tab-container .tab-header-button.padding-large{padding-right:1.3rem!important}dp3-tab-container>.tab-content{min-width:0;width:100%;padding:.5rem}dp3-tab-container>.tab-content:has(>.dp3-tab-container){padding:0}dp3-tab-container>.tab-content>.dp3-tab-container{width:100%;height:100%}\n"] }]
230
- }], propDecorators: { stateId: [{
231
- type: Input
232
- }], value: [{
233
- type: Input
234
- }], disabled: [{
235
- type: Input
236
- }], formAutofocus: [{
237
- type: Input
238
- }], panelPosition: [{
239
- type: Input
240
- }], valueChange: [{
241
- type: Output
242
- }], tabsList: [{
243
- type: ContentChildren,
244
- args: [RdtTabComponent]
245
- }], tabHeaderButtons: [{
246
- type: ViewChildren,
247
- args: ['headerButton']
248
- }], tabContent: [{
249
- type: ViewChild,
250
- args: ['tabContent', { static: true }]
251
- }], _active: [{
252
- type: HostBinding,
253
- args: ['class.active']
254
- }], classes: [{
255
- type: HostBinding,
256
- args: ['class']
257
- }], isHorizontal: [{
258
- type: HostBinding,
259
- args: ['class.panel-horizontal']
260
- }], isVertical: [{
261
- type: HostBinding,
262
- args: ['class.panel-vertical']
263
- }], attrRole: [{
264
- type: HostBinding,
265
- args: ['attr.role']
266
- }], onClick: [{
267
- type: HostListener,
268
- args: ['click', ['$event']]
269
- }] } });
270
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LXRhYi1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3RhYnMvc3JjL2xpYi9jb21wb25lbnRzL3RhYi1jb250YWluZXIvcmR0LXRhYi1jb250YWluZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3RhYnMvc3JjL2xpYi9jb21wb25lbnRzL3RhYi1jb250YWluZXIvcmR0LXRhYi1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBRVQsU0FBUyxFQUNULFlBQVksRUFDWixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUNMLGNBQWMsRUFDZCxxQkFBcUIsRUFDckIsaUJBQWlCLEdBQ2xCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7O0FBZ0IzRCxNQUFNLE9BQU8sd0JBQXdCO0lBQzFCLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFHekMsT0FBTyxHQUFRLElBQUksQ0FBQztJ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LEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVwRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFFLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLENBQUMsQ0FBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDN0IsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxPQUFPO1lBQ1QsQ0FBQztZQUNELEtBQUssSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUM7Z0JBQ3RELE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUM7Z0JBQzNCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUM7Z0JBQzNCLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDakQsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFFLENBQUMsQ0FBQztvQkFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztvQkFDcEIsT0FBTztnQkFDVCxDQUFDO3FCQUFNLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxN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Z0JBSU4sV0FBVztzQkFEVixNQUFNO2dCQUlQLFFBQVE7c0JBRFAsZUFBZTt1QkFBQyxlQUFlO2dCQUloQyxnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQyxjQUFjO2dCQUk1QixVQUFVO3NCQURULFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJakMsT0FBTztzQkFEZCxXQUFXO3VCQUFDLGNBQWM7Z0JBMEJ2QixPQUFPO3NCQURWLFdBQVc7dUJBQUMsT0FBTztnQkFNaEIsWUFBWTtzQkFEZixXQUFXO3VCQUFDLHdCQUF3QjtnQkFNakMsVUFBVTtzQkFEYixXQUFXO3VCQUFDLHNCQUFzQjtnQkFNM0IsUUFBUTtzQkFEZixXQUFXO3VCQUFDLFdBQVc7Z0JBNkdoQixPQUFPO3NCQURkLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgRGVzdHJveVJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0QmluZGluZyxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgaW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBRdWVyeUxpc3QsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q2hpbGRyZW4sXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuaW1wb3J0IHtcclxuICBjYW5UcmFuc2l0aW9uJCxcclxuICBSRFRfR1VBUkRFRF9DT01QT05FTlQsXHJcbiAgUmR0Q2hpbGREaXJlY3RpdmUsXHJcbn0gZnJvbSAnQG5ncmR0L2NvcmUnO1xyXG5pbXBvcnQgeyBSZHRIVE1MVXRpbHMgfSBmcm9tICdAbmdyZHQvdXRpbHMnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgdGltZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmR0VGFiQ29udHJvbGxlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvcmR0LXRhYi1jb250cm9sbGVyLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJkdFRhYkNvbnRhaW5lclN0YXRlLCBSZHRUYWJTdGF0ZSB9IGZyb20gJy4uLy4uL3JkdC10YWJzLW1vZGVscyc7XHJcbmltcG9ydCB7IFJkdFRhYkNvbXBvbmVudCB9IGZyb20gJy4uL3RhYi9yZHQtdGFiLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JkdC10YWItY29udGFpbmVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmR0LXRhYi1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3JkdC10YWItY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IFJEVF9HVUFSREVEX0NPTVBPTkVOVCxcclxuICAgICAgdXNlRXhpc3Rpbmc6IFJkdFRhYkNvbnRhaW5lckNvbXBvbmVudCxcclxuICAgIH0sXHJcbiAgXSxcclxuICBob3N0RGlyZWN0aXZlczogW1JkdENoaWxkRGlyZWN0aXZlXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmR0VGFiQ29udGFpbmVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XHJcbiAgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcclxuXHJcbiAgQElucHV0KClcclxuICBzdGF0ZUlkOiBhbnkgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCB2YWx1ZSh2YWw6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlVGFiICYmIHRoaXMuYWN0aXZlVGFiLnN0YXRlSWQgIT09IHZhbCkge1xyXG4gICAgICAvLyBUT0RPXHJcbiAgICAgIC8vdGhpcy5hY3RpdmVUYWIub25WaWV3V2lsbExlYXZlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl92YWx1ZSA9IHZhbDtcclxuICAgIHRoaXMuc2V0Q3VycmVudCgpO1xyXG4gIH1cclxuICBnZXQgdmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3ZhbHVlITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZm9ybUF1dG9mb2N1cyA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcGFuZWxQb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICd0b3AnIHwgJ2JvdHRvbScgPSAndG9wJztcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oUmR0VGFiQ29tcG9uZW50KVxyXG4gIHRhYnNMaXN0ITogUXVlcnlMaXN0PFJkdFRhYkNvbXBvbmVudD47XHJcblxyXG4gIEBWaWV3Q2hpbGRyZW4oJ2hlYWRlckJ1dHRvbicpXHJcbiAgdGFiSGVhZGVyQnV0dG9ucz86IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj47XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3RhYkNvbnRlbnQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHRhYkNvbnRlbnQhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY3RpdmUnKVxyXG4gIHByaXZhdGUgX2FjdGl2ZSA9IGZhbHNlO1xyXG4gIGdldCBhY3RpdmUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xyXG4gIH1cclxuICBzZXQgYWN0aXZlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9hY3RpdmUgPSB2YWx1ZTtcclxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNUb3BMZXZlbCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhdGhpcy5wYXJlbnRUYWI7XHJcbiAgfVxyXG5cclxuICByZWFkb25seSBwYXJlbnRUYWIgPSBpbmplY3QoUmR0VGFiQ29tcG9uZW50LCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG4gIHJlYWRvbmx5IGNvbnRyb2xsZXIgPSBpbmplY3QoUmR0VGFiQ29udHJvbGxlckRpcmVjdGl2ZSwge1xyXG4gICAgb3B0aW9uYWw6IHRydWUsXHJcbiAgfSk7XHJcbiAgcmVhZG9ubHkgY2QgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIHJlYWRvbmx5IGVsUmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xyXG4gIHByb3RlY3RlZCByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xyXG5cclxuICBwcm90ZWN0ZWQgY3VycmVudFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIGN1cnJlbnRUYWI6IFJkdFRhYkNvbXBvbmVudCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcclxuICBnZXQgY2xhc3NlcygpIHtcclxuICAgIHJldHVybiBgZHAzLXRhYi1jb250YWluZXIgcGFuZWwtJHt0aGlzLnBhbmVsUG9zaXRpb259YDtcclxuICB9XHJcblxyXG4gIEBIb3N0QmluZGluZygnY2xhc3MucGFuZWwtaG9yaXpvbnRhbCcpXHJcbiAgZ2V0IGlzSG9yaXpvbnRhbCgpIHtcclxuICAgIHJldHVybiB0aGlzLnBhbmVsUG9zaXRpb24gPT09ICd0b3AnIHx8IHRoaXMucGFuZWxQb3NpdGlvbiA9PT0gJ2JvdHRvbSc7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnBhbmVsLXZlcnRpY2FsJylcclxuICBnZXQgaXNWZXJ0aWNhbCgpIHtcclxuICAgIHJldHVybiAhdGhpcy5pc0hvcml6b250YWw7XHJcbiAgfVxyXG5cclxuICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXHJcbiAgcHJpdmF0ZSBhdHRyUm9sZSA9ICd0YWJsaXN0JztcclxuXHJcbiAgZ2V0IGhhc05vbkRpc2FibGVkVGFicygpIHtcclxuICAgIHJldHVybiB0aGlzLnRhYnNMaXN0LnNvbWUoKHRhYikgPT4gIXRhYi5kaXNhYmxlZCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYWN0aXZlVGFiKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0VGFiQnlWYWx1ZSh0aGlzLnZhbHVlKTtcclxuICB9XHJcblxyXG4gIGdldFRhYkJ5VmFsdWUodmFsdWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMudGFic0xpc3Q/LmZpbmQoKHRhYikgPT4gdGFiLnN0YXRlSWQgPT09IHZhbHVlKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgIHRoaXMuY29udHJvbGxlcj8ub25UYWJDb250YWluZXJDaGFuZ2VzKCk7XHJcbiAgICB0aW1lcigwKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNldEN1cnJlbnQoKSk7XHJcblxyXG4gICAgdGhpcy50YWJzTGlzdC5jaGFuZ2VzXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNvbnRyb2xsZXI/Lm9uVGFiQ2hhbmdlcygpO1xyXG4gICAgICAgIHRoaXMuc2V0Q3VycmVudCgpO1xyXG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLnN0YXRlSWQgPT09IG51bGwgJiYgdGhpcy5jb250cm9sbGVyKSB7XHJcbiAgICAgIGNvbnN0IGlkID0gdGhpcy5jb250cm9sbGVyLmdldFRhYkNvbnRhaW5lckluZGV4KHRoaXMpO1xyXG4gICAgICB0aGlzLnN0YXRlSWQgPSBgdGFiLWNvbnRhaW5lci0ke2lkfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTdGF0ZSgpOiBSZHRUYWJDb250YWluZXJTdGF0ZSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpZDogdGhpcy5zdGF0ZUlkLFxyXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcclxuICAgICAgdGFiU3RhdGVzOiB0aGlzLnRhYnNMaXN0Lm1hcCgodGFiKSA9PiB0YWIuZ2V0U3RhdGUoKSksXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgYXBwbHlTdGF0ZShzdGF0ZTogUmR0VGFiQ29udGFpbmVyU3RhdGUpIHtcclxuICAgIHRoaXMudmFsdWUgPSBzdGF0ZS52YWx1ZTtcclxuICAgIHRoaXMuc2Nyb2xsQ3VycmVudEJ1dHRvbkludG9WaWV3KCk7XHJcblxyXG4gICAgY29uc3Qgc3RhdGVzOiAoUmR0VGFiU3RhdGUgfCBudWxsKVtdID0gWy4uLnN0YXRlLnRhYlN0YXRlc107XHJcbiAgICBjb25zdCB0YWJzOiAoUmR0VGFiQ29tcG9uZW50IHwgbnVsbClbXSA9IHRoaXMudGFic0xpc3QudG9BcnJheSgpO1xyXG4gICAgY29uc3QgbWluTGVuID0gTWF0aC5taW4oc3RhdGVzLmxlbmd0aCwgdGFicy5sZW5ndGgpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWluTGVuOyBpKyspIHtcclxuICAgICAgaWYgKHRhYnNbaV0hLnN0YXRlSWQgPT09IHN0YXRlc1tpXSEuaWQpIHtcclxuICAgICAgICB0YWJzW2ldIS5hcHBseVN0YXRlKHN0YXRlc1tpXSEpO1xyXG4gICAgICAgIHRhYnNbaV0gPSBzdGF0ZXNbaV0gPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0YWJzLmZvckVhY2goKHRhYiwgdGFiSSkgPT4ge1xyXG4gICAgICBpZiAoIXRhYikge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzdGF0ZXMubGVuZ3RoOyBvZmZzZXQrKykge1xyXG4gICAgICAgIGNvbnN0IHByZXYgPSB0YWJJIC0gb2Zmc2V0O1xyXG4gICAgICAgIGNvbnN0IG5leHQgPSB0YWJJICsgb2Zmc2V0O1xyXG4gICAgICAgIGlmIChwcmV2ID4gMCAmJiBzdGF0ZXNbcHJldl0/LmlkID09PSB0YWIuc3RhdGVJZCkge1xyXG4gICAgICAgICAgdGFiLmFwcGx5U3RhdGUoc3RhdGVzW3ByZXZdISk7XHJcbiAgICAgICAgICBzdGF0ZXNbcHJldl0gPSBudWxsO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobmV4dCA8IHN0YXRlcy5sZW5ndGggJiYgc3RhdGVzW25leHRdPy5pZCA9PT0gdGFiLnN0YXRlSWQpIHtcclxuICAgICAgICAgIHRhYi5hcHBseVN0YXRlKHN0YXRlc1tuZXh0XSEpO1xyXG4gICAgICAgICAgc3RhdGVzW25leHRdID0gbnVsbDtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsSW50b1ZpZXcoKSB7XHJcbiAgICB0aGlzLmVsUmVmPy5uYXRpdmVFbGVtZW50Py5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGFjdGl2YXRlVGFiKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG5leHRUYWIgPSB0aGlzLmdldFRhYkJ5VmFsdWUodmFsdWUpO1xyXG5cclxuICAgIGNvbnN0IGNhbiA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICBjYW5UcmFuc2l0aW9uJCh0aGlzLmFjdGl2ZVRhYj8uY29udERpciwgbmV4dFRhYj8uY29udERpcilcclxuICAgICk7XHJcbiAgICBpZiAoY2FuKSB7XHJcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNjcm9sbEN1cnJlbnRCdXR0b25JbnRvVmlldygpIHtcclxuICAgIGlmICghdGhpcy50YWJzTGlzdCB8fCAhdGhpcy50YWJIZWFkZXJCdXR0b25zKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHRhYkluZGV4ID0gdGhpcy50YWJzTGlzdFxyXG4gICAgICAudG9BcnJheSgpXHJcbiAgICAgIC5maW5kSW5kZXgoKHRhYikgPT4gdGFiLnN0YXRlSWQgPT09IHRoaXMudmFsdWUpO1xyXG4gICAgY29uc3QgYnV0dG9uUmVmID0gdGhpcy50YWJIZWFkZXJCdXR0b25zLmdldCh0YWJJbmRleCk7XHJcbiAgICBpZiAoYnV0dG9uUmVmKSB7XHJcbiAgICAgIFJkdEhUTUxVdGlscy5zY3JvbGxJbnRvVmlld0hvcml6b250YWxseVdpdGhpblBhcmVudChcclxuICAgICAgICBidXR0b25SZWYubmF0aXZlRWxlbWVudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxyXG4gIHByaXZhdGUgb25DbGljayhldmVudDogUG9pbnRlckV2ZW50KSB7XHJcbiAgICB0aGlzLmNvbnRyb2xsZXI/LmFjdGl2YXRlVGFiQ29udGFpbmVyRnJvbUNsaWNrKHRoaXMsIGV2ZW50LnRpbWVTdGFtcCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEN1cnJlbnQoKSB7XHJcbiAgICBpZiAoIXRoaXMudGFic0xpc3QpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudmFsdWUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGZpcnN0RW5hYmxlZCA9IHRoaXMuZ2V0Rmlyc3RFbmFibGVkVGFiKCk7XHJcbiAgICAgIGlmIChmaXJzdEVuYWJsZWQpIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gZmlyc3RFbmFibGVkLnN0YXRlSWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZm91bmQgPSB0aGlzLnRhYnNMaXN0LmZpbmQoKHRhYikgPT4gdGFiLnN0YXRlSWQgPT09IHRoaXMudmFsdWUpO1xyXG4gICAgaWYgKCFmb3VuZCkge1xyXG4gICAgICBjb25zdCBmaXJzdCA9IHRoaXMuZ2V0Rmlyc3RFbmFibGVkVGFiKCk7XHJcbiAgICAgIGlmIChmaXJzdCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZhdGVUYWIoZmlyc3Quc3RhdGVJZCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAnQWN0aXZlIHRhYiBub3QgZm91bmQuJyxcclxuICAgICAgICAgIHRoaXMudGFic0xpc3QudG9BcnJheSgpLFxyXG4gICAgICAgICAgdGhpcy52YWx1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFRhYihmb3VuZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFRhYih0YWI6IFJkdFRhYkNvbXBvbmVudCkge1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFRhYiAhPT0gdGFiKSB7XHJcbiAgICAgIHRoaXMuc29saWRpZnlUYWJDb250ZW50U2l6ZSgpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRUYWIgPSB0YWI7XHJcbiAgICAgIHRoaXMuY3VycmVudFRlbXBsYXRlID0gdGFiLnRlbXBsYXRlUmVmO1xyXG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAvL3RhYi5vblZpZXdXaWxsRW50ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5mb3JtQXV0b2ZvY3VzICYmIHRhYi5mb3JtQXV0b2ZvY3VzKSB7XHJcbiAgICAgIC8vIFdhaXQgdW50aWwgdGVtcGxhdGUgaXMgYXR0YWNoZWQgdG8gRE9NXHJcbiAgICAgIHRpbWVyKDApXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSxcclxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0YWIuZGVzdHJveVJlZilcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0YWIuZm9jdXNGb3JtKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWxlYXNlVGFiQ29udGVudFNpemUoKSk7XHJcbiAgfVxyXG5cclxuICAvLyBTd2FwcGluZyB0ZW1wbGF0ZSBpbiB0ZW1wbGF0ZSBvdXRsZXQgd2lsbCBjYXVzZSBsYXJnZSBjc3MgcmVjYWxjXHJcbiAgLy8gZml4IHNpemUgdG8gcHJldmlvdXMgdGFiIGFuZCBpbiBjYXNlIHRoZXkgYXJlIHRoZSBzYW1lIHNpemVcclxuICAvLyB0aGUgcmVjYWxjIGlzbid0IG5vdGljYWJsZVxyXG4gIHByaXZhdGUgc29saWRpZnlUYWJDb250ZW50U2l6ZSgpIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy50YWJDb250ZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBiYiA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbCwgJ3dpZHRoJywgYmIud2lkdGggKyAncHgnKTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWwsICdoZWlnaHQnLCBiYi5oZWlnaHQgKyAncHgnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVsZWFzZVRhYkNvbnRlbnRTaXplKCkge1xyXG4gICAgY29uc3QgZWwgPSB0aGlzLnRhYkNvbnRlbnQubmF0aXZlRWxlbWVudDtcclxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUoZWwsICd3aWR0aCcpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZShlbCwgJ2hlaWdodCcpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGaXJzdEVuYWJsZWRUYWIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50YWJzTGlzdC5maW5kKCh0KSA9PiAhdC5kaXNhYmxlZCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ0YWItaGVhZGVyLXBhbmVsXCIgKm5nSWY9XCJ0YWJzTGlzdFwiPlxyXG4gIDxidXR0b25cclxuICAgICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFic0xpc3RcIlxyXG4gICAgI2hlYWRlckJ1dHRvblxyXG4gICAgY2xhc3M9XCJweC0yIHB5LTEgdGFiLWhlYWRlci1idXR0b25cIlxyXG4gICAgKGNsaWNrKT1cImFjdGl2YXRlVGFiKHRhYi5zdGF0ZUlkKVwiXHJcbiAgICBbY2xhc3MuYWN0aXZlXT1cInZhbHVlID09PSB0YWIuc3RhdGVJZFwiXHJcbiAgICBbZGlzYWJsZWRdPVwidGFiLmRpc2FibGVkXCJcclxuICAgIFtoaWRkZW5dPVwiIXRhYi52aXNpYmxlXCJcclxuICAgIHJvbGU9XCJ0YWJcIlxyXG4gICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJ2YWx1ZSA9PT0gdGFiLnN0YXRlSWRcIlxyXG4gICAgW2F0dHIuYXJpYS1jb250cm9sc109XCIncGFuZWwtJyArIHRhYi5zdGF0ZUlkXCJcclxuICAgIFthdHRyLnRhYmluZGV4XT1cInZhbHVlID09PSB0YWIuc3RhdGVJZCA/IDAgOiAtMVwiXHJcbiAgICBbaWRdPVwiJ3RhYi0nICsgdGFiLnN0YXRlSWRcIlxyXG4gICAgW2NsYXNzXT1cInRhYi5idXR0b25DbGFzc1wiXHJcbiAgICB0eXBlPVwiYnV0dG9uXCJcclxuICA+XHJcbiAgICB7eyB0YWIubGFiZWwgfX1cclxuICA8L2J1dHRvbj5cclxuPC9kaXY+XHJcbjxkaXZcclxuICBjbGFzcz1cInRhYi1jb250ZW50XCJcclxuICByb2xlPVwidGFicGFuZWxcIlxyXG4gIFtpZF09XCIncGFuZWwtJyArIHZhbHVlXCJcclxuICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiJ3RhYi0nICsgdmFsdWVcIlxyXG4gICN0YWJDb250ZW50XHJcbj5cclxuICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VycmVudFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cclxuPC9kaXY+XHJcbiJdfQ==
@@ -1,14 +0,0 @@
1
- import { Directive, inject, TemplateRef } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class RdtDestroyInactiveDirective {
4
- template = inject(TemplateRef);
5
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtDestroyInactiveDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
6
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.7", type: RdtDestroyInactiveDirective, selector: "[rdtDestroyInactive]", ngImport: i0 });
7
- }
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtDestroyInactiveDirective, decorators: [{
9
- type: Directive,
10
- args: [{
11
- selector: '[rdtDestroyInactive]',
12
- }]
13
- }] });
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LWRlc3Ryb3ktaW5hY3RpdmUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L3RhYnMvc3JjL2xpYi9kaXJlY3RpdmVzL3JkdC1kZXN0cm95LWluYWN0aXZlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSy9ELE1BQU0sT0FBTywyQkFBMkI7SUFDdEIsUUFBUSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQzt1R0FEcEMsMkJBQTJCOzJGQUEzQiwyQkFBMkI7OzJGQUEzQiwyQkFBMkI7a0JBSHZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGluamVjdCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW3JkdERlc3Ryb3lJbmFjdGl2ZV0nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmR0RGVzdHJveUluYWN0aXZlRGlyZWN0aXZlIHtcclxuICBwdWJsaWMgcmVhZG9ubHkgdGVtcGxhdGUgPSBpbmplY3QoVGVtcGxhdGVSZWYpO1xyXG59XHJcbiJdfQ==