nxt-pick-datetime 18.0.0 → 19.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.
Files changed (49) hide show
  1. package/fesm2022/nxt-pick-datetime-moment-adapter.mjs +23 -26
  2. package/fesm2022/nxt-pick-datetime-moment-adapter.mjs.map +1 -1
  3. package/fesm2022/nxt-pick-datetime-native-adapter.mjs +22 -24
  4. package/fesm2022/nxt-pick-datetime-native-adapter.mjs.map +1 -1
  5. package/fesm2022/nxt-pick-datetime.mjs +76 -74
  6. package/fesm2022/nxt-pick-datetime.mjs.map +1 -1
  7. package/lib/class/date-time.class.d.ts +1 -1
  8. package/moment-adapter/moment-adapter.module.d.ts +2 -0
  9. package/moment-adapter/public-api.d.ts +1 -1
  10. package/native-adapter/native-adapter.module.d.ts +2 -0
  11. package/native-adapter/public-api.d.ts +1 -1
  12. package/package.json +9 -14
  13. package/esm2022/lib/class/date-time-adapter.class.mjs +0 -97
  14. package/esm2022/lib/class/date-time-format.class.mjs +0 -4
  15. package/esm2022/lib/class/date-time.class.mjs +0 -95
  16. package/esm2022/lib/class/dialog-config.class.mjs +0 -47
  17. package/esm2022/lib/class/dialog-ref.class.mjs +0 -119
  18. package/esm2022/lib/date-time/calendar/calendar.component.mjs +0 -346
  19. package/esm2022/lib/date-time/calendar-body/calendar-body.component.mjs +0 -151
  20. package/esm2022/lib/date-time/calendar-month-view/calendar-month-view.component.mjs +0 -429
  21. package/esm2022/lib/date-time/calendar-multi-year-view/calendar-multi-year-view.component.mjs +0 -358
  22. package/esm2022/lib/date-time/calendar-year-view/calendar-year-view.component.mjs +0 -362
  23. package/esm2022/lib/date-time/date-time-inline/date-time-inline.component.mjs +0 -275
  24. package/esm2022/lib/date-time/date-time-picker/date-time-picker.component.mjs +0 -541
  25. package/esm2022/lib/date-time/date-time-picker-container/date-time-picker-container.animations.mjs +0 -19
  26. package/esm2022/lib/date-time/date-time-picker-container/date-time-picker-container.component.mjs +0 -389
  27. package/esm2022/lib/date-time/date-time-picker-input.directive.mjs +0 -618
  28. package/esm2022/lib/date-time/date-time-picker-intl.service.mjs +0 -61
  29. package/esm2022/lib/date-time/date-time-picker-trigger.directive.mjs +0 -70
  30. package/esm2022/lib/date-time/date-time.module.mjs +0 -96
  31. package/esm2022/lib/date-time/number-fixed-len.pipe.mjs +0 -22
  32. package/esm2022/lib/date-time/timer/timer.component.mjs +0 -299
  33. package/esm2022/lib/date-time/timer-box/timer-box.component.mjs +0 -95
  34. package/esm2022/lib/dialog/dialog-container/dialog-container.component.mjs +0 -248
  35. package/esm2022/lib/dialog/dialog.module.mjs +0 -42
  36. package/esm2022/lib/dialog/dialog.service.mjs +0 -251
  37. package/esm2022/lib/utils/object.mjs +0 -24
  38. package/esm2022/moment-adapter/date-time-adapter.class.mjs +0 -220
  39. package/esm2022/moment-adapter/date-time-format.class.mjs +0 -13
  40. package/esm2022/moment-adapter/moment-adapter.module.mjs +0 -37
  41. package/esm2022/moment-adapter/nxt-pick-datetime-moment-adapter.mjs +0 -5
  42. package/esm2022/moment-adapter/public-api.mjs +0 -3
  43. package/esm2022/native-adapter/date-time-adapter.class.mjs +0 -366
  44. package/esm2022/native-adapter/date-time-format.class.mjs +0 -13
  45. package/esm2022/native-adapter/native-adapter.module.mjs +0 -37
  46. package/esm2022/native-adapter/nxt-pick-datetime-native-adapter.mjs +0 -5
  47. package/esm2022/native-adapter/public-api.mjs +0 -2
  48. package/esm2022/nxt-pick-datetime.mjs +0 -5
  49. package/esm2022/public-api.mjs +0 -14
