@villedemontreal/angular-ui 13.2.1 → 13.3.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.
- package/esm2020/lib/bao.module.mjs +12 -7
- package/esm2020/lib/core/breakpoints.mjs +13 -0
- package/esm2020/lib/core/index.mjs +8 -0
- package/esm2020/lib/dropdown-menu/dropdown-menu.component.mjs +10 -3
- package/esm2020/lib/modal/modal-container.mjs +2 -2
- package/esm2020/lib/snack-bar/index.mjs +12 -0
- package/esm2020/lib/snack-bar/module.mjs +54 -0
- package/esm2020/lib/snack-bar/simple-snack-bar.component.mjs +92 -0
- package/esm2020/lib/snack-bar/snack-bar-animations.mjs +28 -0
- package/esm2020/lib/snack-bar/snack-bar-config.mjs +37 -0
- package/esm2020/lib/snack-bar/snack-bar-container.mjs +272 -0
- package/esm2020/lib/snack-bar/snack-bar-ref.mjs +75 -0
- package/esm2020/lib/snack-bar/snack-bar.mjs +251 -0
- package/esm2020/lib/system-header/index.mjs +8 -0
- package/esm2020/lib/system-header/module.mjs +33 -0
- package/esm2020/lib/system-header/system-header.component.mjs +128 -0
- package/esm2020/public-api.mjs +3 -1
- package/fesm2015/villedemontreal-angular-ui.mjs +981 -15
- package/fesm2015/villedemontreal-angular-ui.mjs.map +1 -1
- package/fesm2020/villedemontreal-angular-ui.mjs +977 -15
- package/fesm2020/villedemontreal-angular-ui.mjs.map +1 -1
- package/lib/bao.module.d.ts +3 -1
- package/lib/core/breakpoints.d.ts +7 -0
- package/lib/core/index.d.ts +2 -0
- package/lib/snack-bar/index.d.ts +6 -0
- package/lib/snack-bar/module.d.ts +13 -0
- package/lib/snack-bar/simple-snack-bar.component.d.ts +51 -0
- package/lib/snack-bar/snack-bar-animations.d.ts +8 -0
- package/lib/snack-bar/snack-bar-config.d.ts +51 -0
- package/lib/snack-bar/snack-bar-container.d.ts +111 -0
- package/lib/snack-bar/snack-bar-ref.d.ts +51 -0
- package/lib/snack-bar/snack-bar.d.ts +89 -0
- package/lib/system-header/index.d.ts +2 -0
- package/lib/system-header/module.d.ts +9 -0
- package/lib/system-header/system-header.component.d.ts +41 -0
- package/package.json +1 -1
- package/public-api.d.ts +2 -0
|
@@ -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: "13.3.12", 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: "13.3.12", ngImport: i0, type: BaoSnackBarService, providedIn: 'root' });
|
|
240
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", 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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QixNQUFNOzJCQUFDLDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjMgVmlsbGUgZGUgTW9udHJlYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqL1xuaW1wb3J0IHsgTGl2ZUFubm91bmNlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1xuICBDb21wb25lbnRQb3J0YWwsXG4gIENvbXBvbmVudFR5cGUsXG4gIFBvcnRhbEluamVjdG9yLFxuICBUZW1wbGF0ZVBvcnRhbFxufSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7XG4gIENvbXBvbmVudFJlZixcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBJbmplY3QsXG4gIEluamVjdGFibGUsXG4gIEluamVjdGlvblRva2VuLFxuICBJbmplY3RvcixcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgU2tpcFNlbGYsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmFvU2ltcGxlU25hY2tCYXJDb21wb25lbnQsXG4gIElUZXh0T25seVNuYWNrQmFyXG59IGZyb20gJy4vc2ltcGxlLXNuYWNrLWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQkFPX1NOQUNLX0JBUl9EQVRBLCBCYW9TbmFja0JhckNvbmZpZyB9IGZyb20gJy4vc25hY2stYmFyLWNvbmZpZyc7XG5pbXBvcnQge1xuICBCYW9TbmFja0JhckNvbnRhaW5lckNvbXBvbmVudCxcbiAgSUJhb1NuYWNrQmFyQ29udGFpbmVyXG59IGZyb20gJy4vc25hY2stYmFyLWNvbnRhaW5lcic7XG5pbXBvcnQgeyBCYW9TbmFja0JhclJlZiB9IGZyb20gJy4vc25hY2stYmFyLXJlZic7XG5cbmV4cG9ydCBmdW5jdGlvbiBiYW9GYWN0b3J5KCkge1xuICByZXR1cm4gbmV3IEJhb1NuYWNrQmFyQ29uZmlnKCk7XG59XG5cbi8qKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGRlZmF1bHQgc25hY2sgYmFyLiAqL1xuZXhwb3J0IGNvbnN0IEJBT19TTkFDS19CQVJfREVGQVVMVF9PUFRJT05TID1cbiAgbmV3IEluamVjdGlvblRva2VuPEJhb1NuYWNrQmFyQ29uZmlnPignYmFvLXNuYWNrLWJhci1kZWZhdWx0LW9wdGlvbnMnLCB7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxuICAgIGZhY3Rvcnk6IGJhb0ZhY3RvcnlcbiAgfSk7XG5cbi8qKlxuICogU2VydmljZSB0byBkaXNwYXRjaCBNYXRlcmlhbCBEZXNpZ24gc25hY2sgYmFyIG1lc3NhZ2VzLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEJhb1NuYWNrQmFyU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKiBUaGUgY29tcG9uZW50IHRoYXQgc2hvdWxkIGJlIHJlbmRlcmVkIGFzIHRoZSBzbmFjayBiYXIncyBzaW1wbGUgY29tcG9uZW50LiAqL1xuICBwcm90ZWN0ZWQgc2ltcGxlU25hY2tCYXJDb21wb25lbnQ6IFR5cGU8SVRleHRPbmx5U25hY2tCYXI+ID1cbiAgICBCYW9TaW1wbGVTbmFja0JhckNvbXBvbmVudDtcblxuICAvKiogVGhlIGNvbnRhaW5lciBjb21wb25lbnQgdGhhdCBhdHRhY2hlcyB0aGUgcHJvdmlkZWQgdGVtcGxhdGUgb3IgY29tcG9uZW50LiAqL1xuICBwcm90ZWN0ZWQgc25hY2tCYXJDb250YWluZXJDb21wb25lbnQ6IFR5cGU8SUJhb1NuYWNrQmFyQ29udGFpbmVyPiA9XG4gICAgQmFvU25hY2tCYXJDb250YWluZXJDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBzbmFjayBiYXIgaW4gdGhlIHZpZXcgKmF0IHRoaXMgbGV2ZWwqIChpbiB0aGUgQW5ndWxhciBpbmplY3RvciB0cmVlKS5cbiAgICogSWYgdGhlcmUgaXMgYSBwYXJlbnQgc25hY2stYmFyIHNlcnZpY2UsIGFsbCBvcGVyYXRpb25zIHNob3VsZCBkZWxlZ2F0ZSB0byB0aGF0IHBhcmVudFxuICAgKiB2aWEgYF9vcGVuZWRTbmFja0JhclJlZmAuXG4gICAqL1xuICBwcml2YXRlIF9zbmFja0JhclJlZkF0VGhpc0xldmVsOiBCYW9TbmFja0JhclJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIF9saXZlOiBMaXZlQW5ub3VuY2VyLFxuICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBwcml2YXRlIF9wYXJlbnRTbmFja0JhcjogQmFvU25hY2tCYXJTZXJ2aWNlLFxuICAgIEBJbmplY3QoQkFPX1NOQUNLX0JBUl9ERUZBVUxUX09QVElPTlMpXG4gICAgcHJpdmF0ZSBfZGVmYXVsdENvbmZpZzogQmFvU25hY2tCYXJDb25maWdcbiAgKSB7fVxuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnRseSBvcGVuZWQgc25hY2tiYXIgYXQgKmFueSogbGV2ZWwuICovXG4gIGdldCBfb3BlbmVkU25hY2tCYXJSZWYoKTogQmFvU25hY2tCYXJSZWY8YW55PiB8IG51bGwge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX3BhcmVudFNuYWNrQmFyO1xuICAgIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuX29wZW5lZFNuYWNrQmFyUmVmIDogdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbDtcbiAgfVxuXG4gIHNldCBfb3BlbmVkU25hY2tCYXJSZWYodmFsdWU6IEJhb1NuYWNrQmFyUmVmPGFueT4gfCBudWxsKSB7XG4gICAgaWYgKHRoaXMuX3BhcmVudFNuYWNrQmFyKSB7XG4gICAgICB0aGlzLl9wYXJlbnRTbmFja0Jhci5fb3BlbmVkU25hY2tCYXJSZWYgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuZCBkaXNwYXRjaGVzIGEgc25hY2sgYmFyIHdpdGggYSBjdXN0b20gY29tcG9uZW50IGZvciB0aGUgY29udGVudCwgcmVtb3ZpbmcgYW55XG4gICAqIGN1cnJlbnRseSBvcGVuZWQgc25hY2sgYmFycy5cbiAgICpcbiAgICogQHBhcmFtIGNvbXBvbmVudCBDb21wb25lbnQgdG8gYmUgaW5zdGFudGlhdGVkLlxuICAgKiBAcGFyYW0gY29uZmlnIEV4dHJhIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBzbmFjayBiYXIuXG4gICAqL1xuICBwdWJsaWMgb3BlbkZyb21Db21wb25lbnQ8VD4oXG4gICAgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LFxuICAgIGNvbmZpZz86IEJhb1NuYWNrQmFyQ29uZmlnXG4gICk6IEJhb1NuYWNrQmFyUmVmPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5hdHRhY2goY29tcG9uZW50LCBjb25maWcpIGFzIEJhb1NuYWNrQmFyUmVmPFQ+O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW5kIGRpc3BhdGNoZXMgYSBzbmFjayBiYXIgd2l0aCBhIGN1c3RvbSB0ZW1wbGF0ZSBmb3IgdGhlIGNvbnRlbnQsIHJlbW92aW5nIGFueVxuICAgKiBjdXJyZW50bHkgb3BlbmVkIHNuYWNrIGJhcnMuXG4gICAqXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZSBUZW1wbGF0ZSB0byBiZSBpbnN0YW50aWF0ZWQuXG4gICAqIEBwYXJhbSBjb25maWcgRXh0cmEgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNuYWNrIGJhci5cbiAgICovXG4gIHB1YmxpYyBvcGVuRnJvbVRlbXBsYXRlKFxuICAgIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgIGNvbmZpZz86IEJhb1NuYWNrQmFyQ29uZmlnXG4gICk6IEJhb1NuYWNrQmFyUmVmPEVtYmVkZGVkVmlld1JlZjxhbnk+PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtcmV0dXJuXG4gICAgcmV0dXJuIHRoaXMuYXR0YWNoKHRlbXBsYXRlLCBjb25maWcpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIGEgc25hY2tiYXIgd2l0aCBhIG1lc3NhZ2UgYW5kIGFuIG9wdGlvbmFsIGFjdGlvbi5cbiAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gc2hvdyBpbiB0aGUgc25hY2tiYXIuXG4gICAqIEBwYXJhbSB0b2FzdFR5cGUgVGhlIHR5cGUgb2Ygb2YgdG9hc3QgdG8gZGlzcGxheSB0aGUgc25hY2tiYXIuXG4gICAqIEBwYXJhbSBhY3Rpb25MYWJlbE9ySWNvbiBUaGUgbGFiZWwgb3IgaWNvbiBmb3IgdGhlIHNuYWNrYmFyIGFjdGlvbi5cbiAgICogQHBhcmFtIHNob3dDbG9zZSBJZiB0cnVlLCB0aGUgc25hY2tiYXIgd2lsbCByZXF1aXJlIHVzZXIgaW50ZXJhY3Rpb24gdG8gY2xvc2UuXG4gICAqIEBwYXJhbSBjb25maWcgQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBzbmFja2Jhci5cbiAgICovXG4gIHB1YmxpYyBvcGVuKGNvbmZpZzogQmFvU25hY2tCYXJDb25maWcpOiBCYW9TbmFja0JhclJlZjxJVGV4dE9ubHlTbmFja0Jhcj4ge1xuICAgIGNvbnN0IF9jb25maWcgPSB7IC4uLnRoaXMuX2RlZmF1bHRDb25maWcsIC4uLmNvbmZpZyB9O1xuXG4gICAgLy8gU2luY2UgdGhlIHVzZXIgZG9lc24ndCBoYXZlIGFjY2VzcyB0byB0aGUgY29tcG9uZW50LCB3ZSBjYW5cbiAgICAvLyBvdmVycmlkZSB0aGUgZGF0YSB0byBwYXNzIGluIG91ciBvd24gbWVzc2FnZSwgYWN0aW9uIGFuZCB0eXBlLlxuICAgIF9jb25maWcuZGF0YSA9IHtcbiAgICAgIG1lc3NhZ2U6IF9jb25maWcubWVzc2FnZSxcbiAgICAgIHRvYXN0VHlwZTogX2NvbmZpZy50b2FzdFR5cGUsXG4gICAgICBhY3Rpb25MYWJlbE9ySWNvbjogX2NvbmZpZy5hY3Rpb25MYWJlbE9ySWNvbixcbiAgICAgIHNob3dDbG9zZTogX2NvbmZpZy5zaG93Q2xvc2VcbiAgICB9O1xuXG4gICAgaWYgKF9jb25maWcuc2hvd0Nsb3NlKSBfY29uZmlnLmR1cmF0aW9uID0gMDtcblxuICAgIGlmICghX2NvbmZpZy5hbm5vdW5jZW1lbnRNZXNzYWdlKSB7XG4gICAgICBfY29uZmlnLmFubm91bmNlbWVudE1lc3NhZ2UgPSBfY29uZmlnLm1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMub3BlbkZyb21Db21wb25lbnQodGhpcy5zaW1wbGVTbmFja0JhckNvbXBvbmVudCwgX2NvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogRGlzbWlzc2VzIHRoZSBjdXJyZW50bHktdmlzaWJsZSBzbmFjayBiYXIuXG4gICAqL1xuICBwdWJsaWMgZGlzbWlzcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fb3BlbmVkU25hY2tCYXJSZWYpIHtcbiAgICAgIHRoaXMuX29wZW5lZFNuYWNrQmFyUmVmLmRpc21pc3MoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgLy8gT25seSBkaXNtaXNzIHRoZSBzbmFjayBiYXIgYXQgdGhlIGN1cnJlbnQgbGV2ZWwgb24gZGVzdHJveS5cbiAgICBpZiAodGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbCkge1xuICAgICAgdGhpcy5fc25hY2tCYXJSZWZBdFRoaXNMZXZlbC5kaXNtaXNzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaGVzIHRoZSBzbmFjayBiYXIgY29udGFpbmVyIGNvbXBvbmVudCB0byB0aGUgb3ZlcmxheS5cbiAgICovXG4gIHByaXZhdGUgYXR0YWNoU25hY2tCYXJDb250YWluZXIoXG4gICAgb3ZlcmxheVJlZjogT3ZlcmxheVJlZixcbiAgICBjb25maWc6IEJhb1NuYWNrQmFyQ29uZmlnXG4gICk6IElCYW9TbmFja0JhckNvbnRhaW5lciB7XG4gICAgY29uc3QgdXNlckluamVjdG9yID1cbiAgICAgIGNvbmZpZyAmJiBjb25maWcudmlld0NvbnRhaW5lclJlZiAmJiBjb25maWcudmlld0NvbnRhaW5lclJlZi5pbmplY3RvcjtcbiAgICBjb25zdCBpbmplY3RvciA9IG5ldyBQb3J0YWxJbmplY3RvcihcbiAgICAgIHVzZXJJbmplY3RvciB8fCB0aGlzLl9pbmplY3RvcixcbiAgICAgIG5ldyBXZWFrTWFwKFtbQmFvU25hY2tCYXJDb25maWcsIGNvbmZpZ11dKVxuICAgICk7XG5cbiAgICBjb25zdCBjb250YWluZXJQb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKFxuICAgICAgdGhpcy5zbmFja0JhckNvbnRhaW5lckNvbXBvbmVudCxcbiAgICAgIGNvbmZpZy52aWV3Q29udGFpbmVyUmVmLFxuICAgICAgaW5qZWN0b3JcbiAgICApO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlZjogQ29tcG9uZW50UmVmPElCYW9TbmFja0JhckNvbnRhaW5lcj4gPVxuICAgICAgb3ZlcmxheVJlZi5hdHRhY2goY29udGFpbmVyUG9ydGFsKTtcbiAgICBjb250YWluZXJSZWYuaW5zdGFuY2Uuc25hY2tCYXJDb25maWcgPSBjb25maWc7XG4gICAgcmV0dXJuIGNvbnRhaW5lclJlZi5pbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQbGFjZXMgYSBuZXcgY29tcG9uZW50IG9yIGEgdGVtcGxhdGUgYXMgdGhlIGNvbnRlbnQgb2YgdGhlIHNuYWNrIGJhciBjb250YWluZXIuXG4gICAqL1xuICBwcml2YXRlIGF0dGFjaDxUPihcbiAgICBjb250ZW50OiBDb21wb25lbnRUeXBlPFQ+IHwgVGVtcGxhdGVSZWY8VD4sXG4gICAgdXNlckNvbmZpZz86IEJhb1NuYWNrQmFyQ29uZmlnXG4gICk6IEJhb1NuYWNrQmFyUmVmPFQgfCBFbWJlZGRlZFZpZXdSZWY8YW55Pj4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIC4uLm5ldyBCYW9TbmFja0JhckNvbmZpZygpLFxuICAgICAgLi4udGhpcy5fZGVmYXVsdENvbmZpZyxcbiAgICAgIC4uLnVzZXJDb25maWdcbiAgICB9O1xuICAgIGNvbnN0IG92ZXJsYXlSZWYgPSB0aGlzLmNyZWF0ZU92ZXJsYXkoY29uZmlnKTtcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmF0dGFjaFNuYWNrQmFyQ29udGFpbmVyKG92ZXJsYXlSZWYsIGNvbmZpZyk7XG4gICAgY29uc3Qgc25hY2tCYXJSZWYgPSBuZXcgQmFvU25hY2tCYXJSZWY8VCB8IEVtYmVkZGVkVmlld1JlZjxhbnk+PihcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIG92ZXJsYXlSZWZcbiAgICApO1xuXG4gICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgIGNvbnN0IHBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbChjb250ZW50LCBudWxsISwge1xuICAgICAgICAkaW1wbGljaXQ6IGNvbmZpZy5kYXRhLFxuICAgICAgICBzbmFja0JhclJlZlxuICAgICAgfSBhcyBhbnkpO1xuXG4gICAgICBzbmFja0JhclJlZi5pbnN0YW5jZSA9IGNvbnRhaW5lci5hdHRhY2hUZW1wbGF0ZVBvcnRhbChwb3J0YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbmplY3RvciA9IHRoaXMuY3JlYXRlSW5qZWN0b3IoY29uZmlnLCBzbmFja0JhclJlZik7XG4gICAgICBjb25zdCBwb3J0YWwgPSBuZXcgQ29tcG9uZW50UG9ydGFsKGNvbnRlbnQsIHVuZGVmaW5lZCwgaW5qZWN0b3IpO1xuICAgICAgY29uc3QgY29udGVudFJlZiA9IGNvbnRhaW5lci5hdHRhY2hDb21wb25lbnRQb3J0YWw8VD4ocG9ydGFsKTtcblxuICAgICAgLy8gV2UgY2FuJ3QgcGFzcyB0aGlzIHZpYSB0aGUgaW5qZWN0b3IsIGJlY2F1c2UgdGhlIGluamVjdG9yIGlzIGNyZWF0ZWQgZWFybGllci5cbiAgICAgIHNuYWNrQmFyUmVmLmluc3RhbmNlID0gY29udGVudFJlZi5pbnN0YW5jZTtcbiAgICB9XG5cbiAgICB0aGlzLmFuaW1hdGVTbmFja0JhcihzbmFja0JhclJlZiwgY29uZmlnKTtcbiAgICB0aGlzLl9vcGVuZWRTbmFja0JhclJlZiA9IHNuYWNrQmFyUmVmO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVyblxuICAgIHJldHVybiB0aGlzLl9vcGVuZWRTbmFja0JhclJlZjtcbiAgfVxuXG4gIC8qKiBBbmltYXRlcyB0aGUgb2xkIHNuYWNrIGJhciBvdXQgYW5kIHRoZSBuZXcgb25lIGluLiAqL1xuICBwcml2YXRlIGFuaW1hdGVTbmFja0JhcihcbiAgICBzbmFja0JhclJlZjogQmFvU25hY2tCYXJSZWY8YW55PixcbiAgICBjb25maWc6IEJhb1NuYWNrQmFyQ29uZmlnXG4gICkge1xuICAgIC8vIFdoZW4gdGhlIHNuYWNrYmFyIGlzIGRpc21pc3NlZCwgY2xlYXIgdGhlIHJlZmVyZW5jZSB0byBpdC5cbiAgICBzbmFja0JhclJlZi5hZnRlckRpc21pc3NlZCgpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAvLyBDbGVhciB0aGUgc25hY2tiYXIgcmVmIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gcmVwbGFjZWQgYnkgYSBuZXdlciBzbmFja2Jhci5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgIGlmICh0aGlzLl9vcGVuZWRTbmFja0JhclJlZiA9PSBzbmFja0JhclJlZikge1xuICAgICAgICB0aGlzLl9vcGVuZWRTbmFja0JhclJlZiA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuYW5ub3VuY2VtZW50TWVzc2FnZSkge1xuICAgICAgICB0aGlzLl9saXZlLmNsZWFyKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5fb3BlbmVkU25hY2tCYXJSZWYpIHtcbiAgICAgIC8vIElmIGEgc25hY2sgYmFyIGlzIGFscmVhZHkgaW4gdmlldywgZGlzbWlzcyBpdCBhbmQgZW50ZXIgdGhlXG4gICAgICAvLyBuZXcgc25hY2sgYmFyIGFmdGVyIGV4aXQgYW5pbWF0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAgdGhpcy5fb3BlbmVkU25hY2tCYXJSZWYuYWZ0ZXJEaXNtaXNzZWQoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBzbmFja0JhclJlZi5jb250YWluZXJJbnN0YW5jZS5lbnRlcigpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9vcGVuZWRTbmFja0JhclJlZi5kaXNtaXNzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vIHNuYWNrIGJhciBpcyBpbiB2aWV3LCBlbnRlciB0aGUgbmV3IHNuYWNrIGJhci5cbiAgICAgIHNuYWNrQmFyUmVmLmNvbnRhaW5lckluc3RhbmNlLmVudGVyKCk7XG4gICAgfVxuXG4gICAgLy8gSWYgYSBkaXNtaXNzIHRpbWVvdXQgaXMgcHJvdmlkZWQsIHNldCB1cCBkaXNtaXNzIGJhc2VkIG9uIGFmdGVyIHRoZSBzbmFja2JhciBpcyBvcGVuZWQuXG4gICAgaWYgKGNvbmZpZy5kdXJhdGlvbiAmJiBjb25maWcuZHVyYXRpb24gPiAwKSB7XG4gICAgICBzbmFja0JhclJlZlxuICAgICAgICAuYWZ0ZXJPcGVuZWQoKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHNuYWNrQmFyUmVmLmRpc21pc3NBZnRlcihjb25maWcuZHVyYXRpb24pKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLmFubm91bmNlbWVudE1lc3NhZ2UpIHtcbiAgICAgIHZvaWQgdGhpcy5fbGl2ZS5hbm5vdW5jZShjb25maWcuYW5ub3VuY2VtZW50TWVzc2FnZSwgY29uZmlnLnBvbGl0ZW5lc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IG92ZXJsYXkgYW5kIHBsYWNlcyBpdCBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbi5cbiAgICogQHBhcmFtIGNvbmZpZyBUaGUgdXNlci1zcGVjaWZpZWQgc25hY2sgYmFyIGNvbmZpZy5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlT3ZlcmxheShjb25maWc6IEJhb1NuYWNrQmFyQ29uZmlnKTogT3ZlcmxheVJlZiB7XG4gICAgY29uc3Qgb3ZlcmxheUNvbmZpZyA9IG5ldyBPdmVybGF5Q29uZmlnKCk7XG4gICAgb3ZlcmxheUNvbmZpZy5kaXJlY3Rpb24gPSBjb25maWcuZGlyZWN0aW9uO1xuXG4gICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMuX292ZXJsYXkucG9zaXRpb24oKS5nbG9iYWwoKTtcbiAgICAvLyBTZXQgaG9yaXpvbnRhbCBwb3NpdGlvbi5cbiAgICBjb25zdCBpc1J0bCA9IGNvbmZpZy5kaXJlY3Rpb24gPT09ICdydGwnO1xuICAgIGNvbnN0IGlzTGVmdCA9XG4gICAgICBjb25maWcuaG9yaXpvbnRhbFBvc2l0aW9uID09PSAnbGVmdCcgfHxcbiAgICAgIChjb25maWcuaG9yaXpvbnRhbFBvc2l0aW9uID09PSAnc3RhcnQnICYmICFpc1J0bCkgfHxcbiAgICAgIChjb25maWcuaG9yaXpvbnRhbFBvc2l0aW9uID09PSAnZW5kJyAmJiBpc1J0bCk7XG4gICAgY29uc3QgaXNSaWdodCA9ICFpc0xlZnQgJiYgY29uZmlnLmhvcml6b250YWxQb3NpdGlvbiAhPT0gJ2NlbnRlcic7XG4gICAgaWYgKGlzTGVmdCkge1xuICAgICAgcG9zaXRpb25TdHJhdGVneS5sZWZ0KCcwJyk7XG4gICAgfSBlbHNlIGlmIChpc1JpZ2h0KSB7XG4gICAgICBwb3NpdGlvblN0cmF0ZWd5LnJpZ2h0KCcwJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3kuY2VudGVySG9yaXpvbnRhbGx5KCk7XG4gICAgfVxuICAgIC8vIFNldCBob3Jpem9udGFsIHBvc2l0aW9uLlxuICAgIGlmIChjb25maWcudmVydGljYWxQb3NpdGlvbiA9PT0gJ3RvcCcpIHtcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3kudG9wKCcwJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3kuYm90dG9tKCcwJyk7XG4gICAgfVxuXG4gICAgb3ZlcmxheUNvbmZpZy5wb3NpdGlvblN0cmF0ZWd5ID0gcG9zaXRpb25TdHJhdGVneTtcbiAgICByZXR1cm4gdGhpcy5fb3ZlcmxheS5jcmVhdGUob3ZlcmxheUNvbmZpZyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbmplY3RvciB0byBiZSB1c2VkIGluc2lkZSBvZiBhIHNuYWNrIGJhciBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBjb25maWcgQ29uZmlnIHRoYXQgd2FzIHVzZWQgdG8gY3JlYXRlIHRoZSBzbmFjayBiYXIuXG4gICAqIEBwYXJhbSBzbmFja0JhclJlZiBSZWZlcmVuY2UgdG8gdGhlIHNuYWNrIGJhci5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlSW5qZWN0b3I8VD4oXG4gICAgY29uZmlnOiBCYW9TbmFja0JhckNvbmZpZyxcbiAgICBzbmFja0JhclJlZjogQmFvU25hY2tCYXJSZWY8VD5cbiAgKTogUG9ydGFsSW5qZWN0b3Ige1xuICAgIGNvbnN0IHVzZXJJbmplY3RvciA9XG4gICAgICBjb25maWcgJiYgY29uZmlnLnZpZXdDb250YWluZXJSZWYgJiYgY29uZmlnLnZpZXdDb250YWluZXJSZWYuaW5qZWN0b3I7XG5cbiAgICByZXR1cm4gbmV3IFBvcnRhbEluamVjdG9yKFxuICAgICAgdXNlckluamVjdG9yIHx8IHRoaXMuX2luamVjdG9yLFxuICAgICAgbmV3IFdlYWtNYXA8YW55LCBhbnk+KFtcbiAgICAgICAgW0Jhb1NuYWNrQmFyUmVmLCBzbmFja0JhclJlZl0sXG4gICAgICAgIFtCQU9fU05BQ0tfQkFSX0RBVEEsIGNvbmZpZy5kYXRhXVxuICAgICAgXSlcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023 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 './system-header.component';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXVpL3NyYy9saWIvc3lzdGVtLWhlYWRlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYywyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjMgVmlsbGUgZGUgTW9udHJlYWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKiBTZWUgTElDRU5TRSBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zeXN0ZW0taGVhZGVyLmNvbXBvbmVudCc7XG4iXX0=
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023 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 { BaoBackNavigationInsert, BaoSystemHeaderComponent, BaoBackNavigationComponent } from './system-header.component';
|
|
9
|
+
import { BaoIconModule } from '../icon';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
const SYSTEM_HEADER_DIRECTIVES = [
|
|
12
|
+
BaoSystemHeaderComponent,
|
|
13
|
+
BaoBackNavigationInsert,
|
|
14
|
+
BaoBackNavigationComponent
|
|
15
|
+
];
|
|
16
|
+
export class BaoSystemHeaderModule {
|
|
17
|
+
}
|
|
18
|
+
BaoSystemHeaderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoSystemHeaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
19
|
+
BaoSystemHeaderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoSystemHeaderModule, declarations: [BaoSystemHeaderComponent,
|
|
20
|
+
BaoBackNavigationInsert,
|
|
21
|
+
BaoBackNavigationComponent], imports: [CommonModule, BaoIconModule], exports: [BaoSystemHeaderComponent,
|
|
22
|
+
BaoBackNavigationInsert,
|
|
23
|
+
BaoBackNavigationComponent] });
|
|
24
|
+
BaoSystemHeaderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoSystemHeaderModule, imports: [[CommonModule, BaoIconModule]] });
|
|
25
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoSystemHeaderModule, decorators: [{
|
|
26
|
+
type: NgModule,
|
|
27
|
+
args: [{
|
|
28
|
+
imports: [CommonModule, BaoIconModule],
|
|
29
|
+
declarations: [SYSTEM_HEADER_DIRECTIVES],
|
|
30
|
+
exports: [SYSTEM_HEADER_DIRECTIVES]
|
|
31
|
+
}]
|
|
32
|
+
}] });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci11aS9zcmMvbGliL3N5c3RlbS1oZWFkZXIvbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHdCQUF3QixFQUN4QiwwQkFBMEIsRUFDM0IsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUV4QyxNQUFNLHdCQUF3QixHQUFHO0lBQy9CLHdCQUF3QjtJQUN4Qix1QkFBdUI7SUFDdkIsMEJBQTBCO0NBQzNCLENBQUM7QUFPRixNQUFNLE9BQU8scUJBQXFCOzttSEFBckIscUJBQXFCO29IQUFyQixxQkFBcUIsaUJBVmhDLHdCQUF3QjtRQUN4Qix1QkFBdUI7UUFDdkIsMEJBQTBCLGFBSWhCLFlBQVksRUFBRSxhQUFhLGFBTnJDLHdCQUF3QjtRQUN4Qix1QkFBdUI7UUFDdkIsMEJBQTBCO29IQVFmLHFCQUFxQixZQUp2QixDQUFDLFlBQVksRUFBRSxhQUFhLENBQUM7NEZBSTNCLHFCQUFxQjtrQkFMakMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDO29CQUN0QyxZQUFZLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQztvQkFDeEMsT0FBTyxFQUFFLENBQUMsd0JBQXdCLENBQUM7aUJBQ3BDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMyBWaWxsZSBkZSBNb250cmVhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIFNlZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICovXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJhb0JhY2tOYXZpZ2F0aW9uSW5zZXJ0LFxuICBCYW9TeXN0ZW1IZWFkZXJDb21wb25lbnQsXG4gIEJhb0JhY2tOYXZpZ2F0aW9uQ29tcG9uZW50XG59IGZyb20gJy4vc3lzdGVtLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmFvSWNvbk1vZHVsZSB9IGZyb20gJy4uL2ljb24nO1xuXG5jb25zdCBTWVNURU1fSEVBREVSX0RJUkVDVElWRVMgPSBbXG4gIEJhb1N5c3RlbUhlYWRlckNvbXBvbmVudCxcbiAgQmFvQmFja05hdmlnYXRpb25JbnNlcnQsXG4gIEJhb0JhY2tOYXZpZ2F0aW9uQ29tcG9uZW50XG5dO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBCYW9JY29uTW9kdWxlXSxcbiAgZGVjbGFyYXRpb25zOiBbU1lTVEVNX0hFQURFUl9ESVJFQ1RJVkVTXSxcbiAgZXhwb3J0czogW1NZU1RFTV9IRUFERVJfRElSRUNUSVZFU11cbn0pXG5leHBvcnQgY2xhc3MgQmFvU3lzdGVtSGVhZGVyTW9kdWxlIHt9XG4iXX0=
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Directive, Input, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import { Breakpoints } from '../core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../icon/icon.component";
|
|
5
|
+
import * as i2 from "@angular/cdk/layout";
|
|
6
|
+
/**
|
|
7
|
+
* This component is dynamically added to replace breadcrumb when System Header is viewed on tablet or mobile screens.
|
|
8
|
+
* Used internally by BaoSystemHeaderComponent only, not to be used by host application.
|
|
9
|
+
*/
|
|
10
|
+
export class BaoBackNavigationComponent {
|
|
11
|
+
constructor(renderer, elementRef) {
|
|
12
|
+
this.renderer = renderer;
|
|
13
|
+
this.elementRef = elementRef;
|
|
14
|
+
}
|
|
15
|
+
ngOnChanges(changes) {
|
|
16
|
+
if (changes['link'] && changes['link'].currentValue) {
|
|
17
|
+
this.renderer.setAttribute(this.elementRef.nativeElement.children[0], 'href', changes['link'].currentValue);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
BaoBackNavigationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoBackNavigationComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
22
|
+
BaoBackNavigationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: BaoBackNavigationComponent, selector: "bao-back-navigation-component", inputs: { link: "link" }, host: { classAttribute: "bao-system-header-back-button" }, usesOnChanges: true, ngImport: i0, template: ` <a>
|
|
23
|
+
<bao-icon
|
|
24
|
+
color="action"
|
|
25
|
+
title="arrow-left"
|
|
26
|
+
svgIcon="icon-arrow-left"
|
|
27
|
+
size="x-small"
|
|
28
|
+
></bao-icon>
|
|
29
|
+
</a>`, isInline: true, components: [{ type: i1.BaoIconComponent, selector: "bao-icon", inputs: ["color", "size", "svgIcon", "title"], exportAs: ["baoIcon"] }] });
|
|
30
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoBackNavigationComponent, decorators: [{
|
|
31
|
+
type: Component,
|
|
32
|
+
args: [{
|
|
33
|
+
selector: 'bao-back-navigation-component',
|
|
34
|
+
template: ` <a>
|
|
35
|
+
<bao-icon
|
|
36
|
+
color="action"
|
|
37
|
+
title="arrow-left"
|
|
38
|
+
svgIcon="icon-arrow-left"
|
|
39
|
+
size="x-small"
|
|
40
|
+
></bao-icon>
|
|
41
|
+
</a>`,
|
|
42
|
+
host: {
|
|
43
|
+
class: 'bao-system-header-back-button'
|
|
44
|
+
}
|
|
45
|
+
}]
|
|
46
|
+
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }]; }, propDecorators: { link: [{
|
|
47
|
+
type: Input
|
|
48
|
+
}] } });
|
|
49
|
+
/**
|
|
50
|
+
* This directive is to mark the template where the BaoBackNavigationComponent should be dynamically inserted,
|
|
51
|
+
* when a Breadcrumb component needs to be replaced
|
|
52
|
+
*/
|
|
53
|
+
export class BaoBackNavigationInsert {
|
|
54
|
+
constructor(viewContainerRef) {
|
|
55
|
+
this.viewContainerRef = viewContainerRef;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
BaoBackNavigationInsert.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoBackNavigationInsert, deps: [{ token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
59
|
+
BaoBackNavigationInsert.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.12", type: BaoBackNavigationInsert, selector: "[backNavigationInsert]", ngImport: i0 });
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoBackNavigationInsert, decorators: [{
|
|
61
|
+
type: Directive,
|
|
62
|
+
args: [{
|
|
63
|
+
selector: '[backNavigationInsert]'
|
|
64
|
+
}]
|
|
65
|
+
}], ctorParameters: function () { return [{ type: i0.ViewContainerRef }]; } });
|
|
66
|
+
export class BaoSystemHeaderComponent {
|
|
67
|
+
constructor(breakpointObserver, renderer) {
|
|
68
|
+
this.breakpointObserver = breakpointObserver;
|
|
69
|
+
this.renderer = renderer;
|
|
70
|
+
this.screenType = 'desktop';
|
|
71
|
+
}
|
|
72
|
+
get textContainerChildren() {
|
|
73
|
+
return Array.from(this.textContainer.nativeElement.children);
|
|
74
|
+
}
|
|
75
|
+
ngOnInit() {
|
|
76
|
+
if ([Breakpoints.XSmall, Breakpoints.Small].some(size => this.breakpointObserver.isMatched(size))) {
|
|
77
|
+
this.screenType = 'mobile';
|
|
78
|
+
}
|
|
79
|
+
else if (this.breakpointObserver.isMatched(Breakpoints.Medium)) {
|
|
80
|
+
this.screenType = 'tablet';
|
|
81
|
+
}
|
|
82
|
+
else if ([Breakpoints.Large, Breakpoints.XLarge].some(size => this.breakpointObserver.isMatched(size))) {
|
|
83
|
+
this.screenType = 'desktop';
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
ngAfterViewInit() {
|
|
87
|
+
this.formatNavigation();
|
|
88
|
+
this.applySizeClass();
|
|
89
|
+
}
|
|
90
|
+
formatNavigation() {
|
|
91
|
+
// If view is rendered on a mobile/tablet screen
|
|
92
|
+
if (this.screenType == 'mobile' || this.screenType == 'tablet') {
|
|
93
|
+
if (this.textContainerChildren[0].className == 'bao-breadcrumb') {
|
|
94
|
+
// Retrieve link of parent page
|
|
95
|
+
const breadcrumbElementsList = this.textContainerChildren[0].children[0];
|
|
96
|
+
const breadcrumbLength = breadcrumbElementsList.children.length;
|
|
97
|
+
const parentLink = breadcrumbElementsList.children[breadcrumbLength - 2].attributes['href'].value;
|
|
98
|
+
// Remove Breadcrumb component and replace it with back button
|
|
99
|
+
this.renderer.removeChild(this.textContainer.nativeElement, this.textContainerChildren[0]);
|
|
100
|
+
const viewContainerRef = this.backButtonInsert.viewContainerRef;
|
|
101
|
+
viewContainerRef.clear();
|
|
102
|
+
const componentRef = viewContainerRef.createComponent(BaoBackNavigationComponent);
|
|
103
|
+
componentRef.instance.link = parentLink;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
applySizeClass() {
|
|
108
|
+
const tagInfoContainer = this.textContainer.nativeElement.childNodes[this.textContainerChildren.length - 1];
|
|
109
|
+
if (this.screenType === 'mobile') {
|
|
110
|
+
this.renderer.addClass(tagInfoContainer, 'mobile');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
BaoSystemHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoSystemHeaderComponent, deps: [{ token: i2.BreakpointObserver }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
115
|
+
BaoSystemHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: BaoSystemHeaderComponent, selector: "bao-system-header", host: { classAttribute: "bao-system-header" }, viewQueries: [{ propertyName: "textContainer", first: true, predicate: ["textContainer"], descendants: true }, { propertyName: "backButtonInsert", first: true, predicate: BaoBackNavigationInsert, descendants: true, static: true }], ngImport: i0, template: "<div class=\"left-side-content\">\n <div class=\"back-navigation-container\">\n <ng-content select=\"a\"></ng-content>\n <ng-template backNavigationInsert></ng-template>\n </div>\n <div #textContainer class=\"text-content\">\n <ng-content select=\"bao-breadcrumb\"></ng-content>\n <ng-content select=\"h1\"></ng-content>\n <div class=\"tag-info-container\">\n <ng-content select=\"bao-tag\"></ng-content>\n <span class=\"additional-info\">\n <ng-content select=\"span\"></ng-content>\n </span>\n </div>\n </div>\n</div>\n<div class=\"button-container\">\n <ng-content></ng-content>\n</div>\n", styles: ["@charset \"UTF-8\";.bao-container{padding-right:16px;padding-left:16px;margin-right:auto;margin-left:auto;width:100%}@media (min-width: 576px){.bao-container{max-width:576px}}@media (min-width: 768px){.bao-container{max-width:768px}}@media (min-width: 992px){.bao-container{max-width:992px}}@media (min-width: 1200px){.bao-container{max-width:1200px}}.bao-row{display:flex;flex-wrap:wrap;margin-right:-16px;margin-left:-16px}.bao-col-12,.bao-col-lg-7{position:relative;width:100%;padding-right:1rem;padding-left:1rem}@media (min-width: 992px){.bao-col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}}.bao-system-header{display:flex;justify-content:flex-start}.bao-system-header .left-side-content{display:inline-flex;width:75%}.bao-system-header .left-side-content .back-navigation-container a{margin-right:1.25rem;border-bottom:none}.bao-system-header .left-side-content .back-navigation-container a:hover{cursor:pointer}.bao-system-header .left-side-content .text-content{width:100%}.bao-system-header .left-side-content .text-content h1{font-weight:700;color:#212529;font-size:1.5rem;line-height:2rem;margin-bottom:.5rem}.bao-system-header .left-side-content .text-content .tag-info-container{width:100%;display:block}.bao-system-header .left-side-content .text-content .tag-info-container>span:nth-child(2):before{content:\"\\b7\";margin:0 .5rem}.bao-system-header .left-side-content .text-content .tag-info-container .additional-info>*{font-weight:400;font-size:.875rem;line-height:1.25rem}.bao-system-header .left-side-content .text-content .tag-info-container.mobile .bao-tag{margin-bottom:.25rem}.bao-system-header .left-side-content .text-content .tag-info-container.mobile .additional-info{display:block}.bao-system-header .left-side-content .text-content .tag-info-container.mobile .additional-info:before{content:none}.bao-system-header .left-side-content .text-content .tag-info-container>.bao-tag{max-width:100%}.bao-system-header .left-side-content .text-content .tag-info-container>.bao-tag>span{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bao-system-header .button-container{flex-shrink:0;margin-left:auto}.bao-system-header .button-container .bao-button{margin-left:1rem}\n"], directives: [{ type: BaoBackNavigationInsert, selector: "[backNavigationInsert]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
116
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: BaoSystemHeaderComponent, decorators: [{
|
|
117
|
+
type: Component,
|
|
118
|
+
args: [{ selector: 'bao-system-header', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
119
|
+
class: 'bao-system-header'
|
|
120
|
+
}, template: "<div class=\"left-side-content\">\n <div class=\"back-navigation-container\">\n <ng-content select=\"a\"></ng-content>\n <ng-template backNavigationInsert></ng-template>\n </div>\n <div #textContainer class=\"text-content\">\n <ng-content select=\"bao-breadcrumb\"></ng-content>\n <ng-content select=\"h1\"></ng-content>\n <div class=\"tag-info-container\">\n <ng-content select=\"bao-tag\"></ng-content>\n <span class=\"additional-info\">\n <ng-content select=\"span\"></ng-content>\n </span>\n </div>\n </div>\n</div>\n<div class=\"button-container\">\n <ng-content></ng-content>\n</div>\n", styles: ["@charset \"UTF-8\";.bao-container{padding-right:16px;padding-left:16px;margin-right:auto;margin-left:auto;width:100%}@media (min-width: 576px){.bao-container{max-width:576px}}@media (min-width: 768px){.bao-container{max-width:768px}}@media (min-width: 992px){.bao-container{max-width:992px}}@media (min-width: 1200px){.bao-container{max-width:1200px}}.bao-row{display:flex;flex-wrap:wrap;margin-right:-16px;margin-left:-16px}.bao-col-12,.bao-col-lg-7{position:relative;width:100%;padding-right:1rem;padding-left:1rem}@media (min-width: 992px){.bao-col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}}.bao-system-header{display:flex;justify-content:flex-start}.bao-system-header .left-side-content{display:inline-flex;width:75%}.bao-system-header .left-side-content .back-navigation-container a{margin-right:1.25rem;border-bottom:none}.bao-system-header .left-side-content .back-navigation-container a:hover{cursor:pointer}.bao-system-header .left-side-content .text-content{width:100%}.bao-system-header .left-side-content .text-content h1{font-weight:700;color:#212529;font-size:1.5rem;line-height:2rem;margin-bottom:.5rem}.bao-system-header .left-side-content .text-content .tag-info-container{width:100%;display:block}.bao-system-header .left-side-content .text-content .tag-info-container>span:nth-child(2):before{content:\"\\b7\";margin:0 .5rem}.bao-system-header .left-side-content .text-content .tag-info-container .additional-info>*{font-weight:400;font-size:.875rem;line-height:1.25rem}.bao-system-header .left-side-content .text-content .tag-info-container.mobile .bao-tag{margin-bottom:.25rem}.bao-system-header .left-side-content .text-content .tag-info-container.mobile .additional-info{display:block}.bao-system-header .left-side-content .text-content .tag-info-container.mobile .additional-info:before{content:none}.bao-system-header .left-side-content .text-content .tag-info-container>.bao-tag{max-width:100%}.bao-system-header .left-side-content .text-content .tag-info-container>.bao-tag>span{width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bao-system-header .button-container{flex-shrink:0;margin-left:auto}.bao-system-header .button-container .bao-button{margin-left:1rem}\n"] }]
|
|
121
|
+
}], ctorParameters: function () { return [{ type: i2.BreakpointObserver }, { type: i0.Renderer2 }]; }, propDecorators: { textContainer: [{
|
|
122
|
+
type: ViewChild,
|
|
123
|
+
args: ['textContainer', { static: false }]
|
|
124
|
+
}], backButtonInsert: [{
|
|
125
|
+
type: ViewChild,
|
|
126
|
+
args: [BaoBackNavigationInsert, { static: true }]
|
|
127
|
+
}] } });
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLXVpL3NyYy9saWIvc3lzdGVtLWhlYWRlci9zeXN0ZW0taGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL2xpYi9zeXN0ZW0taGVhZGVyL3N5c3RlbS1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsU0FBUyxFQUVULEtBQUssRUFLTCxTQUFTLEVBRVQsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7Ozs7QUFFdEM7OztHQUdHO0FBZUgsTUFBTSxPQUFPLDBCQUEwQjtJQUVyQyxZQUNVLFFBQW1CLEVBQ25CLFVBQW1DO1FBRG5DLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBeUI7SUFDMUMsQ0FBQztJQUVKLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxFQUFFO1lBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQ3pDLE1BQU0sRUFDTixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsWUFBWSxDQUM3QixDQUFDO1NBQ0g7SUFDSCxDQUFDOzt3SEFmVSwwQkFBMEI7NEdBQTFCLDBCQUEwQiwrS0FaM0I7Ozs7Ozs7T0FPTDs0RkFLTSwwQkFBMEI7a0JBZHRDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLCtCQUErQjtvQkFDekMs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QUFlLENBQ25ELDBCQUEwQixDQUMzQixDQUFDO2dCQUNGLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQzthQUN6QztTQUNGO0lBQ0gsQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxnQkFBZ0IsR0FDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUN6QyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDdEMsQ0FBQztRQUNKLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxRQUFRLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDcEQ7SUFDSCxDQUFDOztzSEEzRVUsd0JBQXdCOzBHQUF4Qix3QkFBd0IsMlBBR3hCLHVCQUF1Qiw4RENuRnBDLDhuQkFtQkEsMnNFRCtDYSx1QkFBdUI7NEZBY3ZCLHdCQUF3QjtrQkFWcEMsU0FBUzsrQkFDRSxtQkFBbUIsaUJBR2QsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDSixLQUFLLEVBQUUsbUJBQW1CO3FCQUMzQjtpSUFJTyxhQUFhO3NCQURwQixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR3JDLGdCQUFnQjtzQkFEdkIsU0FBUzt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIzIFZpbGxlIGRlIE1vbnRyZWFsLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICogU2VlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcHJvamVjdCByb290IGZvciBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG4gKi9cbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJyZWFrcG9pbnRzIH0gZnJvbSAnLi4vY29yZSc7XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaXMgZHluYW1pY2FsbHkgYWRkZWQgdG8gcmVwbGFjZSBicmVhZGNydW1iIHdoZW4gU3lzdGVtIEhlYWRlciBpcyB2aWV3ZWQgb24gdGFibGV0IG9yIG1vYmlsZSBzY3JlZW5zLlxuICogVXNlZCBpbnRlcm5hbGx5IGJ5IEJhb1N5c3RlbUhlYWRlckNvbXBvbmVudCBvbmx5LCBub3QgdG8gYmUgdXNlZCBieSBob3N0IGFwcGxpY2F0aW9uLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdiYW8tYmFjay1uYXZpZ2F0aW9uLWNvbXBvbmVudCcsXG4gIHRlbXBsYXRlOiBgIDxhPlxuICAgIDxiYW8taWNvblxuICAgICAgY29sb3I9XCJhY3Rpb25cIlxuICAgICAgdGl0bGU9XCJhcnJvdy1sZWZ0XCJcbiAgICAgIHN2Z0ljb249XCJpY29uLWFycm93LWxlZnRcIlxuICAgICAgc2l6ZT1cIngtc21hbGxcIlxuICAgID48L2Jhby1pY29uPlxuICA8L2E+YCxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnYmFvLXN5c3RlbS1oZWFkZXItYmFjay1idXR0b24nXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgQmFvQmFja05hdmlnYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBsaW5rOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XG4gICkge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2xpbmsnXSAmJiBjaGFuZ2VzWydsaW5rJ10uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0sXG4gICAgICAgICdocmVmJyxcbiAgICAgICAgY2hhbmdlc1snbGluayddLmN1cnJlbnRWYWx1ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGRpcmVjdGl2ZSBpcyB0byBtYXJrIHRoZSB0ZW1wbGF0ZSB3aGVyZSB0aGUgQmFvQmFja05hdmlnYXRpb25Db21wb25lbnQgc2hvdWxkIGJlIGR5bmFtaWNhbGx5IGluc2VydGVkLFxuICogd2hlbiBhIEJyZWFkY3J1bWIgY29tcG9uZW50IG5lZWRzIHRvIGJlIHJlcGxhY2VkXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tiYWNrTmF2aWdhdGlvbkluc2VydF0nXG59KVxuZXhwb3J0IGNsYXNzIEJhb0JhY2tOYXZpZ2F0aW9uSW5zZXJ0IHtcbiAgY29uc3RydWN0b3IocHVibGljIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHt9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Jhby1zeXN0ZW0taGVhZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N5c3RlbS1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zeXN0ZW0taGVhZGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdiYW8tc3lzdGVtLWhlYWRlcidcbiAgfVxufSlcbmV4cG9ydCBjbGFzcyBCYW9TeXN0ZW1IZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQge1xuICBAVmlld0NoaWxkKCd0ZXh0Q29udGFpbmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHByaXZhdGUgdGV4dENvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoQmFvQmFja05hdmlnYXRpb25JbnNlcnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHByaXZhdGUgYmFja0J1dHRvbkluc2VydDogQmFvQmFja05hdmlnYXRpb25JbnNlcnQ7XG5cbiAgcHVibGljIHNjcmVlblR5cGU6ICdtb2JpbGUnIHwgJ3RhYmxldCcgfCAnZGVza3RvcCcgPSAnZGVza3RvcCc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBicmVha3BvaW50T2JzZXJ2ZXI6IEJyZWFrcG9pbnRPYnNlcnZlcixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIGdldCB0ZXh0Q29udGFpbmVyQ2hpbGRyZW4oKTogRWxlbWVudFtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRleHRDb250YWluZXIubmF0aXZlRWxlbWVudC5jaGlsZHJlbik7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAoXG4gICAgICBbQnJlYWtwb2ludHMuWFNtYWxsLCBCcmVha3BvaW50cy5TbWFsbF0uc29tZShzaXplID0+XG4gICAgICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLmlzTWF0Y2hlZChzaXplKVxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhpcy5zY3JlZW5UeXBlID0gJ21vYmlsZSc7XG4gICAgfSBlbHNlIGlmICh0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuTWVkaXVtKSkge1xuICAgICAgdGhpcy5zY3JlZW5UeXBlID0gJ3RhYmxldCc7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIFtCcmVha3BvaW50cy5MYXJnZSwgQnJlYWtwb2ludHMuWExhcmdlXS5zb21lKHNpemUgPT5cbiAgICAgICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXIuaXNNYXRjaGVkKHNpemUpXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aGlzLnNjcmVlblR5cGUgPSAnZGVza3RvcCc7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuZm9ybWF0TmF2aWdhdGlvbigpO1xuICAgIHRoaXMuYXBwbHlTaXplQ2xhc3MoKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TmF2aWdhdGlvbigpIHtcbiAgICAvLyBJZiB2aWV3IGlzIHJlbmRlcmVkIG9uIGEgbW9iaWxlL3RhYmxldCBzY3JlZW5cbiAgICBpZiAodGhpcy5zY3JlZW5UeXBlID09ICdtb2JpbGUnIHx8IHRoaXMuc2NyZWVuVHlwZSA9PSAndGFibGV0Jykge1xuICAgICAgaWYgKHRoaXMudGV4dENvbnRhaW5lckNoaWxkcmVuWzBdLmNsYXNzTmFtZSA9PSAnYmFvLWJyZWFkY3J1bWInKSB7XG4gICAgICAgIC8vIFJldHJpZXZlIGxpbmsgb2YgcGFyZW50IHBhZ2VcbiAgICAgICAgY29uc3QgYnJlYWRjcnVtYkVsZW1lbnRzTGlzdCA9XG4gICAgICAgICAgdGhpcy50ZXh0Q29udGFpbmVyQ2hpbGRyZW5bMF0uY2hpbGRyZW5bMF07XG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJMZW5ndGggPSBicmVhZGNydW1iRWxlbWVudHNMaXN0LmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcGFyZW50TGluayA9XG4gICAgICAgICAgYnJlYWRjcnVtYkVsZW1lbnRzTGlzdC5jaGlsZHJlblticmVhZGNydW1iTGVuZ3RoIC0gMl0uYXR0cmlidXRlc1tcbiAgICAgICAgICAgICdocmVmJ1xuICAgICAgICAgIF0udmFsdWU7XG4gICAgICAgIC8vIFJlbW92ZSBCcmVhZGNydW1iIGNvbXBvbmVudCBhbmQgcmVwbGFjZSBpdCB3aXRoIGJhY2sgYnV0dG9uXG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQoXG4gICAgICAgICAgdGhpcy50ZXh0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgdGhpcy50ZXh0Q29udGFpbmVyQ2hpbGRyZW5bMF1cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IHRoaXMuYmFja0J1dHRvbkluc2VydC52aWV3Q29udGFpbmVyUmVmO1xuICAgICAgICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KFxuICAgICAgICAgIEJhb0JhY2tOYXZpZ2F0aW9uQ29tcG9uZW50XG4gICAgICAgICk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5saW5rID0gcGFyZW50TGluaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5U2l6ZUNsYXNzKCkge1xuICAgIGNvbnN0IHRhZ0luZm9Db250YWluZXIgPVxuICAgICAgdGhpcy50ZXh0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2hpbGROb2Rlc1tcbiAgICAgICAgdGhpcy50ZXh0Q29udGFpbmVyQ2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgXTtcbiAgICBpZiAodGhpcy5zY3JlZW5UeXBlID09PSAnbW9iaWxlJykge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0YWdJbmZvQ29udGFpbmVyLCAnbW9iaWxlJyk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibGVmdC1zaWRlLWNvbnRlbnRcIj5cbiAgPGRpdiBjbGFzcz1cImJhY2stbmF2aWdhdGlvbi1jb250YWluZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJhXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy10ZW1wbGF0ZSBiYWNrTmF2aWdhdGlvbkluc2VydD48L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbiAgPGRpdiAjdGV4dENvbnRhaW5lciBjbGFzcz1cInRleHQtY29udGVudFwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImJhby1icmVhZGNydW1iXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImgxXCI+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJ0YWctaW5mby1jb250YWluZXJcIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImJhby10YWdcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8c3BhbiBjbGFzcz1cImFkZGl0aW9uYWwtaW5mb1wiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJzcGFuXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImJ1dHRvbi1jb250YWluZXJcIj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9kaXY+XG4iXX0=
|
package/esm2020/public-api.mjs
CHANGED
|
@@ -24,4 +24,6 @@ export * from './lib/modal';
|
|
|
24
24
|
export * from './lib/hyperlink';
|
|
25
25
|
export * from './lib/dropdown-menu';
|
|
26
26
|
export * from './lib/file';
|
|
27
|
-
|
|
27
|
+
export * from './lib/snack-bar';
|
|
28
|
+
export * from './lib/system-header';
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItdWkvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHFCQUFxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMyBWaWxsZSBkZSBNb250cmVhbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqIFNlZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgZnVsbCBsaWNlbnNlIGluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgKiBmcm9tICcuL2xpYi9iYW8ubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2J1dHRvbi9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9pY29uL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FsZXJ0L2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2JyZWFkY3J1bWIvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY2FyZC9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9iYWRnZS9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWcvaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaGVhZGVyLWluZm8vaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbGlzdC9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jaGVja2JveC9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yYWRpby9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21tb24tY29tcG9uZW50cy9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zdW1tYXJ5L2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NoYXJlZCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hdmF0YXInO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFicyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9oeXBlcmxpbmsnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZHJvcGRvd24tbWVudSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NuYWNrLWJhcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zeXN0ZW0taGVhZGVyJztcbiJdfQ==
|