@metadev/lux 0.16.4 → 0.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/autocomplete/autocomplete.component.mjs +479 -0
- package/esm2020/lib/autocomplete-list/autocomplete-list.component.mjs +254 -0
- package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +75 -0
- package/esm2020/lib/checkbox/checkbox.component.mjs +154 -0
- package/{esm2015/lib/datasource.js → esm2020/lib/datasource.mjs} +0 -0
- package/esm2020/lib/datetime/datetime.component.mjs +306 -0
- package/esm2020/lib/filter/filter.component.mjs +152 -0
- package/esm2020/lib/geolocation/geolocation.component.mjs +407 -0
- package/{esm2015/lib/geolocation/geolocation.service.js → esm2020/lib/geolocation/geolocation.service.mjs} +7 -11
- package/esm2020/lib/geolocation/openlayer-loader.service.mjs +62 -0
- package/esm2020/lib/helperFns.mjs +109 -0
- package/esm2020/lib/input/input.component.mjs +452 -0
- package/{esm2015/lib/input/regexp.service.js → esm2020/lib/input/regexp.service.mjs} +7 -6
- package/{esm2015/lib/lang.js → esm2020/lib/lang.mjs} +0 -0
- package/esm2020/lib/lux.module.mjs +130 -0
- package/{esm2015/lib/map/geopoint.js → esm2020/lib/map/geopoint.mjs} +0 -0
- package/esm2020/lib/map/map.component.mjs +265 -0
- package/esm2020/lib/modal/modal-backdrop.mjs +26 -0
- package/esm2020/lib/modal/modal-config.mjs +14 -0
- package/{esm2015/lib/modal/modal-dismiss-reasons.js → esm2020/lib/modal/modal-dismiss-reasons.mjs} +0 -0
- package/{esm2015/lib/modal/modal-ref.js → esm2020/lib/modal/modal-ref.mjs} +0 -0
- package/esm2020/lib/modal/modal-stack.mjs +179 -0
- package/esm2020/lib/modal/modal-window.mjs +119 -0
- package/esm2020/lib/modal/modal.service.mjs +26 -0
- package/{esm2015/lib/modal/util.js → esm2020/lib/modal/util.mjs} +0 -0
- package/esm2020/lib/pagination/pagination.component.mjs +137 -0
- package/{esm2015/lib/pagination/pagination.js → esm2020/lib/pagination/pagination.mjs} +0 -0
- package/esm2020/lib/radiogroup/radiogroup.component.mjs +130 -0
- package/esm2020/lib/select/select.component.mjs +149 -0
- package/{esm2015/lib/tooltip/placement.js → esm2020/lib/tooltip/placement.mjs} +0 -0
- package/{esm2015/lib/tooltip/tooltip-context.js → esm2020/lib/tooltip/tooltip-context.mjs} +0 -0
- package/esm2020/lib/tooltip/tooltip.component.mjs +23 -0
- package/esm2020/lib/tooltip/tooltip.directive.mjs +60 -0
- package/{esm2015/lib/tooltip/tooltip.service.js → esm2020/lib/tooltip/tooltip.service.mjs} +7 -9
- package/{esm2015/lib/tooltip/tooltop-content.js → esm2020/lib/tooltip/tooltop-content.mjs} +0 -0
- package/esm2020/lib/voice-recognition/voice-recognition.directive.mjs +73 -0
- package/{esm2015/lib/window/window.service.js → esm2020/lib/window/window.service.mjs} +0 -0
- package/esm2020/metadev-lux.mjs +5 -0
- package/esm2020/public-api.mjs +21 -0
- package/fesm2015/metadev-lux.mjs +4345 -0
- package/fesm2015/metadev-lux.mjs.map +1 -0
- package/fesm2020/metadev-lux.mjs +4343 -0
- package/fesm2020/metadev-lux.mjs.map +1 -0
- package/lib/autocomplete/autocomplete.component.d.ts +3 -0
- package/lib/autocomplete-list/autocomplete-list.component.d.ts +3 -0
- package/lib/breadcrumb/breadcrumb.component.d.ts +3 -0
- package/lib/checkbox/checkbox.component.d.ts +3 -0
- package/lib/datetime/datetime.component.d.ts +4 -0
- package/lib/filter/filter.component.d.ts +3 -0
- package/lib/geolocation/geolocation.component.d.ts +4 -0
- package/lib/geolocation/geolocation.service.d.ts +3 -0
- package/lib/geolocation/openlayer-loader.service.d.ts +3 -0
- package/lib/helperFns.d.ts +2 -0
- package/lib/input/input.component.d.ts +15 -0
- package/lib/input/regexp.service.d.ts +3 -0
- package/lib/lux.module.d.ts +26 -0
- package/lib/map/map.component.d.ts +3 -0
- package/lib/modal/modal-backdrop.d.ts +3 -0
- package/lib/modal/modal-config.d.ts +3 -0
- package/lib/modal/modal-stack.d.ts +3 -0
- package/lib/modal/modal-window.d.ts +3 -0
- package/lib/modal/modal.service.d.ts +3 -0
- package/lib/pagination/pagination.component.d.ts +3 -0
- package/lib/radiogroup/radiogroup.component.d.ts +3 -0
- package/lib/select/select.component.d.ts +3 -0
- package/lib/tooltip/tooltip.component.d.ts +3 -0
- package/lib/tooltip/tooltip.directive.d.ts +3 -0
- package/lib/tooltip/tooltip.service.d.ts +3 -0
- package/lib/voice-recognition/voice-recognition.directive.d.ts +3 -0
- package/metadev-lux.d.ts +1 -16
- package/package.json +22 -10
- package/public-api.d.ts +12 -7
- package/bundles/metadev-lux.umd.js +0 -4647
- package/bundles/metadev-lux.umd.js.map +0 -1
- package/esm2015/lib/autocomplete/autocomplete.component.js +0 -455
- package/esm2015/lib/autocomplete-list/autocomplete-list.component.js +0 -230
- package/esm2015/lib/breadcrumb/breadcrumb.component.js +0 -77
- package/esm2015/lib/checkbox/checkbox.component.js +0 -142
- package/esm2015/lib/datetime/datetime.component.js +0 -275
- package/esm2015/lib/filter/filter.component.js +0 -140
- package/esm2015/lib/geolocation/geolocation.component.js +0 -371
- package/esm2015/lib/geolocation/openlayer-loader.service.js +0 -63
- package/esm2015/lib/helperFns.js +0 -93
- package/esm2015/lib/input/input.component.js +0 -371
- package/esm2015/lib/lux.module.js +0 -83
- package/esm2015/lib/map/map.component.js +0 -261
- package/esm2015/lib/modal/modal-backdrop.js +0 -19
- package/esm2015/lib/modal/modal-config.js +0 -12
- package/esm2015/lib/modal/modal-stack.js +0 -182
- package/esm2015/lib/modal/modal-window.js +0 -92
- package/esm2015/lib/modal/modal.service.js +0 -28
- package/esm2015/lib/pagination/pagination.component.js +0 -134
- package/esm2015/lib/radiogroup/radiogroup.component.js +0 -114
- package/esm2015/lib/select/select.component.js +0 -131
- package/esm2015/lib/tooltip/tooltip.component.js +0 -19
- package/esm2015/lib/tooltip/tooltip.directive.js +0 -52
- package/esm2015/lib/voice-recognition/voice-recognition.directive.js +0 -76
- package/esm2015/metadev-lux.js +0 -21
- package/esm2015/public-api.js +0 -16
- package/fesm2015/metadev-lux.js +0 -4025
- package/fesm2015/metadev-lux.js.map +0 -1
- package/metadev-lux.metadata.json +0 -1
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { Injectable, ApplicationRef, TemplateRef, Inject, Injector, RendererFactory2 } from '@angular/core';
|
|
2
|
+
import { DOCUMENT } from '@angular/common';
|
|
3
|
+
import { ActiveModal, ModalRef } from './modal-ref';
|
|
4
|
+
import { ContentRef, focusTrap, isDefined } from './util';
|
|
5
|
+
import { LuxModalWindowComponent } from './modal-window';
|
|
6
|
+
import { Subject } from 'rxjs';
|
|
7
|
+
import { LuxModalBackdropComponent } from './modal-backdrop';
|
|
8
|
+
import { LuxModalConfig } from './modal-config';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "./modal-config";
|
|
11
|
+
export class ModalStack {
|
|
12
|
+
constructor(_applicationRef, _document, _injector, _rendererFactory, modalConfig) {
|
|
13
|
+
this._applicationRef = _applicationRef;
|
|
14
|
+
this._document = _document;
|
|
15
|
+
this._injector = _injector;
|
|
16
|
+
this._rendererFactory = _rendererFactory;
|
|
17
|
+
this.modalConfig = modalConfig;
|
|
18
|
+
this._activeWindowCmptHasChanged = new Subject();
|
|
19
|
+
this._modalRefs = [];
|
|
20
|
+
this._windowCmpts = [];
|
|
21
|
+
this._ariaHiddenValues = new Map();
|
|
22
|
+
this._backdropAttributes = ['backdropClass'];
|
|
23
|
+
this._windowAttributes = [
|
|
24
|
+
'ariaLabelledBy',
|
|
25
|
+
'backdrop',
|
|
26
|
+
'centered',
|
|
27
|
+
'keyboard',
|
|
28
|
+
'scrollable',
|
|
29
|
+
'size',
|
|
30
|
+
'windowClass'
|
|
31
|
+
];
|
|
32
|
+
this._activeWindowCmptHasChanged.subscribe(() => {
|
|
33
|
+
if (this._windowCmpts.length) {
|
|
34
|
+
const activeWindowCmpt = this._windowCmpts[this._windowCmpts.length - 1];
|
|
35
|
+
focusTrap(activeWindowCmpt.location.nativeElement, this._activeWindowCmptHasChanged);
|
|
36
|
+
this._revertAriaHidden();
|
|
37
|
+
this._setAriaHidden(activeWindowCmpt.location.nativeElement);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
open(moduleCFR, content, options) {
|
|
42
|
+
const config = Object.assign({}, this.modalConfig, options);
|
|
43
|
+
const containerEl = this._document.body;
|
|
44
|
+
const renderer = this._rendererFactory.createRenderer(null, null);
|
|
45
|
+
const removeBodyClass = () => {
|
|
46
|
+
if (!this._modalRefs.length) {
|
|
47
|
+
renderer.removeClass(this._document.body, 'modal-open');
|
|
48
|
+
this._revertAriaHidden();
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const activeModal = new ActiveModal();
|
|
52
|
+
const contentRef = this.getContentRef(moduleCFR, content, activeModal);
|
|
53
|
+
const backdropCmptRef = config.backdrop ? this._attachBackdrop(moduleCFR, containerEl) : null;
|
|
54
|
+
const windowCmptRef = this._attachWindowComponent(moduleCFR, containerEl, contentRef);
|
|
55
|
+
const modalRef = new ModalRef(windowCmptRef, contentRef, backdropCmptRef);
|
|
56
|
+
this._registerModalRef(modalRef);
|
|
57
|
+
this._registerWindowCmpt(windowCmptRef);
|
|
58
|
+
modalRef.result.then(removeBodyClass, removeBodyClass);
|
|
59
|
+
activeModal.close = (result) => {
|
|
60
|
+
modalRef.close(result);
|
|
61
|
+
};
|
|
62
|
+
activeModal.dismiss = (reason) => {
|
|
63
|
+
modalRef.dismiss(reason);
|
|
64
|
+
};
|
|
65
|
+
this._applyWindowOptions(windowCmptRef.instance, config);
|
|
66
|
+
if (this._modalRefs.length === 1) {
|
|
67
|
+
renderer.addClass(this._document.body, 'modal-open');
|
|
68
|
+
}
|
|
69
|
+
if (backdropCmptRef && backdropCmptRef.instance) {
|
|
70
|
+
this._applyBackgroundOptions(backdropCmptRef.instance, config);
|
|
71
|
+
backdropCmptRef.changeDetectorRef.detectChanges();
|
|
72
|
+
}
|
|
73
|
+
windowCmptRef.changeDetectorRef.detectChanges();
|
|
74
|
+
return modalRef;
|
|
75
|
+
}
|
|
76
|
+
_applyWindowOptions(windowInstance, config) {
|
|
77
|
+
this._windowAttributes.forEach((optionName) => {
|
|
78
|
+
if (isDefined(config[optionName])) {
|
|
79
|
+
windowInstance[optionName] = config[optionName];
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
_applyBackgroundOptions(backgroudInstance, config) {
|
|
84
|
+
this._backdropAttributes.forEach((optionName) => {
|
|
85
|
+
if (isDefined(config[optionName])) {
|
|
86
|
+
backgroudInstance[optionName] = config[optionName];
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
_revertAriaHidden() {
|
|
91
|
+
this._ariaHiddenValues.forEach((value, element) => {
|
|
92
|
+
if (value) {
|
|
93
|
+
element.setAttribute('aria-hidden', value);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
element.removeAttribute('aria-hidden');
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
this._ariaHiddenValues.clear();
|
|
100
|
+
}
|
|
101
|
+
getContentRef(moduleCFR, content, activeModal) {
|
|
102
|
+
if (content instanceof TemplateRef) {
|
|
103
|
+
return this.createFromTemplateRef(content, activeModal);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
createFromTemplateRef(content, activeModal) {
|
|
107
|
+
const context = {
|
|
108
|
+
$implicit: activeModal,
|
|
109
|
+
// eslint-disable-next-line prefer-arrow/prefer-arrow-functions
|
|
110
|
+
close(result) {
|
|
111
|
+
activeModal.close(result);
|
|
112
|
+
},
|
|
113
|
+
// eslint-disable-next-line prefer-arrow/prefer-arrow-functions
|
|
114
|
+
dismiss(reason) {
|
|
115
|
+
activeModal.dismiss(reason);
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
const viewRef = content.createEmbeddedView(context);
|
|
119
|
+
this._applicationRef.attachView(viewRef);
|
|
120
|
+
return new ContentRef([viewRef.rootNodes], viewRef);
|
|
121
|
+
}
|
|
122
|
+
_attachBackdrop(moduleCFR, containerEl) {
|
|
123
|
+
const backdropFactory = moduleCFR.resolveComponentFactory(LuxModalBackdropComponent);
|
|
124
|
+
const backdropCmptRef = backdropFactory.create(this._injector);
|
|
125
|
+
this._applicationRef.attachView(backdropCmptRef.hostView);
|
|
126
|
+
containerEl.appendChild(backdropCmptRef.location.nativeElement);
|
|
127
|
+
return backdropCmptRef;
|
|
128
|
+
}
|
|
129
|
+
_attachWindowComponent(moduleCFR, containerEl, contentRef) {
|
|
130
|
+
const windowFactory = moduleCFR.resolveComponentFactory(LuxModalWindowComponent);
|
|
131
|
+
const windowCmptRef = windowFactory.create(this._injector, contentRef.nodes);
|
|
132
|
+
this._applicationRef.attachView(windowCmptRef.hostView);
|
|
133
|
+
containerEl.appendChild(windowCmptRef.location.nativeElement);
|
|
134
|
+
return windowCmptRef;
|
|
135
|
+
}
|
|
136
|
+
_registerModalRef(modalRef) {
|
|
137
|
+
const unregisterModalRef = () => {
|
|
138
|
+
const index = this._modalRefs.indexOf(modalRef);
|
|
139
|
+
if (index > -1) {
|
|
140
|
+
this._modalRefs.splice(index, 1);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
this._modalRefs.push(modalRef);
|
|
144
|
+
modalRef.result.then(unregisterModalRef, unregisterModalRef);
|
|
145
|
+
}
|
|
146
|
+
_registerWindowCmpt(windowCmpt) {
|
|
147
|
+
this._windowCmpts.push(windowCmpt);
|
|
148
|
+
this._activeWindowCmptHasChanged.next(null);
|
|
149
|
+
windowCmpt.onDestroy(() => {
|
|
150
|
+
const index = this._windowCmpts.indexOf(windowCmpt);
|
|
151
|
+
if (index > -1) {
|
|
152
|
+
this._windowCmpts.splice(index, 1);
|
|
153
|
+
this._activeWindowCmptHasChanged.next(null);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
_setAriaHidden(element) {
|
|
158
|
+
const parent = element.parentElement;
|
|
159
|
+
if (parent && element !== this._document.body) {
|
|
160
|
+
Array.from(parent.children).forEach((sibling) => {
|
|
161
|
+
if (sibling !== element && sibling.nodeName !== 'SCRIPT') {
|
|
162
|
+
this._ariaHiddenValues.set(sibling, sibling.getAttribute('aria-hidden'));
|
|
163
|
+
sibling.setAttribute('aria-hidden', 'true');
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
this._setAriaHidden(parent);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
ModalStack.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ModalStack, deps: [{ token: i0.ApplicationRef }, { token: DOCUMENT }, { token: i0.Injector }, { token: i0.RendererFactory2 }, { token: i1.LuxModalConfig }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
171
|
+
ModalStack.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ModalStack, providedIn: 'root' });
|
|
172
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ModalStack, decorators: [{
|
|
173
|
+
type: Injectable,
|
|
174
|
+
args: [{ providedIn: 'root' }]
|
|
175
|
+
}], ctorParameters: function () { return [{ type: i0.ApplicationRef }, { type: undefined, decorators: [{
|
|
176
|
+
type: Inject,
|
|
177
|
+
args: [DOCUMENT]
|
|
178
|
+
}] }, { type: i0.Injector }, { type: i0.RendererFactory2 }, { type: i1.LuxModalConfig }]; } });
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtc3RhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sdXgvc3JjL2xpYi9tb2RhbC9tb2RhbC1zdGFjay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLGNBQWMsRUFFZCxXQUFXLEVBRVgsTUFBTSxFQUNOLFFBQVEsRUFDUixnQkFBZ0IsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUMxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzdELE9BQU8sRUFBbUIsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQUdqRSxNQUFNLE9BQU8sVUFBVTtJQWdCckIsWUFDVSxlQUErQixFQUNiLFNBQWMsRUFDaEMsU0FBbUIsRUFDbkIsZ0JBQWtDLEVBQ2xDLFdBQTJCO1FBSjNCLG9CQUFlLEdBQWYsZUFBZSxDQUFnQjtRQUNiLGNBQVMsR0FBVCxTQUFTLENBQUs7UUFDaEMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQXBCN0IsZ0NBQTJCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM1QyxlQUFVLEdBQWUsRUFBRSxDQUFDO1FBQzVCLGlCQUFZLEdBQTRDLEVBQUUsQ0FBQztRQUMzRCxzQkFB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Q0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQzs7dUdBMU5VLFVBQVUsZ0RBa0JYLFFBQVE7MkdBbEJQLFVBQVUsY0FERyxNQUFNOzJGQUNuQixVQUFVO2tCQUR0QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBbUI3QixNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBBcHBsaWNhdGlvblJlZixcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICBUZW1wbGF0ZVJlZixcbiAgQ29tcG9uZW50UmVmLFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBSZW5kZXJlckZhY3RvcnkyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBBY3RpdmVNb2RhbCwgTW9kYWxSZWYgfSBmcm9tICcuL21vZGFsLXJlZic7XG5pbXBvcnQgeyBDb250ZW50UmVmLCBmb2N1c1RyYXAsIGlzRGVmaW5lZCB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBMdXhNb2RhbFdpbmRvd0NvbXBvbmVudCB9IGZyb20gJy4vbW9kYWwtd2luZG93JztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEx1eE1vZGFsQmFja2Ryb3BDb21wb25lbnQgfSBmcm9tICcuL21vZGFsLWJhY2tkcm9wJztcbmltcG9ydCB7IEx1eE1vZGFsT3B0aW9ucywgTHV4TW9kYWxDb25maWcgfSBmcm9tICcuL21vZGFsLWNvbmZpZyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTW9kYWxTdGFjayB7XG4gIHByaXZhdGUgX2FjdGl2ZVdpbmRvd0NtcHRIYXNDaGFuZ2VkID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSBfbW9kYWxSZWZzOiBNb2RhbFJlZltdID0gW107XG4gIHByaXZhdGUgX3dpbmRvd0NtcHRzOiBDb21wb25lbnRSZWY8THV4TW9kYWxXaW5kb3dDb21wb25lbnQ+W10gPSBbXTtcbiAgcHJpdmF0ZSBfYXJpYUhpZGRlblZhbHVlczogTWFwPEVsZW1lbnQsIHN0cmluZz4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgX2JhY2tkcm9wQXR0cmlidXRlcyA9IFsnYmFja2Ryb3BDbGFzcyddO1xuICBwcml2YXRlIF93aW5kb3dBdHRyaWJ1dGVzID0gW1xuICAgICdhcmlhTGFiZWxsZWRCeScsXG4gICAgJ2JhY2tkcm9wJyxcbiAgICAnY2VudGVyZWQnLFxuICAgICdrZXlib2FyZCcsXG4gICAgJ3Njcm9sbGFibGUnLFxuICAgICdzaXplJyxcbiAgICAnd2luZG93Q2xhc3MnXG4gIF07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvY3VtZW50OiBhbnksXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgX3JlbmRlcmVyRmFjdG9yeTogUmVuZGVyZXJGYWN0b3J5MixcbiAgICBwcml2YXRlIG1vZGFsQ29uZmlnOiBMdXhNb2RhbENvbmZpZ1xuICApIHtcbiAgICB0aGlzLl9hY3RpdmVXaW5kb3dDbXB0SGFzQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX3dpbmRvd0NtcHRzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBhY3RpdmVXaW5kb3dDbXB0ID1cbiAgICAgICAgICB0aGlzLl93aW5kb3dDbXB0c1t0aGlzLl93aW5kb3dDbXB0cy5sZW5ndGggLSAxXTtcbiAgICAgICAgZm9jdXNUcmFwKFxuICAgICAgICAgIGFjdGl2ZVdpbmRvd0NtcHQubG9jYXRpb24ubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICB0aGlzLl9hY3RpdmVXaW5kb3dDbXB0SGFzQ2hhbmdlZFxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9yZXZlcnRBcmlhSGlkZGVuKCk7XG4gICAgICAgIHRoaXMuX3NldEFyaWFIaWRkZW4oYWN0aXZlV2luZG93Q21wdC5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9wZW4oXG4gICAgbW9kdWxlQ0ZSOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgY29udGVudDogYW55LFxuICAgIG9wdGlvbnM6IEx1eE1vZGFsT3B0aW9uc1xuICApOiBNb2RhbFJlZiB7XG4gICAgY29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5tb2RhbENvbmZpZywgb3B0aW9ucyk7XG4gICAgY29uc3QgY29udGFpbmVyRWwgPSB0aGlzLl9kb2N1bWVudC5ib2R5O1xuICAgIGNvbnN0IHJlbmRlcmVyID0gdGhpcy5fcmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKG51bGwsIG51bGwpO1xuICAgIGNvbnN0IHJlbW92ZUJvZHlDbGFzcyA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICghdGhpcy5fbW9kYWxSZWZzLmxlbmd0aCkge1xuICAgICAgICByZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9kb2N1bWVudC5ib2R5LCAnbW9kYWwtb3BlbicpO1xuICAgICAgICB0aGlzLl9yZXZlcnRBcmlhSGlkZGVuKCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhY3RpdmVNb2RhbCA9IG5ldyBBY3RpdmVNb2RhbCgpO1xuICAgIGNvbnN0IGNvbnRlbnRSZWYgPSB0aGlzLmdldENvbnRlbnRSZWYobW9kdWxlQ0ZSLCBjb250ZW50LCBhY3RpdmVNb2RhbCk7XG4gICAgY29uc3QgYmFja2Ryb3BDbXB0UmVmOiBDb21wb25lbnRSZWY8THV4TW9kYWxCYWNrZHJvcENvbXBvbmVudD4gPVxuICAgICAgY29uZmlnLmJhY2tkcm9wID8gdGhpcy5fYXR0YWNoQmFja2Ryb3AobW9kdWxlQ0ZSLCBjb250YWluZXJFbCkgOiBudWxsO1xuICAgIGNvbnN0IHdpbmRvd0NtcHRSZWY6IENvbXBvbmVudFJlZjxMdXhNb2RhbFdpbmRvd0NvbXBvbmVudD4gPVxuICAgICAgdGhpcy5fYXR0YWNoV2luZG93Q29tcG9uZW50KG1vZHVsZUNGUiwgY29udGFpbmVyRWwsIGNvbnRlbnRSZWYpO1xuICAgIGNvbnN0IG1vZGFsUmVmOiBNb2RhbFJlZiA9IG5ldyBNb2RhbFJlZihcbiAgICAgIHdpbmRvd0NtcHRSZWYsXG4gICAgICBjb250ZW50UmVmLFxuICAgICAgYmFja2Ryb3BDbXB0UmVmXG4gICAgKTtcbiAgICB0aGlzLl9yZWdpc3Rlck1vZGFsUmVmKG1vZGFsUmVmKTtcbiAgICB0aGlzLl9yZWdpc3RlcldpbmRvd0NtcHQod2luZG93Q21wdFJlZik7XG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4ocmVtb3ZlQm9keUNsYXNzLCByZW1vdmVCb2R5Q2xhc3MpO1xuICAgIGFjdGl2ZU1vZGFsLmNsb3NlID0gKHJlc3VsdDogYW55KTogdm9pZCA9PiB7XG4gICAgICBtb2RhbFJlZi5jbG9zZShyZXN1bHQpO1xuICAgIH07XG4gICAgYWN0aXZlTW9kYWwuZGlzbWlzcyA9IChyZWFzb246IGFueSk6IHZvaWQgPT4ge1xuICAgICAgbW9kYWxSZWYuZGlzbWlzcyhyZWFzb24pO1xuICAgIH07XG5cbiAgICB0aGlzLl9hcHBseVdpbmRvd09wdGlvbnMod2luZG93Q21wdFJlZi5pbnN0YW5jZSwgY29uZmlnKTtcbiAgICBpZiAodGhpcy5fbW9kYWxSZWZzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fZG9jdW1lbnQuYm9keSwgJ21vZGFsLW9wZW4nKTtcbiAgICB9XG4gICAgaWYgKGJhY2tkcm9wQ21wdFJlZiAmJiBiYWNrZHJvcENtcHRSZWYuaW5zdGFuY2UpIHtcbiAgICAgIHRoaXMuX2FwcGx5QmFja2dyb3VuZE9wdGlvbnMoYmFja2Ryb3BDbXB0UmVmLmluc3RhbmNlLCBjb25maWcpO1xuICAgICAgYmFja2Ryb3BDbXB0UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgd2luZG93Q21wdFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICByZXR1cm4gbW9kYWxSZWY7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseVdpbmRvd09wdGlvbnMoXG4gICAgd2luZG93SW5zdGFuY2U6IEx1eE1vZGFsV2luZG93Q29tcG9uZW50LFxuICAgIGNvbmZpZzogTHV4TW9kYWxPcHRpb25zXG4gICk6IHZvaWQge1xuICAgIHRoaXMuX3dpbmRvd0F0dHJpYnV0ZXMuZm9yRWFjaCgob3B0aW9uTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoaXNEZWZpbmVkKGNvbmZpZ1tvcHRpb25OYW1lXSkpIHtcbiAgICAgICAgd2luZG93SW5zdGFuY2Vbb3B0aW9uTmFtZV0gPSBjb25maWdbb3B0aW9uTmFtZV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hcHBseUJhY2tncm91bmRPcHRpb25zKFxuICAgIGJhY2tncm91ZEluc3RhbmNlOiBMdXhNb2RhbEJhY2tkcm9wQ29tcG9uZW50LFxuICAgIGNvbmZpZzogTHV4TW9kYWxPcHRpb25zXG4gICk6IHZvaWQge1xuICAgIHRoaXMuX2JhY2tkcm9wQXR0cmlidXRlcy5mb3JFYWNoKChvcHRpb25OYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChpc0RlZmluZWQoY29uZmlnW29wdGlvbk5hbWVdKSkge1xuICAgICAgICBiYWNrZ3JvdWRJbnN0YW5jZVtvcHRpb25OYW1lXSA9IGNvbmZpZ1tvcHRpb25OYW1lXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JldmVydEFyaWFIaWRkZW4oKTogdm9pZCB7XG4gICAgdGhpcy5fYXJpYUhpZGRlblZhbHVlcy5mb3JFYWNoKCh2YWx1ZSwgZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuX2FyaWFIaWRkZW5WYWx1ZXMuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udGVudFJlZihcbiAgICBtb2R1bGVDRlI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBjb250ZW50OiBhbnksXG4gICAgYWN0aXZlTW9kYWw6IEFjdGl2ZU1vZGFsXG4gICk6IENvbnRlbnRSZWYge1xuICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUZyb21UZW1wbGF0ZVJlZihjb250ZW50LCBhY3RpdmVNb2RhbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGcm9tVGVtcGxhdGVSZWYoXG4gICAgY29udGVudDogVGVtcGxhdGVSZWY8YW55PixcbiAgICBhY3RpdmVNb2RhbDogQWN0aXZlTW9kYWxcbiAgKTogQ29udGVudFJlZiB7XG4gICAgY29uc3QgY29udGV4dCA9IHtcbiAgICAgICRpbXBsaWNpdDogYWN0aXZlTW9kYWwsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWFycm93L3ByZWZlci1hcnJvdy1mdW5jdGlvbnNcbiAgICAgIGNsb3NlKHJlc3VsdCk6IHZvaWQge1xuICAgICAgICBhY3RpdmVNb2RhbC5jbG9zZShyZXN1bHQpO1xuICAgICAgfSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItYXJyb3cvcHJlZmVyLWFycm93LWZ1bmN0aW9uc1xuICAgICAgZGlzbWlzcyhyZWFzb24pOiB2b2lkIHtcbiAgICAgICAgYWN0aXZlTW9kYWwuZGlzbWlzcyhyZWFzb24pO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgdmlld1JlZiA9IGNvbnRlbnQuY3JlYXRlRW1iZWRkZWRWaWV3KGNvbnRleHQpO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLmF0dGFjaFZpZXcodmlld1JlZik7XG4gICAgcmV0dXJuIG5ldyBDb250ZW50UmVmKFt2aWV3UmVmLnJvb3ROb2Rlc10sIHZpZXdSZWYpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXR0YWNoQmFja2Ryb3AoXG4gICAgbW9kdWxlQ0ZSOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgY29udGFpbmVyRWw6IGFueVxuICApOiBDb21wb25lbnRSZWY8THV4TW9kYWxCYWNrZHJvcENvbXBvbmVudD4ge1xuICAgIGNvbnN0IGJhY2tkcm9wRmFjdG9yeSA9IG1vZHVsZUNGUi5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShcbiAgICAgIEx1eE1vZGFsQmFja2Ryb3BDb21wb25lbnRcbiAgICApO1xuICAgIGNvbnN0IGJhY2tkcm9wQ21wdFJlZiA9IGJhY2tkcm9wRmFjdG9yeS5jcmVhdGUodGhpcy5faW5qZWN0b3IpO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uUmVmLmF0dGFjaFZpZXcoYmFja2Ryb3BDbXB0UmVmLmhvc3RWaWV3KTtcbiAgICBjb250YWluZXJFbC5hcHBlbmRDaGlsZChiYWNrZHJvcENtcHRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgcmV0dXJuIGJhY2tkcm9wQ21wdFJlZjtcbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaFdpbmRvd0NvbXBvbmVudChcbiAgICBtb2R1bGVDRlI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBjb250YWluZXJFbDogYW55LFxuICAgIGNvbnRlbnRSZWY6IGFueVxuICApOiBDb21wb25lbnRSZWY8THV4TW9kYWxXaW5kb3dDb21wb25lbnQ+IHtcbiAgICBjb25zdCB3aW5kb3dGYWN0b3J5ID0gbW9kdWxlQ0ZSLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFxuICAgICAgTHV4TW9kYWxXaW5kb3dDb21wb25lbnRcbiAgICApO1xuICAgIGNvbnN0IHdpbmRvd0NtcHRSZWYgPSB3aW5kb3dGYWN0b3J5LmNyZWF0ZShcbiAgICAgIHRoaXMuX2luamVjdG9yLFxuICAgICAgY29udGVudFJlZi5ub2Rlc1xuICAgICk7XG4gICAgdGhpcy5fYXBwbGljYXRpb25SZWYuYXR0YWNoVmlldyh3aW5kb3dDbXB0UmVmLmhvc3RWaWV3KTtcbiAgICBjb250YWluZXJFbC5hcHBlbmRDaGlsZCh3aW5kb3dDbXB0UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xuICAgIHJldHVybiB3aW5kb3dDbXB0UmVmO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJNb2RhbFJlZihtb2RhbFJlZjogTW9kYWxSZWYpOiB2b2lkIHtcbiAgICBjb25zdCB1bnJlZ2lzdGVyTW9kYWxSZWYgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuX21vZGFsUmVmcy5pbmRleE9mKG1vZGFsUmVmKTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuX21vZGFsUmVmcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5fbW9kYWxSZWZzLnB1c2gobW9kYWxSZWYpO1xuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKHVucmVnaXN0ZXJNb2RhbFJlZiwgdW5yZWdpc3Rlck1vZGFsUmVmKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyV2luZG93Q21wdChcbiAgICB3aW5kb3dDbXB0OiBDb21wb25lbnRSZWY8THV4TW9kYWxXaW5kb3dDb21wb25lbnQ+XG4gICk6IHZvaWQge1xuICAgIHRoaXMuX3dpbmRvd0NtcHRzLnB1c2god2luZG93Q21wdCk7XG4gICAgdGhpcy5fYWN0aXZlV2luZG93Q21wdEhhc0NoYW5nZWQubmV4dChudWxsKTtcblxuICAgIHdpbmRvd0NtcHQub25EZXN0cm95KCgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fd2luZG93Q21wdHMuaW5kZXhPZih3aW5kb3dDbXB0KTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMuX3dpbmRvd0NtcHRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZVdpbmRvd0NtcHRIYXNDaGFuZ2VkLm5leHQobnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zZXRBcmlhSGlkZGVuKGVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgaWYgKHBhcmVudCAmJiBlbGVtZW50ICE9PSB0aGlzLl9kb2N1bWVudC5ib2R5KSB7XG4gICAgICBBcnJheS5mcm9tKHBhcmVudC5jaGlsZHJlbikuZm9yRWFjaCgoc2libGluZykgPT4ge1xuICAgICAgICBpZiAoc2libGluZyAhPT0gZWxlbWVudCAmJiBzaWJsaW5nLm5vZGVOYW1lICE9PSAnU0NSSVBUJykge1xuICAgICAgICAgIHRoaXMuX2FyaWFIaWRkZW5WYWx1ZXMuc2V0KFxuICAgICAgICAgICAgc2libGluZyxcbiAgICAgICAgICAgIHNpYmxpbmcuZ2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBzaWJsaW5nLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3NldEFyaWFIaWRkZW4ocGFyZW50KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { Component, ElementRef, EventEmitter, Inject, Input, Output, HostBinding, HostListener } from '@angular/core';
|
|
3
|
+
import { getFocusableBoundaryElements, FOCUS } from './util';
|
|
4
|
+
import { ModalDismissReasons } from './modal-dismiss-reasons';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class LuxModalWindowComponent {
|
|
7
|
+
constructor(_document, _elRef) {
|
|
8
|
+
this._document = _document;
|
|
9
|
+
this._elRef = _elRef;
|
|
10
|
+
this.backdrop = false;
|
|
11
|
+
this.keyboard = true;
|
|
12
|
+
this.dismissEvent = new EventEmitter();
|
|
13
|
+
this.role = 'dialog';
|
|
14
|
+
this.tabindex = '-1';
|
|
15
|
+
this.ariamodal = true;
|
|
16
|
+
}
|
|
17
|
+
get class() {
|
|
18
|
+
return `modal ${this.windowClass || ''}`;
|
|
19
|
+
}
|
|
20
|
+
get hostAriaLabelledBy() {
|
|
21
|
+
return this.ariaLabelledBy;
|
|
22
|
+
}
|
|
23
|
+
get hostAriaDescribedBy() {
|
|
24
|
+
return this.ariaDescribedBy;
|
|
25
|
+
}
|
|
26
|
+
backdropClick(btn) {
|
|
27
|
+
if (this.backdrop === true && this._elRef.nativeElement === btn) {
|
|
28
|
+
this.dismiss(ModalDismissReasons.BackdropClick);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
escKey(event) {
|
|
32
|
+
if (this.keyboard && !event.defaultPrevented) {
|
|
33
|
+
this.dismiss(ModalDismissReasons.Esc);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
dismiss(reason) {
|
|
37
|
+
this.dismissEvent.emit(reason);
|
|
38
|
+
}
|
|
39
|
+
ngOnInit() {
|
|
40
|
+
this._elWithFocus = this._document.activeElement;
|
|
41
|
+
}
|
|
42
|
+
ngAfterViewInit() {
|
|
43
|
+
if (!this._elRef.nativeElement.contains(document.activeElement)) {
|
|
44
|
+
const firstFocusable = getFocusableBoundaryElements(this._elRef.nativeElement)[0];
|
|
45
|
+
const elementToFocus = firstFocusable || this._elRef.nativeElement;
|
|
46
|
+
elementToFocus.focus();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
ngOnDestroy() {
|
|
50
|
+
const body = this._document.body;
|
|
51
|
+
const elWithFocus = this._elWithFocus;
|
|
52
|
+
let elementToFocus;
|
|
53
|
+
if (elWithFocus && elWithFocus[FOCUS] && body.contains(elWithFocus)) {
|
|
54
|
+
elementToFocus = elWithFocus;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
elementToFocus = body;
|
|
58
|
+
}
|
|
59
|
+
elementToFocus.focus();
|
|
60
|
+
this._elWithFocus = null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
LuxModalWindowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: LuxModalWindowComponent, deps: [{ token: DOCUMENT }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
64
|
+
LuxModalWindowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: LuxModalWindowComponent, selector: "lux-modal-window", inputs: { ariaDescribedBy: "ariaDescribedBy", ariaLabelledBy: "ariaLabelledBy", backdrop: "backdrop", keyboard: "keyboard", windowClass: "windowClass" }, outputs: { dismissEvent: "dismissEvent" }, host: { listeners: { "click": "backdropClick($event.target)", "keyup.esc": "escKey($event)" }, properties: { "class": "this.class", "attr.role": "this.role", "tabindex": "this.tabindex", "attr.aria-modal": "this.ariamodal", "attr.aria-labelledby": "this.hostAriaLabelledBy", "attr.aria-describedby": "this.hostAriaDescribedBy" } }, ngImport: i0, template: `
|
|
65
|
+
<div class="modal-dialog" role="document">
|
|
66
|
+
<div class="modal-content"><ng-content></ng-content></div>
|
|
67
|
+
</div>
|
|
68
|
+
`, isInline: true });
|
|
69
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: LuxModalWindowComponent, decorators: [{
|
|
70
|
+
type: Component,
|
|
71
|
+
args: [{
|
|
72
|
+
selector: 'lux-modal-window',
|
|
73
|
+
template: `
|
|
74
|
+
<div class="modal-dialog" role="document">
|
|
75
|
+
<div class="modal-content"><ng-content></ng-content></div>
|
|
76
|
+
</div>
|
|
77
|
+
`
|
|
78
|
+
}]
|
|
79
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
80
|
+
type: Inject,
|
|
81
|
+
args: [DOCUMENT]
|
|
82
|
+
}] }, { type: i0.ElementRef }]; }, propDecorators: { ariaDescribedBy: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], ariaLabelledBy: [{
|
|
85
|
+
type: Input
|
|
86
|
+
}], backdrop: [{
|
|
87
|
+
type: Input
|
|
88
|
+
}], keyboard: [{
|
|
89
|
+
type: Input
|
|
90
|
+
}], windowClass: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}], dismissEvent: [{
|
|
93
|
+
type: Output
|
|
94
|
+
}], class: [{
|
|
95
|
+
type: HostBinding,
|
|
96
|
+
args: ['class']
|
|
97
|
+
}], role: [{
|
|
98
|
+
type: HostBinding,
|
|
99
|
+
args: ['attr.role']
|
|
100
|
+
}], tabindex: [{
|
|
101
|
+
type: HostBinding,
|
|
102
|
+
args: ['tabindex']
|
|
103
|
+
}], ariamodal: [{
|
|
104
|
+
type: HostBinding,
|
|
105
|
+
args: ['attr.aria-modal']
|
|
106
|
+
}], hostAriaLabelledBy: [{
|
|
107
|
+
type: HostBinding,
|
|
108
|
+
args: ['attr.aria-labelledby']
|
|
109
|
+
}], hostAriaDescribedBy: [{
|
|
110
|
+
type: HostBinding,
|
|
111
|
+
args: ['attr.aria-describedby']
|
|
112
|
+
}], backdropClick: [{
|
|
113
|
+
type: HostListener,
|
|
114
|
+
args: ['click', ['$event.target']]
|
|
115
|
+
}], escKey: [{
|
|
116
|
+
type: HostListener,
|
|
117
|
+
args: ['keyup.esc', ['$event']]
|
|
118
|
+
}] } });
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtd2luZG93LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvbW9kYWwvbW9kYWwtd2luZG93LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQVU5RCxNQUFNLE9BQU8sdUJBQXVCO0lBc0NsQyxZQUM0QixTQUFjLEVBQ2hDLE1BQStCO1FBRGIsY0FBUyxHQUFULFNBQVMsQ0FBSztRQUNoQyxXQUFNLEdBQU4sTUFBTSxDQUF5QjtRQWpDaEMsYUFBUSxHQUFxQixLQUFLLENBQUM7UUFDbkMsYUFBUSxHQUFHLElBQUksQ0FBQztRQUdmLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUtsQixTQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ2pCLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFDVCxjQUFTLEdBQUcsSUFBSSxDQUFDO0lBdUI5QyxDQUFDO0lBNUJKLElBQTBCLEtBQUs7UUFDN0IsT0FBTyxTQUFTLElBQUksQ0FBQyxXQUFXLElBQUksRUFBRSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUlELElBQXlDLGtCQUFrQjtRQUN6RCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUNELElBQTBDLG1CQUFtQjtRQUMzRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUN5QyxhQUFhLENBQ3JELEdBQWdCO1FBRWhCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEtBQUssR0FBRyxFQUFFO1lBQy9ELElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDakQ7SUFDSCxDQUFDO0lBQ3NDLE1BQU0sQ0FBQyxLQUFLO1FBQ2pELElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtZQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0gsQ0FBQztJQU9ELE9BQU8sQ0FBQyxNQUFNO1FBQ1osSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDO0lBQ25ELENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDL0QsTUFBTSxjQUFjLEdBQUcsNEJBQTRCLENBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUMxQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRUwsTUFBTSxjQUFjLEdBQUcsY0FBYyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO1lBQ25FLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN4QjtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUV0QyxJQUFJLGNBQWMsQ0FBQztRQUNuQixJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNuRSxjQUFjLEdBQUcsV0FBVyxDQUFDO1NBQzlCO2FBQU07WUFDTCxjQUFjLEdBQUcsSUFBSSxDQUFDO1NBQ3ZCO1FBQ0QsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7O29IQTFFVSx1QkFBdUIsa0JBdUN4QixRQUFRO3dHQXZDUCx1QkFBdUIseWtCQU54Qjs7OztHQUlUOzJGQUVVLHVCQUF1QjtrQkFSbkMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixRQUFRLEVBQUU7Ozs7R0FJVDtpQkFDRjs7MEJBd0NJLE1BQU07MkJBQUMsUUFBUTtxRUFsQ1QsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBRW1CLEtBQUs7c0JBQTlCLFdBQVc7dUJBQUMsT0FBTztnQkFHTSxJQUFJO3NCQUE3QixXQUFXO3VCQUFDLFdBQVc7Z0JBQ0MsUUFBUTtzQkFBaEMsV0FBVzt1QkFBQyxVQUFVO2dCQUNTLFNBQVM7c0JBQXhDLFdBQVc7dUJBQUMsaUJBQWlCO2dCQUNXLGtCQUFrQjtzQkFBMUQsV0FBVzt1QkFBQyxzQkFBc0I7Z0JBR08sbUJBQW1CO3NCQUE1RCxXQUFXO3VCQUFDLHVCQUF1QjtnQkFHTSxhQUFhO3NCQUF0RCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQztnQkFPRCxNQUFNO3NCQUE1QyxZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBnZXRGb2N1c2FibGVCb3VuZGFyeUVsZW1lbnRzLCBGT0NVUyB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBNb2RhbERpc21pc3NSZWFzb25zIH0gZnJvbSAnLi9tb2RhbC1kaXNtaXNzLXJlYXNvbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsdXgtbW9kYWwtd2luZG93JyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYFxufSlcbmV4cG9ydCBjbGFzcyBMdXhNb2RhbFdpbmRvd0NvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gIHByaXZhdGUgX2VsV2l0aEZvY3VzOiBFbGVtZW50OyAvLyBlbGVtZW50IHRoYXQgaXMgZm9jdXNlZCBwcmlvciB0byBtb2RhbCBvcGVuaW5nXG5cbiAgQElucHV0KCkgYXJpYURlc2NyaWJlZEJ5OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFyaWFMYWJlbGxlZEJ5OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJhY2tkcm9wOiBib29sZWFuIHwgc3RyaW5nID0gZmFsc2U7XG4gIEBJbnB1dCgpIGtleWJvYXJkID0gdHJ1ZTtcbiAgQElucHV0KCkgd2luZG93Q2xhc3M6IHN0cmluZztcblxuICBAT3V0cHV0KCkgZGlzbWlzc0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MnKSBnZXQgY2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYG1vZGFsICR7dGhpcy53aW5kb3dDbGFzcyB8fCAnJ31gO1xuICB9XG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZSA9ICdkaWFsb2cnO1xuICBASG9zdEJpbmRpbmcoJ3RhYmluZGV4JykgdGFiaW5kZXggPSAnLTEnO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1tb2RhbCcpIGFyaWFtb2RhbCA9IHRydWU7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsbGVkYnknKSBnZXQgaG9zdEFyaWFMYWJlbGxlZEJ5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYXJpYUxhYmVsbGVkQnk7XG4gIH1cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkYnknKSBnZXQgaG9zdEFyaWFEZXNjcmliZWRCeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFyaWFEZXNjcmliZWRCeTtcbiAgfVxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50LnRhcmdldCddKSBiYWNrZHJvcENsaWNrKFxuICAgIGJ0bjogSFRNTEVsZW1lbnRcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYmFja2Ryb3AgPT09IHRydWUgJiYgdGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudCA9PT0gYnRuKSB7XG4gICAgICB0aGlzLmRpc21pc3MoTW9kYWxEaXNtaXNzUmVhc29ucy5CYWNrZHJvcENsaWNrKTtcbiAgICB9XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcigna2V5dXAuZXNjJywgWyckZXZlbnQnXSkgZXNjS2V5KGV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMua2V5Ym9hcmQgJiYgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHRoaXMuZGlzbWlzcyhNb2RhbERpc21pc3NSZWFzb25zLkVzYyk7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ6IGFueSxcbiAgICBwcml2YXRlIF9lbFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD5cbiAgKSB7fVxuXG4gIGRpc21pc3MocmVhc29uKTogdm9pZCB7XG4gICAgdGhpcy5kaXNtaXNzRXZlbnQuZW1pdChyZWFzb24pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fZWxXaXRoRm9jdXMgPSB0aGlzLl9kb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgY29uc3QgZmlyc3RGb2N1c2FibGUgPSBnZXRGb2N1c2FibGVCb3VuZGFyeUVsZW1lbnRzKFxuICAgICAgICB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50XG4gICAgICApWzBdO1xuXG4gICAgICBjb25zdCBlbGVtZW50VG9Gb2N1cyA9IGZpcnN0Rm9jdXNhYmxlIHx8IHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGNvbnN0IGJvZHkgPSB0aGlzLl9kb2N1bWVudC5ib2R5O1xuICAgIGNvbnN0IGVsV2l0aEZvY3VzID0gdGhpcy5fZWxXaXRoRm9jdXM7XG5cbiAgICBsZXQgZWxlbWVudFRvRm9jdXM7XG4gICAgaWYgKGVsV2l0aEZvY3VzICYmIGVsV2l0aEZvY3VzW0ZPQ1VTXSAmJiBib2R5LmNvbnRhaW5zKGVsV2l0aEZvY3VzKSkge1xuICAgICAgZWxlbWVudFRvRm9jdXMgPSBlbFdpdGhGb2N1cztcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudFRvRm9jdXMgPSBib2R5O1xuICAgIH1cbiAgICBlbGVtZW50VG9Gb2N1cy5mb2N1cygpO1xuICAgIHRoaXMuX2VsV2l0aEZvY3VzID0gbnVsbDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Injectable, ComponentFactoryResolver, } from '@angular/core';
|
|
2
|
+
import { ModalStack } from './modal-stack';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./modal-stack";
|
|
5
|
+
/**
|
|
6
|
+
* A service that it allow open an close modal components
|
|
7
|
+
*/
|
|
8
|
+
export class ModalService {
|
|
9
|
+
constructor(modalStack, moduleCFR) {
|
|
10
|
+
this.modalStack = modalStack;
|
|
11
|
+
this.moduleCFR = moduleCFR;
|
|
12
|
+
}
|
|
13
|
+
/**Open a modal component
|
|
14
|
+
* @param content TemplateRef
|
|
15
|
+
*/
|
|
16
|
+
open(content, options = {}) {
|
|
17
|
+
return this.modalStack.open(this.moduleCFR, content, options);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
ModalService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ModalService, deps: [{ token: i1.ModalStack }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
21
|
+
ModalService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ModalService, providedIn: 'root' });
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: ModalService, decorators: [{
|
|
23
|
+
type: Injectable,
|
|
24
|
+
args: [{ providedIn: 'root' }]
|
|
25
|
+
}], ctorParameters: function () { return [{ type: i1.ModalStack }, { type: i0.ComponentFactoryResolver }]; } });
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2x1eC9zcmMvbGliL21vZGFsL21vZGFsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVix3QkFBd0IsR0FFekIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBSTNDOztHQUVHO0FBRUgsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFDVSxVQUFzQixFQUN0QixTQUFtQztRQURuQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQTBCO0lBQzFDLENBQUM7SUFFSjs7T0FFRztJQUNILElBQUksQ0FBQyxPQUF5QixFQUFFLFVBQTJCLEVBQUU7UUFDM0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoRSxDQUFDOzt5R0FYVSxZQUFZOzZHQUFaLFlBQVksY0FEQyxNQUFNOzJGQUNuQixZQUFZO2tCQUR4QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEluamVjdGFibGUsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kYWxTdGFjayB9IGZyb20gJy4vbW9kYWwtc3RhY2snO1xuaW1wb3J0IHsgTW9kYWxSZWYgfSBmcm9tICcuL21vZGFsLXJlZic7XG5pbXBvcnQgeyBMdXhNb2RhbE9wdGlvbnMgfSBmcm9tICcuL21vZGFsLWNvbmZpZyc7XG5cbi8qKlxuICogQSBzZXJ2aWNlIHRoYXQgaXQgYWxsb3cgb3BlbiBhbiBjbG9zZSBtb2RhbCBjb21wb25lbnRzXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTW9kYWxTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtb2RhbFN0YWNrOiBNb2RhbFN0YWNrLFxuICAgIHByaXZhdGUgbW9kdWxlQ0ZSOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXJcbiAgKSB7fVxuXG4gIC8qKk9wZW4gYSBtb2RhbCBjb21wb25lbnRcbiAgICogQHBhcmFtIGNvbnRlbnQgVGVtcGxhdGVSZWZcbiAgICovXG4gIG9wZW4oY29udGVudDogVGVtcGxhdGVSZWY8YW55Piwgb3B0aW9uczogTHV4TW9kYWxPcHRpb25zID0ge30pOiBNb2RhbFJlZiB7XG4gICAgcmV0dXJuIHRoaXMubW9kYWxTdGFjay5vcGVuKHRoaXMubW9kdWxlQ0ZSLCBjb250ZW50LCBvcHRpb25zKTtcbiAgfVxufVxuIl19
|
|
File without changes
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
2
|
+
import { languageDetector } from '../lang';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "../tooltip/tooltip.directive";
|
|
6
|
+
export class PaginationComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.literals = {
|
|
9
|
+
en: {
|
|
10
|
+
first: 'First',
|
|
11
|
+
previous: 'Previous',
|
|
12
|
+
next: 'Next',
|
|
13
|
+
last: 'Last'
|
|
14
|
+
},
|
|
15
|
+
es: {
|
|
16
|
+
first: 'Primero',
|
|
17
|
+
previous: 'Anterior',
|
|
18
|
+
next: 'Siguiente',
|
|
19
|
+
last: 'Último'
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
this.showPagination = false;
|
|
23
|
+
this.hidePrevious = false;
|
|
24
|
+
this.lastPage = false;
|
|
25
|
+
this.totalPages = 0;
|
|
26
|
+
this.displayNextEllipsis = false;
|
|
27
|
+
this.displayPreviousEllipsis = false;
|
|
28
|
+
this.pages = [];
|
|
29
|
+
this.goToPage = new EventEmitter();
|
|
30
|
+
this.pageSizeChange = new EventEmitter();
|
|
31
|
+
this.lang = languageDetector();
|
|
32
|
+
}
|
|
33
|
+
set lang(l) {
|
|
34
|
+
if (l === this._lang) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (Object.keys(this.literals).includes(l)) {
|
|
38
|
+
this._lang = l;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
this._lang = 'en';
|
|
42
|
+
}
|
|
43
|
+
this.loadLanguage();
|
|
44
|
+
}
|
|
45
|
+
get lang() {
|
|
46
|
+
return this._lang;
|
|
47
|
+
}
|
|
48
|
+
set paginationInfo(value) {
|
|
49
|
+
this.paginationInfoValue = value;
|
|
50
|
+
this.syncState();
|
|
51
|
+
}
|
|
52
|
+
get paginationInfo() {
|
|
53
|
+
return this.paginationInfoValue;
|
|
54
|
+
}
|
|
55
|
+
ngOnInit() {
|
|
56
|
+
this.calculatePages();
|
|
57
|
+
}
|
|
58
|
+
pageSizeChanged(pageSize) {
|
|
59
|
+
this.paginationInfo.pageSize = pageSize;
|
|
60
|
+
this.syncState();
|
|
61
|
+
this.pageSizeChange.emit(pageSize);
|
|
62
|
+
}
|
|
63
|
+
onPage(n) {
|
|
64
|
+
this.goToPage.emit(n);
|
|
65
|
+
}
|
|
66
|
+
onFirst() {
|
|
67
|
+
this.goToPage.emit(0);
|
|
68
|
+
}
|
|
69
|
+
onLast() {
|
|
70
|
+
this.goToPage.emit(this.totalPages - 1);
|
|
71
|
+
}
|
|
72
|
+
onNext() {
|
|
73
|
+
const page = (this.paginationInfo.page || 0) + 1;
|
|
74
|
+
this.goToPage.emit(page);
|
|
75
|
+
}
|
|
76
|
+
onPrevious() {
|
|
77
|
+
const page = (this.paginationInfo.page || 0) - 1;
|
|
78
|
+
this.goToPage.emit(page);
|
|
79
|
+
}
|
|
80
|
+
syncState() {
|
|
81
|
+
this.pages = this.calculatePages();
|
|
82
|
+
this.showPagination =
|
|
83
|
+
this.paginationInfo.total > this.paginationInfo.pageSize;
|
|
84
|
+
this.hidePrevious = this.paginationInfo.page === 0;
|
|
85
|
+
this.lastPage =
|
|
86
|
+
this.paginationInfo.pageSize * (this.paginationInfo.page + 1) >=
|
|
87
|
+
this.paginationInfo.total;
|
|
88
|
+
this.totalPages =
|
|
89
|
+
Math.ceil(this.paginationInfo.total / this.paginationInfo.pageSize) || 0;
|
|
90
|
+
this.displayNextEllipsis = !this.pages.includes(this.totalPages - 1);
|
|
91
|
+
this.displayPreviousEllipsis = !this.pages.includes(0);
|
|
92
|
+
}
|
|
93
|
+
calculatePages() {
|
|
94
|
+
const totalPages = Math.ceil(this.paginationInfo.total / this.paginationInfo.pageSize) - 1; // 0-index
|
|
95
|
+
const p = this.paginationInfo.page || 0;
|
|
96
|
+
const pagesToShow = this.paginationInfo.pagesToShow;
|
|
97
|
+
const pages = [];
|
|
98
|
+
pages.push(p);
|
|
99
|
+
const times = pagesToShow - 1;
|
|
100
|
+
for (let i = 0; i < times; i++) {
|
|
101
|
+
if (pages.length < pagesToShow) {
|
|
102
|
+
if (Math.min(...pages) > 0) {
|
|
103
|
+
pages.unshift(Math.min(...pages) - 1);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
if (pages.length < pagesToShow) {
|
|
107
|
+
if (Math.max(...pages) < totalPages) {
|
|
108
|
+
pages.push(Math.max(...pages) + 1);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
pages.sort((a, b) => a - b);
|
|
113
|
+
return pages;
|
|
114
|
+
}
|
|
115
|
+
loadLanguage() {
|
|
116
|
+
const l = this.literals[this.lang];
|
|
117
|
+
this.first = l.first;
|
|
118
|
+
this.previous = l.previous;
|
|
119
|
+
this.next = l.next;
|
|
120
|
+
this.last = l.last;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
PaginationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: PaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
124
|
+
PaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: PaginationComponent, selector: "lux-pagination", inputs: { lang: "lang", paginationInfo: "paginationInfo" }, outputs: { goToPage: "goToPage", pageSizeChange: "pageSizeChange" }, ngImport: i0, template: "<div class=\"lux-pagination\" *ngIf=\"showPagination\">\n <ng-container *ngIf=\"!hidePrevious\">\n <a\n luxTooltip\n [content]=\"first\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onFirst()\"\n [ngClass]=\"{\n enabledFirstLast: !hidePrevious\n }\"\n class=\"button-pagination icon arrow-left-end\"\n ></a>\n <a\n luxTooltip\n [content]=\"previous\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onPrevious()\"\n [ngClass]=\"{\n enabledFirstLast: !hidePrevious\n }\"\n class=\"button-pagination icon arrow-left\"\n ></a>\n </ng-container>\n\n <span class=\"ellipsis\" *ngIf=\"displayPreviousEllipsis\">...</span>\n\n <ng-container *ngFor=\"let pageNum of pages\">\n <a\n placement=\"top\"\n delay=\"500\"\n [ngClass]=\"{\n disabled: pageNum === paginationInfo.page,\n enabled: pageNum !== paginationInfo.page\n }\"\n class=\"button-pagination\"\n (click)=\"onPage(pageNum)\"\n >{{ pageNum + 1 }}</a\n >\n </ng-container>\n\n <span class=\"ellipsis\" *ngIf=\"displayNextEllipsis\">...</span>\n\n <ng-container *ngIf=\"!lastPage\">\n <a\n luxTooltip\n [content]=\"next\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onNext()\"\n [ngClass]=\"{\n enabledFirstLast: !lastPage\n }\"\n class=\"button-pagination icon arrow-right\"\n ></a>\n <a\n luxTooltip\n [content]=\"last\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onLast()\"\n [ngClass]=\"{\n enabledFirstLast: !lastPage\n }\"\n class=\"button-pagination icon arrow-right-end\"\n ></a>\n </ng-container>\n</div>\n", styles: [":focus{z-index:1}input,select,textarea{border:1px solid #495057;border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057);margin:0rem;margin:var(--lux-input-margin, 0rem);padding:0rem .5rem;padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:#fe2e2e;background:var(--lux-alert-background, #fe2e2e);color:#fff;color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0rem .5rem;margin-bottom:0;font-weight:400;color:default;color:var(--lux-symbol-color, default);text-align:center;white-space:nowrap;background:default;background:var(--lux-symbol-background, default);font-size:1rem;font-size:var(--lux-symbol-font-size, 1rem)}.bordered,.symbol{border:1px solid #495057;border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057)}.rounded,.rounded-right,.rounded-middle,.rounded-left{border-radius:.25rem;border-radius:var(--lux-border-radius, .25rem)}.rounded-left{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-middle{border-radius:0}.rounded-right{border-top-left-radius:0;border-bottom-left-radius:0}.prefix{border-right:none}.infix{border-left:none;border-right:none}.postfix{border-left:none;display:flex;align-items:center}.monospace{font-family:monospace}.default-font{color:#000;color:var(--lux-font-color, black)}.lux-pagination{display:flex;flex-direction:row;margin:2% 0;width:100%;background:white;align-items:center}.disabled{cursor:not-allowed;border:1px solid #325c81;border:var(--lux-pagination-disabled-border, 1px solid #325c81);border-radius:10%;border-radius:var(--lux-pagination-disabled-border-radius, 10%);padding:1%;margin:0 .7%;color:#fff;color:var(--lux-pagination-disabled-color, white);background-color:#325c81;background-color:var(--lux-pagination-disabled-background-color, #325c81);text-decoration:none;pointer-events:none}.enabled{border:1px solid #cfcfcf;border:var(--lux-pagination-enabled-border, 1px solid #cfcfcf);border-radius:10%;border-radius:var(--lux-pagination-enabled-border-radius, 10%);padding:1%;margin:0 .7%;color:#325c81;color:var(--lux-pagination-enabled-color, #325c81);width:-webkit-min-content;width:-moz-min-content;width:min-content;cursor:pointer}.enabledFirstLast{border:1px solid #cfcfcf;border-radius:10%;padding:1%;color:#325c81;margin:0 .7%;width:-webkit-min-content;width:-moz-min-content;width:min-content;cursor:pointer}.ellipsis{margin:0rem .5rem;padding:0rem;color:#325c81;width:-webkit-min-content;width:-moz-min-content;width:min-content}.button-pagination{width:1em;width:var(--lux-pagination-button-width, 1em);height:1.2em;height:var(--lux-pagination-button-height, 1.2em);font-size:80%;font-size:var(--lux-pagination-font-size, 80%);text-align:center}.icon{background-size:1.3em 1.4em;background-position:center;background-repeat:no-repeat}.arrow-right{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2268%22 height%3D%2248%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Ctitle%3Ebackground%3C%2Ftitle%3E %3Crect fill%3D%22none%22 id%3D%22canvas_background%22 height%3D%22402%22 width%3D%221082%22 y%3D%22-1%22 x%3D%22-1%22%2F%3E %3C%2Fg%3E %3Cg%3E %3Ctitle%3ELayer 1%3C%2Ftitle%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_2%22 points%3D%2221.8%2C45.7 10.4%2C44.3 30.8%2C24 10.4%2C3.7 21.8%2C2.3 43.5%2C24 %22%2F%3E %3C%2Fg%3E%3C%2Fsvg%3E\");background-position:.4em}.arrow-left{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2268%22 height%3D%2248%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Ctitle%3Ebackground%3C%2Ftitle%3E %3Crect fill%3D%22none%22 id%3D%22canvas_background%22 height%3D%22402%22 width%3D%221082%22 y%3D%22-1%22 x%3D%22-1%22%2F%3E %3C%2Fg%3E %3Cg%3E %3Ctitle%3ELayer 1%3C%2Ftitle%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_2%22 points%3D%2221.8%2C45.7 10.4%2C44.3 30.8%2C24 10.4%2C3.7 21.8%2C2.3 43.5%2C24 %22%2F%3E %3C%2Fg%3E%3C%2Fsvg%3E\");transform:rotate(180deg);background-position:.4em}.arrow-right-end{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2268%22 height%3D%2248%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Ctitle%3Ebackground%3C%2Ftitle%3E %3Crect fill%3D%22none%22 id%3D%22canvas_background%22 height%3D%22402%22 width%3D%221082%22 y%3D%22-1%22 x%3D%22-1%22%2F%3E %3C%2Fg%3E %3Cg%3E %3Ctitle%3ELayer 1%3C%2Ftitle%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_2%22 points%3D%2221.8%2C45.7 10.4%2C44.3 30.8%2C24 10.4%2C3.7 21.8%2C2.3 43.5%2C24 %22%2F%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_3%22 points%3D%2241.8%2C45.7 30.4%2C44.3 50.8%2C24 30.4%2C3.7 41.8%2C2.3 63.5%2C24 %22%2F%3E %3C%2Fg%3E%3C%2Fsvg%3E\");background-position:.1em}.arrow-left-end{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2268%22 height%3D%2248%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Ctitle%3Ebackground%3C%2Ftitle%3E %3Crect fill%3D%22none%22 id%3D%22canvas_background%22 height%3D%22402%22 width%3D%221082%22 y%3D%22-1%22 x%3D%22-1%22%2F%3E %3C%2Fg%3E %3Cg%3E %3Ctitle%3ELayer 1%3C%2Ftitle%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_2%22 points%3D%2221.8%2C45.7 10.4%2C44.3 30.8%2C24 10.4%2C3.7 21.8%2C2.3 43.5%2C24 %22%2F%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_3%22 points%3D%2241.8%2C45.7 30.4%2C44.3 50.8%2C24 30.4%2C3.7 41.8%2C2.3 63.5%2C24 %22%2F%3E %3C%2Fg%3E%3C%2Fsvg%3E\");background-position:.1em;transform:rotate(180deg)}@media only screen and (min-width: 300px) and (max-width: 500px){.arrow-right,.arrow-left{background-position:.2em}.arrow-right-end,.arrow-left-end{background-position:0em}}@media only screen and (min-width: 500px) and (max-width: 850px){.arrow-right,.arrow-left{background-position:.3em}.arrow-right-end,.arrow-left-end{background-position:0em}}@media only screen and (min-width: 900px){.arrow-right,.arrow-left{background-position:.2em}.arrow-right-end,.arrow-left-end{background-position:0em}}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.LuxTooltipDirective, selector: "[luxTooltip]", inputs: ["luxTooltip", "content", "placement"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
125
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: PaginationComponent, decorators: [{
|
|
126
|
+
type: Component,
|
|
127
|
+
args: [{ selector: 'lux-pagination', template: "<div class=\"lux-pagination\" *ngIf=\"showPagination\">\n <ng-container *ngIf=\"!hidePrevious\">\n <a\n luxTooltip\n [content]=\"first\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onFirst()\"\n [ngClass]=\"{\n enabledFirstLast: !hidePrevious\n }\"\n class=\"button-pagination icon arrow-left-end\"\n ></a>\n <a\n luxTooltip\n [content]=\"previous\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onPrevious()\"\n [ngClass]=\"{\n enabledFirstLast: !hidePrevious\n }\"\n class=\"button-pagination icon arrow-left\"\n ></a>\n </ng-container>\n\n <span class=\"ellipsis\" *ngIf=\"displayPreviousEllipsis\">...</span>\n\n <ng-container *ngFor=\"let pageNum of pages\">\n <a\n placement=\"top\"\n delay=\"500\"\n [ngClass]=\"{\n disabled: pageNum === paginationInfo.page,\n enabled: pageNum !== paginationInfo.page\n }\"\n class=\"button-pagination\"\n (click)=\"onPage(pageNum)\"\n >{{ pageNum + 1 }}</a\n >\n </ng-container>\n\n <span class=\"ellipsis\" *ngIf=\"displayNextEllipsis\">...</span>\n\n <ng-container *ngIf=\"!lastPage\">\n <a\n luxTooltip\n [content]=\"next\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onNext()\"\n [ngClass]=\"{\n enabledFirstLast: !lastPage\n }\"\n class=\"button-pagination icon arrow-right\"\n ></a>\n <a\n luxTooltip\n [content]=\"last\"\n placement=\"top\"\n delay=\"500\"\n (click)=\"onLast()\"\n [ngClass]=\"{\n enabledFirstLast: !lastPage\n }\"\n class=\"button-pagination icon arrow-right-end\"\n ></a>\n </ng-container>\n</div>\n", styles: [":focus{z-index:1}input,select,textarea{border:1px solid #495057;border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057);margin:0rem;margin:var(--lux-input-margin, 0rem);padding:0rem .5rem;padding:var(--lux-input-padding, 0rem .5rem)}.alert{padding:.2rem 2rem;background:#fe2e2e;background:var(--lux-alert-background, #fe2e2e);color:#fff;color:var(--lux-alert-color, white);font-family:Consolas,monospace;width:45%;margin-right:1rem;display:inline-block}.symbol{display:inline-block;align-items:baseline;padding:0rem .5rem;margin-bottom:0;font-weight:400;color:default;color:var(--lux-symbol-color, default);text-align:center;white-space:nowrap;background:default;background:var(--lux-symbol-background, default);font-size:1rem;font-size:var(--lux-symbol-font-size, 1rem)}.bordered,.symbol{border:1px solid #495057;border:var(--lux-input-border, 1px solid) var(--lux-input-border-color, #495057)}.rounded,.rounded-right,.rounded-middle,.rounded-left{border-radius:.25rem;border-radius:var(--lux-border-radius, .25rem)}.rounded-left{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-middle{border-radius:0}.rounded-right{border-top-left-radius:0;border-bottom-left-radius:0}.prefix{border-right:none}.infix{border-left:none;border-right:none}.postfix{border-left:none;display:flex;align-items:center}.monospace{font-family:monospace}.default-font{color:#000;color:var(--lux-font-color, black)}.lux-pagination{display:flex;flex-direction:row;margin:2% 0;width:100%;background:white;align-items:center}.disabled{cursor:not-allowed;border:1px solid #325c81;border:var(--lux-pagination-disabled-border, 1px solid #325c81);border-radius:10%;border-radius:var(--lux-pagination-disabled-border-radius, 10%);padding:1%;margin:0 .7%;color:#fff;color:var(--lux-pagination-disabled-color, white);background-color:#325c81;background-color:var(--lux-pagination-disabled-background-color, #325c81);text-decoration:none;pointer-events:none}.enabled{border:1px solid #cfcfcf;border:var(--lux-pagination-enabled-border, 1px solid #cfcfcf);border-radius:10%;border-radius:var(--lux-pagination-enabled-border-radius, 10%);padding:1%;margin:0 .7%;color:#325c81;color:var(--lux-pagination-enabled-color, #325c81);width:-webkit-min-content;width:-moz-min-content;width:min-content;cursor:pointer}.enabledFirstLast{border:1px solid #cfcfcf;border-radius:10%;padding:1%;color:#325c81;margin:0 .7%;width:-webkit-min-content;width:-moz-min-content;width:min-content;cursor:pointer}.ellipsis{margin:0rem .5rem;padding:0rem;color:#325c81;width:-webkit-min-content;width:-moz-min-content;width:min-content}.button-pagination{width:1em;width:var(--lux-pagination-button-width, 1em);height:1.2em;height:var(--lux-pagination-button-height, 1.2em);font-size:80%;font-size:var(--lux-pagination-font-size, 80%);text-align:center}.icon{background-size:1.3em 1.4em;background-position:center;background-repeat:no-repeat}.arrow-right{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2268%22 height%3D%2248%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Ctitle%3Ebackground%3C%2Ftitle%3E %3Crect fill%3D%22none%22 id%3D%22canvas_background%22 height%3D%22402%22 width%3D%221082%22 y%3D%22-1%22 x%3D%22-1%22%2F%3E %3C%2Fg%3E %3Cg%3E %3Ctitle%3ELayer 1%3C%2Ftitle%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_2%22 points%3D%2221.8%2C45.7 10.4%2C44.3 30.8%2C24 10.4%2C3.7 21.8%2C2.3 43.5%2C24 %22%2F%3E %3C%2Fg%3E%3C%2Fsvg%3E\");background-position:.4em}.arrow-left{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2268%22 height%3D%2248%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Ctitle%3Ebackground%3C%2Ftitle%3E %3Crect fill%3D%22none%22 id%3D%22canvas_background%22 height%3D%22402%22 width%3D%221082%22 y%3D%22-1%22 x%3D%22-1%22%2F%3E %3C%2Fg%3E %3Cg%3E %3Ctitle%3ELayer 1%3C%2Ftitle%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_2%22 points%3D%2221.8%2C45.7 10.4%2C44.3 30.8%2C24 10.4%2C3.7 21.8%2C2.3 43.5%2C24 %22%2F%3E %3C%2Fg%3E%3C%2Fsvg%3E\");transform:rotate(180deg);background-position:.4em}.arrow-right-end{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2268%22 height%3D%2248%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Ctitle%3Ebackground%3C%2Ftitle%3E %3Crect fill%3D%22none%22 id%3D%22canvas_background%22 height%3D%22402%22 width%3D%221082%22 y%3D%22-1%22 x%3D%22-1%22%2F%3E %3C%2Fg%3E %3Cg%3E %3Ctitle%3ELayer 1%3C%2Ftitle%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_2%22 points%3D%2221.8%2C45.7 10.4%2C44.3 30.8%2C24 10.4%2C3.7 21.8%2C2.3 43.5%2C24 %22%2F%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_3%22 points%3D%2241.8%2C45.7 30.4%2C44.3 50.8%2C24 30.4%2C3.7 41.8%2C2.3 63.5%2C24 %22%2F%3E %3C%2Fg%3E%3C%2Fsvg%3E\");background-position:.1em}.arrow-left-end{background-image:url(\"data:image/svg+xml,%3Csvg width%3D%2268%22 height%3D%2248%22 xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E %3Cg%3E %3Ctitle%3Ebackground%3C%2Ftitle%3E %3Crect fill%3D%22none%22 id%3D%22canvas_background%22 height%3D%22402%22 width%3D%221082%22 y%3D%22-1%22 x%3D%22-1%22%2F%3E %3C%2Fg%3E %3Cg%3E %3Ctitle%3ELayer 1%3C%2Ftitle%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_2%22 points%3D%2221.8%2C45.7 10.4%2C44.3 30.8%2C24 10.4%2C3.7 21.8%2C2.3 43.5%2C24 %22%2F%3E %3Cpolygon fill%3D%22%23325C81%22 id%3D%22svg_3%22 points%3D%2241.8%2C45.7 30.4%2C44.3 50.8%2C24 30.4%2C3.7 41.8%2C2.3 63.5%2C24 %22%2F%3E %3C%2Fg%3E%3C%2Fsvg%3E\");background-position:.1em;transform:rotate(180deg)}@media only screen and (min-width: 300px) and (max-width: 500px){.arrow-right,.arrow-left{background-position:.2em}.arrow-right-end,.arrow-left-end{background-position:0em}}@media only screen and (min-width: 500px) and (max-width: 850px){.arrow-right,.arrow-left{background-position:.3em}.arrow-right-end,.arrow-left-end{background-position:0em}}@media only screen and (min-width: 900px){.arrow-right,.arrow-left{background-position:.2em}.arrow-right-end,.arrow-left-end{background-position:0em}}\n"] }]
|
|
128
|
+
}], ctorParameters: function () { return []; }, propDecorators: { goToPage: [{
|
|
129
|
+
type: Output
|
|
130
|
+
}], pageSizeChange: [{
|
|
131
|
+
type: Output
|
|
132
|
+
}], lang: [{
|
|
133
|
+
type: Input
|
|
134
|
+
}], paginationInfo: [{
|
|
135
|
+
type: Input
|
|
136
|
+
}] } });
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9sdXgvc3JjL2xpYi9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDOzs7O0FBUTNDLE1BQU0sT0FBTyxtQkFBbUI7SUE4RDlCO1FBN0RBLGFBQVEsR0FBRztZQUNULEVBQUUsRUFBRTtnQkFDRixLQUFLLEVBQUUsT0FBTztnQkFDZCxRQUFRLEVBQUUsVUFBVTtnQkFDcEIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osSUFBSSxFQUFFLE1BQU07YUFDYjtZQUNELEVBQUUsRUFBRTtnQkFDRixLQUFLLEVBQUUsU0FBUztnQkFDaEIsUUFBUSxFQUFFLFVBQVU7Z0JBQ3BCLElBQUksRUFBRSxXQUFXO2dCQUNqQixJQUFJLEVBQUUsUUFBUTthQUNmO1NBQ0YsQ0FBQztRQU9LLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsZUFBVSxHQUFHLENBQUMsQ0FBQztRQUNmLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQUM1Qiw0QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFFaEMsVUFBSyxHQUFhLEVBQUUsQ0FBQztRQUVsQixhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN0QyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFnQ3BELElBQUks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QUU7b0JBQ25DLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUNwQzthQUNGO1NBQ0Y7UUFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLFlBQVk7UUFDbEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7O2dIQTdJVSxtQkFBbUI7b0dBQW5CLG1CQUFtQix1TENUaEMsMHREQXFFQTsyRkQ1RGEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGdCQUFnQjswRUFrQ2hCLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFPSCxJQUFJO3NCQURQLEtBQUs7Z0JBaUJGLGNBQWM7c0JBRGpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGxhbmd1YWdlRGV0ZWN0b3IgfSBmcm9tICcuLi9sYW5nJztcclxuaW1wb3J0IHsgUGFnaW5hdGlvbkluZm8gfSBmcm9tICcuL3BhZ2luYXRpb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsdXgtcGFnaW5hdGlvbicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3BhZ2luYXRpb24uY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgbGl0ZXJhbHMgPSB7XHJcbiAgICBlbjoge1xyXG4gICAgICBmaXJzdDogJ0ZpcnN0JyxcclxuICAgICAgcHJldmlvdXM6ICdQcmV2aW91cycsXHJcbiAgICAgIG5leHQ6ICdOZXh0JyxcclxuICAgICAgbGFzdDogJ0xhc3QnXHJcbiAgICB9LFxyXG4gICAgZXM6IHtcclxuICAgICAgZmlyc3Q6ICdQcmltZXJvJyxcclxuICAgICAgcHJldmlvdXM6ICdBbnRlcmlvcicsXHJcbiAgICAgIG5leHQ6ICdTaWd1aWVudGUnLFxyXG4gICAgICBsYXN0OiAnw5psdGltbydcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwdWJsaWMgZmlyc3Q6IHN0cmluZztcclxuICBwdWJsaWMgcHJldmlvdXM6IHN0cmluZztcclxuICBwdWJsaWMgbmV4dDogc3RyaW5nO1xyXG4gIHB1YmxpYyBsYXN0OiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyBzaG93UGFnaW5hdGlvbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBoaWRlUHJldmlvdXMgPSBmYWxzZTtcclxuICBwdWJsaWMgbGFzdFBhZ2UgPSBmYWxzZTtcclxuICBwdWJsaWMgdG90YWxQYWdlcyA9IDA7XHJcbiAgcHVibGljIGRpc3BsYXlOZXh0RWxsaXBzaXMgPSBmYWxzZTtcclxuICBwdWJsaWMgZGlzcGxheVByZXZpb3VzRWxsaXBzaXMgPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIHBhZ2VzOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICBAT3V0cHV0KCkgZ29Ub1BhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuICBAT3V0cHV0KCkgcGFnZVNpemVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcbiAgLyoqIEN1cnJlbnQgcGFnZSwgdG90YWwgaXRlbXMgYW5kIGl0ZW1zIHRvIHNob3cgcGVyIHBhZ2UgKi9cclxuICBwcml2YXRlIHBhZ2luYXRpb25JbmZvVmFsdWU6IFBhZ2luYXRpb25JbmZvO1xyXG5cclxuICBwcml2YXRlIF9sYW5nOiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBzZXQgbGFuZyhsOiBzdHJpbmcpIHtcclxuICAgIGlmIChsID09PSB0aGlzLl9sYW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmxpdGVyYWxzKS5pbmNsdWRlcyhsKSkge1xyXG4gICAgICB0aGlzLl9sYW5nID0gbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX2xhbmcgPSAnZW4nO1xyXG4gICAgfVxyXG4gICAgdGhpcy5sb2FkTGFuZ3VhZ2UoKTtcclxuICB9XHJcbiAgZ2V0IGxhbmcoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9sYW5nO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgcGFnaW5hdGlvbkluZm8odmFsdWU6IFBhZ2luYXRpb25JbmZvKSB7XHJcbiAgICB0aGlzLnBhZ2luYXRpb25JbmZvVmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMuc3luY1N0YXRlKCk7XHJcbiAgfVxyXG4gIGdldCBwYWdpbmF0aW9uSW5mbygpOiBQYWdpbmF0aW9uSW5mbyB7XHJcbiAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uSW5mb1ZhbHVlO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmxhbmcgPSBsYW5ndWFnZURldGVjdG9yKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FsY3VsYXRlUGFnZXMoKTtcclxuICB9XHJcblxyXG4gIHBhZ2VTaXplQ2hhbmdlZChwYWdlU2l6ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLnBhZ2luYXRpb25JbmZvLnBhZ2VTaXplID0gcGFnZVNpemU7XHJcbiAgICB0aGlzLnN5bmNTdGF0ZSgpO1xyXG4gICAgdGhpcy5wYWdlU2l6ZUNoYW5nZS5lbWl0KHBhZ2VTaXplKTtcclxuICB9XHJcblxyXG4gIG9uUGFnZShuOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuZ29Ub1BhZ2UuZW1pdChuKTtcclxuICB9XHJcblxyXG4gIG9uRmlyc3QoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdvVG9QYWdlLmVtaXQoMCk7XHJcbiAgfVxyXG5cclxuICBvbkxhc3QoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdvVG9QYWdlLmVtaXQodGhpcy50b3RhbFBhZ2VzIC0gMSk7XHJcbiAgfVxyXG4gIG9uTmV4dCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBhZ2UgPSAodGhpcy5wYWdpbmF0aW9uSW5mby5wYWdlIHx8IDApICsgMTtcclxuICAgIHRoaXMuZ29Ub1BhZ2UuZW1pdChwYWdlKTtcclxuICB9XHJcbiAgb25QcmV2aW91cygpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBhZ2UgPSAodGhpcy5wYWdpbmF0aW9uSW5mby5wYWdlIHx8IDApIC0gMTtcclxuICAgIHRoaXMuZ29Ub1BhZ2UuZW1pdChwYWdlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3luY1N0YXRlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5wYWdlcyA9IHRoaXMuY2FsY3VsYXRlUGFnZXMoKTtcclxuXHJcbiAgICB0aGlzLnNob3dQYWdpbmF0aW9uID1cclxuICAgICAgdGhpcy5wYWdpbmF0aW9uSW5mby50b3RhbCA+IHRoaXMucGFnaW5hdGlvbkluZm8ucGFnZVNpemU7XHJcbiAgICB0aGlzLmhpZGVQcmV2aW91cyA9IHRoaXMucGFnaW5hdGlvbkluZm8ucGFnZSA9PT0gMDtcclxuICAgIHRoaXMubGFzdFBhZ2UgPVxyXG4gICAgICB0aGlzLnBhZ2luYXRpb25JbmZvLnBhZ2VTaXplICogKHRoaXMucGFnaW5hdGlvbkluZm8ucGFnZSArIDEpID49XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvbkluZm8udG90YWw7XHJcbiAgICB0aGlzLnRvdGFsUGFnZXMgPVxyXG4gICAgICBNYXRoLmNlaWwodGhpcy5wYWdpbmF0aW9uSW5mby50b3RhbCAvIHRoaXMucGFnaW5hdGlvbkluZm8ucGFnZVNpemUpIHx8IDA7XHJcbiAgICB0aGlzLmRpc3BsYXlOZXh0RWxsaXBzaXMgPSAhdGhpcy5wYWdlcy5pbmNsdWRlcyh0aGlzLnRvdGFsUGFnZXMgLSAxKTtcclxuICAgIHRoaXMuZGlzcGxheVByZXZpb3VzRWxsaXBzaXMgPSAhdGhpcy5wYWdlcy5pbmNsdWRlcygwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FsY3VsYXRlUGFnZXMoKTogbnVtYmVyW10ge1xyXG4gICAgY29uc3QgdG90YWxQYWdlcyA9XHJcbiAgICAgIE1hdGguY2VpbCh0aGlzLnBhZ2luYXRpb25JbmZvLnRvdGFsIC8gdGhpcy5wYWdpbmF0aW9uSW5mby5wYWdlU2l6ZSkgLSAxOyAvLyAwLWluZGV4XHJcbiAgICBjb25zdCBwID0gdGhpcy5wYWdpbmF0aW9uSW5mby5wYWdlIHx8IDA7XHJcbiAgICBjb25zdCBwYWdlc1RvU2hvdyA9IHRoaXMucGFnaW5hdGlvbkluZm8ucGFnZXNUb1Nob3c7XHJcbiAgICBjb25zdCBwYWdlczogbnVtYmVyW10gPSBbXTtcclxuICAgIHBhZ2VzLnB1c2gocCk7XHJcbiAgICBjb25zdCB0aW1lcyA9IHBhZ2VzVG9TaG93IC0gMTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGltZXM7IGkrKykge1xyXG4gICAgICBpZiAocGFnZXMubGVuZ3RoIDwgcGFnZXNUb1Nob3cpIHtcclxuICAgICAgICBpZiAoTWF0aC5taW4oLi4ucGFnZXMpID4gMCkge1xyXG4gICAgICAgICAgcGFnZXMudW5zaGlmdChNYXRoLm1pbiguLi5wYWdlcykgLSAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhZ2VzLmxlbmd0aCA8IHBhZ2VzVG9TaG93KSB7XHJcbiAgICAgICAgaWYgKE1hdGgubWF4KC4uLnBhZ2VzKSA8IHRvdGFsUGFnZXMpIHtcclxuICAgICAgICAgIHBhZ2VzLnB1c2goTWF0aC5tYXgoLi4ucGFnZXMpICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBwYWdlcy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XHJcbiAgICByZXR1cm4gcGFnZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRMYW5ndWFnZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGwgPSB0aGlzLmxpdGVyYWxzW3RoaXMubGFuZ107XHJcbiAgICB0aGlzLmZpcnN0ID0gbC5maXJzdDtcclxuICAgIHRoaXMucHJldmlvdXMgPSBsLnByZXZpb3VzO1xyXG4gICAgdGhpcy5uZXh0ID0gbC5uZXh0O1xyXG4gICAgdGhpcy5sYXN0ID0gbC5sYXN0O1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwibHV4LXBhZ2luYXRpb25cIiAqbmdJZj1cInNob3dQYWdpbmF0aW9uXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaGlkZVByZXZpb3VzXCI+XG4gICAgPGFcbiAgICAgIGx1eFRvb2x0aXBcbiAgICAgIFtjb250ZW50XT1cImZpcnN0XCJcbiAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICBkZWxheT1cIjUwMFwiXG4gICAgICAoY2xpY2spPVwib25GaXJzdCgpXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgZW5hYmxlZEZpcnN0TGFzdDogIWhpZGVQcmV2aW91c1xuICAgICAgfVwiXG4gICAgICBjbGFzcz1cImJ1dHRvbi1wYWdpbmF0aW9uIGljb24gYXJyb3ctbGVmdC1lbmRcIlxuICAgID48L2E+XG4gICAgPGFcbiAgICAgIGx1eFRvb2x0aXBcbiAgICAgIFtjb250ZW50XT1cInByZXZpb3VzXCJcbiAgICAgIHBsYWNlbWVudD1cInRvcFwiXG4gICAgICBkZWxheT1cIjUwMFwiXG4gICAgICAoY2xpY2spPVwib25QcmV2aW91cygpXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgZW5hYmxlZEZpcnN0TGFzdDogIWhpZGVQcmV2aW91c1xuICAgICAgfVwiXG4gICAgICBjbGFzcz1cImJ1dHRvbi1wYWdpbmF0aW9uIGljb24gYXJyb3ctbGVmdFwiXG4gICAgPjwvYT5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPHNwYW4gY2xhc3M9XCJlbGxpcHNpc1wiICpuZ0lmPVwiZGlzcGxheVByZXZpb3VzRWxsaXBzaXNcIj4uLi48L3NwYW4+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFnZU51bSBvZiBwYWdlc1wiPlxuICAgIDxhXG4gICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgICAgZGVsYXk9XCI1MDBcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICBkaXNhYmxlZDogcGFnZU51bSA9PT0gcGFnaW5hdGlvbkluZm8ucGFnZSxcbiAgICAgICAgZW5hYmxlZDogcGFnZU51bSAhPT0gcGFnaW5hdGlvbkluZm8ucGFnZVxuICAgICAgfVwiXG4gICAgICBjbGFzcz1cImJ1dHRvbi1wYWdpbmF0aW9uXCJcbiAgICAgIChjbGljayk9XCJvblBhZ2UocGFnZU51bSlcIlxuICAgICAgPnt7IHBhZ2VOdW0gKyAxIH19PC9hXG4gICAgPlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8c3BhbiBjbGFzcz1cImVsbGlwc2lzXCIgKm5nSWY9XCJkaXNwbGF5TmV4dEVsbGlwc2lzXCI+Li4uPC9zcGFuPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbGFzdFBhZ2VcIj5cbiAgICA8YVxuICAgICAgbHV4VG9vbHRpcFxuICAgICAgW2NvbnRlbnRdPVwibmV4dFwiXG4gICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgICAgZGVsYXk9XCI1MDBcIlxuICAgICAgKGNsaWNrKT1cIm9uTmV4dCgpXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgZW5hYmxlZEZpcnN0TGFzdDogIWxhc3RQYWdlXG4gICAgICB9XCJcbiAgICAgIGNsYXNzPVwiYnV0dG9uLXBhZ2luYXRpb24gaWNvbiBhcnJvdy1yaWdodFwiXG4gICAgPjwvYT5cbiAgICA8YVxuICAgICAgbHV4VG9vbHRpcFxuICAgICAgW2NvbnRlbnRdPVwibGFzdFwiXG4gICAgICBwbGFjZW1lbnQ9XCJ0b3BcIlxuICAgICAgZGVsYXk9XCI1MDBcIlxuICAgICAgKGNsaWNrKT1cIm9uTGFzdCgpXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgZW5hYmxlZEZpcnN0TGFzdDogIWxhc3RQYWdlXG4gICAgICB9XCJcbiAgICAgIGNsYXNzPVwiYnV0dG9uLXBhZ2luYXRpb24gaWNvbiBhcnJvdy1yaWdodC1lbmRcIlxuICAgID48L2E+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
|
|
File without changes
|