@quadrel-enterprise-ui/qdc-cards 19.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/README.md +25 -0
  2. package/esm2022/index.mjs +3 -0
  3. package/esm2022/lib/card/card.component.mjs +53 -0
  4. package/esm2022/lib/card/card.model.mjs +2 -0
  5. package/esm2022/lib/card/card.module.mjs +23 -0
  6. package/esm2022/lib/card/menu/card-menu.component.mjs +37 -0
  7. package/esm2022/lib/card/model/card-actions-config.interface.mjs +2 -0
  8. package/esm2022/lib/card-layout/card-layout.component.mjs +117 -0
  9. package/esm2022/lib/card-layout/card-layout.model.mjs +2 -0
  10. package/esm2022/lib/card-layout/card-layout.module.mjs +25 -0
  11. package/esm2022/lib/card-layout/card-status/card-status-height.directive.mjs +51 -0
  12. package/esm2022/lib/card-layout/card-status/card-status.component.mjs +112 -0
  13. package/esm2022/lib/card-layout/card-status/card-status.model.mjs +2 -0
  14. package/esm2022/lib/card-layout/card-status/pagination/pagination.model.mjs +2 -0
  15. package/esm2022/lib/shared/popover/cards-popover.module.mjs +19 -0
  16. package/esm2022/lib/shared/popover/cards-popover.service.mjs +23 -0
  17. package/esm2022/lib/shared/popover/popover/cards-popover.component.mjs +14 -0
  18. package/esm2022/lib/shared/popover/popover-on-click/cards-popover-on-click.directive.mjs +100 -0
  19. package/esm2022/quadrel-enterprise-ui-qdc-cards.mjs +5 -0
  20. package/index.d.ts +2 -0
  21. package/lib/card/card.component.d.ts +20 -0
  22. package/lib/card/card.model.d.ts +23 -0
  23. package/lib/card/card.module.d.ts +16 -0
  24. package/lib/card/menu/card-menu.component.d.ts +14 -0
  25. package/lib/card/model/card-actions-config.interface.d.ts +65 -0
  26. package/lib/card-layout/card-layout.component.d.ts +31 -0
  27. package/lib/card-layout/card-layout.model.d.ts +11 -0
  28. package/lib/card-layout/card-layout.module.d.ts +18 -0
  29. package/lib/card-layout/card-status/card-status-height.directive.d.ts +13 -0
  30. package/lib/card-layout/card-status/card-status.component.d.ts +25 -0
  31. package/lib/card-layout/card-status/card-status.model.d.ts +21 -0
  32. package/lib/card-layout/card-status/pagination/pagination.model.d.ts +26 -0
  33. package/lib/shared/popover/cards-popover.module.d.ts +9 -0
  34. package/lib/shared/popover/cards-popover.service.d.ts +10 -0
  35. package/lib/shared/popover/popover/cards-popover.component.d.ts +7 -0
  36. package/lib/shared/popover/popover-on-click/cards-popover-on-click.directive.d.ts +28 -0
  37. package/package.json +38 -0