@@ -1,248 +0,0 @@
1
- import { animate, animateChild, keyframes, style, transition, trigger } from '@angular/animations';
2
- import { BasePortalOutlet, CdkPortalOutlet } from '@angular/cdk/portal';
3
- import { DOCUMENT } from '@angular/common';
4
- import { Component, EventEmitter, HostBinding, HostListener, Inject, Optional, ViewChild } from '@angular/core';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/cdk/a11y";
7
- import * as i2 from "@angular/cdk/portal";
8
- /** @internal */
9
- const zoomFadeIn = {
10
- opacity: 0,
11
- transform: 'translateX({{ x }}) translateY({{ y }}) scale({{scale}})'
12
- };
13
- /** @internal */
14
- const zoomFadeInFrom = {
15
- opacity: 0,
16
- transform: 'translateX({{ x }}) translateY({{ y }}) scale({{scale}})',
17
- transformOrigin: '{{ ox }} {{ oy }}'
18
- };
19
- /** @internal */
20
- export class DialogContainerComponent extends BasePortalOutlet {
21
- get config() {
22
- return this._config;
23
- }
24
- /** @internal */
25
- get dialogContainerClass() {
26
- return true;
27
- }
28
- /** @internal */
29
- get dialogContainerTabIndex() {
30
- return -1;
31
- }
32
- /** @internal */
33
- get dialogContainerId() {
34
- return this._config?.id;
35
- }
36
- /** @internal */
37
- get dialogContainerRole() {
38
- return this._config?.role;
39
- }
40
- /** @internal */
41
- get dialogContainerAriaLabelledby() {
42
- return this.ariaLabelledBy;
43
- }
44
- /** @internal */
45
- get dialogContainerAriaDescribedby() {
46
- return this._config?.ariaDescribedBy;
47
- }
48
- /** @internal */
49
- get dialogContainerAnimation() {
50
- return { value: this.state, params: this.params };
51
- }
52
- constructor(changeDetector, elementRef, focusTrapFactory, document) {
53
- super();
54
- this.changeDetector = changeDetector;
55
- this.elementRef = elementRef;
56
- this.focusTrapFactory = focusTrapFactory;
57
- this.document = document;
58
- /** Emits when an animation state changes */
59
- this.animationStateChanged = new EventEmitter();
60
- this.isAnimating = false;
61
- this.state = 'enter';
62
- // for animation purpose
63
- this.params = {
64
- x: '0px',
65
- y: '0px',
66
- ox: '50%',
67
- oy: '50%',
68
- scale: 0
69
- };
70
- }
71
- ngOnInit() { }
72
- /**
73
- * Attach a ComponentPortal as content to this dialog container.
74
- */
75
- attachComponentPortal(portal) {
76
- if (this.portalOutlet?.hasAttached()) {
77
- throw Error('Attempting to attach dialog content after content is already attached');
78
- }
79
- this.savePreviouslyFocusedElement();
80
- return this.portalOutlet.attachComponentPortal(portal);
81
- }
82
- attachTemplatePortal(_portal) {
83
- throw new Error('Method not implemented.');
84
- }
85
- setConfig(config) {
86
- this._config = config;
87
- if (config.event) {
88
- this.calculateZoomOrigin(config.event);
89
- }
90
- }
91
- onAnimationStart(event) {
92
- this.isAnimating = true;
93
- this.animationStateChanged.emit(event);
94
- }
95
- onAnimationDone(event) {
96
- if (event.toState === 'enter') {
97
- this.trapFocus();
98
- }
99
- else if (event.toState === 'exit') {
100
- this.restoreFocus();
101
- }
102
- this.animationStateChanged.emit(event);
103
- this.isAnimating = false;
104
- }
105
- startExitAnimation() {
106
- this.state = 'exit';
107
- this.changeDetector.markForCheck();
108
- }
109
- /**
110
- * Calculate origin used in the `zoomFadeInFrom()`
111
- * for animation purpose
112
- */
113
- calculateZoomOrigin(event) {
114
- if (!event) {
115
- return;
116
- }
117
- const clientX = event.clientX;
118
- const clientY = event.clientY;
119
- const wh = window.innerWidth / 2;
120
- const hh = window.innerHeight / 2;
121
- const x = clientX - wh;
122
- const y = clientY - hh;
123
- const ox = clientX / window.innerWidth;
124
- const oy = clientY / window.innerHeight;
125
- this.params.x = `${x}px`;
126
- this.params.y = `${y}px`;
127
- this.params.ox = `${ox * 100}%`;
128
- this.params.oy = `${oy * 100}%`;
129
- this.params.scale = 0;
130
- return;
131
- }
132
- /**
133
- * Save the focused element before dialog was open
134
- */
135
- savePreviouslyFocusedElement() {
136
- if (this.document) {
137
- this.elementFocusedBeforeDialogWasOpened = this.document
138
- .activeElement;
139
- Promise.resolve().then(() => this.elementRef.nativeElement.focus()).catch(() => { });
140
- }
141
- }
142
- trapFocus() {
143
- if (!this.focusTrap) {
144
- this.focusTrap = this.focusTrapFactory.create(this.elementRef.nativeElement);
145
- }
146
- if (this._config?.autoFocus) {
147
- this.focusTrap?.focusInitialElementWhenReady().catch(() => { });
148
- }
149
- }
150
- restoreFocus() {
151
- const toFocus = this.elementFocusedBeforeDialogWasOpened;
152
- if (toFocus && typeof toFocus.focus === 'function') {
153
- toFocus.focus();
154
- }
155
- if (this.focusTrap) {
156
- this.focusTrap.destroy();
157
- this.focusTrap = undefined;
158
- }
159
- }
160
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: DialogContainerComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.ConfigurableFocusTrapFactory }, { token: DOCUMENT, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
161
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: DialogContainerComponent, selector: "nxt-dialog-container", host: { listeners: { "@slideModal.start": "onAnimationStart($event)", "@slideModal.done": "onAnimationDone($event)" }, properties: { "class.nxt-dialog-container": "this.dialogContainerClass", "attr.tabindex": "this.dialogContainerTabIndex", "attr.id": "this.dialogContainerId", "attr.role": "this.dialogContainerRole", "attr.aria-labelledby": "this.dialogContainerAriaLabelledby", "attr.aria-describedby": "this.dialogContainerAriaDescribedby", "@slideModal": "this.dialogContainerAnimation" } }, viewQueries: [{ propertyName: "portalOutlet", first: true, predicate: CdkPortalOutlet, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-template cdkPortalOutlet></ng-template>\r\n", dependencies: [{ kind: "directive", type: i2.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }], animations: [
162
- trigger('slideModal', [
163
- transition('void => enter', [
164
- style(zoomFadeInFrom),
165
- animate('300ms cubic-bezier(0.35, 0, 0.25, 1)', style('*')),
166
- animate('150ms', keyframes([
167
- style({ transform: 'scale(1)', offset: 0 }),
168
- style({ transform: 'scale(1.05)', offset: 0.3 }),
169
- style({ transform: 'scale(.95)', offset: 0.8 }),
170
- style({ transform: 'scale(1)', offset: 1.0 })
171
- ])),
172
- animateChild()
173
- ], {
174
- params: {
175
- x: '0px',
176
- y: '0px',
177
- ox: '50%',
178
- oy: '50%',
179
- scale: 1
180
- }
181
- }),
182
- transition('enter => exit', [animateChild(), animate(200, style(zoomFadeIn))], { params: { x: '0px', y: '0px', ox: '50%', oy: '50%' } })
183
- ])
184
- ] }); }
185
- }
186
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: DialogContainerComponent, decorators: [{
187
- type: Component,
188
- args: [{ selector: 'nxt-dialog-container', animations: [
189
- trigger('slideModal', [
190
- transition('void => enter', [
191
- style(zoomFadeInFrom),
192
- animate('300ms cubic-bezier(0.35, 0, 0.25, 1)', style('*')),
193
- animate('150ms', keyframes([
194
- style({ transform: 'scale(1)', offset: 0 }),
195
- style({ transform: 'scale(1.05)', offset: 0.3 }),
196
- style({ transform: 'scale(.95)', offset: 0.8 }),
197
- style({ transform: 'scale(1)', offset: 1.0 })
198
- ])),
199
- animateChild()
200
- ], {
201
- params: {
202
- x: '0px',
203
- y: '0px',
204
- ox: '50%',
205
- oy: '50%',
206
- scale: 1
207
- }
208
- }),
209
- transition('enter => exit', [animateChild(), animate(200, style(zoomFadeIn))], { params: { x: '0px', y: '0px', ox: '50%', oy: '50%' } })
210
- ])
211
- ], template: "<ng-template cdkPortalOutlet></ng-template>\r\n" }]
212
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.ConfigurableFocusTrapFactory }, { type: Document, decorators: [{
213
- type: Optional
214
- }, {
215
- type: Inject,
216
- args: [DOCUMENT]
217
- }] }], propDecorators: { portalOutlet: [{
218
- type: ViewChild,
219
- args: [CdkPortalOutlet, { static: true }]
220
- }], dialogContainerClass: [{
221
- type: HostBinding,
222
- args: ['class.nxt-dialog-container']
223
- }], dialogContainerTabIndex: [{
224
- type: HostBinding,
225
- args: ['attr.tabindex']
226
- }], dialogContainerId: [{
227
- type: HostBinding,
228
- args: ['attr.id']
229
- }], dialogContainerRole: [{
230
- type: HostBinding,
231
- args: ['attr.role']
232
- }], dialogContainerAriaLabelledby: [{
233
- type: HostBinding,
234
- args: ['attr.aria-labelledby']
235
- }], dialogContainerAriaDescribedby: [{
236
- type: HostBinding,
237
- args: ['attr.aria-describedby']
238
- }], dialogContainerAnimation: [{
239
- type: HostBinding,
240
- args: ['@slideModal']
241
- }], onAnimationStart: [{
242
- type: HostListener,
243
- args: ['@slideModal.start', ['$event']]
244
- }], onAnimationDone: [{
245
- type: HostListener,
246
- args: ['@slideModal.done', ['$event']]
247
- }] } });
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWNvbnRhaW5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9waWNrLWRhdGV0aW1lL3NyYy9saWIvZGlhbG9nL2RpYWxvZy1jb250YWluZXIvZGlhbG9nLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9waWNrLWRhdGV0aW1lL3NyYy9saWIvZGlhbG9nL2RpYWxvZy1jb250YWluZXIvZGlhbG9nLWNvbnRhaW5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBa0IsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFbEgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBbUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUN4RyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDMUMsT0FBTyxFQUFxQixTQUFTLEVBQTZDLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBVSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBOzs7O0FBTXJMLGdCQUFnQjtBQUNoQixNQUFNLFVBQVUsR0FBRztJQUNmLE9BQU8sRUFBRSxDQUFDO0lBQ1YsU0FBUyxFQUFFLDBEQUEwRDtDQUN4RSxDQUFBO0FBRUQsZ0JBQWdCO0FBQ2hCLE1BQU0sY0FBYyxHQUFHO0lBQ25CLE9BQU8sRUFBRSxDQUFDO0lBQ1YsU0FBUyxFQUFFLDBEQUEwRDtJQUNyRSxlQUFlLEVBQUUsbUJBQW1CO0NBQ3ZDLENBQUE7QUFFRCxnQkFBZ0I7QUF3Q2hCLE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxnQkFBZ0I7SUFnQjFELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8s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QUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDM0Q7eUJBQ0osQ0FBQztxQkFDTDs7MEJBbUZJLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsUUFBUTt5Q0FoRnBCLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQW9DeEMsb0JBQW9CO3NCQUR2QixXQUFXO3VCQUFDLDRCQUE0QjtnQkFPckMsdUJBQXVCO3NCQUQxQixXQUFXO3VCQUFDLGVBQWU7Z0JBT3hCLGlCQUFpQjtzQkFEcEIsV0FBVzt1QkFBQyxTQUFTO2dCQU9sQixtQkFBbUI7c0JBRHRCLFdBQVc7dUJBQUMsV0FBVztnQkFPcEIsNkJBQTZCO3NCQURoQyxXQUFXO3VCQUFDLHNCQUFzQjtnQkFPL0IsOEJBQThCO3NCQURqQyxXQUFXO3VCQUFDLHVCQUF1QjtnQkFPaEMsd0JBQXdCO3NCQUQzQixXQUFXO3VCQUFDLGFBQWE7Z0JBaUQxQixnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFPN0MsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgYW5pbWF0ZUNoaWxkLCBBbmltYXRpb25FdmVudCwga2V5ZnJhbWVzLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnXHJcbmltcG9ydCB7IENvbmZpZ3VyYWJsZUZvY3VzVHJhcCwgQ29uZmlndXJhYmxlRm9jdXNUcmFwRmFjdG9yeSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5J1xyXG5pbXBvcnQgeyBCYXNlUG9ydGFsT3V0bGV0LCBDZGtQb3J0YWxPdXRsZXQsIENvbXBvbmVudFBvcnRhbCwgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJ1xyXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmLCBFbWJlZGRlZFZpZXdSZWYsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBPbkluaXQsIE9wdGlvbmFsLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBEaWFsb2dDb25maWcgfSBmcm9tICcuLi8uLi9jbGFzcy9kaWFsb2ctY29uZmlnLmNsYXNzJ1xyXG5cclxuLyoqIEBpbnRlcm5hbCAqL1xyXG5leHBvcnQgdHlwZSBEaWFsb2dDb250YWluZXJTdGF0ZSA9ICd2b2lkJyB8ICdlbnRlcicgfCAnZXhpdCdcclxuXHJcbi8qKiBAaW50ZXJuYWwgKi9cclxuY29uc3Qgem9vbUZhZGVJbiA9IHtcclxuICAgIG9wYWNpdHk6IDAsXHJcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKHt7IHggfX0pIHRyYW5zbGF0ZVkoe3sgeSB9fSkgc2NhbGUoe3tzY2FsZX19KSdcclxufVxyXG5cclxuLyoqIEBpbnRlcm5hbCAqL1xyXG5jb25zdCB6b29tRmFkZUluRnJvbSA9IHtcclxuICAgIG9wYWNpdHk6IDAsXHJcbiAgICB0cmFuc2Zvcm06ICd0cmFuc2xhdGVYKHt7IHggfX0pIHRyYW5zbGF0ZVkoe3sgeSB9fSkgc2NhbGUoe3tzY2FsZX19KScsXHJcbiAgICB0cmFuc2Zvcm1PcmlnaW46ICd7eyBveCB9fSB7eyBveSB9fSdcclxufVxyXG5cclxuLyoqIEBpbnRlcm5hbCAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbnh0LWRpYWxvZy1jb250YWluZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RpYWxvZy1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgYW5pbWF0aW9uczogW1xyXG4gICAgICAgIHRyaWdnZXIoJ3NsaWRlTW9kYWwnLCBbXHJcbiAgICAgICAgICAgIHRyYW5zaXRpb24oXHJcbiAgICAgICAgICAgICAgICAndm9pZCA9PiBlbnRlcicsXHJcbiAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUoem9vbUZhZGVJbkZyb20pLFxyXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGUoJzMwMG1zIGN1YmljLWJlemllcigwLjM1LCAwLCAwLjI1LCAxKScsIHN0eWxlKCcqJykpLFxyXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICcxNTBtcycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleWZyYW1lcyhbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3NjYWxlKDEpJywgb2Zmc2V0OiAwIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSgxLjA1KScsIG9mZnNldDogMC4zIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSguOTUpJywgb2Zmc2V0OiAwLjggfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogJ3NjYWxlKDEpJywgb2Zmc2V0OiAxLjAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSlcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGVDaGlsZCgpXHJcbiAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAnMHB4JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeTogJzBweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG94OiAnNTAlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3k6ICc1MCUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2FsZTogMVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgdHJhbnNpdGlvbihcclxuICAgICAgICAgICAgICAgICdlbnRlciA9PiBleGl0JyxcclxuICAgICAgICAgICAgICAgIFthbmltYXRlQ2hpbGQoKSwgYW5pbWF0ZSgyMDAsIHN0eWxlKHpvb21GYWRlSW4pKV0sXHJcbiAgICAgICAgICAgICAgICB7IHBhcmFtczogeyB4OiAnMHB4JywgeTogJzBweCcsIG94OiAnNTAlJywgb3k6ICc1MCUnIH0gfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgXSlcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudCBleHRlbmRzIEJhc2VQb3J0YWxPdXRsZXQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgQFZpZXdDaGlsZChDZGtQb3J0YWxPdXRsZXQsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgICBwb3J0YWxPdXRsZXQ/OiBDZGtQb3J0YWxPdXRsZXRcclxuXHJcbiAgICAvKiogVGhlIGNsYXNzIHRoYXQgdHJhcHMgYW5kIG1hbmFnZXMgZm9jdXMgd2l0aGluIHRoZSBkaWFsb2cgKi9cclxuICAgIHByaXZhdGUgZm9jdXNUcmFwPzogQ29uZmlndXJhYmxlRm9jdXNUcmFwXHJcblxyXG4gICAgLyoqIElEIG9mIHRoZSBlbGVtZW50IHRoYXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYXMgdGhlIGRpYWxvZydzIGxhYmVsICovXHJcbiAgICBhcmlhTGFiZWxsZWRCeT86IHN0cmluZ1xyXG5cclxuICAgIC8qKiBFbWl0cyB3aGVuIGFuIGFuaW1hdGlvbiBzdGF0ZSBjaGFuZ2VzICovXHJcbiAgICByZWFkb25seSBhbmltYXRpb25TdGF0ZUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEFuaW1hdGlvbkV2ZW50PigpXHJcblxyXG4gICAgaXNBbmltYXRpbmcgPSBmYWxzZVxyXG5cclxuICAgIHByaXZhdGUgX2NvbmZpZz86IERpYWxvZ0NvbmZpZ1xyXG4gICAgZ2V0IGNvbmZpZygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0ZTogRGlhbG9nQ29udGFpbmVyU3RhdGUgPSAnZW50ZXInXHJcblxyXG4gICAgLy8gZm9yIGFuaW1hdGlvbiBwdXJwb3NlXHJcbiAgICBwcml2YXRlIHBhcmFtczogYW55ID0ge1xyXG4gICAgICAgIHg6ICcwcHgnLFxyXG4gICAgICAgIHk6ICcwcHgnLFxyXG4gICAgICAgIG94OiAnNTAlJyxcclxuICAgICAgICBveTogJzUwJScsXHJcbiAgICAgICAgc2NhbGU6IDBcclxuICAgIH1cclxuXHJcbiAgICAvLyBBIHZhcmlhYmxlIHRvIGhvbGQgdGhlIGZvY3VzZWQgZWxlbWVudCBiZWZvcmUgdGhlIGRpYWxvZyB3YXMgb3Blbi5cclxuICAgIC8vIFRoaXMgd291bGQgaGVscCB1cyB0byByZWZvY3VzIGJhY2sgdG8gZWxlbWVudCB3aGVuIHRoZSBkaWFsb2cgd2FzIGNsb3NlZC5cclxuICAgIHByaXZhdGUgZWxlbWVudEZvY3VzZWRCZWZvcmVEaWFsb2dXYXNPcGVuZWQ/OiBIVE1MRWxlbWVudFxyXG5cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3Mubnh0LWRpYWxvZy1jb250YWluZXInKVxyXG4gICAgZ2V0IGRpYWxvZ0NvbnRhaW5lckNsYXNzKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JylcclxuICAgIGdldCBkaWFsb2dDb250YWluZXJUYWJJbmRleCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiAtMVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIEBIb3N0QmluZGluZygnYXR0ci5pZCcpXHJcbiAgICBnZXQgZGlhbG9nQ29udGFpbmVySWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZz8uaWRcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXHJcbiAgICBnZXQgZGlhbG9nQ29udGFpbmVyUm9sZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnPy5yb2xlXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xyXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWxsZWRieScpXHJcbiAgICBnZXQgZGlhbG9nQ29udGFpbmVyQXJpYUxhYmVsbGVkYnkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXJpYUxhYmVsbGVkQnlcclxuICAgIH1cclxuXHJcbiAgICAvKiogQGludGVybmFsICovXHJcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1kZXNjcmliZWRieScpXHJcbiAgICBnZXQgZGlhbG9nQ29udGFpbmVyQXJpYURlc2NyaWJlZGJ5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb25maWc/LmFyaWFEZXNjcmliZWRCeVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaW50ZXJuYWwgKi9cclxuICAgIEBIb3N0QmluZGluZygnQHNsaWRlTW9kYWwnKVxyXG4gICAgZ2V0IGRpYWxvZ0NvbnRhaW5lckFuaW1hdGlvbigpIHtcclxuICAgICAgICByZXR1cm4geyB2YWx1ZTogdGhpcy5zdGF0ZSwgcGFyYW1zOiB0aGlzLnBhcmFtcyB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGZvY3VzVHJhcEZhY3Rvcnk6IENvbmZpZ3VyYWJsZUZvY3VzVHJhcEZhY3RvcnksXHJcbiAgICAgICAgQE9wdGlvbmFsKClcclxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKVxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQ/OiBEb2N1bWVudFxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoKVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRhY2ggYSBDb21wb25lbnRQb3J0YWwgYXMgY29udGVudCB0byB0aGlzIGRpYWxvZyBjb250YWluZXIuXHJcbiAgICAgKi9cclxuICAgIGF0dGFjaENvbXBvbmVudFBvcnRhbDxUPihcclxuICAgICAgICBwb3J0YWw6IENvbXBvbmVudFBvcnRhbDxUPlxyXG4gICAgKTogQ29tcG9uZW50UmVmPFQ+IHtcclxuICAgICAgICBpZiAodGhpcy5wb3J0YWxPdXRsZXQ/Lmhhc0F0dGFjaGVkKCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAgICAgICAnQXR0ZW1wdGluZyB0byBhdHRhY2ggZGlhbG9nIGNvbnRlbnQgYWZ0ZXIgY29udGVudCBpcyBhbHJlYWR5IGF0dGFjaGVkJ1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNhdmVQcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQoKVxyXG4gICAgICAgIHJldHVybiB0aGlzLnBvcnRhbE91dGxldCEuYXR0YWNoQ29tcG9uZW50UG9ydGFsKHBvcnRhbClcclxuICAgIH1cclxuXHJcbiAgICBhdHRhY2hUZW1wbGF0ZVBvcnRhbDxDPihcclxuICAgICAgICBfcG9ydGFsOiBUZW1wbGF0ZVBvcnRhbDxDPlxyXG4gICAgKTogRW1iZWRkZWRWaWV3UmVmPEM+IHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJylcclxuICAgIH1cclxuXHJcbiAgICBzZXRDb25maWcoY29uZmlnOiBEaWFsb2dDb25maWcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWdcclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5ldmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVpvb21PcmlnaW4oY29uZmlnLmV2ZW50KVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdAc2xpZGVNb2RhbC5zdGFydCcsIFsnJGV2ZW50J10pXHJcbiAgICBvbkFuaW1hdGlvblN0YXJ0KGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNBbmltYXRpbmcgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5hbmltYXRpb25TdGF0ZUNoYW5nZWQuZW1pdChldmVudClcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdAc2xpZGVNb2RhbC5kb25lJywgWyckZXZlbnQnXSlcclxuICAgIG9uQW5pbWF0aW9uRG9uZShldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ2VudGVyJykge1xyXG4gICAgICAgICAgICB0aGlzLnRyYXBGb2N1cygpXHJcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC50b1N0YXRlID09PSAnZXhpdCcpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN0b3JlRm9jdXMoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hbmltYXRpb25TdGF0ZUNoYW5nZWQuZW1pdChldmVudClcclxuICAgICAgICB0aGlzLmlzQW5pbWF0aW5nID0gZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICBzdGFydEV4aXRBbmltYXRpb24oKSB7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9ICdleGl0J1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKClcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENhbGN1bGF0ZSBvcmlnaW4gdXNlZCBpbiB0aGUgYHpvb21GYWRlSW5Gcm9tKClgXHJcbiAgICAgKiBmb3IgYW5pbWF0aW9uIHB1cnBvc2VcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVab29tT3JpZ2luKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWV2ZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY2xpZW50WCA9IGV2ZW50LmNsaWVudFhcclxuICAgICAgICBjb25zdCBjbGllbnRZID0gZXZlbnQuY2xpZW50WVxyXG5cclxuICAgICAgICBjb25zdCB3aCA9IHdpbmRvdy5pbm5lcldpZHRoIC8gMlxyXG4gICAgICAgIGNvbnN0IGhoID0gd2luZG93LmlubmVySGVpZ2h0IC8gMlxyXG4gICAgICAgIGNvbnN0IHggPSBjbGllbnRYIC0gd2hcclxuICAgICAgICBjb25zdCB5ID0gY2xpZW50WSAtIGhoXHJcbiAgICAgICAgY29uc3Qgb3ggPSBjbGllbnRYIC8gd2luZG93LmlubmVyV2lkdGhcclxuICAgICAgICBjb25zdCBveSA9IGNsaWVudFkgLyB3aW5kb3cuaW5uZXJIZWlnaHRcclxuXHJcbiAgICAgICAgdGhpcy5wYXJhbXMueCA9IGAke3h9cHhgXHJcbiAgICAgICAgdGhpcy5wYXJhbXMueSA9IGAke3l9cHhgXHJcbiAgICAgICAgdGhpcy5wYXJhbXMub3ggPSBgJHtveCAqIDEwMH0lYFxyXG4gICAgICAgIHRoaXMucGFyYW1zLm95ID0gYCR7b3kgKiAxMDB9JWBcclxuICAgICAgICB0aGlzLnBhcmFtcy5zY2FsZSA9IDBcclxuXHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTYXZlIHRoZSBmb2N1c2VkIGVsZW1lbnQgYmVmb3JlIGRpYWxvZyB3YXMgb3BlblxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNhdmVQcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50Rm9jdXNlZEJlZm9yZURpYWxvZ1dhc09wZW5lZCA9IHRoaXMuZG9jdW1lbnRcclxuICAgICAgICAgICAgICAgIC5hY3RpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50XHJcblxyXG4gICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCkpLmNhdGNoKCgpID0+IHsgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0cmFwRm9jdXMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZvY3VzVHJhcCkge1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzVHJhcCA9IHRoaXMuZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fY29uZmlnPy5hdXRvRm9jdXMpIHtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c1RyYXA/LmZvY3VzSW5pdGlhbEVsZW1lbnRXaGVuUmVhZHkoKS5jYXRjaCgoKSA9PiB7IH0pXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVzdG9yZUZvY3VzKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHRvRm9jdXMgPSB0aGlzLmVsZW1lbnRGb2N1c2VkQmVmb3JlRGlhbG9nV2FzT3BlbmVkXHJcblxyXG4gICAgICAgIGlmICh0b0ZvY3VzICYmIHR5cGVvZiB0b0ZvY3VzLmZvY3VzID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHRvRm9jdXMuZm9jdXMoKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNUcmFwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUcmFwLmRlc3Ryb3koKVxyXG4gICAgICAgICAgICB0aGlzLmZvY3VzVHJhcCA9IHVuZGVmaW5lZFxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8bmctdGVtcGxhdGUgY2RrUG9ydGFsT3V0bGV0PjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
@@ -1,42 +0,0 @@
1
- import { A11yModule } from '@angular/cdk/a11y';
2
- import { OverlayModule } from '@angular/cdk/overlay';
3
- import { PortalModule } from '@angular/cdk/portal';
4
- import { CommonModule } from '@angular/common';
5
- import { NgModule } from '@angular/core';
6
- import { DialogContainerComponent } from './dialog-container/dialog-container.component';
7
- import { DialogService, NXT_DIALOG_SCROLL_STRATEGY_PROVIDER } from './dialog.service';
8
- import * as i0 from "@angular/core";
9
- /** @internal */
10
- export class DialogModule {
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: DialogModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
12
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.1", ngImport: i0, type: DialogModule, declarations: [DialogContainerComponent], imports: [CommonModule,
13
- A11yModule,
14
- OverlayModule,
15
- PortalModule] }); }
16
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: DialogModule, providers: [
17
- NXT_DIALOG_SCROLL_STRATEGY_PROVIDER,
18
- DialogService
19
- ], imports: [CommonModule,
20
- A11yModule,
21
- OverlayModule,
22
- PortalModule] }); }
23
- }
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: DialogModule, decorators: [{
25
- type: NgModule,
26
- args: [{
27
- declarations: [
28
- DialogContainerComponent
29
- ],
30
- imports: [
31
- CommonModule,
32
- A11yModule,
33
- OverlayModule,
34
- PortalModule
35
- ],
36
- providers: [
37
- NXT_DIALOG_SCROLL_STRATEGY_PROVIDER,
38
- DialogService
39
- ]
40
- }]
41
- }] });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3BpY2stZGF0ZXRpbWUvc3JjL2xpYi9kaWFsb2cvZGlhbG9nLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQTtBQUN4RixPQUFPLEVBQUUsYUFBYSxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7O0FBRXJGLGdCQUFnQjtBQWdCaEIsTUFBTSxPQUFPLFlBQVk7OEdBQVosWUFBWTsrR0FBWixZQUFZLGlCQWJqQix3QkFBd0IsYUFHeEIsWUFBWTtZQUNaLFVBQVU7WUFDVixhQUFhO1lBQ2IsWUFBWTsrR0FPUCxZQUFZLGFBTFY7WUFDUCxtQ0FBbUM7WUFDbkMsYUFBYTtTQUNoQixZQVJHLFlBQVk7WUFDWixVQUFVO1lBQ1YsYUFBYTtZQUNiLFlBQVk7OzJGQU9QLFlBQVk7a0JBZnhCLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFO3dCQUNWLHdCQUF3QjtxQkFDM0I7b0JBQ0QsT0FBTyxFQUFFO3dCQUNMLFlBQVk7d0JBQ1osVUFBVTt3QkFDVixhQUFhO3dCQUNiLFlBQVk7cUJBQ2Y7b0JBQ0QsU0FBUyxFQUFFO3dCQUNQLG1DQUFtQzt3QkFDbkMsYUFBYTtxQkFDaEI7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBMTF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknXHJcbmltcG9ydCB7IE92ZXJsYXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSdcclxuaW1wb3J0IHsgUG9ydGFsTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCdcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xyXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4vZGlhbG9nLWNvbnRhaW5lci9kaWFsb2ctY29udGFpbmVyLmNvbXBvbmVudCdcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgTlhUX0RJQUxPR19TQ1JPTExfU1RSQVRFR1lfUFJPVklERVIgfSBmcm9tICcuL2RpYWxvZy5zZXJ2aWNlJ1xyXG5cclxuLyoqIEBpbnRlcm5hbCAqL1xyXG5ATmdNb2R1bGUoe1xyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgICAgRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgICBBMTF5TW9kdWxlLFxyXG4gICAgICAgIE92ZXJsYXlNb2R1bGUsXHJcbiAgICAgICAgUG9ydGFsTW9kdWxlXHJcbiAgICBdLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgTlhUX0RJQUxPR19TQ1JPTExfU1RSQVRFR1lfUFJPVklERVIsXHJcbiAgICAgICAgRGlhbG9nU2VydmljZVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGlhbG9nTW9kdWxlIHsgfVxyXG4iXX0=
@@ -1,251 +0,0 @@
1
- import { Overlay, OverlayConfig } from '@angular/cdk/overlay';
2
- import { ComponentPortal } from '@angular/cdk/portal';
3
- import { Location } from '@angular/common';
4
- import { Inject, Injectable, InjectionToken, Injector, Optional, SkipSelf, TemplateRef } from '@angular/core';
5
- import { defer, of, Subject } from 'rxjs';
6
- import { concatAll } from 'rxjs/operators';
7
- import { DialogConfig } from '../class/dialog-config.class';
8
- import { DialogRef } from '../class/dialog-ref.class';
9
- import { extendObject } from '../utils/object';
10
- import { DialogContainerComponent } from './dialog-container/dialog-container.component';
11
- import * as i0 from "@angular/core";
12
- import * as i1 from "@angular/cdk/overlay";
13
- /** @internal */
14
- export const NXT_DIALOG_DATA = new InjectionToken('NXT_DIALOG_DATA');
15
- /**
16
- * Injection token that determines the scroll handling while the dialog is open.
17
- *
18
- * @internal
19
- */
20
- export const NXT_DIALOG_SCROLL_STRATEGY = new InjectionToken('NXT_DIALOG_SCROLL_STRATEGY');
21
- /** @internal */
22
- export function NXT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY(overlay) {
23
- const fn = () => overlay.scrollStrategies.block();
24
- return fn;
25
- }
26
- /** @internal */
27
- export const NXT_DIALOG_SCROLL_STRATEGY_PROVIDER = {
28
- provide: NXT_DIALOG_SCROLL_STRATEGY,
29
- deps: [Overlay],
30
- useFactory: NXT_DIALOG_SCROLL_STRATEGY_PROVIDER_FACTORY
31
- };
32
- /**
33
- * Injection token that can be used to specify default dialog options.
34
- *
35
- * @internal
36
- */
37
- export const NXT_DIALOG_DEFAULT_OPTIONS = new InjectionToken('NXT_DIALOG_DEFAULT_OPTIONS');
38
- /** @internal */
39
- export class DialogService {
40
- /** Keeps track of the currently-open dialogs */
41
- get openDialogs() {
42
- return this.parentDialog
43
- ? this.parentDialog.openDialogs
44
- : this._openDialogsAtThisLevel;
45
- }
46
- /** Stream that emits when a dialog has been isOpen */
47
- get afterOpen() {
48
- return this.parentDialog
49
- ? this.parentDialog.afterOpen
50
- : this._afterOpenAtThisLevel;
51
- }
52
- get _afterAllClosed() {
53
- const parent = this.parentDialog;
54
- return parent
55
- ? parent._afterAllClosed
56
- : this._afterAllClosedAtThisLevel;
57
- }
58
- constructor(overlay, injector, location, scrollStrategy, defaultOptions, parentDialog, overlayContainer) {
59
- this.overlay = overlay;
60
- this.injector = injector;
61
- this.location = location;
62
- this.defaultOptions = defaultOptions;
63
- this.parentDialog = parentDialog;
64
- this.overlayContainer = overlayContainer;
65
- this.ariaHiddenElements = new Map();
66
- this._openDialogsAtThisLevel = [];
67
- this._afterOpenAtThisLevel = new Subject();
68
- this._afterAllClosedAtThisLevel = new Subject();
69
- /**
70
- * Stream that emits when all open dialog have finished closing.
71
- * Will emit on subscribe if there are no open dialogs to begin with.
72
- */
73
- this.afterAllClosed = defer(() => this._openDialogsAtThisLevel.length
74
- ? this._afterAllClosed
75
- : of([undefined], this._afterAllClosed).pipe(concatAll()));
76
- this.scrollStrategy = scrollStrategy;
77
- if (!parentDialog && location) {
78
- location.subscribe(() => this.closeAll());
79
- }
80
- }
81
- open(componentOrTemplateRef, config) {
82
- config = applyConfigDefaults(config, this.defaultOptions);
83
- if (config.id && this.getDialogById(config.id)) {
84
- throw Error(`Dialog with id "${config.id}" exists already. The dialog id must be unique.`);
85
- }
86
- const overlayRef = this.createOverlay(config);
87
- const dialogContainer = this.attachDialogContainer(overlayRef, config);
88
- const dialogRef = this.attachDialogContent(componentOrTemplateRef, dialogContainer, overlayRef, config);
89
- if (!this.openDialogs.length) {
90
- this.hideNonDialogContentFromAssistiveTechnology();
91
- }
92
- this.openDialogs.push(dialogRef);
93
- dialogRef
94
- .afterClosed()
95
- .subscribe(() => this.removeOpenDialog(dialogRef));
96
- this.afterOpen.next(dialogRef);
97
- return dialogRef;
98
- }
99
- /**
100
- * Closes all of the currently-open dialogs.
101
- */
102
- closeAll() {
103
- let i = this.openDialogs.length;
104
- while (i--) {
105
- this.openDialogs[i].close();
106
- }
107
- }
108
- /**
109
- * Finds an open dialog by its id.
110
- *
111
- * @param id ID to use when looking up the dialog.
112
- */
113
- getDialogById(id) {
114
- return this.openDialogs.find(dialog => dialog.id === id);
115
- }
116
- attachDialogContent(componentOrTemplateRef, dialogContainer, overlayRef, config) {
117
- const dialogRef = new DialogRef(overlayRef, dialogContainer, config.id, this.location);
118
- if (config.hasBackdrop) {
119
- overlayRef.backdropClick().subscribe(() => {
120
- if (!dialogRef.disableClose) {
121
- dialogRef.close();
122
- }
123
- });
124
- }
125
- if (!(componentOrTemplateRef instanceof TemplateRef)) {
126
- const injector = this.createInjector(config, dialogRef, dialogContainer);
127
- const contentRef = dialogContainer.attachComponentPortal(new ComponentPortal(componentOrTemplateRef, undefined, injector));
128
- dialogRef.componentInstance = contentRef.instance;
129
- }
130
- dialogRef
131
- .updateSize(config.width, config.height)
132
- .updatePosition(config.position);
133
- return dialogRef;
134
- }
135
- createInjector(config, dialogRef, dialogContainer) {
136
- const userInjector = config &&
137
- config.viewContainerRef &&
138
- config.viewContainerRef.injector;
139
- return Injector.create({
140
- providers: [
141
- { provide: DialogRef, useValue: dialogRef },
142
- { provide: DialogContainerComponent, useValue: dialogContainer },
143
- { provide: NXT_DIALOG_DATA, useValue: config.data }
144
- ],
145
- parent: userInjector || this.injector
146
- });
147
- }
148
- createOverlay(config) {
149
- const overlayConfig = this.getOverlayConfig(config);
150
- return this.overlay.create(overlayConfig);
151
- }
152
- attachDialogContainer(overlayRef, config) {
153
- const containerPortal = new ComponentPortal(DialogContainerComponent, config.viewContainerRef);
154
- const containerRef = overlayRef.attach(containerPortal);
155
- containerRef.instance.setConfig(config);
156
- return containerRef.instance;
157
- }
158
- getOverlayConfig(dialogConfig) {
159
- const state = new OverlayConfig({
160
- positionStrategy: this.overlay.position().global(),
161
- scrollStrategy: dialogConfig.scrollStrategy || this.scrollStrategy(),
162
- panelClass: dialogConfig.paneClass,
163
- hasBackdrop: dialogConfig.hasBackdrop,
164
- minWidth: dialogConfig.minWidth,
165
- minHeight: dialogConfig.minHeight,
166
- maxWidth: dialogConfig.maxWidth,
167
- maxHeight: dialogConfig.maxHeight
168
- });
169
- if (dialogConfig.backdropClass) {
170
- state.backdropClass = dialogConfig.backdropClass;
171
- }
172
- return state;
173
- }
174
- removeOpenDialog(dialogRef) {
175
- const index = this._openDialogsAtThisLevel.indexOf(dialogRef);
176
- if (index > -1) {
177
- this.openDialogs.splice(index, 1);
178
- // If all the dialogs were closed, remove/restore the `aria-hidden`
179
- // to a the siblings and emit to the `afterAllClosed` stream.
180
- if (!this.openDialogs.length) {
181
- this.ariaHiddenElements.forEach((previousValue, element) => {
182
- if (previousValue) {
183
- element.setAttribute('aria-hidden', previousValue);
184
- }
185
- else {
186
- element.removeAttribute('aria-hidden');
187
- }
188
- });
189
- this.ariaHiddenElements.clear();
190
- this._afterAllClosed.next();
191
- }
192
- }
193
- }
194
- /**
195
- * Hides all of the content that isn't an overlay from assistive technology.
196
- */
197
- hideNonDialogContentFromAssistiveTechnology() {
198
- const overlayContainer = this.overlayContainer.getContainerElement();
199
- // Ensure that the overlay container is attached to the DOM.
200
- if (overlayContainer.parentElement) {
201
- const siblings = overlayContainer.parentElement.children;
202
- for (let i = siblings.length - 1; i > -1; i--) {
203
- const sibling = siblings[i];
204
- if (sibling !== overlayContainer &&
205
- sibling.nodeName !== 'SCRIPT' &&
206
- sibling.nodeName !== 'STYLE' &&
207
- !sibling.hasAttribute('aria-live')) {
208
- this.ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));
209
- sibling.setAttribute('aria-hidden', 'true');
210
- }
211
- }
212
- }
213
- }
214
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: DialogService, deps: [{ token: i1.Overlay }, { token: i0.Injector }, { token: Location, optional: true }, { token: NXT_DIALOG_SCROLL_STRATEGY }, { token: NXT_DIALOG_DEFAULT_OPTIONS, optional: true }, { token: DialogService, optional: true, skipSelf: true }, { token: i1.OverlayContainer }], target: i0.ɵɵFactoryTarget.Injectable }); }
215
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: DialogService }); }
216
- }
217
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: DialogService, decorators: [{
218
- type: Injectable
219
- }], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.Injector }, { type: undefined, decorators: [{
220
- type: Optional
221
- }, {
222
- type: Inject,
223
- args: [Location]
224
- }] }, { type: undefined, decorators: [{
225
- type: Inject,
226
- args: [NXT_DIALOG_SCROLL_STRATEGY]
227
- }] }, { type: undefined, decorators: [{
228
- type: Optional
229
- }, {
230
- type: Inject,
231
- args: [NXT_DIALOG_DEFAULT_OPTIONS]
232
- }] }, { type: undefined, decorators: [{
233
- type: Optional
234
- }, {
235
- type: SkipSelf
236
- }, {
237
- type: Inject,
238
- args: [DialogService]
239
- }] }, { type: i1.OverlayContainer }] });
240
- /**
241
- * Applies default options to the dialog config.
242
- *
243
- * @param config Config to be modified.
244
- * @param defaultOptions Default config setting
245
- * @returns The new configuration object.
246
- * @internal
247
- */
248
- function applyConfigDefaults(config, defaultOptions) {
249
- return extendObject(new DialogConfig(), config, defaultOptions);
250
- }
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9waWNrLWRhdGV0aW1lL3NyYy9saWIvZGlhbG9nL2RpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFnRCxNQUFNLHNCQUFzQixDQUFBO0FBQzNHLE9BQU8sRUFBRSxlQUFlLEVBQWlCLE1BQU0scUJBQXFCLENBQUE7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sRUFBZ0IsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzNILE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDMUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFBO0FBQzNELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0NBQStDLENBQUE7OztBQUV4RixnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLElBQUksY0FBYyxDQUFNLGlCQUFpQixDQUFDLENBQUE7QUFFekU7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFHLElBQUksY0FBYyxDQUUxRCw0QkFBNEIsQ0FBQyxDQUFBO0FBRS9CLGdCQUFnQjtBQUNoQixNQUFNLFVBQVUsMkNBQTJDLENBQ3ZELE9BQWdCO0lBRWhCLE1BQU0s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QUFROzswQkFDUixRQUFROzswQkFDUixNQUFNOzJCQUFDLGFBQWE7O0FBc043Qjs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxtQkFBbUIsQ0FDeEIsTUFBcUIsRUFDckIsY0FBNkI7SUFFN0IsT0FBTyxZQUFZLENBQUMsSUFBSSxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUE7QUFDbkUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlDb250YWluZXIsIE92ZXJsYXlSZWYsIFNjcm9sbFN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknXHJcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCwgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnXHJcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xyXG5pbXBvcnQgeyBDb21wb25lbnRSZWYsIEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIEluamVjdG9yLCBPcHRpb25hbCwgU2tpcFNlbGYsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgZGVmZXIsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHsgY29uY2F0QWxsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXHJcbmltcG9ydCB7IERpYWxvZ0NvbmZpZyB9IGZyb20gJy4uL2NsYXNzL2RpYWxvZy1jb25maWcuY2xhc3MnXHJcbmltcG9ydCB7IERpYWxvZ1JlZiB9IGZyb20gJy4uL2NsYXNzL2RpYWxvZy1yZWYuY2xhc3MnXHJcbmltcG9ydCB7IGV4dGVuZE9iamVjdCB9IGZyb20gJy4uL3V0aWxzL29iamVjdCdcclxuaW1wb3J0IHsgRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnLi9kaWFsb2ctY29udGFpbmVyL2RpYWxvZy1jb250YWluZXIuY29tcG9uZW50J1xyXG5cclxuLyoqIEBpbnRlcm5hbCAqL1xyXG5leHBvcnQgY29uc3QgTlhUX0RJQUxPR19EQVRBID0gbmV3IEluamVjdGlvblRva2VuPGFueT4oJ05YVF9ESUFMT0dfREFUQScpXHJcblxyXG4vKipcclxuICogSW5qZWN0aW9uIHRva2VuIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc2Nyb2xsIGhhbmRsaW5nIHdoaWxlIHRoZSBkaWFsb2cgaXMgb3Blbi5cclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgTlhUX0RJQUxPR19TQ1JPTExfU1RSQVRFR1kgPSBuZXcgSW5qZWN0aW9uVG9rZW48XHJcbiAgICAoKSA9PiBTY3JvbGxTdHJhdGVneVxyXG4+KCdOWFRfRElBTE9HX1NDUk9MTF9TVFJBVEVHWScpXHJcblxyXG4vKiogQGludGVybmFsICovXHJcbmV4cG9ydCBmdW5jdGlvbiBOWFRfRElBTE9HX1NDUk9MTF9TVFJBVEVHWV9QUk9WSURFUl9GQUNUT1JZKFxyXG4gICAgb3ZlcmxheTogT3ZlcmxheVxyXG4pOiAoKSA9PiBTY3JvbGxTdHJhdGVneSB7XHJcbiAgICBjb25zdCBmbiA9ICgpID0+IG92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5ibG9jaygpXHJcbiAgICByZXR1cm4gZm5cclxufVxyXG5cclxuLyoqIEBpbnRlcm5hbCAqL1xyXG5leHBvcnQgY29uc3QgTlhUX0RJQUxPR19TQ1JPTExfU1RSQVRFR1lfUFJPVklERVIgPSB7XHJcbiAgICBwcm92aWRlOiBOWFRfRElBTE9HX1NDUk9MTF9TVFJBVEVHWSxcclxuICAgIGRlcHM6IFtPdmVybGF5XSxcclxuICAgIHVzZUZhY3Rvcnk6IE5YVF9ESUFMT0dfU0NST0xMX1NUUkFURUdZX1BST1ZJREVSX0ZBQ1RPUllcclxufVxyXG5cclxuLyoqXHJcbiAqIEluamVjdGlvbiB0b2tlbiB0aGF0IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgZGVmYXVsdCBkaWFsb2cgb3B0aW9ucy5cclxuICpcclxuICogQGludGVybmFsXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgTlhUX0RJQUxPR19ERUZBVUxUX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48RGlhbG9nQ29uZmlnPihcclxuICAgICdOWFRfRElBTE9HX0RFRkFVTFRfT1BUSU9OUydcclxuKVxyXG5cclxuLyoqIEBpbnRlcm5hbCAqL1xyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBEaWFsb2dTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXJpYUhpZGRlbkVsZW1lbnRzID0gbmV3IE1hcDxFbGVtZW50LCBzdHJpbmcgfCBudWxsPigpXHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb3BlbkRpYWxvZ3NBdFRoaXNMZXZlbDogQXJyYXk8RGlhbG9nUmVmPGFueT4+ID0gW11cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2FmdGVyT3BlbkF0VGhpc0xldmVsID0gbmV3IFN1YmplY3Q8RGlhbG9nUmVmPGFueT4+KClcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWwgPSBuZXcgU3ViamVjdDx2b2lkPigpXHJcblxyXG4gICAgLyoqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50bHktb3BlbiBkaWFsb2dzICovXHJcbiAgICBnZXQgb3BlbkRpYWxvZ3MoKTogQXJyYXk8RGlhbG9nUmVmPGFueT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnREaWFsb2dcclxuICAgICAgICAgICAgPyB0aGlzLnBhcmVudERpYWxvZy5vcGVuRGlhbG9nc1xyXG4gICAgICAgICAgICA6IHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWxcclxuICAgIH1cclxuXHJcbiAgICAvKiogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBhIGRpYWxvZyBoYXMgYmVlbiBpc09wZW4gKi9cclxuICAgIGdldCBhZnRlck9wZW4oKTogU3ViamVjdDxEaWFsb2dSZWY8YW55Pj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudERpYWxvZ1xyXG4gICAgICAgICAgICA/IHRoaXMucGFyZW50RGlhbG9nLmFmdGVyT3BlblxyXG4gICAgICAgICAgICA6IHRoaXMuX2FmdGVyT3BlbkF0VGhpc0xldmVsXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF9hZnRlckFsbENsb3NlZCgpOiBTdWJqZWN0PHZvaWQ+IHtcclxuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnBhcmVudERpYWxvZ1xyXG4gICAgICAgIHJldHVybiBwYXJlbnRcclxuICAgICAgICAgICAgPyBwYXJlbnQuX2FmdGVyQWxsQ2xvc2VkXHJcbiAgICAgICAgICAgIDogdGhpcy5fYWZ0ZXJBbGxDbG9zZWRBdFRoaXNMZXZlbFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBhbGwgb3BlbiBkaWFsb2cgaGF2ZSBmaW5pc2hlZCBjbG9zaW5nLlxyXG4gICAgICogV2lsbCBlbWl0IG9uIHN1YnNjcmliZSBpZiB0aGVyZSBhcmUgbm8gb3BlbiBkaWFsb2dzIHRvIGJlZ2luIHdpdGguXHJcbiAgICAgKi9cclxuXHJcbiAgICByZWFkb25seSBhZnRlckFsbENsb3NlZCA9IGRlZmVyKFxyXG4gICAgICAgICgpID0+XHJcbiAgICAgICAgICAgIHRoaXMuX29wZW5EaWFsb2dzQXRUaGlzTGV2ZWwubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICA/IHRoaXMuX2FmdGVyQWxsQ2xvc2VkXHJcbiAgICAgICAgICAgICAgICA6IG9mKFt1bmRlZmluZWRdLCB0aGlzLl9hZnRlckFsbENsb3NlZCkucGlwZShjb25jYXRBbGwoKSlcclxuICAgIClcclxuXHJcbiAgICBwcml2YXRlIHNjcm9sbFN0cmF0ZWd5OiAoKSA9PiBTY3JvbGxTdHJhdGVneVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheTogT3ZlcmxheSxcclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBAT3B0aW9uYWwoKVxyXG4gICAgICAgIEBJbmplY3QoTG9jYXRpb24pXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBsb2NhdGlvbjogTG9jYXRpb24gfCB1bmRlZmluZWQsXHJcbiAgICAgICAgQEluamVjdChOWFRfRElBTE9HX1NDUk9MTF9TVFJBVEVHWSlcclxuICAgICAgICBzY3JvbGxTdHJhdGVneTogKCkgPT4gU2Nyb2xsU3RyYXRlZ3ksXHJcbiAgICAgICAgQE9wdGlvbmFsKClcclxuICAgICAgICBASW5qZWN0KE5YVF9ESUFMT0dfREVGQVVMVF9PUFRJT05TKVxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdE9wdGlvbnM6IERpYWxvZ0NvbmZpZyB8IHVuZGVmaW5lZCxcclxuICAgICAgICBAT3B0aW9uYWwoKVxyXG4gICAgICAgIEBTa2lwU2VsZigpXHJcbiAgICAgICAgQEluamVjdChEaWFsb2dTZXJ2aWNlKVxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50RGlhbG9nOiBEaWFsb2dTZXJ2aWNlIHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheUNvbnRhaW5lcjogT3ZlcmxheUNvbnRhaW5lclxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxTdHJhdGVneSA9IHNjcm9sbFN0cmF0ZWd5XHJcbiAgICAgICAgaWYgKCFwYXJlbnREaWFsb2cgJiYgbG9jYXRpb24pIHtcclxuICAgICAgICAgICAgbG9jYXRpb24uc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2VBbGwoKSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbjxUPihcclxuICAgICAgICBjb21wb25lbnRPclRlbXBsYXRlUmVmOiBDb21wb25lbnRUeXBlPFQ+IHwgVGVtcGxhdGVSZWY8VD4sXHJcbiAgICAgICAgY29uZmlnPzogRGlhbG9nQ29uZmlnXHJcbiAgICApOiBEaWFsb2dSZWY8YW55PiB7XHJcbiAgICAgICAgY29uZmlnID0gYXBwbHlDb25maWdEZWZhdWx0cyhjb25maWcsIHRoaXMuZGVmYXVsdE9wdGlvbnMpXHJcblxyXG4gICAgICAgIGlmIChjb25maWcuaWQgJiYgdGhpcy5nZXREaWFsb2dCeUlkKGNvbmZpZy5pZCkpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYERpYWxvZyB3aXRoIGlkIFwiJHtjb25maWcuaWR9XCIgZXhpc3RzIGFscmVhZHkuIFRoZSBkaWFsb2cgaWQgbXVzdCBiZSB1bmlxdWUuYClcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG92ZXJsYXlSZWYgPSB0aGlzLmNyZWF0ZU92ZXJsYXkoY29uZmlnKVxyXG4gICAgICAgIGNvbnN0IGRpYWxvZ0NvbnRhaW5lciA9IHRoaXMuYXR0YWNoRGlhbG9nQ29udGFpbmVyKG92ZXJsYXlSZWYsIGNvbmZpZylcclxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmF0dGFjaERpYWxvZ0NvbnRlbnQ8VD4oXHJcbiAgICAgICAgICAgIGNvbXBvbmVudE9yVGVtcGxhdGVSZWYsXHJcbiAgICAgICAgICAgIGRpYWxvZ0NvbnRhaW5lcixcclxuICAgICAgICAgICAgb3ZlcmxheVJlZixcclxuICAgICAgICAgICAgY29uZmlnXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMub3BlbkRpYWxvZ3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZU5vbkRpYWxvZ0NvbnRlbnRGcm9tQXNzaXN0aXZlVGVjaG5vbG9neSgpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm9wZW5EaWFsb2dzLnB1c2goZGlhbG9nUmVmKVxyXG4gICAgICAgIGRpYWxvZ1JlZlxyXG4gICAgICAgICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVtb3ZlT3BlbkRpYWxvZyhkaWFsb2dSZWYpKVxyXG4gICAgICAgIHRoaXMuYWZ0ZXJPcGVuLm5leHQoZGlhbG9nUmVmKVxyXG4gICAgICAgIHJldHVybiBkaWFsb2dSZWZcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsb3NlcyBhbGwgb2YgdGhlIGN1cnJlbnRseS1vcGVuIGRpYWxvZ3MuXHJcbiAgICAgKi9cclxuICAgIGNsb3NlQWxsKCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBpID0gdGhpcy5vcGVuRGlhbG9ncy5sZW5ndGhcclxuXHJcbiAgICAgICAgd2hpbGUgKGktLSkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5EaWFsb2dzW2ldLmNsb3NlKClcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaW5kcyBhbiBvcGVuIGRpYWxvZyBieSBpdHMgaWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGlkIElEIHRvIHVzZSB3aGVuIGxvb2tpbmcgdXAgdGhlIGRpYWxvZy5cclxuICAgICAqL1xyXG4gICAgZ2V0RGlhbG9nQnlJZChpZDogc3RyaW5nKTogRGlhbG9nUmVmPGFueT4gfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5EaWFsb2dzLmZpbmQoZGlhbG9nID0+IGRpYWxvZy5pZCA9PT0gaWQpXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhdHRhY2hEaWFsb2dDb250ZW50PFQ+KFxyXG4gICAgICAgIGNvbXBvbmVudE9yVGVtcGxhdGVSZWY6IENvbXBvbmVudFR5cGU8VD4gfCBUZW1wbGF0ZVJlZjxUPixcclxuICAgICAgICBkaWFsb2dDb250YWluZXI6IERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudCxcclxuICAgICAgICBvdmVybGF5UmVmOiBPdmVybGF5UmVmLFxyXG4gICAgICAgIGNvbmZpZzogRGlhbG9nQ29uZmlnXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSBuZXcgRGlhbG9nUmVmPFQ+KFxyXG4gICAgICAgICAgICBvdmVybGF5UmVmLFxyXG4gICAgICAgICAgICBkaWFsb2dDb250YWluZXIsXHJcbiAgICAgICAgICAgIGNvbmZpZy5pZCxcclxuICAgICAgICAgICAgdGhpcy5sb2NhdGlvblxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgaWYgKGNvbmZpZy5oYXNCYWNrZHJvcCkge1xyXG4gICAgICAgICAgICBvdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFkaWFsb2dSZWYuZGlzYWJsZUNsb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nUmVmLmNsb3NlKClcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghKGNvbXBvbmVudE9yVGVtcGxhdGVSZWYgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5qZWN0b3IgPSB0aGlzLmNyZWF0ZUluamVjdG9yPFQ+KFxyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgZGlhbG9nUmVmLFxyXG4gICAgICAgICAgICAgICAgZGlhbG9nQ29udGFpbmVyXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgY29uc3QgY29udGVudFJlZiA9IGRpYWxvZ0NvbnRhaW5lci5hdHRhY2hDb21wb25lbnRQb3J0YWwoXHJcbiAgICAgICAgICAgICAgICBuZXcgQ29tcG9uZW50UG9ydGFsKGNvbXBvbmVudE9yVGVtcGxhdGVSZWYsIHVuZGVmaW5lZCwgaW5qZWN0b3IpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlID0gY29udGVudFJlZi5pbnN0YW5jZVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGlhbG9nUmVmXHJcbiAgICAgICAgICAgIC51cGRhdGVTaXplKGNvbmZpZy53aWR0aCwgY29uZmlnLmhlaWdodClcclxuICAgICAgICAgICAgLnVwZGF0ZVBvc2l0aW9uKGNvbmZpZy5wb3NpdGlvbilcclxuXHJcbiAgICAgICAgcmV0dXJuIGRpYWxvZ1JlZlxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlSW5qZWN0b3I8VD4oXHJcbiAgICAgICAgY29uZmlnOiBEaWFsb2dDb25maWcsXHJcbiAgICAgICAgZGlhbG9nUmVmOiBEaWFsb2dSZWY8VD4sXHJcbiAgICAgICAgZGlhbG9nQ29udGFpbmVyOiBEaWFsb2dDb250YWluZXJDb21wb25lbnRcclxuICAgICkge1xyXG4gICAgICAgIGNvbnN0IHVzZXJJbmplY3RvciA9XHJcbiAgICAgICAgICAgIGNvbmZpZyAmJlxyXG4gICAgICAgICAgICBjb25maWcudmlld0NvbnRhaW5lclJlZiAmJlxyXG4gICAgICAgICAgICBjb25maWcudmlld0NvbnRhaW5lclJlZi5pbmplY3RvclxyXG5cclxuICAgICAgICByZXR1cm4gSW5qZWN0b3IuY3JlYXRlKHtcclxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IERpYWxvZ1JlZiwgdXNlVmFsdWU6IGRpYWxvZ1JlZiB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBEaWFsb2dDb250YWluZXJDb21wb25lbnQsIHVzZVZhbHVlOiBkaWFsb2dDb250YWluZXIgfSxcclxuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTlhUX0RJQUxPR19EQVRBLCB1c2VWYWx1ZTogY29uZmlnLmRhdGEgfVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBwYXJlbnQ6IHVzZXJJbmplY3RvciB8fCB0aGlzLmluamVjdG9yXHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZU92ZXJsYXkoY29uZmlnOiBEaWFsb2dDb25maWcpOiBPdmVybGF5UmVmIHtcclxuICAgICAgICBjb25zdCBvdmVybGF5Q29uZmlnID0gdGhpcy5nZXRPdmVybGF5Q29uZmlnKGNvbmZpZylcclxuICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5LmNyZWF0ZShvdmVybGF5Q29uZmlnKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXR0YWNoRGlhbG9nQ29udGFpbmVyKFxyXG4gICAgICAgIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYsXHJcbiAgICAgICAgY29uZmlnOiBEaWFsb2dDb25maWdcclxuICAgICk6IERpYWxvZ0NvbnRhaW5lckNvbXBvbmVudCB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyUG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChcclxuICAgICAgICAgICAgRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50LFxyXG4gICAgICAgICAgICBjb25maWcudmlld0NvbnRhaW5lclJlZlxyXG4gICAgICAgIClcclxuICAgICAgICBjb25zdCBjb250YWluZXJSZWY6IENvbXBvbmVudFJlZjxcclxuICAgICAgICAgICAgRGlhbG9nQ29udGFpbmVyQ29tcG9uZW50XHJcbiAgICAgICAgPiA9IG92ZXJsYXlSZWYuYXR0YWNoKGNvbnRhaW5lclBvcnRhbClcclxuICAgICAgICBjb250YWluZXJSZWYuaW5zdGFuY2Uuc2V0Q29uZmlnKGNvbmZpZylcclxuXHJcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lclJlZi5pbnN0YW5jZVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0T3ZlcmxheUNvbmZpZyhkaWFsb2dDb25maWc6IERpYWxvZ0NvbmZpZyk6IE92ZXJsYXlDb25maWcge1xyXG4gICAgICAgIGNvbnN0IHN0YXRlID0gbmV3IE92ZXJsYXlDb25maWcoe1xyXG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKSxcclxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6XHJcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuc2Nyb2xsU3RyYXRlZ3kgfHwgdGhpcy5zY3JvbGxTdHJhdGVneSgpLFxyXG4gICAgICAgICAgICBwYW5lbENsYXNzOiBkaWFsb2dDb25maWcucGFuZUNsYXNzLFxyXG4gICAgICAgICAgICBoYXNCYWNrZHJvcDogZGlhbG9nQ29uZmlnLmhhc0JhY2tkcm9wLFxyXG4gICAgICAgICAgICBtaW5XaWR0aDogZGlhbG9nQ29uZmlnLm1pbldpZHRoLFxyXG4gICAgICAgICAgICBtaW5IZWlnaHQ6IGRpYWxvZ0NvbmZpZy5taW5IZWlnaHQsXHJcbiAgICAgICAgICAgIG1heFdpZHRoOiBkaWFsb2dDb25maWcubWF4V2lkdGgsXHJcbiAgICAgICAgICAgIG1heEhlaWdodDogZGlhbG9nQ29uZmlnLm1heEhlaWdodFxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGlmIChkaWFsb2dDb25maWcuYmFja2Ryb3BDbGFzcykge1xyXG4gICAgICAgICAgICBzdGF0ZS5iYWNrZHJvcENsYXNzID0gZGlhbG9nQ29uZmlnLmJhY2tkcm9wQ2xhc3NcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdGF0ZVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVtb3ZlT3BlbkRpYWxvZyhkaWFsb2dSZWY6IERpYWxvZ1JlZjxhbnk+KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9vcGVuRGlhbG9nc0F0VGhpc0xldmVsLmluZGV4T2YoZGlhbG9nUmVmKVxyXG5cclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5EaWFsb2dzLnNwbGljZShpbmRleCwgMSlcclxuICAgICAgICAgICAgLy8gSWYgYWxsIHRoZSBkaWFsb2dzIHdlcmUgY2xvc2VkLCByZW1vdmUvcmVzdG9yZSB0aGUgYGFyaWEtaGlkZGVuYFxyXG4gICAgICAgICAgICAvLyB0byBhIHRoZSBzaWJsaW5ncyBhbmQgZW1pdCB0byB0aGUgYGFmdGVyQWxsQ2xvc2VkYCBzdHJlYW0uXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5vcGVuRGlhbG9ncy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXJpYUhpZGRlbkVsZW1lbnRzLmZvckVhY2goKHByZXZpb3VzVmFsdWUsIGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCBwcmV2aW91c1ZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFyaWFIaWRkZW5FbGVtZW50cy5jbGVhcigpXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9hZnRlckFsbENsb3NlZC5uZXh0KClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhpZGVzIGFsbCBvZiB0aGUgY29udGVudCB0aGF0IGlzbid0IGFuIG92ZXJsYXkgZnJvbSBhc3Npc3RpdmUgdGVjaG5vbG9neS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoaWRlTm9uRGlhbG9nQ29udGVudEZyb21Bc3Npc3RpdmVUZWNobm9sb2d5KCkge1xyXG4gICAgICAgIGNvbnN0IG92ZXJsYXlDb250YWluZXIgPSB0aGlzLm92ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpXHJcblxyXG4gICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBvdmVybGF5IGNvbnRhaW5lciBpcyBhdHRhY2hlZCB0byB0aGUgRE9NLlxyXG4gICAgICAgIGlmIChvdmVybGF5Q29udGFpbmVyLnBhcmVudEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2libGluZ3MgPSBvdmVybGF5Q29udGFpbmVyLnBhcmVudEVsZW1lbnQuY2hpbGRyZW5cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBzaWJsaW5ncy5sZW5ndGggLSAxOyBpID4gLTE7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzW2ldXHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHNpYmxpbmcgIT09IG92ZXJsYXlDb250YWluZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICBzaWJsaW5nLm5vZGVOYW1lICE9PSAnU0NSSVBUJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHNpYmxpbmcubm9kZU5hbWUgIT09ICdTVFlMRScgJiZcclxuICAgICAgICAgICAgICAgICAgICAhc2libGluZy5oYXNBdHRyaWJ1dGUoJ2FyaWEtbGl2ZScpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFyaWFIaWRkZW5FbGVtZW50cy5zZXQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpYmxpbmcuZ2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicpXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIHNpYmxpbmcuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJylcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIEFwcGxpZXMgZGVmYXVsdCBvcHRpb25zIHRvIHRoZSBkaWFsb2cgY29uZmlnLlxyXG4gKlxyXG4gKiBAcGFyYW0gY29uZmlnIENvbmZpZyB0byBiZSBtb2RpZmllZC5cclxuICogQHBhcmFtIGRlZmF1bHRPcHRpb25zIERlZmF1bHQgY29uZmlnIHNldHRpbmdcclxuICogQHJldHVybnMgVGhlIG5ldyBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICogQGludGVybmFsXHJcbiAqL1xyXG5mdW5jdGlvbiBhcHBseUNvbmZpZ0RlZmF1bHRzKFxyXG4gICAgY29uZmlnPzogRGlhbG9nQ29uZmlnLFxyXG4gICAgZGVmYXVsdE9wdGlvbnM/OiBEaWFsb2dDb25maWdcclxuKTogRGlhbG9nQ29uZmlnIHtcclxuICAgIHJldHVybiBleHRlbmRPYmplY3QobmV3IERpYWxvZ0NvbmZpZygpLCBjb25maWcsIGRlZmF1bHRPcHRpb25zKVxyXG59XHJcbiJdfQ==