@villedemontreal/angular-ui 18.0.0 → 19.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/villedemontreal-angular-ui.mjs +421 -372
- package/fesm2022/villedemontreal-angular-ui.mjs.map +1 -1
- package/lib/dropdown-menu/dropdown-menu.component.d.ts +16 -9
- package/lib/modal/modal-container.d.ts +1 -1
- package/lib/modal/modal.d.ts +1 -1
- package/package.json +5 -7
- package/esm2022/lib/alert/alert.component.mjs +0 -169
- package/esm2022/lib/alert/index.mjs +0 -8
- package/esm2022/lib/alert/module.mjs +0 -41
- package/esm2022/lib/avatar/avatar.component.mjs +0 -102
- package/esm2022/lib/avatar/index.mjs +0 -8
- package/esm2022/lib/avatar/module.mjs +0 -24
- package/esm2022/lib/badge/badge.component.mjs +0 -27
- package/esm2022/lib/badge/index.mjs +0 -8
- package/esm2022/lib/badge/module.mjs +0 -24
- package/esm2022/lib/bao.module.mjs +0 -124
- package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +0 -36
- package/esm2022/lib/breadcrumb/index.mjs +0 -8
- package/esm2022/lib/breadcrumb/module.mjs +0 -25
- package/esm2022/lib/button/button.component.mjs +0 -100
- package/esm2022/lib/button/index.mjs +0 -8
- package/esm2022/lib/button/module.mjs +0 -25
- package/esm2022/lib/card/card.component.mjs +0 -94
- package/esm2022/lib/card/index.mjs +0 -8
- package/esm2022/lib/card/module.mjs +0 -38
- package/esm2022/lib/checkbox/checkbox-group.component.mjs +0 -58
- package/esm2022/lib/checkbox/checkbox.component.mjs +0 -304
- package/esm2022/lib/checkbox/index.mjs +0 -9
- package/esm2022/lib/checkbox/module.mjs +0 -35
- package/esm2022/lib/common-components/error-text/errorText.component.mjs +0 -16
- package/esm2022/lib/common-components/guiding-text/guidingText.component.mjs +0 -16
- package/esm2022/lib/common-components/index.mjs +0 -11
- package/esm2022/lib/common-components/label-text/labelText.component.mjs +0 -22
- package/esm2022/lib/common-components/module.mjs +0 -38
- package/esm2022/lib/common-components/title-text/titleText.component.mjs +0 -16
- package/esm2022/lib/core/breakpoints.mjs +0 -13
- package/esm2022/lib/core/colors.mjs +0 -25
- package/esm2022/lib/core/index.mjs +0 -8
- package/esm2022/lib/dropdown-menu/dropdown-menu.component.mjs +0 -573
- package/esm2022/lib/dropdown-menu/index.mjs +0 -8
- package/esm2022/lib/dropdown-menu/module.mjs +0 -47
- package/esm2022/lib/file/file-input.component.mjs +0 -320
- package/esm2022/lib/file/file-intl.mjs +0 -65
- package/esm2022/lib/file/file-preview.component.mjs +0 -96
- package/esm2022/lib/file/index.mjs +0 -10
- package/esm2022/lib/file/module.mjs +0 -56
- package/esm2022/lib/header-info/header-info.component.mjs +0 -104
- package/esm2022/lib/header-info/index.mjs +0 -8
- package/esm2022/lib/header-info/module.mjs +0 -41
- package/esm2022/lib/hyperlink/hyperlink.component.mjs +0 -84
- package/esm2022/lib/hyperlink/index.mjs +0 -8
- package/esm2022/lib/hyperlink/module.mjs +0 -24
- package/esm2022/lib/icon/bao-icon-registry.mjs +0 -47
- package/esm2022/lib/icon/icon.component.mjs +0 -158
- package/esm2022/lib/icon/icons-dictionary.mjs +0 -129
- package/esm2022/lib/icon/index.mjs +0 -8
- package/esm2022/lib/icon/module.mjs +0 -24
- package/esm2022/lib/list/index.mjs +0 -8
- package/esm2022/lib/list/list.component.mjs +0 -73
- package/esm2022/lib/list/module.mjs +0 -38
- package/esm2022/lib/message-bar/index.mjs +0 -8
- package/esm2022/lib/message-bar/message-bar.component.mjs +0 -87
- package/esm2022/lib/message-bar/module.mjs +0 -26
- package/esm2022/lib/modal/index.mjs +0 -12
- package/esm2022/lib/modal/modal-config.mjs +0 -73
- package/esm2022/lib/modal/modal-container.mjs +0 -240
- package/esm2022/lib/modal/modal-directives.mjs +0 -84
- package/esm2022/lib/modal/modal-ref.mjs +0 -226
- package/esm2022/lib/modal/modal.mjs +0 -344
- package/esm2022/lib/modal/module.mjs +0 -29
- package/esm2022/lib/pagination/index.mjs +0 -8
- package/esm2022/lib/pagination/module.mjs +0 -25
- package/esm2022/lib/pagination/pagination.component.mjs +0 -217
- package/esm2022/lib/radio/index.mjs +0 -9
- package/esm2022/lib/radio/module.mjs +0 -54
- package/esm2022/lib/radio/radio-group.component.mjs +0 -247
- package/esm2022/lib/radio/radio.component.mjs +0 -291
- package/esm2022/lib/shared/enum/display-mode.mjs +0 -2
- package/esm2022/lib/shared/index.mjs +0 -7
- package/esm2022/lib/snack-bar/index.mjs +0 -12
- package/esm2022/lib/snack-bar/module.mjs +0 -51
- package/esm2022/lib/snack-bar/simple-snack-bar.component.mjs +0 -92
- package/esm2022/lib/snack-bar/snack-bar-animations.mjs +0 -28
- package/esm2022/lib/snack-bar/snack-bar-config.mjs +0 -37
- package/esm2022/lib/snack-bar/snack-bar-container.mjs +0 -277
- package/esm2022/lib/snack-bar/snack-bar-ref.mjs +0 -75
- package/esm2022/lib/snack-bar/snack-bar.mjs +0 -251
- package/esm2022/lib/summary/index.mjs +0 -9
- package/esm2022/lib/summary/list-summary.component.mjs +0 -30
- package/esm2022/lib/summary/module.mjs +0 -37
- package/esm2022/lib/summary/summary.component.mjs +0 -93
- package/esm2022/lib/system-header/index.mjs +0 -8
- package/esm2022/lib/system-header/module.mjs +0 -33
- package/esm2022/lib/system-header/system-header.component.mjs +0 -130
- package/esm2022/lib/tabs/index.mjs +0 -8
- package/esm2022/lib/tabs/module.mjs +0 -35
- package/esm2022/lib/tabs/tabs.component.mjs +0 -295
- package/esm2022/lib/tag/index.mjs +0 -8
- package/esm2022/lib/tag/module.mjs +0 -24
- package/esm2022/lib/tag/tag.component.mjs +0 -75
- package/esm2022/public-api.mjs +0 -31
- package/esm2022/villedemontreal-angular-ui.mjs +0 -5
|
@@ -1,344 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2026 Ville de Montreal. All rights reserved.
|
|
3
|
-
* Licensed under the MIT license.
|
|
4
|
-
* See LICENSE file in the project root for full license information.
|
|
5
|
-
*/
|
|
6
|
-
/* eslint-disable @typescript-eslint/no-unsafe-return*/
|
|
7
|
-
import { OverlayConfig } from '@angular/cdk/overlay';
|
|
8
|
-
import { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';
|
|
9
|
-
import { Directive, Injectable, InjectionToken, Injector, Optional, SkipSelf, TemplateRef } from '@angular/core';
|
|
10
|
-
import { defer, startWith, Subject } from 'rxjs';
|
|
11
|
-
import { BaoModalInitialConfig, eModalDesktopWidthSize, eModalMobileWidthSize, eModalVariant, FILTER_MODAL_WIDTH } from './modal-config';
|
|
12
|
-
import { BaoModalContainer } from './modal-container';
|
|
13
|
-
import { BaoModalRef } from './modal-ref';
|
|
14
|
-
import * as i0 from "@angular/core";
|
|
15
|
-
import * as i1 from "@angular/cdk/overlay";
|
|
16
|
-
/** Injection token that can be used to access the data that was passed in to a modal. */
|
|
17
|
-
export const BAO_MODAL_DATA = new InjectionToken('BaoModalData');
|
|
18
|
-
export class BaoModalBase {
|
|
19
|
-
constructor(_overlay, _injector, _parentModal, _overlayContainer, _modalRefConstructor, _modalContainerType, _modalDataToken) {
|
|
20
|
-
this._overlay = _overlay;
|
|
21
|
-
this._injector = _injector;
|
|
22
|
-
this._parentModal = _parentModal;
|
|
23
|
-
this._overlayContainer = _overlayContainer;
|
|
24
|
-
this._modalRefConstructor = _modalRefConstructor;
|
|
25
|
-
this._modalContainerType = _modalContainerType;
|
|
26
|
-
this._modalDataToken = _modalDataToken;
|
|
27
|
-
this.afterAllClosed = defer(() => this.openModals.length
|
|
28
|
-
? this.getAfterAllClosed()
|
|
29
|
-
: this.getAfterAllClosed().pipe(startWith(undefined)));
|
|
30
|
-
this._openModalsAtThisLevel = [];
|
|
31
|
-
this._afterAllClosedAtThisLevel = new Subject();
|
|
32
|
-
this._afterOpenedAtThisLevel = new Subject();
|
|
33
|
-
this._ariaHiddenElements = new Map();
|
|
34
|
-
this._modalAnimatingOpen = false;
|
|
35
|
-
}
|
|
36
|
-
/** Keeps track of the currently-open modals. */
|
|
37
|
-
get openModals() {
|
|
38
|
-
return this._parentModal
|
|
39
|
-
? this._parentModal.openModals
|
|
40
|
-
: this._openModalsAtThisLevel;
|
|
41
|
-
}
|
|
42
|
-
/** Stream that emits when a modal has been opened. */
|
|
43
|
-
get afterOpened() {
|
|
44
|
-
// Maybe typescript version difference
|
|
45
|
-
return this._parentModal
|
|
46
|
-
? this._parentModal.afterOpened
|
|
47
|
-
: this._afterOpenedAtThisLevel;
|
|
48
|
-
}
|
|
49
|
-
getAfterAllClosed() {
|
|
50
|
-
const parent = this._parentModal;
|
|
51
|
-
return parent
|
|
52
|
-
? parent.getAfterAllClosed()
|
|
53
|
-
: this._afterAllClosedAtThisLevel;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Opens a modal modal containing the given template.
|
|
57
|
-
*/
|
|
58
|
-
open(componentOrTemplateRef, config) {
|
|
59
|
-
const conf = this._applyConfigDefaults(config, new BaoModalInitialConfig());
|
|
60
|
-
// If there is a modal that is currently animating open, return the MatmodalRef of that modal
|
|
61
|
-
if (this._modalAnimatingOpen) {
|
|
62
|
-
return this._lastModalRef;
|
|
63
|
-
}
|
|
64
|
-
const overlayRef = this._createOverlay(conf);
|
|
65
|
-
const modalContainer = this._attachModalContainer(overlayRef, conf);
|
|
66
|
-
const modalRef = this._attachModalContent(componentOrTemplateRef, modalContainer, overlayRef, conf);
|
|
67
|
-
this._lastModalRef = modalRef;
|
|
68
|
-
// If this is the first modal that we're opening, hide all the non-overlay content.
|
|
69
|
-
if (!this.openModals.length) {
|
|
70
|
-
this._hideNonModalContentFromAssistiveTechnology();
|
|
71
|
-
}
|
|
72
|
-
this.openModals.push(modalRef);
|
|
73
|
-
modalRef.afterClosed().subscribe(() => this._removeOpenModal(modalRef));
|
|
74
|
-
this.afterOpened.next(modalRef);
|
|
75
|
-
// Notify the modal container that the content has been attached.
|
|
76
|
-
modalContainer._initializeWithAttachedContent();
|
|
77
|
-
return modalRef;
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Closes all of the currently-open modals.
|
|
81
|
-
*/
|
|
82
|
-
closeAll() {
|
|
83
|
-
this._closeModals(this.openModals);
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Finds an open modal by its id.
|
|
87
|
-
*/
|
|
88
|
-
getModalById(id) {
|
|
89
|
-
return this.openModals.find(modal => modal.id === id);
|
|
90
|
-
}
|
|
91
|
-
ngOnDestroy() {
|
|
92
|
-
// Only close the modals at this level on destroy
|
|
93
|
-
// since the parent service may still be active.
|
|
94
|
-
this._closeModals(this._openModalsAtThisLevel);
|
|
95
|
-
this._afterAllClosedAtThisLevel.complete();
|
|
96
|
-
this._afterOpenedAtThisLevel.complete();
|
|
97
|
-
// Clean up any subscriptions to modals that never finished opening.
|
|
98
|
-
if (this._animationStateSubscriptions) {
|
|
99
|
-
this._animationStateSubscriptions.unsubscribe();
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Creates the overlay into which the modal will be loaded.
|
|
104
|
-
*/
|
|
105
|
-
_createOverlay(config) {
|
|
106
|
-
const overlayConfig = this._getOverlayConfig(config);
|
|
107
|
-
return this._overlay.create(overlayConfig);
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Creates an overlay config from a modal config.
|
|
111
|
-
*/
|
|
112
|
-
_getOverlayConfig(config) {
|
|
113
|
-
let positionStrategy;
|
|
114
|
-
let hasBackdrop = config.hasBackdrop;
|
|
115
|
-
let backdropClass = config.backdropClass;
|
|
116
|
-
if (config.variant === eModalVariant.FILTER && config.triggerElement) {
|
|
117
|
-
// Use connected positioning for filter variant
|
|
118
|
-
positionStrategy = this._overlay
|
|
119
|
-
.position()
|
|
120
|
-
.flexibleConnectedTo(config.triggerElement.nativeElement)
|
|
121
|
-
.withLockedPosition()
|
|
122
|
-
.withGrowAfterOpen()
|
|
123
|
-
.withPositions([
|
|
124
|
-
{
|
|
125
|
-
// top-left of the overlay is connected to bottom-left of the origin;
|
|
126
|
-
originX: 'start',
|
|
127
|
-
originY: 'bottom',
|
|
128
|
-
overlayX: 'start',
|
|
129
|
-
overlayY: 'top'
|
|
130
|
-
},
|
|
131
|
-
{
|
|
132
|
-
// bottom-left of the overlay is connected to top-left of the origin;
|
|
133
|
-
originX: 'start',
|
|
134
|
-
originY: 'top',
|
|
135
|
-
overlayX: 'start',
|
|
136
|
-
overlayY: 'bottom'
|
|
137
|
-
},
|
|
138
|
-
{
|
|
139
|
-
// top-right of the overlay is connected to bottom-right of the origin;
|
|
140
|
-
originX: 'end',
|
|
141
|
-
originY: 'bottom',
|
|
142
|
-
overlayX: 'end',
|
|
143
|
-
overlayY: 'top'
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
// bottom-right of the overlay is connected to top-right of the origin;
|
|
147
|
-
originX: 'end',
|
|
148
|
-
originY: 'top',
|
|
149
|
-
overlayX: 'end',
|
|
150
|
-
overlayY: 'bottom'
|
|
151
|
-
}
|
|
152
|
-
]);
|
|
153
|
-
// Filter variant should have transparent backdrop
|
|
154
|
-
hasBackdrop = true;
|
|
155
|
-
backdropClass = 'bao-overlay-transparent-backdrop';
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
// Use global positioning for default variant
|
|
159
|
-
positionStrategy = this._overlay.position().global();
|
|
160
|
-
}
|
|
161
|
-
const state = new OverlayConfig({
|
|
162
|
-
positionStrategy,
|
|
163
|
-
scrollStrategy: this._overlay.scrollStrategies.block(),
|
|
164
|
-
panelClass: config.panelClass,
|
|
165
|
-
hasBackdrop,
|
|
166
|
-
disposeOnNavigation: config.closeOnNavigation,
|
|
167
|
-
// Set dimensions for filter variant in OverlayConfig instead of via updateSize()
|
|
168
|
-
width: config.variant === eModalVariant.FILTER
|
|
169
|
-
? FILTER_MODAL_WIDTH
|
|
170
|
-
: config.width,
|
|
171
|
-
minWidth: config.minWidth,
|
|
172
|
-
minHeight: config.minHeight,
|
|
173
|
-
maxWidth: config.maxWidth,
|
|
174
|
-
maxHeight: config.maxHeight
|
|
175
|
-
});
|
|
176
|
-
if (backdropClass) {
|
|
177
|
-
state.backdropClass = backdropClass;
|
|
178
|
-
}
|
|
179
|
-
return state;
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Attaches a modal container to a modal's already-created overlay.
|
|
183
|
-
*/
|
|
184
|
-
_attachModalContainer(overlay, config) {
|
|
185
|
-
const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
|
|
186
|
-
const injector = Injector.create({
|
|
187
|
-
parent: userInjector || this._injector,
|
|
188
|
-
providers: [{ provide: BaoModalInitialConfig, useValue: config }]
|
|
189
|
-
});
|
|
190
|
-
const containerPortal = new ComponentPortal(this._modalContainerType, config.viewContainerRef, injector);
|
|
191
|
-
const containerRef = overlay.attach(containerPortal);
|
|
192
|
-
containerRef.instance._startOpenAnimation();
|
|
193
|
-
return containerRef.instance;
|
|
194
|
-
}
|
|
195
|
-
/**
|
|
196
|
-
* Attaches the user-provided component to the already-created modal container.
|
|
197
|
-
*/
|
|
198
|
-
_attachModalContent(componentOrTemplateRef, modalContainer, overlayRef, config) {
|
|
199
|
-
// Create a reference to the modal we're creating in order to give the user a handle
|
|
200
|
-
// to modify and close it.
|
|
201
|
-
const modalRef = new this._modalRefConstructor(overlayRef, modalContainer, config.id);
|
|
202
|
-
if (componentOrTemplateRef instanceof TemplateRef) {
|
|
203
|
-
modalContainer.attachTemplatePortal(new TemplatePortal(componentOrTemplateRef, null, {
|
|
204
|
-
$implicit: config.data,
|
|
205
|
-
modalRef
|
|
206
|
-
}));
|
|
207
|
-
}
|
|
208
|
-
else {
|
|
209
|
-
const injector = this._createInjector(config, modalRef, modalContainer);
|
|
210
|
-
const contentRef = modalContainer.attachComponentPortal(new ComponentPortal(componentOrTemplateRef, config.viewContainerRef, injector));
|
|
211
|
-
modalRef.componentInstance = contentRef.instance;
|
|
212
|
-
}
|
|
213
|
-
// Only update size and position for global variant
|
|
214
|
-
// Filter variant dimensions are set in OverlayConfig and positioning is handled by FlexibleConnectedPositionStrategy
|
|
215
|
-
if (config.variant !== eModalVariant.FILTER) {
|
|
216
|
-
modalRef
|
|
217
|
-
.updateSize(config.width, config.height)
|
|
218
|
-
.updatePosition(config.position);
|
|
219
|
-
}
|
|
220
|
-
return modalRef;
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Creates a custom injector to be used inside the modal. This allows a component loaded inside
|
|
224
|
-
* of a modal to close itself and, optionally, to return a value.
|
|
225
|
-
*/
|
|
226
|
-
_createInjector(config, modalRef, modalContainer) {
|
|
227
|
-
const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
|
|
228
|
-
// The modal container should be provided as the modal container and the modal's
|
|
229
|
-
// content are created out of the same `ViewContainerRef` and as such, are siblings
|
|
230
|
-
// for injector purposes. To allow the hierarchy that is expected, the modal
|
|
231
|
-
// container is explicitly provided in the injector.
|
|
232
|
-
const providers = [
|
|
233
|
-
{ provide: this._modalContainerType, useValue: modalContainer },
|
|
234
|
-
{ provide: this._modalDataToken, useValue: config.data },
|
|
235
|
-
{ provide: this._modalRefConstructor, useValue: modalRef }
|
|
236
|
-
];
|
|
237
|
-
return Injector.create({
|
|
238
|
-
parent: userInjector || this._injector,
|
|
239
|
-
providers
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Removes a modal from the array of open modals.
|
|
244
|
-
*/
|
|
245
|
-
_removeOpenModal(modalRef) {
|
|
246
|
-
const index = this.openModals.indexOf(modalRef);
|
|
247
|
-
if (index > -1) {
|
|
248
|
-
this.openModals.splice(index, 1);
|
|
249
|
-
// If all the modals were closed, remove/restore the `aria-hidden`
|
|
250
|
-
// to a the siblings and emit to the `afterAllClosed` stream.
|
|
251
|
-
if (!this.openModals.length) {
|
|
252
|
-
this._ariaHiddenElements.forEach((previousValue, element) => {
|
|
253
|
-
if (previousValue) {
|
|
254
|
-
element.setAttribute('aria-hidden', previousValue);
|
|
255
|
-
}
|
|
256
|
-
else {
|
|
257
|
-
element.removeAttribute('aria-hidden');
|
|
258
|
-
}
|
|
259
|
-
});
|
|
260
|
-
this._ariaHiddenElements.clear();
|
|
261
|
-
this.getAfterAllClosed().next();
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
/**
|
|
266
|
-
* Hides all of the content that isn't an overlay from assistive technology.
|
|
267
|
-
*/
|
|
268
|
-
_hideNonModalContentFromAssistiveTechnology() {
|
|
269
|
-
const overlayContainer = this._overlayContainer.getContainerElement();
|
|
270
|
-
// Ensure that the overlay container is attached to the DOM.
|
|
271
|
-
if (overlayContainer.parentElement) {
|
|
272
|
-
const siblings = overlayContainer.parentElement.children;
|
|
273
|
-
for (let i = siblings.length - 1; i > -1; i--) {
|
|
274
|
-
const sibling = siblings[i];
|
|
275
|
-
if (sibling !== overlayContainer &&
|
|
276
|
-
sibling.nodeName !== 'SCRIPT' &&
|
|
277
|
-
sibling.nodeName !== 'STYLE' &&
|
|
278
|
-
!sibling.hasAttribute('aria-live')) {
|
|
279
|
-
this._ariaHiddenElements.set(sibling, sibling.getAttribute('aria-hidden'));
|
|
280
|
-
sibling.setAttribute('aria-hidden', 'true');
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
/** Closes all of the modals in an array. */
|
|
286
|
-
_closeModals(modals) {
|
|
287
|
-
let i = modals.length;
|
|
288
|
-
while (i--) {
|
|
289
|
-
modals[i].close();
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
* Applies default options to the modal config.
|
|
294
|
-
*/
|
|
295
|
-
_applyConfigDefaults(config, defaultOptions) {
|
|
296
|
-
const desktopClass = config?.size || eModalDesktopWidthSize.SMALL;
|
|
297
|
-
const mobilClass = config?.mobileSize || eModalMobileWidthSize.FULL;
|
|
298
|
-
const data = config?.data || null;
|
|
299
|
-
const ariaLabelledBy = config?.ariaLabelledBy || null;
|
|
300
|
-
const variant = config?.variant || eModalVariant.GLOBAL;
|
|
301
|
-
const triggerElement = config?.triggerElement;
|
|
302
|
-
// Add variant class for styling
|
|
303
|
-
const variantClass = variant === eModalVariant.FILTER
|
|
304
|
-
? 'bao-modal-filter'
|
|
305
|
-
: 'bao-modal-global';
|
|
306
|
-
// Filter variant does not have responsive css classes
|
|
307
|
-
const panelClass = variant === eModalVariant.FILTER
|
|
308
|
-
? [variantClass]
|
|
309
|
-
: [desktopClass, mobilClass, variantClass];
|
|
310
|
-
return {
|
|
311
|
-
...defaultOptions,
|
|
312
|
-
...{
|
|
313
|
-
panelClass,
|
|
314
|
-
ariaLabelledBy,
|
|
315
|
-
data,
|
|
316
|
-
variant,
|
|
317
|
-
triggerElement
|
|
318
|
-
}
|
|
319
|
-
};
|
|
320
|
-
}
|
|
321
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoModalBase, deps: "invalid", target: i0.ɵɵFactoryTarget.Directive }); }
|
|
322
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: BaoModalBase, ngImport: i0 }); }
|
|
323
|
-
}
|
|
324
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoModalBase, decorators: [{
|
|
325
|
-
type: Directive
|
|
326
|
-
}], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.Injector }, { type: undefined }, { type: i1.OverlayContainer }, { type: i0.Type }, { type: i0.Type }, { type: i0.InjectionToken }] });
|
|
327
|
-
/**
|
|
328
|
-
* Service to open modal.
|
|
329
|
-
*/
|
|
330
|
-
export class BaoModal extends BaoModalBase {
|
|
331
|
-
constructor(overlay, injector, parentModal, overlayContainer) {
|
|
332
|
-
super(overlay, injector, parentModal, overlayContainer, BaoModalRef, BaoModalContainer, BAO_MODAL_DATA);
|
|
333
|
-
}
|
|
334
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoModal, deps: [{ token: i1.Overlay }, { token: i0.Injector }, { token: BaoModal, optional: true, skipSelf: true }, { token: i1.OverlayContainer }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
335
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoModal }); }
|
|
336
|
-
}
|
|
337
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoModal, decorators: [{
|
|
338
|
-
type: Injectable
|
|
339
|
-
}], ctorParameters: () => [{ type: i1.Overlay }, { type: i0.Injector }, { type: BaoModal, decorators: [{
|
|
340
|
-
type: Optional
|
|
341
|
-
}, {
|
|
342
|
-
type: SkipSelf
|
|
343
|
-
}] }, { type: i1.OverlayContainer }] });
|
|
344
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXVpL3NyYy9saWIvbW9kYWwvbW9kYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUVILHVEQUF1RDtBQUN2RCxPQUFPLEVBSUwsYUFBYSxFQUdkLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixjQUFjLEVBQ2QsUUFBUSxFQUVSLFFBQVEsRUFDUixRQUFRLEVBRVIsV0FBVyxFQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxLQUFLLEVBQWMsU0FBUyxFQUFFLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUVMLHFCQUFxQixFQUNyQixzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLGFBQWEsRUFDYixrQkFBa0IsRUFDbkIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQTBCLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7O0FBRTFDLHlGQUF5RjtBQUN6RixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQVUsY0FBYyxDQUFDLENBQUM7QUFHMUUsTUFBTSxPQUFnQixZQUFZO0lBbUJoQyxZQUNVLFFBQWlCLEVBQ2pCLFNBQW1CLEVBQ25CLFlBQXlDLEVBQ3pDLGlCQUFtQyxFQUNuQyxvQkFBZ0QsRUFDaEQsbUJBQTRCLEVBQzVCLGVBQXdDO1FBTnhDLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixpQkFBWSxHQUFaLFlBQVksQ0FBNkI7UUFDekMsc0JBQWlCLEdBQWpCLGlC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QWM7WUFDakIsR0FBRztnQkFDRCxVQUFVO2dCQUNWLGNBQWM7Z0JBQ2QsSUFBSTtnQkFDSixPQUFPO2dCQUNQLGNBQWM7YUFDZjtTQUNGLENBQUM7SUFDSixDQUFDOytHQTlZbUIsWUFBWTttR0FBWixZQUFZOzs0RkFBWixZQUFZO2tCQURqQyxTQUFTOztBQWtaVjs7R0FFRztBQUVILE1BQU0sT0FBTyxRQUFTLFNBQVEsWUFBK0I7SUFDM0QsWUFDRSxPQUFnQixFQUNoQixRQUFrQixFQUNNLFdBQXFCLEVBQzdDLGdCQUFrQztRQUVsQyxLQUFLLENBQ0gsT0FBTyxFQUNQLFFBQVEsRUFDUixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsY0FBYyxDQUNmLENBQUM7SUFDSixDQUFDOytHQWhCVSxRQUFRO21IQUFSLFFBQVE7OzRGQUFSLFFBQVE7a0JBRHBCLFVBQVU7OzBCQUtOLFFBQVE7OzBCQUFJLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDI2IFZpbGxlIGRlIE1vbnRyZWFsLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcHJvamVjdCByb290IGZvciBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1yZXR1cm4qL1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50VHlwZSxcbiAgQ29ubmVjdGVkUG9zaXRpb24sXG4gIE92ZXJsYXksXG4gIE92ZXJsYXlDb25maWcsXG4gIE92ZXJsYXlDb250YWluZXIsXG4gIE92ZXJsYXlSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsLCBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBJbmplY3RhYmxlLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5qZWN0b3IsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIFNraXBTZWxmLFxuICBTdGF0aWNQcm92aWRlcixcbiAgVGVtcGxhdGVSZWYsXG4gIFR5cGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZWZlciwgT2JzZXJ2YWJsZSwgc3RhcnRXaXRoLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEJhb01vZGFsQ29uZmlnLFxuICBCYW9Nb2RhbEluaXRpYWxDb25maWcsXG4gIGVNb2RhbERlc2t0b3BXaWR0aFNpemUsXG4gIGVNb2RhbE1vYmlsZVdpZHRoU2l6ZSxcbiAgZU1vZGFsVmFyaWFudCxcbiAgRklMVEVSX01PREFMX1dJRFRIXG59IGZyb20gJy4vbW9kYWwtY29uZmlnJztcbmltcG9ydCB7IF9CYW9Nb2RhbENvbnRhaW5lckJhc2UsIEJhb01vZGFsQ29udGFpbmVyIH0gZnJvbSAnLi9tb2RhbC1jb250YWluZXInO1xuaW1wb3J0IHsgQmFvTW9kYWxSZWYgfSBmcm9tICcuL21vZGFsLXJlZic7XG5cbi8qKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCB0byBhY2Nlc3MgdGhlIGRhdGEgdGhhdCB3YXMgcGFzc2VkIGluIHRvIGEgbW9kYWwuICovXG5leHBvcnQgY29uc3QgQkFPX01PREFMX0RBVEEgPSBuZXcgSW5qZWN0aW9uVG9rZW48dW5rbm93bj4oJ0Jhb01vZGFsRGF0YScpO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYW9Nb2RhbEJhc2U8QyBleHRlbmRzIF9CYW9Nb2RhbENvbnRhaW5lckJhc2U+XG4gIGltcGxlbWVudHMgT25EZXN0cm95XG57XG4gIHB1YmxpYyByZWFkb25seSBhZnRlckFsbENsb3NlZDogT2JzZXJ2YWJsZTx2b2lkPiA9IGRlZmVyKCgpID0+XG4gICAgdGhpcy5vcGVuTW9kYWxzLmxlbmd0aFxuICAgICAgPyB0aGlzLmdldEFmdGVyQWxsQ2xvc2VkKClcbiAgICAgIDogdGhpcy5nZXRBZnRlckFsbENsb3NlZCgpLnBpcGUoc3RhcnRXaXRoKHVuZGVmaW5lZCkpXG4gICk7XG5cbiAgcHJpdmF0ZSBfb3Blbk1vZGFsc0F0VGhpc0xldmVsOiBCYW9Nb2RhbFJlZjx1bmtub3duPltdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWwgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hZnRlck9wZW5lZEF0VGhpc0xldmVsID0gbmV3IFN1YmplY3Q8XG4gICAgQmFvTW9kYWxSZWY8dW5rbm93bj5cbiAgPigpO1xuICBwcml2YXRlIF9hcmlhSGlkZGVuRWxlbWVudHMgPSBuZXcgTWFwPEVsZW1lbnQsIHN0cmluZyB8IG51bGw+KCk7XG4gIHByaXZhdGUgX21vZGFsQW5pbWF0aW5nT3BlbiA9IGZhbHNlO1xuICBwcml2YXRlIF9hbmltYXRpb25TdGF0ZVN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfbGFzdE1vZGFsUmVmOiBCYW9Nb2RhbFJlZjx1bmtub3duPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9vdmVybGF5OiBPdmVybGF5LFxuICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIF9wYXJlbnRNb2RhbDogQmFvTW9kYWxCYXNlPEM+IHwgdW5kZWZpbmVkLFxuICAgIHByaXZhdGUgX292ZXJsYXlDb250YWluZXI6IE92ZXJsYXlDb250YWluZXIsXG4gICAgcHJpdmF0ZSBfbW9kYWxSZWZDb25zdHJ1Y3RvcjogVHlwZTxCYW9Nb2RhbFJlZjx1bmtub3duPj4sXG4gICAgcHJpdmF0ZSBfbW9kYWxDb250YWluZXJUeXBlOiBUeXBlPEM+LFxuICAgIHByaXZhdGUgX21vZGFsRGF0YVRva2VuOiBJbmplY3Rpb25Ub2tlbjx1bmtub3duPlxuICApIHt9XG5cbiAgLyoqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50bHktb3BlbiBtb2RhbHMuICovXG4gIHB1YmxpYyBnZXQgb3Blbk1vZGFscygpOiBCYW9Nb2RhbFJlZjx1bmtub3duPltdIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50TW9kYWxcbiAgICAgID8gdGhpcy5fcGFyZW50TW9kYWwub3Blbk1vZGFsc1xuICAgICAgOiB0aGlzLl9vcGVuTW9kYWxzQXRUaGlzTGV2ZWw7XG4gIH1cblxuICAvKiogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbiBhIG1vZGFsIGhhcyBiZWVuIG9wZW5lZC4gKi9cbiAgcHVibGljIGdldCBhZnRlck9wZW5lZCgpOiBTdWJqZWN0PEJhb01vZGFsUmVmPHVua25vd24+PiB7XG4gICAgLy8gTWF5YmUgdHlwZXNjcmlwdCB2ZXJzaW9uIGRpZmZlcmVuY2VcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50TW9kYWxcbiAgICAgID8gdGhpcy5fcGFyZW50TW9kYWwuYWZ0ZXJPcGVuZWRcbiAgICAgIDogdGhpcy5fYWZ0ZXJPcGVuZWRBdFRoaXNMZXZlbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBZnRlckFsbENsb3NlZCgpOiBTdWJqZWN0PHZvaWQ+IHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9wYXJlbnRNb2RhbDtcbiAgICByZXR1cm4gcGFyZW50XG4gICAgICA/IHBhcmVudC5nZXRBZnRlckFsbENsb3NlZCgpXG4gICAgICA6IHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWw7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgYSBtb2RhbCBtb2RhbCBjb250YWluaW5nIHRoZSBnaXZlbiB0ZW1wbGF0ZS5cbiAgICovXG4gIHB1YmxpYyBvcGVuPFQ+KFxuICAgIGNvbXBvbmVudE9yVGVtcGxhdGVSZWY6IENvbXBvbmVudFR5cGU8VD4gfCBUZW1wbGF0ZVJlZjxUPixcbiAgICBjb25maWc/OiBCYW9Nb2RhbENvbmZpZ1xuICApOiBCYW9Nb2RhbFJlZjx1bmtub3duPiB7XG4gICAgY29uc3QgY29uZiA9IHRoaXMuX2FwcGx5Q29uZmlnRGVmYXVsdHMoY29uZmlnLCBuZXcgQmFvTW9kYWxJbml0aWFsQ29uZmlnKCkpO1xuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSBtb2RhbCB0aGF0IGlzIGN1cnJlbnRseSBhbmltYXRpbmcgb3BlbiwgcmV0dXJuIHRoZSBNYXRtb2RhbFJlZiBvZiB0aGF0IG1vZGFsXG4gICAgaWYgKHRoaXMuX21vZGFsQW5pbWF0aW5nT3Blbikge1xuICAgICAgcmV0dXJuIHRoaXMuX2xhc3RNb2RhbFJlZjtcbiAgICB9XG5cbiAgICBjb25zdCBvdmVybGF5UmVmID0gdGhpcy5fY3JlYXRlT3ZlcmxheShjb25mKTtcbiAgICBjb25zdCBtb2RhbENvbnRhaW5lciA9IHRoaXMuX2F0dGFjaE1vZGFsQ29udGFpbmVyKG92ZXJsYXlSZWYsIGNvbmYpO1xuXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLl9hdHRhY2hNb2RhbENvbnRlbnQ8VD4oXG4gICAgICBjb21wb25lbnRPclRlbXBsYXRlUmVmLFxuICAgICAgbW9kYWxDb250YWluZXIsXG4gICAgICBvdmVybGF5UmVmLFxuICAgICAgY29uZlxuICAgICk7XG4gICAgdGhpcy5fbGFzdE1vZGFsUmVmID0gbW9kYWxSZWY7XG5cbiAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCBtb2RhbCB0aGF0IHdlJ3JlIG9wZW5pbmcsIGhpZGUgYWxsIHRoZSBub24tb3ZlcmxheSBjb250ZW50LlxuICAgIGlmICghdGhpcy5vcGVuTW9kYWxzLmxlbmd0aCkge1xuICAgICAgdGhpcy5faGlkZU5vbk1vZGFsQ29udGVudEZyb21Bc3Npc3RpdmVUZWNobm9sb2d5KCk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGVuTW9kYWxzLnB1c2gobW9kYWxSZWYpO1xuICAgIG1vZGFsUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3JlbW92ZU9wZW5Nb2RhbChtb2RhbFJlZikpO1xuICAgIHRoaXMuYWZ0ZXJPcGVuZWQubmV4dChtb2RhbFJlZik7XG5cbiAgICAvLyBOb3RpZnkgdGhlIG1vZGFsIGNvbnRhaW5lciB0aGF0IHRoZSBjb250ZW50IGhhcyBiZWVuIGF0dGFjaGVkLlxuICAgIG1vZGFsQ29udGFpbmVyLl9pbml0aWFsaXplV2l0aEF0dGFjaGVkQ29udGVudCgpO1xuXG4gICAgcmV0dXJuIG1vZGFsUmVmO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyBhbGwgb2YgdGhlIGN1cnJlbnRseS1vcGVuIG1vZGFscy5cbiAgICovXG4gIHB1YmxpYyBjbG9zZUFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLl9jbG9zZU1vZGFscyh0aGlzLm9wZW5Nb2RhbHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGFuIG9wZW4gbW9kYWwgYnkgaXRzIGlkLlxuICAgKi9cbiAgcHVibGljIGdldE1vZGFsQnlJZChpZDogc3RyaW5nKTogQmFvTW9kYWxSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm9wZW5Nb2RhbHMuZmluZChtb2RhbCA9PiBtb2RhbC5pZCA9PT0gaWQpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIC8vIE9ubHkgY2xvc2UgdGhlIG1vZGFscyBhdCB0aGlzIGxldmVsIG9uIGRlc3Ryb3lcbiAgICAvLyBzaW5jZSB0aGUgcGFyZW50IHNlcnZpY2UgbWF5IHN0aWxsIGJlIGFjdGl2ZS5cbiAgICB0aGlzLl9jbG9zZU1vZGFscyh0aGlzLl9vcGVuTW9kYWxzQXRUaGlzTGV2ZWwpO1xuICAgIHRoaXMuX2FmdGVyQWxsQ2xvc2VkQXRUaGlzTGV2ZWwuY29tcGxldGUoKTtcbiAgICB0aGlzLl9hZnRlck9wZW5lZEF0VGhpc0xldmVsLmNvbXBsZXRlKCk7XG4gICAgLy8gQ2xlYW4gdXAgYW55IHN1YnNjcmlwdGlvbnMgdG8gbW9kYWxzIHRoYXQgbmV2ZXIgZmluaXNoZWQgb3BlbmluZy5cbiAgICBpZiAodGhpcy5fYW5pbWF0aW9uU3RhdGVTdWJzY3JpcHRpb25zKSB7XG4gICAgICB0aGlzLl9hbmltYXRpb25TdGF0ZVN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgb3ZlcmxheSBpbnRvIHdoaWNoIHRoZSBtb2RhbCB3aWxsIGJlIGxvYWRlZC5cbiAgICovXG4gIHByaXZhdGUgX2NyZWF0ZU92ZXJsYXkoY29uZmlnOiBCYW9Nb2RhbEluaXRpYWxDb25maWcpOiBPdmVybGF5UmVmIHtcbiAgICBjb25zdCBvdmVybGF5Q29uZmlnID0gdGhpcy5fZ2V0T3ZlcmxheUNvbmZpZyhjb25maWcpO1xuICAgIHJldHVybiB0aGlzLl9vdmVybGF5LmNyZWF0ZShvdmVybGF5Q29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIG92ZXJsYXkgY29uZmlnIGZyb20gYSBtb2RhbCBjb25maWcuXG4gICAqL1xuICBwcml2YXRlIF9nZXRPdmVybGF5Q29uZmlnKGNvbmZpZzogQmFvTW9kYWxJbml0aWFsQ29uZmlnKTogT3ZlcmxheUNvbmZpZyB7XG4gICAgbGV0IHBvc2l0aW9uU3RyYXRlZ3k7XG4gICAgbGV0IGhhc0JhY2tkcm9wID0gY29uZmlnLmhhc0JhY2tkcm9wO1xuICAgIGxldCBiYWNrZHJvcENsYXNzID0gY29uZmlnLmJhY2tkcm9wQ2xhc3M7XG5cbiAgICBpZiAoY29uZmlnLnZhcmlhbnQgPT09IGVNb2RhbFZhcmlhbnQuRklMVEVSICYmIGNvbmZpZy50cmlnZ2VyRWxlbWVudCkge1xuICAgICAgLy8gVXNlIGNvbm5lY3RlZCBwb3NpdGlvbmluZyBmb3IgZmlsdGVyIHZhcmlhbnRcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLl9vdmVybGF5XG4gICAgICAgIC5wb3NpdGlvbigpXG4gICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKGNvbmZpZy50cmlnZ2VyRWxlbWVudC5uYXRpdmVFbGVtZW50KVxuICAgICAgICAud2l0aExvY2tlZFBvc2l0aW9uKClcbiAgICAgICAgLndpdGhHcm93QWZ0ZXJPcGVuKClcbiAgICAgICAgLndpdGhQb3NpdGlvbnMoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRvcC1sZWZ0IG9mIHRoZSBvdmVybGF5IGlzIGNvbm5lY3RlZCB0byBib3R0b20tbGVmdCBvZiB0aGUgb3JpZ2luO1xuICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgICBvdmVybGF5WTogJ3RvcCdcbiAgICAgICAgICB9IGFzIENvbm5lY3RlZFBvc2l0aW9uLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIGJvdHRvbS1sZWZ0IG9mIHRoZSBvdmVybGF5IGlzIGNvbm5lY3RlZCB0byB0b3AtbGVmdCBvZiB0aGUgb3JpZ2luO1xuICAgICAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgICBvdmVybGF5WTogJ2JvdHRvbSdcbiAgICAgICAgICB9IGFzIENvbm5lY3RlZFBvc2l0aW9uLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIHRvcC1yaWdodCBvZiB0aGUgb3ZlcmxheSBpcyBjb25uZWN0ZWQgdG8gYm90dG9tLXJpZ2h0IG9mIHRoZSBvcmlnaW47XG4gICAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICAgICAgb3ZlcmxheVk6ICd0b3AnXG4gICAgICAgICAgfSBhcyBDb25uZWN0ZWRQb3NpdGlvbixcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBib3R0b20tcmlnaHQgb2YgdGhlIG92ZXJsYXkgaXMgY29ubmVjdGVkIHRvIHRvcC1yaWdodCBvZiB0aGUgb3JpZ2luO1xuICAgICAgICAgICAgb3JpZ2luWDogJ2VuZCcsXG4gICAgICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgICAgIG92ZXJsYXlYOiAnZW5kJyxcbiAgICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJ1xuICAgICAgICAgIH0gYXMgQ29ubmVjdGVkUG9zaXRpb25cbiAgICAgICAgXSk7XG4gICAgICAvLyBGaWx0ZXIgdmFyaWFudCBzaG91bGQgaGF2ZSB0cmFuc3BhcmVudCBiYWNrZHJvcFxuICAgICAgaGFzQmFja2Ryb3AgPSB0cnVlO1xuICAgICAgYmFja2Ryb3BDbGFzcyA9ICdiYW8tb3ZlcmxheS10cmFuc3BhcmVudC1iYWNrZHJvcCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVzZSBnbG9iYWwgcG9zaXRpb25pbmcgZm9yIGRlZmF1bHQgdmFyaWFudFxuICAgICAgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0ZSA9IG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3ksXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLmJsb2NrKCksXG4gICAgICBwYW5lbENsYXNzOiBjb25maWcucGFuZWxDbGFzcyxcbiAgICAgIGhhc0JhY2tkcm9wLFxuICAgICAgZGlzcG9zZU9uTmF2aWdhdGlvbjogY29uZmlnLmNsb3NlT25OYXZpZ2F0aW9uLFxuICAgICAgLy8gU2V0IGRpbWVuc2lvbnMgZm9yIGZpbHRlciB2YXJpYW50IGluIE92ZXJsYXlDb25maWcgaW5zdGVhZCBvZiB2aWEgdXBkYXRlU2l6ZSgpXG4gICAgICB3aWR0aDpcbiAgICAgICAgY29uZmlnLnZhcmlhbnQgPT09IGVNb2RhbFZhcmlhbnQuRklMVEVSXG4gICAgICAgICAgPyBGSUxURVJfTU9EQUxfV0lEVEhcbiAgICAgICAgICA6IGNvbmZpZy53aWR0aCxcbiAgICAgIG1pbldpZHRoOiBjb25maWcubWluV2lkdGgsXG4gICAgICBtaW5IZWlnaHQ6IGNvbmZpZy5taW5IZWlnaHQsXG4gICAgICBtYXhXaWR0aDogY29uZmlnLm1heFdpZHRoLFxuICAgICAgbWF4SGVpZ2h0OiBjb25maWcubWF4SGVpZ2h0XG4gICAgfSk7XG5cbiAgICBpZiAoYmFja2Ryb3BDbGFzcykge1xuICAgICAgc3RhdGUuYmFja2Ryb3BDbGFzcyA9IGJhY2tkcm9wQ2xhc3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaGVzIGEgbW9kYWwgY29udGFpbmVyIHRvIGEgbW9kYWwncyBhbHJlYWR5LWNyZWF0ZWQgb3ZlcmxheS5cbiAgICovXG4gIHByaXZhdGUgX2F0dGFjaE1vZGFsQ29udGFpbmVyKFxuICAgIG92ZXJsYXk6IE92ZXJsYXlSZWYsXG4gICAgY29uZmlnOiBCYW9Nb2RhbEluaXRpYWxDb25maWdcbiAgKTogQyB7XG4gICAgY29uc3QgdXNlckluamVjdG9yID1cbiAgICAgIGNvbmZpZyAmJiBjb25maWcudmlld0NvbnRhaW5lclJlZiAmJiBjb25maWcudmlld0NvbnRhaW5lclJlZi5pbmplY3RvcjtcbiAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwYXJlbnQ6IHVzZXJJbmplY3RvciB8fCB0aGlzLl9pbmplY3RvcixcbiAgICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQmFvTW9kYWxJbml0aWFsQ29uZmlnLCB1c2VWYWx1ZTogY29uZmlnIH1dXG4gICAgfSk7XG5cbiAgICBjb25zdCBjb250YWluZXJQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKFxuICAgICAgdGhpcy5fbW9kYWxDb250YWluZXJUeXBlLFxuICAgICAgY29uZmlnLnZpZXdDb250YWluZXJSZWYsXG4gICAgICBpbmplY3RvclxuICAgICk7XG4gICAgY29uc3QgY29udGFpbmVyUmVmID0gb3ZlcmxheS5hdHRhY2g8Qz4oY29udGFpbmVyUG9ydGFsKTtcbiAgICBjb250YWluZXJSZWYuaW5zdGFuY2UuX3N0YXJ0T3BlbkFuaW1hdGlvbigpO1xuXG4gICAgcmV0dXJuIGNvbnRhaW5lclJlZi5pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRhY2hlcyB0aGUgdXNlci1wcm92aWRlZCBjb21wb25lbnQgdG8gdGhlIGFscmVhZHktY3JlYXRlZCBtb2RhbCBjb250YWluZXIuXG4gICAqL1xuICBwcml2YXRlIF9hdHRhY2hNb2RhbENvbnRlbnQ8VD4oXG4gICAgY29tcG9uZW50T3JUZW1wbGF0ZVJlZjogQ29tcG9uZW50VHlwZTxUPiB8IFRlbXBsYXRlUmVmPFQ+LFxuICAgIG1vZGFsQ29udGFpbmVyOiBDLFxuICAgIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYsXG4gICAgY29uZmlnOiBCYW9Nb2RhbEluaXRpYWxDb25maWdcbiAgKTogQmFvTW9kYWxSZWY8dW5rbm93bj4ge1xuICAgIC8vIENyZWF0ZSBhIHJlZmVyZW5jZSB0byB0aGUgbW9kYWwgd2UncmUgY3JlYXRpbmcgaW4gb3JkZXIgdG8gZ2l2ZSB0aGUgdXNlciBhIGhhbmRsZVxuICAgIC8vIHRvIG1vZGlmeSBhbmQgY2xvc2UgaXQuXG4gICAgY29uc3QgbW9kYWxSZWYgPSBuZXcgdGhpcy5fbW9kYWxSZWZDb25zdHJ1Y3RvcihcbiAgICAgIG92ZXJsYXlSZWYsXG4gICAgICBtb2RhbENvbnRhaW5lcixcbiAgICAgIGNvbmZpZy5pZFxuICAgICk7XG5cbiAgICBpZiAoY29tcG9uZW50T3JUZW1wbGF0ZVJlZiBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICBtb2RhbENvbnRhaW5lci5hdHRhY2hUZW1wbGF0ZVBvcnRhbChcbiAgICAgICAgbmV3IFRlbXBsYXRlUG9ydGFsKGNvbXBvbmVudE9yVGVtcGxhdGVSZWYsIG51bGwsIDx1bmtub3duPntcbiAgICAgICAgICAkaW1wbGljaXQ6IGNvbmZpZy5kYXRhLFxuICAgICAgICAgIG1vZGFsUmVmXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbmplY3RvciA9IHRoaXMuX2NyZWF0ZUluamVjdG9yKGNvbmZpZywgbW9kYWxSZWYsIG1vZGFsQ29udGFpbmVyKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRSZWYgPSBtb2RhbENvbnRhaW5lci5hdHRhY2hDb21wb25lbnRQb3J0YWw8VD4oXG4gICAgICAgIG5ldyBDb21wb25lbnRQb3J0YWwoXG4gICAgICAgICAgY29tcG9uZW50T3JUZW1wbGF0ZVJlZixcbiAgICAgICAgICBjb25maWcudmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgICBpbmplY3RvclxuICAgICAgICApXG4gICAgICApO1xuICAgICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UgPSBjb250ZW50UmVmLmluc3RhbmNlO1xuICAgIH1cblxuICAgIC8vIE9ubHkgdXBkYXRlIHNpemUgYW5kIHBvc2l0aW9uIGZvciBnbG9iYWwgdmFyaWFudFxuICAgIC8vIEZpbHRlciB2YXJpYW50IGRpbWVuc2lvbnMgYXJlIHNldCBpbiBPdmVybGF5Q29uZmlnIGFuZCBwb3NpdGlvbmluZyBpcyBoYW5kbGVkIGJ5IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneVxuICAgIGlmIChjb25maWcudmFyaWFudCAhPT0gZU1vZGFsVmFyaWFudC5GSUxURVIpIHtcbiAgICAgIG1vZGFsUmVmXG4gICAgICAgIC51cGRhdGVTaXplKGNvbmZpZy53aWR0aCwgY29uZmlnLmhlaWdodClcbiAgICAgICAgLnVwZGF0ZVBvc2l0aW9uKGNvbmZpZy5wb3NpdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBtb2RhbFJlZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgY3VzdG9tIGluamVjdG9yIHRvIGJlIHVzZWQgaW5zaWRlIHRoZSBtb2RhbC4gVGhpcyBhbGxvd3MgYSBjb21wb25lbnQgbG9hZGVkIGluc2lkZVxuICAgKiBvZiBhIG1vZGFsIHRvIGNsb3NlIGl0c2VsZiBhbmQsIG9wdGlvbmFsbHksIHRvIHJldHVybiBhIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBfY3JlYXRlSW5qZWN0b3IoXG4gICAgY29uZmlnOiBCYW9Nb2RhbEluaXRpYWxDb25maWcsXG4gICAgbW9kYWxSZWY6IEJhb01vZGFsUmVmPHVua25vd24+LFxuICAgIG1vZGFsQ29udGFpbmVyOiBDXG4gICk6IEluamVjdG9yIHtcbiAgICBjb25zdCB1c2VySW5qZWN0b3IgPVxuICAgICAgY29uZmlnICYmIGNvbmZpZy52aWV3Q29udGFpbmVyUmVmICYmIGNvbmZpZy52aWV3Q29udGFpbmVyUmVmLmluamVjdG9yO1xuXG4gICAgLy8gVGhlIG1vZGFsIGNvbnRhaW5lciBzaG91bGQgYmUgcHJvdmlkZWQgYXMgdGhlIG1vZGFsIGNvbnRhaW5lciBhbmQgdGhlIG1vZGFsJ3NcbiAgICAvLyBjb250ZW50IGFyZSBjcmVhdGVkIG91dCBvZiB0aGUgc2FtZSBgVmlld0NvbnRhaW5lclJlZmAgYW5kIGFzIHN1Y2gsIGFyZSBzaWJsaW5nc1xuICAgIC8vIGZvciBpbmplY3RvciBwdXJwb3Nlcy4gVG8gYWxsb3cgdGhlIGhpZXJhcmNoeSB0aGF0IGlzIGV4cGVjdGVkLCB0aGUgbW9kYWxcbiAgICAvLyBjb250YWluZXIgaXMgZXhwbGljaXRseSBwcm92aWRlZCBpbiB0aGUgaW5qZWN0b3IuXG4gICAgY29uc3QgcHJvdmlkZXJzOiBTdGF0aWNQcm92aWRlcltdID0gW1xuICAgICAgeyBwcm92aWRlOiB0aGlzLl9tb2RhbENvbnRhaW5lclR5cGUsIHVzZVZhbHVlOiBtb2RhbENvbnRhaW5lciB9LFxuICAgICAgeyBwcm92aWRlOiB0aGlzLl9tb2RhbERhdGFUb2tlbiwgdXNlVmFsdWU6IGNvbmZpZy5kYXRhIH0sXG4gICAgICB7IHByb3ZpZGU6IHRoaXMuX21vZGFsUmVmQ29uc3RydWN0b3IsIHVzZVZhbHVlOiBtb2RhbFJlZiB9XG4gICAgXTtcblxuICAgIHJldHVybiBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcGFyZW50OiB1c2VySW5qZWN0b3IgfHwgdGhpcy5faW5qZWN0b3IsXG4gICAgICBwcm92aWRlcnNcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgbW9kYWwgZnJvbSB0aGUgYXJyYXkgb2Ygb3BlbiBtb2RhbHMuXG4gICAqL1xuICBwcml2YXRlIF9yZW1vdmVPcGVuTW9kYWwobW9kYWxSZWY6IEJhb01vZGFsUmVmPHVua25vd24+KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLm9wZW5Nb2RhbHMuaW5kZXhPZihtb2RhbFJlZik7XG5cbiAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgdGhpcy5vcGVuTW9kYWxzLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgIC8vIElmIGFsbCB0aGUgbW9kYWxzIHdlcmUgY2xvc2VkLCByZW1vdmUvcmVzdG9yZSB0aGUgYGFyaWEtaGlkZGVuYFxuICAgICAgLy8gdG8gYSB0aGUgc2libGluZ3MgYW5kIGVtaXQgdG8gdGhlIGBhZnRlckFsbENsb3NlZGAgc3RyZWFtLlxuICAgICAgaWYgKCF0aGlzLm9wZW5Nb2RhbHMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX2FyaWFIaWRkZW5FbGVtZW50cy5mb3JFYWNoKChwcmV2aW91c1ZhbHVlLCBlbGVtZW50KSA9PiB7XG4gICAgICAgICAgaWYgKHByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHByZXZpb3VzVmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2FyaWFIaWRkZW5FbGVtZW50cy5jbGVhcigpO1xuICAgICAgICB0aGlzLmdldEFmdGVyQWxsQ2xvc2VkKCkubmV4dCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlcyBhbGwgb2YgdGhlIGNvbnRlbnQgdGhhdCBpc24ndCBhbiBvdmVybGF5IGZyb20gYXNzaXN0aXZlIHRlY2hub2xvZ3kuXG4gICAqL1xuICBwcml2YXRlIF9oaWRlTm9uTW9kYWxDb250ZW50RnJvbUFzc2lzdGl2ZVRlY2hub2xvZ3koKSB7XG4gICAgY29uc3Qgb3ZlcmxheUNvbnRhaW5lciA9IHRoaXMuX292ZXJsYXlDb250YWluZXIuZ2V0Q29udGFpbmVyRWxlbWVudCgpO1xuXG4gICAgLy8gRW5zdXJlIHRoYXQgdGhlIG92ZXJsYXkgY29udGFpbmVyIGlzIGF0dGFjaGVkIHRvIHRoZSBET00uXG4gICAgaWYgKG92ZXJsYXlDb250YWluZXIucGFyZW50RWxlbWVudCkge1xuICAgICAgY29uc3Qgc2libGluZ3MgPSBvdmVybGF5Q29udGFpbmVyLnBhcmVudEVsZW1lbnQuY2hpbGRyZW47XG5cbiAgICAgIGZvciAobGV0IGkgPSBzaWJsaW5ncy5sZW5ndGggLSAxOyBpID4gLTE7IGktLSkge1xuICAgICAgICBjb25zdCBzaWJsaW5nID0gc2libGluZ3NbaV07XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHNpYmxpbmcgIT09IG92ZXJsYXlDb250YWluZXIgJiZcbiAgICAgICAgICBzaWJsaW5nLm5vZGVOYW1lICE9PSAnU0NSSVBUJyAmJlxuICAgICAgICAgIHNpYmxpbmcubm9kZU5hbWUgIT09ICdTVFlMRScgJiZcbiAgICAgICAgICAhc2libGluZy5oYXNBdHRyaWJ1dGUoJ2FyaWEtbGl2ZScpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuX2FyaWFIaWRkZW5FbGVtZW50cy5zZXQoXG4gICAgICAgICAgICBzaWJsaW5nLFxuICAgICAgICAgICAgc2libGluZy5nZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJylcbiAgICAgICAgICApO1xuICAgICAgICAgIHNpYmxpbmcuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQ2xvc2VzIGFsbCBvZiB0aGUgbW9kYWxzIGluIGFuIGFycmF5LiAqL1xuICBwcml2YXRlIF9jbG9zZU1vZGFscyhtb2RhbHM6IEJhb01vZGFsUmVmPHVua25vd24+W10pIHtcbiAgICBsZXQgaSA9IG1vZGFscy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgbW9kYWxzW2ldLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgZGVmYXVsdCBvcHRpb25zIHRvIHRoZSBtb2RhbCBjb25maWcuXG4gICAqL1xuICBwcml2YXRlIF9hcHBseUNvbmZpZ0RlZmF1bHRzKFxuICAgIGNvbmZpZz86IEJhb01vZGFsQ29uZmlnLFxuICAgIGRlZmF1bHRPcHRpb25zPzogQmFvTW9kYWxJbml0aWFsQ29uZmlnXG4gICk6IEJhb01vZGFsSW5pdGlhbENvbmZpZyB7XG4gICAgY29uc3QgZGVza3RvcENsYXNzID0gY29uZmlnPy5zaXplIHx8IGVNb2RhbERlc2t0b3BXaWR0aFNpemUuU01BTEw7XG4gICAgY29uc3QgbW9iaWxDbGFzcyA9IGNvbmZpZz8ubW9iaWxlU2l6ZSB8fCBlTW9kYWxNb2JpbGVXaWR0aFNpemUuRlVMTDtcbiAgICBjb25zdCBkYXRhID0gY29uZmlnPy5kYXRhIHx8IG51bGw7XG4gICAgY29uc3QgYXJpYUxhYmVsbGVkQnkgPSBjb25maWc/LmFyaWFMYWJlbGxlZEJ5IHx8IG51bGw7XG4gICAgY29uc3QgdmFyaWFudCA9IGNvbmZpZz8udmFyaWFudCB8fCBlTW9kYWxWYXJpYW50LkdMT0JBTDtcbiAgICBjb25zdCB0cmlnZ2VyRWxlbWVudCA9IGNvbmZpZz8udHJpZ2dlckVsZW1lbnQ7XG5cbiAgICAvLyBBZGQgdmFyaWFudCBjbGFzcyBmb3Igc3R5bGluZ1xuICAgIGNvbnN0IHZhcmlhbnRDbGFzcyA9XG4gICAgICB2YXJpYW50ID09PSBlTW9kYWxWYXJpYW50LkZJTFRFUlxuICAgICAgICA/ICdiYW8tbW9kYWwtZmlsdGVyJ1xuICAgICAgICA6ICdiYW8tbW9kYWwtZ2xvYmFsJztcbiAgICAvLyBGaWx0ZXIgdmFyaWFudCBkb2VzIG5vdCBoYXZlIHJlc3BvbnNpdmUgY3NzIGNsYXNzZXNcbiAgICBjb25zdCBwYW5lbENsYXNzID1cbiAgICAgIHZhcmlhbnQgPT09IGVNb2RhbFZhcmlhbnQuRklMVEVSXG4gICAgICAgID8gW3ZhcmlhbnRDbGFzc11cbiAgICAgICAgOiBbZGVza3RvcENsYXNzLCBtb2JpbENsYXNzLCB2YXJpYW50Q2xhc3NdO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZhdWx0T3B0aW9ucyxcbiAgICAgIC4uLntcbiAgICAgICAgcGFuZWxDbGFzcyxcbiAgICAgICAgYXJpYUxhYmVsbGVkQnksXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHZhcmlhbnQsXG4gICAgICAgIHRyaWdnZXJFbGVtZW50XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFNlcnZpY2UgdG8gb3BlbiBtb2RhbC5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEJhb01vZGFsIGV4dGVuZHMgQmFvTW9kYWxCYXNlPEJhb01vZGFsQ29udGFpbmVyPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHBhcmVudE1vZGFsOiBCYW9Nb2RhbCxcbiAgICBvdmVybGF5Q29udGFpbmVyOiBPdmVybGF5Q29udGFpbmVyXG4gICkge1xuICAgIHN1cGVyKFxuICAgICAgb3ZlcmxheSxcbiAgICAgIGluamVjdG9yLFxuICAgICAgcGFyZW50TW9kYWwsXG4gICAgICBvdmVybGF5Q29udGFpbmVyLFxuICAgICAgQmFvTW9kYWxSZWYsXG4gICAgICBCYW9Nb2RhbENvbnRhaW5lcixcbiAgICAgIEJBT19NT0RBTF9EQVRBXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2026 Ville de Montreal. All rights reserved.
|
|
3
|
-
* Licensed under the MIT license.
|
|
4
|
-
* See LICENSE file in the project root for full license information.
|
|
5
|
-
*/
|
|
6
|
-
import { OverlayModule } from '@angular/cdk/overlay';
|
|
7
|
-
import { PortalModule } from '@angular/cdk/portal';
|
|
8
|
-
import { CommonModule } from '@angular/common';
|
|
9
|
-
import { NgModule } from '@angular/core';
|
|
10
|
-
import { BaoModal } from './modal';
|
|
11
|
-
import { BaoModalContainer } from './modal-container';
|
|
12
|
-
import { BaoModalClose } from './modal-directives';
|
|
13
|
-
import * as i0 from "@angular/core";
|
|
14
|
-
const MODAL_DIRECTIVES = [BaoModalContainer, BaoModalClose];
|
|
15
|
-
export class BaoModalModule {
|
|
16
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoModalModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
17
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: BaoModalModule, declarations: [BaoModalContainer, BaoModalClose], imports: [CommonModule, OverlayModule, PortalModule], exports: [BaoModalContainer, BaoModalClose] }); }
|
|
18
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoModalModule, providers: [BaoModal], imports: [CommonModule, OverlayModule, PortalModule] }); }
|
|
19
|
-
}
|
|
20
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoModalModule, decorators: [{
|
|
21
|
-
type: NgModule,
|
|
22
|
-
args: [{
|
|
23
|
-
imports: [CommonModule, OverlayModule, PortalModule],
|
|
24
|
-
declarations: MODAL_DIRECTIVES,
|
|
25
|
-
exports: MODAL_DIRECTIVES,
|
|
26
|
-
providers: [BaoModal]
|
|
27
|
-
}]
|
|
28
|
-
}] });
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11aS9zcmMvbGliL21vZGFsL21vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFFbkQsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLGlCQUFpQixFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBUTVELE1BQU0sT0FBTyxjQUFjOytHQUFkLGNBQWM7Z0hBQWQsY0FBYyxpQkFSRCxpQkFBaUIsRUFBRSxhQUFhLGFBRzlDLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxhQUgzQixpQkFBaUIsRUFBRSxhQUFhO2dIQVE3QyxjQUFjLGFBRmQsQ0FBQyxRQUFRLENBQUMsWUFIWCxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVk7OzRGQUt4QyxjQUFjO2tCQU4xQixRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDO29CQUNwRCxZQUFZLEVBQUUsZ0JBQWdCO29CQUM5QixPQUFPLEVBQUUsZ0JBQWdCO29CQUN6QixTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7aUJBQ3RCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyNiBWaWxsZSBkZSBNb250cmVhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIFNlZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICovXG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgUG9ydGFsTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJhb01vZGFsIH0gZnJvbSAnLi9tb2RhbCc7XG5pbXBvcnQgeyBCYW9Nb2RhbENvbnRhaW5lciB9IGZyb20gJy4vbW9kYWwtY29udGFpbmVyJztcbmltcG9ydCB7IEJhb01vZGFsQ2xvc2UgfSBmcm9tICcuL21vZGFsLWRpcmVjdGl2ZXMnO1xuXG5jb25zdCBNT0RBTF9ESVJFQ1RJVkVTID0gW0Jhb01vZGFsQ29udGFpbmVyLCBCYW9Nb2RhbENsb3NlXTtcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgT3ZlcmxheU1vZHVsZSwgUG9ydGFsTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBNT0RBTF9ESVJFQ1RJVkVTLFxuICBleHBvcnRzOiBNT0RBTF9ESVJFQ1RJVkVTLFxuICBwcm92aWRlcnM6IFtCYW9Nb2RhbF1cbn0pXG5leHBvcnQgY2xhc3MgQmFvTW9kYWxNb2R1bGUge31cbiJdfQ==
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2026 Ville de Montreal. All rights reserved.
|
|
3
|
-
* Licensed under the MIT license.
|
|
4
|
-
* See LICENSE file in the project root for full license information.
|
|
5
|
-
*/
|
|
6
|
-
export * from './module';
|
|
7
|
-
export * from './pagination.component';
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXVpL3NyYy9saWIvcGFnaW5hdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjYgVmlsbGUgZGUgTW9udHJlYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9wYWdpbmF0aW9uLmNvbXBvbmVudCc7XG4iXX0=
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright (c) 2026 Ville de Montreal. All rights reserved.
|
|
3
|
-
* Licensed under the MIT license.
|
|
4
|
-
* See LICENSE file in the project root for full license information.
|
|
5
|
-
*/
|
|
6
|
-
import { CommonModule } from '@angular/common';
|
|
7
|
-
import { NgModule } from '@angular/core';
|
|
8
|
-
import { FormsModule } from '@angular/forms';
|
|
9
|
-
import { BaoIconModule } from '../icon';
|
|
10
|
-
import { BaoPaginationComponent } from './pagination.component';
|
|
11
|
-
import * as i0 from "@angular/core";
|
|
12
|
-
export class BaoPaginationModule {
|
|
13
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoPaginationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
14
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: BaoPaginationModule, declarations: [BaoPaginationComponent], imports: [CommonModule, BaoIconModule, FormsModule], exports: [BaoPaginationComponent] }); }
|
|
15
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoPaginationModule, imports: [CommonModule, BaoIconModule, FormsModule] }); }
|
|
16
|
-
}
|
|
17
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BaoPaginationModule, decorators: [{
|
|
18
|
-
type: NgModule,
|
|
19
|
-
args: [{
|
|
20
|
-
imports: [CommonModule, BaoIconModule, FormsModule],
|
|
21
|
-
declarations: [BaoPaginationComponent],
|
|
22
|
-
exports: [BaoPaginationComponent]
|
|
23
|
-
}]
|
|
24
|
-
}] });
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11aS9zcmMvbGliL3BhZ2luYXRpb24vbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFPaEUsTUFBTSxPQUFPLG1CQUFtQjsrR0FBbkIsbUJBQW1CO2dIQUFuQixtQkFBbUIsaUJBSGYsc0JBQXNCLGFBRDNCLFlBQVksRUFBRSxhQUFhLEVBQUUsV0FBVyxhQUV4QyxzQkFBc0I7Z0hBRXJCLG1CQUFtQixZQUpwQixZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVc7OzRGQUl2QyxtQkFBbUI7a0JBTC9CLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxXQUFXLENBQUM7b0JBQ25ELFlBQVksRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUN0QyxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDbEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDI2IFZpbGxlIGRlIE1vbnRyZWFsLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcHJvamVjdCByb290IGZvciBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi9cbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCYW9JY29uTW9kdWxlIH0gZnJvbSAnLi4vaWNvbic7XG5pbXBvcnQgeyBCYW9QYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9wYWdpbmF0aW9uLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEJhb0ljb25Nb2R1bGUsIEZvcm1zTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbQmFvUGFnaW5hdGlvbkNvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtCYW9QYWdpbmF0aW9uQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBCYW9QYWdpbmF0aW9uTW9kdWxlIHt9XG4iXX0=
|