@metadev/lux 0.17.0 → 0.19.2

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.
Files changed (102) hide show
  1. package/esm2020/lib/autocomplete/autocomplete.component.mjs +479 -0
  2. package/esm2020/lib/autocomplete-list/autocomplete-list.component.mjs +254 -0
  3. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +75 -0
  4. package/esm2020/lib/checkbox/checkbox.component.mjs +154 -0
  5. package/{esm2015/lib/datasource.js → esm2020/lib/datasource.mjs} +0 -0
  6. package/esm2020/lib/datetime/datetime.component.mjs +306 -0
  7. package/esm2020/lib/filter/filter.component.mjs +152 -0
  8. package/esm2020/lib/geolocation/geolocation.component.mjs +407 -0
  9. package/{esm2015/lib/geolocation/geolocation.service.js → esm2020/lib/geolocation/geolocation.service.mjs} +7 -11
  10. package/esm2020/lib/geolocation/openlayer-loader.service.mjs +62 -0
  11. package/esm2020/lib/helperFns.mjs +109 -0
  12. package/esm2020/lib/input/input.component.mjs +452 -0
  13. package/{esm2015/lib/input/regexp.service.js → esm2020/lib/input/regexp.service.mjs} +7 -6
  14. package/{esm2015/lib/lang.js → esm2020/lib/lang.mjs} +0 -0
  15. package/esm2020/lib/lux.module.mjs +130 -0
  16. package/{esm2015/lib/map/geopoint.js → esm2020/lib/map/geopoint.mjs} +0 -0
  17. package/esm2020/lib/map/map.component.mjs +265 -0
  18. package/esm2020/lib/modal/modal-backdrop.mjs +26 -0
  19. package/esm2020/lib/modal/modal-config.mjs +14 -0
  20. package/{esm2015/lib/modal/modal-dismiss-reasons.js → esm2020/lib/modal/modal-dismiss-reasons.mjs} +0 -0
  21. package/{esm2015/lib/modal/modal-ref.js → esm2020/lib/modal/modal-ref.mjs} +0 -0
  22. package/esm2020/lib/modal/modal-stack.mjs +179 -0
  23. package/esm2020/lib/modal/modal-window.mjs +119 -0
  24. package/esm2020/lib/modal/modal.service.mjs +26 -0
  25. package/{esm2015/lib/modal/util.js → esm2020/lib/modal/util.mjs} +0 -0
  26. package/esm2020/lib/pagination/pagination.component.mjs +137 -0
  27. package/{esm2015/lib/pagination/pagination.js → esm2020/lib/pagination/pagination.mjs} +0 -0
  28. package/esm2020/lib/radiogroup/radiogroup.component.mjs +130 -0
  29. package/esm2020/lib/select/select.component.mjs +149 -0
  30. package/{esm2015/lib/tooltip/placement.js → esm2020/lib/tooltip/placement.mjs} +0 -0
  31. package/{esm2015/lib/tooltip/tooltip-context.js → esm2020/lib/tooltip/tooltip-context.mjs} +0 -0
  32. package/esm2020/lib/tooltip/tooltip.component.mjs +23 -0
  33. package/esm2020/lib/tooltip/tooltip.directive.mjs +60 -0
  34. package/{esm2015/lib/tooltip/tooltip.service.js → esm2020/lib/tooltip/tooltip.service.mjs} +7 -9
  35. package/{esm2015/lib/tooltip/tooltop-content.js → esm2020/lib/tooltip/tooltop-content.mjs} +0 -0
  36. package/esm2020/lib/voice-recognition/voice-recognition.directive.mjs +73 -0
  37. package/{esm2015/lib/window/window.service.js → esm2020/lib/window/window.service.mjs} +0 -0
  38. package/esm2020/metadev-lux.mjs +5 -0
  39. package/esm2020/public-api.mjs +21 -0
  40. package/fesm2015/metadev-lux.mjs +4345 -0
  41. package/fesm2015/metadev-lux.mjs.map +1 -0
  42. package/fesm2020/metadev-lux.mjs +4343 -0
  43. package/fesm2020/metadev-lux.mjs.map +1 -0
  44. package/lib/autocomplete/autocomplete.component.d.ts +3 -0
  45. package/lib/autocomplete-list/autocomplete-list.component.d.ts +3 -0
  46. package/lib/breadcrumb/breadcrumb.component.d.ts +3 -0
  47. package/lib/checkbox/checkbox.component.d.ts +3 -0
  48. package/lib/datetime/datetime.component.d.ts +4 -0
  49. package/lib/filter/filter.component.d.ts +3 -0
  50. package/lib/geolocation/geolocation.component.d.ts +4 -0
  51. package/lib/geolocation/geolocation.service.d.ts +3 -0
  52. package/lib/geolocation/openlayer-loader.service.d.ts +3 -0
  53. package/lib/helperFns.d.ts +2 -0
  54. package/lib/input/input.component.d.ts +15 -0
  55. package/lib/input/regexp.service.d.ts +3 -0
  56. package/lib/lux.module.d.ts +26 -0
  57. package/lib/map/map.component.d.ts +3 -0
  58. package/lib/modal/modal-backdrop.d.ts +3 -0
  59. package/lib/modal/modal-config.d.ts +3 -0
  60. package/lib/modal/modal-stack.d.ts +3 -0
  61. package/lib/modal/modal-window.d.ts +3 -0
  62. package/lib/modal/modal.service.d.ts +3 -0
  63. package/lib/pagination/pagination.component.d.ts +3 -0
  64. package/lib/radiogroup/radiogroup.component.d.ts +3 -0
  65. package/lib/select/select.component.d.ts +3 -0
  66. package/lib/tooltip/tooltip.component.d.ts +3 -0
  67. package/lib/tooltip/tooltip.directive.d.ts +3 -0
  68. package/lib/tooltip/tooltip.service.d.ts +3 -0
  69. package/lib/voice-recognition/voice-recognition.directive.d.ts +3 -0
  70. package/metadev-lux.d.ts +1 -16
  71. package/package.json +23 -11
  72. package/public-api.d.ts +12 -7
  73. package/bundles/metadev-lux.umd.js +0 -4647
  74. package/bundles/metadev-lux.umd.js.map +0 -1
  75. package/esm2015/lib/autocomplete/autocomplete.component.js +0 -455
  76. package/esm2015/lib/autocomplete-list/autocomplete-list.component.js +0 -230
  77. package/esm2015/lib/breadcrumb/breadcrumb.component.js +0 -77
  78. package/esm2015/lib/checkbox/checkbox.component.js +0 -142
  79. package/esm2015/lib/datetime/datetime.component.js +0 -275
  80. package/esm2015/lib/filter/filter.component.js +0 -140
  81. package/esm2015/lib/geolocation/geolocation.component.js +0 -371
  82. package/esm2015/lib/geolocation/openlayer-loader.service.js +0 -63
  83. package/esm2015/lib/helperFns.js +0 -93
  84. package/esm2015/lib/input/input.component.js +0 -371
  85. package/esm2015/lib/lux.module.js +0 -83
  86. package/esm2015/lib/map/map.component.js +0 -261
  87. package/esm2015/lib/modal/modal-backdrop.js +0 -19
  88. package/esm2015/lib/modal/modal-config.js +0 -12
  89. package/esm2015/lib/modal/modal-stack.js +0 -182
  90. package/esm2015/lib/modal/modal-window.js +0 -92
  91. package/esm2015/lib/modal/modal.service.js +0 -28
  92. package/esm2015/lib/pagination/pagination.component.js +0 -134
  93. package/esm2015/lib/radiogroup/radiogroup.component.js +0 -114
  94. package/esm2015/lib/select/select.component.js +0 -131
  95. package/esm2015/lib/tooltip/tooltip.component.js +0 -19
  96. package/esm2015/lib/tooltip/tooltip.directive.js +0 -52
  97. package/esm2015/lib/voice-recognition/voice-recognition.directive.js +0 -76
  98. package/esm2015/metadev-lux.js +0 -21
  99. package/esm2015/public-api.js +0 -16
  100. package/fesm2015/metadev-lux.js +0 -4025
  101. package/fesm2015/metadev-lux.js.map +0 -1
  102. 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.2", 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.2", ngImport: i0, type: ModalStack, providedIn: 'root' });
172
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", 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.2", 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.2", 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.2", 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.2", 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.2", ngImport: i0, type: ModalService, providedIn: 'root' });
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.2", 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
@@ -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.2", ngImport: i0, type: PaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
124
+ PaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.2", 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.2", 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=