@rangertechnologies/ngnxt 2.1.126 → 2.1.128

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 (35) hide show
  1. package/esm2022/environments/version.mjs +2 -2
  2. package/esm2022/lib/components/cards/group-card/group-card.component.mjs +36 -0
  3. package/esm2022/lib/components/cards/group-info/group-info.component.mjs +102 -0
  4. package/esm2022/lib/components/cards/image-card/image-card.component.mjs +83 -0
  5. package/esm2022/lib/components/cards/info-card/info-card.component.mjs +109 -0
  6. package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +2 -2
  7. package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +3 -3
  8. package/esm2022/lib/components/custom-input/custom-input.component.mjs +7 -2
  9. package/esm2022/lib/components/custom-table/custom-table.component.mjs +2 -2
  10. package/esm2022/lib/components/datatable/datatable.component.mjs +55 -39
  11. package/esm2022/lib/components/file-upload/file-upload.component.mjs +2 -2
  12. package/esm2022/lib/components/table-appendix/table-appendix.component.mjs +2 -2
  13. package/esm2022/lib/nxt-app.module.mjs +27 -5
  14. package/esm2022/lib/pages/builder/element/element.component.mjs +64 -14
  15. package/esm2022/lib/pages/builder/properties/properties.component.mjs +160 -94
  16. package/esm2022/lib/pages/questionbook/questionbook.component.mjs +4 -3
  17. package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +3 -3
  18. package/esm2022/lib/pipe/get-value.pipe.mjs +3 -5
  19. package/esm2022/lib/services/form-builder.service.mjs +14 -7
  20. package/esm2022/public-api.mjs +6 -1
  21. package/fesm2022/rangertechnologies-ngnxt.mjs +641 -170
  22. package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
  23. package/lib/components/cards/group-card/group-card.component.d.ts +13 -0
  24. package/lib/components/cards/group-info/group-info.component.d.ts +47 -0
  25. package/lib/components/cards/image-card/image-card.component.d.ts +34 -0
  26. package/lib/components/cards/info-card/info-card.component.d.ts +39 -0
  27. package/lib/components/datatable/datatable.component.d.ts +3 -1
  28. package/lib/nxt-app.module.d.ts +16 -12
  29. package/lib/pages/builder/element/element.component.d.ts +2 -0
  30. package/lib/pages/builder/properties/properties.component.d.ts +11 -0
  31. package/lib/services/form-builder.service.d.ts +1 -1
  32. package/package.json +1 -1
  33. package/public-api.d.ts +4 -0
  34. package/rangertechnologies-ngnxt-2.1.128.tgz +0 -0
  35. package/rangertechnologies-ngnxt-2.1.126.tgz +0 -0
@@ -9,7 +9,7 @@ export const VERSION = {
9
9
  "semver": null,
10
10
  "suffix": "05a52cb-dirty",
11
11
  "semverString": null,
12
- "version": "2.1.126"
12
+ "version": "2.1.128"
13
13
  };
