@villedemontreal/angular-ui 15.0.0 → 15.1.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,251 @@
1
+ import { OverlayConfig } from '@angular/cdk/overlay';
2
+ import { ComponentPortal, PortalInjector, TemplatePortal } from '@angular/cdk/portal';
3
+ import { Inject, Injectable, InjectionToken, Optional, SkipSelf, TemplateRef } from '@angular/core';
4
+ import { BaoSimpleSnackBarComponent } from './simple-snack-bar.component';
5
+ import { BAO_SNACK_BAR_DATA, BaoSnackBarConfig } from './snack-bar-config';
6
+ import { BaoSnackBarContainerComponent } from './snack-bar-container';
7
+ import { BaoSnackBarRef } from './snack-bar-ref';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/cdk/overlay";
10
+ import * as i2 from "@angular/cdk/a11y";
11
+ import * as i3 from "./snack-bar-config";
12
+ export function baoFactory() {
13
+ return new BaoSnackBarConfig();
14
+ }
15
+ /** Injection token that can be used to specify default snack bar. */
16
+ export const BAO_SNACK_BAR_DEFAULT_OPTIONS = new InjectionToken('bao-snack-bar-default-options', {
17
+ providedIn: 'root',
18
+ factory: baoFactory
19
+ });
20
+ /**
21
+ * Service to dispatch Material Design snack bar messages.
22
+ */
23
+ export class BaoSnackBarService {
24
+ constructor(_overlay, _live, _injector, _parentSnackBar, _defaultConfig) {
25
+ this._overlay = _overlay;
26
+ this._live = _live;
27
+ this._injector = _injector;
28
+ this._parentSnackBar = _parentSnackBar;
29
+ this._defaultConfig = _defaultConfig;
30
+ /** The component that should be rendered as the snack bar's simple component. */
31
+ this.simpleSnackBarComponent = BaoSimpleSnackBarComponent;
32
+ /** The container component that attaches the provided template or component. */
33
+ this.snackBarContainerComponent = BaoSnackBarContainerComponent;
34
+ /**
35
+ * Reference to the current snack bar in the view *at this level* (in the Angular injector tree).
36
+ * If there is a parent snack-bar service, all operations should delegate to that parent
37
+ * via `_openedSnackBarRef`.
38
+ */
39
+ this._snackBarRefAtThisLevel = null;
40
+ }
41
+ /** Reference to the currently opened snackbar at *any* level. */
42
+ get _openedSnackBarRef() {
43
+ const parent = this._parentSnackBar;
44
+ return parent ? parent._openedSnackBarRef : this._snackBarRefAtThisLevel;
45
+ }
46
+ set _openedSnackBarRef(value) {
47
+ if (this._parentSnackBar) {
48
+ this._parentSnackBar._openedSnackBarRef = value;
49
+ }
50
+ else {
51
+ this._snackBarRefAtThisLevel = value;
52
+ }
53
+ }
54
+ /**
55
+ * Creates and dispatches a snack bar with a custom component for the content, removing any
56
+ * currently opened snack bars.
57
+ *
58
+ * @param component Component to be instantiated.
59
+ * @param config Extra configuration for the snack bar.
60
+ */
61
+ openFromComponent(component, config) {
62
+ return this.attach(component, config);
63
+ }
64
+ /**
65
+ * Creates and dispatches a snack bar with a custom template for the content, removing any
66
+ * currently opened snack bars.
67
+ *
68
+ * @param template Template to be instantiated.
69
+ * @param config Extra configuration for the snack bar.
70
+ */
71
+ openFromTemplate(template, config) {
72
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
73
+ return this.attach(template, config);
74
+ }
75
+ /**
76
+ * Opens a snackbar with a message and an optional action.
77
+ * @param message The message to show in the snackbar.
78
+ * @param toastType The type of of toast to display the snackbar.
79
+ * @param actionLabelOrIcon The label or icon for the snackbar action.
80
+ * @param showClose If true, the snackbar will require user interaction to close.
81
+ * @param config Additional configuration options for the snackbar.
82
+ */
83
+ open(config) {
84
+ const _config = { ...this._defaultConfig, ...config };
85
+ // Since the user doesn't have access to the component, we can
86
+ // override the data to pass in our own message, action and type.
87
+ _config.data = {
88
+ message: _config.message,
89
+ toastType: _config.toastType,
90
+ actionLabelOrIcon: _config.actionLabelOrIcon,
91
+ showClose: _config.showClose
92
+ };
93
+ if (_config.showClose)
94
+ _config.duration = 0;
95
+ if (!_config.announcementMessage) {
96
+ _config.announcementMessage = _config.message;
97
+ }
98
+ return this.openFromComponent(this.simpleSnackBarComponent, _config);
99
+ }
100
+ /**
101
+ * Dismisses the currently-visible snack bar.
102
+ */
103
+ dismiss() {
104
+ if (this._openedSnackBarRef) {
105
+ this._openedSnackBarRef.dismiss();
106
+ }
107
+ }
108
+ ngOnDestroy() {
109
+ // Only dismiss the snack bar at the current level on destroy.
110
+ if (this._snackBarRefAtThisLevel) {
111
+ this._snackBarRefAtThisLevel.dismiss();
112
+ }
113
+ }
114
+ /**
115
+ * Attaches the snack bar container component to the overlay.
116
+ */
117
+ attachSnackBarContainer(overlayRef, config) {
118
+ const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
119
+ const injector = new PortalInjector(userInjector || this._injector, new WeakMap([[BaoSnackBarConfig, config]]));
120
+ const containerPortal = new ComponentPortal(this.snackBarContainerComponent, config.viewContainerRef, injector);
121
+ const containerRef = overlayRef.attach(containerPortal);
122
+ containerRef.instance.snackBarConfig = config;
123
+ return containerRef.instance;
124
+ }
125
+ /**
126
+ * Places a new component or a template as the content of the snack bar container.
127
+ */
128
+ attach(content, userConfig) {
129
+ const config = {
130
+ ...new BaoSnackBarConfig(),
131
+ ...this._defaultConfig,
132
+ ...userConfig
133
+ };
134
+ const overlayRef = this.createOverlay(config);
135
+ const container = this.attachSnackBarContainer(overlayRef, config);
136
+ const snackBarRef = new BaoSnackBarRef(container, overlayRef);
137
+ if (content instanceof TemplateRef) {
138
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
139
+ const portal = new TemplatePortal(content, null, {
140
+ $implicit: config.data,
141
+ snackBarRef
142
+ });
143
+ snackBarRef.instance = container.attachTemplatePortal(portal);
144
+ }
145
+ else {
146
+ const injector = this.createInjector(config, snackBarRef);
147
+ const portal = new ComponentPortal(content, undefined, injector);
148
+ const contentRef = container.attachComponentPortal(portal);
149
+ // We can't pass this via the injector, because the injector is created earlier.
150
+ snackBarRef.instance = contentRef.instance;
151
+ }
152
+ this.animateSnackBar(snackBarRef, config);
153
+ this._openedSnackBarRef = snackBarRef;
154
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-return
155
+ return this._openedSnackBarRef;
156
+ }
157
+ /** Animates the old snack bar out and the new one in. */
158
+ animateSnackBar(snackBarRef, config) {
159
+ // When the snackbar is dismissed, clear the reference to it.
160
+ snackBarRef.afterDismissed().subscribe(() => {
161
+ // Clear the snackbar ref if it hasn't already been replaced by a newer snackbar.
162
+ // eslint-disable-next-line eqeqeq
163
+ if (this._openedSnackBarRef == snackBarRef) {
164
+ this._openedSnackBarRef = null;
165
+ }
166
+ if (config.announcementMessage) {
167
+ this._live.clear();
168
+ }
169
+ });
170
+ if (this._openedSnackBarRef) {
171
+ // If a snack bar is already in view, dismiss it and enter the
172
+ // new snack bar after exit animation is complete.
173
+ this._openedSnackBarRef.afterDismissed().subscribe(() => {
174
+ snackBarRef.containerInstance.enter();
175
+ });
176
+ this._openedSnackBarRef.dismiss();
177
+ }
178
+ else {
179
+ // If no snack bar is in view, enter the new snack bar.
180
+ snackBarRef.containerInstance.enter();
181
+ }
182
+ // If a dismiss timeout is provided, set up dismiss based on after the snackbar is opened.
183
+ if (config.duration && config.duration > 0) {
184
+ snackBarRef
185
+ .afterOpened()
186
+ .subscribe(() => snackBarRef.dismissAfter(config.duration));
187
+ }
188
+ if (config.announcementMessage) {
189
+ void this._live.announce(config.announcementMessage, config.politeness);
190
+ }
191
+ }
192
+ /**
193
+ * Creates a new overlay and places it in the correct location.
194
+ * @param config The user-specified snack bar config.
195
+ */
196
+ createOverlay(config) {
197
+ const overlayConfig = new OverlayConfig();
198
+ overlayConfig.direction = config.direction;
199
+ const positionStrategy = this._overlay.position().global();
200
+ // Set horizontal position.
201
+ const isRtl = config.direction === 'rtl';
202
+ const isLeft = config.horizontalPosition === 'left' ||
203
+ (config.horizontalPosition === 'start' && !isRtl) ||
204
+ (config.horizontalPosition === 'end' && isRtl);
205
+ const isRight = !isLeft && config.horizontalPosition !== 'center';
206
+ if (isLeft) {
207
+ positionStrategy.left('0');
208
+ }
209
+ else if (isRight) {
210
+ positionStrategy.right('0');
211
+ }
212
+ else {
213
+ positionStrategy.centerHorizontally();
214
+ }
215
+ // Set horizontal position.
216
+ if (config.verticalPosition === 'top') {
217
+ positionStrategy.top('0');
218
+ }
219
+ else {
220
+ positionStrategy.bottom('0');
221
+ }
222
+ overlayConfig.positionStrategy = positionStrategy;
223
+ return this._overlay.create(overlayConfig);
224
+ }
225
+ /**
226
+ * Creates an injector to be used inside of a snack bar component.
227
+ * @param config Config that was used to create the snack bar.
228
+ * @param snackBarRef Reference to the snack bar.
229
+ */
230
+ createInjector(config, snackBarRef) {
231
+ const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
232
+ return new PortalInjector(userInjector || this._injector, new WeakMap([
233
+ [BaoSnackBarRef, snackBarRef],
234
+ [BAO_SNACK_BAR_DATA, config.data]
235
+ ]));
236
+ }
237
+ }
238
+ BaoSnackBarService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: BaoSnackBarService, deps: [{ token: i1.Overlay }, { token: i2.LiveAnnouncer }, { token: i0.Injector }, { token: BaoSnackBarService, optional: true, skipSelf: true }, { token: BAO_SNACK_BAR_DEFAULT_OPTIONS }], target: i0.ɵɵFactoryTarget.Injectable });
239
+ BaoSnackBarService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: BaoSnackBarService, providedIn: 'root' });
240
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.3", ngImport: i0, type: BaoSnackBarService, decorators: [{
241
+ type: Injectable,
242
+ args: [{ providedIn: 'root' }]
243
+ }], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i2.LiveAnnouncer }, { type: i0.Injector }, { type: BaoSnackBarService, decorators: [{
244
+ type: Optional
245
+ }, {
246
+ type: SkipSelf
247
+ }] }, { type: i3.BaoSnackBarConfig, decorators: [{
248
+ type: Inject,
249
+ args: [BAO_SNACK_BAR_DEFAULT_OPTIONS]
250
+ }] }]; } });
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2stYmFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11aS9zcmMvbGliL3NuYWNrLWJhci9zbmFjay1iYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUFXLGFBQWEsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzFFLE9BQU8sRUFDTCxlQUFlLEVBRWYsY0FBYyxFQUNkLGNBQWMsRUFDZixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFHTCxNQUFNLEVBQ04sVUFBVSxFQUNWLGNBQWMsRUFHZCxRQUFRLEVBQ1IsUUFBUSxFQUNSLFdBQVcsRUFFWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsMEJBQTBCLEVBRTNCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0UsT0FBTyxFQUNMLDZCQUE2QixFQUU5QixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFFakQsTUFBTSxVQUFVLFVBQVU7SUFDeEIsT0FBTyxJQUFJLGlCQUFpQixFQUFFLENBQUM7QUFDakMsQ0FBQztBQUVELHFFQUFxRTtBQUNyRSxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FDeEMsSUFBSSxjQUFjLENBQW9CLCtCQUErQixFQUFFO0lBQ3JFLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxVQUFVO0NBQ3BCLENBQUMsQ0FBQztBQUVMOztHQUVHO0FBRUgsTUFBTSxPQUFPLGtCQUFrQjtJQWdCN0IsWUFDVSxRQUFpQixFQUNqQixLQUFvQixFQUNwQixTQUFtQixFQUNLLGVBQW1DLEVBRTNELGNBQWlDO1FBTGpDLGFBQVEsR0FBUixRQUFRLENBQVM7UUFDakIsVUFBSyxHQUFMLEtBQUssQ0FBZTtRQUNwQixj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ZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjMgVmlsbGUgZGUgTW9udHJlYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqL1xuaW1wb3J0IHsgTGl2ZUFubm91bmNlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1xuICBDb21wb25lbnRQb3J0YWwsXG4gIENvbXBvbmVudFR5cGUsXG4gIFBvcnRhbEluamVjdG9yLFxuICBUZW1wbGF0ZVBvcnRhbFxufSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7XG4gIENvbXBvbmVudFJlZixcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBJbmplY3QsXG4gIEluamVjdGFibGUsXG4gIEluamVjdGlvblRva2VuLFxuICBJbmplY3RvcixcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgU2tpcFNlbGYsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmFvU2ltcGxlU25hY2tCYXJDb21wb25lbnQsXG4gIElUZXh0T25seVNuYWNrQmFyXG59IGZyb20gJy4vc2ltcGxlLXNuYWNrLWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQkFPX1NOQUNLX0JBUl9EQVRBLCBCYW9TbmFja0JhckNvbmZpZyB9IGZyb20gJy4vc25hY2stYmFyLWNvbmZpZyc7XG5pbXBvcnQge1xuICBCYW9TbmFja0JhckNvbnRhaW5lckNvbXBvbmVudCxcbiAgSUJhb1NuYWNrQmFyQ29udGFpbmVyXG59IGZyb20gJy4vc25hY2stYmFyLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBCYW9TbmFja0JhclJlZiB9IGZyb20gJy4vc25hY2stYmFyLXJlZic7XG5cbmV4cG9ydCBmdW5jdGlvbiBiYW9GYWN0b3J5KCkge1xuICByZXR1cm4gbmV3IEJhb1NuYWNrQmFyQ29uZmlnKCk7XG59XG5cbi8qKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGRlZmF1bHQgc25hY2sgYmFyLiAqL1xuZXhwb3J0IGNvbnN0IEJBT19TTkFDS19CQVJfREVGQVVMVF9PUFRJT05TID1cbiAgbmV3IEluamVjdGlvblRva2VuPEJhb1NuYWNrQmFyQ29uZmlnPignYmFvLXNuYWNrLWJhci1kZWZhdWx0LW9wdGlvbnMnLCB7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICAgIGZhY3Rvcnk6IGJhb0ZhY3RvcnlcbiAgfSk7XG5cbi8qKlxuICogU2VydmljZSB0byBkaXNwYXRjaCBNYXRlcmlhbCBEZXNpZ24gc25hY2sgYmFyIG1lc3NhZ2VzLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEJhb1NuYWNrQmFyU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKiBUaGUgY29tcG9uZW50IHRoYXQgc2hvdWxkIGJlIHJlbmRlcmVkIGFzIHRoZSBzbmFjayBiYXIncyBzaW1wbGUgY29tcG9uZW50LiAqL1xuICBwcm90ZWN0ZWQgc2ltcGxlU25hY2tCYXJDb21wb25lbnQ6IFR5cGU8SVRleHRPbmx5U25hY2tCYXI+ID1cbiAgICBCYW9TaW1wbGVTbmFja0JhckNvbXBvbmVudDtcblxuICAvKiogVGhlIGNvbnRhaW5lciBjb21wb25lbnQgdGhhdCBhdHRhY2hlcyB0aGUgcHJvdmlkZWQgdGVtcGxhdGUgb3IgY29tcG9uZW50LiAqL1xuICBwcm90ZWN0ZWQgc25hY2tCYXJDb250YWluZXJDb21wb25lbnQ6IFR5cGU8SUJhb1NuYWNrQmFyQ29udGFpbmVyPiA9XG4gICAgQmFvU25hY2tCYXJDb250YWluZXJDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBzbmFjayBiYXIgaW4gdGhlIHZpZXcgKmF0IHRoaXMgbGV2ZWwqIChpbiB0aGUgQW5ndWxhciBpbmplY3RvciB0cmVlKS5cbiAgICogSWYgdGhlcmUgaXMgYSBwYXJlbnQgc25hY2stYmFyIHNlcnZpY2UsIGFsbCBvcGVyYXRpb25zIHNob3VsZCBkZWxlZ2F0ZSB0byB0aGF0IHBhcmVudFxuICAgKiB2aWEgYF9vcGVuZWRTbmFja0JhclJlZmAuXG4gICAqL1xuICBwcml2YXRlIF9zbmFja0JhclJlZkF0VGhpc0xldmVsOiBCYW9TbmFja0JhclJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIF9saXZlOiBMaXZlQW5ub3VuY2VyLFxuICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBwcml2YXRlIF9wYXJlbnRTbmFja0JhcjogQmFvU25hY2tCYXJTZXJ2aWNlLFxuICAgIEBJbmplY3QoQkFPX1NOQUNLX0JBUl9ERUZBVUxUX09QVElPTlMpXG4gICAgcHJpdmF0ZSBfZGVmYXVsdENvbmZpZzogQmFvU25hY2tCYXJDb25maWdcbiAgKSB7fVxuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnRseSBvcGVuZWQgc25hY2tiYXIgYXQgKmFueSogbGV2ZWwuICovXG4gIGdldCBfb3BlbmVkU25hY2tCYXJSZWYoKTogQmFvU25hY2tCYXJSZWY8YW55PiB8IG51bGwge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX3BhcmVudFNuYWNrQmFyO1xuICAgIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuX29wZW5lZFNuYWNrQmFyUmVmIDogdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbDtcbiAgfVxuXG4gIHNldCBfb3BlbmVkU25hY2tCYXJSZWYodmFsdWU6IEJhb1NuYWNrQmFyUmVmPGFueT4gfCBudWxsKSB7XG4gICAgaWYgKHRoaXMuX3BhcmVudFNuYWNrQmFyKSB7XG4gICAgICB0aGlzLl9wYXJlbnRTbmFja0Jhci5fb3BlbmVkU25hY2tCYXJSZWYgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuZCBkaXNwYXRjaGVzIGEgc25hY2sgYmFyIHdpdGggYSBjdXN0b20gY29tcG9uZW50IGZvciB0aGUgY29udGVudCwgcmVtb3ZpbmcgYW55XG4gICAqIGN1cnJlbnRseSBvcGVuZWQgc25hY2sgYmFycy5cbiAgICpcbiAgICogQHBhcmFtIGNvbXBvbmVudCBDb21wb25lbnQgdG8gYmUgaW5zdGFudGlhdGVkLlxuICAgKiBAcGFyYW0gY29uZmlnIEV4dHJhIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzbmFjayBiYXIuXG4gICAqL1xuICBwdWJsaWMgb3BlbkZyb21Db21wb25lbnQ8VD4oXG4gICAgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LFxuICAgIGNvbmZpZz86IEJhb1NuYWNrQmFyQ29uZmlnXG4gICk6IEJhb1NuYWNrQmFyUmVmPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5hdHRhY2goY29tcG9uZW50LCBjb25maWcpIGFzIEJhb1NuYWNrQmFyUmVmPFQ+O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIGRpc3BhdGNoZXMgYSBzbmFjayBiYXIgd2l0aCBhIGN1c3RvbSB0ZW1wbGF0ZSBmb3IgdGhlIGNvbnRlbnQsIHJlbW92aW5nIGFueVxuICAgKiBjdXJyZW50bHkgb3BlbmVkIHNuYWNrIGJhcnMuXG4gICAqXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSBUZW1wbGF0ZSB0byBiZSBpbnN0YW50aWF0ZWQuXG4gICAqIEBwYXJhbSBjb25maWcgRXh0cmEgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNuYWNrIGJhci5cbiAgICovXG4gIHB1YmxpYyBvcGVuRnJvbVRlbXBsYXRlKFxuICAgIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgIGNvbmZpZz86IEJhb1NuYWNrQmFyQ29uZmlnXG4gICk6IEJhb1NuYWNrQmFyUmVmPEVtYmVkZGVkVmlld1JlZjxhbnk+PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIHRoaXMuYXR0YWNoKHRlbXBsYXRlLCBjb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIGEgc25hY2tiYXIgd2l0aCBhIG1lc3NhZ2UgYW5kIGFuIG9wdGlvbmFsIGFjdGlvbi5cbiAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gc2hvdyBpbiB0aGUgc25hY2tiYXIuXG4gICAqIEBwYXJhbSB0b2FzdFR5cGUgVGhlIHR5cGUgb2Ygb2YgdG9hc3QgdG8gZGlzcGxheSB0aGUgc25hY2tiYXIuXG4gICAqIEBwYXJhbSBhY3Rpb25MYWJlbE9ySWNvbiBUaGUgbGFiZWwgb3IgaWNvbiBmb3IgdGhlIHNuYWNrYmFyIGFjdGlvbi5cbiAgICogQHBhcmFtIHNob3dDbG9zZSBJZiB0cnVlLCB0aGUgc25hY2tiYXIgd2lsbCByZXF1aXJlIHVzZXIgaW50ZXJhY3Rpb24gdG8gY2xvc2UuXG4gICAqIEBwYXJhbSBjb25maWcgQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBzbmFja2Jhci5cbiAgICovXG4gIHB1YmxpYyBvcGVuKGNvbmZpZzogQmFvU25hY2tCYXJDb25maWcpOiBCYW9TbmFja0JhclJlZjxJVGV4dE9ubHlTbmFja0Jhcj4ge1xuICAgIGNvbnN0IF9jb25maWcgPSB7IC4uLnRoaXMuX2RlZmF1bHRDb25maWcsIC4uLmNvbmZpZyB9O1xuXG4gICAgLy8gU2luY2UgdGhlIHVzZXIgZG9lc24ndCBoYXZlIGFjY2VzcyB0byB0aGUgY29tcG9uZW50LCB3ZSBjYW5cbiAgICAvLyBvdmVycmlkZSB0aGUgZGF0YSB0byBwYXNzIGluIG91ciBvd24gbWVzc2FnZSwgYWN0aW9uIGFuZCB0eXBlLlxuICAgIF9jb25maWcuZGF0YSA9IHtcbiAgICAgIG1lc3NhZ2U6IF9jb25maWcubWVzc2FnZSxcbiAgICAgIHRvYXN0VHlwZTogX2NvbmZpZy50b2FzdFR5cGUsXG4gICAgICBhY3Rpb25MYWJlbE9ySWNvbjogX2NvbmZpZy5hY3Rpb25MYWJlbE9ySWNvbixcbiAgICAgIHNob3dDbG9zZTogX2NvbmZpZy5zaG93Q2xvc2VcbiAgICB9O1xuXG4gICAgaWYgKF9jb25maWcuc2hvd0Nsb3NlKSBfY29uZmlnLmR1cmF0aW9uID0gMDtcblxuICAgIGlmICghX2NvbmZpZy5hbm5vdW5jZW1lbnRNZXNzYWdlKSB7XG4gICAgICBfY29uZmlnLmFubm91bmNlbWVudE1lc3NhZ2UgPSBfY29uZmlnLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMub3BlbkZyb21Db21wb25lbnQodGhpcy5zaW1wbGVTbmFja0JhckNvbXBvbmVudCwgX2NvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogRGlzbWlzc2VzIHRoZSBjdXJyZW50bHktdmlzaWJsZSBzbmFjayBiYXIuXG4gICAqL1xuICBwdWJsaWMgZGlzbWlzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fb3BlbmVkU25hY2tCYXJSZWYpIHtcbiAgICAgIHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmLmRpc21pc3MoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgLy8gT25seSBkaXNtaXNzIHRoZSBzbmFjayBiYXIgYXQgdGhlIGN1cnJlbnQgbGV2ZWwgb24gZGVzdHJveS5cbiAgICBpZiAodGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbCkge1xuICAgICAgdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbC5kaXNtaXNzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaGVzIHRoZSBzbmFjayBiYXIgY29udGFpbmVyIGNvbXBvbmVudCB0byB0aGUgb3ZlcmxheS5cbiAgICovXG4gIHByaXZhdGUgYXR0YWNoU25hY2tCYXJDb250YWluZXIoXG4gICAgb3ZlcmxheVJlZjogT3ZlcmxheVJlZixcbiAgICBjb25maWc6IEJhb1NuYWNrQmFyQ29uZmlnXG4gICk6IElCYW9TbmFja0JhckNvbnRhaW5lciB7XG4gICAgY29uc3QgdXNlckluamVjdG9yID1cbiAgICAgIGNvbmZpZyAmJiBjb25maWcudmlld0NvbnRhaW5lclJlZiAmJiBjb25maWcudmlld0NvbnRhaW5lclJlZi5pbmplY3RvcjtcbiAgICBjb25zdCBpbmplY3RvciA9IG5ldyBQb3J0YWxJbmplY3RvcihcbiAgICAgIHVzZXJJbmplY3RvciB8fCB0aGlzLl9pbmplY3RvcixcbiAgICAgIG5ldyBXZWFrTWFwKFtbQmFvU25hY2tCYXJDb25maWcsIGNvbmZpZ11dKVxuICAgICk7XG5cbiAgICBjb25zdCBjb250YWluZXJQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKFxuICAgICAgdGhpcy5zbmFja0JhckNvbnRhaW5lckNvbXBvbmVudCxcbiAgICAgIGNvbmZpZy52aWV3Q29udGFpbmVyUmVmLFxuICAgICAgaW5qZWN0b3JcbiAgICApO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlZjogQ29tcG9uZW50UmVmPElCYW9TbmFja0JhckNvbnRhaW5lcj4gPVxuICAgICAgb3ZlcmxheVJlZi5hdHRhY2goY29udGFpbmVyUG9ydGFsKTtcbiAgICBjb250YWluZXJSZWYuaW5zdGFuY2Uuc25hY2tCYXJDb25maWcgPSBjb25maWc7XG4gICAgcmV0dXJuIGNvbnRhaW5lclJlZi5pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQbGFjZXMgYSBuZXcgY29tcG9uZW50IG9yIGEgdGVtcGxhdGUgYXMgdGhlIGNvbnRlbnQgb2YgdGhlIHNuYWNrIGJhciBjb250YWluZXIuXG4gICAqL1xuICBwcml2YXRlIGF0dGFjaDxUPihcbiAgICBjb250ZW50OiBDb21wb25lbnRUeXBlPFQ+IHwgVGVtcGxhdGVSZWY8VD4sXG4gICAgdXNlckNvbmZpZz86IEJhb1NuYWNrQmFyQ29uZmlnXG4gICk6IEJhb1NuYWNrQmFyUmVmPFQgfCBFbWJlZGRlZFZpZXdSZWY8YW55Pj4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIC4uLm5ldyBCYW9TbmFja0JhckNvbmZpZygpLFxuICAgICAgLi4udGhpcy5fZGVmYXVsdENvbmZpZyxcbiAgICAgIC4uLnVzZXJDb25maWdcbiAgICB9O1xuICAgIGNvbnN0IG92ZXJsYXlSZWYgPSB0aGlzLmNyZWF0ZU92ZXJsYXkoY29uZmlnKTtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmF0dGFjaFNuYWNrQmFyQ29udGFpbmVyKG92ZXJsYXlSZWYsIGNvbmZpZyk7XG4gICAgY29uc3Qgc25hY2tCYXJSZWYgPSBuZXcgQmFvU25hY2tCYXJSZWY8VCB8IEVtYmVkZGVkVmlld1JlZjxhbnk+PihcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIG92ZXJsYXlSZWZcbiAgICApO1xuXG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgIGNvbnN0IHBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbChjb250ZW50LCBudWxsISwge1xuICAgICAgICAkaW1wbGljaXQ6IGNvbmZpZy5kYXRhLFxuICAgICAgICBzbmFja0JhclJlZlxuICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICBzbmFja0JhclJlZi5pbnN0YW5jZSA9IGNvbnRhaW5lci5hdHRhY2hUZW1wbGF0ZVBvcnRhbChwb3J0YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbmplY3RvciA9IHRoaXMuY3JlYXRlSW5qZWN0b3IoY29uZmlnLCBzbmFja0JhclJlZik7XG4gICAgICBjb25zdCBwb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKGNvbnRlbnQsIHVuZGVmaW5lZCwgaW5qZWN0b3IpO1xuICAgICAgY29uc3QgY29udGVudFJlZiA9IGNvbnRhaW5lci5hdHRhY2hDb21wb25lbnRQb3J0YWw8VD4ocG9ydGFsKTtcblxuICAgICAgLy8gV2UgY2FuJ3QgcGFzcyB0aGlzIHZpYSB0aGUgaW5qZWN0b3IsIGJlY2F1c2UgdGhlIGluamVjdG9yIGlzIGNyZWF0ZWQgZWFybGllci5cbiAgICAgIHNuYWNrQmFyUmVmLmluc3RhbmNlID0gY29udGVudFJlZi5pbnN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmFuaW1hdGVTbmFja0JhcihzbmFja0JhclJlZiwgY29uZmlnKTtcbiAgICB0aGlzLl9vcGVuZWRTbmFja0JhclJlZiA9IHNuYWNrQmFyUmVmO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiB0aGlzLl9vcGVuZWRTbmFja0JhclJlZjtcbiAgfVxuXG4gIC8qKiBBbmltYXRlcyB0aGUgb2xkIHNuYWNrIGJhciBvdXQgYW5kIHRoZSBuZXcgb25lIGluLiAqL1xuICBwcml2YXRlIGFuaW1hdGVTbmFja0JhcihcbiAgICBzbmFja0JhclJlZjogQmFvU25hY2tCYXJSZWY8YW55PixcbiAgICBjb25maWc6IEJhb1NuYWNrQmFyQ29uZmlnXG4gICkge1xuICAgIC8vIFdoZW4gdGhlIHNuYWNrYmFyIGlzIGRpc21pc3NlZCwgY2xlYXIgdGhlIHJlZmVyZW5jZSB0byBpdC5cbiAgICBzbmFja0JhclJlZi5hZnRlckRpc21pc3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAvLyBDbGVhciB0aGUgc25hY2tiYXIgcmVmIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gcmVwbGFjZWQgYnkgYSBuZXdlciBzbmFja2Jhci5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgIGlmICh0aGlzLl9vcGVuZWRTbmFja0JhclJlZiA9PSBzbmFja0JhclJlZikge1xuICAgICAgICB0aGlzLl9vcGVuZWRTbmFja0JhclJlZiA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuYW5ub3VuY2VtZW50TWVzc2FnZSkge1xuICAgICAgICB0aGlzLl9saXZlLmNsZWFyKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5fb3BlbmVkU25hY2tCYXJSZWYpIHtcbiAgICAgIC8vIElmIGEgc25hY2sgYmFyIGlzIGFscmVhZHkgaW4gdmlldywgZGlzbWlzcyBpdCBhbmQgZW50ZXIgdGhlXG4gICAgICAvLyBuZXcgc25hY2sgYmFyIGFmdGVyIGV4aXQgYW5pbWF0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAgdGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBzbmFja0JhclJlZi5jb250YWluZXJJbnN0YW5jZS5lbnRlcigpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9vcGVuZWRTbmFja0JhclJlZi5kaXNtaXNzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vIHNuYWNrIGJhciBpcyBpbiB2aWV3LCBlbnRlciB0aGUgbmV3IHNuYWNrIGJhci5cbiAgICAgIHNuYWNrQmFyUmVmLmNvbnRhaW5lckluc3RhbmNlLmVudGVyKCk7XG4gICAgfVxuXG4gICAgLy8gSWYgYSBkaXNtaXNzIHRpbWVvdXQgaXMgcHJvdmlkZWQsIHNldCB1cCBkaXNtaXNzIGJhc2VkIG9uIGFmdGVyIHRoZSBzbmFja2JhciBpcyBvcGVuZWQuXG4gICAgaWYgKGNvbmZpZy5kdXJhdGlvbiAmJiBjb25maWcuZHVyYXRpb24gPiAwKSB7XG4gICAgICBzbmFja0JhclJlZlxuICAgICAgICAuYWZ0ZXJPcGVuZWQoKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHNuYWNrQmFyUmVmLmRpc21pc3NBZnRlcihjb25maWcuZHVyYXRpb24pKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmFubm91bmNlbWVudE1lc3NhZ2UpIHtcbiAgICAgIHZvaWQgdGhpcy5fbGl2ZS5hbm5vdW5jZShjb25maWcuYW5ub3VuY2VtZW50TWVzc2FnZSwgY29uZmlnLnBvbGl0ZW5lc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IG92ZXJsYXkgYW5kIHBsYWNlcyBpdCBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbi5cbiAgICogQHBhcmFtIGNvbmZpZyBUaGUgdXNlci1zcGVjaWZpZWQgc25hY2sgYmFyIGNvbmZpZy5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlT3ZlcmxheShjb25maWc6IEJhb1NuYWNrQmFyQ29uZmlnKTogT3ZlcmxheVJlZiB7XG4gICAgY29uc3Qgb3ZlcmxheUNvbmZpZyA9IG5ldyBPdmVybGF5Q29uZmlnKCk7XG4gICAgb3ZlcmxheUNvbmZpZy5kaXJlY3Rpb24gPSBjb25maWcuZGlyZWN0aW9uO1xuXG4gICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKTtcbiAgICAvLyBTZXQgaG9yaXpvbnRhbCBwb3NpdGlvbi5cbiAgICBjb25zdCBpc1J0bCA9IGNvbmZpZy5kaXJlY3Rpb24gPT09ICdydGwnO1xuICAgIGNvbnN0IGlzTGVmdCA9XG4gICAgICBjb25maWcuaG9yaXpvbnRhbFBvc2l0aW9uID09PSAnbGVmdCcgfHxcbiAgICAgIChjb25maWcuaG9yaXpvbnRhbFBvc2l0aW9uID09PSAnc3RhcnQnICYmICFpc1J0bCkgfHxcbiAgICAgIChjb25maWcuaG9yaXpvbnRhbFBvc2l0aW9uID09PSAnZW5kJyAmJiBpc1J0bCk7XG4gICAgY29uc3QgaXNSaWdodCA9ICFpc0xlZnQgJiYgY29uZmlnLmhvcml6b250YWxQb3NpdGlvbiAhPT0gJ2NlbnRlcic7XG4gICAgaWYgKGlzTGVmdCkge1xuICAgICAgcG9zaXRpb25TdHJhdGVneS5sZWZ0KCcwJyk7XG4gICAgfSBlbHNlIGlmIChpc1JpZ2h0KSB7XG4gICAgICBwb3NpdGlvblN0cmF0ZWd5LnJpZ2h0KCcwJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3kuY2VudGVySG9yaXpvbnRhbGx5KCk7XG4gICAgfVxuICAgIC8vIFNldCBob3Jpem9udGFsIHBvc2l0aW9uLlxuICAgIGlmIChjb25maWcudmVydGljYWxQb3NpdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3kudG9wKCcwJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3kuYm90dG9tKCcwJyk7XG4gICAgfVxuXG4gICAgb3ZlcmxheUNvbmZpZy5wb3NpdGlvblN0cmF0ZWd5ID0gcG9zaXRpb25TdHJhdGVneTtcbiAgICByZXR1cm4gdGhpcy5fb3ZlcmxheS5jcmVhdGUob3ZlcmxheUNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbmplY3RvciB0byBiZSB1c2VkIGluc2lkZSBvZiBhIHNuYWNrIGJhciBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBjb25maWcgQ29uZmlnIHRoYXQgd2FzIHVzZWQgdG8gY3JlYXRlIHRoZSBzbmFjayBiYXIuXG4gICAqIEBwYXJhbSBzbmFja0JhclJlZiBSZWZlcmVuY2UgdG8gdGhlIHNuYWNrIGJhci5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlSW5qZWN0b3I8VD4oXG4gICAgY29uZmlnOiBCYW9TbmFja0JhckNvbmZpZyxcbiAgICBzbmFja0JhclJlZjogQmFvU25hY2tCYXJSZWY8VD5cbiAgKTogUG9ydGFsSW5qZWN0b3Ige1xuICAgIGNvbnN0IHVzZXJJbmplY3RvciA9XG4gICAgICBjb25maWcgJiYgY29uZmlnLnZpZXdDb250YWluZXJSZWYgJiYgY29uZmlnLnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3I7XG5cbiAgICByZXR1cm4gbmV3IFBvcnRhbEluamVjdG9yKFxuICAgICAgdXNlckluamVjdG9yIHx8IHRoaXMuX2luamVjdG9yLFxuICAgICAgbmV3IFdlYWtNYXA8YW55LCBhbnk+KFtcbiAgICAgICAgW0Jhb1NuYWNrQmFyUmVmLCBzbmFja0JhclJlZl0sXG4gICAgICAgIFtCQU9fU05BQ0tfQkFSX0RBVEEsIGNvbmZpZy5kYXRhXVxuICAgICAgXSlcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -24,4 +24,5 @@ export * from './lib/modal';
24
24
  export * from './lib/hyperlink';