@@ -0,0 +1,112 @@
1
+ import { Component, EventEmitter, HostListener, Input, Output, ViewChild, inject } from '@angular/core';
2
+ import { TranslateService } from '@ngx-translate/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/forms";
6
+ import * as i3 from "@quadrel-enterprise-ui/framework";
7
+ import * as i4 from "../../card/card.component";
8
+ import * as i5 from "@ngx-translate/core";
9
+ export class QdcCardStatusComponent {
10
+ constructor() {
11
+ this.paginationChanged = new EventEmitter();
12
+ this.translate = inject(TranslateService);
13
+ this.isDropdownOpen = false;
14
+ this.hideEntriesLabel = window.innerWidth <= 1600;
15
+ this.defaultPageSizes = [5, 10, 20, 50];
16
+ }
17
+ ngOnInit() {
18
+ if (this.config?.pagination) {
19
+ if (!this.config.pagination.pageSizes || this.config.pagination.pageSizes.length === 0) {
20
+ this.config.pagination.pageSizes = this.defaultPageSizes;
21
+ }
22
+ if (!this.config.pagination.pageSize) {
23
+ this.config.pagination.pageSize = this.config.pagination.pageSizes[0];
24
+ }
25
+ if (this.config.pagination.currentPage == null) {
26
+ this.config.pagination.currentPage = 0;
27
+ }
28
+ }
29
+ }
30
+ get pagedCards() {
31
+ return this.config.cards;
32
+ }
33
+ get pagination() {
34
+ return this.config.pagination;
35
+ }
36
+ goToPage(delta) {
37
+ if (!this.pagination)
38
+ return;
39
+ const newPage = this.pagination.currentPage + delta;
40
+ if (newPage >= 0 && newPage < this.pagination.totalPages) {
41
+ this.pagination.currentPage = newPage; // update current page
42
+ this.pagination.handler(newPage, this.pagination.pageSize);
43
+ this.paginationChanged.emit();
44
+ }
45
+ }
46
+ goToFirstPage() {
47
+ if (this.pagination && this.pagination.currentPage !== 0) {
48
+ this.pagination.currentPage = 0;
49
+ this.pagination.handler(0, this.pagination.pageSize);
50
+ this.paginationChanged.emit();
51
+ }
52
+ }
53
+ goToLastPage() {
54
+ if (!this.pagination)
55
+ return;
56
+ const last = this.pagination.totalPages - 1;
57
+ if (last >= 0 && this.pagination.currentPage !== last) {
58
+ this.pagination.currentPage = last;
59
+ this.pagination.handler(last, this.pagination.pageSize);
60
+ this.paginationChanged.emit();
61
+ }
62
+ }
63
+ onPageSizeChange() {
64
+ if (this.pagination) {
65
+ // ngModel has already updated pageSize here
66
+ const totalPages = Math.ceil(this.pagination.totalElements / this.pagination.pageSize);
67
+ // If the current page is out of range, snap it to the last page
68
+ if (this.pagination.currentPage >= totalPages) {
69
+ this.pagination.currentPage = Math.max(0, totalPages - 1);
70
+ }
71
+ this.pagination.handler(this.pagination.currentPage, this.pagination.pageSize);
72
+ this.paginationChanged.emit();
73
+ }
74
+ }
75
+ toggleDropdownIcon() {
76
+ this.isDropdownOpen = !this.isDropdownOpen;
77
+ }
78
+ onResize() {
79
+ this.hideEntriesLabel = window.innerWidth <= 1600;
80
+ }
81
+ getPaginationInfo() {
82
+ if (!this.pagination)
83
+ return '';
84
+ const total = this.pagination.totalElements;
85
+ const pageSize = this.pagination.pageSize;
86
+ const currentPage = this.pagination.currentPage;
87
+ const start = total === 0 ? 0 : currentPage * pageSize + 1;
88
+ const end = Math.min(start + pageSize - 1, total);
89
+ return this.translate.instant('i18n.qdc-card.status.pagination.service.from.label', {
90
+ start,
91
+ end,
92
+ total
93
+ });
94
+ }
95
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: QdcCardStatusComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
96
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.15", type: QdcCardStatusComponent, isStandalone: false, selector: "qdc-card-status", inputs: { config: "config" }, outputs: { paginationChanged: "paginationChanged" }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "cardsContainer", first: true, predicate: ["cardsContainer"], descendants: true }], ngImport: i0, template: "<div class=\"qdc-status__container\">\n <div class=\"qdc-status__header\">\n {{ config.title.i18n | translate }}\n </div>\n\n <div class=\"qdc-status__cards\" #cardsContainer [ngClass]=\"{ empty: !config.cards || config.cards.length === 0 }\">\n @if (!config.cards || config.cards.length === 0) {\n <div class=\"qdc-status_no-cards-message\">\n {{ \"i18n.qdc-cards.status.noCards.label\" | translate | placeholder : \"title\" : (config.title.i18n | translate) }}\n </div>\n } @else { @for (card of pagedCards; track card) {\n <qdc-card [cardConfig]=\"card\"></qdc-card>\n } @if (config.pagination) {\n <div class=\"qdc-status__pagination-row\">\n <div>\n <span *ngIf=\"!hideEntriesLabel\">\n {{ \"i18n.qdc-card.status.pagination.service.entries.label\" | translate }}\n </span>\n\n <select\n style=\"\n appearance: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n border: 0;\n outline: 0;\n box-shadow: none;\n background: transparent;\n padding-left: 5px;\n font-family: Roboto, Arial, system-ui, -apple-system, BlinkMacSystemFont, sans-serif;\n color: rgb(69, 69, 69);\n font-size: 0.875rem;\n font-weight: 400;\n line-height: 1.3125rem;\n \"\n [(ngModel)]=\"config.pagination.pageSize\"\n (ngModelChange)=\"onPageSizeChange()\"\n (click)=\"toggleDropdownIcon()\"\n >\n @for (size of pagination?.pageSizes; track size) {\n <option [ngValue]=\"size\">{{ size }}</option>\n }\n </select>\n\n <qd-icon [icon]=\"isDropdownOpen ? 'ctrlTop' : 'ctrlDown'\"></qd-icon>\n </div>\n\n <div class=\"qdc-status__pagination-info\">\n <span class=\"qdc-status__pagination-info__text\">\n {{ getPaginationInfo() }}\n </span>\n </div>\n\n <div>\n <button qdIconButton [disabled]=\"pagination?.currentPage === 0\" (click)=\"goToFirstPage()\">\n <qd-icon icon=\"pageFirst1\"></qd-icon>\n </button>\n <button qdIconButton [disabled]=\"pagination?.currentPage === 0\" (click)=\"goToPage(-1)\">\n <qd-icon icon=\"triangleLeftSolid\"></qd-icon>\n </button>\n <button\n qdIconButton\n [disabled]=\"pagination?.currentPage >= (pagination?.totalPages ?? 1) - 1\"\n (click)=\"goToPage(1)\"\n >\n <qd-icon icon=\"triangleRightSolid\"></qd-icon>\n </button>\n <button\n qdIconButton\n [disabled]=\"pagination?.currentPage >= (pagination?.totalPages ?? 1) - 1\"\n (click)=\"goToLastPage()\"\n >\n <qd-icon icon=\"pageLast\"></qd-icon>\n </button>\n </div>\n </div>\n } }\n </div>\n</div>\n", styles: [".qdc-status__container{font-family:Roboto,sans-serif;display:flex;width:100%;max-width:906px;box-sizing:border-box;flex-direction:column;padding:0;border-radius:8px;background-color:#efefef}.qdc-status__header{display:flex;width:100%;height:50px;box-sizing:border-box;align-items:center;padding:0 24px;background-color:#e5e5e5;font-family:Roboto,sans-serif;font-size:16px;font-weight:500;letter-spacing:.15px;line-height:100%;vertical-align:middle}.qdc-status__cards{min-height:265px;box-sizing:border-box;flex-direction:row;flex-wrap:wrap;padding:1rem 1.5rem;border:1px solid #e5e5e5;scrollbar-width:none}@media screen and (min-width: 480px){.qdc-status__cards{max-height:700px;overflow-y:scroll;overflow-x:hidden}}.qdc-status__cards.empty{min-height:265px;align-items:center;justify-content:center;padding:0}.qdc-status_no-cards-message{padding:40px 0;color:#979797;font-family:Roboto,sans-serif;font-size:12px;font-weight:400;line-height:14px;text-align:center}.qdc-status__pagination-row{border-top:1px solid rgba(0,0,0,.1);margin-top:1rem;color:#454545;font-size:.875rem;font-weight:400;line-height:1.3125rem;display:flex;flex-direction:row;align-items:center;justify-content:space-between;padding-left:.75rem;flex-wrap:nowrap;white-space:nowrap;min-height:clamp(36px,5.5vw,44px);padding-block-end:2.8125rem}button.qd-icon-button{border:none;border-left:.0625rem solid rgb(229,229,229);border-radius:unset}@media (max-width: 480px){.qdc-status__container{padding:0}.qdc-status__cards{flex-direction:column;padding:0}.qdc-status__header{padding:0}.qdc-status__pagination-info{min-width:0;overflow:hidden}.qdc-status__pagination-info__text{display:inline-block;max-width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}}@media (max-width: 480px) and (max-width: 480px){.qdc-status__pagination-info__text{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal;overflow:hidden;word-break:break-word}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.QdIconButtonComponent, selector: "button[qdIconButton], a[qdIconButton], button[qd-icon-button]", inputs: ["color", "data-test-id"] }, { kind: "component", type: i3.QdIconComponent, selector: "qd-icon", inputs: ["icon"] }, { kind: "component", type: i4.QdcCardComponent, selector: "qdc-card", inputs: ["cardConfig", "data-test-id"] }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i3.QdPlaceholderPipe, name: "placeholder" }] }); }
97
+ }
98
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: QdcCardStatusComponent, decorators: [{
99
+ type: Component,
100
+ args: [{ selector: 'qdc-card-status', standalone: false, template: "<div class=\"qdc-status__container\">\n <div class=\"qdc-status__header\">\n {{ config.title.i18n | translate }}\n </div>\n\n <div class=\"qdc-status__cards\" #cardsContainer [ngClass]=\"{ empty: !config.cards || config.cards.length === 0 }\">\n @if (!config.cards || config.cards.length === 0) {\n <div class=\"qdc-status_no-cards-message\">\n {{ \"i18n.qdc-cards.status.noCards.label\" | translate | placeholder : \"title\" : (config.title.i18n | translate) }}\n </div>\n } @else { @for (card of pagedCards; track card) {\n <qdc-card [cardConfig]=\"card\"></qdc-card>\n } @if (config.pagination) {\n <div class=\"qdc-status__pagination-row\">\n <div>\n <span *ngIf=\"!hideEntriesLabel\">\n {{ \"i18n.qdc-card.status.pagination.service.entries.label\" | translate }}\n </span>\n\n <select\n style=\"\n appearance: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n border: 0;\n outline: 0;\n box-shadow: none;\n background: transparent;\n padding-left: 5px;\n font-family: Roboto, Arial, system-ui, -apple-system, BlinkMacSystemFont, sans-serif;\n color: rgb(69, 69, 69);\n font-size: 0.875rem;\n font-weight: 400;\n line-height: 1.3125rem;\n \"\n [(ngModel)]=\"config.pagination.pageSize\"\n (ngModelChange)=\"onPageSizeChange()\"\n (click)=\"toggleDropdownIcon()\"\n >\n @for (size of pagination?.pageSizes; track size) {\n <option [ngValue]=\"size\">{{ size }}</option>\n }\n </select>\n\n <qd-icon [icon]=\"isDropdownOpen ? 'ctrlTop' : 'ctrlDown'\"></qd-icon>\n </div>\n\n <div class=\"qdc-status__pagination-info\">\n <span class=\"qdc-status__pagination-info__text\">\n {{ getPaginationInfo() }}\n </span>\n </div>\n\n <div>\n <button qdIconButton [disabled]=\"pagination?.currentPage === 0\" (click)=\"goToFirstPage()\">\n <qd-icon icon=\"pageFirst1\"></qd-icon>\n </button>\n <button qdIconButton [disabled]=\"pagination?.currentPage === 0\" (click)=\"goToPage(-1)\">\n <qd-icon icon=\"triangleLeftSolid\"></qd-icon>\n </button>\n <button\n qdIconButton\n [disabled]=\"pagination?.currentPage >= (pagination?.totalPages ?? 1) - 1\"\n (click)=\"goToPage(1)\"\n >\n <qd-icon icon=\"triangleRightSolid\"></qd-icon>\n </button>\n <button\n qdIconButton\n [disabled]=\"pagination?.currentPage >= (pagination?.totalPages ?? 1) - 1\"\n (click)=\"goToLastPage()\"\n >\n <qd-icon icon=\"pageLast\"></qd-icon>\n </button>\n </div>\n </div>\n } }\n </div>\n</div>\n", styles: [".qdc-status__container{font-family:Roboto,sans-serif;display:flex;width:100%;max-width:906px;box-sizing:border-box;flex-direction:column;padding:0;border-radius:8px;background-color:#efefef}.qdc-status__header{display:flex;width:100%;height:50px;box-sizing:border-box;align-items:center;padding:0 24px;background-color:#e5e5e5;font-family:Roboto,sans-serif;font-size:16px;font-weight:500;letter-spacing:.15px;line-height:100%;vertical-align:middle}.qdc-status__cards{min-height:265px;box-sizing:border-box;flex-direction:row;flex-wrap:wrap;padding:1rem 1.5rem;border:1px solid #e5e5e5;scrollbar-width:none}@media screen and (min-width: 480px){.qdc-status__cards{max-height:700px;overflow-y:scroll;overflow-x:hidden}}.qdc-status__cards.empty{min-height:265px;align-items:center;justify-content:center;padding:0}.qdc-status_no-cards-message{padding:40px 0;color:#979797;font-family:Roboto,sans-serif;font-size:12px;font-weight:400;line-height:14px;text-align:center}.qdc-status__pagination-row{border-top:1px solid rgba(0,0,0,.1);margin-top:1rem;color:#454545;font-size:.875rem;font-weight:400;line-height:1.3125rem;display:flex;flex-direction:row;align-items:center;justify-content:space-between;padding-left:.75rem;flex-wrap:nowrap;white-space:nowrap;min-height:clamp(36px,5.5vw,44px);padding-block-end:2.8125rem}button.qd-icon-button{border:none;border-left:.0625rem solid rgb(229,229,229);border-radius:unset}@media (max-width: 480px){.qdc-status__container{padding:0}.qdc-status__cards{flex-direction:column;padding:0}.qdc-status__header{padding:0}.qdc-status__pagination-info{min-width:0;overflow:hidden}.qdc-status__pagination-info__text{display:inline-block;max-width:100%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}}@media (max-width: 480px) and (max-width: 480px){.qdc-status__pagination-info__text{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal;overflow:hidden;word-break:break-word}}\n"] }]
101
+ }], propDecorators: { paginationChanged: [{
102
+ type: Output
103
+ }], config: [{
104
+ type: Input
105
+ }], cardsContainer: [{
106
+ type: ViewChild,
107
+ args: ['cardsContainer', { static: false }]
108
+ }], onResize: [{
109
+ type: HostListener,
110
+ args: ['window:resize']
111
+ }] } });
112
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1zdGF0dXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZGMtY2FyZHMvc3JjL2xpYi9jYXJkLWxheW91dC9jYXJkLXN0YXR1cy9jYXJkLXN0YXR1cy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3FkYy1jYXJkcy9zcmMvbGliL2NhcmQtbGF5b3V0L2NhcmQtc3RhdHVzL2NhcmQtc3RhdHVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFFVCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7QUFRdkQsTUFBTSxPQUFPLHNCQUFzQjtJQU5uQztRQU9ZLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFLdEMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXRELG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLHFCQUFnQixHQUFHLE1BQU0sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDO1FBQzdDLHFCQUFnQixHQUFhLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7S0EyRjlDO0lBekZDLFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN2RixJQUFJLENBQUMsTUFBTSxD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WUFDSCxLQUFLO1NBQ04sQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FwR1Usc0JBQXNCO21HQUF0QixzQkFBc0IseVVDckJuQyw2MEZBK0VBOzs0RkQxRGEsc0JBQXNCO2tCQU5sQyxTQUFTOytCQUNFLGlCQUFpQixjQUdmLEtBQUs7OEJBR1AsaUJBQWlCO3NCQUExQixNQUFNO2dCQUNFLE1BQU07c0JBQWQsS0FBSztnQkFFMEMsY0FBYztzQkFBN0QsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBNkU5QyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgaW5qZWN0LFxuICBPbkluaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBRZGNDYXJkU3RhdHVzQ29uZmlnIH0gZnJvbSAnLi9jYXJkLXN0YXR1cy5tb2RlbCc7XG5pbXBvcnQgeyBRZGNDYXJkQ29uZmlnIH0gZnJvbSAnLi4vLi4vY2FyZC9jYXJkLm1vZGVsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncWRjLWNhcmQtc3RhdHVzJyxcbiAgdGVtcGxhdGVVcmw6ICdjYXJkLXN0YXR1cy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydjYXJkLXN0YXR1cy5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBRZGNDYXJkU3RhdHVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQE91dHB1dCgpIHBhZ2luYXRpb25DaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBASW5wdXQoKSBjb25maWchOiBRZGNDYXJkU3RhdHVzQ29uZmlnO1xuXG4gIEBWaWV3Q2hpbGQoJ2NhcmRzQ29udGFpbmVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGNhcmRzQ29udGFpbmVyPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgaXNEcm9wZG93bk9wZW4gPSBmYWxzZTtcbiAgaGlkZUVudHJpZXNMYWJlbCA9IHdpbmRvdy5pbm5lcldpZHRoIDw9IDE2MDA7XG4gIGRlZmF1bHRQYWdlU2l6ZXM6IG51bWJlcltdID0gWzUsIDEwLCAyMCwgNTBdO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbmZpZz8ucGFnaW5hdGlvbikge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZy5wYWdpbmF0aW9uLnBhZ2VTaXplcyB8fCB0aGlzLmNvbmZpZy5wYWdpbmF0aW9uLnBhZ2VTaXplcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5jb25maWcucGFnaW5hdGlvbi5wYWdlU2l6ZXMgPSB0aGlzLmRlZmF1bHRQYWdlU2l6ZXM7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuY29uZmlnLnBhZ2luYXRpb24ucGFnZVNpemUpIHtcbiAgICAgICAgdGhpcy5jb25maWcucGFnaW5hdGlvbi5wYWdlU2l6ZSA9IHRoaXMuY29uZmlnLnBhZ2luYXRpb24ucGFnZVNpemVzWzBdO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29uZmlnLnBhZ2luYXRpb24uY3VycmVudFBhZ2UgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNvbmZpZy5wYWdpbmF0aW9uLmN1cnJlbnRQYWdlID0gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgcGFnZWRDYXJkcygpOiBRZGNDYXJkQ29uZmlnW10ge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jYXJkcztcbiAgfVxuXG4gIGdldCBwYWdpbmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5wYWdpbmF0aW9uO1xuICB9XG5cbiAgZ29Ub1BhZ2UoZGVsdGE6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5wYWdpbmF0aW9uKSByZXR1cm47XG4gICAgY29uc3QgbmV3UGFnZSA9IHRoaXMucGFnaW5hdGlvbi5jdXJyZW50UGFnZSArIGRlbHRhO1xuICAgIGlmIChuZXdQYWdlID49IDAgJiYgbmV3UGFnZSA8IHRoaXMucGFnaW5hdGlvbi50b3RhbFBhZ2VzKSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24uY3VycmVudFBhZ2UgPSBuZXdQYWdlOyAvLyB1cGRhdGUgY3VycmVudCBwYWdlXG4gICAgICB0aGlzLnBhZ2luYXRpb24uaGFuZGxlcihuZXdQYWdlLCB0aGlzLnBhZ2luYXRpb24ucGFnZVNpemUpO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uQ2hhbmdlZC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgZ29Ub0ZpcnN0UGFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wYWdpbmF0aW9uICYmIHRoaXMucGFnaW5hdGlvbi5jdXJyZW50UGFnZSAhPT0gMCkge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uLmN1cnJlbnRQYWdlID0gMDtcbiAgICAgIHRoaXMucGFnaW5hdGlvbi5oYW5kbGVyKDAsIHRoaXMucGFnaW5hdGlvbi5wYWdlU2l6ZSk7XG4gICAgICB0aGlzLnBhZ2luYXRpb25DaGFuZ2VkLmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBnb1RvTGFzdFBhZ2UoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnBhZ2luYXRpb24pIHJldHVybjtcbiAgICBjb25zdCBsYXN0ID0gdGhpcy5wYWdpbmF0aW9uLnRvdGFsUGFnZXMgLSAxO1xuICAgIGlmIChsYXN0ID49IDAgJiYgdGhpcy5wYWdpbmF0aW9uLmN1cnJlbnRQYWdlICE9PSBsYXN0KSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24uY3VycmVudFBhZ2UgPSBsYXN0O1xuICAgICAgdGhpcy5wYWdpbmF0aW9uLmhhbmRsZXIobGFzdCwgdGhpcy5wYWdpbmF0aW9uLnBhZ2VTaXplKTtcbiAgICAgIHRoaXMucGFnaW5hdGlvbkNoYW5nZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uUGFnZVNpemVDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFnaW5hdGlvbikge1xuICAgICAgLy8gbmdNb2RlbCBoYXMgYWxyZWFkeSB1cGRhdGVkIHBhZ2VTaXplIGhlcmVcbiAgICAgIGNvbnN0IHRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodGhpcy5wYWdpbmF0aW9uLnRvdGFsRWxlbWVudHMgLyB0aGlzLnBhZ2luYXRpb24ucGFnZVNpemUpO1xuXG4gICAgICAvLyBJZiB0aGUgY3VycmVudCBwYWdlIGlzIG91dCBvZiByYW5nZSwgc25hcCBpdCB0byB0aGUgbGFzdCBwYWdlXG4gICAgICBpZiAodGhpcy5wYWdpbmF0aW9uLmN1cnJlbnRQYWdlID49IHRvdGFsUGFnZXMpIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uLmN1cnJlbnRQYWdlID0gTWF0aC5tYXgoMCwgdG90YWxQYWdlcyAtIDEpO1xuICAgICAgfVxuICAgICAgdGhpcy5wYWdpbmF0aW9uLmhhbmRsZXIodGhpcy5wYWdpbmF0aW9uLmN1cnJlbnRQYWdlLCB0aGlzLnBhZ2luYXRpb24ucGFnZVNpemUpO1xuICAgICAgdGhpcy5wYWdpbmF0aW9uQ2hhbmdlZC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlRHJvcGRvd25JY29uKCk6IHZvaWQge1xuICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSAhdGhpcy5pc0Ryb3Bkb3duT3BlbjtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICBvblJlc2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmhpZGVFbnRyaWVzTGFiZWwgPSB3aW5kb3cuaW5uZXJXaWR0aCA8PSAxNjAwO1xuICB9XG5cbiAgZ2V0UGFnaW5hdGlvbkluZm8oKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMucGFnaW5hdGlvbikgcmV0dXJuICcnO1xuXG4gICAgY29uc3QgdG90YWwgPSB0aGlzLnBhZ2luYXRpb24udG90YWxFbGVtZW50cztcbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucGFnaW5hdGlvbi5wYWdlU2l6ZTtcbiAgICBjb25zdCBjdXJyZW50UGFnZSA9IHRoaXMucGFnaW5hdGlvbi5jdXJyZW50UGFnZTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gdG90YWwgPT09IDAgPyAwIDogY3VycmVudFBhZ2UgKiBwYWdlU2l6ZSArIDE7XG4gICAgY29uc3QgZW5kID0gTWF0aC5taW4oc3RhcnQgKyBwYWdlU2l6ZSAtIDEsIHRvdGFsKTtcblxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdpMThuLnFkYy1jYXJkLnN0YXR1cy5wYWdpbmF0aW9uLnNlcnZpY2UuZnJvbS5sYWJlbCcsIHtcbiAgICAgIHN0YXJ0LFxuICAgICAgZW5kLFxuICAgICAgdG90YWxcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInFkYy1zdGF0dXNfX2NvbnRhaW5lclwiPlxuICA8ZGl2IGNsYXNzPVwicWRjLXN0YXR1c19faGVhZGVyXCI+XG4gICAge3sgY29uZmlnLnRpdGxlLmkxOG4gfCB0cmFuc2xhdGUgfX1cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInFkYy1zdGF0dXNfX2NhcmRzXCIgI2NhcmRzQ29udGFpbmVyIFtuZ0NsYXNzXT1cInsgZW1wdHk6ICFjb25maWcuY2FyZHMgfHwgY29uZmlnLmNhcmRzLmxlbmd0aCA9PT0gMCB9XCI+XG4gICAgQGlmICghY29uZmlnLmNhcmRzIHx8IGNvbmZpZy5jYXJkcy5sZW5ndGggPT09IDApIHtcbiAgICA8ZGl2IGNsYXNzPVwicWRjLXN0YXR1c19uby1jYXJkcy1tZXNzYWdlXCI+XG4gICAgICB7eyBcImkxOG4ucWRjLWNhcmRzLnN0YXR1cy5ub0NhcmRzLmxhYmVsXCIgfCB0cmFuc2xhdGUgfCBwbGFjZWhvbGRlciA6IFwidGl0bGVcIiA6IChjb25maWcudGl0bGUuaTE4biB8IHRyYW5zbGF0ZSkgfX1cbiAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHsgQGZvciAoY2FyZCBvZiBwYWdlZENhcmRzOyB0cmFjayBjYXJkKSB7XG4gICAgPHFkYy1jYXJkIFtjYXJkQ29uZmlnXT1cImNhcmRcIj48L3FkYy1jYXJkPlxuICAgIH0gQGlmIChjb25maWcucGFnaW5hdGlvbikge1xuICAgIDxkaXYgY2xhc3M9XCJxZGMtc3RhdHVzX19wYWdpbmF0aW9uLXJvd1wiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCIhaGlkZUVudHJpZXNMYWJlbFwiPlxuICAgICAgICAgIHt7IFwiaTE4bi5xZGMtY2FyZC5zdGF0dXMucGFnaW5hdGlvbi5zZXJ2aWNlLmVudHJpZXMubGFiZWxcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPHNlbGVjdFxuICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgICAgICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgICAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICAgICAgb3V0bGluZTogMDtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogNXB4O1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6IFJvYm90bywgQXJpYWwsIHN5c3RlbS11aSwgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBzYW5zLXNlcmlmO1xuICAgICAgICAgICAgY29sb3I6IHJnYig2OSwgNjksIDY5KTtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgICAgICAgICBmb250LXdlaWdodDogNDAwO1xuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMzEyNXJlbTtcbiAgICAgICAgICBcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiY29uZmlnLnBhZ2luYXRpb24ucGFnZVNpemVcIlxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoKVwiXG4gICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duSWNvbigpXCJcbiAgICAgICAgPlxuICAgICAgICAgIEBmb3IgKHNpemUgb2YgcGFnaW5hdGlvbj8ucGFnZVNpemVzOyB0cmFjayBzaXplKSB7XG4gICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJzaXplXCI+e3sgc2l6ZSB9fTwvb3B0aW9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9zZWxlY3Q+XG5cbiAgICAgICAgPHFkLWljb24gW2ljb25dPVwiaXNEcm9wZG93bk9wZW4gPyAnY3RybFRvcCcgOiAnY3RybERvd24nXCI+PC9xZC1pY29uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJxZGMtc3RhdHVzX19wYWdpbmF0aW9uLWluZm9cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJxZGMtc3RhdHVzX19wYWdpbmF0aW9uLWluZm9fX3RleHRcIj5cbiAgICAgICAgICB7eyBnZXRQYWdpbmF0aW9uSW5mbygpIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2PlxuICAgICAgICA8YnV0dG9uIHFkSWNvbkJ1dHRvbiBbZGlzYWJsZWRdPVwicGFnaW5hdGlvbj8uY3VycmVudFBhZ2UgPT09IDBcIiAoY2xpY2spPVwiZ29Ub0ZpcnN0UGFnZSgpXCI+XG4gICAgICAgICAgPHFkLWljb24gaWNvbj1cInBhZ2VGaXJzdDFcIj48L3FkLWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIHFkSWNvbkJ1dHRvbiBbZGlzYWJsZWRdPVwicGFnaW5hdGlvbj8uY3VycmVudFBhZ2UgPT09IDBcIiAoY2xpY2spPVwiZ29Ub1BhZ2UoLTEpXCI+XG4gICAgICAgICAgPHFkLWljb24gaWNvbj1cInRyaWFuZ2xlTGVmdFNvbGlkXCI+PC9xZC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHFkSWNvbkJ1dHRvblxuICAgICAgICAgIFtkaXNhYmxlZF09XCJwYWdpbmF0aW9uPy5jdXJyZW50UGFnZSA+PSAocGFnaW5hdGlvbj8udG90YWxQYWdlcyA/PyAxKSAtIDFcIlxuICAgICAgICAgIChjbGljayk9XCJnb1RvUGFnZSgxKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8cWQtaWNvbiBpY29uPVwidHJpYW5nbGVSaWdodFNvbGlkXCI+PC9xZC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHFkSWNvbkJ1dHRvblxuICAgICAgICAgIFtkaXNhYmxlZF09XCJwYWdpbmF0aW9uPy5jdXJyZW50UGFnZSA+PSAocGFnaW5hdGlvbj8udG90YWxQYWdlcyA/PyAxKSAtIDFcIlxuICAgICAgICAgIChjbGljayk9XCJnb1RvTGFzdFBhZ2UoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8cWQtaWNvbiBpY29uPVwicGFnZUxhc3RcIj48L3FkLWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgfSB9XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1zdGF0dXMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3FkYy1jYXJkcy9zcmMvbGliL2NhcmQtbGF5b3V0L2NhcmQtc3RhdHVzL2NhcmQtc3RhdHVzLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBRZGNDYXJkQ29uZmlnIH0gZnJvbSAnLi4vLi4vY2FyZC9jYXJkLm1vZGVsJztcbmltcG9ydCB7IFFkY0NhcmRTdGF0dXNQYWdpbmF0aW9uQ29uZmlnIH0gZnJvbSAnLi9wYWdpbmF0aW9uL3BhZ2luYXRpb24ubW9kZWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFFkY0NhcmRTdGF0dXNDb25maWcge1xuICAvKipcbiAgICogVGl0bGUgb2YgdGhlIGNhcmRzIGxheW91dCBjb21wb25lbnRcbiAgICogKi9cblxuICB0aXRsZToge1xuICAgIC8qKlxuICAgICAqIFRyYW5zbGF0YWJsZSB0aXRsZSB0ZXh0XG4gICAgICogKi9cbiAgICBpMThuOiBzdHJpbmc7XG4gIH07XG4gIC8qKlxuICAgKiBDYXJkc1xuICAgKiAqL1xuICBjYXJkczogUWRjQ2FyZENvbmZpZ1tdO1xuXG4gIC8qKlxuICAgKiBQYWdpbmF0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICogKi9cbiAgcGFnaW5hdGlvbj86IFFkY0NhcmRTdGF0dXNQYWdpbmF0aW9uQ29uZmlnO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcWRjLWNhcmRzL3NyYy9saWIvY2FyZC1sYXlvdXQvY2FyZC1zdGF0dXMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFFkY0NhcmRTdGF0dXNQYWdpbmF0aW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRvdGFsIG51bWJlciBvZiBlbGVtZW50c1xuICAgKiAqL1xuICB0b3RhbEVsZW1lbnRzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRvdGFsIG51bWJlciBvZiBwYWdlc1xuICAgKiAqL1xuICB0b3RhbFBhZ2VzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFBhZ2Ugc2l6ZSAodG90YWwgZWxlbWVudHMgcGVyIHBhZ2UpXG4gICAqICovXG4gIHBhZ2VTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDdXJyZW50IHBhZ2UgKDAtYmFzZWQgaW5kZXgpXG4gICAqICovXG4gIGN1cnJlbnRQYWdlOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFBhZ2luYXRpb24gaGFuZGxlclxuICAgKiAqL1xuICBoYW5kbGVyOiAocGFnZTogbnVtYmVyLCBzaXplOiBudW1iZXIpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGFycmF5IG9mIHBhZ2Ugc2l6ZXMgZm9yIGEgZHJvcGRvd25cbiAgICogKi9cbiAgcGFnZVNpemVzPzogbnVtYmVyW107XG59XG4iXX0=
@@ -0,0 +1,19 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { QdcCardsPopoverComponent } from './popover/cards-popover.component';
4
+ import { QdcCardsPopoverOnClickDirective } from './popover-on-click/cards-popover-on-click.directive';
5
+ import * as i0 from "@angular/core";
6
+ export class QdcCardsPopoverModule {
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: QdcCardsPopoverModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
8
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.15", ngImport: i0, type: QdcCardsPopoverModule, declarations: [QdcCardsPopoverComponent, QdcCardsPopoverOnClickDirective], imports: [CommonModule], exports: [QdcCardsPopoverOnClickDirective] }); }
9
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: QdcCardsPopoverModule, imports: [CommonModule] }); }
10
+ }
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: QdcCardsPopoverModule, decorators: [{
12
+ type: NgModule,
13
+ args: [{
14
+ imports: [CommonModule],
15
+ declarations: [QdcCardsPopoverComponent, QdcCardsPopoverOnClickDirective],
16
+ exports: [QdcCardsPopoverOnClickDirective]
17
+ }]
18
+ }] });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZHMtcG9wb3Zlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3FkYy1jYXJkcy9zcmMvbGliL3NoYXJlZC9wb3BvdmVyL2NhcmRzLXBvcG92ZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDOztBQU90RyxNQUFNLE9BQU8scUJBQXFCOytHQUFyQixxQkFBcUI7Z0hBQXJCLHFCQUFxQixpQkFIakIsd0JBQXdCLEVBQUUsK0JBQStCLGFBRDlELFlBQVksYUFFWiwrQkFBK0I7Z0hBRTlCLHFCQUFxQixZQUp0QixZQUFZOzs0RkFJWCxxQkFBcUI7a0JBTGpDLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixZQUFZLEVBQUUsQ0FBQyx3QkFBd0IsRUFBRSwrQkFBK0IsQ0FBQztvQkFDekUsT0FBTyxFQUFFLENBQUMsK0JBQStCLENBQUM7aUJBQzNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBRZGNDYXJkc1BvcG92ZXJDb21wb25lbnQgfSBmcm9tICcuL3BvcG92ZXIvY2FyZHMtcG9wb3Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUWRjQ2FyZHNQb3BvdmVyT25DbGlja0RpcmVjdGl2ZSB9IGZyb20gJy4vcG9wb3Zlci1vbi1jbGljay9jYXJkcy1wb3BvdmVyLW9uLWNsaWNrLmRpcmVjdGl2ZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBkZWNsYXJhdGlvbnM6IFtRZGNDYXJkc1BvcG92ZXJDb21wb25lbnQsIFFkY0NhcmRzUG9wb3Zlck9uQ2xpY2tEaXJlY3RpdmVdLFxuICBleHBvcnRzOiBbUWRjQ2FyZHNQb3BvdmVyT25DbGlja0RpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgUWRjQ2FyZHNQb3BvdmVyTW9kdWxlIHt9XG4iXX0=
@@ -0,0 +1,23 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class QdcCardsPopoverService {
5
+ constructor() {
6
+ this.closeHandler = new Subject();
7
+ }
8
+ closeAllOverlays() {
9
+ this.closeHandler.next(true);
10
+ }
11
+ subscribe(callback) {
12
+ return this.closeHandler.subscribe(callback);
13
+ }
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: QdcCardsPopoverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
15
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: QdcCardsPopoverService, providedIn: 'root' }); }
16
+ }
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: QdcCardsPopoverService, decorators: [{
18
+ type: Injectable,
19
+ args: [{
20
+ providedIn: 'root'
21
+ }]
22
+ }] });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZHMtcG9wb3Zlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xZGMtY2FyZHMvc3JjL2xpYi9zaGFyZWQvcG9wb3Zlci9jYXJkcy1wb3BvdmVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQzs7QUFPN0MsTUFBTSxPQUFPLHNCQUFzQjtJQUhuQztRQUlVLGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQVcsQ0FBQztLQVMvQztJQVBDLGdCQUFnQjtRQUNkLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxTQUFTLENBQUMsUUFBOEI7UUFDdEMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMvQyxDQUFDOytHQVRVLHNCQUFzQjttSEFBdEIsc0JBQXNCLGNBRnJCLE1BQU07OzRGQUVQLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuZXhwb3J0IHR5cGUgUG9wb3ZlckNsb3NlQ2FsbGJhY2sgPSAoKSA9PiB2b2lkO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBRZGNDYXJkc1BvcG92ZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBjbG9zZUhhbmRsZXIgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gIGNsb3NlQWxsT3ZlcmxheXMoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUhhbmRsZXIubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHN1YnNjcmliZShjYWxsYmFjazogUG9wb3ZlckNsb3NlQ2FsbGJhY2spOiBTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzLmNsb3NlSGFuZGxlci5zdWJzY3JpYmUoY2FsbGJhY2spO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,14 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ export class QdcCardsPopoverComponent {
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: QdcCardsPopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: QdcCardsPopoverComponent, isStandalone: false, selector: "qdc-cards-popover", inputs: { content: "content" }, ngImport: i0, template: "<ng-container *ngTemplateOutlet=\"content\"></ng-container>\n", styles: [":host{background-color:#fff;box-shadow:0 0 .625rem #979797;display:block;width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
7
+ }
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: QdcCardsPopoverComponent, decorators: [{
9
+ type: Component,
10
+ args: [{ selector: 'qdc-cards-popover', standalone: false, template: "<ng-container *ngTemplateOutlet=\"content\"></ng-container>\n", styles: [":host{background-color:#fff;box-shadow:0 0 .625rem #979797;display:block;width:100%}\n"] }]
11
+ }], propDecorators: { content: [{
12
+ type: Input
13
+ }] } });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZHMtcG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3FkYy1jYXJkcy9zcmMvbGliL3NoYXJlZC9wb3BvdmVyL3BvcG92ZXIvY2FyZHMtcG9wb3Zlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3FkYy1jYXJkcy9zcmMvbGliL3NoYXJlZC9wb3BvdmVyL3BvcG92ZXIvY2FyZHMtcG9wb3Zlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBZSxNQUFNLGVBQWUsQ0FBQzs7O0FBUTlELE1BQU0sT0FBTyx3QkFBd0I7K0dBQXhCLHdCQUF3QjttR0FBeEIsd0JBQXdCLDhHQ1JyQywrREFDQTs7NEZET2Esd0JBQXdCO2tCQU5wQyxTQUFTOytCQUNFLG1CQUFtQixjQUdqQixLQUFLOzhCQUlqQixPQUFPO3NCQUROLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdxZGMtY2FyZHMtcG9wb3ZlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYXJkcy1wb3BvdmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2FyZHMtcG9wb3Zlci5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiBmYWxzZVxufSlcbmV4cG9ydCBjbGFzcyBRZGNDYXJkc1BvcG92ZXJDb21wb25lbnQge1xuICBASW5wdXQoKVxuICBjb250ZW50ITogVGVtcGxhdGVSZWY8dW5rbm93bj47XG59XG4iLCI8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFwiPjwvbmctY29udGFpbmVyPlxuIl19
@@ -0,0 +1,100 @@
1
+ import { ComponentPortal } from '@angular/cdk/portal';
2
+ import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
3
+ import { QdcCardsPopoverComponent } from '../popover/cards-popover.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/cdk/overlay";
6
+ import * as i2 from "../cards-popover.service";
7
+ export class QdcCardsPopoverOnClickDirective {
8
+ constructor(hostRef, overlayPositionBuilder, overlay, popoverService) {
9
+ this.hostRef = hostRef;
10
+ this.overlayPositionBuilder = overlayPositionBuilder;
11
+ this.overlay = overlay;
12
+ this.popoverService = popoverService;
13
+ this.popoverWidth = '204';
14
+ this.popoverCloseStrategy = 'onEveryClick';
15
+ this.opened = new EventEmitter();
16
+ this.closed = new EventEmitter();
17
+ this.host = this.hostRef.nativeElement;
18
+ }
19
+ ngOnInit() {
20
+ const positionStrategy = this.overlayPositionBuilder.flexibleConnectedTo(this.host).withPositions([
21
+ ...(this.positionStrategy ? [this.positionStrategy] : []),
22
+ {
23
+ originX: 'end',
24
+ originY: 'bottom',
25
+ overlayX: 'end',
26
+ overlayY: 'top'
27
+ }
28
+ ]);
29
+ this.overlayRef = this.overlay.create({ positionStrategy, width: this.popoverWidth, disposeOnNavigation: true });
30
+ }
31
+ ngOnDestroy() {
32
+ this.close();
33
+ }
34
+ show(event) {
35
+ event.stopPropagation();
36
+ if (!this.overlayRef.hasAttached()) {
37
+ const popoverPortal = new ComponentPortal(QdcCardsPopoverComponent);
38
+ const popoverRef = this.overlayRef.attach(popoverPortal);
39
+ popoverRef.instance.content = this.qdcCardsPopoverOnClick;
40
+ this.opened.emit();
41
+ this.popoverService.closeAllOverlays();
42
+ this.closeSubscription = this.popoverService.subscribe(() => {
43
+ this.close();
44
+ });
45
+ }
46
+ else {
47
+ this.close();
48
+ }
49
+ }
50
+ clickedOutside(event) {
51
+ if (this.overlayRef.hasAttached() && this.shouldClose(event))
52
+ this.close();
53
+ }
54
+ close() {
55
+ this.overlayRef?.detach();
56
+ this.closeSubscription?.unsubscribe();
57
+ this.closed.emit();
58
+ }
59
+ shouldClose(event) {
60
+ const target = event.target;
61
+ if (!this.overlayRef.hasAttached())
62
+ return false;
63
+ if (this.popoverCloseStrategy === 'onEveryClick')
64
+ return !(target?.classList?.contains('disabled') || target?.disabled);
65
+ if (this.popoverCloseStrategy === 'onOutsideClick') {
66
+ const hostElementHovered = this.host.parentElement.querySelector(':hover');
67
+ const overlayElementHovered = this.overlayRef.overlayElement.querySelector(':hover');
68
+ return !hostElementHovered && !overlayElementHovered;
69
+ }
70
+ return false;
71
+ }
72
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: QdcCardsPopoverOnClickDirective, deps: [{ token: i0.ElementRef }, { token: i1.OverlayPositionBuilder }, { token: i1.Overlay }, { token: i2.QdcCardsPopoverService }], target: i0.ɵɵFactoryTarget.Directive }); }
73
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.2.15", type: QdcCardsPopoverOnClickDirective, isStandalone: false, selector: "[qdcCardsPopoverOnClick]", inputs: { qdcCardsPopoverOnClick: "qdcCardsPopoverOnClick", popoverWidth: "popoverWidth", positionStrategy: "positionStrategy", popoverCloseStrategy: "popoverCloseStrategy" }, outputs: { opened: "opened", closed: "closed" }, host: { listeners: { "click": "show($event)", "document:click": "clickedOutside($event)" } }, ngImport: i0 }); }
74
+ }
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: QdcCardsPopoverOnClickDirective, decorators: [{
76
+ type: Directive,
77
+ args: [{
78
+ selector: '[qdcCardsPopoverOnClick]',
79
+ standalone: false
80
+ }]
81
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.OverlayPositionBuilder }, { type: i1.Overlay }, { type: i2.QdcCardsPopoverService }], propDecorators: { qdcCardsPopoverOnClick: [{
82
+ type: Input
83
+ }], popoverWidth: [{
84
+ type: Input
85
+ }], positionStrategy: [{
86
+ type: Input
87
+ }], popoverCloseStrategy: [{
88
+ type: Input
89
+ }], opened: [{
90
+ type: Output
91
+ }], closed: [{
92
+ type: Output
93
+ }], show: [{
94
+ type: HostListener,
95
+ args: ['click', ['$event']]
96
+ }], clickedOutside: [{
97
+ type: HostListener,
98
+ args: ['document:click', ['$event']]
99
+ }] } });
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZHMtcG9wb3Zlci1vbi1jbGljay5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3FkYy1jYXJkcy9zcmMvbGliL3NoYXJlZC9wb3BvdmVyL3BvcG92ZXItb24tY2xpY2svY2FyZHMtcG9wb3Zlci1vbi1jbGljay5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7O0FBTzlFLE1BQU0sT0FBTywrQkFBK0I7SUFhMUMsWUFDVSxPQUFnQyxFQUNoQyxzQkFBOEMsRUFDOUMsT0FBZ0IsRUFDaEIsY0FBc0M7UUFIdEMsWUFBTyxHQUFQLE9BQU8sQ0FBeUI7UUFDaEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ2hCLG1CQUFjLEdBQWQsY0FBYyxDQUF3QjtRQVh2QyxpQkFBWSxHQUFvQixLQUFLLENBQUM7UUFFdEMseUJBQW9CLEdBQXNDLGNBQWMsQ0FBQztRQUUvRCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM1QixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVE3QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxRQUFRO1FBQ04sTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLGFBQWEsQ0FBQztZQUNoRyxHQUFHLENBQUMs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L0IsK0JBQStCOzs0RkFBL0IsK0JBQStCO2tCQUozQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSwwQkFBMEI7b0JBQ3BDLFVBQVUsRUFBRSxLQUFLO2lCQUNsQjsrS0FNVSxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVhLE1BQU07c0JBQXhCLE1BQU07Z0JBQ1ksTUFBTTtzQkFBeEIsTUFBTTtnQkE4QlAsSUFBSTtzQkFESCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFxQmpDLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbm5lY3RlZFBvc2l0aW9uLCBPdmVybGF5LCBPdmVybGF5UG9zaXRpb25CdWlsZGVyLCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFFkY0NhcmRzUG9wb3ZlckNvbXBvbmVudCB9IGZyb20gJy4uL3BvcG92ZXIvY2FyZHMtcG9wb3Zlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgUWRjQ2FyZHNQb3BvdmVyU2VydmljZSB9IGZyb20gJy4uL2NhcmRzLXBvcG92ZXIuc2VydmljZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1txZGNDYXJkc1BvcG92ZXJPbkNsaWNrXScsXG4gIHN0YW5kYWxvbmU6IGZhbHNlXG59KVxuZXhwb3J0IGNsYXNzIFFkY0NhcmRzUG9wb3Zlck9uQ2xpY2tEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgaG9zdDogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgb3ZlcmxheVJlZiE6IE92ZXJsYXlSZWY7XG4gIHByaXZhdGUgY2xvc2VTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgQElucHV0KCkgcWRjQ2FyZHNQb3BvdmVyT25DbGljayE6IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICBASW5wdXQoKSBwb3BvdmVyV2lkdGg6IHN0cmluZyB8ICdhdXRvJyA9ICcyMDQnO1xuICBASW5wdXQoKSBwb3NpdGlvblN0cmF0ZWd5ITogQ29ubmVjdGVkUG9zaXRpb247XG4gIEBJbnB1dCgpIHBvcG92ZXJDbG9zZVN0cmF0ZWd5OiAnb25PdXRzaWRlQ2xpY2snIHwgJ29uRXZlcnlDbGljaycgPSAnb25FdmVyeUNsaWNrJztcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgb3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgY2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaG9zdFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBvdmVybGF5UG9zaXRpb25CdWlsZGVyOiBPdmVybGF5UG9zaXRpb25CdWlsZGVyLFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIHBvcG92ZXJTZXJ2aWNlOiBRZGNDYXJkc1BvcG92ZXJTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuaG9zdCA9IHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50O1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgcG9zaXRpb25TdHJhdGVneSA9IHRoaXMub3ZlcmxheVBvc2l0aW9uQnVpbGRlci5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuaG9zdCkud2l0aFBvc2l0aW9ucyhbXG4gICAgICAuLi4odGhpcy5wb3NpdGlvblN0cmF0ZWd5ID8gW3RoaXMucG9zaXRpb25TdHJhdGVneV0gOiBbXSksXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgb3ZlcmxheVg6ICdlbmQnLFxuICAgICAgICBvdmVybGF5WTogJ3RvcCdcbiAgICAgIH1cbiAgICBdKTtcblxuICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUoeyBwb3NpdGlvblN0cmF0ZWd5LCB3aWR0aDogdGhpcy5wb3BvdmVyV2lkdGgsIGRpc3Bvc2VPbk5hdmlnYXRpb246IHRydWUgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIHNob3coZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKCF0aGlzLm92ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSkge1xuICAgICAgY29uc3QgcG9wb3ZlclBvcnRhbCA9IG5ldyBDb21wb25lbnRQb3J0YWwoUWRjQ2FyZHNQb3BvdmVyQ29tcG9uZW50KTtcbiAgICAgIGNvbnN0IHBvcG92ZXJSZWYgPSB0aGlzLm92ZXJsYXlSZWYuYXR0YWNoKHBvcG92ZXJQb3J0YWwpO1xuXG4gICAgICBwb3BvdmVyUmVmLmluc3RhbmNlLmNvbnRlbnQgPSB0aGlzLnFkY0NhcmRzUG9wb3Zlck9uQ2xpY2s7XG4gICAgICB0aGlzLm9wZW5lZC5lbWl0KCk7XG5cbiAgICAgIHRoaXMucG9wb3ZlclNlcnZpY2UuY2xvc2VBbGxPdmVybGF5cygpO1xuXG4gICAgICB0aGlzLmNsb3NlU3Vic2NyaXB0aW9uID0gdGhpcy5wb3BvdmVyU2VydmljZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgY2xpY2tlZE91dHNpZGUoZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgIGlmICh0aGlzLm92ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSAmJiB0aGlzLnNob3VsZENsb3NlKGV2ZW50KSkgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgdGhpcy5vdmVybGF5UmVmPy5kZXRhY2goKTtcbiAgICB0aGlzLmNsb3NlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2xvc2VkLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkQ2xvc2UoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyAoSFRNTEVsZW1lbnQgJiB7IGRpc2FibGVkPzogYm9vbGVhbiB9KSB8IG51bGw7XG5cbiAgICBpZiAoIXRoaXMub3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpKSByZXR1cm4gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5wb3BvdmVyQ2xvc2VTdHJhdGVneSA9PT0gJ29uRXZlcnlDbGljaycpXG4gICAgICByZXR1cm4gISgodGFyZ2V0Py5jbGFzc0xpc3QgYXMgRE9NVG9rZW5MaXN0KT8uY29udGFpbnMoJ2Rpc2FibGVkJykgfHwgdGFyZ2V0Py5kaXNhYmxlZCk7XG5cbiAgICBpZiAodGhpcy5wb3BvdmVyQ2xvc2VTdHJhdGVneSA9PT0gJ29uT3V0c2lkZUNsaWNrJykge1xuICAgICAgY29uc3QgaG9zdEVsZW1lbnRIb3ZlcmVkID0gdGhpcy5ob3N0LnBhcmVudEVsZW1lbnQhLnF1ZXJ5U2VsZWN0b3IoJzpob3ZlcicpO1xuICAgICAgY29uc3Qgb3ZlcmxheUVsZW1lbnRIb3ZlcmVkID0gdGhpcy5vdmVybGF5UmVmLm92ZXJsYXlFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJzpob3ZlcicpO1xuXG4gICAgICByZXR1cm4gIWhvc3RFbGVtZW50SG92ZXJlZCAmJiAhb3ZlcmxheUVsZW1lbnRIb3ZlcmVkO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhZHJlbC1lbnRlcnByaXNlLXVpLXFkYy1jYXJkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvcWRjLWNhcmRzL3NyYy9xdWFkcmVsLWVudGVycHJpc2UtdWktcWRjLWNhcmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
package/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './lib/card-layout/card-layout.module';
2
+ export * from './lib/card/card.module';
@@ -0,0 +1,20 @@
1
+ import { AfterContentInit, ChangeDetectorRef, OnChanges, TemplateRef } from '@angular/core';
2
+ import { QdcCardConfig } from './card.model';
3
+ import * as i0 from "@angular/core";
4
+ export declare class QdcCardComponent implements AfterContentInit, OnChanges {
5
+ private cdr;
6
+ /** JSON configuration driving the visual appearance of the card. */
7
+ cardConfig: QdcCardConfig;
8
+ /** Optional test-id for E2E / integration tests. */
9
+ testId: string;
10
+ hasHeader: boolean;
11
+ hasFooter: boolean;
12
+ get isMobile(): boolean;
13
+ constructor(cdr: ChangeDetectorRef);
14
+ ngAfterContentInit(): void;
15
+ ngOnChanges(): void;
16
+ private evaluateVisibility;
17
+ isTemplate(value: unknown): value is TemplateRef<unknown>;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<QdcCardComponent, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<QdcCardComponent, "qdc-card", never, { "cardConfig": { "alias": "cardConfig"; "required": false; }; "testId": { "alias": "data-test-id"; "required": false; }; }, {}, never, never, false, never>;
20
+ }
@@ -0,0 +1,23 @@
1
+ import { QdcCardActionConfig, QdcCardBodyPair, QdcCardChip, QdcCardFooter } from './model/card-actions-config.interface';
2
+ export interface QdcCardConfig {
3
+ /**
4
+ * Optional icon name shown in the header, left of the title.
5
+ * */
6
+ icon?: string | null;
7
+ /**
8
+ * Main headline of the card.
9
+ * */
10
+ title?: string | null;
11
+ /**
12
+ * Optional subtitle shown under the title.
13
+ * */
14
+ subTitle?: string | null;
15
+ bodyPairs?: QdcCardBodyPair[];
16
+ chip?: QdcCardChip;
17
+ /**
18
+ * Optional actions to display in the card menu.
19
+ * */
20
+ menuActions?: QdcCardActionConfig[];
21
+ footer?: QdcCardFooter;
22
+ onCardClick?: () => void;
23
+ }
@@ -0,0 +1,16 @@
1
+ import { QdcCardComponent } from './card.component';
2
+ import { QdcCardMenuComponent } from './menu/card-menu.component';
3
+ import { QdcCardConfig } from './card.model';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./card.component";
6
+ import * as i2 from "./menu/card-menu.component";
7
+ import * as i3 from "@angular/common";
8
+ import * as i4 from "@ngx-translate/core";
9
+ import * as i5 from "@quadrel-enterprise-ui/framework";
10
+ import * as i6 from "../shared/popover/cards-popover.module";
11
+ export { QdcCardComponent, QdcCardConfig, QdcCardMenuComponent };
12
+ export declare class QdcCardModule {
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<QdcCardModule, never>;
14
+ static ɵmod: i0.ɵɵNgModuleDeclaration<QdcCardModule, [typeof i1.QdcCardComponent, typeof i2.QdcCardMenuComponent], [typeof i3.CommonModule, typeof i4.TranslateModule, typeof i5.QdUiModule, typeof i6.QdcCardsPopoverModule], [typeof i1.QdcCardComponent, typeof i2.QdcCardMenuComponent]>;
15
+ static ɵinj: i0.ɵɵInjectorDeclaration<QdcCardModule>;
16
+ }
@@ -0,0 +1,14 @@
1
+ import { OnDestroy } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import { QdcCardActionConfig } from '../model/card-actions-config.interface';
4
+ import * as i0 from "@angular/core";
5
+ export declare class QdcCardMenuComponent implements OnDestroy {
6
+ set actions(actions: QdcCardActionConfig[]);
7
+ get actions$(): Observable<QdcCardActionConfig[]>;
8
+ testId: string;
9
+ private _actionsSubject;
10
+ private _destroyed$;
11
+ ngOnDestroy(): void;
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<QdcCardMenuComponent, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<QdcCardMenuComponent, "qdc-card-menu", never, { "actions": { "alias": "actions"; "required": false; }; "testId": { "alias": "data-test-id"; "required": false; }; }, {}, never, never, false, never>;
14
+ }
@@ -0,0 +1,65 @@
1
+ import { QdChipColor } from '@quadrel-enterprise-ui/framework';
2
+ import type { QdStatusIndicatorLevel, QdStatusIndicatorType } from '@quadrel-enterprise-ui/framework/lib/status-indicator/interfaces/status-indicator.interface';
3
+ export interface QdcCardActionConfig {
4
+ /**
5
+ * The label is shown as text in the UI for this action.
6
+ */
7
+ label: {
8
+ /** This i18n key is translated directly inside the QdCardMenu component. */
9
+ i18n: string;
10
+ };
11
+ /**
12
+ * The handler to execute when the action is clicked.
13
+ */
14
+ handler: () => void;
15
+ /**
16
+ * Whether the action is disabled or not
17
+ *
18
+ * * @default false
19
+ */
20
+ isDisabled?: boolean;
21
+ /**
22
+ * Optional icon to display in the action.
23
+ */
24
+ icon?: string | null;
25
+ }
26
+ export interface QdcCardBodyPair {
27
+ /**
28
+ * Translatable label text.
29
+ * */
30
+ i18n: string;
31
+ /**
32
+ * Value to display next to the label.
33
+ * */
34
+ value?: string | number | boolean | null;
35
+ /**
36
+ * Optional Qd-Status-Indicator
37
+ * */
38
+ status?: {
39
+ type: QdStatusIndicatorType;
40
+ level: QdStatusIndicatorLevel;
41
+ } | null;
42
+ icon?: string | null;
43
+ booleanValue?: boolean | null;
44
+ chips?: QdcCardChip[] | null;
45
+ }
46
+ export interface QdcCardFooter {
47
+ icon?: string | null;
48
+ text?: string | null;
49
+ action?: QdcCardActionConfig | null;
50
+ }
51
+ export interface QdcCardChip {
52
+ /**
53
+ * Color of the chip. Defaults to 'primary'.
54
+ * */
55
+ state: QdChipColor;
56
+ /**
57
+ * Text shown inside the chip.
58
+ * */
59
+ label: {
60
+ /**
61
+ * Translatable label text.
62
+ * */
63
+ i18n: string;
64
+ };
65
+ }
@@ -0,0 +1,31 @@
1
+ import { OnInit, OnChanges, SimpleChanges, NgZone } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import { BehaviorSubject } from 'rxjs';
4
+ import { QdFormDropdownConfiguration } from '@quadrel-enterprise-ui/framework';
5
+ import { QdcCardLayoutConfig } from './card-layout.model';
6
+ import { QdcCardStatusSameHeightDirective } from './card-status/card-status-height.directive';
7
+ import { QdcCardStatusConfig } from './card-status/card-status.model';
8
+ import * as i0 from "@angular/core";
9
+ export declare class QdcCardLayoutComponent implements OnInit, OnChanges {
10
+ private ngZone;
11
+ config: QdcCardLayoutConfig;
12
+ cardStatusHeightDirective?: QdcCardStatusSameHeightDirective;
13
+ isMobile: boolean;
14
+ readonly MAX_COLUMNS = 5;
15
+ dropDownForm: FormGroup;
16
+ private statusTitlesDropDownConfig;
17
+ dropDownConfig: BehaviorSubject<QdFormDropdownConfiguration>;
18
+ selectedStatusTitle: BehaviorSubject<QdcCardStatusConfig>;
19
+ constructor(ngZone: NgZone);
20
+ ngOnInit(): void;
21
+ ngOnChanges(changes: SimpleChanges): void;
22
+ onPaginationChanged(): void;
23
+ onResize(): void;
24
+ private checkColumnLimit;
25
+ private updateLayoutState;
26
+ private initializeDropDown;
27
+ private updateSelectedStatus;
28
+ private setDropDownConfig;
29
+ static ɵfac: i0.ɵɵFactoryDeclaration<QdcCardLayoutComponent, never>;
30
+ static ɵcmp: i0.ɵɵComponentDeclaration<QdcCardLayoutComponent, "qdc-card-layout", never, { "config": { "alias": "config"; "required": false; }; }, {}, never, never, false, never>;
31
+ }
@@ -0,0 +1,11 @@
1
+ import { QdcCardStatusConfig } from './card-status/card-status.model';
2
+ export interface QdcCardLayoutConfig {
3
+ /**
4
+ * Title of the cards layout component
5
+ * */
6
+ layoutTitle: string;
7
+ /**
8
+ * Column with cards (max 5)
9
+ * */
10
+ cardStatusConfig: QdcCardStatusConfig[];
11
+ }
@@ -0,0 +1,18 @@
1
+ import { QdcCardLayoutComponent } from './card-layout.component';
2
+ import { QdcCardStatusComponent } from './card-status/card-status.component';
3
+ import { QdcCardStatusSameHeightDirective } from './card-status/card-status-height.directive';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "./card-layout.component";
6
+ import * as i2 from "./card-status/card-status.component";
7
+ import * as i3 from "./card-status/card-status-height.directive";
8
+ import * as i4 from "@angular/common";
9
+ import * as i5 from "@angular/forms";
10
+ import * as i6 from "@ngx-translate/core";
11
+ import * as i7 from "@quadrel-enterprise-ui/framework";
12
+ import * as i8 from "../card/card.module";
13
+ export { QdcCardLayoutComponent, QdcCardStatusComponent, QdcCardStatusSameHeightDirective };
14
+ export declare class QdcCardLayoutModule {
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<QdcCardLayoutModule, never>;
16
+ static ɵmod: i0.ɵɵNgModuleDeclaration<QdcCardLayoutModule, [typeof i1.QdcCardLayoutComponent, typeof i2.QdcCardStatusComponent, typeof i3.QdcCardStatusSameHeightDirective], [typeof i4.CommonModule, typeof i5.FormsModule, typeof i5.ReactiveFormsModule, typeof i6.TranslateModule, typeof i7.QdUiModule, typeof i8.QdcCardModule], [typeof i1.QdcCardLayoutComponent, typeof i2.QdcCardStatusComponent, typeof i3.QdcCardStatusSameHeightDirective]>;
17
+ static ɵinj: i0.ɵɵInjectorDeclaration<QdcCardLayoutModule>;
18
+ }
@@ -0,0 +1,13 @@
1
+ import { AfterViewInit, ElementRef, Renderer2 } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class QdcCardStatusSameHeightDirective implements AfterViewInit {
4
+ private el;
5
+ private renderer;
6
+ constructor(el: ElementRef, renderer: Renderer2);
7
+ ngAfterViewInit(): void;
8
+ onResize(): void;
9
+ triggerUpdate(): void;
10
+ private updateHeights;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<QdcCardStatusSameHeightDirective, never>;
12
+ static ɵdir: i0.ɵɵDirectiveDeclaration<QdcCardStatusSameHeightDirective, "[qdcCardStatusSameHeight]", never, {}, {}, never, never, false, never>;
13
+ }
@@ -0,0 +1,25 @@
1
+ import { EventEmitter, ElementRef, OnInit } from '@angular/core';
2
+ import { QdcCardStatusConfig } from './card-status.model';
3
+ import { QdcCardConfig } from '../../card/card.model';
4
+ import * as i0 from "@angular/core";
5
+ export declare class QdcCardStatusComponent implements OnInit {
6
+ paginationChanged: EventEmitter<void>;
7
+ config: QdcCardStatusConfig;
8
+ cardsContainer?: ElementRef<HTMLElement>;
9
+ private readonly translate;
10
+ isDropdownOpen: boolean;
11
+ hideEntriesLabel: boolean;
12
+ defaultPageSizes: number[];
13
+ ngOnInit(): void;
14
+ get pagedCards(): QdcCardConfig[];
15
+ get pagination(): import("./pagination/pagination.model").QdcCardStatusPaginationConfig;
16
+ goToPage(delta: number): void;
17
+ goToFirstPage(): void;
18
+ goToLastPage(): void;
19
+ onPageSizeChange(): void;
20
+ toggleDropdownIcon(): void;
21
+ onResize(): void;
22
+ getPaginationInfo(): string;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<QdcCardStatusComponent, never>;
24
+ static ɵcmp: i0.ɵɵComponentDeclaration<QdcCardStatusComponent, "qdc-card-status", never, { "config": { "alias": "config"; "required": false; }; }, { "paginationChanged": "paginationChanged"; }, never, never, false, never>;
25
+ }