14
14
  /* tslint:enable */
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2Vudmlyb25tZW50cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJFQUEyRTtBQUMzRSxvQkFBb0I7QUFDcEIsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ25CLE9BQU8sRUFBRSxJQUFJO0lBQ2IsS0FBSyxFQUFFLGVBQWU7SUFDdEIsTUFBTSxFQUFFLFNBQVM7SUFDakIsVUFBVSxFQUFFLElBQUk7SUFDaEIsS0FBSyxFQUFFLElBQUk7SUFDWCxRQUFRLEVBQUUsSUFBSTtJQUNkLFFBQVEsRUFBRSxlQUFlO0lBQ3pCLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLFNBQVMsRUFBRSxTQUFTO0NBQ3ZCLENBQUM7QUFDRixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJTVBPUlRBTlQ6IFRISVMgRklMRSBJUyBBVVRPIEdFTkVSQVRFRCEgRE8gTk9UIE1BTlVBTExZIEVESVQgT1IgQ0hFQ0tJTiFcbi8qIHRzbGludDpkaXNhYmxlICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IHtcbiAgICBcImRpcnR5XCI6IHRydWUsXG4gICAgXCJyYXdcIjogXCIwNWE1MmNiLWRpcnR5XCIsXG4gICAgXCJoYXNoXCI6IFwiMDVhNTJjYlwiLFxuICAgIFwiZGlzdGFuY2VcIjogbnVsbCxcbiAgICBcInRhZ1wiOiBudWxsLFxuICAgIFwic2VtdmVyXCI6IG51bGwsXG4gICAgXCJzdWZmaXhcIjogXCIwNWE1MmNiLWRpcnR5XCIsXG4gICAgXCJzZW12ZXJTdHJpbmdcIjogbnVsbCxcbiAgICBcInZlcnNpb25cIjogXCIyLjEuMTI2XCJcbn07XG4vKiB0c2xpbnQ6ZW5hYmxlICovXG4iXX0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2Vudmlyb25tZW50cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJFQUEyRTtBQUMzRSxvQkFBb0I7QUFDcEIsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ25CLE9BQU8sRUFBRSxJQUFJO0lBQ2IsS0FBSyxFQUFFLGVBQWU7SUFDdEIsTUFBTSxFQUFFLFNBQVM7SUFDakIsVUFBVSxFQUFFLElBQUk7SUFDaEIsS0FBSyxFQUFFLElBQUk7SUFDWCxRQUFRLEVBQUUsSUFBSTtJQUNkLFFBQVEsRUFBRSxlQUFlO0lBQ3pCLGNBQWMsRUFBRSxJQUFJO0lBQ3BCLFNBQVMsRUFBRSxTQUFTO0NBQ3ZCLENBQUM7QUFDRixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBJTVBPUlRBTlQ6IFRISVMgRklMRSBJUyBBVVRPIEdFTkVSQVRFRCEgRE8gTk9UIE1BTlVBTExZIEVESVQgT1IgQ0hFQ0tJTiFcbi8qIHRzbGludDpkaXNhYmxlICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IHtcbiAgICBcImRpcnR5XCI6IHRydWUsXG4gICAgXCJyYXdcIjogXCIwNWE1MmNiLWRpcnR5XCIsXG4gICAgXCJoYXNoXCI6IFwiMDVhNTJjYlwiLFxuICAgIFwiZGlzdGFuY2VcIjogbnVsbCxcbiAgICBcInRhZ1wiOiBudWxsLFxuICAgIFwic2VtdmVyXCI6IG51bGwsXG4gICAgXCJzdWZmaXhcIjogXCIwNWE1MmNiLWRpcnR5XCIsXG4gICAgXCJzZW12ZXJTdHJpbmdcIjogbnVsbCxcbiAgICBcInZlcnNpb25cIjogXCIyLjEuMTI4XCJcbn07XG4vKiB0c2xpbnQ6ZW5hYmxlICovXG4iXX0=
@@ -0,0 +1,36 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
3
+ import { NxtInfoCard } from '../info-card/info-card.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ export class NxtGroupCard {
7
+ title = 'title'; // card title
8
+ cardWidth = '250px'; // card width
9
+ cardHeight = '80px'; // card height
10
+ titleIconSrc = 'https://img.icons8.com/material-sharp/24/permanent-job.png'; // card title icon
11
+ infoCardArray = []; // array of info cards
12
+ buttonClick = new EventEmitter();
13
+ onButtonClick(event) {
14
+ const { button, cardData } = event;
15
+ this.buttonClick.emit(event);
16
+ }
17
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtGroupCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
18
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NxtGroupCard, isStandalone: true, selector: "nxt-group-card", inputs: { title: "title", cardWidth: "cardWidth", cardHeight: "cardHeight", titleIconSrc: "titleIconSrc", infoCardArray: "infoCardArray" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<!-- SKS4APR25 group card -->\n<div class=\"cards-container\" [style.width]=\"cardWidth\" [style.height]=\"cardHeight\">\n <div class=\"header\">\n <div class=\"title-container\">\n <img [src]=\"titleIconSrc\" alt=\"Icon\" class=\"title-icon\" *ngIf=\"titleIconSrc\">\n <h2 class=\"title\">{{ title }}</h2>\n </div>\n </div>\n \n <div class=\"cards-grid\">\n <div *ngFor=\"let card of infoCardArray\" class=\"card-wrapper\">\n <nxt-info-card \n [title]=\"card.title\"\n [description]=\"card.description\"\n [imgSrc]=\"card.imgSrc\"\n [hoverImgSrc]=\"card.hoverImgSrc\"\n [color]=\"card.color\"\n [hoverColor]=\"card.hoverColor\"\n [iconColor]=\"card.iconColor\"\n [iconHoverColor]=\"card.iconHoverColor\"\n [padding]=\"card.padding\"\n [isImageLeft]=\"card.isImageLeft\"\n [isImageRight]=\"card.isImageRight\"\n [isEdit]=\"card.isEdit\"\n [editConfig]=\"card.editConfig\"\n (buttonClick)=\"onButtonClick($event)\"\n ></nxt-info-card>\n </div>\n </div>\n </div>", styles: [".cards-container{font-family:Arial,sans-serif;margin:20px 0;border:1px solid #e0e0e0;border-radius:8px;padding:15px;background-color:#fff;overflow:auto}.header{margin-bottom:15px;position:sticky;top:0;background-color:#fff;z-index:1;padding-bottom:10px}.title-container{display:flex;align-items:center}.title-icon{width:24px;height:24px;margin-right:8px}.title{font-size:18px;font-weight:600;color:#333;margin:0}.cards-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:15px;overflow:visible}.card-wrapper{min-width:0}@media (max-width: 768px){.cards-grid{grid-template-columns:1fr}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NxtInfoCard, selector: "nxt-info-card", inputs: ["title", "value", "description", "content", "imgSrc", "hoverImgSrc", "color", "hoverColor", "padding", "isImageRight", "isImageLeft", "iconColor", "iconHoverColor", "isEdit", "editConfig"], outputs: ["buttonClick"] }] });
19
+ }
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtGroupCard, decorators: [{
21
+ type: Component,
22
+ args: [{ selector: 'nxt-group-card', standalone: true, imports: [CommonModule, NxtInfoCard], template: "<!-- SKS4APR25 group card -->\n<div class=\"cards-container\" [style.width]=\"cardWidth\" [style.height]=\"cardHeight\">\n <div class=\"header\">\n <div class=\"title-container\">\n <img [src]=\"titleIconSrc\" alt=\"Icon\" class=\"title-icon\" *ngIf=\"titleIconSrc\">\n <h2 class=\"title\">{{ title }}</h2>\n </div>\n </div>\n \n <div class=\"cards-grid\">\n <div *ngFor=\"let card of infoCardArray\" class=\"card-wrapper\">\n <nxt-info-card \n [title]=\"card.title\"\n [description]=\"card.description\"\n [imgSrc]=\"card.imgSrc\"\n [hoverImgSrc]=\"card.hoverImgSrc\"\n [color]=\"card.color\"\n [hoverColor]=\"card.hoverColor\"\n [iconColor]=\"card.iconColor\"\n [iconHoverColor]=\"card.iconHoverColor\"\n [padding]=\"card.padding\"\n [isImageLeft]=\"card.isImageLeft\"\n [isImageRight]=\"card.isImageRight\"\n [isEdit]=\"card.isEdit\"\n [editConfig]=\"card.editConfig\"\n (buttonClick)=\"onButtonClick($event)\"\n ></nxt-info-card>\n </div>\n </div>\n </div>", styles: [".cards-container{font-family:Arial,sans-serif;margin:20px 0;border:1px solid #e0e0e0;border-radius:8px;padding:15px;background-color:#fff;overflow:auto}.header{margin-bottom:15px;position:sticky;top:0;background-color:#fff;z-index:1;padding-bottom:10px}.title-container{display:flex;align-items:center}.title-icon{width:24px;height:24px;margin-right:8px}.title{font-size:18px;font-weight:600;color:#333;margin:0}.cards-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:15px;overflow:visible}.card-wrapper{min-width:0}@media (max-width: 768px){.cards-grid{grid-template-columns:1fr}}\n"] }]
23
+ }], propDecorators: { title: [{
24
+ type: Input
25
+ }], cardWidth: [{
26
+ type: Input
27
+ }], cardHeight: [{
28
+ type: Input
29
+ }], titleIconSrc: [{
30
+ type: Input
31
+ }], infoCardArray: [{
32
+ type: Input
33
+ }], buttonClick: [{
34
+ type: Output
35
+ }] } });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9jYXJkcy9ncm91cC1jYXJkL2dyb3VwLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY2FyZHMvZ3JvdXAtY2FyZC9ncm91cC1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7O0FBUy9ELE1BQU0sT0FBTyxZQUFZO0lBQ2QsS0FBSyxHQUFXLE9BQU8sQ0FBQyxDQUFDLGFBQWE7SUFDdEMsU0FBUyxHQUFXLE9BQU8sQ0FBQyxDQUFDLGFBQWE7SUFDMUMsVUFBVSxHQUFXLE1BQU0sQ0FBQyxDQUFDLGNBQWM7SUFDM0MsWUFBWSxHQUFXLDREQUE0RCxDQUFDLENBQUMsa0JBQWtCO0lBQ3ZHLGFBQWEsR0FBVSxFQUFFLENBQUMsQ0FBQyxzQkFBc0I7SUFFaEQsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFHaEQsYUFBYSxDQUFDLEtBQVU7UUFDdEIsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQzt3R0FiVSxZQUFZOzRGQUFaLFlBQVksK1BDWHpCLGdvQ0E2QlEsK3BCRHRCSSxZQUFZLGdRQUFFLFdBQVc7OzRGQUl4QixZQUFZO2tCQVB4QixTQUFTOytCQUNFLGdCQUFnQixjQUNkLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUM7OEJBSzNCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE54dEluZm9DYXJkIH0gZnJvbSAnLi4vaW5mby1jYXJkL2luZm8tY2FyZC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdueHQtZ3JvdXAtY2FyZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE54dEluZm9DYXJkXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyb3VwLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZ3JvdXAtY2FyZC5jb21wb25lbnQuY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBOeHRHcm91cENhcmQge1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gJ3RpdGxlJzsgLy8gY2FyZCB0aXRsZVxuICBASW5wdXQoKSBjYXJkV2lkdGg6IHN0cmluZyA9ICcyNTBweCc7IC8vIGNhcmQgd2lkdGhcbiAgQElucHV0KCkgY2FyZEhlaWdodDogc3RyaW5nID0gJzgwcHgnOyAvLyBjYXJkIGhlaWdodFxuICBASW5wdXQoKSB0aXRsZUljb25TcmM6IHN0cmluZyA9ICdodHRwczovL2ltZy5pY29uczguY29tL21hdGVyaWFsLXNoYXJwLzI0L3Blcm1hbmVudC1qb2IucG5nJzsgLy8gY2FyZCB0aXRsZSBpY29uXG4gIEBJbnB1dCgpIGluZm9DYXJkQXJyYXk6IGFueVtdID0gW107IC8vIGFycmF5IG9mIGluZm8gY2FyZHNcblxuICBAT3V0cHV0KCkgYnV0dG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgXG5cbiAgb25CdXR0b25DbGljayhldmVudDogYW55KSB7XG4gICAgY29uc3QgeyBidXR0b24sIGNhcmREYXRhIH0gPSBldmVudDtcbiAgICB0aGlzLmJ1dHRvbkNsaWNrLmVtaXQoZXZlbnQpO1xuICB9XG59XG4iLCI8IS0tIFNLUzRBUFIyNSBncm91cCBjYXJkIC0tPlxuPGRpdiBjbGFzcz1cImNhcmRzLWNvbnRhaW5lclwiIFtzdHlsZS53aWR0aF09XCJjYXJkV2lkdGhcIiBbc3R5bGUuaGVpZ2h0XT1cImNhcmRIZWlnaHRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgIDxpbWcgW3NyY109XCJ0aXRsZUljb25TcmNcIiBhbHQ9XCJJY29uXCIgY2xhc3M9XCJ0aXRsZS1pY29uXCIgKm5nSWY9XCJ0aXRsZUljb25TcmNcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwidGl0bGVcIj57eyB0aXRsZSB9fTwvaDI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICBcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZHMtZ3JpZFwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgY2FyZCBvZiBpbmZvQ2FyZEFycmF5XCIgY2xhc3M9XCJjYXJkLXdyYXBwZXJcIj5cbiAgICAgICAgPG54dC1pbmZvLWNhcmQgXG4gICAgICAgICAgW3RpdGxlXT1cImNhcmQudGl0bGVcIlxuICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCJjYXJkLmRlc2NyaXB0aW9uXCJcbiAgICAgICAgICBbaW1nU3JjXT1cImNhcmQuaW1nU3JjXCJcbiAgICAgICAgICBbaG92ZXJJbWdTcmNdPVwiY2FyZC5ob3ZlckltZ1NyY1wiXG4gICAgICAgICAgW2NvbG9yXT1cImNhcmQuY29sb3JcIlxuICAgICAgICAgIFtob3ZlckNvbG9yXT1cImNhcmQuaG92ZXJDb2xvclwiXG4gICAgICAgICAgW2ljb25Db2xvcl09XCJjYXJkLmljb25Db2xvclwiXG4gICAgICAgICAgW2ljb25Ib3ZlckNvbG9yXT1cImNhcmQuaWNvbkhvdmVyQ29sb3JcIlxuICAgICAgICAgIFtwYWRkaW5nXT1cImNhcmQucGFkZGluZ1wiXG4gICAgICAgICAgW2lzSW1hZ2VMZWZ0XT1cImNhcmQuaXNJbWFnZUxlZnRcIlxuICAgICAgICAgIFtpc0ltYWdlUmlnaHRdPVwiY2FyZC5pc0ltYWdlUmlnaHRcIlxuICAgICAgICAgIFtpc0VkaXRdPVwiY2FyZC5pc0VkaXRcIlxuICAgICAgICAgIFtlZGl0Q29uZmlnXT1cImNhcmQuZWRpdENvbmZpZ1wiXG4gICAgICAgICAgKGJ1dHRvbkNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgID48L254dC1pbmZvLWNhcmQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+Il19
@@ -0,0 +1,102 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
3
+ import { FormsModule } from '@angular/forms';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ import * as i2 from "@angular/forms";
7
+ export class NxtGroupInfo {
8
+ elementRef;
9
+ cardTitle = 'Title'; // card title
10
+ fields = []; // fields to display
11
+ isEditable = false; // is the card editable
12
+ allowAdd = false; // allow adding new fields
13
+ allowEditValues = false; // allow editing values
14
+ allowDelete = false; // allow deleting fields
15
+ cardWidth = '300px'; // card width
16
+ cardHeight = 'auto'; // card height
17
+ backgroundColor = 'white'; // card background color
18
+ borderRadius = '10px'; // card border radius
19
+ editConfig = null; // edit config
20
+ buttonClick = new EventEmitter();
21
+ editingIndex = -1;
22
+ isDropdownOpen = false;
23
+ constructor(elementRef) {
24
+ this.elementRef = elementRef;
25
+ }
26
+ getCardStyle() {
27
+ return {
28
+ width: this.cardWidth,
29
+ height: this.cardHeight,
30
+ backgroundColor: this.backgroundColor,
31
+ borderRadius: this.borderRadius || '8px'
32
+ };
33
+ }
34
+ startEditing(index) {
35
+ if (this.isEditable) {
36
+ this.editingIndex = index;
37
+ }
38
+ }
39
+ saveItem(index) {
40
+ this.editingIndex = -1;
41
+ }
42
+ deleteItem(index) {
43
+ if (this.isEditable && this.allowDelete) {
44
+ this.fields.splice(index, 1);
45
+ }
46
+ }
47
+ addNewItem() {
48
+ if (this.isEditable && this.allowAdd) {
49
+ this.fields.push({ icon: 'https://img.icons8.com/material-sharp/24/permanent-job.png', name: 'New Position', value: 0 });
50
+ this.editingIndex = this.fields.length - 1;
51
+ }
52
+ }
53
+ toggleDropdown() {
54
+ this.isDropdownOpen = !this.isDropdownOpen;
55
+ }
56
+ closeDropdown() {
57
+ this.isDropdownOpen = false;
58
+ }
59
+ onClickOutside(event) {
60
+ if (this.isDropdownOpen && !this.elementRef.nativeElement.contains(event.target)) {
61
+ this.isDropdownOpen = false;
62
+ }
63
+ }
64
+ onButtonClick(button) {
65
+ this.buttonClick.emit({ button, fields: this.fields });
66
+ this.closeDropdown();
67
+ }
68
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtGroupInfo, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
69
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NxtGroupInfo, isStandalone: true, selector: "nxt-group-info", inputs: { cardTitle: "cardTitle", fields: "fields", isEditable: "isEditable", allowAdd: "allowAdd", allowEditValues: "allowEditValues", allowDelete: "allowDelete", cardWidth: "cardWidth", cardHeight: "cardHeight", backgroundColor: "backgroundColor", borderRadius: "borderRadius", editConfig: "editConfig" }, outputs: { buttonClick: "buttonClick" }, host: { listeners: { "document:click": "onClickOutside($event)" } }, ngImport: i0, template: "<div class=\"position-card\" [ngStyle]=\"getCardStyle()\">\n <div class=\"title-card-header\">\n <h3 class=\"card-title\">{{ cardTitle }}</h3>\n <div class=\"card-actions\" *ngIf=\"isEditable\">\n <button class=\"edit-button\" (click)=\"toggleDropdown(); $event.stopPropagation()\">\n <i class=\"fa fa-ellipsis-v\"></i>\n </button>\n <!-- SKS4APR25 Dropdown menu -->\n <div *ngIf=\"isDropdownOpen\" class=\"edit-dropdown-menu show\">\n <div *ngFor=\"let button of editConfig.buttons\" class=\"edit-dropdown-item\" (click)=\"onButtonClick(button)\">\n <div class=\"dropdown-button-content\">\n <img *ngIf=\"button.isImageSvg && button.iconSrc\" [src]=\"button.iconSrc\" alt=\"icon\" class=\"button-icon\">\n <span class=\"button-name\">{{ button.name }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"card-content\">\n <div class=\"position-item\" *ngFor=\"let field of fields; let i = index\">\n <div *ngIf=\"editingIndex !== i\" class=\"position-display\">\n <div class=\"position-icon\">\n <img [src]=\"field.icon\" alt=\"icon\">\n </div>\n <div class=\"position-name\">{{ field.name }}</div>\n <div class=\"position-value\">{{ field.value }}</div>\n <div class=\"edit-actions\" *ngIf=\"isEditable\">\n <button class=\"edit-btn\" (click)=\"startEditing(i)\" *ngIf=\"allowEditValues\">\n <i class=\"fa fa-pencil\"></i>\n </button>\n <button class=\"delete-btn\" (click)=\"deleteItem(i)\" *ngIf=\"allowDelete\">\n <i class=\"fa fa-trash\"></i>\n </button>\n </div>\n </div>\n\n <div *ngIf=\"editingIndex === i\" class=\"position-edit\">\n <div class=\"position-icon\">\n <img [src]=\"field.icon\" alt=\"icon\">\n </div>\n <input [(ngModel)]=\"field.name\" class=\"edit-name\" placeholder=\"Position name\">\n <input [(ngModel)]=\"field.value\" class=\"edit-value\" type=\"number\">\n <button class=\"save-btn\" (click)=\"saveItem(i)\">\n <i class=\"fa fa-check\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"add-position\" *ngIf=\"isEditable && allowAdd\">\n <button class=\"add-btn\" (click)=\"addNewItem()\">\n <i class=\"fa fa-plus\"></i> Add\n </button>\n </div>\n </div>\n</div>", styles: [".position-card{box-shadow:0 2px 8px #0000001a;overflow:hidden;font-family:Arial,sans-serif}.title-card-header{display:flex;justify-content:space-between;align-items:center;padding-left:15px!important;padding:5px}.card-title{margin:0;font-size:16px;font-weight:500;color:#555}.edit-button{right:0;cursor:pointer;display:flex;align-items:center;justify-content:center;width:24px;height:24px;background-color:#eee;border-radius:15px;padding:2px;border:none}.edit-button:hover{color:#000;background-color:#f4f4f4}.card-content{padding:8px 0}.position-item{display:flex;padding:8px 16px}.position-display,.position-edit{display:flex;align-items:center;width:100%}.position-icon{width:24px;height:24px;margin-right:12px;display:flex;align-items:center;justify-content:center}.position-icon img{max-width:100%;max-height:100%}.position-name{flex-grow:1;color:#333}.position-value{font-weight:700;color:#333;margin-left:8px;min-width:30px;text-align:right}.edit-actions{display:flex;opacity:0;transition:opacity .2s}.position-item:hover .edit-actions{opacity:1}.edit-btn,.delete-btn,.save-btn{background:none;border:none;cursor:pointer;padding:4px;color:#999}.edit-btn:hover,.save-btn:hover{color:#2196f3}.delete-btn:hover{color:#f44336}.position-edit{padding:4px 0}.edit-name,.edit-value{border:1px solid #ddd;padding:4px 8px;border-radius:4px}.edit-name{flex-grow:1;margin-right:8px}.edit-value{width:50px;text-align:right;margin-right:8px}.add-position{padding:8px 16px;text-align:center}.add-btn{background:none;border:1px dashed #ccc;border-radius:4px;padding:6px 12px;width:100%;cursor:pointer;color:#999;transition:all .2s}.add-btn:hover{border-color:#2196f3;color:#2196f3}.edit-dropdown-menu{position:absolute;z-index:1000;min-width:80px;max-height:75px;background-color:#fff;overflow-y:auto;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px #0000002d}.edit-dropdown-item{display:block;width:100%;padding:8px 16px;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0;cursor:pointer}.edit-dropdown-item:is(:hover,:focus){color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-button-content{display:flex;align-items:center;gap:8px}.button-icon{width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center}.button-icon ::ng-deep svg{width:20px;height:20px}.button-name{font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { 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"] }] });
70
+ }
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtGroupInfo, decorators: [{
72
+ type: Component,
73
+ args: [{ selector: 'nxt-group-info', standalone: true, imports: [CommonModule, FormsModule], template: "<div class=\"position-card\" [ngStyle]=\"getCardStyle()\">\n <div class=\"title-card-header\">\n <h3 class=\"card-title\">{{ cardTitle }}</h3>\n <div class=\"card-actions\" *ngIf=\"isEditable\">\n <button class=\"edit-button\" (click)=\"toggleDropdown(); $event.stopPropagation()\">\n <i class=\"fa fa-ellipsis-v\"></i>\n </button>\n <!-- SKS4APR25 Dropdown menu -->\n <div *ngIf=\"isDropdownOpen\" class=\"edit-dropdown-menu show\">\n <div *ngFor=\"let button of editConfig.buttons\" class=\"edit-dropdown-item\" (click)=\"onButtonClick(button)\">\n <div class=\"dropdown-button-content\">\n <img *ngIf=\"button.isImageSvg && button.iconSrc\" [src]=\"button.iconSrc\" alt=\"icon\" class=\"button-icon\">\n <span class=\"button-name\">{{ button.name }}</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"card-content\">\n <div class=\"position-item\" *ngFor=\"let field of fields; let i = index\">\n <div *ngIf=\"editingIndex !== i\" class=\"position-display\">\n <div class=\"position-icon\">\n <img [src]=\"field.icon\" alt=\"icon\">\n </div>\n <div class=\"position-name\">{{ field.name }}</div>\n <div class=\"position-value\">{{ field.value }}</div>\n <div class=\"edit-actions\" *ngIf=\"isEditable\">\n <button class=\"edit-btn\" (click)=\"startEditing(i)\" *ngIf=\"allowEditValues\">\n <i class=\"fa fa-pencil\"></i>\n </button>\n <button class=\"delete-btn\" (click)=\"deleteItem(i)\" *ngIf=\"allowDelete\">\n <i class=\"fa fa-trash\"></i>\n </button>\n </div>\n </div>\n\n <div *ngIf=\"editingIndex === i\" class=\"position-edit\">\n <div class=\"position-icon\">\n <img [src]=\"field.icon\" alt=\"icon\">\n </div>\n <input [(ngModel)]=\"field.name\" class=\"edit-name\" placeholder=\"Position name\">\n <input [(ngModel)]=\"field.value\" class=\"edit-value\" type=\"number\">\n <button class=\"save-btn\" (click)=\"saveItem(i)\">\n <i class=\"fa fa-check\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"add-position\" *ngIf=\"isEditable && allowAdd\">\n <button class=\"add-btn\" (click)=\"addNewItem()\">\n <i class=\"fa fa-plus\"></i> Add\n </button>\n </div>\n </div>\n</div>", styles: [".position-card{box-shadow:0 2px 8px #0000001a;overflow:hidden;font-family:Arial,sans-serif}.title-card-header{display:flex;justify-content:space-between;align-items:center;padding-left:15px!important;padding:5px}.card-title{margin:0;font-size:16px;font-weight:500;color:#555}.edit-button{right:0;cursor:pointer;display:flex;align-items:center;justify-content:center;width:24px;height:24px;background-color:#eee;border-radius:15px;padding:2px;border:none}.edit-button:hover{color:#000;background-color:#f4f4f4}.card-content{padding:8px 0}.position-item{display:flex;padding:8px 16px}.position-display,.position-edit{display:flex;align-items:center;width:100%}.position-icon{width:24px;height:24px;margin-right:12px;display:flex;align-items:center;justify-content:center}.position-icon img{max-width:100%;max-height:100%}.position-name{flex-grow:1;color:#333}.position-value{font-weight:700;color:#333;margin-left:8px;min-width:30px;text-align:right}.edit-actions{display:flex;opacity:0;transition:opacity .2s}.position-item:hover .edit-actions{opacity:1}.edit-btn,.delete-btn,.save-btn{background:none;border:none;cursor:pointer;padding:4px;color:#999}.edit-btn:hover,.save-btn:hover{color:#2196f3}.delete-btn:hover{color:#f44336}.position-edit{padding:4px 0}.edit-name,.edit-value{border:1px solid #ddd;padding:4px 8px;border-radius:4px}.edit-name{flex-grow:1;margin-right:8px}.edit-value{width:50px;text-align:right;margin-right:8px}.add-position{padding:8px 16px;text-align:center}.add-btn{background:none;border:1px dashed #ccc;border-radius:4px;padding:6px 12px;width:100%;cursor:pointer;color:#999;transition:all .2s}.add-btn:hover{border-color:#2196f3;color:#2196f3}.edit-dropdown-menu{position:absolute;z-index:1000;min-width:80px;max-height:75px;background-color:#fff;overflow-y:auto;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px #0000002d}.edit-dropdown-item{display:block;width:100%;padding:8px 16px;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0;cursor:pointer}.edit-dropdown-item:is(:hover,:focus){color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-button-content{display:flex;align-items:center;gap:8px}.button-icon{width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center}.button-icon ::ng-deep svg{width:20px;height:20px}.button-name{font-size:14px}\n"] }]
74
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { cardTitle: [{
75
+ type: Input
76
+ }], fields: [{
77
+ type: Input
78
+ }], isEditable: [{
79
+ type: Input
80
+ }], allowAdd: [{
81
+ type: Input
82
+ }], allowEditValues: [{
83
+ type: Input
84
+ }], allowDelete: [{
85
+ type: Input
86
+ }], cardWidth: [{
87
+ type: Input
88
+ }], cardHeight: [{
89
+ type: Input
90
+ }], backgroundColor: [{
91
+ type: Input
92
+ }], borderRadius: [{
93
+ type: Input
94
+ }], editConfig: [{
95
+ type: Input
96
+ }], buttonClick: [{
97
+ type: Output
98
+ }], onClickOutside: [{
99
+ type: HostListener,
100
+ args: ['document:click', ['$event']]
101
+ }] } });
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtaW5mby5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9jYXJkcy9ncm91cC1pbmZvL2dyb3VwLWluZm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY2FyZHMvZ3JvdXAtaW5mby9ncm91cC1pbmZvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFxQjdDLE1BQU0sT0FBTyxZQUFZO0lBa0JIO0lBakJYLFNBQVMsR0FBVyxPQUFPLENBQUMsQ0FBQyxhQUFhO0lBQzFDLE1BQU0sR0FBWSxFQUFFLENBQUMsQ0FBQyxvQkFBb0I7SUFDMUMsVUFBVSxHQUFZLEtBQUssQ0FBQyxDQUFDLHVCQUF1QjtJQUNwRCxRQUFRLEdBQVksS0FBSyxDQUFDLENBQUMsMEJBQTBCO0lBQ3JELGVBQWUsR0FBWSxLQUFLLENBQUMsQ0FBQyx1QkFBdUI7SUFDekQsV0FBVyxHQUFZLEtBQUssQ0FBQyxDQUFDLHdCQUF3QjtJQUN0RCxTQUFTLEdBQVcsT0FBTyxDQUFDLENBQUMsYUFBYTtJQUMxQyxVQUFVLEdBQVcsTUFBTSxDQUFDLENBQUMsY0FBYztJQUMzQyxlQUFlLEdBQVcsT0FBTyxDQUFDLENBQUMsd0JBQXdCO0lBQzNELFlBQVksR0FBVyxNQUFNLENBQUMsQ0FBQyxxQkFBcUI7SUFDcEQsVUFBVSxHQUFRLElBQUksQ0FBQyxDQUFDLGNBQWM7SUFFckMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFNLENBQUM7SUFFL0MsWUFBWSxHQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzFCLGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFaEMsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUFJLENBQUM7SUFFL0MsWUFBWTtRQUNWLE9BQU87WUFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQ3ZCLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNyQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksSUFBSSxLQUFLO1NBQ3pDLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWE7UUFDeEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxRQUFRLENBQUMsS0FBYTtRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxVQUFVLENBQUMsS0FBYTtRQUN0QixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLDREQUE0RCxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekgsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFDRCxjQUFjO1FBQ1osSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0MsQ0FBQztJQUNELGFBQWE7UUFDWCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQWlCO1FBQzlCLElBQUksSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQzlFLENBQUM7WUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUNELGFBQWEsQ0FBQyxNQUFXO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdkIsQ0FBQzt3R0FuRVUsWUFBWTs0RkFBWixZQUFZLDRlQ3ZCekIsKzNFQXVETSxtNkVEcENNLFlBQVksb1ZBQUUsV0FBVzs7NEZBSXhCLFlBQVk7a0JBUHhCLFNBQVM7K0JBQ0UsZ0JBQWdCLGNBQ2QsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQzsrRUFLM0IsU0FBUztzQkFBakIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkE2Q1AsY0FBYztzQkFEYixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuZXhwb3J0IGludGVyZmFjZSBGaWVsZCB7XG4gIGljb246IHN0cmluZzsgICAgICAgLy8gVVJMIG9yIHBhdGggdG8gdGhlIGljb25cbiAgbmFtZTogc3RyaW5nOyAgICAgICAvLyBOYW1lL2xhYmVsIG9mIHRoZSBwb3NpdGlvblxuICB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nOyAvLyBDb3VudC92YWx1ZSBmb3IgdGhpcyBwb3NpdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhcmRDb25maWcge1xuICB3aWR0aD86IHN0cmluZztcbiAgaGVpZ2h0Pzogc3RyaW5nO1xuICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XG4gIGJvcmRlclJhZGl1cz86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnh0LWdyb3VwLWluZm8nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9ncm91cC1pbmZvLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2dyb3VwLWluZm8uY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgTnh0R3JvdXBJbmZvIHtcbiAgQElucHV0KCkgY2FyZFRpdGxlOiBzdHJpbmcgPSAnVGl0bGUnOyAvLyBjYXJkIHRpdGxlXG4gIEBJbnB1dCgpIGZpZWxkczogRmllbGRbXSA9IFtdOyAvLyBmaWVsZHMgdG8gZGlzcGxheVxuICBASW5wdXQoKSBpc0VkaXRhYmxlOiBib29sZWFuID0gZmFsc2U7IC8vIGlzIHRoZSBjYXJkIGVkaXRhYmxlXG4gIEBJbnB1dCgpIGFsbG93QWRkOiBib29sZWFuID0gZmFsc2U7IC8vIGFsbG93IGFkZGluZyBuZXcgZmllbGRzXG4gIEBJbnB1dCgpIGFsbG93RWRpdFZhbHVlczogYm9vbGVhbiA9IGZhbHNlOyAvLyBhbGxvdyBlZGl0aW5nIHZhbHVlc1xuICBASW5wdXQoKSBhbGxvd0RlbGV0ZTogYm9vbGVhbiA9IGZhbHNlOyAvLyBhbGxvdyBkZWxldGluZyBmaWVsZHNcbiAgQElucHV0KCkgY2FyZFdpZHRoOiBzdHJpbmcgPSAnMzAwcHgnOyAvLyBjYXJkIHdpZHRoXG4gIEBJbnB1dCgpIGNhcmRIZWlnaHQ6IHN0cmluZyA9ICdhdXRvJzsgLy8gY2FyZCBoZWlnaHRcbiAgQElucHV0KCkgYmFja2dyb3VuZENvbG9yOiBzdHJpbmcgPSAnd2hpdGUnOyAvLyBjYXJkIGJhY2tncm91bmQgY29sb3JcbiAgQElucHV0KCkgYm9yZGVyUmFkaXVzOiBzdHJpbmcgPSAnMTBweCc7IC8vIGNhcmQgYm9yZGVyIHJhZGl1c1xuICBASW5wdXQoKSBlZGl0Q29uZmlnOiBhbnkgPSBudWxsOyAvLyBlZGl0IGNvbmZpZ1xuXG4gIEBPdXRwdXQoKSBidXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8e30+KCk7XG5cbiAgZWRpdGluZ0luZGV4OiBudW1iZXIgPSAtMTtcbiAgaXNEcm9wZG93bk9wZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHsgfVxuXG4gIGdldENhcmRTdHlsZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IHRoaXMuY2FyZFdpZHRoLFxuICAgICAgaGVpZ2h0OiB0aGlzLmNhcmRIZWlnaHQsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuYmFja2dyb3VuZENvbG9yLFxuICAgICAgYm9yZGVyUmFkaXVzOiB0aGlzLmJvcmRlclJhZGl1cyB8fCAnOHB4J1xuICAgIH07XG4gIH1cblxuICBzdGFydEVkaXRpbmcoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRWRpdGFibGUpIHtcbiAgICAgIHRoaXMuZWRpdGluZ0luZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgc2F2ZUl0ZW0oaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZWRpdGluZ0luZGV4ID0gLTE7XG4gIH1cblxuICBkZWxldGVJdGVtKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0VkaXRhYmxlICYmIHRoaXMuYWxsb3dEZWxldGUpIHtcbiAgICAgIHRoaXMuZmllbGRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgYWRkTmV3SXRlbSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0VkaXRhYmxlICYmIHRoaXMuYWxsb3dBZGQpIHtcbiAgICAgIHRoaXMuZmllbGRzLnB1c2goeyBpY29uOiAnaHR0cHM6Ly9pbWcuaWNvbnM4LmNvbS9tYXRlcmlhbC1zaGFycC8yNC9wZXJtYW5lbnQtam9iLnBuZycsIG5hbWU6ICdOZXcgUG9zaXRpb24nLCB2YWx1ZTogMCB9KTtcbiAgICAgIHRoaXMuZWRpdGluZ0luZGV4ID0gdGhpcy5maWVsZHMubGVuZ3RoIC0gMTtcbiAgICB9XG4gIH1cbiAgdG9nZ2xlRHJvcGRvd24oKSB7XG4gICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiA9ICF0aGlzLmlzRHJvcGRvd25PcGVuO1xuICB9XG4gIGNsb3NlRHJvcGRvd24oKSB7XG4gICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiA9IGZhbHNlO1xuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgb25DbGlja091dHNpZGUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pc0Ryb3Bkb3duT3BlbiAmJiAhdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICkge1xuICAgICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBvbkJ1dHRvbkNsaWNrKGJ1dHRvbjogYW55KSB7XG4gICAgdGhpcy5idXR0b25DbGljay5lbWl0KHsgYnV0dG9uLCBmaWVsZHM6IHRoaXMuZmllbGRzIH0pO1xuICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicG9zaXRpb24tY2FyZFwiIFtuZ1N0eWxlXT1cImdldENhcmRTdHlsZSgpXCI+XG4gIDxkaXYgY2xhc3M9XCJ0aXRsZS1jYXJkLWhlYWRlclwiPlxuICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGVcIj57eyBjYXJkVGl0bGUgfX08L2gzPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWFjdGlvbnNcIiAqbmdJZj1cImlzRWRpdGFibGVcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJlZGl0LWJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lbGxpcHNpcy12XCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8IS0tIFNLUzRBUFIyNSBEcm9wZG93biBtZW51IC0tPlxuICAgICAgPGRpdiAqbmdJZj1cImlzRHJvcGRvd25PcGVuXCIgY2xhc3M9XCJlZGl0LWRyb3Bkb3duLW1lbnUgc2hvd1wiPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZWRpdENvbmZpZy5idXR0b25zXCIgY2xhc3M9XCJlZGl0LWRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwib25CdXR0b25DbGljayhidXR0b24pXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWJ1dHRvbi1jb250ZW50XCI+XG4gICAgICAgICAgICA8aW1nICpuZ0lmPVwiYnV0dG9uLmlzSW1hZ2VTdmcgJiYgYnV0dG9uLmljb25TcmNcIiBbc3JjXT1cImJ1dHRvbi5pY29uU3JjXCIgYWx0PVwiaWNvblwiIGNsYXNzPVwiYnV0dG9uLWljb25cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uLW5hbWVcIj57eyBidXR0b24ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1pdGVtXCIgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpZWxkczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgPGRpdiAqbmdJZj1cImVkaXRpbmdJbmRleCAhPT0gaVwiIGNsYXNzPVwicG9zaXRpb24tZGlzcGxheVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24taWNvblwiPlxuICAgICAgICAgIDxpbWcgW3NyY109XCJmaWVsZC5pY29uXCIgYWx0PVwiaWNvblwiPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLW5hbWVcIj57eyBmaWVsZC5uYW1lIH19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi12YWx1ZVwiPnt7IGZpZWxkLnZhbHVlIH19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlZGl0LWFjdGlvbnNcIiAqbmdJZj1cImlzRWRpdGFibGVcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZWRpdC1idG5cIiAoY2xpY2spPVwic3RhcnRFZGl0aW5nKGkpXCIgKm5nSWY9XCJhbGxvd0VkaXRWYWx1ZXNcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGVuY2lsXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJkZWxldGUtYnRuXCIgKGNsaWNrKT1cImRlbGV0ZUl0ZW0oaSlcIiAqbmdJZj1cImFsbG93RGVsZXRlXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoXCI+PC9pPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiZWRpdGluZ0luZGV4ID09PSBpXCIgY2xhc3M9XCJwb3NpdGlvbi1lZGl0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1pY29uXCI+XG4gICAgICAgICAgPGltZyBbc3JjXT1cImZpZWxkLmljb25cIiBhbHQ9XCJpY29uXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJmaWVsZC5uYW1lXCIgY2xhc3M9XCJlZGl0LW5hbWVcIiBwbGFjZWhvbGRlcj1cIlBvc2l0aW9uIG5hbWVcIj5cbiAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiZmllbGQudmFsdWVcIiBjbGFzcz1cImVkaXQtdmFsdWVcIiB0eXBlPVwibnVtYmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJzYXZlLWJ0blwiIChjbGljayk9XCJzYXZlSXRlbShpKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYWRkLXBvc2l0aW9uXCIgKm5nSWY9XCJpc0VkaXRhYmxlICYmIGFsbG93QWRkXCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkLWJ0blwiIChjbGljayk9XCJhZGROZXdJdGVtKClcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzXCI+PC9pPiBBZGRcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -0,0 +1,83 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, Input } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class NxtImageCard {
6
+ imageSrc = ''; // image
7
+ iconSrc = ''; // icon
8
+ hoverIconSrc = ''; // hover icon
9
+ iconBgColor = '#e8eaf6'; // icon background color
10
+ iconHoverBgColor = '#c5cae9'; // icon hover background color
11
+ iconPosition = 'middle'; // icon position
12
+ title = ''; // title
13
+ content = ''; // content
14
+ cardData = []; // card data(key: value)
15
+ cardHeight = 'auto'; // card height
16
+ cardWidth = '300px'; // card width
17
+ cardColor = 'white'; // card color
18
+ padding = '20px'; // padding
19
+ cardImageHeight = '40%'; // card image height
20
+ cardImageWidth = '100%'; // card image width
21
+ cardImageColor = '10px'; // card image color
22
+ imagePadding = '10px'; // image padding
23
+ imageBorderRadius = '25px'; // image border radius
24
+ isHovered = false;
25
+ constructor() { }
26
+ ngOnInit() { }
27
+ getIconPositionClass() {
28
+ switch (this.iconPosition) {
29
+ case 'start': return 'justify-content-start';
30
+ case 'end': return 'justify-content-end';
31
+ default: return 'justify-content-center';
32
+ }
33
+ }
34
+ onMouseEnter() {
35
+ this.isHovered = true;
36
+ }
37
+ onMouseLeave() {
38
+ this.isHovered = false;
39
+ }
40
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtImageCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
41
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NxtImageCard, isStandalone: true, selector: "nxt-image-card", inputs: { imageSrc: "imageSrc", iconSrc: "iconSrc", hoverIconSrc: "hoverIconSrc", iconBgColor: "iconBgColor", iconHoverBgColor: "iconHoverBgColor", iconPosition: "iconPosition", title: "title", content: "content", cardData: "cardData", cardHeight: "cardHeight", cardWidth: "cardWidth", cardColor: "cardColor", padding: "padding", cardImageHeight: "cardImageHeight", cardImageWidth: "cardImageWidth", cardImageColor: "cardImageColor", imagePadding: "imagePadding", imageBorderRadius: "imageBorderRadius" }, ngImport: i0, template: "<div class=\"custom-card\" [style.height]=\"cardHeight\" [style.width]=\"cardWidth\" [style.background-color]=\"cardColor\"\n [style.padding]=\"padding\">\n\n <!-- Background Image -->\n <div class=\"card-image\" *ngIf=\"imageSrc\" [style.height]=\"cardImageHeight\" [style.width]=\"cardImageWidth\"\n [style.background-color]=\"cardImageColor\">\n <img [src]=\"imageSrc\" alt=\"Card background\" [style.padding]=\"imagePadding\"\n [style.border-radius]=\"imageBorderRadius\">\n </div>\n <!-- Icon Container -->\n <div class=\"icon-container d-flex\" [ngClass]=\"getIconPositionClass()\">\n <div class=\"icon-wrapper\" [style.border]=\"'4px solid ' + cardColor\"\n [style.background-color]=\"isHovered ? iconHoverBgColor : iconBgColor\" (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\">\n <img [src]=\"isHovered && hoverIconSrc ? hoverIconSrc : iconSrc\" alt=\"Icon\">\n </div>\n </div>\n <!-- Content -->\n <div class=\"card-content\">\n <h2 class=\"card-title\" *ngIf=\"title\">{{ title }}</h2>\n <p class=\"card-description\" *ngIf=\"content\">{{ content }}</p>\n </div>\n\n <!-- Data Points -->\n <div class=\"card-data\" *ngIf=\"cardData && cardData.length > 0\">\n <div class=\"data-row\">\n <div class=\"data-item\" *ngFor=\"let item of cardData\">\n <div class=\"data-value\">{{ item.value }}</div>\n <div class=\"data-key\">{{ item.key }}</div>\n </div>\n </div>\n </div>\n</div>", styles: [".custom-card{position:relative;border-radius:12px;box-shadow:0 4px 12px #0000001a;overflow:hidden;display:flex;flex-direction:column}.card-image{position:absolute;top:0;left:0;overflow:hidden}.card-image img{width:100%;height:100%;object-fit:cover}.icon-container{position:relative;margin-top:100px;z-index:1}.icon-wrapper{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:background-color .3s ease}.icon-wrapper img{width:32px;height:32px;transition:all .3s ease}.card-content{text-align:center;padding:10px 15px;margin-top:auto}.card-content .card-title{font-size:20px;font-weight:600;margin-bottom:8px}.card-content .card-description{font-size:14px;color:#666;margin-bottom:20px}.card-data{margin-top:auto}.card-data .data-row{display:flex;justify-content:space-between;text-align:center}.card-data .data-item{flex:1;padding:10px}.card-data .data-item .data-value{font-size:22px;font-weight:700}.card-data .data-item .data-key{font-size:14px;color:#666}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
42
+ }
43
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtImageCard, decorators: [{
44
+ type: Component,
45
+ args: [{ selector: 'nxt-image-card', standalone: true, imports: [CommonModule], template: "<div class=\"custom-card\" [style.height]=\"cardHeight\" [style.width]=\"cardWidth\" [style.background-color]=\"cardColor\"\n [style.padding]=\"padding\">\n\n <!-- Background Image -->\n <div class=\"card-image\" *ngIf=\"imageSrc\" [style.height]=\"cardImageHeight\" [style.width]=\"cardImageWidth\"\n [style.background-color]=\"cardImageColor\">\n <img [src]=\"imageSrc\" alt=\"Card background\" [style.padding]=\"imagePadding\"\n [style.border-radius]=\"imageBorderRadius\">\n </div>\n <!-- Icon Container -->\n <div class=\"icon-container d-flex\" [ngClass]=\"getIconPositionClass()\">\n <div class=\"icon-wrapper\" [style.border]=\"'4px solid ' + cardColor\"\n [style.background-color]=\"isHovered ? iconHoverBgColor : iconBgColor\" (mouseenter)=\"onMouseEnter()\"\n (mouseleave)=\"onMouseLeave()\">\n <img [src]=\"isHovered && hoverIconSrc ? hoverIconSrc : iconSrc\" alt=\"Icon\">\n </div>\n </div>\n <!-- Content -->\n <div class=\"card-content\">\n <h2 class=\"card-title\" *ngIf=\"title\">{{ title }}</h2>\n <p class=\"card-description\" *ngIf=\"content\">{{ content }}</p>\n </div>\n\n <!-- Data Points -->\n <div class=\"card-data\" *ngIf=\"cardData && cardData.length > 0\">\n <div class=\"data-row\">\n <div class=\"data-item\" *ngFor=\"let item of cardData\">\n <div class=\"data-value\">{{ item.value }}</div>\n <div class=\"data-key\">{{ item.key }}</div>\n </div>\n </div>\n </div>\n</div>", styles: [".custom-card{position:relative;border-radius:12px;box-shadow:0 4px 12px #0000001a;overflow:hidden;display:flex;flex-direction:column}.card-image{position:absolute;top:0;left:0;overflow:hidden}.card-image img{width:100%;height:100%;object-fit:cover}.icon-container{position:relative;margin-top:100px;z-index:1}.icon-wrapper{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:background-color .3s ease}.icon-wrapper img{width:32px;height:32px;transition:all .3s ease}.card-content{text-align:center;padding:10px 15px;margin-top:auto}.card-content .card-title{font-size:20px;font-weight:600;margin-bottom:8px}.card-content .card-description{font-size:14px;color:#666;margin-bottom:20px}.card-data{margin-top:auto}.card-data .data-row{display:flex;justify-content:space-between;text-align:center}.card-data .data-item{flex:1;padding:10px}.card-data .data-item .data-value{font-size:22px;font-weight:700}.card-data .data-item .data-key{font-size:14px;color:#666}\n"] }]
46
+ }], ctorParameters: () => [], propDecorators: { imageSrc: [{
47
+ type: Input
48
+ }], iconSrc: [{
49
+ type: Input
50
+ }], hoverIconSrc: [{
51
+ type: Input
52
+ }], iconBgColor: [{
53
+ type: Input
54
+ }], iconHoverBgColor: [{
55
+ type: Input
56
+ }], iconPosition: [{
57
+ type: Input
58
+ }], title: [{
59
+ type: Input
60
+ }], content: [{
61
+ type: Input
62
+ }], cardData: [{
63
+ type: Input
64
+ }], cardHeight: [{
65
+ type: Input
66
+ }], cardWidth: [{
67
+ type: Input
68
+ }], cardColor: [{
69
+ type: Input
70
+ }], padding: [{
71
+ type: Input
72
+ }], cardImageHeight: [{
73
+ type: Input
74
+ }], cardImageWidth: [{
75
+ type: Input
76
+ }], cardImageColor: [{
77
+ type: Input
78
+ }], imagePadding: [{
79
+ type: Input
80
+ }], imageBorderRadius: [{
81
+ type: Input
82
+ }] } });
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9jYXJkcy9pbWFnZS1jYXJkL2ltYWdlLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY2FyZHMvaW1hZ2UtY2FyZC9pbWFnZS1jYXJkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBYWpELE1BQU0sT0FBTyxZQUFZO0lBQ2QsUUFBUSxHQUFXLEVBQUUsQ0FBQyxDQUFDLFFBQVE7SUFDL0IsT0FBTyxHQUFXLEVBQUUsQ0FBQyxDQUFDLE9BQU87SUFDN0IsWUFBWSxHQUFXLEVBQUUsQ0FBQyxDQUFDLGFBQWE7SUFDeEMsV0FBVyxHQUFXLFNBQVMsQ0FBQyxDQUFDLHdCQUF3QjtJQUN6RCxnQkFBZ0IsR0FBVyxTQUFTLENBQUMsQ0FBQyw4QkFBOEI7SUFDcEUsWUFBWSxHQUErQixRQUFRLENBQUMsQ0FBQyxnQkFBZ0I7SUFDckUsS0FBSyxHQUFXLEVBQUUsQ0FBQyxDQUFDLFFBQVE7SUFDNUIsT0FBTyxHQUFXLEVBQUUsQ0FBQyxDQUFDLFVBQVU7SUFDaEMsUUFBUSxHQUFlLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QjtJQUNuRCxVQUFVLEdBQVcsTUFBTSxDQUFDLENBQUMsY0FBYztJQUMzQyxTQUFTLEdBQVcsT0FBTyxDQUFDLENBQUMsYUFBYTtJQUMxQyxTQUFTLEdBQVcsT0FBTyxDQUFDLENBQUMsYUFBYTtJQUMxQyxPQUFPLEdBQVcsTUFBTSxDQUFDLENBQUMsVUFBVTtJQUNwQyxlQUFlLEdBQVcsS0FBSyxDQUFDLENBQUMsb0JBQW9CO0lBQ3JELGNBQWMsR0FBVyxNQUFNLENBQUMsQ0FBQyxtQkFBbUI7SUFDcEQsY0FBYyxHQUFXLE1BQU0sQ0FBQyxDQUFDLG1CQUFtQjtJQUNwRCxZQUFZLEdBQVcsTUFBTSxDQUFDLENBQUMsZ0JBQWdCO0lBQy9DLGlCQUFpQixHQUFXLE1BQU0sQ0FBQyxDQUFDLHNCQUFzQjtJQUVuRSxTQUFTLEdBQVksS0FBSyxDQUFDO0lBRTNCLGdCQUFnQixDQUFDO0lBRWpCLFFBQVEsS0FBVyxDQUFDO0lBRXBCLG9CQUFvQjtRQUNsQixRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMxQixLQUFLLE9BQU8sQ0FBQyxDQUFDLE9BQU8sdUJBQXVCLENBQUM7WUFDN0MsS0FBSyxLQUFLLENBQUMsQ0FBQyxPQUFPLHFCQUFxQixDQUFDO1lBQ3pDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sd0JBQXdCLENBQUM7UUFDM0MsQ0FBQztJQUNILENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVELFlBQVk7UUFDVixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO3dHQXhDVSxZQUFZOzRGQUFaLFlBQVksb2tCQ2R6QixnOUNBZ0NNLGdqQ0R0Qk0sWUFBWTs7NEZBSVgsWUFBWTtrQkFQeEIsU0FBUzsrQkFDRSxnQkFBZ0IsY0FDZCxJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUM7d0RBS2QsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW50ZXJmYWNlIENhcmREYXRhIHtcbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ254dC1pbWFnZS1jYXJkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9pbWFnZS1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2ltYWdlLWNhcmQuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgTnh0SW1hZ2VDYXJkIHtcbiAgQElucHV0KCkgaW1hZ2VTcmM6IHN0cmluZyA9ICcnOyAvLyBpbWFnZVxuICBASW5wdXQoKSBpY29uU3JjOiBzdHJpbmcgPSAnJzsgLy8gaWNvblxuICBASW5wdXQoKSBob3Zlckljb25TcmM6IHN0cmluZyA9ICcnOyAvLyBob3ZlciBpY29uXG4gIEBJbnB1dCgpIGljb25CZ0NvbG9yOiBzdHJpbmcgPSAnI2U4ZWFmNic7IC8vIGljb24gYmFja2dyb3VuZCBjb2xvclxuICBASW5wdXQoKSBpY29uSG92ZXJCZ0NvbG9yOiBzdHJpbmcgPSAnI2M1Y2FlOSc7IC8vIGljb24gaG92ZXIgYmFja2dyb3VuZCBjb2xvclxuICBASW5wdXQoKSBpY29uUG9zaXRpb246ICdzdGFydCcgfCAnbWlkZGxlJyB8ICdlbmQnID0gJ21pZGRsZSc7IC8vIGljb24gcG9zaXRpb25cbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9ICcnOyAvLyB0aXRsZVxuICBASW5wdXQoKSBjb250ZW50OiBzdHJpbmcgPSAnJzsgLy8gY29udGVudFxuICBASW5wdXQoKSBjYXJkRGF0YTogQ2FyZERhdGFbXSA9IFtdOyAvLyBjYXJkIGRhdGEoa2V5OiB2YWx1ZSlcbiAgQElucHV0KCkgY2FyZEhlaWdodDogc3RyaW5nID0gJ2F1dG8nOyAvLyBjYXJkIGhlaWdodFxuICBASW5wdXQoKSBjYXJkV2lkdGg6IHN0cmluZyA9ICczMDBweCc7IC8vIGNhcmQgd2lkdGhcbiAgQElucHV0KCkgY2FyZENvbG9yOiBzdHJpbmcgPSAnd2hpdGUnOyAvLyBjYXJkIGNvbG9yXG4gIEBJbnB1dCgpIHBhZGRpbmc6IHN0cmluZyA9ICcyMHB4JzsgLy8gcGFkZGluZ1xuICBASW5wdXQoKSBjYXJkSW1hZ2VIZWlnaHQ6IHN0cmluZyA9ICc0MCUnOyAvLyBjYXJkIGltYWdlIGhlaWdodFxuICBASW5wdXQoKSBjYXJkSW1hZ2VXaWR0aDogc3RyaW5nID0gJzEwMCUnOyAvLyBjYXJkIGltYWdlIHdpZHRoXG4gIEBJbnB1dCgpIGNhcmRJbWFnZUNvbG9yOiBzdHJpbmcgPSAnMTBweCc7IC8vIGNhcmQgaW1hZ2UgY29sb3JcbiAgQElucHV0KCkgaW1hZ2VQYWRkaW5nOiBzdHJpbmcgPSAnMTBweCc7IC8vIGltYWdlIHBhZGRpbmdcbiAgQElucHV0KCkgaW1hZ2VCb3JkZXJSYWRpdXM6IHN0cmluZyA9ICcyNXB4JzsgLy8gaW1hZ2UgYm9yZGVyIHJhZGl1c1xuXG4gIGlzSG92ZXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7IH1cblxuICBnZXRJY29uUG9zaXRpb25DbGFzcygpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5pY29uUG9zaXRpb24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzogcmV0dXJuICdqdXN0aWZ5LWNvbnRlbnQtc3RhcnQnO1xuICAgICAgY2FzZSAnZW5kJzogcmV0dXJuICdqdXN0aWZ5LWNvbnRlbnQtZW5kJztcbiAgICAgIGRlZmF1bHQ6IHJldHVybiAnanVzdGlmeS1jb250ZW50LWNlbnRlcic7XG4gICAgfVxuICB9XG5cbiAgb25Nb3VzZUVudGVyKCk6IHZvaWQge1xuICAgIHRoaXMuaXNIb3ZlcmVkID0gdHJ1ZTtcbiAgfVxuXG4gIG9uTW91c2VMZWF2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzSG92ZXJlZCA9IGZhbHNlO1xuICB9XG59IiwiPGRpdiBjbGFzcz1cImN1c3RvbS1jYXJkXCIgW3N0eWxlLmhlaWdodF09XCJjYXJkSGVpZ2h0XCIgW3N0eWxlLndpZHRoXT1cImNhcmRXaWR0aFwiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImNhcmRDb2xvclwiXG4gIFtzdHlsZS5wYWRkaW5nXT1cInBhZGRpbmdcIj5cblxuICA8IS0tIEJhY2tncm91bmQgSW1hZ2UgLS0+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWltYWdlXCIgKm5nSWY9XCJpbWFnZVNyY1wiIFtzdHlsZS5oZWlnaHRdPVwiY2FyZEltYWdlSGVpZ2h0XCIgW3N0eWxlLndpZHRoXT1cImNhcmRJbWFnZVdpZHRoXCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJjYXJkSW1hZ2VDb2xvclwiPlxuICAgIDxpbWcgW3NyY109XCJpbWFnZVNyY1wiIGFsdD1cIkNhcmQgYmFja2dyb3VuZFwiIFtzdHlsZS5wYWRkaW5nXT1cImltYWdlUGFkZGluZ1wiXG4gICAgICBbc3R5bGUuYm9yZGVyLXJhZGl1c109XCJpbWFnZUJvcmRlclJhZGl1c1wiPlxuICA8L2Rpdj5cbiAgPCEtLSBJY29uIENvbnRhaW5lciAtLT5cbiAgPGRpdiBjbGFzcz1cImljb24tY29udGFpbmVyIGQtZmxleFwiIFtuZ0NsYXNzXT1cImdldEljb25Qb3NpdGlvbkNsYXNzKClcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaWNvbi13cmFwcGVyXCIgW3N0eWxlLmJvcmRlcl09XCInNHB4IHNvbGlkICcgKyBjYXJkQ29sb3JcIlxuICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXNIb3ZlcmVkID8gaWNvbkhvdmVyQmdDb2xvciA6IGljb25CZ0NvbG9yXCIgKG1vdXNlZW50ZXIpPVwib25Nb3VzZUVudGVyKClcIlxuICAgICAgKG1vdXNlbGVhdmUpPVwib25Nb3VzZUxlYXZlKClcIj5cbiAgICAgIDxpbWcgW3NyY109XCJpc0hvdmVyZWQgJiYgaG92ZXJJY29uU3JjID8gaG92ZXJJY29uU3JjIDogaWNvblNyY1wiIGFsdD1cIkljb25cIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDwhLS0gQ29udGVudCAtLT5cbiAgPGRpdiBjbGFzcz1cImNhcmQtY29udGVudFwiPlxuICAgIDxoMiBjbGFzcz1cImNhcmQtdGl0bGVcIiAqbmdJZj1cInRpdGxlXCI+e3sgdGl0bGUgfX08L2gyPlxuICAgIDxwIGNsYXNzPVwiY2FyZC1kZXNjcmlwdGlvblwiICpuZ0lmPVwiY29udGVudFwiPnt7IGNvbnRlbnQgfX08L3A+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRGF0YSBQb2ludHMgLS0+XG4gIDxkaXYgY2xhc3M9XCJjYXJkLWRhdGFcIiAqbmdJZj1cImNhcmREYXRhICYmIGNhcmREYXRhLmxlbmd0aCA+IDBcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGF0YS1yb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXRhLWl0ZW1cIiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjYXJkRGF0YVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0YS12YWx1ZVwiPnt7IGl0ZW0udmFsdWUgfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGEta2V5XCI+e3sgaXRlbS5rZXkgfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -0,0 +1,109 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class NxtInfoCard {
6
+ elementRef;
7
+ title = ''; // title of the card
8
+ value = ''; // value of the card
9
+ description = ''; // description of the card
10
+ content = ''; // content of the card
11
+ imgSrc = 'https://img.icons8.com/material-sharp/24/permanent-job.png'; // image source of the card
12
+ hoverImgSrc = ''; // hover image source of the card
13
+ color = '#ffffff'; // color of the card
14
+ hoverColor = '#f8f9fa'; // hover color of the card
15
+ padding = '20px'; // padding of the card
16
+ isImageRight = false; // whether the image is on the right side of the card
17
+ isImageLeft = true; // whether the image is on the left side of the card
18
+ iconColor = '#f8f9fa'; // color of the icon
19
+ iconHoverColor = '#ffffff'; // hover color of the icon
20
+ isEdit = false; // whether the card is editable
21
+ editConfig = null; // edit config of the card
22
+ buttonClick = new EventEmitter();
23
+ isHovered = false;
24
+ isDropdownOpen = false;
25
+ constructor(elementRef) {
26
+ this.elementRef = elementRef;
27
+ }
28
+ onMouseEnter() {
29
+ this.isHovered = true;
30
+ }
31
+ onMouseLeave() {
32
+ this.isHovered = false;
33
+ }
34
+ getCurrentImgSrc() {
35
+ return this.isHovered && this.hoverImgSrc ? this.hoverImgSrc : this.imgSrc;
36
+ }
37
+ getCurrentBgColor() {
38
+ return this.isHovered ? this.hoverColor : this.color;
39
+ }
40
+ getCurrentIconBgColor() {
41
+ return this.isHovered ? this.iconHoverColor : this.iconColor;
42
+ }
43
+ toggleDropdown() {
44
+ this.isDropdownOpen = !this.isDropdownOpen;
45
+ }
46
+ closeDropdown() {
47
+ this.isDropdownOpen = false;
48
+ }
49
+ onButtonClick(button) {
50
+ const cardData = {
51
+ title: this.title,
52
+ value: this.value,
53
+ description: this.description,
54
+ content: this.content
55
+ };
56
+ this.buttonClick.emit({ button, cardData });
57
+ this.closeDropdown();
58
+ }
59
+ hasEditButtons() {
60
+ return this.isEdit && this.editConfig && this.editConfig.buttons && this.editConfig.buttons.length > 0;
61
+ }
62
+ onClickOutside(event) {
63
+ if (this.isDropdownOpen && !this.elementRef.nativeElement.contains(event.target)) {
64
+ this.isDropdownOpen = false;
65
+ }
66
+ }
67
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtInfoCard, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
68
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NxtInfoCard, isStandalone: true, selector: "nxt-info-card", inputs: { title: "title", value: "value", description: "description", content: "content", imgSrc: "imgSrc", hoverImgSrc: "hoverImgSrc", color: "color", hoverColor: "hoverColor", padding: "padding", isImageRight: "isImageRight", isImageLeft: "isImageLeft", iconColor: "iconColor", iconHoverColor: "iconHoverColor", isEdit: "isEdit", editConfig: "editConfig" }, outputs: { buttonClick: "buttonClick" }, host: { listeners: { "document:click": "onClickOutside($event)" } }, ngImport: i0, template: "<div class=\"workforce-card\" [ngStyle]=\"{'background-color': getCurrentBgColor(), 'padding': padding}\"\n (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\n\n <div class=\"card-content\">\n <!-- Left image -->\n <div *ngIf=\"isImageLeft\" class=\"image-container left-image\"\n [ngStyle]=\"{'background-color': getCurrentIconBgColor()}\">\n <img [src]=\"getCurrentImgSrc()\" alt=\"icon\">\n </div>\n\n <!-- Card text content -->\n <div class=\"text-content\">\n <div class=\"title\">{{ title }}</div>\n <div class=\"value\">{{ value }}</div>\n <div *ngIf=\"description\" class=\"description\">{{ description }}</div>\n <div *ngIf=\"content\" class=\"additional-content\">{{ content }}</div>\n </div>\n\n <!-- Right image -->\n <div *ngIf=\"isImageRight\" class=\"image-container right-image\"\n [ngStyle]=\"{'background-color': getCurrentIconBgColor()}\">\n <img [src]=\"getCurrentImgSrc()\" alt=\"icon\">\n </div>\n\n <!-- Edit button -->\n <div *ngIf=\"isEdit\" class=\"edit-button\" (click)=\"toggleDropdown(); $event.stopPropagation()\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" stroke=\"#bababa\">\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\n <g id=\"SVGRepo_iconCarrier\">\n <path\n d=\"M13 5C13 4.44772 12.5523 4 12 4C11.4477 4 11 4.44772 11 5C11 5.55228 11.4477 6 12 6C12.5523 6 13 5.55228 13 5Z\"\n stroke=\"#d4d4d4\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <path\n d=\"M13 12C13 11.4477 12.5523 11 12 11C11.4477 11 11 11.4477 11 12C11 12.5523 11.4477 13 12 13C12.5523 13 13 12.5523 13 12Z\"\n stroke=\"#d4d4d4\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <path\n d=\"M13 19C13 18.4477 12.5523 18 12 18C11.4477 18 11 18.4477 11 19C11 19.5523 11.4477 20 12 20C12.5523 20 13 19.5523 13 19Z\"\n stroke=\"#d4d4d4\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </g>\n </svg>\n </div>\n <!-- Dropdown menu -->\n <div *ngIf=\"isDropdownOpen\" class=\"edit-dropdown-menu show\">\n <div *ngFor=\"let button of editConfig.buttons\" class=\"edit-dropdown-item\" (click)=\"onButtonClick(button)\">\n <div class=\"dropdown-button-content\">\n <img *ngIf=\"button.isImageSvg && button.iconSrc\" [src]=\"button.iconSrc\" alt=\"icon\" class=\"button-icon\">\n <span class=\"button-name\">{{ button.name }}</span>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".workforce-card{border-radius:8px;box-shadow:0 2px 8px #0000001a;transition:all .3s ease;display:flex;align-items:center;position:relative;width:100%;max-width:300px;box-sizing:border-box}.card-content{display:flex;align-items:flex-start;width:100%;position:relative}.image-container{display:flex;align-items:center;justify-content:center;border-radius:50%;width:48px;height:48px;flex-shrink:0}.image-container img{width:24px;height:24px;object-fit:contain}.left-image{margin-right:16px;margin-top:4px}.right-image{margin-left:16px;margin-top:4px}.text-content{flex-grow:1;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;-webkit-hyphens:auto;hyphens:auto}.title{color:#6c757d;font-size:14px;margin-bottom:4px}.value{color:#192656;font-size:24px;font-weight:700;line-height:1.2}.description{color:#6c757d;font-size:12px;margin-top:4px}.additional-content{margin-top:8px;font-size:14px;line-height:1.4}.edit-button{position:absolute;top:-9px;right:-16px;cursor:pointer;color:#6c757d;display:flex;align-items:center;justify-content:center;width:24px;height:24px;background-color:#fff;border-radius:15px;padding:2px}.edit-button:hover{color:#000;background-color:#f4f4f4}.edit-dropdown-menu{position:absolute;top:18%;right:0;z-index:1000;min-width:80px;max-height:75px;background-color:#fff;overflow-y:auto;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px #0000002d}.edit-dropdown-item{display:block;width:100%;padding:8px 16px;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0;cursor:pointer}.edit-dropdown-item:is(:hover,:focus){color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-button-content{display:flex;align-items:center;gap:8px}.button-icon{width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center}.button-icon ::ng-deep svg{width:20px;height:20px}.button-name{font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
69
+ }
70
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtInfoCard, decorators: [{
71
+ type: Component,
72
+ args: [{ selector: 'nxt-info-card', standalone: true, imports: [CommonModule], template: "<div class=\"workforce-card\" [ngStyle]=\"{'background-color': getCurrentBgColor(), 'padding': padding}\"\n (mouseenter)=\"onMouseEnter()\" (mouseleave)=\"onMouseLeave()\">\n\n <div class=\"card-content\">\n <!-- Left image -->\n <div *ngIf=\"isImageLeft\" class=\"image-container left-image\"\n [ngStyle]=\"{'background-color': getCurrentIconBgColor()}\">\n <img [src]=\"getCurrentImgSrc()\" alt=\"icon\">\n </div>\n\n <!-- Card text content -->\n <div class=\"text-content\">\n <div class=\"title\">{{ title }}</div>\n <div class=\"value\">{{ value }}</div>\n <div *ngIf=\"description\" class=\"description\">{{ description }}</div>\n <div *ngIf=\"content\" class=\"additional-content\">{{ content }}</div>\n </div>\n\n <!-- Right image -->\n <div *ngIf=\"isImageRight\" class=\"image-container right-image\"\n [ngStyle]=\"{'background-color': getCurrentIconBgColor()}\">\n <img [src]=\"getCurrentImgSrc()\" alt=\"icon\">\n </div>\n\n <!-- Edit button -->\n <div *ngIf=\"isEdit\" class=\"edit-button\" (click)=\"toggleDropdown(); $event.stopPropagation()\">\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" stroke=\"#bababa\">\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\n <g id=\"SVGRepo_iconCarrier\">\n <path\n d=\"M13 5C13 4.44772 12.5523 4 12 4C11.4477 4 11 4.44772 11 5C11 5.55228 11.4477 6 12 6C12.5523 6 13 5.55228 13 5Z\"\n stroke=\"#d4d4d4\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <path\n d=\"M13 12C13 11.4477 12.5523 11 12 11C11.4477 11 11 11.4477 11 12C11 12.5523 11.4477 13 12 13C12.5523 13 13 12.5523 13 12Z\"\n stroke=\"#d4d4d4\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n <path\n d=\"M13 19C13 18.4477 12.5523 18 12 18C11.4477 18 11 18.4477 11 19C11 19.5523 11.4477 20 12 20C12.5523 20 13 19.5523 13 19Z\"\n stroke=\"#d4d4d4\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\n </g>\n </svg>\n </div>\n <!-- Dropdown menu -->\n <div *ngIf=\"isDropdownOpen\" class=\"edit-dropdown-menu show\">\n <div *ngFor=\"let button of editConfig.buttons\" class=\"edit-dropdown-item\" (click)=\"onButtonClick(button)\">\n <div class=\"dropdown-button-content\">\n <img *ngIf=\"button.isImageSvg && button.iconSrc\" [src]=\"button.iconSrc\" alt=\"icon\" class=\"button-icon\">\n <span class=\"button-name\">{{ button.name }}</span>\n </div>\n </div>\n </div>\n </div>\n</div>", styles: [".workforce-card{border-radius:8px;box-shadow:0 2px 8px #0000001a;transition:all .3s ease;display:flex;align-items:center;position:relative;width:100%;max-width:300px;box-sizing:border-box}.card-content{display:flex;align-items:flex-start;width:100%;position:relative}.image-container{display:flex;align-items:center;justify-content:center;border-radius:50%;width:48px;height:48px;flex-shrink:0}.image-container img{width:24px;height:24px;object-fit:contain}.left-image{margin-right:16px;margin-top:4px}.right-image{margin-left:16px;margin-top:4px}.text-content{flex-grow:1;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;-webkit-hyphens:auto;hyphens:auto}.title{color:#6c757d;font-size:14px;margin-bottom:4px}.value{color:#192656;font-size:24px;font-weight:700;line-height:1.2}.description{color:#6c757d;font-size:12px;margin-top:4px}.additional-content{margin-top:8px;font-size:14px;line-height:1.4}.edit-button{position:absolute;top:-9px;right:-16px;cursor:pointer;color:#6c757d;display:flex;align-items:center;justify-content:center;width:24px;height:24px;background-color:#fff;border-radius:15px;padding:2px}.edit-button:hover{color:#000;background-color:#f4f4f4}.edit-dropdown-menu{position:absolute;top:18%;right:0;z-index:1000;min-width:80px;max-height:75px;background-color:#fff;overflow-y:auto;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px #0000002d}.edit-dropdown-item{display:block;width:100%;padding:8px 16px;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0;cursor:pointer}.edit-dropdown-item:is(:hover,:focus){color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-button-content{display:flex;align-items:center;gap:8px}.button-icon{width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center}.button-icon ::ng-deep svg{width:20px;height:20px}.button-name{font-size:14px}\n"] }]
73
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { title: [{
74
+ type: Input
75
+ }], value: [{
76
+ type: Input
77
+ }], description: [{
78
+ type: Input
79
+ }], content: [{
80
+ type: Input
81
+ }], imgSrc: [{
82
+ type: Input
83
+ }], hoverImgSrc: [{
84
+ type: Input
85
+ }], color: [{
86
+ type: Input
87
+ }], hoverColor: [{
88
+ type: Input
89
+ }], padding: [{
90
+ type: Input
91
+ }], isImageRight: [{
92
+ type: Input
93
+ }], isImageLeft: [{
94
+ type: Input
95
+ }], iconColor: [{
96
+ type: Input
97
+ }], iconHoverColor: [{
98
+ type: Input
99
+ }], isEdit: [{
100
+ type: Input
101
+ }], editConfig: [{
102
+ type: Input
103
+ }], buttonClick: [{
104
+ type: Output
105
+ }], onClickOutside: [{
106
+ type: HostListener,
107
+ args: ['document:click', ['$event']]
108
+ }] } });
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mby1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2NhcmRzL2luZm8tY2FyZC9pbmZvLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY2FyZHMvaW5mby1jYXJkL2luZm8tY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQVNqRyxNQUFNLE9BQU8sV0FBVztJQTJCRjtJQTFCWCxLQUFLLEdBQVcsRUFBRSxDQUFDLENBQUMsb0JBQW9CO0lBQ3hDLEtBQUssR0FBb0IsRUFBRSxDQUFDLENBQUMsb0JBQW9CO0lBQ2pELFdBQVcsR0FBVyxFQUFFLENBQUMsQ0FBQywwQkFBMEI7SUFDcEQsT0FBTyxHQUFXLEVBQUUsQ0FBQyxDQUFDLHNCQUFzQjtJQUU1QyxNQUFNLEdBQVcsNERBQTRELENBQUMsQ0FBRSwyQkFBMkI7SUFDM0csV0FBVyxHQUFXLEVBQUUsQ0FBQyxDQUFDLGlDQUFpQztJQUUzRCxLQUFLLEdBQVcsU0FBUyxDQUFDLENBQUMsb0JBQW9CO0lBQy9DLFVBQVUsR0FBVyxTQUFTLENBQUMsQ0FBQywwQkFBMEI7SUFDMUQsT0FBTyxHQUFXLE1BQU0sQ0FBQyxDQUFDLHNCQUFzQjtJQUVoRCxZQUFZLEdBQVksS0FBSyxDQUFDLENBQUMscURBQXFEO0lBQ3BGLFdBQVcsR0FBWSxJQUFJLENBQUMsQ0FBQyxvREFBb0Q7SUFDakYsU0FBUyxHQUFXLFNBQVMsQ0FBQyxDQUFDLG9C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SztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBZ0RQLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ254dC1pbmZvLWNhcmQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2luZm8tY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9pbmZvLWNhcmQuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgTnh0SW5mb0NhcmQge1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gJyc7IC8vIHRpdGxlIG9mIHRoZSBjYXJkXG4gIEBJbnB1dCgpIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgPSAnJzsgLy8gdmFsdWUgb2YgdGhlIGNhcmRcbiAgQElucHV0KCkgZGVzY3JpcHRpb246IHN0cmluZyA9ICcnOyAvLyBkZXNjcmlwdGlvbiBvZiB0aGUgY2FyZFxuICBASW5wdXQoKSBjb250ZW50OiBzdHJpbmcgPSAnJzsgLy8gY29udGVudCBvZiB0aGUgY2FyZFxuXG4gIEBJbnB1dCgpIGltZ1NyYzogc3RyaW5nID0gJ2h0dHBzOi8vaW1nLmljb25zOC5jb20vbWF0ZXJpYWwtc2hhcnAvMjQvcGVybWFuZW50LWpvYi5wbmcnOyAgLy8gaW1hZ2Ugc291cmNlIG9mIHRoZSBjYXJkXG4gIEBJbnB1dCgpIGhvdmVySW1nU3JjOiBzdHJpbmcgPSAnJzsgLy8gaG92ZXIgaW1hZ2Ugc291cmNlIG9mIHRoZSBjYXJkXG5cbiAgQElucHV0KCkgY29sb3I6IHN0cmluZyA9ICcjZmZmZmZmJzsgLy8gY29sb3Igb2YgdGhlIGNhcmRcbiAgQElucHV0KCkgaG92ZXJDb2xvcjogc3RyaW5nID0gJyNmOGY5ZmEnOyAvLyBob3ZlciBjb2xvciBvZiB0aGUgY2FyZFxuICBASW5wdXQoKSBwYWRkaW5nOiBzdHJpbmcgPSAnMjBweCc7IC8vIHBhZGRpbmcgb2YgdGhlIGNhcmRcblxuICBASW5wdXQoKSBpc0ltYWdlUmlnaHQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gd2hldGhlciB0aGUgaW1hZ2UgaXMgb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGNhcmRcbiAgQElucHV0KCkgaXNJbWFnZUxlZnQ6IGJvb2xlYW4gPSB0cnVlOyAvLyB3aGV0aGVyIHRoZSBpbWFnZSBpcyBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBjYXJkXG4gIEBJbnB1dCgpIGljb25Db2xvcjogc3RyaW5nID0gJyNmOGY5ZmEnOyAvLyBjb2xvciBvZiB0aGUgaWNvblxuICBASW5wdXQoKSBpY29uSG92ZXJDb2xvcjogc3RyaW5nID0gJyNmZmZmZmYnOyAvLyBob3ZlciBjb2xvciBvZiB0aGUgaWNvblxuXG5cbiAgQElucHV0KCkgaXNFZGl0OiBib29sZWFuID0gZmFsc2U7IC8vIHdoZXRoZXIgdGhlIGNhcmQgaXMgZWRpdGFibGVcbiAgQElucHV0KCkgZWRpdENvbmZpZzogYW55ID0gbnVsbDsgLy8gZWRpdCBjb25maWcgb2YgdGhlIGNhcmRcblxuICBAT3V0cHV0KCkgYnV0dG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHsgYnV0dG9uOiBhbnksIGNhcmREYXRhOiBhbnkgfT4oKTtcblxuICBpc0hvdmVyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNEcm9wZG93bk9wZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHsgfVxuICBvbk1vdXNlRW50ZXIoKSB7XG4gICAgdGhpcy5pc0hvdmVyZWQgPSB0cnVlO1xuICB9XG5cbiAgb25Nb3VzZUxlYXZlKCkge1xuICAgIHRoaXMuaXNIb3ZlcmVkID0gZmFsc2U7XG4gIH1cblxuXG4gIGdldEN1cnJlbnRJbWdTcmMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc0hvdmVyZWQgJiYgdGhpcy5ob3ZlckltZ1NyYyA/IHRoaXMuaG92ZXJJbWdTcmMgOiB0aGlzLmltZ1NyYztcbiAgfVxuXG4gIGdldEN1cnJlbnRCZ0NvbG9yKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNIb3ZlcmVkID8gdGhpcy5ob3ZlckNvbG9yIDogdGhpcy5jb2xvcjtcbiAgfVxuICBnZXRDdXJyZW50SWNvbkJnQ29sb3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc0hvdmVyZWQgPyB0aGlzLmljb25Ib3ZlckNvbG9yIDogdGhpcy5pY29uQ29sb3I7XG4gIH1cbiAgdG9nZ2xlRHJvcGRvd24oKSB7XG4gICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiA9ICF0aGlzLmlzRHJvcGRvd25PcGVuO1xuICB9XG5cbiAgY2xvc2VEcm9wZG93bigpIHtcbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuID0gZmFsc2U7XG4gIH1cblxuICBvbkJ1dHRvbkNsaWNrKGJ1dHRvbjogYW55KSB7XG4gICAgY29uc3QgY2FyZERhdGEgPSB7XG4gICAgICB0aXRsZTogdGhpcy50aXRsZSxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBjb250ZW50OiB0aGlzLmNvbnRlbnRcbiAgICB9O1xuXG4gICAgdGhpcy5idXR0b25DbGljay5lbWl0KHsgYnV0dG9uLCBjYXJkRGF0YSB9KTtcbiAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgfVxuICBoYXNFZGl0QnV0dG9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VkaXQgJiYgdGhpcy5lZGl0Q29uZmlnICYmIHRoaXMuZWRpdENvbmZpZy5idXR0b25zICYmIHRoaXMuZWRpdENvbmZpZy5idXR0b25zLmxlbmd0aCA+IDA7XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBvbkNsaWNrT3V0c2lkZShldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLmlzRHJvcGRvd25PcGVuICYmICF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgKSB7XG4gICAgICB0aGlzLmlzRHJvcGRvd25PcGVuID0gZmFsc2U7XG4gICAgfVxuICB9XG59IiwiPGRpdiBjbGFzcz1cIndvcmtmb3JjZS1jYXJkXCIgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kLWNvbG9yJzogZ2V0Q3VycmVudEJnQ29sb3IoKSwgJ3BhZGRpbmcnOiBwYWRkaW5nfVwiXG4gIChtb3VzZWVudGVyKT1cIm9uTW91c2VFbnRlcigpXCIgKG1vdXNlbGVhdmUpPVwib25Nb3VzZUxlYXZlKClcIj5cblxuICA8ZGl2IGNsYXNzPVwiY2FyZC1jb250ZW50XCI+XG4gICAgPCEtLSBMZWZ0IGltYWdlIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJpc0ltYWdlTGVmdFwiIGNsYXNzPVwiaW1hZ2UtY29udGFpbmVyIGxlZnQtaW1hZ2VcIlxuICAgICAgW25nU3R5bGVdPVwieydiYWNrZ3JvdW5kLWNvbG9yJzogZ2V0Q3VycmVudEljb25CZ0NvbG9yKCl9XCI+XG4gICAgICA8aW1nIFtzcmNdPVwiZ2V0Q3VycmVudEltZ1NyYygpXCIgYWx0PVwiaWNvblwiPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBDYXJkIHRleHQgY29udGVudCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jb250ZW50XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57eyB0aXRsZSB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInZhbHVlXCI+e3sgdmFsdWUgfX08L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJkZXNjcmlwdGlvblwiIGNsYXNzPVwiZGVzY3JpcHRpb25cIj57eyBkZXNjcmlwdGlvbiB9fTwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj1cImNvbnRlbnRcIiBjbGFzcz1cImFkZGl0aW9uYWwtY29udGVudFwiPnt7IGNvbnRlbnQgfX08L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmlnaHQgaW1hZ2UgLS0+XG4gICAgPGRpdiAqbmdJZj1cImlzSW1hZ2VSaWdodFwiIGNsYXNzPVwiaW1hZ2UtY29udGFpbmVyIHJpZ2h0LWltYWdlXCJcbiAgICAgIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1jb2xvcic6IGdldEN1cnJlbnRJY29uQmdDb2xvcigpfVwiPlxuICAgICAgPGltZyBbc3JjXT1cImdldEN1cnJlbnRJbWdTcmMoKVwiIGFsdD1cImljb25cIj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRWRpdCBidXR0b24gLS0+XG4gICAgPGRpdiAqbmdJZj1cImlzRWRpdFwiIGNsYXNzPVwiZWRpdC1idXR0b25cIiAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBzdHJva2U9XCIjYmFiYWJhXCI+XG4gICAgICAgIDxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPlxuICAgICAgICA8ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz5cbiAgICAgICAgPGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGQ9XCJNMTMgNUMxMyA0LjQ0NzcyIDEyLjU1MjMgNCAxMiA0QzExLjQ0NzcgNCAxMSA0LjQ0NzcyIDExIDVDMTEgNS41NTIyOCAxMS40NDc3IDYgMTIgNkMxMi41NTIzIDYgMTMgNS41NTIyOCAxMyA1WlwiXG4gICAgICAgICAgICBzdHJva2U9XCIjZDRkNGQ0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cbiAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgZD1cIk0xMyAxMkMxMyAxMS40NDc3IDEyLjU1MjMgMTEgMTIgMTFDMTEuNDQ3NyAxMSAxMSAxMS40NDc3IDExIDEyQzExIDEyLjU1MjMgMTEuNDQ3NyAxMyAxMiAxM0MxMi41NTIzIDEzIDEzIDEyLjU1MjMgMTMgMTJaXCJcbiAgICAgICAgICAgIHN0cm9rZT1cIiNkNGQ0ZDRcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBkPVwiTTEzIDE5QzEzIDE4LjQ0NzcgMTIuNTUyMyAxOCAxMiAxOEMxMS40NDc3IDE4IDExIDE4LjQ0NzcgMTEgMTlDMTEgMTkuNTUyMyAxMS40NDc3IDIwIDEyIDIwQzEyLjU1MjMgMjAgMTMgMTkuNTUyMyAxMyAxOVpcIlxuICAgICAgICAgICAgc3Ryb2tlPVwiI2Q0ZDRkNFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XG4gICAgICAgIDwvZz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gRHJvcGRvd24gbWVudSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNEcm9wZG93bk9wZW5cIiBjbGFzcz1cImVkaXQtZHJvcGRvd24tbWVudSBzaG93XCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZWRpdENvbmZpZy5idXR0b25zXCIgY2xhc3M9XCJlZGl0LWRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwib25CdXR0b25DbGljayhidXR0b24pXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1idXR0b24tY29udGVudFwiPlxuICAgICAgICAgIDxpbWcgKm5nSWY9XCJidXR0b24uaXNJbWFnZVN2ZyAmJiBidXR0b24uaWNvblNyY1wiIFtzcmNdPVwiYnV0dG9uLmljb25TcmNcIiBhbHQ9XCJpY29uXCIgY2xhc3M9XCJidXR0b24taWNvblwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uLW5hbWVcIj57eyBidXR0b24ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=