ng-hub-ui-modal 1.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.
@@ -0,0 +1,275 @@
1
+ import { DOCUMENT, NgIf } from '@angular/common';
2
+ import { Component, ElementRef, EventEmitter, inject, Input, NgZone, Output, ViewChild, ViewEncapsulation } from '@angular/core';
3
+ import { fromEvent, Subject, zip } from 'rxjs';
4
+ import { filter, switchMap, take, takeUntil, tap } from 'rxjs/operators';
5
+ import { ModalDismissReasons } from './modal-dismiss-reasons';
6
+ import { isString, reflow, getFocusableBoundaryElements, hubRunTransition } from 'ng-hub-ui-utils';
7
+ import * as i0 from "@angular/core";
8
+ export class HubModalWindow {
9
+ constructor() {
10
+ this._document = inject(DOCUMENT);
11
+ this._elRef = inject((ElementRef));
12
+ this._zone = inject(NgZone);
13
+ this._closed$ = new Subject();
14
+ this._elWithFocus = null; // element that is focused prior to modal opening
15
+ this.backdrop = true;
16
+ this.keyboard = true;
17
+ this.dismissEvent = new EventEmitter();
18
+ this.shown = new Subject();
19
+ this.hidden = new Subject();
20
+ }
21
+ get fullscreenClass() {
22
+ return this.fullscreen === true
23
+ ? ' modal-fullscreen'
24
+ : isString(this.fullscreen)
25
+ ? ` modal-fullscreen-${this.fullscreen}-down`
26
+ : '';
27
+ }
28
+ dismiss(reason) {
29
+ this.dismissEvent.emit(reason);
30
+ }
31
+ ngOnInit() {
32
+ this._elWithFocus = this._document.activeElement;
33
+ this._zone.onStable
34
+ .asObservable()
35
+ .pipe(take(1))
36
+ .subscribe(() => {
37
+ this._show();
38
+ });
39
+ }
40
+ ngOnDestroy() {
41
+ this._disableEventHandling();
42
+ }
43
+ hide() {
44
+ const { nativeElement } = this._elRef;
45
+ const context = {
46
+ animation: this.animation,
47
+ runningTransition: 'stop'
48
+ };
49
+ const windowTransition$ = hubRunTransition(this._zone, nativeElement, () => nativeElement.classList.remove('show'), context);
50
+ const dialogTransition$ = hubRunTransition(this._zone, this._dialogEl.nativeElement, () => { }, context);
51
+ const transitions$ = zip(windowTransition$, dialogTransition$);
52
+ transitions$.subscribe(() => {
53
+ this.hidden.next();
54
+ this.hidden.complete();
55
+ });
56
+ this._disableEventHandling();
57
+ this._restoreFocus();
58
+ return transitions$;
59
+ }
60
+ _show() {
61
+ const context = {
62
+ animation: this.animation,
63
+ runningTransition: 'continue'
64
+ };
65
+ const windowTransition$ = hubRunTransition(this._zone, this._elRef.nativeElement, (element, animation) => {
66
+ if (animation) {
67
+ reflow(element);
68
+ }
69
+ element.classList.add('show');
70
+ }, context);
71
+ const dialogTransition$ = hubRunTransition(this._zone, this._dialogEl.nativeElement, () => { }, context);
72
+ zip(windowTransition$, dialogTransition$).subscribe(() => {
73
+ this.shown.next();
74
+ this.shown.complete();
75
+ });
76
+ this._enableEventHandling();
77
+ this._setFocus();
78
+ }
79
+ _enableEventHandling() {
80
+ const { nativeElement } = this._elRef;
81
+ this._zone.runOutsideAngular(() => {
82
+ fromEvent(nativeElement, 'keydown')
83
+ .pipe(takeUntil(this._closed$), filter((e) => e.key === 'Escape'))
84
+ .subscribe((event) => {
85
+ if (this.keyboard) {
86
+ requestAnimationFrame(() => {
87
+ if (!event.defaultPrevented) {
88
+ this._zone.run(() => this.dismiss(ModalDismissReasons.ESC));
89
+ }
90
+ });
91
+ }
92
+ else if (this.backdrop === 'static') {
93
+ this._bumpBackdrop();
94
+ }
95
+ });
96
+ // We're listening to 'mousedown' and 'mouseup' to prevent modal from closing when pressing the mouse
97
+ // inside the modal dialog and releasing it outside
98
+ let preventClose = false;
99
+ fromEvent(this._dialogEl.nativeElement, 'mousedown')
100
+ .pipe(takeUntil(this._closed$), tap(() => (preventClose = false)), switchMap(() => fromEvent(nativeElement, 'mouseup').pipe(takeUntil(this._closed$), take(1))), filter(({ target }) => nativeElement === target))
101
+ .subscribe(() => {
102
+ preventClose = true;
103
+ });
104
+ // We're listening to 'click' to dismiss modal on modal window click, except when:
105
+ // 1. clicking on modal dialog itself
106
+ // 2. closing was prevented by mousedown/up handlers
107
+ // 3. clicking on scrollbar when the viewport is too small and modal doesn't fit (click is not triggered at all)
108
+ fromEvent(nativeElement, 'click')
109
+ .pipe(takeUntil(this._closed$))
110
+ .subscribe(({ target }) => {
111
+ if (nativeElement === target) {
112
+ if (this.backdrop === 'static') {
113
+ this._bumpBackdrop();
114
+ }
115
+ else if (this.backdrop === true && !preventClose) {
116
+ this._zone.run(() => this.dismiss(ModalDismissReasons.BACKDROP_CLICK));
117
+ }
118
+ }
119
+ preventClose = false;
120
+ });
121
+ });
122
+ }
123
+ _disableEventHandling() {
124
+ this._closed$.next();
125
+ }
126
+ _setFocus() {
127
+ const { nativeElement } = this._elRef;
128
+ if (!nativeElement.contains(document.activeElement)) {
129
+ const autoFocusable = nativeElement.querySelector(`[hubAutofocus]`);
130
+ const firstFocusable = getFocusableBoundaryElements(nativeElement)[0];
131
+ const elementToFocus = autoFocusable || firstFocusable || nativeElement;
132
+ elementToFocus.focus();
133
+ }
134
+ }
135
+ _restoreFocus() {
136
+ const body = this._document.body;
137
+ const elWithFocus = this._elWithFocus;
138
+ let elementToFocus;
139
+ if (elWithFocus && elWithFocus['focus'] && body.contains(elWithFocus)) {
140
+ elementToFocus = elWithFocus;
141
+ }
142
+ else {
143
+ elementToFocus = body;
144
+ }
145
+ this._zone.runOutsideAngular(() => {
146
+ setTimeout(() => elementToFocus.focus());
147
+ this._elWithFocus = null;
148
+ });
149
+ }
150
+ _bumpBackdrop() {
151
+ if (this.backdrop === 'static') {
152
+ hubRunTransition(this._zone, this._elRef.nativeElement, ({ classList }) => {
153
+ classList.add('modal-static');
154
+ return () => classList.remove('modal-static');
155
+ }, { animation: this.animation, runningTransition: 'continue' });
156
+ }
157
+ }
158
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubModalWindow, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
159
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: HubModalWindow, isStandalone: true, selector: "hub-modal-window", inputs: { animation: "animation", ariaLabelledBy: "ariaLabelledBy", ariaDescribedBy: "ariaDescribedBy", backdrop: "backdrop", centered: "centered", fullscreen: "fullscreen", keyboard: "keyboard", scrollable: "scrollable", size: "size", windowClass: "windowClass", modalDialogClass: "modalDialogClass" }, outputs: { dismissEvent: "dismiss" }, host: { attributes: { "role": "dialog", "tabindex": "-1" }, properties: { "class": "\"modal d-block\" + (windowClass ? \" \" + windowClass : \"\")", "class.fade": "animation", "attr.aria-modal": "true", "attr.aria-labelledby": "ariaLabelledBy", "attr.aria-describedby": "ariaDescribedBy" } }, viewQueries: [{ propertyName: "_dialogEl", first: true, predicate: ["dialog"], descendants: true, static: true }], ngImport: i0, template: `
160
+ <div
161
+ #dialog
162
+ [class]="
163
+ 'modal-dialog' +
164
+ (size ? ' modal-' + size : '') +
165
+ (centered ? ' modal-dialog-centered' : '') +
166
+ fullscreenClass +
167
+ (scrollable ? ' modal-dialog-scrollable' : '') +
168
+ (modalDialogClass ? ' ' + modalDialogClass : '')
169
+ "
170
+ role="document"
171
+ >
172
+ <div class="modal-content">
173
+ <ng-container *ngIf="singleContent; else multipleContent">
174
+ <ng-content></ng-content>
175
+ </ng-container>
176
+ <ng-template #multipleContent>
177
+ <div class="modal-header">
178
+ <ng-content />
179
+ <button
180
+ type="button"
181
+ class="btn-close"
182
+ data-bs-dismiss="modal"
183
+ aria-label="Close"
184
+ (click)="dismiss(null)"
185
+ ></button>
186
+ </div>
187
+ <div class="modal-body">
188
+ <ng-content />
189
+ </div>
190
+ <div class="modal-footer">
191
+ <ng-content />
192
+ </div>
193
+ </ng-template>
194
+ </div>
195
+ </div>
196
+ `, isInline: true, styles: ["hub-modal-window .component-host-scrollable{display:flex;flex-direction:column;overflow:hidden}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None }); }
197
+ }
198
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubModalWindow, decorators: [{
199
+ type: Component,
200
+ args: [{ selector: 'hub-modal-window', standalone: true, imports: [NgIf], host: {
201
+ '[class]': '"modal d-block" + (windowClass ? " " + windowClass : "")',
202
+ '[class.fade]': 'animation',
203
+ role: 'dialog',
204
+ tabindex: '-1',
205
+ '[attr.aria-modal]': 'true',
206
+ '[attr.aria-labelledby]': 'ariaLabelledBy',
207
+ '[attr.aria-describedby]': 'ariaDescribedBy'
208
+ }, template: `
209
+ <div
210
+ #dialog
211
+ [class]="
212
+ 'modal-dialog' +
213
+ (size ? ' modal-' + size : '') +
214
+ (centered ? ' modal-dialog-centered' : '') +
215
+ fullscreenClass +
216
+ (scrollable ? ' modal-dialog-scrollable' : '') +
217
+ (modalDialogClass ? ' ' + modalDialogClass : '')
218
+ "
219
+ role="document"
220
+ >
221
+ <div class="modal-content">
222
+ <ng-container *ngIf="singleContent; else multipleContent">
223
+ <ng-content></ng-content>
224
+ </ng-container>
225
+ <ng-template #multipleContent>
226
+ <div class="modal-header">
227
+ <ng-content />
228
+ <button
229
+ type="button"
230
+ class="btn-close"
231
+ data-bs-dismiss="modal"
232
+ aria-label="Close"
233
+ (click)="dismiss(null)"
234
+ ></button>
235
+ </div>
236
+ <div class="modal-body">
237
+ <ng-content />
238
+ </div>
239
+ <div class="modal-footer">
240
+ <ng-content />
241
+ </div>
242
+ </ng-template>
243
+ </div>
244
+ </div>
245
+ `, encapsulation: ViewEncapsulation.None, styles: ["hub-modal-window .component-host-scrollable{display:flex;flex-direction:column;overflow:hidden}\n"] }]
246
+ }], propDecorators: { _dialogEl: [{
247
+ type: ViewChild,
248
+ args: ['dialog', { static: true }]
249
+ }], animation: [{
250
+ type: Input
251
+ }], ariaLabelledBy: [{
252
+ type: Input
253
+ }], ariaDescribedBy: [{
254
+ type: Input
255
+ }], backdrop: [{
256
+ type: Input
257
+ }], centered: [{
258
+ type: Input
259
+ }], fullscreen: [{
260
+ type: Input
261
+ }], keyboard: [{
262
+ type: Input
263
+ }], scrollable: [{
264
+ type: Input
265
+ }], size: [{
266
+ type: Input
267
+ }], windowClass: [{
268
+ type: Input
269
+ }], modalDialogClass: [{
270
+ type: Input
271
+ }], dismissEvent: [{
272
+ type: Output,
273
+ args: ['dismiss']
274
+ }] } });
275
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtd2luZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbW9kYWwvc3JjL2xpYi9tb2RhbC13aW5kb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQ04sU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBR04sTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBYyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sNEJBQTRCLEVBQzVCLGdCQUFnQixFQUVoQixNQUFNLGlCQUFpQixDQUFDOztBQXdEekIsTUFBTSxPQUFPLGNBQWM7SUF0RDNCO1FBdURTLGNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IsV0FBTSxHQUFHLE1BQU0sQ0FBQyxDQUFBLFVBQXVCLENBQUEsQ0FBQyxDQUFDO1FBQ3pDLFVBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdkIsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDL0IsaUJBQVksR0FBbUIsSUFBSSxDQUFDLENBQUMsaURBQWlEO1FBUXJGLGFBQVEsR0FBcUIsSUFBSSxDQUFDO1FBR2xDLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFRTixpQkFBWSxHQUFHLElBQUks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QixDQUFDLElBQUk7OEJBWTdCLFNBQVM7c0JBRGhCLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHNUIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFJYSxZQUFZO3NCQUE5QixNQUFNO3VCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuXHRDb21wb25lbnQsXG5cdEVsZW1lbnRSZWYsXG5cdEV2ZW50RW1pdHRlcixcblx0aW5qZWN0LFxuXHRJbnB1dCxcblx0Tmdab25lLFxuXHRPbkRlc3Ryb3ksXG5cdE9uSW5pdCxcblx0T3V0cHV0LFxuXHRWaWV3Q2hpbGQsXG5cdFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCB6aXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgc3dpdGNoTWFwLCB0YWtlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1vZGFsRGlzbWlzc1JlYXNvbnMgfSBmcm9tICcuL21vZGFsLWRpc21pc3MtcmVhc29ucyc7XG5pbXBvcnQge1xuXHRpc1N0cmluZyxcblx0cmVmbG93LFxuXHRnZXRGb2N1c2FibGVCb3VuZGFyeUVsZW1lbnRzLFxuXHRodWJSdW5UcmFuc2l0aW9uLFxuXHRUcmFuc2l0aW9uT3B0aW9uc1xufSBmcm9tICduZy1odWItdWktdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdodWItbW9kYWwtd2luZG93Jyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0aW1wb3J0czogW05nSWZdLFxuXHRob3N0OiB7XG5cdFx0J1tjbGFzc10nOiAnXCJtb2RhbCBkLWJsb2NrXCIgKyAod2luZG93Q2xhc3MgPyBcIiBcIiArIHdpbmRvd0NsYXNzIDogXCJcIiknLFxuXHRcdCdbY2xhc3MuZmFkZV0nOiAnYW5pbWF0aW9uJyxcblx0XHRyb2xlOiAnZGlhbG9nJyxcblx0XHR0YWJpbmRleDogJy0xJyxcblx0XHQnW2F0dHIuYXJpYS1tb2RhbF0nOiAndHJ1ZScsXG5cdFx0J1thdHRyLmFyaWEtbGFiZWxsZWRieV0nOiAnYXJpYUxhYmVsbGVkQnknLFxuXHRcdCdbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XSc6ICdhcmlhRGVzY3JpYmVkQnknXG5cdH0sXG5cdHRlbXBsYXRlOiBgXG5cdFx0PGRpdlxuXHRcdFx0I2RpYWxvZ1xuXHRcdFx0W2NsYXNzXT1cIlxuXHRcdFx0XHQnbW9kYWwtZGlhbG9nJyArXG5cdFx0XHRcdChzaXplID8gJyBtb2RhbC0nICsgc2l6ZSA6ICcnKSArXG5cdFx0XHRcdChjZW50ZXJlZCA/ICcgbW9kYWwtZGlhbG9nLWNlbnRlcmVkJyA6ICcnKSArXG5cdFx0XHRcdGZ1bGxzY3JlZW5DbGFzcyArXG5cdFx0XHRcdChzY3JvbGxhYmxlID8gJyBtb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZScgOiAnJykgK1xuXHRcdFx0XHQobW9kYWxEaWFsb2dDbGFzcyA/ICcgJyArIG1vZGFsRGlhbG9nQ2xhc3MgOiAnJylcblx0XHRcdFwiXG5cdFx0XHRyb2xlPVwiZG9jdW1lbnRcIlxuXHRcdD5cblx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XG5cdFx0XHRcdDxuZy1jb250YWluZXIgKm5nSWY9XCJzaW5nbGVDb250ZW50OyBlbHNlIG11bHRpcGxlQ29udGVudFwiPlxuXHRcdFx0XHRcdDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblx0XHRcdFx0PC9uZy1jb250YWluZXI+XG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVDb250ZW50PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cblx0XHRcdFx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0XHRcdFx0XHQ8YnV0dG9uXG5cdFx0XHRcdFx0XHRcdHR5cGU9XCJidXR0b25cIlxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cImJ0bi1jbG9zZVwiXG5cdFx0XHRcdFx0XHRcdGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCJcblx0XHRcdFx0XHRcdFx0YXJpYS1sYWJlbD1cIkNsb3NlXCJcblx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImRpc21pc3MobnVsbClcIlxuXHRcdFx0XHRcdFx0PjwvYnV0dG9uPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG5cdFx0XHRcdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cblx0XHRcdFx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdDwvbmctdGVtcGxhdGU+XG5cdFx0XHQ8L2Rpdj5cblx0XHQ8L2Rpdj5cblx0YCxcblx0ZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcblx0c3R5bGVVcmw6ICcuL21vZGFsLnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIEh1Yk1vZGFsV2luZG93IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXHRwcml2YXRlIF9kb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cdHByaXZhdGUgX2VsUmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcblx0cHJpdmF0ZSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG5cdHByaXZhdGUgX2Nsb3NlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXHRwcml2YXRlIF9lbFdpdGhGb2N1czogRWxlbWVudCB8IG51bGwgPSBudWxsOyAvLyBlbGVtZW50IHRoYXQgaXMgZm9jdXNlZCBwcmlvciB0byBtb2RhbCBvcGVuaW5nXG5cblx0QFZpZXdDaGlsZCgnZGlhbG9nJywgeyBzdGF0aWM6IHRydWUgfSlcblx0cHJpdmF0ZSBfZGlhbG9nRWw6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG5cdEBJbnB1dCgpIGFuaW1hdGlvbjogYm9vbGVhbjtcblx0QElucHV0KCkgYXJpYUxhYmVsbGVkQnk6IHN0cmluZztcblx0QElucHV0KCkgYXJpYURlc2NyaWJlZEJ5OiBzdHJpbmc7XG5cdEBJbnB1dCgpIGJhY2tkcm9wOiBib29sZWFuIHwgc3RyaW5nID0gdHJ1ZTtcblx0QElucHV0KCkgY2VudGVyZWQ6IHN0cmluZztcblx0QElucHV0KCkgZnVsbHNjcmVlbjogc3RyaW5nIHwgYm9vbGVhbjtcblx0QElucHV0KCkga2V5Ym9hcmQgPSB0cnVlO1xuXHRASW5wdXQoKSBzY3JvbGxhYmxlOiBzdHJpbmc7XG5cdEBJbnB1dCgpIHNpemU6IHN0cmluZztcblx0QElucHV0KCkgd2luZG93Q2xhc3M6IHN0cmluZztcblx0QElucHV0KCkgbW9kYWxEaWFsb2dDbGFzczogc3RyaW5nO1xuXG5cdHNpbmdsZUNvbnRlbnQhOiBib29sZWFuO1xuXG5cdEBPdXRwdXQoJ2Rpc21pc3MnKSBkaXNtaXNzRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0c2hvd24gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXHRoaWRkZW4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG5cdGdldCBmdWxsc2NyZWVuQ2xhc3MoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5mdWxsc2NyZWVuID09PSB0cnVlXG5cdFx0XHQ/ICcgbW9kYWwtZnVsbHNjcmVlbidcblx0XHRcdDogaXNTdHJpbmcodGhpcy5mdWxsc2NyZWVuKVxuXHRcdFx0PyBgIG1vZGFsLWZ1bGxzY3JlZW4tJHt0aGlzLmZ1bGxzY3JlZW59LWRvd25gXG5cdFx0XHQ6ICcnO1xuXHR9XG5cblx0ZGlzbWlzcyhyZWFzb24pOiB2b2lkIHtcblx0XHR0aGlzLmRpc21pc3NFdmVudC5lbWl0KHJlYXNvbik7XG5cdH1cblxuXHRuZ09uSW5pdCgpIHtcblx0XHR0aGlzLl9lbFdpdGhGb2N1cyA9IHRoaXMuX2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdFx0dGhpcy5fem9uZS5vblN0YWJsZVxuXHRcdFx0LmFzT2JzZXJ2YWJsZSgpXG5cdFx0XHQucGlwZSh0YWtlKDEpKVxuXHRcdFx0LnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuX3Nob3coKTtcblx0XHRcdH0pO1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0dGhpcy5fZGlzYWJsZUV2ZW50SGFuZGxpbmcoKTtcblx0fVxuXG5cdGhpZGUoKTogT2JzZXJ2YWJsZTxhbnk+IHtcblx0XHRjb25zdCB7IG5hdGl2ZUVsZW1lbnQgfSA9IHRoaXMuX2VsUmVmO1xuXHRcdGNvbnN0IGNvbnRleHQ6IFRyYW5zaXRpb25PcHRpb25zPGFueT4gPSB7XG5cdFx0XHRhbmltYXRpb246IHRoaXMuYW5pbWF0aW9uLFxuXHRcdFx0cnVubmluZ1RyYW5zaXRpb246ICdzdG9wJ1xuXHRcdH07XG5cblx0XHRjb25zdCB3aW5kb3dUcmFuc2l0aW9uJCA9IGh1YlJ1blRyYW5zaXRpb24oXG5cdFx0XHR0aGlzLl96b25lLFxuXHRcdFx0bmF0aXZlRWxlbWVudCxcblx0XHRcdCgpID0+IG5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpLFxuXHRcdFx0Y29udGV4dFxuXHRcdCk7XG5cdFx0Y29uc3QgZGlhbG9nVHJhbnNpdGlvbiQgPSBodWJSdW5UcmFuc2l0aW9uKFxuXHRcdFx0dGhpcy5fem9uZSxcblx0XHRcdHRoaXMuX2RpYWxvZ0VsLm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHQoKSA9PiB7fSxcblx0XHRcdGNvbnRleHRcblx0XHQpO1xuXG5cdFx0Y29uc3QgdHJhbnNpdGlvbnMkID0gemlwKHdpbmRvd1RyYW5zaXRpb24kLCBkaWFsb2dUcmFuc2l0aW9uJCk7XG5cdFx0dHJhbnNpdGlvbnMkLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmhpZGRlbi5uZXh0KCk7XG5cdFx0XHR0aGlzLmhpZGRlbi5jb21wbGV0ZSgpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5fZGlzYWJsZUV2ZW50SGFuZGxpbmcoKTtcblx0XHR0aGlzLl9yZXN0b3JlRm9jdXMoKTtcblxuXHRcdHJldHVybiB0cmFuc2l0aW9ucyQ7XG5cdH1cblxuXHRwcml2YXRlIF9zaG93KCkge1xuXHRcdGNvbnN0IGNvbnRleHQ6IFRyYW5zaXRpb25PcHRpb25zPGFueT4gPSB7XG5cdFx0XHRhbmltYXRpb246IHRoaXMuYW5pbWF0aW9uLFxuXHRcdFx0cnVubmluZ1RyYW5zaXRpb246ICdjb250aW51ZSdcblx0XHR9O1xuXG5cdFx0Y29uc3Qgd2luZG93VHJhbnNpdGlvbiQgPSBodWJSdW5UcmFuc2l0aW9uKFxuXHRcdFx0dGhpcy5fem9uZSxcblx0XHRcdHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGFuaW1hdGlvbjogYm9vbGVhbikgPT4ge1xuXHRcdFx0XHRpZiAoYW5pbWF0aW9uKSB7XG5cdFx0XHRcdFx0cmVmbG93KGVsZW1lbnQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnc2hvdycpO1xuXHRcdFx0fSxcblx0XHRcdGNvbnRleHRcblx0XHQpO1xuXHRcdGNvbnN0IGRpYWxvZ1RyYW5zaXRpb24kID0gaHViUnVuVHJhbnNpdGlvbihcblx0XHRcdHRoaXMuX3pvbmUsXG5cdFx0XHR0aGlzLl9kaWFsb2dFbC5uYXRpdmVFbGVtZW50LFxuXHRcdFx0KCkgPT4ge30sXG5cdFx0XHRjb250ZXh0XG5cdFx0KTtcblxuXHRcdHppcCh3aW5kb3dUcmFuc2l0aW9uJCwgZGlhbG9nVHJhbnNpdGlvbiQpLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLnNob3duLm5leHQoKTtcblx0XHRcdHRoaXMuc2hvd24uY29tcGxldGUoKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuX2VuYWJsZUV2ZW50SGFuZGxpbmcoKTtcblx0XHR0aGlzLl9zZXRGb2N1cygpO1xuXHR9XG5cblx0cHJpdmF0ZSBfZW5hYmxlRXZlbnRIYW5kbGluZygpIHtcblx0XHRjb25zdCB7IG5hdGl2ZUVsZW1lbnQgfSA9IHRoaXMuX2VsUmVmO1xuXHRcdHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuXHRcdFx0ZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KG5hdGl2ZUVsZW1lbnQsICdrZXlkb3duJylcblx0XHRcdFx0LnBpcGUoXG5cdFx0XHRcdFx0dGFrZVVudGlsKHRoaXMuX2Nsb3NlZCQpLFxuXHRcdFx0XHRcdGZpbHRlcigoZSkgPT4gZS5rZXkgPT09ICdFc2NhcGUnKVxuXHRcdFx0XHQpXG5cdFx0XHRcdC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0aWYgKHRoaXMua2V5Ym9hcmQpIHtcblx0XHRcdFx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX3pvbmUucnVuKCgpID0+XG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmRpc21pc3MoTW9kYWxEaXNtaXNzUmVhc29ucy5FU0MpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuXHRcdFx0XHRcdFx0dGhpcy5fYnVtcEJhY2tkcm9wKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0Ly8gV2UncmUgbGlzdGVuaW5nIHRvICdtb3VzZWRvd24nIGFuZCAnbW91c2V1cCcgdG8gcHJldmVudCBtb2RhbCBmcm9tIGNsb3Npbmcgd2hlbiBwcmVzc2luZyB0aGUgbW91c2Vcblx0XHRcdC8vIGluc2lkZSB0aGUgbW9kYWwgZGlhbG9nIGFuZCByZWxlYXNpbmcgaXQgb3V0c2lkZVxuXHRcdFx0bGV0IHByZXZlbnRDbG9zZSA9IGZhbHNlO1xuXHRcdFx0ZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuX2RpYWxvZ0VsLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWRvd24nKVxuXHRcdFx0XHQucGlwZShcblx0XHRcdFx0XHR0YWtlVW50aWwodGhpcy5fY2xvc2VkJCksXG5cdFx0XHRcdFx0dGFwKCgpID0+IChwcmV2ZW50Q2xvc2UgPSBmYWxzZSkpLFxuXHRcdFx0XHRcdHN3aXRjaE1hcCgoKSA9PlxuXHRcdFx0XHRcdFx0ZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KG5hdGl2ZUVsZW1lbnQsICdtb3VzZXVwJykucGlwZShcblx0XHRcdFx0XHRcdFx0dGFrZVVudGlsKHRoaXMuX2Nsb3NlZCQpLFxuXHRcdFx0XHRcdFx0XHR0YWtlKDEpXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRmaWx0ZXIoKHsgdGFyZ2V0IH0pID0+IG5hdGl2ZUVsZW1lbnQgPT09IHRhcmdldClcblx0XHRcdFx0KVxuXHRcdFx0XHQuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdFx0XHRwcmV2ZW50Q2xvc2UgPSB0cnVlO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0Ly8gV2UncmUgbGlzdGVuaW5nIHRvICdjbGljaycgdG8gZGlzbWlzcyBtb2RhbCBvbiBtb2RhbCB3aW5kb3cgY2xpY2ssIGV4Y2VwdCB3aGVuOlxuXHRcdFx0Ly8gMS4gY2xpY2tpbmcgb24gbW9kYWwgZGlhbG9nIGl0c2VsZlxuXHRcdFx0Ly8gMi4gY2xvc2luZyB3YXMgcHJldmVudGVkIGJ5IG1vdXNlZG93bi91cCBoYW5kbGVyc1xuXHRcdFx0Ly8gMy4gY2xpY2tpbmcgb24gc2Nyb2xsYmFyIHdoZW4gdGhlIHZpZXdwb3J0IGlzIHRvbyBzbWFsbCBhbmQgbW9kYWwgZG9lc24ndCBmaXQgKGNsaWNrIGlzIG5vdCB0cmlnZ2VyZWQgYXQgYWxsKVxuXHRcdFx0ZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KG5hdGl2ZUVsZW1lbnQsICdjbGljaycpXG5cdFx0XHRcdC5waXBlKHRha2VVbnRpbCh0aGlzLl9jbG9zZWQkKSlcblx0XHRcdFx0LnN1YnNjcmliZSgoeyB0YXJnZXQgfSkgPT4ge1xuXHRcdFx0XHRcdGlmIChuYXRpdmVFbGVtZW50ID09PSB0YXJnZXQpIHtcblx0XHRcdFx0XHRcdGlmICh0aGlzLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9idW1wQmFja2Ryb3AoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5iYWNrZHJvcCA9PT0gdHJ1ZSAmJiAhcHJldmVudENsb3NlKSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuX3pvbmUucnVuKCgpID0+XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5kaXNtaXNzKE1vZGFsRGlzbWlzc1JlYXNvbnMuQkFDS0RST1BfQ0xJQ0spXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cHJldmVudENsb3NlID0gZmFsc2U7XG5cdFx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBfZGlzYWJsZUV2ZW50SGFuZGxpbmcoKSB7XG5cdFx0dGhpcy5fY2xvc2VkJC5uZXh0KCk7XG5cdH1cblxuXHRwcml2YXRlIF9zZXRGb2N1cygpIHtcblx0XHRjb25zdCB7IG5hdGl2ZUVsZW1lbnQgfSA9IHRoaXMuX2VsUmVmO1xuXHRcdGlmICghbmF0aXZlRWxlbWVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuXHRcdFx0Y29uc3QgYXV0b0ZvY3VzYWJsZSA9IG5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcihcblx0XHRcdFx0YFtodWJBdXRvZm9jdXNdYFxuXHRcdFx0KSBhcyBIVE1MRWxlbWVudDtcblx0XHRcdGNvbnN0IGZpcnN0Rm9jdXNhYmxlID1cblx0XHRcdFx0Z2V0Rm9jdXNhYmxlQm91bmRhcnlFbGVtZW50cyhuYXRpdmVFbGVtZW50KVswXTtcblxuXHRcdFx0Y29uc3QgZWxlbWVudFRvRm9jdXMgPVxuXHRcdFx0XHRhdXRvRm9jdXNhYmxlIHx8IGZpcnN0Rm9jdXNhYmxlIHx8IG5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgX3Jlc3RvcmVGb2N1cygpIHtcblx0XHRjb25zdCBib2R5ID0gdGhpcy5fZG9jdW1lbnQuYm9keTtcblx0XHRjb25zdCBlbFdpdGhGb2N1cyA9IHRoaXMuX2VsV2l0aEZvY3VzO1xuXG5cdFx0bGV0IGVsZW1lbnRUb0ZvY3VzO1xuXHRcdGlmIChlbFdpdGhGb2N1cyAmJiBlbFdpdGhGb2N1c1snZm9jdXMnXSAmJiBib2R5LmNvbnRhaW5zKGVsV2l0aEZvY3VzKSkge1xuXHRcdFx0ZWxlbWVudFRvRm9jdXMgPSBlbFdpdGhGb2N1cztcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZWxlbWVudFRvRm9jdXMgPSBib2R5O1xuXHRcdH1cblx0XHR0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4gZWxlbWVudFRvRm9jdXMuZm9jdXMoKSk7XG5cdFx0XHR0aGlzLl9lbFdpdGhGb2N1cyA9IG51bGw7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIF9idW1wQmFja2Ryb3AoKSB7XG5cdFx0aWYgKHRoaXMuYmFja2Ryb3AgPT09ICdzdGF0aWMnKSB7XG5cdFx0XHRodWJSdW5UcmFuc2l0aW9uKFxuXHRcdFx0XHR0aGlzLl96b25lLFxuXHRcdFx0XHR0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHQoeyBjbGFzc0xpc3QgfSkgPT4ge1xuXHRcdFx0XHRcdGNsYXNzTGlzdC5hZGQoJ21vZGFsLXN0YXRpYycpO1xuXHRcdFx0XHRcdHJldHVybiAoKSA9PiBjbGFzc0xpc3QucmVtb3ZlKCdtb2RhbC1zdGF0aWMnKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0eyBhbmltYXRpb246IHRoaXMuYW5pbWF0aW9uLCBydW5uaW5nVHJhbnNpdGlvbjogJ2NvbnRpbnVlJyB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxufVxuIl19
@@ -0,0 +1,59 @@
1
+ import { inject, Injectable, Injector } from '@angular/core';
2
+ import { HubModalConfig } from './modal-config';
3
+ import { HubModalStack } from './modal-stack';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * A service for opening modal windows.
7
+ *
8
+ * Creating a modal is straightforward: create a component or a template and pass it as an argument to
9
+ * the `.open()` method.
10
+ */
11
+ export class HubModal {
12
+ constructor() {
13
+ this._injector = inject(Injector);
14
+ this._modalStack = inject(HubModalStack);
15
+ this._config = inject(HubModalConfig);
16
+ }
17
+ /**
18
+ * Opens a new modal window with the specified content and supplied options.
19
+ *
20
+ * Content can be provided as a `TemplateRef` or a component type. If you pass a component type as content,
21
+ * then instances of those components can be injected with an instance of the `HubActiveModal` class. You can then
22
+ * use `HubActiveModal` methods to close / dismiss modals from "inside" of your component.
23
+ *
24
+ * Also see the [`HubModalOptions`](#/components/modal/api#HubModalOptions) for the list of supported options.
25
+ */
26
+ open(content, options = {}) {
27
+ const combinedOptions = { ...this._config, animation: this._config.animation, ...options };
28
+ return this._modalStack.open(this._injector, content, combinedOptions);
29
+ }
30
+ /**
31
+ * Returns an observable that holds the active modal instances.
32
+ */
33
+ get activeInstances() {
34
+ return this._modalStack.activeInstances;
35
+ }
36
+ /**
37
+ * Dismisses all currently displayed modal windows with the supplied reason.
38
+ *
39
+ * @since 3.1.0
40
+ */
41
+ dismissAll(reason) {
42
+ this._modalStack.dismissAll(reason);
43
+ }
44
+ /**
45
+ * Indicates if there are currently any open modal windows in the application.
46
+ *
47
+ * @since 3.3.0
48
+ */
49
+ hasOpenModals() {
50
+ return this._modalStack.hasOpenModals();
51
+ }
52
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubModal, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
53
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubModal, providedIn: 'root' }); }
54
+ }
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: HubModal, decorators: [{
56
+ type: Injectable,
57
+ args: [{ providedIn: 'root' }]
58
+ }] });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9tb2RhbC9zcmMvbGliL21vZGFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsY0FBYyxFQUFtQixNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTlDOzs7OztHQUtHO0FBRUgsTUFBTSxPQUFPLFFBQVE7SUFEckI7UUFFUyxjQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLGdCQUFXLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BDLFlBQU8sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7S0F3Q3pDO0lBdENBOzs7Ozs7OztPQVFHO0lBQ0gsSUFBSSxDQUFDLE9BQVksRUFBRSxVQUEyQixFQUFFO1FBQy9DLE1BQU0sZUFBZSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQzNGLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxlQUFlO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsTUFBWTtRQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGFBQWE7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekMsQ0FBQzs4R0ExQ1csUUFBUTtrSEFBUixRQUFRLGNBREssTUFBTTs7MkZBQ25CLFFBQVE7a0JBRHBCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBIdWJNb2RhbENvbmZpZywgSHViTW9kYWxPcHRpb25zIH0gZnJvbSAnLi9tb2RhbC1jb25maWcnO1xuaW1wb3J0IHsgSHViTW9kYWxSZWYgfSBmcm9tICcuL21vZGFsLXJlZic7XG5pbXBvcnQgeyBIdWJNb2RhbFN0YWNrIH0gZnJvbSAnLi9tb2RhbC1zdGFjayc7XG5cbi8qKlxuICogQSBzZXJ2aWNlIGZvciBvcGVuaW5nIG1vZGFsIHdpbmRvd3MuXG4gKlxuICogQ3JlYXRpbmcgYSBtb2RhbCBpcyBzdHJhaWdodGZvcndhcmQ6IGNyZWF0ZSBhIGNvbXBvbmVudCBvciBhIHRlbXBsYXRlIGFuZCBwYXNzIGl0IGFzIGFuIGFyZ3VtZW50IHRvXG4gKiB0aGUgYC5vcGVuKClgIG1ldGhvZC5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBIdWJNb2RhbCB7XG5cdHByaXZhdGUgX2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblx0cHJpdmF0ZSBfbW9kYWxTdGFjayA9IGluamVjdChIdWJNb2RhbFN0YWNrKTtcblx0cHJpdmF0ZSBfY29uZmlnID0gaW5qZWN0KEh1Yk1vZGFsQ29uZmlnKTtcblxuXHQvKipcblx0ICogT3BlbnMgYSBuZXcgbW9kYWwgd2luZG93IHdpdGggdGhlIHNwZWNpZmllZCBjb250ZW50IGFuZCBzdXBwbGllZCBvcHRpb25zLlxuXHQgKlxuXHQgKiBDb250ZW50IGNhbiBiZSBwcm92aWRlZCBhcyBhIGBUZW1wbGF0ZVJlZmAgb3IgYSBjb21wb25lbnQgdHlwZS4gSWYgeW91IHBhc3MgYSBjb21wb25lbnQgdHlwZSBhcyBjb250ZW50LFxuXHQgKiB0aGVuIGluc3RhbmNlcyBvZiB0aG9zZSBjb21wb25lbnRzIGNhbiBiZSBpbmplY3RlZCB3aXRoIGFuIGluc3RhbmNlIG9mIHRoZSBgSHViQWN0aXZlTW9kYWxgIGNsYXNzLiBZb3UgY2FuIHRoZW5cblx0ICogdXNlIGBIdWJBY3RpdmVNb2RhbGAgbWV0aG9kcyB0byBjbG9zZSAvIGRpc21pc3MgbW9kYWxzIGZyb20gXCJpbnNpZGVcIiBvZiB5b3VyIGNvbXBvbmVudC5cblx0ICpcblx0ICogQWxzbyBzZWUgdGhlIFtgSHViTW9kYWxPcHRpb25zYF0oIy9jb21wb25lbnRzL21vZGFsL2FwaSNIdWJNb2RhbE9wdGlvbnMpIGZvciB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgb3B0aW9ucy5cblx0ICovXG5cdG9wZW4oY29udGVudDogYW55LCBvcHRpb25zOiBIdWJNb2RhbE9wdGlvbnMgPSB7fSk6IEh1Yk1vZGFsUmVmIHtcblx0XHRjb25zdCBjb21iaW5lZE9wdGlvbnMgPSB7IC4uLnRoaXMuX2NvbmZpZywgYW5pbWF0aW9uOiB0aGlzLl9jb25maWcuYW5pbWF0aW9uLCAuLi5vcHRpb25zIH07XG5cdFx0cmV0dXJuIHRoaXMuX21vZGFsU3RhY2sub3Blbih0aGlzLl9pbmplY3RvciwgY29udGVudCwgY29tYmluZWRPcHRpb25zKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGFuIG9ic2VydmFibGUgdGhhdCBob2xkcyB0aGUgYWN0aXZlIG1vZGFsIGluc3RhbmNlcy5cblx0ICovXG5cdGdldCBhY3RpdmVJbnN0YW5jZXMoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX21vZGFsU3RhY2suYWN0aXZlSW5zdGFuY2VzO1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc21pc3NlcyBhbGwgY3VycmVudGx5IGRpc3BsYXllZCBtb2RhbCB3aW5kb3dzIHdpdGggdGhlIHN1cHBsaWVkIHJlYXNvbi5cblx0ICpcblx0ICogQHNpbmNlIDMuMS4wXG5cdCAqL1xuXHRkaXNtaXNzQWxsKHJlYXNvbj86IGFueSkge1xuXHRcdHRoaXMuX21vZGFsU3RhY2suZGlzbWlzc0FsbChyZWFzb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluZGljYXRlcyBpZiB0aGVyZSBhcmUgY3VycmVudGx5IGFueSBvcGVuIG1vZGFsIHdpbmRvd3MgaW4gdGhlIGFwcGxpY2F0aW9uLlxuXHQgKlxuXHQgKiBAc2luY2UgMy4zLjBcblx0ICovXG5cdGhhc09wZW5Nb2RhbHMoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuX21vZGFsU3RhY2suaGFzT3Blbk1vZGFscygpO1xuXHR9XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctaHViLXVpLW1vZGFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvbW9kYWwvc3JjL25nLWh1Yi11aS1tb2RhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
@@ -0,0 +1,5 @@
1
+ /*
2
+ * Public API Surface of modal
3
+ */
4
+ export * from './lib/modal';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL21vZGFsL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG1vZGFsXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kYWwnO1xuIl19