25
25
  export * from './lib/dropdown-menu';
26
26
  export * from './lib/file';
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIzIFZpbGxlIGRlIE1vbnRyZWFsLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcHJvamVjdCByb290IGZvciBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCAqIGZyb20gJy4vbGliL2Jhby5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnV0dG9uL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ljb24vaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYWxlcnQvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYnJlYWRjcnVtYi9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jYXJkL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JhZGdlL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhZy9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9oZWFkZXItaW5mby9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9saXN0L2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NoZWNrYm94L2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JhZGlvL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbW1vbi1jb21wb25lbnRzL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3N1bW1hcnkvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2hhcmVkJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2F2YXRhcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWJzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2h5cGVybGluayc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kcm9wZG93bi1tZW51JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ZpbGUnO1xuIl19
27
+ export * from './lib/snack-bar';
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjMgVmlsbGUgZGUgTW9udHJlYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYmFvLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9idXR0b24vaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaWNvbi9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hbGVydC9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9icmVhZGNydW1iL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NhcmQvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYmFkZ2UvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFnL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2hlYWRlci1pbmZvL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2xpc3QvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2hlY2tib3gvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcmFkaW8vaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tbW9uLWNvbXBvbmVudHMvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3VtbWFyeS9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zaGFyZWQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXZhdGFyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaHlwZXJsaW5rJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Ryb3Bkb3duLW1lbnUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZmlsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zbmFjay1iYXInO1xuIl19