commons-shared-web-ui 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { NgModule, EventEmitter, Output, Input, Component, HostListener, forwardRef
|
|
2
|
+
import { NgModule, EventEmitter, Output, Input, Component, HostListener, forwardRef } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
5
|
import { MatCardModule } from '@angular/material/card';
|
|
@@ -911,11 +911,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
911
911
|
|
|
912
912
|
class SummaryCardComponent {
|
|
913
913
|
config;
|
|
914
|
-
theme
|
|
914
|
+
theme;
|
|
915
915
|
cardClick = new EventEmitter();
|
|
916
|
-
get hostClasses() {
|
|
917
|
-
return `${this.theme} ${this.config?.isDisabled ? 'disabled' : ''} ${this.config?.isClickable !== false && !this.config?.isDisabled ? 'clickable' : ''}`;
|
|
918
|
-
}
|
|
919
916
|
constructor() { }
|
|
920
917
|
onCardClick() {
|
|
921
918
|
if (this.config?.isDisabled || this.config?.isClickable === false) {
|
|
@@ -974,7 +971,7 @@ class SummaryCardComponent {
|
|
|
974
971
|
return styles;
|
|
975
972
|
}
|
|
976
973
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SummaryCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
977
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: SummaryCardComponent, isStandalone: false, selector: "lib-summary-card", inputs: { config: "config", theme: "theme" }, outputs: { cardClick: "cardClick" },
|
|
974
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: SummaryCardComponent, isStandalone: false, selector: "lib-summary-card", inputs: { config: "config", theme: "theme" }, outputs: { cardClick: "cardClick" }, ngImport: i0, template: "<div class=\"cc-summary-card\" (click)=\"onCardClick()\">\r\n <!-- Icon Section (Left Side) -->\r\n <div class=\"icon-section\" *ngIf=\"config.icon || config.iconImage\" [ngClass]=\"config.iconClass\"\r\n [ngStyle]=\"iconStyles\">\r\n <mat-icon *ngIf=\"config.icon\">{{ config.icon }}</mat-icon>\r\n <img *ngIf=\"!config.icon && config.iconImage\" [src]=\"config.iconImage\" alt=\"icon\">\r\n </div>\r\n\r\n <!-- Right Section (Header + Value/Meta) -->\r\n <div class=\"right-section\">\r\n <!-- Header (Full Width on Right) -->\r\n <div class=\"header\" [ngClass]=\"config.headerClass\" [ngStyle]=\"headerStyles\">\r\n {{ config.header }}\r\n </div>\r\n\r\n <!-- Value and Meta Row -->\r\n <div class=\"value-meta-row\">\r\n <!-- Content Section -->\r\n <div class=\"content-section\">\r\n <!-- Value Row (with optional inline description) -->\r\n <div class=\"value-row\" [class.inline-layout]=\"isDescriptionInline\">\r\n <div class=\"value-container\">\r\n <div class=\"value\" [ngClass]=\"config.valueClass\" [ngStyle]=\"valueStyles\">\r\n {{ config.value }}\r\n <span *ngIf=\"config.valueSubtext\" class=\"value-subtext\">{{ config.valueSubtext }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Description (inline or bottom based on config) -->\r\n <div class=\"description\" *ngIf=\"config.description\" [ngClass]=\"config.descriptionClass\"\r\n [ngStyle]=\"descriptionStyles\">\r\n {{ config.description }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Meta/Status Section (Aligned with Value) -->\r\n <div class=\"meta-section\" *ngIf=\"config.metaData && config.metaData.length > 0\">\r\n <div *ngFor=\"let meta of config.metaData\" class=\"meta-item\"\r\n [ngClass]=\"[meta.type === 'pill' ? 'meta-pill' : 'meta-text', meta.cssClass || '']\"\r\n [ngStyle]=\"getMetaStyles(meta)\">\r\n {{ meta.text }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [":host{display:block;width:100%}.cc-summary-card{display:flex;flex-direction:row;align-items:stretch;box-sizing:border-box;font-family:var(--cc-sc-font-family, \"Inter\", sans-serif);background-color:var(--cc-sc-bg-color, #ffffff);border-radius:var(--cc-sc-border-radius, 8px);border:var(--cc-sc-border, 1px solid #e0e0e0);padding:var(--cc-sc-padding, 16px);box-shadow:var(--cc-sc-shadow, 0 2px 4px rgba(0, 0, 0, .05));transition:all var(--cc-sc-transition-duration, .2s) ease;height:100%;width:100%;overflow:hidden;gap:var(--cc-sc-icon-margin, 1rem)}.cc-summary-card.clickable{cursor:pointer}.cc-summary-card.clickable:hover{transform:var(--cc-sc-hover-transform);box-shadow:var(--cc-sc-hover-shadow)}.cc-summary-card.disabled{opacity:var(--cc-sc-disabled-opacity);cursor:not-allowed;pointer-events:none}.cc-summary-card .icon-section{width:var(--cc-sc-icon-box-size);height:var(--cc-sc-icon-box-size);min-width:var(--cc-sc-icon-box-size);display:flex;align-items:center;justify-content:center;border-radius:var(--cc-sc-icon-radius);background-color:var(--cc-sc-icon-bg);color:var(--cc-sc-icon-color);flex-shrink:0;align-self:center}.cc-summary-card .icon-section mat-icon{width:var(--cc-sc-icon-size);height:var(--cc-sc-icon-size);font-size:var(--cc-sc-icon-size);line-height:var(--cc-sc-icon-size)}.cc-summary-card .icon-section img{width:var(--cc-sc-icon-size);height:var(--cc-sc-icon-size);object-fit:contain}.cc-summary-card .right-section{display:flex;flex-direction:column;flex:1;min-width:0;gap:var(--cc-sc-content-gap, .5rem)}.cc-summary-card .right-section .header{font-size:var(--cc-sc-header-size);font-weight:var(--cc-sc-header-weight);text-transform:var(--cc-sc-header-transform);color:var(--cc-sc-header-color);letter-spacing:var(--cc-sc-header-letter-spacing);line-height:var(--cc-sc-header-line-height);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%}.cc-summary-card .right-section .value-meta-row{display:flex;flex-direction:row;align-items:flex-start;justify-content:space-between;gap:1rem;flex:1}.cc-summary-card .right-section .value-meta-row .content-section{display:flex;flex-direction:column;justify-content:flex-start;flex:1;min-width:0}.cc-summary-card .right-section .value-meta-row .content-section .value-row{display:flex;flex-direction:column;gap:var(--cc-sc-value-desc-gap)}.cc-summary-card .right-section .value-meta-row .content-section .value-row.inline-layout{flex-direction:row;align-items:baseline;flex-wrap:wrap}.cc-summary-card .right-section .value-meta-row .content-section .value-row .value{font-size:var(--cc-sc-value-size);font-weight:var(--cc-sc-value-weight);color:var(--cc-sc-value-color);line-height:var(--cc-sc-value-line-height);white-space:nowrap}.cc-summary-card .right-section .value-meta-row .content-section .value-row .value .value-subtext{font-size:var(--cc-sc-desc-size);font-weight:var(--cc-sc-desc-weight);color:var(--cc-sc-desc-color);margin-left:4px}.cc-summary-card .right-section .value-meta-row .content-section .value-row .description{font-size:var(--cc-sc-desc-size);font-weight:var(--cc-sc-desc-weight);color:var(--cc-sc-desc-color);line-height:var(--cc-sc-desc-line-height)}.cc-summary-card .right-section .value-meta-row .meta-section{display:flex;flex-direction:column;align-items:flex-end;justify-content:flex-start;flex-shrink:0;gap:6px}.cc-summary-card .right-section .value-meta-row .meta-section .meta-item{font-size:.8125rem;line-height:1.4;white-space:nowrap;text-align:right;flex-shrink:0}.cc-summary-card .right-section .value-meta-row .meta-section .meta-item.meta-text{color:var(--cc-sc-desc-color, #64748b);font-weight:500}.cc-summary-card .right-section .value-meta-row .meta-section .meta-item.meta-pill{display:inline-flex;align-items:center;justify-content:center;padding:var(--cc-sc-meta-pill-padding, 4px 12px);border-radius:var(--cc-sc-meta-pill-radius, 20px);font-size:var(--cc-sc-meta-pill-font-size, .75rem);font-weight:var(--cc-sc-meta-pill-font-weight, 600);line-height:1.2;background-color:var(--cc-sc-meta-pill-bg, #f1f5f9);color:var(--cc-sc-meta-pill-color, #475569)}@media(max-width:600px){.cc-summary-card .icon-section{margin-right:var(--cc-sc-icon-margin-mobile, .75rem)}.cc-summary-card .content-section .header{font-size:var(--cc-sc-header-size-mobile, .7rem)}.cc-summary-card .content-section .value-row .value{font-size:var(--cc-sc-value-size-mobile, 1.25rem)}.cc-summary-card .content-section .value-row .description{font-size:var(--cc-sc-desc-size-mobile, .7rem)}}\n"], dependencies: [{ 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"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
|
978
975
|
}
|
|
979
976
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: SummaryCardComponent, decorators: [{
|
|
980
977
|
type: Component,
|
|
@@ -985,9 +982,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
985
982
|
type: Input
|
|
986
983
|
}], cardClick: [{
|
|
987
984
|
type: Output
|
|
988
|
-
}], hostClasses: [{
|
|
989
|
-
type: HostBinding,
|
|
990
|
-
args: ['class']
|
|
991
985
|
}] } });
|
|
992
986
|
|
|
993
987
|
class SummaryCardModule {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commons-shared-web-ui.mjs","sources":["../../../src/lib/modules/material/material.module.ts","../../../src/lib/modules/cards/components/card-type-1/card-type-1.component.ts","../../../src/lib/modules/cards/components/card-type-1/card-type-1.component.html","../../../src/lib/modules/cards/components/card-type-2/card-type-2.component.ts","../../../src/lib/modules/cards/components/card-type-2/card-type-2.component.html","../../../src/lib/modules/cards/cards.module.ts","../../../src/lib/modules/alert/components/alert/alert.component.ts","../../../src/lib/modules/alert/components/alert/alert.component.html","../../../src/lib/modules/alert/alert.module.ts","../../../src/lib/modules/button/components/button/button.component.ts","../../../src/lib/modules/button/components/button/button.component.html","../../../src/lib/modules/button/button.module.ts","../../../src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.ts","../../../src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.html","../../../src/lib/modules/confirmation-modal/confirmation-modal.module.ts","../../../src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.ts","../../../src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.html","../../../src/lib/modules/filter-sidebar/filter-sidebar.module.ts","../../../src/lib/modules/summary-card/components/summary-card/summary-card.component.ts","../../../src/lib/modules/summary-card/components/summary-card/summary-card.component.html","../../../src/lib/modules/summary-card/summary-card.module.ts","../../../src/lib/modules/configurable-form/component/configurable-form.component.ts","../../../src/lib/modules/configurable-form/component/configurable-form.component.html","../../../src/lib/modules/configurable-form/configurable-form.module.ts","../../../src/lib/shared-ui.module.ts","../../../src/lib/utils/storage.utils.ts","../../../src/lib/modules/configurable-form/configurable-form.examples.ts","../../../src/lib/utils/constants.ts","../../../src/lib/modules/pagination/components/pagination/pagination.component.ts","../../../src/lib/modules/pagination/components/pagination/pagination.component.html","../../../src/lib/modules/pagination/pagination.module.ts","../../../src/lib/modules/nav/components/nav/nav.component.ts","../../../src/lib/modules/nav/components/nav/nav.component.html","../../../src/lib/modules/nav/nav.module.ts","../../../src/public-api.ts","../../../src/commons-shared-web-ui.ts"],"sourcesContent":["import { NgModule } from \"@angular/core\";\nimport { MatCardModule } from '@angular/material/card';\nimport { MatSnackBarModule } from \"@angular/material/snack-bar\";\nimport { MatCheckboxModule } from '@angular/material/checkbox'\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatDialogModule } from \"@angular/material/dialog\";\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatNativeDateModule } from \"@angular/material/core\";\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport {MatSliderModule} from '@angular/material/slider';\nimport {MatListModule} from '@angular/material/list';\nimport {MatChipsModule} from '@angular/material/chips';\nimport {MatPaginatorModule} from '@angular/material/paginator';\nimport {MatTableModule} from '@angular/material/table';\nimport {MatExpansionModule} from '@angular/material/expansion';\nimport {CdkAccordionModule} from '@angular/cdk/accordion';\nimport { MatSortModule } from \"@angular/material/sort\";\nimport {MatAutocompleteModule} from '@angular/material/autocomplete';\nimport {MatSlideToggleModule} from '@angular/material/slide-toggle';\nimport {MatButtonToggleModule} from '@angular/material/button-toggle';\n\n@NgModule({\n imports: [\n MatCardModule,\n MatSnackBarModule,\n MatCheckboxModule,\n MatDividerModule,\n MatSelectModule,\n MatRadioModule,\n MatDialogModule,\n MatFormFieldModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatInputModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatTabsModule,\n MatButtonModule,\n MatMenuModule,\n MatTabsModule,\n MatProgressBarModule,\n MatTooltipModule,\n MatSliderModule,\n MatListModule,\n MatChipsModule,\n MatSortModule,\n MatAutocompleteModule,\n MatSlideToggleModule,\n MatButtonToggleModule\n ],\n exports: [\n MatCardModule,\n MatSnackBarModule,\n MatCheckboxModule,\n MatDividerModule,\n MatSelectModule,\n MatRadioModule,\n MatDialogModule,\n MatFormFieldModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatInputModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatTabsModule,\n MatButtonModule,\n MatMenuModule,\n MatTabsModule,\n MatProgressBarModule,\n MatTooltipModule,\n MatSliderModule,\n MatListModule,\n MatChipsModule,\n MatPaginatorModule,\n MatTableModule,\n MatExpansionModule,\n CdkAccordionModule,\n MatSortModule,\n MatAutocompleteModule,\n MatSlideToggleModule,\n MatButtonToggleModule\n ]\n})\nexport class MaterialModule { }\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CardType1Config } from '../../cards.models';\n\n@Component({\n selector: 'lib-card-type-1',\n templateUrl: './card-type-1.component.html',\n styleUrls: ['./card-type-1.component.scss'],\n standalone: false\n})\nexport class CardType1Component {\n @Input() config!: CardType1Config;\n @Input() theme: 'theme-1' | 'theme-2' = 'theme-1';\n @Output() cardClick = new EventEmitter<void>();\n\n get valueStyle() {\n return this.config.valueColor ? { color: this.config.valueColor } : {};\n }\n}\n","<div [class]=\"'cc-card ' + theme\" [style.width]=\"config.width || '100%'\" [style.height]=\"config.height || '100%'\" (click)=\"cardClick.emit()\">\n <div class=\"card-content\">\n <div class=\"card-label\">{{ config.label }}</div>\n <div class=\"card-value\" [ngStyle]=\"valueStyle\">{{ config.value }}</div>\n <div\n *ngIf=\"config.subtext\"\n class=\"card-subtext\"\n [ngClass]=\"config.subtextClass\"\n >\n {{ config.subtext }}\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CardType2Config } from '../../cards.models';\n\n@Component({\n selector: 'lib-card-type-2',\n templateUrl: './card-type-2.component.html',\n styleUrls: ['./card-type-2.component.scss'],\n standalone: false\n})\nexport class CardType2Component {\n @Input() config!: CardType2Config;\n @Input() theme: 'theme-1' | 'theme-2' = 'theme-1';\n @Output() cardClick = new EventEmitter<void>();\n\n get iconBoxStyle() {\n if (this.config.iconUrl) {\n return { backgroundColor: 'transparent' };\n }\n return this.config.iconBackgroundColor ? { backgroundColor: this.config.iconBackgroundColor } : {};\n }\n\n get iconStyle() {\n return this.config.iconColor ? { color: this.config.iconColor } : {};\n }\n}\n","<div [class]=\"'cc-card ' + theme\" [style.width]=\"config.width || '100%'\" [style.height]=\"config.height || '100%'\" (click)=\"cardClick.emit()\">\n <div class=\"card-content-wrapper\">\n <div class=\"icon-box\" [ngStyle]=\"iconBoxStyle\">\n <img *ngIf=\"config.iconUrl; else matIconTpl\" [src]=\"config.iconUrl\" class=\"icon-image\" alt=\"icon\">\n <ng-template #matIconTpl>\n <mat-icon [ngStyle]=\"iconStyle\">{{ config.iconName }}</mat-icon>\n </ng-template>\n </div>\n <div class=\"text-content\">\n <div class=\"card-label\">{{ config.label }}</div>\n <div class=\"value-wrapper\">\n <span class=\"card-value\">{{ config.value }}</span>\n <span *ngIf=\"config.targetText\" class=\"card-target\">{{ config.targetText }}</span>\n </div>\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MaterialModule } from '../material/material.module';\nimport { CardType1Component } from './components/card-type-1/card-type-1.component';\nimport { CardType2Component } from './components/card-type-2/card-type-2.component';\n\n@NgModule({\n declarations: [\n CardType1Component,\n CardType2Component\n ],\n imports: [\n CommonModule,\n MaterialModule\n ],\n exports: [\n CardType1Component,\n CardType2Component\n ]\n})\nexport class CardsModule { }\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport type AlertVariant = 'info' | 'warning' | 'warning-shadow' | 'success' | 'error';\r\nexport type IconInput = boolean | string | { type: 'material' | 'fontawesome' | 'img'; value: string };\r\n\r\n@Component({\r\n selector: 'lib-alert',\r\n templateUrl: './alert.component.html',\r\n styleUrls: ['./alert.component.scss'],\r\n standalone: false\r\n})\r\nexport class AlertComponent implements OnInit {\r\n @Input() variant: AlertVariant = 'info';\r\n @Input() title: string = '';\r\n @Input() message: string = '';\r\n @Input() icon: IconInput = true;\r\n @Input() customIcon: string = ''; // New input for custom class\r\n\r\n // Customization Inputs\r\n @Input() width?: string;\r\n @Input() height?: string;\r\n @Input() borderRadius?: string;\r\n @Input() padding?: string;\r\n @Input() gap?: string;\r\n @Input() backgroundColor?: string;\r\n @Input() color?: string; // New input for custom text color\r\n @Input() borderColor?: string;\r\n @Input() fontSize?: string;\r\n @Input() fontWeight?: string;\r\n @Input() boxShadow?: string;\r\n\r\n // Granular Border Radius Customization\r\n @Input() borderTopLeftRadius?: string;\r\n @Input() borderTopRightRadius?: string;\r\n @Input() borderBottomLeftRadius?: string;\r\n @Input() borderBottomRightRadius?: string;\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n get isDefaultIcon(): boolean {\r\n return this.icon === true;\r\n }\r\n\r\n get isStringIcon(): boolean {\r\n return typeof this.icon === 'string';\r\n }\r\n\r\n get isObjectIcon(): boolean {\r\n return typeof this.icon === 'object' && this.icon !== null;\r\n }\r\n\r\n get iconString(): string {\r\n return typeof this.icon === 'string' ? this.icon : '';\r\n }\r\n\r\n get isImgIcon(): boolean {\r\n const icon = this.icon;\r\n if (typeof icon === 'string') {\r\n return icon.includes('/') || icon.includes('.') || icon.startsWith('http');\r\n }\r\n return typeof icon === 'object' && icon !== null && icon.type === 'img';\r\n }\r\n\r\n get iconObject(): { type: string; value: string } {\r\n return typeof this.icon === 'object' ? this.icon as any : { type: '', value: '' };\r\n }\r\n\r\n get defaultIconClass(): string {\r\n switch (this.variant) {\r\n case 'success': return 'fa-solid fa-circle-check';\r\n case 'warning':\r\n case 'warning-shadow': return 'fa-solid fa-triangle-exclamation';\r\n case 'error': return 'fa-solid fa-triangle-exclamation';\r\n case 'info':\r\n default: return 'fa-solid fa-circle-info';\r\n }\r\n }\r\n}\r\n","<div class=\"cc-alert\" [ngClass]=\"'cc-alert-' + variant\" [style.width]=\"width\" [style.height]=\"height\"\r\n [style.border-radius]=\"borderRadius\" [style.border-top-left-radius]=\"borderTopLeftRadius\"\r\n [style.border-top-right-radius]=\"borderTopRightRadius\" [style.border-bottom-left-radius]=\"borderBottomLeftRadius\"\r\n [style.border-bottom-right-radius]=\"borderBottomRightRadius\" [style.padding]=\"padding\" [style.gap]=\"gap\"\r\n [style.background-color]=\"backgroundColor\" [style.color]=\"color\" [style.border-color]=\"borderColor\"\r\n [style.font-size]=\"fontSize\" [style.font-weight]=\"fontWeight\" [style.box-shadow]=\"boxShadow\">\r\n\r\n <div class=\"cc-alert-icon\" *ngIf=\"icon\">\r\n <i *ngIf=\"customIcon\" [ngClass]=\"customIcon\"></i>\r\n <i *ngIf=\"!customIcon && isDefaultIcon\" [ngClass]=\"defaultIconClass\"></i>\r\n <i *ngIf=\"!customIcon && isStringIcon && !isImgIcon\" [ngClass]=\"iconString\"></i>\r\n <img *ngIf=\"!customIcon && isStringIcon && isImgIcon\" [src]=\"iconString\" alt=\"alert icon\" />\r\n <ng-container *ngIf=\"isObjectIcon\">\r\n <i *ngIf=\"iconObject.type === 'fontawesome'\" [ngClass]=\"iconObject.value\"></i>\r\n <span *ngIf=\"iconObject.type === 'material'\" class=\"material-icons\">{{ iconObject.value }}</span>\r\n <img *ngIf=\"iconObject.type === 'img'\" [src]=\"iconObject.value\" alt=\"alert icon\" />\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"cc-alert-content\">\r\n <div class=\"cc-alert-title\" *ngIf=\"title\">{{ title }}</div>\r\n <div class=\"cc-alert-message\" *ngIf=\"message\">{{ message }}</div>\r\n <ng-content></ng-content>\r\n </div>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AlertComponent } from './components/alert/alert.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n AlertComponent\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n AlertComponent\r\n ]\r\n})\r\nexport class AlertModule { }\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\nexport type ButtonVariant =\r\n | 'primary'\r\n | 'warning'\r\n | 'outline'\r\n | 'secondary'\r\n | 'success'\r\n | 'danger'\r\n | 'danger-outline';\r\n\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'lib-button',\r\n templateUrl: './button.component.html',\r\n styleUrls: ['./button.component.scss'],\r\n standalone: false\r\n})\r\nexport class ButtonComponent implements OnInit {\r\n\r\n @Input() variant: ButtonVariant = 'primary';\r\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\r\n @Input() disabled: boolean = false;\r\n\r\n // Customization Inputs\r\n @Input() width?: string;\r\n @Input() height?: string;\r\n @Input() borderRadius?: string;\r\n @Input() fontSize?: string;\r\n @Input() fontWeight?: string;\r\n @Input() backgroundColor?: string;\r\n @Input() color?: string;\r\n @Input() border?: string;\r\n @Input() icon: boolean | string | { type: 'material' | 'fontawesome' | 'img'; value: string } = '';\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n get isDefaultIcon(): boolean {\r\n return this.icon === true;\r\n }\r\n\r\n get isStringIcon(): boolean {\r\n return typeof this.icon === 'string' && this.icon !== '';\r\n }\r\n\r\n get isImgIcon(): boolean {\r\n const icon = this.icon;\r\n if (typeof icon === 'string') {\r\n return icon.includes('/') || icon.includes('.') || icon.startsWith('http');\r\n }\r\n return typeof icon === 'object' && icon !== null && !!icon.value && (icon.type === 'img' || icon.value.includes('/') || icon.value.includes('.') || icon.value.startsWith('http'));\r\n }\r\n\r\n get isObjectIcon(): boolean {\r\n return typeof this.icon === 'object' && this.icon !== null;\r\n }\r\n\r\n get iconString(): string {\r\n return typeof this.icon === 'string' ? this.icon : '';\r\n }\r\n\r\n get iconObject(): { type: string; value: string } {\r\n return typeof this.icon === 'object' ? this.icon as any : { type: '', value: '' };\r\n }\r\n\r\n}\r\n","<button [type]=\"type\" [disabled]=\"disabled\" class=\"cc-btn\" [ngClass]=\"'cc-btn-' + variant\" [style.width]=\"width\"\r\n [style.height]=\"height\" [style.border-radius]=\"borderRadius\" [style.font-size]=\"fontSize\"\r\n [style.font-weight]=\"fontWeight\" [style.background-color]=\"backgroundColor\" [style.color]=\"color\"\r\n [style.border]=\"border\">\r\n <div class=\"cc-btn-icon-wrapper\" *ngIf=\"icon\">\r\n <!-- String Icons -->\r\n <ng-container *ngIf=\"isStringIcon\">\r\n <i *ngIf=\"!isImgIcon\" [ngClass]=\"iconString\" class=\"cc-btn-icon\"></i>\r\n <img *ngIf=\"isImgIcon\" [src]=\"iconString\" alt=\"button icon\" class=\"cc-btn-icon cc-btn-img-icon\" />\r\n </ng-container>\r\n\r\n <!-- Object Icons -->\r\n <ng-container *ngIf=\"isObjectIcon\">\r\n <i *ngIf=\"iconObject.type === 'fontawesome'\" [ngClass]=\"iconObject.value\" class=\"cc-btn-icon\"></i>\r\n <span *ngIf=\"iconObject.type === 'material'\" class=\"material-icons cc-btn-icon\">{{ iconObject.value }}</span>\r\n <img *ngIf=\"iconObject.type === 'img'\" [src]=\"iconObject.value\" alt=\"button icon\"\r\n class=\"cc-btn-icon cc-btn-img-icon\" />\r\n </ng-container>\r\n </div>\r\n <ng-content></ng-content>\r\n</button>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonComponent } from './components/button/button.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n ButtonComponent\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n ButtonComponent\r\n ]\r\n})\r\nexport class ButtonModule { }\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n HostListener\r\n} from '@angular/core';\r\nimport { ConfirmationModalConfig } from '../../confirmation-modal.models';\r\n\r\n@Component({\r\n selector: 'cc-confirmation-modal',\r\n templateUrl: './confirmation-modal.component.html',\r\n styleUrls: ['./confirmation-modal.component.scss'],\r\n standalone: false\r\n})\r\nexport class ConfirmationModalComponent implements OnInit, OnDestroy {\r\n @Input() config!: ConfirmationModalConfig;\r\n @Input() isOpen = false;\r\n\r\n @Output() confirm = new EventEmitter<void>();\r\n @Output() cancel = new EventEmitter<void>();\r\n @Output() close = new EventEmitter<void>();\r\n @Output() showCodeSnippet = new EventEmitter<void>();\r\n\r\n // Default configuration\r\n private defaultConfig: Partial<ConfirmationModalConfig> = {\r\n headerTheme: 'dark', // Changed to dark as per new default requirement\r\n width: '560px',\r\n size: 'md',\r\n closeOnBackdrop: true,\r\n closeOnEsc: true,\r\n showCloseButton: true,\r\n cancelButton: {\r\n label: 'Cancel',\r\n show: true\r\n }\r\n };\r\n\r\n mergedConfig!: ConfirmationModalConfig;\r\n private previousActiveElement: HTMLElement | null = null;\r\n\r\n ngOnInit(): void {\r\n this.updateConfig();\r\n\r\n // Store currently focused element\r\n this.previousActiveElement = document.activeElement as HTMLElement;\r\n\r\n // Prevent body scroll when modal is open\r\n if (this.isOpen) {\r\n this.toggleBodyScroll(true);\r\n }\r\n }\r\n\r\n ngOnChanges(): void {\r\n this.updateConfig();\r\n if (this.isOpen !== undefined) {\r\n this.toggleBodyScroll(this.isOpen);\r\n }\r\n }\r\n\r\n private updateConfig(): void {\r\n // Merge user config with defaults\r\n this.mergedConfig = {\r\n ...this.defaultConfig,\r\n ...this.config,\r\n cancelButton: {\r\n ...this.defaultConfig.cancelButton,\r\n ...this.config.cancelButton\r\n },\r\n confirmButton: {\r\n ...this.config.confirmButton\r\n }\r\n };\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // Restore body scroll\r\n this.toggleBodyScroll(false);\r\n\r\n // Restore focus to previous element\r\n if (this.previousActiveElement) {\r\n this.previousActiveElement.focus();\r\n }\r\n }\r\n\r\n private toggleBodyScroll(disable: boolean): void {\r\n if (disable) {\r\n document.body.style.overflow = 'hidden';\r\n } else {\r\n document.body.style.overflow = '';\r\n }\r\n }\r\n\r\n @HostListener('document:keydown.escape', ['$event'])\r\n handleEscape(event: KeyboardEvent): void {\r\n if (this.isOpen && this.mergedConfig.closeOnEsc) {\r\n event.preventDefault();\r\n this.onClose();\r\n }\r\n }\r\n\r\n onBackdropClick(event: MouseEvent): void {\r\n // Only close if clicking directly on backdrop, not modal content\r\n if (\r\n this.mergedConfig.closeOnBackdrop &&\r\n event.target === event.currentTarget\r\n ) {\r\n this.onClose();\r\n }\r\n }\r\n\r\n onConfirm(): void {\r\n if (!this.mergedConfig.confirmButton.disabled &&\r\n !this.mergedConfig.confirmButton.loading) {\r\n this.confirm.emit();\r\n }\r\n }\r\n\r\n onCancel(): void {\r\n this.cancel.emit();\r\n }\r\n\r\n onClose(): void {\r\n this.close.emit();\r\n }\r\n\r\n onShowCodeSnippet(): void {\r\n this.showCodeSnippet.emit();\r\n }\r\n\r\n getModalWidth(): string {\r\n if (this.mergedConfig.size) {\r\n const sizeMap: Record<string, string> = {\r\n sm: '400px',\r\n md: '560px',\r\n lg: '720px'\r\n };\r\n return sizeMap[this.mergedConfig.size];\r\n }\r\n return this.mergedConfig.width || '560px';\r\n }\r\n\r\n getConfirmButtonClass(): string {\r\n const typeMap: Record<string, string> = {\r\n primary: 'cc-btn-primary',\r\n danger: 'cc-btn-danger',\r\n warning: 'cc-btn-warning'\r\n };\r\n return `cc-btn ${typeMap[this.mergedConfig.confirmButton.type]}`;\r\n }\r\n\r\n getHeaderClass(): string {\r\n return `modal-header modal-header--${this.mergedConfig.headerTheme}`;\r\n }\r\n\r\n resolveIconType(icon: any): 'material' | 'custom' | 'img' {\r\n if (typeof icon === 'string') {\r\n if (icon.includes('/') || icon.includes('.') || icon.startsWith('http')) {\r\n return 'img';\r\n }\r\n return 'material';\r\n }\r\n if (icon && typeof icon === 'object') {\r\n if (icon.type === 'custom' || (icon.value && (icon.value.includes('/') || icon.value.includes('.') || icon.value.startsWith('http')))) {\r\n return 'custom';\r\n }\r\n return icon.type || 'material';\r\n }\r\n return 'material';\r\n }\r\n\r\n getIconValue(icon: any): string {\r\n return typeof icon === 'string' ? icon : icon?.value;\r\n }\r\n\r\n getIconColor(icon: any): string | undefined {\r\n return typeof icon === 'object' ? icon.color : undefined;\r\n }\r\n}\r\n","<div *ngIf=\"isOpen\" class=\"cc-modal-backdrop\" (click)=\"onBackdropClick($event)\" role=\"dialog\" [attr.aria-modal]=\"true\"\r\n [attr.aria-labelledby]=\"'modal-title-' + mergedConfig.title\" [attr.aria-label]=\"mergedConfig.ariaLabel\"\r\n [attr.aria-describedby]=\"mergedConfig.ariaDescribedBy\">\r\n\r\n <div class=\"cc-modal-container {{ mergedConfig.customClass }}\" [style.width]=\"getModalWidth()\"\r\n [style.background-color]=\"mergedConfig.backgroundColor\" [style.border-radius]=\"mergedConfig.borderRadius\"\r\n [style.border-top-left-radius]=\"mergedConfig.borderTopLeftRadius\"\r\n [style.border-top-right-radius]=\"mergedConfig.borderTopRightRadius\"\r\n [style.border-bottom-left-radius]=\"mergedConfig.borderBottomLeftRadius\"\r\n [style.border-bottom-right-radius]=\"mergedConfig.borderBottomRightRadius\" (click)=\"$event.stopPropagation()\">\r\n\r\n <!-- Header -->\r\n <div [ngClass]=\"getHeaderClass()\" [style.background-color]=\"mergedConfig.headerBackgroundColor\"\r\n [style.border-bottom]=\"mergedConfig.headerBorderBottom\">\r\n <div class=\"modal-header__content\">\r\n <!-- Icon (Optional) -->\r\n <span *ngIf=\"mergedConfig.icon\" class=\"modal-header__icon\">\r\n <ng-container [ngSwitch]=\"resolveIconType(mergedConfig.icon)\">\r\n <mat-icon *ngSwitchCase=\"'material'\" [style.color]=\"getIconColor(mergedConfig.icon)\">\r\n {{ getIconValue(mergedConfig.icon) }}\r\n </mat-icon>\r\n <img *ngSwitchCase=\"'custom'\" [src]=\"getIconValue(mergedConfig.icon)\"\r\n [alt]=\"mergedConfig.title + ' icon'\" class=\"modal-header__custom-icon\">\r\n <img *ngSwitchCase=\"'img'\" [src]=\"getIconValue(mergedConfig.icon)\"\r\n [alt]=\"mergedConfig.title + ' icon'\" class=\"modal-header__custom-icon\">\r\n </ng-container>\r\n </span>\r\n\r\n <!-- Title -->\r\n <h2 class=\"modal-header__title\" [id]=\"'modal-title-' + mergedConfig.title\"\r\n [style.color]=\"mergedConfig.headerTextColor\">\r\n {{ mergedConfig.title }}\r\n </h2>\r\n </div>\r\n\r\n <!-- Code Snippet Button -->\r\n <button *ngIf=\"mergedConfig.showCodeSnippetButton\" type=\"button\" class=\"modal-header__code-btn\"\r\n (click)=\"onShowCodeSnippet()\" aria-label=\"Show code snippet\" title=\"Show Code Snippet\">\r\n <mat-icon>code</mat-icon>\r\n </button>\r\n\r\n <!-- Close Button -->\r\n <button *ngIf=\"mergedConfig.showCloseButton\" type=\"button\" class=\"modal-header__close\" (click)=\"onClose()\"\r\n aria-label=\"Close modal\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <!-- Body (Content Projection) -->\r\n <div class=\"cc-modal-body\" [style.padding]=\"mergedConfig.padding\" [style.color]=\"mergedConfig.bodyTextColor\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"cc-modal-footer\" [style.background-color]=\"mergedConfig.footerBackgroundColor\"\r\n [style.border-top]=\"mergedConfig.footerBorderTop\">\r\n\r\n <ng-container *ngIf=\"!mergedConfig.customFooter\">\r\n <button *ngIf=\"mergedConfig.cancelButton?.show\" type=\"button\" class=\"cc-btn cc-btn-secondary\"\r\n (click)=\"onCancel()\">\r\n {{ mergedConfig.cancelButton?.label || 'Cancel' }}\r\n </button>\r\n\r\n <button type=\"button\" [ngClass]=\"getConfirmButtonClass()\"\r\n [disabled]=\"mergedConfig.confirmButton.disabled || mergedConfig.confirmButton.loading\"\r\n (click)=\"onConfirm()\">\r\n <span *ngIf=\"mergedConfig.confirmButton.loading\" class=\"cc-btn-spinner\"></span>\r\n {{ mergedConfig.confirmButton.label }}\r\n </button>\r\n </ng-container>\r\n\r\n <ng-content select=\"[cc-modal-footer]\"></ng-content>\r\n </div>\r\n </div>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ConfirmationModalComponent } from './components/confirmation-modal/confirmation-modal.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@NgModule({\r\n declarations: [\r\n ConfirmationModalComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n MatIconModule, // For material icons support\r\n FormsModule // For ngModel in user examples (although mostly projected content, user might need it)\r\n ],\r\n exports: [\r\n ConfirmationModalComponent\r\n ]\r\n})\r\nexport class ConfirmationModalModule { }\r\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\nimport { FilterSidebarChangeEvent, FilterSidebarConfig, FilterSidebarOutput, FilterSidebarTab } from '../../filter-sidebar.models';\r\n\r\n@Component({\r\n selector: 'lib-filter-sidebar',\r\n templateUrl: './filter-sidebar.component.html',\r\n styleUrls: ['./filter-sidebar.component.scss'],\r\n standalone: false,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => FilterSidebarComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class FilterSidebarComponent implements OnInit, ControlValueAccessor {\r\n @Input() config!: FilterSidebarConfig;\r\n @Input() initialFilters: FilterSidebarOutput = {};\r\n\r\n @Output() filterChange = new EventEmitter<FilterSidebarChangeEvent>();\r\n @Output() filterApply = new EventEmitter<FilterSidebarOutput>();\r\n @Output() filterClear = new EventEmitter<void>();\r\n @Output() tabChange = new EventEmitter<string>();\r\n @Output() showCodeSnippet = new EventEmitter<void>();\r\n\r\n filters: FilterSidebarOutput = {};\r\n selectedTabId: string | null = null;\r\n\r\n // ControlValueAccessor callbacks\r\n onChange: any = () => { };\r\n onTouched: any = () => { };\r\n\r\n constructor(\r\n private router: Router,\r\n private route: ActivatedRoute\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n if (this.initialFilters) {\r\n this.filters = { ...this.initialFilters };\r\n }\r\n\r\n // Initialize from URL query params\r\n this.route.queryParams.subscribe(params => {\r\n if (Object.keys(params).length > 0) {\r\n // Merge params into filters, handling potential array/string conversions if needed\r\n // For now assuming direct mapping or basic string values\r\n this.filters = { ...this.filters, ...params };\r\n }\r\n });\r\n\r\n // Initialize Tabs\r\n if (this.config?.tabs?.items?.length) {\r\n if (this.config.tabs.defaultActive) {\r\n this.selectedTabId = this.config.tabs.defaultActive;\r\n } else {\r\n this.selectedTabId = this.config.tabs.items[0].id;\r\n }\r\n }\r\n }\r\n\r\n // ControlValueAccessor Implementation\r\n writeValue(value: any): void {\r\n if (value) {\r\n this.filters = { ...value };\r\n } else {\r\n this.filters = {};\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // Component Logic\r\n\r\n onTabClick(tab: FilterSidebarTab): void {\r\n this.selectedTabId = tab.id;\r\n this.tabChange.emit(tab.id);\r\n }\r\n\r\n onFilterChange(key: string, value: any, isMulti: boolean = false): void {\r\n if (isMulti) {\r\n this.toggleFilterValue(key, value);\r\n } else {\r\n this.filters[key] = value;\r\n }\r\n\r\n // Notify Generic Change\r\n this.notifyChanges(key, this.filters[key]);\r\n }\r\n\r\n private toggleFilterValue(key: string, value: any): void {\r\n const currentValues = this.filters[key] || [];\r\n if (Array.isArray(currentValues)) {\r\n const index = currentValues.indexOf(value);\r\n if (index > -1) {\r\n // Remove value\r\n this.filters[key] = currentValues.filter((v: any) => v !== value);\r\n } else {\r\n // Add value\r\n this.filters[key] = [...currentValues, value];\r\n }\r\n } else {\r\n // Initialize array if undefined\r\n this.filters[key] = [value];\r\n }\r\n }\r\n\r\n private notifyChanges(key: string, value: any): void {\r\n this.onChange(this.filters);\r\n\r\n // Update URL\r\n this.updateUrl();\r\n\r\n this.filterChange.emit({\r\n key,\r\n value,\r\n allFilters: this.filters\r\n });\r\n }\r\n\r\n private updateUrl(): void {\r\n this.router.navigate([], {\r\n relativeTo: this.route,\r\n queryParams: this.filters,\r\n queryParamsHandling: 'merge', // Merge with existing params\r\n replaceUrl: true // Don't create new history entry for every filter change\r\n });\r\n }\r\n\r\n applyFilters(): void {\r\n this.filterApply.emit(this.filters);\r\n }\r\n\r\n clearFilters(): void {\r\n this.filters = {};\r\n this.onChange(this.filters);\r\n\r\n // Clear URL params (navigate with empty queryParams to clear, or reset to defaults)\r\n // Since we don't know \"defaults\" specifically for URL here without config, \r\n // we'll remove the keys currently in filters from the URL.\r\n // Actually, easiest way to clear specific params is passing null.\r\n\r\n // However, to clear ALL filter related params, we might need a more robust strategy \r\n // if there are other params we want to keep. \r\n // For this task, we will just navigate with empty paramsObject for the keys in `filters` \r\n // or just clear all if that's the intention. \r\n // Let's try to clear only the keys we know about from the config if possible, \r\n // but since `filters` is dynamic, let's clear the keys present in the current state before clearing.\r\n\r\n // A safer approach for \"Clear All\" in a filter sidebar is often to strip query params.\r\n this.router.navigate([], {\r\n relativeTo: this.route,\r\n queryParams: {}, // Clear all query params\r\n // queryParamsHandling: 'merge' // attributes to merge would need to be null to remove\r\n });\r\n\r\n this.filterClear.emit();\r\n }\r\n\r\n trackByFn(index: number, item: any): any {\r\n return item.key || index;\r\n }\r\n\r\n onShowCodeSnippet(): void {\r\n this.showCodeSnippet.emit();\r\n }\r\n\r\n isImgUrl(icon: string): boolean {\r\n return icon.includes('/') || icon.includes('.') || icon.startsWith('http');\r\n }\r\n}\r\n","<div class=\"cc-filter-sidebar\">\r\n\r\n <!-- Header with Code Snippet Button -->\r\n <div class=\"cc-filter-header\" *ngIf=\"config?.settings?.showCodeSnippet\">\r\n <button mat-icon-button class=\"cc-code-snippet-btn\" (click)=\"onShowCodeSnippet()\" title=\"Show Code Snippet\">\r\n <i class=\"fas fa-code\"></i>\r\n </button>\r\n </div>\r\n\r\n <!-- Tabs Section -->\r\n <div *ngIf=\"config?.tabs?.items?.length\" class=\"cc-filter-tabs\">\r\n <div *ngFor=\"let tab of config.tabs!.items\" class=\"cc-filter-tab\" [class.active]=\"tab.id === selectedTabId\"\r\n (click)=\"onTabClick(tab)\">\r\n <i *ngIf=\"tab.icon && !isImgUrl(tab.icon)\" [class]=\"tab.icon\"></i>\r\n <img *ngIf=\"tab.icon && isImgUrl(tab.icon)\" [src]=\"tab.icon\" alt=\"icon\" class=\"cc-filter-tab-icon\">\r\n <span>{{ tab.label }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Filters Content -->\r\n <div class=\"cc-filter-content\">\r\n\r\n <ng-container *ngFor=\"let section of config.sections; trackBy: trackByFn\">\r\n\r\n <!-- Accordion Section -->\r\n <mat-accordion *ngIf=\"section.type === 'accordion'\" class=\"cc-filter-accordion\">\r\n <mat-expansion-panel [expanded]=\"section.expanded\" class=\"mat-elevation-z0\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ section.title }}\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n\r\n <!-- Content of Accordion -->\r\n <ng-container *ngIf=\"section.options\">\r\n <div class=\"cc-filter-group\">\r\n <mat-checkbox *ngFor=\"let option of section.options\"\r\n [checked]=\"filters[section.key]?.includes(option.value)\"\r\n (change)=\"onFilterChange(section.key, option.value, true)\">\r\n {{ option.label }}\r\n </mat-checkbox>\r\n </div>\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n <!-- Select Section -->\r\n <div *ngIf=\"section.type === 'select'\" class=\"cc-filter-section\">\r\n <label *ngIf=\"section.title\" class=\"cc-filter-label\">{{ section.title }}</label>\r\n <mat-form-field appearance=\"outline\" class=\"cc-filter-full-width\">\r\n <mat-select [placeholder]=\"section.placeholder || 'Select'\" [(value)]=\"filters[section.key]\"\r\n [multiple]=\"section.multi\"\r\n (selectionChange)=\"onFilterChange(section.key, $event.value, section.multi)\">\r\n <mat-option *ngFor=\"let option of section.options\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- Radio Group Section -->\r\n <div *ngIf=\"section.type === 'radio-group'\" class=\"cc-filter-section\">\r\n <label *ngIf=\"section.title\" class=\"cc-filter-label\">{{ section.title }}</label>\r\n <mat-radio-group [(ngModel)]=\"filters[section.key]\" (change)=\"onFilterChange(section.key, $event.value)\"\r\n class=\"cc-filter-radio-group\">\r\n <mat-radio-button *ngFor=\"let option of section.options\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <!-- Checkbox Group Section (Standalone) -->\r\n <div *ngIf=\"section.type === 'checkbox-group'\" class=\"cc-filter-section\">\r\n <label *ngIf=\"section.title\" class=\"cc-filter-label\">{{ section.title }}</label>\r\n <div class=\"cc-filter-group\">\r\n <mat-checkbox *ngFor=\"let option of section.options\"\r\n [checked]=\"filters[section.key]?.includes(option.value)\"\r\n (change)=\"onFilterChange(section.key, option.value, true)\">\r\n {{ option.label }}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n <!-- Actions Footer -->\r\n <div class=\"cc-filter-actions\" *ngIf=\"config.actions\">\r\n <button mat-button class=\"cc-btn-text text-danger\" *ngIf=\"config.actions?.clear?.visible !== false\"\r\n (click)=\"clearFilters()\">\r\n {{ config.actions?.clear?.label || 'Clear Filter' }}\r\n </button>\r\n <button mat-flat-button color=\"warn\" class=\"cc-btn-primary\" *ngIf=\"config.actions?.apply?.visible !== false\"\r\n [disabled]=\"config.actions?.apply?.disabled\" (click)=\"applyFilters()\">\r\n {{ config.actions?.apply?.label || 'Apply Filter' }}\r\n </button>\r\n </div>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MaterialModule } from '../material/material.module';\r\nimport { FilterSidebarComponent } from './components/filter-sidebar/filter-sidebar.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n FilterSidebarComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MaterialModule\r\n ],\r\n exports: [\r\n FilterSidebarComponent\r\n ]\r\n})\r\nexport class FilterSidebarModule { }\r\n","import { Component, Input, Output, EventEmitter, HostBinding } from '@angular/core';\r\n\r\nexport interface SummaryCardConfig {\r\n header: string;\r\n value: string;\r\n description?: string;\r\n\r\n // Icon or Image (mutually exclusive)\r\n icon?: string; // Material icon name\r\n iconImage?: string; // URL for image icon\r\n\r\n // Layout configurations\r\n descriptionPosition?: 'bottom' | 'inline'; // 'bottom' (default) or 'inline' (right side of value)\r\n\r\n // Extended Content\r\n valueSubtext?: string; // Text displayed next to the value (e.g. \"/ 15 Target\")\r\n metaData?: SummaryCardMeta[]; // Right-aligned meta information\r\n\r\n // Color configurations\r\n valueColor?: string; // Color for the value text\r\n headerColor?: string; // Color for the header text\r\n descriptionColor?: string; // Color for the description text\r\n iconColor?: string; // Color for the icon\r\n iconBackgroundColor?: string; // Background color for the icon container\r\n\r\n // Additional styling\r\n iconClass?: string; // Additional CSS classes for icon\r\n valueClass?: string; // Additional CSS classes for value\r\n headerClass?: string; // Additional CSS classes for header\r\n descriptionClass?: string; // Additional CSS classes for description\r\n\r\n // Interaction\r\n isDisabled?: boolean; // Disable click interaction\r\n isClickable?: boolean; // Whether card is clickable (default: true)\r\n}\r\n\r\nexport interface SummaryCardMeta {\r\n text: string;\r\n type?: 'text' | 'pill'; // 'text' (default) or 'pill' (badge style)\r\n color?: string; // Text color\r\n backgroundColor?: string; // Background color for pill\r\n cssClass?: string; // Custom CSS class\r\n}\r\n\r\n@Component({\r\n selector: 'lib-summary-card',\r\n templateUrl: './summary-card.component.html',\r\n styleUrls: ['./summary-card.component.scss'],\r\n standalone: false\r\n})\r\nexport class SummaryCardComponent {\r\n @Input() config!: SummaryCardConfig;\r\n @Input() theme: 'theme-1' | 'theme-2' = 'theme-1';\r\n @Output() cardClick = new EventEmitter<void>();\r\n\r\n @HostBinding('class') get hostClasses(): string {\r\n return `${this.theme} ${this.config?.isDisabled ? 'disabled' : ''} ${this.config?.isClickable !== false && !this.config?.isDisabled ? 'clickable' : ''}`;\r\n }\r\n\r\n constructor() { }\r\n\r\n onCardClick(): void {\r\n if (this.config?.isDisabled || this.config?.isClickable === false) {\r\n return;\r\n }\r\n this.cardClick.emit();\r\n }\r\n\r\n get cardClasses(): { [key: string]: boolean } {\r\n return {\r\n 'disabled': !!this.config?.isDisabled,\r\n 'clickable': this.config?.isClickable !== false && !this.config?.isDisabled\r\n };\r\n }\r\n\r\n get iconStyles(): { [key: string]: string } {\r\n const styles: { [key: string]: string } = {};\r\n if (this.config.iconBackgroundColor) {\r\n styles['backgroundColor'] = this.config.iconBackgroundColor;\r\n }\r\n if (this.config.iconColor) {\r\n styles['color'] = this.config.iconColor;\r\n }\r\n return styles;\r\n }\r\n\r\n get headerStyles(): { [key: string]: string } {\r\n const styles: { [key: string]: string } = {};\r\n if (this.config.headerColor) {\r\n styles['color'] = this.config.headerColor;\r\n }\r\n return styles;\r\n }\r\n\r\n get valueStyles(): { [key: string]: string } {\r\n const styles: { [key: string]: string } = {};\r\n if (this.config.valueColor) {\r\n styles['color'] = this.config.valueColor;\r\n }\r\n return styles;\r\n }\r\n\r\n get descriptionStyles(): { [key: string]: string } {\r\n const styles: { [key: string]: string } = {};\r\n if (this.config.descriptionColor) {\r\n styles['color'] = this.config.descriptionColor;\r\n }\r\n return styles;\r\n }\r\n\r\n get isDescriptionInline(): boolean {\r\n return this.config.descriptionPosition === 'inline';\r\n }\r\n\r\n getMetaStyles(meta: SummaryCardMeta): { [key: string]: string } {\r\n const styles: { [key: string]: string } = {};\r\n if (meta.color) {\r\n styles['color'] = meta.color;\r\n }\r\n if (meta.backgroundColor && meta.type === 'pill') {\r\n styles['backgroundColor'] = meta.backgroundColor;\r\n }\r\n return styles;\r\n }\r\n}\r\n","<div class=\"cc-summary-card\" (click)=\"onCardClick()\">\r\n <!-- Icon Section (Left Side) -->\r\n <div class=\"icon-section\" *ngIf=\"config.icon || config.iconImage\" [ngClass]=\"config.iconClass\"\r\n [ngStyle]=\"iconStyles\">\r\n <mat-icon *ngIf=\"config.icon\">{{ config.icon }}</mat-icon>\r\n <img *ngIf=\"!config.icon && config.iconImage\" [src]=\"config.iconImage\" alt=\"icon\">\r\n </div>\r\n\r\n <!-- Right Section (Header + Value/Meta) -->\r\n <div class=\"right-section\">\r\n <!-- Header (Full Width on Right) -->\r\n <div class=\"header\" [ngClass]=\"config.headerClass\" [ngStyle]=\"headerStyles\">\r\n {{ config.header }}\r\n </div>\r\n\r\n <!-- Value and Meta Row -->\r\n <div class=\"value-meta-row\">\r\n <!-- Content Section -->\r\n <div class=\"content-section\">\r\n <!-- Value Row (with optional inline description) -->\r\n <div class=\"value-row\" [class.inline-layout]=\"isDescriptionInline\">\r\n <div class=\"value-container\">\r\n <div class=\"value\" [ngClass]=\"config.valueClass\" [ngStyle]=\"valueStyles\">\r\n {{ config.value }}\r\n <span *ngIf=\"config.valueSubtext\" class=\"value-subtext\">{{ config.valueSubtext }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Description (inline or bottom based on config) -->\r\n <div class=\"description\" *ngIf=\"config.description\" [ngClass]=\"config.descriptionClass\"\r\n [ngStyle]=\"descriptionStyles\">\r\n {{ config.description }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Meta/Status Section (Aligned with Value) -->\r\n <div class=\"meta-section\" *ngIf=\"config.metaData && config.metaData.length > 0\">\r\n <div *ngFor=\"let meta of config.metaData\" class=\"meta-item\"\r\n [ngClass]=\"[meta.type === 'pill' ? 'meta-pill' : 'meta-text', meta.cssClass || '']\"\r\n [ngStyle]=\"getMetaStyles(meta)\">\r\n {{ meta.text }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SummaryCardComponent } from './components/summary-card/summary-card.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n SummaryCardComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n MatIconModule\r\n ],\r\n exports: [\r\n SummaryCardComponent\r\n ]\r\n})\r\nexport class SummaryCardModule { }\r\n","import { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormControl, FormArray, Validators, AbstractControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n FormConfig,\r\n FormField,\r\n FormSection,\r\n FormOption,\r\n JsonFormConfig,\r\n JsonFieldConfig,\r\n FieldType,\r\n UISubType\r\n} from '../configurable-form.model';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MaterialModule } from '../../material/material.module';\r\n\r\n@Component({\r\n selector: 'lib-configurable-form',\r\n templateUrl: './configurable-form.component.html',\r\n styleUrls: ['./configurable-form.component.scss'],\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, MaterialModule],\r\n})\r\nexport class ConfigurableFormComponent implements OnInit, OnChanges {\r\n @Input() config!: FormConfig;\r\n @Input() jsonConfig!: JsonFormConfig;\r\n @Input() data: any = {};\r\n @Input() baseApiUrl: string = '';\r\n @Output() formSubmit = new EventEmitter<any>();\r\n @Output() formCancel = new EventEmitter<void>();\r\n @Output() optionsLoad = new EventEmitter<any>();\r\n\r\n form!: FormGroup;\r\n processedConfig!: FormConfig;\r\n fieldVisibilityMap: Map<string, boolean> = new Map();\r\n\r\n constructor(\r\n private fb: FormBuilder,\r\n private snackBar: MatSnackBar,\r\n private http: HttpClient\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.initializeForm();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['config'] || changes['jsonConfig']) {\r\n this.initializeForm();\r\n }\r\n if (changes['data'] && this.form) {\r\n this.form.patchValue(this.data);\r\n }\r\n }\r\n\r\n initializeForm() {\r\n // Transform JSON config if provided, otherwise use config directly\r\n if (this.jsonConfig) {\r\n this.processedConfig = this.transformJsonConfig(this.jsonConfig);\r\n } else if (this.config) {\r\n this.processedConfig = JSON.parse(JSON.stringify(this.config));\r\n } else {\r\n return;\r\n }\r\n\r\n this.normalizeFields();\r\n this.initializeFieldVisibility();\r\n this.buildForm();\r\n this.setupDependencies();\r\n\r\n // Patch initial data if provided\r\n if (this.data && Object.keys(this.data).length > 0) {\r\n this.form.patchValue(this.data);\r\n }\r\n }\r\n\r\n // Transform JSON config format to internal FormConfig format\r\n transformJsonConfig(jsonConfig: JsonFormConfig): FormConfig {\r\n const fields = jsonConfig.jsonConfig\r\n .sort((a, b) => a.sequence - b.sequence)\r\n .map(field => this.transformJsonField(field));\r\n\r\n return {\r\n sections: [{\r\n sectionTitle: jsonConfig.label,\r\n fields: fields\r\n }],\r\n entityType: jsonConfig.entityType\r\n };\r\n }\r\n\r\n // Transform individual JSON field to FormField\r\n transformJsonField(jsonField: JsonFieldConfig): FormField {\r\n const fieldType = this.mapUISubTypeToFieldType(jsonField.uiConfig.subType);\r\n\r\n return {\r\n name: jsonField.jsonKey,\r\n jsonKey: jsonField.jsonKey,\r\n label: jsonField.label,\r\n type: fieldType,\r\n sequence: jsonField.sequence,\r\n keyType: jsonField.keyType,\r\n uiConfig: jsonField.uiConfig,\r\n validationRules: jsonField.validationRules,\r\n required: jsonField.validationRules?.isMandatory || jsonField.validationRules?.isRequired,\r\n mandatory: jsonField.validationRules?.isMandatory,\r\n dependsOn: undefined, // Will be set based on dependent array\r\n dependent: jsonField.uiConfig.dependent,\r\n optionConfigs: jsonField.uiConfig.optionConfigs,\r\n class: 'col-12'\r\n };\r\n }\r\n\r\n // Map UI subtype to field type\r\n mapUISubTypeToFieldType(subType?: string): FieldType {\r\n switch (subType) {\r\n case 'UI_SUBTYPE.SHORT_TEXT':\r\n return 'text';\r\n case 'UI_SUBTYPE.LONG_TEXT':\r\n return 'textarea';\r\n case 'UI_SUBTYPE.NUMBER':\r\n return 'number';\r\n case 'UI_SUBTYPE.EMAIL':\r\n return 'email';\r\n case 'UI_SUBTYPE.PHONE':\r\n return 'tel';\r\n case 'UI_SUBTYPE.URL':\r\n return 'url';\r\n default:\r\n return 'text';\r\n }\r\n }\r\n\r\n // Normalize fields to ensure all required properties exist\r\n normalizeFields() {\r\n this.processedConfig.sections.forEach(section => {\r\n section.fields.forEach(field => {\r\n // Set default type if not specified\r\n if (!field.type) {\r\n field.type = 'text';\r\n }\r\n\r\n // Merge uiConfig with field-level properties\r\n if (field.uiConfig) {\r\n if (field.uiConfig.type === 'UI_TYPE.DROP_DOWN') {\r\n field.type = 'dropdown';\r\n }\r\n if (field.uiConfig.optionConfigs) {\r\n field.optionConfigs = field.uiConfig.optionConfigs;\r\n }\r\n if (field.uiConfig.dependent) {\r\n field.dependent = field.uiConfig.dependent;\r\n }\r\n }\r\n\r\n // Initialize visibility\r\n if (field.visible === undefined) {\r\n field.visible = true;\r\n }\r\n\r\n // Load options for dropdowns\r\n if ((field.type === 'dropdown' || field.type === 'select') && field.optionConfigs) {\r\n this.loadFieldOptions(field);\r\n }\r\n });\r\n });\r\n }\r\n\r\n // Initialize field visibility map\r\n initializeFieldVisibility() {\r\n this.processedConfig.sections.forEach(section => {\r\n section.fields.forEach(field => {\r\n this.fieldVisibilityMap.set(field.name, field.visible !== false);\r\n });\r\n });\r\n }\r\n\r\n buildForm() {\r\n const formGroupConfig: any = {};\r\n\r\n this.processedConfig.sections.forEach(section => {\r\n if (section.isRepeater) {\r\n // Create FormArray for repeater sections\r\n const arrayName = section.formArrayName || 'items';\r\n const minItems = section.minItems || 1;\r\n const initialItems = [];\r\n\r\n for (let i = 0; i < minItems; i++) {\r\n initialItems.push(this.createGroup(section.fields));\r\n }\r\n\r\n formGroupConfig[arrayName] = this.fb.array(initialItems);\r\n } else {\r\n // Add regular fields to form group\r\n section.fields.forEach(field => {\r\n if (field.subFields) {\r\n // Composite field - add all sub-fields\r\n field.subFields.forEach(subField => {\r\n if (field.required || field.mandatory) {\r\n subField.required = true;\r\n }\r\n formGroupConfig[subField.name] = this.createControl(subField);\r\n });\r\n } else {\r\n formGroupConfig[field.name] = this.createControl(field);\r\n }\r\n });\r\n }\r\n });\r\n\r\n this.form = this.fb.group(formGroupConfig);\r\n\r\n // Apply composite validators to the root form group\r\n this.processedConfig.sections.forEach(section => {\r\n if (!section.isRepeater) {\r\n section.fields.forEach(field => {\r\n if (field.type === 'composite' && field.compositeValidationRule && field.subFields) {\r\n this.form.addValidators(this.createCompositeValidator(field));\r\n }\r\n });\r\n }\r\n });\r\n this.form.updateValueAndValidity();\r\n }\r\n\r\n createCompositeValidator(field: FormField) {\r\n return (control: AbstractControl) => {\r\n const group = control as FormGroup;\r\n if (!field.subFields || field.subFields.length < 2) return null;\r\n\r\n if (field.compositeValidationRule === 'minMax') {\r\n const minControl = group.get(field.subFields[0].name);\r\n const maxControl = group.get(field.subFields[1].name);\r\n\r\n if (minControl && maxControl && minControl.value !== null && maxControl.value !== null) {\r\n if (Number(minControl.value) > Number(maxControl.value)) {\r\n return { [`invalid_minMax_${field.name}`]: true };\r\n }\r\n }\r\n }\r\n\r\n if (field.compositeValidationRule === 'percentageTotal') {\r\n let total = 0;\r\n let allPresent = true;\r\n\r\n field.subFields.forEach(sub => {\r\n const ctrl = group.get(sub.name);\r\n if (ctrl && ctrl.value !== null && ctrl.value !== '') {\r\n total += Number(ctrl.value);\r\n } else {\r\n allPresent = false;\r\n }\r\n });\r\n\r\n if (allPresent && total !== 100) {\r\n return { [`invalid_percentageTotal_${field.name}`]: true };\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n }\r\n\r\n createControl(field: FormField): FormControl {\r\n const validators = [];\r\n\r\n // Add validators based on field configuration\r\n if (field.required || field.mandatory || field.validationRules?.isMandatory || field.validationRules?.isRequired) {\r\n validators.push(Validators.required);\r\n }\r\n\r\n if (field.validationRules?.minLength) {\r\n validators.push(Validators.minLength(field.validationRules.minLength));\r\n }\r\n\r\n if (field.validationRules?.maxLength) {\r\n validators.push(Validators.maxLength(field.validationRules.maxLength));\r\n }\r\n\r\n if (field.validationRules?.pattern) {\r\n validators.push(Validators.pattern(field.validationRules.pattern));\r\n }\r\n\r\n if (field.validationRules?.min !== undefined) {\r\n validators.push(Validators.min(field.validationRules.min));\r\n }\r\n\r\n if (field.validationRules?.max !== undefined) {\r\n validators.push(Validators.max(field.validationRules.max));\r\n }\r\n\r\n if (field.type === 'email') {\r\n validators.push(Validators.email);\r\n }\r\n\r\n const initialValue = field.value !== undefined ? field.value : '';\r\n return this.fb.control({ value: initialValue, disabled: field.disabled || false }, validators);\r\n }\r\n\r\n createGroup(fields: FormField[]): FormGroup {\r\n const groupConfig: any = {};\r\n\r\n fields.forEach(field => {\r\n if (field.subFields) {\r\n field.subFields.forEach(subField => {\r\n groupConfig[subField.name] = this.createControl(subField);\r\n });\r\n } else {\r\n groupConfig[field.name] = this.createControl(field);\r\n }\r\n });\r\n\r\n return this.fb.group(groupConfig);\r\n }\r\n\r\n getFormArray(name: string): FormArray {\r\n return this.form.get(name) as FormArray;\r\n }\r\n\r\n addRepeaterItem(section: FormSection) {\r\n const arrayName = section.formArrayName || 'items';\r\n const formArray = this.getFormArray(arrayName);\r\n\r\n // Check max items\r\n if (section.maxItems && formArray.length >= section.maxItems) {\r\n this.snackBar.open(`Maximum ${section.maxItems} items allowed`, 'Close', { duration: 3000 });\r\n return;\r\n }\r\n\r\n formArray.push(this.createGroup(section.fields));\r\n }\r\n\r\n removeRepeaterItem(sectionName: string, index: number) {\r\n const formArray = this.getFormArray(sectionName);\r\n formArray.removeAt(index);\r\n }\r\n\r\n onSubmit() {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n this.scrollToFirstInvalidControl();\r\n this.snackBar.open('Please fill all required fields', 'Close', { duration: 3000 });\r\n return;\r\n }\r\n\r\n this.formSubmit.emit(this.form.value);\r\n }\r\n\r\n scrollToFirstInvalidControl() {\r\n const firstInvalidControl = document.querySelector('.is-invalid');\r\n if (firstInvalidControl) {\r\n firstInvalidControl.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n }\r\n }\r\n\r\n setupDependencies() {\r\n this.processedConfig.sections.forEach(section => {\r\n section.fields.forEach(field => {\r\n if (field.dependsOn) {\r\n const control = this.form.get(field.dependsOn);\r\n if (control) {\r\n control.valueChanges.subscribe(value => {\r\n this.onFieldValueChange(field, value);\r\n });\r\n }\r\n }\r\n\r\n // Also setup for fields with dependent array\r\n if (field.dependent && field.dependent.length > 0) {\r\n const control = this.form.get(field.name);\r\n if (control) {\r\n control.valueChanges.subscribe(value => {\r\n this.onFieldValueChange(field, value);\r\n });\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n onFieldValueChange(field: FormField, value: any) {\r\n // Handle dependent fields\r\n if (field.dependent && field.dependent.length > 0) {\r\n field.dependent.forEach(dependentFieldName => {\r\n const dependentField = this.findFieldByName(dependentFieldName);\r\n if (dependentField) {\r\n // Clear the dependent field value\r\n const control = this.form.get(dependentFieldName);\r\n if (control) {\r\n control.setValue('');\r\n control.markAsUntouched();\r\n }\r\n\r\n // Load new options for the dependent field\r\n if (value) {\r\n this.loadFieldOptions(dependentField, { [field.name]: value });\r\n } else {\r\n // Clear options if parent value is cleared\r\n dependentField.loadedOptions = [];\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Load options for a dropdown field\r\n loadFieldOptions(field: FormField, parentValues?: any) {\r\n // Emit event for parent to notify about options load request\r\n // Allow parent to mark as handled to skip internal API call\r\n const event = { field, parentValue: parentValues, handled: false };\r\n this.optionsLoad.emit(event);\r\n\r\n if (event.handled) {\r\n return;\r\n }\r\n\r\n if (!field.optionConfigs) {\r\n return;\r\n }\r\n\r\n const config = field.optionConfigs;\r\n\r\n // Handle static options\r\n if (config.optionDTO === 'OPTION_DTO.STATIC' && config.staticOptions) {\r\n field.loadedOptions = config.staticOptions;\r\n return;\r\n }\r\n\r\n // Handle API-based options\r\n if (config.optionDTO === 'OPTION_DTO.REF_DATA' && config.url) {\r\n let url = config.url;\r\n\r\n // Replace placeholders in URL with parent values\r\n if (parentValues) {\r\n Object.keys(parentValues).forEach(key => {\r\n url = url.replace(`{${key}}`, parentValues[key]);\r\n });\r\n }\r\n\r\n // Prepend base API URL if provided\r\n if (this.baseApiUrl && !url.startsWith('http')) {\r\n url = `${this.baseApiUrl}/${url}`;\r\n }\r\n\r\n this.http.get<any>(url).subscribe({\r\n next: (response) => {\r\n // Extract data from response\r\n const data = response.data || response.content || response;\r\n field.loadedOptions = this.extractOptions(data, config);\r\n },\r\n error: (error) => {\r\n console.error('Error loading options:', error);\r\n field.loadedOptions = [];\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Extract options from API response\r\n extractOptions(data: any[], config: any): FormOption[] {\r\n if (!Array.isArray(data)) {\r\n return [];\r\n }\r\n\r\n return data.map(item => ({\r\n label: item[config.labelKey || 'name'],\r\n value: item[config.requestKey || 'code'] || item[config.valueKey || 'id'],\r\n code: item.code,\r\n name: item.name\r\n }));\r\n }\r\n\r\n // Get options for a field (either static or loaded)\r\n getFieldOptions(field: FormField): FormOption[] {\r\n return field.loadedOptions || field.options || [];\r\n }\r\n\r\n // Check if field is visible\r\n isFieldVisible(field: FormField): boolean {\r\n return this.fieldVisibilityMap.get(field.name) !== false;\r\n }\r\n\r\n // Toggle field visibility\r\n toggleFieldVisibility(field: FormField, visible: boolean) {\r\n this.fieldVisibilityMap.set(field.name, visible);\r\n\r\n const control = this.form.get(field.name);\r\n if (control) {\r\n if (visible) {\r\n // Re-enable and restore validators\r\n control.enable();\r\n this.updateControlValidators(control, field);\r\n } else {\r\n // Disable and clear validators\r\n control.disable();\r\n control.clearValidators();\r\n control.updateValueAndValidity();\r\n }\r\n }\r\n }\r\n\r\n // Update control validators based on field config\r\n updateControlValidators(control: AbstractControl, field: FormField) {\r\n const validators = [];\r\n\r\n if (field.required || field.mandatory || field.validationRules?.isMandatory) {\r\n validators.push(Validators.required);\r\n }\r\n\r\n if (field.validationRules?.minLength) {\r\n validators.push(Validators.minLength(field.validationRules.minLength));\r\n }\r\n\r\n if (field.validationRules?.maxLength) {\r\n validators.push(Validators.maxLength(field.validationRules.maxLength));\r\n }\r\n\r\n if (field.validationRules?.pattern) {\r\n validators.push(Validators.pattern(field.validationRules.pattern));\r\n }\r\n\r\n control.setValidators(validators);\r\n control.updateValueAndValidity();\r\n }\r\n\r\n onFileChange(event: any, field: FormField) {\r\n const files: FileList = event.target.files;\r\n\r\n if (!files || files.length === 0) {\r\n return;\r\n }\r\n\r\n // Initialize uploadedFiles if not present\r\n // Initialize uploadedFiles if not present\r\n if (!field.uploadedFiles) {\r\n field.uploadedFiles = [];\r\n }\r\n\r\n const uploadedFiles: any[] = [];\r\n // Handle files\r\n for (let i = 0; i < files.length; i++) {\r\n const file = files[i];\r\n\r\n // Check file size (5MB limit)\r\n if (file.size > 5 * 1024 * 1024) {\r\n this.snackBar.open(`File ${file.name} exceeds 5MB limit`, 'Close', { duration: 3000 });\r\n continue;\r\n }\r\n\r\n uploadedFiles.push({\r\n name: file.name,\r\n size: file.size,\r\n type: file.type,\r\n file: file\r\n });\r\n }\r\n\r\n if (field.multiple) {\r\n field.uploadedFiles.push(...uploadedFiles);\r\n } else {\r\n field.uploadedFiles = uploadedFiles;\r\n }\r\n\r\n // Update form control value for validation\r\n this.updateFileControlValue(field);\r\n\r\n // Clear the input\r\n event.target.value = '';\r\n }\r\n\r\n // Remove uploaded file\r\n removeFile(field: FormField, index: number) {\r\n if (field.uploadedFiles) {\r\n field.uploadedFiles.splice(index, 1);\r\n this.updateFileControlValue(field);\r\n }\r\n }\r\n\r\n // Update file control value for validation\r\n updateFileControlValue(field: FormField) {\r\n const control = this.form.get(field.name);\r\n if (control) {\r\n const hasFiles = field.uploadedFiles && field.uploadedFiles.length > 0;\r\n control.setValue(hasFiles ? field.uploadedFiles : null);\r\n control.markAsTouched();\r\n }\r\n }\r\n\r\n // Get character count for text field\r\n getCharacterCount(fieldName: string): number {\r\n const control = this.form.get(fieldName);\r\n if (control && control.value) {\r\n return control.value.toString().length;\r\n }\r\n return 0;\r\n }\r\n\r\n // Toggle section collapse\r\n toggleSection(section: FormSection) {\r\n section.collapsed = !section.collapsed;\r\n }\r\n\r\n onCancel() {\r\n this.formCancel.emit();\r\n }\r\n\r\n // Helper method to find field by name\r\n private findFieldByName(name: string): FormField | undefined {\r\n for (const section of this.processedConfig.sections) {\r\n const field = section.fields.find(f => f.name === name);\r\n if (field) {\r\n return field;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n // Get the processed config for template use\r\n get sections(): FormSection[] {\r\n return this.processedConfig?.sections || [];\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\" class=\"configurable-form-container\" *ngIf=\"form\">\r\n\r\n <ng-container *ngFor=\"let section of sections\">\r\n\r\n <!-- Repeater Section -->\r\n <div *ngIf=\"section.isRepeater; else normalSection\"\r\n [ngClass]=\"section.noCardLayout ? 'section-no-card' : 'section-card'\">\r\n <div class=\"section-header\" *ngIf=\"section.sectionTitle\">\r\n <h3 class=\"section-title\">{{ section.sectionTitle }}</h3>\r\n <button *ngIf=\"section.collapsible\" mat-icon-button type=\"button\" (click)=\"toggleSection(section)\">\r\n <mat-icon>{{ section.collapsed ? 'expand_more' : 'expand_less' }}</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div [formArrayName]=\"section.formArrayName || 'items'\" *ngIf=\"!section.collapsed\">\r\n <div *ngFor=\"let item of getFormArray(section.formArrayName!).controls; let i = index\"\r\n [formGroupName]=\"i\" class=\"repeater-item\">\r\n <div class=\"repeater-item-header\" *ngIf=\"getFormArray(section.formArrayName!).length > 1\">\r\n <span class=\"text-small\">{{ section.repeaterItemLabel || 'Item' }} {{i + 1}}</span>\r\n <button mat-icon-button color=\"warn\" type=\"button\"\r\n (click)=\"removeRepeaterItem(section.formArrayName!, i)\"\r\n [disabled]=\"section.minItems && getFormArray(section.formArrayName!).length <= section.minItems\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <!-- Fields Grid -->\r\n <div class=\"form-grid\">\r\n <div *ngFor=\"let field of section.fields\" [ngClass]=\"['form-col', field.class || 'col-12']\"\r\n [hidden]=\"!isFieldVisible(field)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"fieldTemplate; context: {field: field, group: item}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"repeater-separator\" *ngIf=\"i < getFormArray(section.formArrayName!).length - 1\"></div>\r\n </div>\r\n </div>\r\n\r\n <button mat-button color=\"primary\" type=\"button\" (click)=\"addRepeaterItem(section)\" class=\"add-btn\"\r\n *ngIf=\"!section.collapsed\"\r\n [disabled]=\"section.maxItems && getFormArray(section.formArrayName!).length >= section.maxItems\">\r\n <mat-icon>add_circle_outline</mat-icon> {{ section.addLabel || 'Add More' }}\r\n </button>\r\n </div>\r\n\r\n <!-- Normal Section -->\r\n <ng-template #normalSection>\r\n <div [ngClass]=\"section.noCardLayout ? 'section-no-card' : 'section-card'\">\r\n <div class=\"section-header\" *ngIf=\"section.sectionTitle\">\r\n <h3 class=\"section-title\">{{ section.sectionTitle }}</h3>\r\n <button *ngIf=\"section.collapsible\" mat-icon-button type=\"button\" (click)=\"toggleSection(section)\">\r\n <mat-icon>{{ section.collapsed ? 'expand_more' : 'expand_less' }}</mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"form-grid\" *ngIf=\"!section.collapsed\">\r\n <div *ngFor=\"let field of section.fields\" [ngClass]=\"['form-col', field.class || 'col-12']\"\r\n [hidden]=\"!isFieldVisible(field)\">\r\n <!-- Pass the root form group to the template -->\r\n <ng-container\r\n *ngTemplateOutlet=\"fieldTemplate; context: {field: field, group: form}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n </ng-container>\r\n\r\n <div class=\"btn-row\">\r\n <button mat-stroked-button type=\"button\" (click)=\"onCancel()\" *ngIf=\"processedConfig?.cancelLabel\">{{\r\n processedConfig.cancelLabel\r\n }}</button>\r\n <button mat-stroked-button type=\"button\" *ngIf=\"processedConfig?.saveDraftLabel\">{{\r\n processedConfig.saveDraftLabel }}</button>\r\n <button mat-flat-button color=\"primary\" type=\"submit\">{{ processedConfig?.submitLabel || 'Submit' }}</button>\r\n </div>\r\n\r\n</form>\r\n\r\n<!-- Reusable Field Template -->\r\n<ng-template #fieldTemplate let-field=\"field\" let-group=\"group\">\r\n <div [formGroup]=\"group\">\r\n\r\n <!-- Text / Email / Number / Tel / Password / URL -->\r\n <div *ngIf=\"['text', 'email', 'number', 'tel', 'password', 'url'].includes(field.type || '')\"\r\n class=\"field-container\">\r\n <div class=\"field-label\" *ngIf=\"field.label\">\r\n {{ field.label }}\r\n <span class=\"text-danger\" *ngIf=\"field.required || field.mandatory\">*</span>\r\n </div>\r\n <div class=\"input-wrapper\">\r\n <input [type]=\"field.type\" [formControlName]=\"field.name\" [placeholder]=\"field.placeholder || ''\"\r\n [readonly]=\"field.readonly\" class=\"form-input\"\r\n [class.is-invalid]=\"group.get(field.name)?.touched && group.get(field.name)?.invalid\"\r\n [maxlength]=\"field.validationRules?.maxLength || field.uiConfig?.maxCharacters\">\r\n <div class=\"input-suffix\">\r\n <span class=\"suffix-text\" *ngIf=\"field.suffixText\">{{ field.suffixText }}</span>\r\n <mat-icon *ngIf=\"field.suffixIcon\">{{ field.suffixIcon }}</mat-icon>\r\n <mat-icon *ngIf=\"field.icon\">{{ field.icon }}</mat-icon>\r\n <mat-icon *ngIf=\"field.readonly\" class=\"lock-icon\">lock_outline</mat-icon>\r\n </div>\r\n </div>\r\n <!-- Character count -->\r\n <div class=\"char-count-row\" *ngIf=\"field.uiConfig?.maxCharacters || field.validationRules?.maxLength\">\r\n <div class=\"hint-text\" *ngIf=\"field.hint || field.helpText\">{{ field.hint || field.helpText }}</div>\r\n <div class=\"char-count\">\r\n {{ getCharacterCount(field.name) }} / {{ field.uiConfig?.maxCharacters ||\r\n field.validationRules?.maxLength }} Characters\r\n </div>\r\n </div>\r\n <div class=\"hint-text mt-2\"\r\n *ngIf=\"(field.hint || field.helpText) && !field.uiConfig?.maxCharacters && !field.validationRules?.maxLength\">\r\n {{ field.hint || field.helpText }}\r\n </div>\r\n </div>\r\n\r\n <!-- Textarea -->\r\n <div *ngIf=\"field.type === 'textarea'\" class=\"field-container\">\r\n <div class=\"field-label\" *ngIf=\"field.label\">\r\n {{ field.label }}\r\n <span class=\"text-danger\" *ngIf=\"field.required || field.mandatory\">*</span>\r\n </div>\r\n <textarea [formControlName]=\"field.name\" [placeholder]=\"field.placeholder || ''\" [readonly]=\"field.readonly\"\r\n class=\"form-input form-textarea\" rows=\"4\"\r\n [class.is-invalid]=\"group.get(field.name)?.touched && group.get(field.name)?.invalid\"\r\n [maxlength]=\"field.validationRules?.maxLength || field.uiConfig?.maxCharacters\"></textarea>\r\n <!-- Character count -->\r\n <div class=\"char-count-row\" *ngIf=\"field.uiConfig?.maxCharacters || field.validationRules?.maxLength\">\r\n <div class=\"hint-text\" *ngIf=\"field.hint || field.helpText\">{{ field.hint || field.helpText }}</div>\r\n <div class=\"char-count\">\r\n {{ getCharacterCount(field.name) }} / {{ field.uiConfig?.maxCharacters ||\r\n field.validationRules?.maxLength }} Characters\r\n </div>\r\n </div>\r\n <div class=\"hint-text mt-2\"\r\n *ngIf=\"(field.hint || field.helpText) && !field.uiConfig?.maxCharacters && !field.validationRules?.maxLength\">\r\n {{ field.hint || field.helpText }}\r\n </div>\r\n </div>\r\n\r\n <!-- Select / Dropdown -->\r\n <div *ngIf=\"field.type === 'select' || field.type === 'dropdown'\" class=\"field-container\">\r\n <div class=\"field-label\" *ngIf=\"field.label\">\r\n {{ field.label }}\r\n <span class=\"text-danger\" *ngIf=\"field.required || field.mandatory\">*</span>\r\n </div>\r\n <select [formControlName]=\"field.name\" class=\"form-input\"\r\n [class.is-invalid]=\"group.get(field.name)?.touched && group.get(field.name)?.invalid\">\r\n <option value=\"\" disabled selected *ngIf=\"field.placeholder\">{{ field.placeholder }}</option>\r\n <option value=\"\" disabled selected *ngIf=\"!field.placeholder\">Select</option>\r\n <option *ngFor=\"let opt of getFieldOptions(field)\" [value]=\"opt.value\">{{ opt.label }}</option>\r\n </select>\r\n <div class=\"hint-text mt-2\" *ngIf=\"field.hint || field.helpText\">{{ field.hint || field.helpText }}</div>\r\n </div>\r\n\r\n <!-- Date -->\r\n <div *ngIf=\"field.type === 'date'\" class=\"field-container\">\r\n <div class=\"field-label\" *ngIf=\"field.label\">\r\n {{ field.label }}\r\n <span class=\"text-danger\" *ngIf=\"field.required || field.mandatory\">*</span>\r\n </div>\r\n <div class=\"relative\">\r\n <input matInput [matDatepicker]=\"picker\" [formControlName]=\"field.name\"\r\n [placeholder]=\"field.placeholder || ''\" class=\"form-input\"\r\n [class.is-invalid]=\"group.get(field.name)?.touched && group.get(field.name)?.invalid\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\" class=\"date-toggle\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </div>\r\n <div class=\"hint-text mt-2\" *ngIf=\"field.hint || field.helpText\">{{ field.hint || field.helpText }}</div>\r\n </div>\r\n\r\n <!-- Radio -->\r\n <div *ngIf=\"field.type === 'radio'\" class=\"radio-group-container\"\r\n [class.is-invalid]=\"group.get(field.name)?.touched && group.get(field.name)?.invalid\">\r\n <label class=\"field-label\">\r\n {{ field.label }}\r\n <span class=\"text-danger\" *ngIf=\"field.required || field.mandatory\">*</span>\r\n </label>\r\n <mat-radio-group [formControlName]=\"field.name\" class=\"radio-group\">\r\n <mat-radio-button *ngFor=\"let opt of getFieldOptions(field)\" [value]=\"opt.value\" class=\"radio-button\">\r\n {{ opt.label }}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n <div class=\"hint-text mt-2\" *ngIf=\"field.hint || field.helpText\">{{ field.hint || field.helpText }}</div>\r\n </div>\r\n\r\n <!-- Composite Field (Sub-groups) -->\r\n <div *ngIf=\"field.type === 'composite'\" class=\"field-container\">\r\n <div class=\"field-label\" *ngIf=\"field.label\">\r\n {{ field.label }}\r\n <span class=\"text-danger\" *ngIf=\"field.required || field.mandatory\">*</span>\r\n </div>\r\n <div class=\"composite-container\">\r\n <ng-container *ngFor=\"let sub of field.subFields; let last = last\">\r\n <div class=\"composite-sub-field\" style=\"flex: 1;\">\r\n <div class=\"field-label\" *ngIf=\"sub.label\"\r\n style=\"font-size: 0.75rem; font-weight: normal; margin-bottom: 0.25rem;\">\r\n {{ sub.label }}\r\n </div>\r\n <div class=\"input-wrapper\">\r\n <input [type]=\"sub.type\" [formControlName]=\"sub.name\" [placeholder]=\"sub.placeholder || ''\"\r\n [readonly]=\"sub.readonly\" class=\"form-input\"\r\n [class.is-invalid]=\"group.get(sub.name)?.touched && group.get(sub.name)?.invalid\">\r\n <div class=\"input-suffix\" [class.color-suffix]=\"sub.suffixText === '%'\">\r\n <span class=\"suffix-text\" *ngIf=\"sub.suffixText\">{{ sub.suffixText }}</span>\r\n <mat-icon *ngIf=\"sub.readonly\" class=\"lock-icon\">lock_outline</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Adjust separator alignment if labels are present -->\r\n <span class=\"separator\" *ngIf=\"!last && field.separator\"\r\n [style.padding-top]=\"sub.label ? '1.25rem' : '0'\">{{ field.separator }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"hint-text mt-2\" *ngIf=\"field.hint || field.helpText\">{{ field.hint || field.helpText }}</div>\r\n <div class=\"error-text text-danger text-small mt-1\" *ngIf=\"group.errors?.['invalid_minMax_' + field.name]\">\r\n Min value cannot be greater than Max value.\r\n </div>\r\n <div class=\"error-text text-danger text-small mt-1\"\r\n *ngIf=\"group.errors?.['invalid_percentageTotal_' + field.name]\">\r\n Total percentage must be 100%.\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- File Upload -->\r\n <div *ngIf=\"field.type === 'file'\" class=\"field-container\">\r\n <div class=\"field-label\" *ngIf=\"field.label\">\r\n {{ field.label }}\r\n <span class=\"text-danger\" *ngIf=\"field.required || field.mandatory\">*</span>\r\n </div>\r\n\r\n <!-- Upload Box -->\r\n <div class=\"upload-box\" (click)=\"fileInput.click()\"\r\n [class.is-invalid]=\"group.get(field.name)?.touched && group.get(field.name)?.invalid\"\r\n *ngIf=\"!field.uploadedFiles || field.uploadedFiles.length === 0 || field.multiple\">\r\n <mat-icon class=\"upload-icon\">cloud_upload</mat-icon>\r\n <div class=\"upload-text\">Click to upload File</div>\r\n <div class=\"upload-hint\">PDF, DOCX, JPG, PNG (Max 5MB)</div>\r\n <input #fileInput type=\"file\" [attr.multiple]=\"field.multiple ? true : null\" [attr.accept]=\"field.accept\"\r\n (change)=\"onFileChange($event, field)\" style=\"display: none;\">\r\n </div>\r\n\r\n <!-- Uploaded Files List -->\r\n <div class=\"uploaded-files-list\" *ngIf=\"field.uploadedFiles && field.uploadedFiles.length > 0\">\r\n <div class=\"uploaded-file-item\" *ngFor=\"let file of field.uploadedFiles; let i = index\">\r\n <div class=\"file-icon\">\r\n <mat-icon class=\"pdf-icon\" *ngIf=\"file.type === 'application/pdf'\">picture_as_pdf</mat-icon>\r\n <mat-icon class=\"doc-icon\"\r\n *ngIf=\"file.type.includes('word') || file.type.includes('document')\">description</mat-icon>\r\n <mat-icon class=\"img-icon\" *ngIf=\"file.type.includes('image')\">image</mat-icon>\r\n <mat-icon class=\"file-icon-default\"\r\n *ngIf=\"!file.type.includes('pdf') && !file.type.includes('word') && !file.type.includes('document') && !file.type.includes('image')\">insert_drive_file</mat-icon>\r\n </div>\r\n <div class=\"file-info\">\r\n <div class=\"file-name\">{{ file.name }}</div>\r\n <div class=\"file-size\">{{ (file.size / 1024).toFixed(2) }} KB</div>\r\n </div>\r\n <button mat-icon-button color=\"warn\" type=\"button\" (click)=\"removeFile(field, i)\"\r\n class=\"remove-file-btn\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</ng-template>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { ConfigurableFormComponent } from './component/configurable-form.component';\r\nimport { MaterialModule } from '../material/material.module';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n HttpClientModule,\r\n MaterialModule,\r\n ConfigurableFormComponent\r\n ],\r\n exports: [\r\n ConfigurableFormComponent\r\n ]\r\n})\r\nexport class ConfigurableFormModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MaterialModule } from './modules/material/material.module';\r\n\r\nimport { CardsModule } from './modules/cards/cards.module';\r\nimport { AlertModule } from './modules/alert/alert.module';\r\nimport { ButtonModule } from './modules/button/button.module';\r\nimport { ConfirmationModalModule } from './modules/confirmation-modal/confirmation-modal.module';\r\nimport { FilterSidebarModule } from './modules/filter-sidebar/filter-sidebar.module';\r\nimport { SummaryCardModule } from './modules/summary-card/summary-card.module';\r\nimport { ConfigurableFormModule } from './modules/configurable-form/configurable-form.module';\r\n\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n MaterialModule,\r\n CardsModule, AlertModule, ButtonModule, ConfirmationModalModule, FilterSidebarModule,\r\n SummaryCardModule,\r\n ConfigurableFormModule,\r\n ],\r\n exports: [\r\n MaterialModule,\r\n CardsModule, AlertModule, ButtonModule, ConfirmationModalModule, FilterSidebarModule,\r\n SummaryCardModule,\r\n ConfigurableFormModule,\r\n ],\r\n})\r\nexport class SharedUiModule { }\r\n","/**\n * Utility functions for LocalStorage operations\n */\nexport const getLocalStorageItem = (key: string): string | null => {\n return localStorage.getItem(key);\n};\n\nexport const setLocalStorageItem = (key: string, value: string): void => {\n localStorage.setItem(key, value);\n};\n\nexport const removeLocalStorageItem = (key: string): void => {\n localStorage.removeItem(key);\n};\n\nexport const clearLocalStorage = (): void => {\n localStorage.clear();\n};\n\n/**\n * Utility functions for SessionStorage operations\n */\nexport const getSessionStorageItem = (key: string): string | null => {\n return sessionStorage.getItem(key);\n};\n\nexport const setSessionStorageItem = (key: string, value: string): void => {\n sessionStorage.setItem(key, value);\n};\n\nexport const removeSessionStorageItem = (key: string): void => {\n sessionStorage.removeItem(key);\n};\n\nexport const clearSessionStorage = (): void => {\n sessionStorage.clear();\n};\n","import { FormConfig } from './configurable-form.model';\r\n\r\n/**\r\n * Example: Basic Form Configuration\r\n * This is a generic example for testing and demonstration purposes.\r\n */\r\nexport const EXAMPLE_FORM_CONFIG: FormConfig = {\r\n sections: [\r\n {\r\n sectionTitle: 'User Information',\r\n fields: [\r\n {\r\n name: 'fullName',\r\n label: 'Full Name',\r\n type: 'text',\r\n placeholder: 'Enter full name',\r\n required: true,\r\n class: 'col-12'\r\n },\r\n {\r\n name: 'email',\r\n label: 'Email Address',\r\n type: 'email',\r\n placeholder: 'Enter email address',\r\n required: true,\r\n class: 'col-6'\r\n },\r\n {\r\n name: 'phone',\r\n label: 'Phone Number',\r\n type: 'tel',\r\n placeholder: '+91 9999999999',\r\n class: 'col-6'\r\n },\r\n {\r\n name: 'role',\r\n label: 'Role',\r\n type: 'dropdown',\r\n placeholder: 'Select Role',\r\n options: [\r\n { label: 'Admin', value: 'admin' },\r\n { label: 'User', value: 'user' },\r\n { label: 'Guest', value: 'guest' }\r\n ],\r\n class: 'col-12'\r\n }\r\n ]\r\n },\r\n {\r\n sectionTitle: 'Preferences',\r\n fields: [\r\n {\r\n name: 'notifications',\r\n label: 'Receive Notifications',\r\n type: 'radio',\r\n options: [\r\n { label: 'Yes', value: 'yes' },\r\n { label: 'No', value: 'no' }\r\n ],\r\n value: 'yes',\r\n class: 'col-12'\r\n }\r\n ]\r\n },\r\n {\r\n sectionTitle: 'Documents',\r\n fields: [\r\n {\r\n name: 'profilePicture',\r\n label: 'Profile Picture',\r\n type: 'file',\r\n accept: '.jpg,.png',\r\n multiple: false,\r\n helpText: 'Upload a single profile picture (Max 5MB)',\r\n class: 'col-12'\r\n },\r\n {\r\n name: 'certificates',\r\n label: 'Certificates',\r\n type: 'file',\r\n accept: '.pdf,.doc,.docx',\r\n multiple: true,\r\n helpText: 'Upload multiple certificates (Max 5MB each)',\r\n class: 'col-12'\r\n }\r\n ]\r\n }\r\n ],\r\n submitLabel: 'Save',\r\n cancelLabel: 'Cancel',\r\n entityType: 'User'\r\n};\r\n\r\n/**\r\n * Example: Target Group Configuration\r\n * Demonstrates composite fields for Age Group and Gender Split\r\n */\r\nexport const TARGET_GROUP_CONFIG: FormConfig = {\r\n sections: [\r\n {\r\n sectionTitle: 'Target Group Settings',\r\n fields: [\r\n {\r\n name: 'targetAgeGroup',\r\n label: 'Target Age Group',\r\n type: 'composite',\r\n separator: '-',\r\n subFields: [\r\n {\r\n label: \"Min Age\",\r\n name: 'minAge',\r\n type: 'number',\r\n placeholder: 'Min Age',\r\n validationRules: { min: 0 }\r\n },\r\n {\r\n label: \"Max Age\",\r\n name: 'maxAge',\r\n type: 'number',\r\n placeholder: 'Max Age',\r\n validationRules: { min: 0 }\r\n }\r\n ],\r\n compositeValidationRule: 'minMax',\r\n class: 'col-12'\r\n },\r\n {\r\n name: 'genderSplit',\r\n label: 'Target Gender Split',\r\n type: 'composite',\r\n subFields: [\r\n {\r\n label: \"Male\",\r\n name: 'malePercentage',\r\n type: 'number',\r\n placeholder: 'Male',\r\n suffixText: '%',\r\n validationRules: { min: 0, max: 100 }\r\n },\r\n {\r\n label: \"Female\",\r\n name: 'femalePercentage',\r\n type: 'number',\r\n placeholder: 'Female',\r\n suffixText: '%',\r\n validationRules: { min: 0, max: 100 }\r\n }\r\n ],\r\n compositeValidationRule: 'percentageTotal',\r\n class: 'col-12'\r\n }\r\n ]\r\n }\r\n ],\r\n submitLabel: 'Save Configuration',\r\n cancelLabel: 'Cancel'\r\n};\r\n","export const DEFAULT_ITEMS_PER_PAGE = 10;\r\nexport const DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50];\r\nexport const PAGINATION_THEME_DEFAULT = 'theme-1';\r\nexport const PAGINATION_THEME_DARK = 'theme-2';\r\n\r\n// Nav\r\nexport const NAV_VARIANT_DEFAULT: 'filled' | 'underline' | 'pills' = 'filled';\r\nexport const NAV_ORIENTATION_DEFAULT: 'horizontal' | 'vertical' = 'horizontal';\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { DEFAULT_ITEMS_PER_PAGE, DEFAULT_PAGE_SIZE_OPTIONS, PAGINATION_THEME_DEFAULT } from '../../../../utils/constants';\n\nexport interface PaginationLabels {\n items: string;\n of: string;\n perPage: string;\n}\n\n@Component({\n selector: 'lib-pagination',\n templateUrl: './pagination.component.html',\n styleUrls: ['./pagination.component.scss'],\n standalone: false\n})\nexport class PaginationComponent implements OnInit, OnChanges {\n @Input() totalItems: number = 0;\n @Input() itemsPerPage: number = DEFAULT_ITEMS_PER_PAGE;\n @Input() currentPage: number = 1;\n @Input() pageSizeOptions: number[] = DEFAULT_PAGE_SIZE_OPTIONS;\n @Input() theme: 'theme-1' | 'theme-2' = PAGINATION_THEME_DEFAULT;\n @Input() labels: PaginationLabels = {\n items: 'items',\n of: 'of',\n perPage: 'Per Page'\n };\n\n @Output() pageChange = new EventEmitter<number>();\n @Output() itemsPerPageChange = new EventEmitter<number>();\n\n totalPages: number = 0;\n pages: (number | string)[] = [];\n startItem: number = 0;\n endItem: number = 0;\n\n constructor() { }\n\n ngOnInit(): void {\n this.calculatePagination();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['totalItems'] || changes['itemsPerPage'] || changes['currentPage']) {\n this.calculatePagination();\n }\n }\n\n calculatePagination(): void {\n this.totalPages = Math.ceil(this.totalItems / this.itemsPerPage);\n\n // Ensure current page is valid\n if (this.currentPage < 1) {\n this.currentPage = 1;\n } else if (this.currentPage > this.totalPages && this.totalPages > 0) {\n this.currentPage = this.totalPages;\n }\n\n this.startItem = (this.currentPage - 1) * this.itemsPerPage + 1;\n this.endItem = Math.min(this.currentPage * this.itemsPerPage, this.totalItems);\n\n if (this.totalItems === 0) {\n this.startItem = 0;\n this.endItem = 0;\n }\n\n this.pages = this.getVisiblePages(this.currentPage, this.totalPages);\n }\n\n getVisiblePages(current: number, total: number): (number | string)[] {\n if (total <= 7) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n if (current <= 4) {\n return [1, 2, 3, 4, 5, '...', total];\n }\n\n if (current >= total - 3) {\n return [1, '...', total - 4, total - 3, total - 2, total - 1, total];\n }\n\n return [1, '...', current - 1, current, current + 1, '...', total];\n }\n\n onPageChange(page: number | string): void {\n if (typeof page === 'string') return;\n if (page < 1 || page > this.totalPages || page === this.currentPage) return;\n \n this.pageChange.emit(page);\n }\n\n onItemsPerPageChange(event: Event): void {\n const target = event.target as HTMLSelectElement;\n const newSize = Number(target.value);\n this.itemsPerPageChange.emit(newSize);\n }\n\n nextPage(): void {\n if (this.currentPage < this.totalPages) {\n this.onPageChange(this.currentPage + 1);\n }\n }\n\n prevPage(): void {\n if (this.currentPage > 1) {\n this.onPageChange(this.currentPage - 1);\n }\n }\n}\n","<div class=\"cc-pagination\" [ngClass]=\"theme\">\n <!-- Left Side: Items Info & Per Page -->\n <div class=\"pagination-left\" *ngIf=\"pageSizeOptions.length > 1 || totalItems > 0\">\n <span class=\"items-info\">\n {{ startItem }}-{{ endItem }} {{ labels.of }} {{ totalItems }} {{ labels.items }}\n </span>\n\n <div class=\"per-page-selector\" *ngIf=\"pageSizeOptions.length > 1\">\n <div class=\"select-wrapper\">\n <select [value]=\"itemsPerPage\" (change)=\"onItemsPerPageChange($event)\">\n <option *ngFor=\"let option of pageSizeOptions\" [value]=\"option\">\n {{ option }}\n </option>\n </select>\n <span class=\"select-arrow\"></span>\n </div>\n <span class=\"per-page-label\">{{ labels.perPage }}</span>\n </div>\n </div>\n\n <!-- Right Side: Page Controls -->\n <div class=\"pagination-right\">\n <button \n class=\"page-btn prev-btn\" \n [disabled]=\"currentPage === 1\" \n (click)=\"prevPage()\"\n aria-label=\"Previous Page\">\n <span class=\"icon\">‹</span>\n </button>\n\n <div class=\"page-numbers\">\n <ng-container *ngFor=\"let page of pages\">\n <button \n *ngIf=\"page !== '...'\"\n class=\"page-btn number-btn\" \n [class.active]=\"page === currentPage\"\n (click)=\"onPageChange(page)\">\n {{ page }}\n </button>\n <span *ngIf=\"page === '...'\" class=\"ellipsis\">...</span>\n </ng-container>\n </div>\n\n <button \n class=\"page-btn next-btn\" \n [disabled]=\"currentPage === totalPages || totalPages === 0\" \n (click)=\"nextPage()\"\n aria-label=\"Next Page\">\n <span class=\"icon\">›</span>\n </button>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PaginationComponent } from './components/pagination/pagination.component';\n\n\n@NgModule({\n declarations: [\n PaginationComponent\n ],\n imports: [\n CommonModule\n ],\n exports: [\n PaginationComponent\n ]\n})\nexport class PaginationModule { }\n","import { Component, EventEmitter, Input, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { NAV_VARIANT_DEFAULT, NAV_ORIENTATION_DEFAULT } from '../../../../utils/constants';\r\nimport { NavStyleConfig } from '../../nav.models';\r\n\r\nexport interface NavItem {\r\n id: string | number;\r\n label: string;\r\n icon?: string;\r\n badge?: string | number;\r\n disabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-nav',\r\n templateUrl: './nav.component.html',\r\n styleUrls: ['./nav.component.scss'],\r\n standalone: false\r\n})\r\nexport class NavComponent implements OnChanges {\r\n @Input() items: NavItem[] = [];\r\n @Input() activeId: string | number | null = null;\r\n @Input() variant: 'filled' | 'underline' | 'pills' = NAV_VARIANT_DEFAULT;\r\n @Input() orientation: 'horizontal' | 'vertical' = NAV_ORIENTATION_DEFAULT;\r\n @Input() styleConfig: NavStyleConfig = {};\r\n\r\n @Output() selectionChange = new EventEmitter<NavItem>();\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['styleConfig']) {\r\n console.log(' [NavComponent] styleConfig changed:', this.styleConfig);\r\n console.log(' [NavComponent] computedStyles:', this.computedStyles);\r\n }\r\n }\r\n\r\n get computedStyles(): { [key: string]: string | undefined } {\r\n const c = this.styleConfig;\r\n return {\r\n // Container (direct CSS)\r\n 'width': c.width,\r\n 'box-shadow': c.boxShadow,\r\n\r\n // Container (CSS Variables)\r\n '--cc-nav-container-bg': c.backgroundColor,\r\n '--cc-nav-container-radius': c.borderRadius,\r\n '--cc-nav-container-border': c.border,\r\n '--cc-nav-container-padding': c.padding,\r\n '--cc-nav-container-gap': c.gap,\r\n\r\n // Item (CSS Variables)\r\n '--cc-nav-font-size': c.fontSize,\r\n '--cc-nav-font-weight': c.fontWeight,\r\n '--cc-nav-item-color': c.itemColor,\r\n '--cc-nav-item-radius': c.itemRadius,\r\n '--cc-nav-item-padding': c.itemPadding,\r\n\r\n // Active Item (CSS Variables)\r\n '--cc-nav-item-active-bg': c.activeItemBg,\r\n '--cc-nav-item-active-color': c.activeItemColor,\r\n '--cc-nav-item-active-font-weight': c.activeItemFontWeight,\r\n '--cc-nav-item-active-border-color': c.activeItemBorderColor,\r\n\r\n // Hover Item (CSS Variables)\r\n '--cc-nav-item-hover-bg': c.hoverItemBg,\r\n '--cc-nav-item-hover-color': c.hoverItemColor,\r\n\r\n // Badge (CSS Variables)\r\n '--cc-nav-badge-bg': c.badgeBg,\r\n '--cc-nav-badge-color': c.badgeColor,\r\n };\r\n }\r\n\r\n onItemClick(item: NavItem): void {\r\n if (item.disabled) return;\r\n if (item.id === this.activeId) return;\r\n\r\n this.selectionChange.emit(item);\r\n }\r\n\r\n trackById(index: number, item: NavItem): string | number {\r\n return item.id;\r\n }\r\n}\r\n","<nav\r\n class=\"cc-nav\"\r\n [ngClass]=\"[variant, orientation]\"\r\n [ngStyle]=\"computedStyles\"\r\n role=\"tablist\"\r\n [attr.aria-orientation]=\"orientation\">\r\n\r\n <button\r\n *ngFor=\"let item of items; trackBy: trackById\"\r\n class=\"cc-nav-item\"\r\n [class.active]=\"item.id === activeId\"\r\n [class.disabled]=\"item.disabled\"\r\n [disabled]=\"item.disabled\"\r\n role=\"tab\"\r\n [attr.aria-selected]=\"item.id === activeId\"\r\n [attr.aria-disabled]=\"item.disabled || null\"\r\n (click)=\"onItemClick(item)\">\r\n\r\n <!-- Icon (optional) -->\r\n <span *ngIf=\"item.icon\" class=\"cc-nav-item-icon\">\r\n <i [ngClass]=\"item.icon\"></i>\r\n </span>\r\n\r\n <!-- Label -->\r\n <span class=\"cc-nav-item-label\">{{ item.label }}</span>\r\n\r\n <!-- Badge (optional) -->\r\n <span *ngIf=\"item.badge != null\" class=\"cc-nav-item-badge\">\r\n {{ item.badge }}\r\n </span>\r\n\r\n </button>\r\n\r\n</nav>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NavComponent } from './components/nav/nav.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n NavComponent\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n NavComponent\r\n ]\r\n})\r\nexport class NavModule { }\r\n","/*\r\n * Public API Surface of shared-ui\r\n */\r\n\r\nexport * from './lib/shared-ui.module';\r\nexport * from './lib/modules/material/material.module';\r\nexport * from './lib/utils/storage.utils';\r\nexport * from './lib/modules/cards/cards.module';\r\nexport * from './lib/modules/cards/cards.models';\r\nexport * from './lib/modules/cards/components/card-type-1/card-type-1.component';\r\nexport * from './lib/modules/cards/components/card-type-2/card-type-2.component';\r\nexport * from './lib/modules/summary-card/summary-card.module';\r\nexport * from './lib/modules/summary-card/components/summary-card/summary-card.component';\r\nexport * from './lib/modules/configurable-form/configurable-form.module';\r\nexport * from './lib/modules/configurable-form/component/configurable-form.component';\r\n// Export Configurable Form resources namespaced to avoid collisions\r\nexport * from './lib/modules/configurable-form/configurable-form.model';\r\nexport * as ConfigurableFormExamples from './lib/modules/configurable-form/configurable-form.examples';\r\n\r\nexport * from './lib/modules/pagination/pagination.module';\r\nexport * from './lib/modules/pagination/components/pagination/pagination.component';\r\nexport * from './lib/modules/nav/nav.module';\r\nexport * from './lib/modules/nav/components/nav/nav.component';\r\nexport * from './lib/modules/nav/nav.models';\r\nexport * from './lib/utils/constants';\r\nexport * from './lib/modules/alert/alert.module';\r\nexport * from './lib/modules/alert/components/alert/alert.component';\r\nexport * from './lib/modules/button/button.module';\r\nexport * from './lib/modules/button/components/button/button.component';\r\nexport * from './lib/modules/confirmation-modal/confirmation-modal.module';\r\nexport * from './lib/modules/confirmation-modal/confirmation-modal.models';\r\nexport * from './lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component';\r\nexport * from './lib/modules/filter-sidebar/filter-sidebar.module';\r\nexport * from './lib/modules/filter-sidebar/filter-sidebar.models';\r\nexport * from './lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component';\r\n\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4","i7","i8","i9","i10"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"commons-shared-web-ui.mjs","sources":["../../../src/lib/modules/material/material.module.ts","../../../src/lib/modules/cards/components/card-type-1/card-type-1.component.ts","../../../src/lib/modules/cards/components/card-type-1/card-type-1.component.html","../../../src/lib/modules/cards/components/card-type-2/card-type-2.component.ts","../../../src/lib/modules/cards/components/card-type-2/card-type-2.component.html","../../../src/lib/modules/cards/cards.module.ts","../../../src/lib/modules/alert/components/alert/alert.component.ts","../../../src/lib/modules/alert/components/alert/alert.component.html","../../../src/lib/modules/alert/alert.module.ts","../../../src/lib/modules/button/components/button/button.component.ts","../../../src/lib/modules/button/components/button/button.component.html","../../../src/lib/modules/button/button.module.ts","../../../src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.ts","../../../src/lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component.html","../../../src/lib/modules/confirmation-modal/confirmation-modal.module.ts","../../../src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.ts","../../../src/lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component.html","../../../src/lib/modules/filter-sidebar/filter-sidebar.module.ts","../../../src/lib/modules/summary-card/components/summary-card/summary-card.component.ts","../../../src/lib/modules/summary-card/components/summary-card/summary-card.component.html","../../../src/lib/modules/summary-card/summary-card.module.ts","../../../src/lib/modules/configurable-form/component/configurable-form.component.ts","../../../src/lib/modules/configurable-form/component/configurable-form.component.html","../../../src/lib/modules/configurable-form/configurable-form.module.ts","../../../src/lib/shared-ui.module.ts","../../../src/lib/utils/storage.utils.ts","../../../src/lib/modules/configurable-form/configurable-form.examples.ts","../../../src/lib/utils/constants.ts","../../../src/lib/modules/pagination/components/pagination/pagination.component.ts","../../../src/lib/modules/pagination/components/pagination/pagination.component.html","../../../src/lib/modules/pagination/pagination.module.ts","../../../src/lib/modules/nav/components/nav/nav.component.ts","../../../src/lib/modules/nav/components/nav/nav.component.html","../../../src/lib/modules/nav/nav.module.ts","../../../src/public-api.ts","../../../src/commons-shared-web-ui.ts"],"sourcesContent":["import { NgModule } from \"@angular/core\";\nimport { MatCardModule } from '@angular/material/card';\nimport { MatSnackBarModule } from \"@angular/material/snack-bar\";\nimport { MatCheckboxModule } from '@angular/material/checkbox'\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatDialogModule } from \"@angular/material/dialog\";\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatNativeDateModule } from \"@angular/material/core\";\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport {MatSliderModule} from '@angular/material/slider';\nimport {MatListModule} from '@angular/material/list';\nimport {MatChipsModule} from '@angular/material/chips';\nimport {MatPaginatorModule} from '@angular/material/paginator';\nimport {MatTableModule} from '@angular/material/table';\nimport {MatExpansionModule} from '@angular/material/expansion';\nimport {CdkAccordionModule} from '@angular/cdk/accordion';\nimport { MatSortModule } from \"@angular/material/sort\";\nimport {MatAutocompleteModule} from '@angular/material/autocomplete';\nimport {MatSlideToggleModule} from '@angular/material/slide-toggle';\nimport {MatButtonToggleModule} from '@angular/material/button-toggle';\n\n@NgModule({\n imports: [\n MatCardModule,\n MatSnackBarModule,\n MatCheckboxModule,\n MatDividerModule,\n MatSelectModule,\n MatRadioModule,\n MatDialogModule,\n MatFormFieldModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatInputModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatTabsModule,\n MatButtonModule,\n MatMenuModule,\n MatTabsModule,\n MatProgressBarModule,\n MatTooltipModule,\n MatSliderModule,\n MatListModule,\n MatChipsModule,\n MatSortModule,\n MatAutocompleteModule,\n MatSlideToggleModule,\n MatButtonToggleModule\n ],\n exports: [\n MatCardModule,\n MatSnackBarModule,\n MatCheckboxModule,\n MatDividerModule,\n MatSelectModule,\n MatRadioModule,\n MatDialogModule,\n MatFormFieldModule,\n MatDatepickerModule,\n MatNativeDateModule,\n MatInputModule,\n MatIconModule,\n MatProgressSpinnerModule,\n MatTabsModule,\n MatButtonModule,\n MatMenuModule,\n MatTabsModule,\n MatProgressBarModule,\n MatTooltipModule,\n MatSliderModule,\n MatListModule,\n MatChipsModule,\n MatPaginatorModule,\n MatTableModule,\n MatExpansionModule,\n CdkAccordionModule,\n MatSortModule,\n MatAutocompleteModule,\n MatSlideToggleModule,\n MatButtonToggleModule\n ]\n})\nexport class MaterialModule { }\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CardType1Config } from '../../cards.models';\n\n@Component({\n selector: 'lib-card-type-1',\n templateUrl: './card-type-1.component.html',\n styleUrls: ['./card-type-1.component.scss'],\n standalone: false\n})\nexport class CardType1Component {\n @Input() config!: CardType1Config;\n @Input() theme: 'theme-1' | 'theme-2' = 'theme-1';\n @Output() cardClick = new EventEmitter<void>();\n\n get valueStyle() {\n return this.config.valueColor ? { color: this.config.valueColor } : {};\n }\n}\n","<div [class]=\"'cc-card ' + theme\" [style.width]=\"config.width || '100%'\" [style.height]=\"config.height || '100%'\" (click)=\"cardClick.emit()\">\n <div class=\"card-content\">\n <div class=\"card-label\">{{ config.label }}</div>\n <div class=\"card-value\" [ngStyle]=\"valueStyle\">{{ config.value }}</div>\n <div\n *ngIf=\"config.subtext\"\n class=\"card-subtext\"\n [ngClass]=\"config.subtextClass\"\n >\n {{ config.subtext }}\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { CardType2Config } from '../../cards.models';\n\n@Component({\n selector: 'lib-card-type-2',\n templateUrl: './card-type-2.component.html',\n styleUrls: ['./card-type-2.component.scss'],\n standalone: false\n})\nexport class CardType2Component {\n @Input() config!: CardType2Config;\n @Input() theme: 'theme-1' | 'theme-2' = 'theme-1';\n @Output() cardClick = new EventEmitter<void>();\n\n get iconBoxStyle() {\n if (this.config.iconUrl) {\n return { backgroundColor: 'transparent' };\n }\n return this.config.iconBackgroundColor ? { backgroundColor: this.config.iconBackgroundColor } : {};\n }\n\n get iconStyle() {\n return this.config.iconColor ? { color: this.config.iconColor } : {};\n }\n}\n","<div [class]=\"'cc-card ' + theme\" [style.width]=\"config.width || '100%'\" [style.height]=\"config.height || '100%'\" (click)=\"cardClick.emit()\">\n <div class=\"card-content-wrapper\">\n <div class=\"icon-box\" [ngStyle]=\"iconBoxStyle\">\n <img *ngIf=\"config.iconUrl; else matIconTpl\" [src]=\"config.iconUrl\" class=\"icon-image\" alt=\"icon\">\n <ng-template #matIconTpl>\n <mat-icon [ngStyle]=\"iconStyle\">{{ config.iconName }}</mat-icon>\n </ng-template>\n </div>\n <div class=\"text-content\">\n <div class=\"card-label\">{{ config.label }}</div>\n <div class=\"value-wrapper\">\n <span class=\"card-value\">{{ config.value }}</span>\n <span *ngIf=\"config.targetText\" class=\"card-target\">{{ config.targetText }}</span>\n </div>\n </div>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MaterialModule } from '../material/material.module';\nimport { CardType1Component } from './components/card-type-1/card-type-1.component';\nimport { CardType2Component } from './components/card-type-2/card-type-2.component';\n\n@NgModule({\n declarations: [\n CardType1Component,\n CardType2Component\n ],\n imports: [\n CommonModule,\n MaterialModule\n ],\n exports: [\n CardType1Component,\n CardType2Component\n ]\n})\nexport class CardsModule { }\n","import { Component, Input, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nexport type AlertVariant = 'info' | 'warning' | 'warning-shadow' | 'success' | 'error';\r\nexport type IconInput = boolean | string | { type: 'material' | 'fontawesome' | 'img'; value: string };\r\n\r\n@Component({\r\n selector: 'lib-alert',\r\n templateUrl: './alert.component.html',\r\n styleUrls: ['./alert.component.scss'],\r\n standalone: false\r\n})\r\nexport class AlertComponent implements OnInit {\r\n @Input() variant: AlertVariant = 'info';\r\n @Input() title: string = '';\r\n @Input() message: string = '';\r\n @Input() icon: IconInput = true;\r\n @Input() customIcon: string = ''; // New input for custom class\r\n\r\n // Customization Inputs\r\n @Input() width?: string;\r\n @Input() height?: string;\r\n @Input() borderRadius?: string;\r\n @Input() padding?: string;\r\n @Input() gap?: string;\r\n @Input() backgroundColor?: string;\r\n @Input() color?: string; // New input for custom text color\r\n @Input() borderColor?: string;\r\n @Input() fontSize?: string;\r\n @Input() fontWeight?: string;\r\n @Input() boxShadow?: string;\r\n\r\n // Granular Border Radius Customization\r\n @Input() borderTopLeftRadius?: string;\r\n @Input() borderTopRightRadius?: string;\r\n @Input() borderBottomLeftRadius?: string;\r\n @Input() borderBottomRightRadius?: string;\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n get isDefaultIcon(): boolean {\r\n return this.icon === true;\r\n }\r\n\r\n get isStringIcon(): boolean {\r\n return typeof this.icon === 'string';\r\n }\r\n\r\n get isObjectIcon(): boolean {\r\n return typeof this.icon === 'object' && this.icon !== null;\r\n }\r\n\r\n get iconString(): string {\r\n return typeof this.icon === 'string' ? this.icon : '';\r\n }\r\n\r\n get isImgIcon(): boolean {\r\n const icon = this.icon;\r\n if (typeof icon === 'string') {\r\n return icon.includes('/') || icon.includes('.') || icon.startsWith('http');\r\n }\r\n return typeof icon === 'object' && icon !== null && icon.type === 'img';\r\n }\r\n\r\n get iconObject(): { type: string; value: string } {\r\n return typeof this.icon === 'object' ? this.icon as any : { type: '', value: '' };\r\n }\r\n\r\n get defaultIconClass(): string {\r\n switch (this.variant) {\r\n case 'success': return 'fa-solid fa-circle-check';\r\n case 'warning':\r\n case 'warning-shadow': return 'fa-solid fa-triangle-exclamation';\r\n case 'error': return 'fa-solid fa-triangle-exclamation';\r\n case 'info':\r\n default: return 'fa-solid fa-circle-info';\r\n }\r\n }\r\n}\r\n","<div class=\"cc-alert\" [ngClass]=\"'cc-alert-' + variant\" [style.width]=\"width\" [style.height]=\"height\"\r\n [style.border-radius]=\"borderRadius\" [style.border-top-left-radius]=\"borderTopLeftRadius\"\r\n [style.border-top-right-radius]=\"borderTopRightRadius\" [style.border-bottom-left-radius]=\"borderBottomLeftRadius\"\r\n [style.border-bottom-right-radius]=\"borderBottomRightRadius\" [style.padding]=\"padding\" [style.gap]=\"gap\"\r\n [style.background-color]=\"backgroundColor\" [style.color]=\"color\" [style.border-color]=\"borderColor\"\r\n [style.font-size]=\"fontSize\" [style.font-weight]=\"fontWeight\" [style.box-shadow]=\"boxShadow\">\r\n\r\n <div class=\"cc-alert-icon\" *ngIf=\"icon\">\r\n <i *ngIf=\"customIcon\" [ngClass]=\"customIcon\"></i>\r\n <i *ngIf=\"!customIcon && isDefaultIcon\" [ngClass]=\"defaultIconClass\"></i>\r\n <i *ngIf=\"!customIcon && isStringIcon && !isImgIcon\" [ngClass]=\"iconString\"></i>\r\n <img *ngIf=\"!customIcon && isStringIcon && isImgIcon\" [src]=\"iconString\" alt=\"alert icon\" />\r\n <ng-container *ngIf=\"isObjectIcon\">\r\n <i *ngIf=\"iconObject.type === 'fontawesome'\" [ngClass]=\"iconObject.value\"></i>\r\n <span *ngIf=\"iconObject.type === 'material'\" class=\"material-icons\">{{ iconObject.value }}</span>\r\n <img *ngIf=\"iconObject.type === 'img'\" [src]=\"iconObject.value\" alt=\"alert icon\" />\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"cc-alert-content\">\r\n <div class=\"cc-alert-title\" *ngIf=\"title\">{{ title }}</div>\r\n <div class=\"cc-alert-message\" *ngIf=\"message\">{{ message }}</div>\r\n <ng-content></ng-content>\r\n </div>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AlertComponent } from './components/alert/alert.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n AlertComponent\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n AlertComponent\r\n ]\r\n})\r\nexport class AlertModule { }\r\n","import { Component, Input, OnInit } from '@angular/core';\r\n\r\nexport type ButtonVariant =\r\n | 'primary'\r\n | 'warning'\r\n | 'outline'\r\n | 'secondary'\r\n | 'success'\r\n | 'danger'\r\n | 'danger-outline';\r\n\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@Component({\r\n selector: 'lib-button',\r\n templateUrl: './button.component.html',\r\n styleUrls: ['./button.component.scss'],\r\n standalone: false\r\n})\r\nexport class ButtonComponent implements OnInit {\r\n\r\n @Input() variant: ButtonVariant = 'primary';\r\n @Input() type: 'button' | 'submit' | 'reset' = 'button';\r\n @Input() disabled: boolean = false;\r\n\r\n // Customization Inputs\r\n @Input() width?: string;\r\n @Input() height?: string;\r\n @Input() borderRadius?: string;\r\n @Input() fontSize?: string;\r\n @Input() fontWeight?: string;\r\n @Input() backgroundColor?: string;\r\n @Input() color?: string;\r\n @Input() border?: string;\r\n @Input() icon: boolean | string | { type: 'material' | 'fontawesome' | 'img'; value: string } = '';\r\n\r\n constructor() { }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n get isDefaultIcon(): boolean {\r\n return this.icon === true;\r\n }\r\n\r\n get isStringIcon(): boolean {\r\n return typeof this.icon === 'string' && this.icon !== '';\r\n }\r\n\r\n get isImgIcon(): boolean {\r\n const icon = this.icon;\r\n if (typeof icon === 'string') {\r\n return icon.includes('/') || icon.includes('.') || icon.startsWith('http');\r\n }\r\n return typeof icon === 'object' && icon !== null && !!icon.value && (icon.type === 'img' || icon.value.includes('/') || icon.value.includes('.') || icon.value.startsWith('http'));\r\n }\r\n\r\n get isObjectIcon(): boolean {\r\n return typeof this.icon === 'object' && this.icon !== null;\r\n }\r\n\r\n get iconString(): string {\r\n return typeof this.icon === 'string' ? this.icon : '';\r\n }\r\n\r\n get iconObject(): { type: string; value: string } {\r\n return typeof this.icon === 'object' ? this.icon as any : { type: '', value: '' };\r\n }\r\n\r\n}\r\n","<button [type]=\"type\" [disabled]=\"disabled\" class=\"cc-btn\" [ngClass]=\"'cc-btn-' + variant\" [style.width]=\"width\"\r\n [style.height]=\"height\" [style.border-radius]=\"borderRadius\" [style.font-size]=\"fontSize\"\r\n [style.font-weight]=\"fontWeight\" [style.background-color]=\"backgroundColor\" [style.color]=\"color\"\r\n [style.border]=\"border\">\r\n <div class=\"cc-btn-icon-wrapper\" *ngIf=\"icon\">\r\n <!-- String Icons -->\r\n <ng-container *ngIf=\"isStringIcon\">\r\n <i *ngIf=\"!isImgIcon\" [ngClass]=\"iconString\" class=\"cc-btn-icon\"></i>\r\n <img *ngIf=\"isImgIcon\" [src]=\"iconString\" alt=\"button icon\" class=\"cc-btn-icon cc-btn-img-icon\" />\r\n </ng-container>\r\n\r\n <!-- Object Icons -->\r\n <ng-container *ngIf=\"isObjectIcon\">\r\n <i *ngIf=\"iconObject.type === 'fontawesome'\" [ngClass]=\"iconObject.value\" class=\"cc-btn-icon\"></i>\r\n <span *ngIf=\"iconObject.type === 'material'\" class=\"material-icons cc-btn-icon\">{{ iconObject.value }}</span>\r\n <img *ngIf=\"iconObject.type === 'img'\" [src]=\"iconObject.value\" alt=\"button icon\"\r\n class=\"cc-btn-icon cc-btn-img-icon\" />\r\n </ng-container>\r\n </div>\r\n <ng-content></ng-content>\r\n</button>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ButtonComponent } from './components/button/button.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n ButtonComponent\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n ButtonComponent\r\n ]\r\n})\r\nexport class ButtonModule { }\r\n","import {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n OnInit,\r\n OnDestroy,\r\n HostListener\r\n} from '@angular/core';\r\nimport { ConfirmationModalConfig } from '../../confirmation-modal.models';\r\n\r\n@Component({\r\n selector: 'cc-confirmation-modal',\r\n templateUrl: './confirmation-modal.component.html',\r\n styleUrls: ['./confirmation-modal.component.scss'],\r\n standalone: false\r\n})\r\nexport class ConfirmationModalComponent implements OnInit, OnDestroy {\r\n @Input() config!: ConfirmationModalConfig;\r\n @Input() isOpen = false;\r\n\r\n @Output() confirm = new EventEmitter<void>();\r\n @Output() cancel = new EventEmitter<void>();\r\n @Output() close = new EventEmitter<void>();\r\n @Output() showCodeSnippet = new EventEmitter<void>();\r\n\r\n // Default configuration\r\n private defaultConfig: Partial<ConfirmationModalConfig> = {\r\n headerTheme: 'dark', // Changed to dark as per new default requirement\r\n width: '560px',\r\n size: 'md',\r\n closeOnBackdrop: true,\r\n closeOnEsc: true,\r\n showCloseButton: true,\r\n cancelButton: {\r\n label: 'Cancel',\r\n show: true\r\n }\r\n };\r\n\r\n mergedConfig!: ConfirmationModalConfig;\r\n private previousActiveElement: HTMLElement | null = null;\r\n\r\n ngOnInit(): void {\r\n this.updateConfig();\r\n\r\n // Store currently focused element\r\n this.previousActiveElement = document.activeElement as HTMLElement;\r\n\r\n // Prevent body scroll when modal is open\r\n if (this.isOpen) {\r\n this.toggleBodyScroll(true);\r\n }\r\n }\r\n\r\n ngOnChanges(): void {\r\n this.updateConfig();\r\n if (this.isOpen !== undefined) {\r\n this.toggleBodyScroll(this.isOpen);\r\n }\r\n }\r\n\r\n private updateConfig(): void {\r\n // Merge user config with defaults\r\n this.mergedConfig = {\r\n ...this.defaultConfig,\r\n ...this.config,\r\n cancelButton: {\r\n ...this.defaultConfig.cancelButton,\r\n ...this.config.cancelButton\r\n },\r\n confirmButton: {\r\n ...this.config.confirmButton\r\n }\r\n };\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // Restore body scroll\r\n this.toggleBodyScroll(false);\r\n\r\n // Restore focus to previous element\r\n if (this.previousActiveElement) {\r\n this.previousActiveElement.focus();\r\n }\r\n }\r\n\r\n private toggleBodyScroll(disable: boolean): void {\r\n if (disable) {\r\n document.body.style.overflow = 'hidden';\r\n } else {\r\n document.body.style.overflow = '';\r\n }\r\n }\r\n\r\n @HostListener('document:keydown.escape', ['$event'])\r\n handleEscape(event: KeyboardEvent): void {\r\n if (this.isOpen && this.mergedConfig.closeOnEsc) {\r\n event.preventDefault();\r\n this.onClose();\r\n }\r\n }\r\n\r\n onBackdropClick(event: MouseEvent): void {\r\n // Only close if clicking directly on backdrop, not modal content\r\n if (\r\n this.mergedConfig.closeOnBackdrop &&\r\n event.target === event.currentTarget\r\n ) {\r\n this.onClose();\r\n }\r\n }\r\n\r\n onConfirm(): void {\r\n if (!this.mergedConfig.confirmButton.disabled &&\r\n !this.mergedConfig.confirmButton.loading) {\r\n this.confirm.emit();\r\n }\r\n }\r\n\r\n onCancel(): void {\r\n this.cancel.emit();\r\n }\r\n\r\n onClose(): void {\r\n this.close.emit();\r\n }\r\n\r\n onShowCodeSnippet(): void {\r\n this.showCodeSnippet.emit();\r\n }\r\n\r\n getModalWidth(): string {\r\n if (this.mergedConfig.size) {\r\n const sizeMap: Record<string, string> = {\r\n sm: '400px',\r\n md: '560px',\r\n lg: '720px'\r\n };\r\n return sizeMap[this.mergedConfig.size];\r\n }\r\n return this.mergedConfig.width || '560px';\r\n }\r\n\r\n getConfirmButtonClass(): string {\r\n const typeMap: Record<string, string> = {\r\n primary: 'cc-btn-primary',\r\n danger: 'cc-btn-danger',\r\n warning: 'cc-btn-warning'\r\n };\r\n return `cc-btn ${typeMap[this.mergedConfig.confirmButton.type]}`;\r\n }\r\n\r\n getHeaderClass(): string {\r\n return `modal-header modal-header--${this.mergedConfig.headerTheme}`;\r\n }\r\n\r\n resolveIconType(icon: any): 'material' | 'custom' | 'img' {\r\n if (typeof icon === 'string') {\r\n if (icon.includes('/') || icon.includes('.') || icon.startsWith('http')) {\r\n return 'img';\r\n }\r\n return 'material';\r\n }\r\n if (icon && typeof icon === 'object') {\r\n if (icon.type === 'custom' || (icon.value && (icon.value.includes('/') || icon.value.includes('.') || icon.value.startsWith('http')))) {\r\n return 'custom';\r\n }\r\n return icon.type || 'material';\r\n }\r\n return 'material';\r\n }\r\n\r\n getIconValue(icon: any): string {\r\n return typeof icon === 'string' ? icon : icon?.value;\r\n }\r\n\r\n getIconColor(icon: any): string | undefined {\r\n return typeof icon === 'object' ? icon.color : undefined;\r\n }\r\n}\r\n","<div *ngIf=\"isOpen\" class=\"cc-modal-backdrop\" (click)=\"onBackdropClick($event)\" role=\"dialog\" [attr.aria-modal]=\"true\"\r\n [attr.aria-labelledby]=\"'modal-title-' + mergedConfig.title\" [attr.aria-label]=\"mergedConfig.ariaLabel\"\r\n [attr.aria-describedby]=\"mergedConfig.ariaDescribedBy\">\r\n\r\n <div class=\"cc-modal-container {{ mergedConfig.customClass }}\" [style.width]=\"getModalWidth()\"\r\n [style.background-color]=\"mergedConfig.backgroundColor\" [style.border-radius]=\"mergedConfig.borderRadius\"\r\n [style.border-top-left-radius]=\"mergedConfig.borderTopLeftRadius\"\r\n [style.border-top-right-radius]=\"mergedConfig.borderTopRightRadius\"\r\n [style.border-bottom-left-radius]=\"mergedConfig.borderBottomLeftRadius\"\r\n [style.border-bottom-right-radius]=\"mergedConfig.borderBottomRightRadius\" (click)=\"$event.stopPropagation()\">\r\n\r\n <!-- Header -->\r\n <div [ngClass]=\"getHeaderClass()\" [style.background-color]=\"mergedConfig.headerBackgroundColor\"\r\n [style.border-bottom]=\"mergedConfig.headerBorderBottom\">\r\n <div class=\"modal-header__content\">\r\n <!-- Icon (Optional) -->\r\n <span *ngIf=\"mergedConfig.icon\" class=\"modal-header__icon\">\r\n <ng-container [ngSwitch]=\"resolveIconType(mergedConfig.icon)\">\r\n <mat-icon *ngSwitchCase=\"'material'\" [style.color]=\"getIconColor(mergedConfig.icon)\">\r\n {{ getIconValue(mergedConfig.icon) }}\r\n </mat-icon>\r\n <img *ngSwitchCase=\"'custom'\" [src]=\"getIconValue(mergedConfig.icon)\"\r\n [alt]=\"mergedConfig.title + ' icon'\" class=\"modal-header__custom-icon\">\r\n <img *ngSwitchCase=\"'img'\" [src]=\"getIconValue(mergedConfig.icon)\"\r\n [alt]=\"mergedConfig.title + ' icon'\" class=\"modal-header__custom-icon\">\r\n </ng-container>\r\n </span>\r\n\r\n <!-- Title -->\r\n <h2 class=\"modal-header__title\" [id]=\"'modal-title-' + mergedConfig.title\"\r\n [style.color]=\"mergedConfig.headerTextColor\">\r\n {{ mergedConfig.title }}\r\n </h2>\r\n </div>\r\n\r\n <!-- Code Snippet Button -->\r\n <button *ngIf=\"mergedConfig.showCodeSnippetButton\" type=\"button\" class=\"modal-header__code-btn\"\r\n (click)=\"onShowCodeSnippet()\" aria-label=\"Show code snippet\" title=\"Show Code Snippet\">\r\n <mat-icon>code</mat-icon>\r\n </button>\r\n\r\n <!-- Close Button -->\r\n <button *ngIf=\"mergedConfig.showCloseButton\" type=\"button\" class=\"modal-header__close\" (click)=\"onClose()\"\r\n aria-label=\"Close modal\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <!-- Body (Content Projection) -->\r\n <div class=\"cc-modal-body\" [style.padding]=\"mergedConfig.padding\" [style.color]=\"mergedConfig.bodyTextColor\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"cc-modal-footer\" [style.background-color]=\"mergedConfig.footerBackgroundColor\"\r\n [style.border-top]=\"mergedConfig.footerBorderTop\">\r\n\r\n <ng-container *ngIf=\"!mergedConfig.customFooter\">\r\n <button *ngIf=\"mergedConfig.cancelButton?.show\" type=\"button\" class=\"cc-btn cc-btn-secondary\"\r\n (click)=\"onCancel()\">\r\n {{ mergedConfig.cancelButton?.label || 'Cancel' }}\r\n </button>\r\n\r\n <button type=\"button\" [ngClass]=\"getConfirmButtonClass()\"\r\n [disabled]=\"mergedConfig.confirmButton.disabled || mergedConfig.confirmButton.loading\"\r\n (click)=\"onConfirm()\">\r\n <span *ngIf=\"mergedConfig.confirmButton.loading\" class=\"cc-btn-spinner\"></span>\r\n {{ mergedConfig.confirmButton.label }}\r\n </button>\r\n </ng-container>\r\n\r\n <ng-content select=\"[cc-modal-footer]\"></ng-content>\r\n </div>\r\n </div>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ConfirmationModalComponent } from './components/confirmation-modal/confirmation-modal.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@NgModule({\r\n declarations: [\r\n ConfirmationModalComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n MatIconModule, // For material icons support\r\n FormsModule // For ngModel in user examples (although mostly projected content, user might need it)\r\n ],\r\n exports: [\r\n ConfirmationModalComponent\r\n ]\r\n})\r\nexport class ConfirmationModalModule { }\r\n","import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\nimport { FilterSidebarChangeEvent, FilterSidebarConfig, FilterSidebarOutput, FilterSidebarTab } from '../../filter-sidebar.models';\r\n\r\n@Component({\r\n selector: 'lib-filter-sidebar',\r\n templateUrl: './filter-sidebar.component.html',\r\n styleUrls: ['./filter-sidebar.component.scss'],\r\n standalone: false,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => FilterSidebarComponent),\r\n multi: true\r\n }\r\n ]\r\n})\r\nexport class FilterSidebarComponent implements OnInit, ControlValueAccessor {\r\n @Input() config!: FilterSidebarConfig;\r\n @Input() initialFilters: FilterSidebarOutput = {};\r\n\r\n @Output() filterChange = new EventEmitter<FilterSidebarChangeEvent>();\r\n @Output() filterApply = new EventEmitter<FilterSidebarOutput>();\r\n @Output() filterClear = new EventEmitter<void>();\r\n @Output() tabChange = new EventEmitter<string>();\r\n @Output() showCodeSnippet = new EventEmitter<void>();\r\n\r\n filters: FilterSidebarOutput = {};\r\n selectedTabId: string | null = null;\r\n\r\n // ControlValueAccessor callbacks\r\n onChange: any = () => { };\r\n onTouched: any = () => { };\r\n\r\n constructor(\r\n private router: Router,\r\n private route: ActivatedRoute\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n if (this.initialFilters) {\r\n this.filters = { ...this.initialFilters };\r\n }\r\n\r\n // Initialize from URL query params\r\n this.route.queryParams.subscribe(params => {\r\n if (Object.keys(params).length > 0) {\r\n // Merge params into filters, handling potential array/string conversions if needed\r\n // For now assuming direct mapping or basic string values\r\n this.filters = { ...this.filters, ...params };\r\n }\r\n });\r\n\r\n // Initialize Tabs\r\n if (this.config?.tabs?.items?.length) {\r\n if (this.config.tabs.defaultActive) {\r\n this.selectedTabId = this.config.tabs.defaultActive;\r\n } else {\r\n this.selectedTabId = this.config.tabs.items[0].id;\r\n }\r\n }\r\n }\r\n\r\n // ControlValueAccessor Implementation\r\n writeValue(value: any): void {\r\n if (value) {\r\n this.filters = { ...value };\r\n } else {\r\n this.filters = {};\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n // Component Logic\r\n\r\n onTabClick(tab: FilterSidebarTab): void {\r\n this.selectedTabId = tab.id;\r\n this.tabChange.emit(tab.id);\r\n }\r\n\r\n onFilterChange(key: string, value: any, isMulti: boolean = false): void {\r\n if (isMulti) {\r\n this.toggleFilterValue(key, value);\r\n } else {\r\n this.filters[key] = value;\r\n }\r\n\r\n // Notify Generic Change\r\n this.notifyChanges(key, this.filters[key]);\r\n }\r\n\r\n private toggleFilterValue(key: string, value: any): void {\r\n const currentValues = this.filters[key] || [];\r\n if (Array.isArray(currentValues)) {\r\n const index = currentValues.indexOf(value);\r\n if (index > -1) {\r\n // Remove value\r\n this.filters[key] = currentValues.filter((v: any) => v !== value);\r\n } else {\r\n // Add value\r\n this.filters[key] = [...currentValues, value];\r\n }\r\n } else {\r\n // Initialize array if undefined\r\n this.filters[key] = [value];\r\n }\r\n }\r\n\r\n private notifyChanges(key: string, value: any): void {\r\n this.onChange(this.filters);\r\n\r\n // Update URL\r\n this.updateUrl();\r\n\r\n this.filterChange.emit({\r\n key,\r\n value,\r\n allFilters: this.filters\r\n });\r\n }\r\n\r\n private updateUrl(): void {\r\n this.router.navigate([], {\r\n relativeTo: this.route,\r\n queryParams: this.filters,\r\n queryParamsHandling: 'merge', // Merge with existing params\r\n replaceUrl: true // Don't create new history entry for every filter change\r\n });\r\n }\r\n\r\n applyFilters(): void {\r\n this.filterApply.emit(this.filters);\r\n }\r\n\r\n clearFilters(): void {\r\n this.filters = {};\r\n this.onChange(this.filters);\r\n\r\n // Clear URL params (navigate with empty queryParams to clear, or reset to defaults)\r\n // Since we don't know \"defaults\" specifically for URL here without config, \r\n // we'll remove the keys currently in filters from the URL.\r\n // Actually, easiest way to clear specific params is passing null.\r\n\r\n // However, to clear ALL filter related params, we might need a more robust strategy \r\n // if there are other params we want to keep. \r\n // For this task, we will just navigate with empty paramsObject for the keys in `filters` \r\n // or just clear all if that's the intention. \r\n // Let's try to clear only the keys we know about from the config if possible, \r\n // but since `filters` is dynamic, let's clear the keys present in the current state before clearing.\r\n\r\n // A safer approach for \"Clear All\" in a filter sidebar is often to strip query params.\r\n this.router.navigate([], {\r\n relativeTo: this.route,\r\n queryParams: {}, // Clear all query params\r\n // queryParamsHandling: 'merge' // attributes to merge would need to be null to remove\r\n });\r\n\r\n this.filterClear.emit();\r\n }\r\n\r\n trackByFn(index: number, item: any): any {\r\n return item.key || index;\r\n }\r\n\r\n onShowCodeSnippet(): void {\r\n this.showCodeSnippet.emit();\r\n }\r\n\r\n isImgUrl(icon: string): boolean {\r\n return icon.includes('/') || icon.includes('.') || icon.startsWith('http');\r\n }\r\n}\r\n","<div class=\"cc-filter-sidebar\">\r\n\r\n <!-- Header with Code Snippet Button -->\r\n <div class=\"cc-filter-header\" *ngIf=\"config?.settings?.showCodeSnippet\">\r\n <button mat-icon-button class=\"cc-code-snippet-btn\" (click)=\"onShowCodeSnippet()\" title=\"Show Code Snippet\">\r\n <i class=\"fas fa-code\"></i>\r\n </button>\r\n </div>\r\n\r\n <!-- Tabs Section -->\r\n <div *ngIf=\"config?.tabs?.items?.length\" class=\"cc-filter-tabs\">\r\n <div *ngFor=\"let tab of config.tabs!.items\" class=\"cc-filter-tab\" [class.active]=\"tab.id === selectedTabId\"\r\n (click)=\"onTabClick(tab)\">\r\n <i *ngIf=\"tab.icon && !isImgUrl(tab.icon)\" [class]=\"tab.icon\"></i>\r\n <img *ngIf=\"tab.icon && isImgUrl(tab.icon)\" [src]=\"tab.icon\" alt=\"icon\" class=\"cc-filter-tab-icon\">\r\n <span>{{ tab.label }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Filters Content -->\r\n <div class=\"cc-filter-content\">\r\n\r\n <ng-container *ngFor=\"let section of config.sections; trackBy: trackByFn\">\r\n\r\n <!-- Accordion Section -->\r\n <mat-accordion *ngIf=\"section.type === 'accordion'\" class=\"cc-filter-accordion\">\r\n <mat-expansion-panel [expanded]=\"section.expanded\" class=\"mat-elevation-z0\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{ section.title }}\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n\r\n <!-- Content of Accordion -->\r\n <ng-container *ngIf=\"section.options\">\r\n <div class=\"cc-filter-group\">\r\n <mat-checkbox *ngFor=\"let option of section.options\"\r\n [checked]=\"filters[section.key]?.includes(option.value)\"\r\n (change)=\"onFilterChange(section.key, option.value, true)\">\r\n {{ option.label }}\r\n </mat-checkbox>\r\n </div>\r\n </ng-container>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n\r\n <!-- Select Section -->\r\n <div *ngIf=\"section.type === 'select'\" class=\"cc-filter-section\">\r\n <label *ngIf=\"section.title\" class=\"cc-filter-label\">{{ section.title }}</label>\r\n <mat-form-field appearance=\"outline\" class=\"cc-filter-full-width\">\r\n <mat-select [placeholder]=\"section.placeholder || 'Select'\" [(value)]=\"filters[section.key]\"\r\n [multiple]=\"section.multi\"\r\n (selectionChange)=\"onFilterChange(section.key, $event.value, section.multi)\">\r\n <mat-option *ngFor=\"let option of section.options\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- Radio Group Section -->\r\n <div *ngIf=\"section.type === 'radio-group'\" class=\"cc-filter-section\">\r\n <label *ngIf=\"section.title\" class=\"cc-filter-label\">{{ section.title }}</label>\r\n <mat-radio-group [(ngModel)]=\"filters[section.key]\" (change)=\"onFilterChange(section.key, $event.value)\"\r\n class=\"cc-filter-radio-group\">\r\n <mat-radio-button *ngFor=\"let option of section.options\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <!-- Checkbox Group Section (Standalone) -->\r\n <div *ngIf=\"section.type === 'checkbox-group'\" class=\"cc-filter-section\">\r\n <label *ngIf=\"section.title\" class=\"cc-filter-label\">{{ section.title }}</label>\r\n <div class=\"cc-filter-group\">\r\n <mat-checkbox *ngFor=\"let option of section.options\"\r\n [checked]=\"filters[section.key]?.includes(option.value)\"\r\n (change)=\"onFilterChange(section.key, option.value, true)\">\r\n {{ option.label }}\r\n </mat-checkbox>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </div>\r\n\r\n <!-- Actions Footer -->\r\n <div class=\"cc-filter-actions\" *ngIf=\"config.actions\">\r\n <button mat-button class=\"cc-btn-text text-danger\" *ngIf=\"config.actions?.clear?.visible !== false\"\r\n (click)=\"clearFilters()\">\r\n {{ config.actions?.clear?.label || 'Clear Filter' }}\r\n </button>\r\n <button mat-flat-button color=\"warn\" class=\"cc-btn-primary\" *ngIf=\"config.actions?.apply?.visible !== false\"\r\n [disabled]=\"config.actions?.apply?.disabled\" (click)=\"applyFilters()\">\r\n {{ config.actions?.apply?.label || 'Apply Filter' }}\r\n </button>\r\n </div>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MaterialModule } from '../material/material.module';\r\nimport { FilterSidebarComponent } from './components/filter-sidebar/filter-sidebar.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n FilterSidebarComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n MaterialModule\r\n ],\r\n exports: [\r\n FilterSidebarComponent\r\n ]\r\n})\r\nexport class FilterSidebarModule { }\r\n","import { Component, Input, Output, EventEmitter, HostBinding } from '@angular/core';\r\n\r\nexport interface SummaryCardConfig {\r\n header: string;\r\n value: string;\r\n description?: string;\r\n\r\n // Icon or Image (mutually exclusive)\r\n icon?: string; // Material icon name\r\n iconImage?: string; // URL for image icon\r\n\r\n // Layout configurations\r\n descriptionPosition?: 'bottom' | 'inline'; // 'bottom' (default) or 'inline' (right side of value)\r\n\r\n // Extended Content\r\n valueSubtext?: string; // Text displayed next to the value (e.g. \"/ 15 Target\")\r\n metaData?: SummaryCardMeta[]; // Right-aligned meta information\r\n\r\n // Color configurations\r\n valueColor?: string; // Color for the value text\r\n headerColor?: string; // Color for the header text\r\n descriptionColor?: string; // Color for the description text\r\n iconColor?: string; // Color for the icon\r\n iconBackgroundColor?: string; // Background color for the icon container\r\n\r\n // Additional styling\r\n iconClass?: string; // Additional CSS classes for icon\r\n valueClass?: string; // Additional CSS classes for value\r\n headerClass?: string; // Additional CSS classes for header\r\n descriptionClass?: string; // Additional CSS classes for description\r\n\r\n // Interaction\r\n isDisabled?: boolean; // Disable click interaction\r\n isClickable?: boolean; // Whether card is clickable (default: true)\r\n}\r\n\r\nexport interface SummaryCardMeta {\r\n text: string;\r\n type?: 'text' | 'pill'; // 'text' (default) or 'pill' (badge style)\r\n color?: string; // Text color\r\n backgroundColor?: string; // Background color for pill\r\n cssClass?: string; // Custom CSS class\r\n}\r\n\r\n@Component({\r\n selector: 'lib-summary-card',\r\n templateUrl: './summary-card.component.html',\r\n styleUrls: ['./summary-card.component.scss'],\r\n standalone: false\r\n})\r\nexport class SummaryCardComponent {\r\n @Input() config!: SummaryCardConfig;\r\n @Input() theme?: 'theme-1' | 'theme-2';\r\n @Output() cardClick = new EventEmitter<void>();\r\n\r\n constructor() { }\r\n\r\n onCardClick(): void {\r\n if (this.config?.isDisabled || this.config?.isClickable === false) {\r\n return;\r\n }\r\n this.cardClick.emit();\r\n }\r\n\r\n get cardClasses(): { [key: string]: boolean } {\r\n return {\r\n 'disabled': !!this.config?.isDisabled,\r\n 'clickable': this.config?.isClickable !== false && !this.config?.isDisabled\r\n };\r\n }\r\n\r\n get iconStyles(): { [key: string]: string } {\r\n const styles: { [key: string]: string } = {};\r\n if (this.config.iconBackgroundColor) {\r\n styles['backgroundColor'] = this.config.iconBackgroundColor;\r\n }\r\n if (this.config.iconColor) {\r\n styles['color'] = this.config.iconColor;\r\n }\r\n return styles;\r\n }\r\n\r\n get headerStyles(): { [key: string]: string } {\r\n const styles: { [key: string]: string } = {};\r\n if (this.config.headerColor) {\r\n styles['color'] = this.config.headerColor;\r\n }\r\n return styles;\r\n }\r\n\r\n get valueStyles(): { [key: string]: string } {\r\n const styles: { [key: string]: string } = {};\r\n if (this.config.valueColor) {\r\n styles['color'] = this.config.valueColor;\r\n }\r\n return styles;\r\n }\r\n\r\n get descriptionStyles(): { [key: string]: string } {\r\n const styles: { [key: string]: string } = {};\r\n if (this.config.descriptionColor) {\r\n styles['color'] = this.config.descriptionColor;\r\n }\r\n return styles;\r\n }\r\n\r\n get isDescriptionInline(): boolean {\r\n return this.config.descriptionPosition === 'inline';\r\n }\r\n\r\n getMetaStyles(meta: SummaryCardMeta): { [key: string]: string } {\r\n const styles: { [key: string]: string } = {};\r\n if (meta.color) {\r\n styles['color'] = meta.color;\r\n }\r\n if (meta.backgroundColor && meta.type === 'pill') {\r\n styles['backgroundColor'] = meta.backgroundColor;\r\n }\r\n return styles;\r\n }\r\n}\r\n","<div class=\"cc-summary-card\" (click)=\"onCardClick()\">\r\n <!-- Icon Section (Left Side) -->\r\n <div class=\"icon-section\" *ngIf=\"config.icon || config.iconImage\" [ngClass]=\"config.iconClass\"\r\n [ngStyle]=\"iconStyles\">\r\n <mat-icon *ngIf=\"config.icon\">{{ config.icon }}</mat-icon>\r\n <img *ngIf=\"!config.icon && config.iconImage\" [src]=\"config.iconImage\" alt=\"icon\">\r\n </div>\r\n\r\n <!-- Right Section (Header + Value/Meta) -->\r\n <div class=\"right-section\">\r\n <!-- Header (Full Width on Right) -->\r\n <div class=\"header\" [ngClass]=\"config.headerClass\" [ngStyle]=\"headerStyles\">\r\n {{ config.header }}\r\n </div>\r\n\r\n <!-- Value and Meta Row -->\r\n <div class=\"value-meta-row\">\r\n <!-- Content Section -->\r\n <div class=\"content-section\">\r\n <!-- Value Row (with optional inline description) -->\r\n <div class=\"value-row\" [class.inline-layout]=\"isDescriptionInline\">\r\n <div class=\"value-container\">\r\n <div class=\"value\" [ngClass]=\"config.valueClass\" [ngStyle]=\"valueStyles\">\r\n {{ config.value }}\r\n <span *ngIf=\"config.valueSubtext\" class=\"value-subtext\">{{ config.valueSubtext }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Description (inline or bottom based on config) -->\r\n <div class=\"description\" *ngIf=\"config.description\" [ngClass]=\"config.descriptionClass\"\r\n [ngStyle]=\"descriptionStyles\">\r\n {{ config.description }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Meta/Status Section (Aligned with Value) -->\r\n <div class=\"meta-section\" *ngIf=\"config.metaData && config.metaData.length > 0\">\r\n <div *ngFor=\"let meta of config.metaData\" class=\"meta-item\"\r\n [ngClass]=\"[meta.type === 'pill' ? 'meta-pill' : 'meta-text', meta.cssClass || '']\"\r\n [ngStyle]=\"getMetaStyles(meta)\">\r\n {{ meta.text }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SummaryCardComponent } from './components/summary-card/summary-card.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n SummaryCardComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n MatIconModule\r\n ],\r\n exports: [\r\n SummaryCardComponent\r\n ]\r\n})\r\nexport class SummaryCardModule { }\r\n","import { Component, EventEmitter, Input, OnInit, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { FormBuilder, FormGroup, FormControl, FormArray, Validators, AbstractControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport {\r\n FormConfig,\r\n FormField,\r\n FormSection,\r\n FormOption,\r\n JsonFormConfig,\r\n JsonFieldConfig,\r\n FieldType,\r\n UISubType\r\n} from '../configurable-form.model';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MaterialModule } from '../../material/material.module';\r\n\r\n@Component({\r\n selector: 'lib-configurable-form',\r\n templateUrl: './configurable-form.component.html',\r\n styleUrls: ['./configurable-form.component.scss'],\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule, MaterialModule],\r\n})\r\nexport class ConfigurableFormComponent implements OnInit, OnChanges {\r\n @Input() config!: FormConfig;\r\n @Input() jsonConfig!: JsonFormConfig;\r\n @Input() data: any = {};\r\n @Input() baseApiUrl: string = '';\r\n @Output() formSubmit = new EventEmitter<any>();\r\n @Output() formCancel = new EventEmitter<void>();\r\n @Output() optionsLoad = new EventEmitter<any>();\r\n\r\n form!: FormGroup;\r\n processedConfig!: FormConfig;\r\n fieldVisibilityMap: Map<string, boolean> = new Map();\r\n\r\n constructor(\r\n private fb: FormBuilder,\r\n private snackBar: MatSnackBar,\r\n private http: HttpClient\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.initializeForm();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['config'] || changes['jsonConfig']) {\r\n this.initializeForm();\r\n }\r\n if (changes['data'] && this.form) {\r\n this.form.patchValue(this.data);\r\n }\r\n }\r\n\r\n initializeForm() {\r\n // Transform JSON config if provided, otherwise use config directly\r\n if (this.jsonConfig) {\r\n this.processedConfig = this.transformJsonConfig(this.jsonConfig);\r\n } else if (this.config) {\r\n this.processedConfig = JSON.parse(JSON.stringify(this.config));\r\n } else {\r\n return;\r\n }\r\n\r\n this.normalizeFields();\r\n this.initializeFieldVisibility();\r\n this.buildForm();\r\n this.setupDependencies();\r\n\r\n // Patch initial data if provided\r\n if (this.data && Object.keys(this.data).length > 0) {\r\n this.form.patchValue(this.data);\r\n }\r\n }\r\n\r\n // Transform JSON config format to internal FormConfig format\r\n transformJsonConfig(jsonConfig: JsonFormConfig): FormConfig {\r\n const fields = jsonConfig.jsonConfig\r\n .sort((a, b) => a.sequence - b.sequence)\r\n .map(field => this.transformJsonField(field));\r\n\r\n return {\r\n sections: [{\r\n sectionTitle: jsonConfig.label,\r\n fields: fields\r\n }],\r\n entityType: jsonConfig.entityType\r\n };\r\n }\r\n\r\n // Transform individual JSON field to FormField\r\n transformJsonField(jsonField: JsonFieldConfig): FormField {\r\n const fieldType = this.mapUISubTypeToFieldType(jsonField.uiConfig.subType);\r\n\r\n return {\r\n name: jsonField.jsonKey,\r\n jsonKey: jsonField.jsonKey,\r\n label: jsonField.label,\r\n type: fieldType,\r\n sequence: jsonField.sequence,\r\n keyType: jsonField.keyType,\r\n uiConfig: jsonField.uiConfig,\r\n validationRules: jsonField.validationRules,\r\n required: jsonField.validationRules?.isMandatory || jsonField.validationRules?.isRequired,\r\n mandatory: jsonField.validationRules?.isMandatory,\r\n dependsOn: undefined, // Will be set based on dependent array\r\n dependent: jsonField.uiConfig.dependent,\r\n optionConfigs: jsonField.uiConfig.optionConfigs,\r\n class: 'col-12'\r\n };\r\n }\r\n\r\n // Map UI subtype to field type\r\n mapUISubTypeToFieldType(subType?: string): FieldType {\r\n switch (subType) {\r\n case 'UI_SUBTYPE.SHORT_TEXT':\r\n return 'text';\r\n case 'UI_SUBTYPE.LONG_TEXT':\r\n return 'textarea';\r\n case 'UI_SUBTYPE.NUMBER':\r\n return 'number';\r\n case 'UI_SUBTYPE.EMAIL':\r\n return 'email';\r\n case 'UI_SUBTYPE.PHONE':\r\n return 'tel';\r\n case 'UI_SUBTYPE.URL':\r\n return 'url';\r\n default:\r\n return 'text';\r\n }\r\n }\r\n\r\n // Normalize fields to ensure all required properties exist\r\n normalizeFields() {\r\n this.processedConfig.sections.forEach(section => {\r\n section.fields.forEach(field => {\r\n // Set default type if not specified\r\n if (!field.type) {\r\n field.type = 'text';\r\n }\r\n\r\n // Merge uiConfig with field-level properties\r\n if (field.uiConfig) {\r\n if (field.uiConfig.type === 'UI_TYPE.DROP_DOWN') {\r\n field.type = 'dropdown';\r\n }\r\n if (field.uiConfig.optionConfigs) {\r\n field.optionConfigs = field.uiConfig.optionConfigs;\r\n }\r\n if (field.uiConfig.dependent) {\r\n field.dependent = field.uiConfig.dependent;\r\n }\r\n }\r\n\r\n // Initialize visibility\r\n if (field.visible === undefined) {\r\n field.visible = true;\r\n }\r\n\r\n // Load options for dropdowns\r\n if ((field.type === 'dropdown' || field.type === 'select') && field.optionConfigs) {\r\n this.loadFieldOptions(field);\r\n }\r\n });\r\n });\r\n }\r\n\r\n // Initialize field visibility map\r\n initializeFieldVisibility() {\r\n this.processedConfig.sections.forEach(section => {\r\n section.fields.forEach(field => {\r\n this.fieldVisibilityMap.set(field.name, field.visible !== false);\r\n });\r\n });\r\n }\r\n\r\n buildForm() {\r\n const formGroupConfig: any = {};\r\n\r\n this.processedConfig.sections.forEach(section => {\r\n if (section.isRepeater) {\r\n // Create FormArray for repeater sections\r\n const arrayName = section.formArrayName || 'items';\r\n const minItems = section.minItems || 1;\r\n const initialItems = [];\r\n\r\n for (let i = 0; i < minItems; i++) {\r\n initialItems.push(this.createGroup(section.fields));\r\n }\r\n\r\n formGroupConfig[arrayName] = this.fb.array(initialItems);\r\n } else {\r\n // Add regular fields to form group\r\n section.fields.forEach(field => {\r\n if (field.subFields) {\r\n // Composite field - add all sub-fields\r\n field.subFields.forEach(subField => {\r\n if (field.required || field.mandatory) {\r\n subField.required = true;\r\n }\r\n formGroupConfig[subField.name] = this.createControl(subField);\r\n });\r\n } else {\r\n formGroupConfig[field.name] = this.createControl(field);\r\n }\r\n });\r\n }\r\n });\r\n\r\n this.form = this.fb.group(formGroupConfig);\r\n\r\n // Apply composite validators to the root form group\r\n this.processedConfig.sections.forEach(section => {\r\n if (!section.isRepeater) {\r\n section.fields.forEach(field => {\r\n if (field.type === 'composite' && field.compositeValidationRule && field.subFields) {\r\n this.form.addValidators(this.createCompositeValidator(field));\r\n }\r\n });\r\n }\r\n });\r\n this.form.updateValueAndValidity();\r\n }\r\n\r\n createCompositeValidator(field: FormField) {\r\n return (control: AbstractControl) => {\r\n const group = control as FormGroup;\r\n if (!field.subFields || field.subFields.length < 2) return null;\r\n\r\n if (field.compositeValidationRule === 'minMax') {\r\n const minControl = group.get(field.subFields[0].name);\r\n const maxControl = group.get(field.subFields[1].name);\r\n\r\n if (minControl && maxControl && minControl.value !== null && maxControl.value !== null) {\r\n if (Number(minControl.value) > Number(maxControl.value)) {\r\n return { [`invalid_minMax_${field.name}`]: true };\r\n }\r\n }\r\n }\r\n\r\n if (field.compositeValidationRule === 'percentageTotal') {\r\n let total = 0;\r\n let allPresent = true;\r\n\r\n field.subFields.forEach(sub => {\r\n const ctrl = group.get(sub.name);\r\n if (ctrl && ctrl.value !== null && ctrl.value !== '') {\r\n total += Number(ctrl.value);\r\n } else {\r\n allPresent = false;\r\n }\r\n });\r\n\r\n if (allPresent && total !== 100) {\r\n return { [`invalid_percentageTotal_${field.name}`]: true };\r\n }\r\n }\r\n\r\n return null;\r\n };\r\n }\r\n\r\n createControl(field: FormField): FormControl {\r\n const validators = [];\r\n\r\n // Add validators based on field configuration\r\n if (field.required || field.mandatory || field.validationRules?.isMandatory || field.validationRules?.isRequired) {\r\n validators.push(Validators.required);\r\n }\r\n\r\n if (field.validationRules?.minLength) {\r\n validators.push(Validators.minLength(field.validationRules.minLength));\r\n }\r\n\r\n if (field.validationRules?.maxLength) {\r\n validators.push(Validators.maxLength(field.validationRules.maxLength));\r\n }\r\n\r\n if (field.validationRules?.pattern) {\r\n validators.push(Validators.pattern(field.validationRules.pattern));\r\n }\r\n\r\n if (field.validationRules?.min !== undefined) {\r\n validators.push(Validators.min(field.validationRules.min));\r\n }\r\n\r\n if (field.validationRules?.max !== undefined) {\r\n validators.push(Validators.max(field.validationRules.max));\r\n }\r\n\r\n if (field.type === 'email') {\r\n validators.push(Validators.email);\r\n }\r\n\r\n const initialValue = field.value !== undefined ? field.value : '';\r\n return this.fb.control({ value: initialValue, disabled: field.disabled || false }, validators);\r\n }\r\n\r\n createGroup(fields: FormField[]): FormGroup {\r\n const groupConfig: any = {};\r\n\r\n fields.forEach(field => {\r\n if (field.subFields) {\r\n field.subFields.forEach(subField => {\r\n groupConfig[subField.name] = this.createControl(subField);\r\n });\r\n } else {\r\n groupConfig[field.name] = this.createControl(field);\r\n }\r\n });\r\n\r\n return this.fb.group(groupConfig);\r\n }\r\n\r\n getFormArray(name: string): FormArray {\r\n return this.form.get(name) as FormArray;\r\n }\r\n\r\n addRepeaterItem(section: FormSection) {\r\n const arrayName = section.formArrayName || 'items';\r\n const formArray = this.getFormArray(arrayName);\r\n\r\n // Check max items\r\n if (section.maxItems && formArray.length >= section.maxItems) {\r\n this.snackBar.open(`Maximum ${section.maxItems} items allowed`, 'Close', { duration: 3000 });\r\n return;\r\n }\r\n\r\n formArray.push(this.createGroup(section.fields));\r\n }\r\n\r\n removeRepeaterItem(sectionName: string, index: number) {\r\n const formArray = this.getFormArray(sectionName);\r\n formArray.removeAt(index);\r\n }\r\n\r\n onSubmit() {\r\n if (this.form.invalid) {\r\n this.form.markAllAsTouched();\r\n this.scrollToFirstInvalidControl();\r\n this.snackBar.open('Please fill all required fields', 'Close', { duration: 3000 });\r\n return;\r\n }\r\n\r\n this.formSubmit.emit(this.form.value);\r\n }\r\n\r\n scrollToFirstInvalidControl() {\r\n const firstInvalidControl = document.querySelector('.is-invalid');\r\n if (firstInvalidControl) {\r\n firstInvalidControl.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n }\r\n }\r\n\r\n setupDependencies() {\r\n this.processedConfig.sections.forEach(section => {\r\n section.fields.forEach(field => {\r\n if (field.dependsOn) {\r\n const control = this.form.get(field.dependsOn);\r\n if (control) {\r\n control.valueChanges.subscribe(value => {\r\n this.onFieldValueChange(field, value);\r\n });\r\n }\r\n }\r\n\r\n // Also setup for fields with dependent array\r\n if (field.dependent && field.dependent.length > 0) {\r\n const control = this.form.get(field.name);\r\n if (control) {\r\n control.valueChanges.subscribe(value => {\r\n this.onFieldValueChange(field, value);\r\n });\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n onFieldValueChange(field: FormField, value: any) {\r\n // Handle dependent fields\r\n if (field.dependent && field.dependent.length > 0) {\r\n field.dependent.forEach(dependentFieldName => {\r\n const dependentField = this.findFieldByName(dependentFieldName);\r\n if (dependentField) {\r\n // Clear the dependent field value\r\n const control = this.form.get(dependentFieldName);\r\n if (control) {\r\n control.setValue('');\r\n control.markAsUntouched();\r\n }\r\n\r\n // Load new options for the dependent field\r\n if (value) {\r\n this.loadFieldOptions(dependentField, { [field.name]: value });\r\n } else {\r\n // Clear options if parent value is cleared\r\n dependentField.loadedOptions = [];\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Load options for a dropdown field\r\n loadFieldOptions(field: FormField, parentValues?: any) {\r\n // Emit event for parent to notify about options load request\r\n // Allow parent to mark as handled to skip internal API call\r\n const event = { field, parentValue: parentValues, handled: false };\r\n this.optionsLoad.emit(event);\r\n\r\n if (event.handled) {\r\n return;\r\n }\r\n\r\n if (!field.optionConfigs) {\r\n return;\r\n }\r\n\r\n const config = field.optionConfigs;\r\n\r\n // Handle static options\r\n if (config.optionDTO === 'OPTION_DTO.STATIC' && config.staticOptions) {\r\n field.loadedOptions = config.staticOptions;\r\n return;\r\n }\r\n\r\n // Handle API-based options\r\n if (config.optionDTO === 'OPTION_DTO.REF_DATA' && config.url) {\r\n let url = config.url;\r\n\r\n // Replace placeholders in URL with parent values\r\n if (parentValues) {\r\n Object.keys(parentValues).forEach(key => {\r\n url = url.replace(`{${key}}`, parentValues[key]);\r\n });\r\n }\r\n\r\n // Prepend base API URL if provided\r\n if (this.baseApiUrl && !url.startsWith('http')) {\r\n url = `${this.baseApiUrl}/${url}`;\r\n }\r\n\r\n this.http.get<any>(url).subscribe({\r\n next: (response) => {\r\n // Extract data from response\r\n const data = response.data || response.content || response;\r\n field.loadedOptions = this.extractOptions(data, config);\r\n },\r\n error: (error) => {\r\n console.error('Error loading options:', error);\r\n field.loadedOptions = [];\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Extract options from API response\r\n extractOptions(data: any[], config: any): FormOption[] {\r\n if (!Array.isArray(data)) {\r\n return [];\r\n }\r\n\r\n return data.map(item => ({\r\n label: item[config.labelKey || 'name'],\r\n value: item[config.requestKey || 'code'] || item[config.valueKey || 'id'],\r\n code: item.code,\r\n name: item.name\r\n }));\r\n }\r\n\r\n // Get options for a field (either static or loaded)\r\n getFieldOptions(field: FormField): FormOption[] {\r\n return field.loadedOptions || field.options || [];\r\n }\r\n\r\n // Check if field is visible\r\n isFieldVisible(field: FormField): boolean {\r\n return this.fieldVisibilityMap.get(field.name) !== false;\r\n }\r\n\r\n // Toggle field visibility\r\n toggleFieldVisibility(field: FormField, visible: boolean) {\r\n this.fieldVisibilityMap.set(field.name, visible);\r\n\r\n const control = this.form.get(field.name);\r\n if (control) {\r\n if (visible) {\r\n // Re-enable and restore validators\r\n control.enable();\r\n this.updateControlValidators(control, field);\r\n } else {\r\n // Disable and clear validators\r\n control.disable();\r\n control.clearValidators();\r\n control.updateValueAndValidity();\r\n }\r\n }\r\n }\r\n\r\n // Update control validators based on field config\r\n updateControlValidators(control: AbstractControl, field: FormField) {\r\n const validators = [];\r\n\r\n if (field.required || field.mandatory || field.validationRules?.isMandatory) {\r\n validators.push(Validators.required);\r\n }\r\n\r\n if (field.validationRules?.minLength) {\r\n validators.push(Validators.minLength(field.validationRules.minLength));\r\n }\r\n\r\n if (field.validationRules?.maxLength) {\r\n validators.push(Validators.maxLength(field.validationRules.maxLength));\r\n }\r\n\r\n if (field.validationRules?.pattern) {\r\n validators.push(Validators.pattern(field.validationRules.pattern));\r\n }\r\n\r\n control.setValidators(validators);\r\n control.updateValueAndValidity();\r\n }\r\n\r\n onFileChange(event: any, field: FormField) {\r\n const files: FileList = event.target.files;\r\n\r\n if (!files || files.length === 0) {\r\n return;\r\n }\r\n\r\n // Initialize uploadedFiles if not present\r\n // Initialize uploadedFiles if not present\r\n if (!field.uploadedFiles) {\r\n field.uploadedFiles = [];\r\n }\r\n\r\n const uploadedFiles: any[] = [];\r\n // Handle files\r\n for (let i = 0; i < files.length; i++) {\r\n const file = files[i];\r\n\r\n // Check file size (5MB limit)\r\n if (file.size > 5 * 1024 * 1024) {\r\n this.snackBar.open(`File ${file.name} exceeds 5MB limit`, 'Close', { duration: 3000 });\r\n continue;\r\n }\r\n\r\n uploadedFiles.push({\r\n name: file.name,\r\n size: file.size,\r\n type: file.type,\r\n file: file\r\n });\r\n }\r\n\r\n if (field.multiple) {\r\n field.uploadedFiles.push(...uploadedFiles);\r\n } else {\r\n field.uploadedFiles = uploadedFiles;\r\n }\r\n\r\n // Update form control value for validation\r\n this.updateFileControlValue(field);\r\n\r\n // Clear the input\r\n event.target.value = '';\r\n }\r\n\r\n // Remove uploaded file\r\n removeFile(field: FormField, index: number) {\r\n if (field.uploadedFiles) {\r\n field.uploadedFiles.splice(index, 1);\r\n this.updateFileControlValue(field);\r\n }\r\n }\r\n\r\n // Update file control value for validation\r\n updateFileControlValue(field: FormField) {\r\n const control = this.form.get(field.name);\r\n if (control) {\r\n const hasFiles = field.uploadedFiles && field.uploadedFiles.length > 0;\r\n control.setValue(hasFiles ? field.uploadedFiles : null);\r\n control.markAsTouched();\r\n }\r\n }\r\n\r\n // Get character count for text field\r\n getCharacterCount(fieldName: string): number {\r\n const control = this.form.get(fieldName);\r\n if (control && control.value) {\r\n return control.value.toString().length;\r\n }\r\n return 0;\r\n }\r\n\r\n // Toggle section collapse\r\n toggleSection(section: FormSection) {\r\n section.collapsed = !section.collapsed;\r\n }\r\n\r\n onCancel() {\r\n this.formCancel.emit();\r\n }\r\n\r\n // Helper method to find field by name\r\n private findFieldByName(name: string): FormField | undefined {\r\n for (const section of this.processedConfig.sections) {\r\n const field = section.fields.find(f => f.name === name);\r\n if (field) {\r\n return field;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n // Get the processed config for template use\r\n get sections(): FormSection[] {\r\n return this.processedConfig?.sections || [];\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\" class=\"configurable-form-container\" *ngIf=\"form\">\r\n\r\n <ng-container *ngFor=\"let section of sections\">\r\n\r\n <!-- Repeater Section -->\r\n <div *ngIf=\"section.isRepeater; else normalSection\"\r\n [ngClass]=\"section.noCardLayout ? 'section-no-card' : 'section-card'\">\r\n <div class=\"section-header\" *ngIf=\"section.sectionTitle\">\r\n <h3 class=\"section-title\">{{ section.sectionTitle }}</h3>\r\n <button *ngIf=\"section.collapsible\" mat-icon-button type=\"button\" (click)=\"toggleSection(section)\">\r\n <mat-icon>{{ section.collapsed ? 'expand_more' : 'expand_less' }}</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div [formArrayName]=\"section.formArrayName || 'items'\" *ngIf=\"!section.collapsed\">\r\n <div *ngFor=\"let item of getFormArray(section.formArrayName!).controls; let i = index\"\r\n [formGroupName]=\"i\" class=\"repeater-item\">\r\n <div class=\"repeater-item-header\" *ngIf=\"getFormArray(section.formArrayName!).length > 1\">\r\n <span class=\"text-small\">{{ section.repeaterItemLabel || 'Item' }} {{i + 1}}</span>\r\n <button mat-icon-button color=\"warn\" type=\"button\"\r\n (click)=\"removeRepeaterItem(section.formArrayName!, i)\"\r\n [disabled]=\"section.minItems && getFormArray(section.formArrayName!).length <= section.minItems\">\r\n <mat-icon>delete</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <!-- Fields Grid -->\r\n <div class=\"form-grid\">\r\n <div *ngFor=\"let field of section.fields\" [ngClass]=\"['form-col', field.class || 'col-12']\"\r\n [hidden]=\"!isFieldVisible(field)\">\r\n <ng-container\r\n *ngTemplateOutlet=\"fieldTemplate; context: {field: field, group: item}\"></ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"repeater-separator\" *ngIf=\"i < getFormArray(section.formArrayName!).length - 1\"></div>\r\n </div>\r\n </div>\r\n\r\n <button mat-button color=\"primary\" type=\"button\" (click)=\"addRepeaterItem(section)\" class=\"add-btn\"\r\n *ngIf=\"!section.collapsed\"\r\n [disabled]=\"section.maxItems && getFormArray(section.formArrayName!).length >= section.maxItems\">\r\n <mat-icon>add_circle_outline</mat-icon> {{ section.addLabel || 'Add More' }}\r\n </button>\r\n </div>\r\n\r\n <!-- Normal Section -->\r\n <ng-template #normalSection>\r\n <div [ngClass]=\"section.noCardLayout ? 'section-no-card' : 'section-card'\">\r\n <div class=\"section-header\" *ngIf=\"section.sectionTitle\">\r\n <h3 class=\"section-title\">{{ section.sectionTitle }}</h3>\r\n <button *ngIf=\"section.collapsible\" mat-icon-button type=\"button\" (click)=\"toggleSection(section)\">\r\n <mat-icon>{{ section.collapsed ? 'expand_more' : 'expand_less' }}</mat-icon>\r\n </button>\r\n </div>\r\n <div class=\"form-grid\" *ngIf=\"!section.collapsed\">\r\n <div *ngFor=\"let field of section.fields\" [ngClass]=\"['form-col', field.class || 'col-12']\"\r\n [hidden]=\"!isFieldVisible(field)\">\r\n <!-- Pass the root form group to the template -->\r\n <ng-container\r\n *ngTemplateOutlet=\"fieldTemplate; context: {field: field, group: form}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n </ng-container>\r\n\r\n <div class=\"btn-row\">\r\n <button mat-stroked-button type=\"button\" (click)=\"onCancel()\" *ngIf=\"processedConfig?.cancelLabel\">{{\r\n processedConfig.cancelLabel\r\n }}</button>\r\n <button mat-stroked-button type=\"button\" *ngIf=\"processedConfig?.saveDraftLabel\">{{\r\n processedConfig.saveDraftLabel }}</button>\r\n <button mat-flat-button color=\"primary\" type=\"submit\">{{ processedConfig?.submitLabel || 'Submit' }}</button>\r\n </div>\r\n\r\n</form>\r\n\r\n<!-- Reusable Field Template -->\r\n<ng-template #fieldTemplate let-field=\"field\" let-group=\"group\">\r\n <div [formGroup]=\"group\">\r\n\r\n <!-- Text / Email / Number / Tel / Password / URL -->\r\n <div *ngIf=\"['text', 'email', 'number', 'tel', 'password', 'url'].includes(field.type || '')\"\r\n class=\"field-container\">\r\n <div class=\"field-label\" *ngIf=\"field.label\">\r\n {{ field.label }}\r\n <span class=\"text-danger\" *ngIf=\"field.required || field.mandatory\">*</span>\r\n </div>\r\n <div class=\"input-wrapper\">\r\n <input [type]=\"field.type\" [formControlName]=\"field.name\" [placeholder]=\"field.placeholder || ''\"\r\n [readonly]=\"field.readonly\" class=\"form-input\"\r\n [class.is-invalid]=\"group.get(field.name)?.touched && group.get(field.name)?.invalid\"\r\n [maxlength]=\"field.validationRules?.maxLength || field.uiConfig?.maxCharacters\">\r\n <div class=\"input-suffix\">\r\n <span class=\"suffix-text\" *ngIf=\"field.suffixText\">{{ field.suffixText }}</span>\r\n <mat-icon *ngIf=\"field.suffixIcon\">{{ field.suffixIcon }}</mat-icon>\r\n <mat-icon *ngIf=\"field.icon\">{{ field.icon }}</mat-icon>\r\n <mat-icon *ngIf=\"field.readonly\" class=\"lock-icon\">lock_outline</mat-icon>\r\n </div>\r\n </div>\r\n <!-- Character count -->\r\n <div class=\"char-count-row\" *ngIf=\"field.uiConfig?.maxCharacters || field.validationRules?.maxLength\">\r\n <div class=\"hint-text\" *ngIf=\"field.hint || field.helpText\">{{ field.hint || field.helpText }}</div>\r\n <div class=\"char-count\">\r\n {{ getCharacterCount(field.name) }} / {{ field.uiConfig?.maxCharacters ||\r\n field.validationRules?.maxLength }} Characters\r\n </div>\r\n </div>\r\n <div class=\"hint-text mt-2\"\r\n *ngIf=\"(field.hint || field.helpText) && !field.uiConfig?.maxCharacters && !field.validationRules?.maxLength\">\r\n {{ field.hint || field.helpText }}\r\n </div>\r\n </div>\r\n\r\n <!-- Textarea -->\r\n <div *ngIf=\"field.type === 'textarea'\" class=\"field-container\">\r\n <div class=\"field-label\" *ngIf=\"field.label\">\r\n {{ field.label }}\r\n <span class=\"text-danger\" *ngIf=\"field.required || field.mandatory\">*</span>\r\n </div>\r\n <textarea [formControlName]=\"field.name\" [placeholder]=\"field.placeholder || ''\" [readonly]=\"field.readonly\"\r\n class=\"form-input form-textarea\" rows=\"4\"\r\n [class.is-invalid]=\"group.get(field.name)?.touched && group.get(field.name)?.invalid\"\r\n [maxlength]=\"field.validationRules?.maxLength || field.uiConfig?.maxCharacters\"></textarea>\r\n <!-- Character count -->\r\n <div class=\"char-count-row\" *ngIf=\"field.uiConfig?.maxCharacters || field.validationRules?.maxLength\">\r\n <div class=\"hint-text\" *ngIf=\"field.hint || field.helpText\">{{ field.hint || field.helpText }}</div>\r\n <div class=\"char-count\">\r\n {{ getCharacterCount(field.name) }} / {{ field.uiConfig?.maxCharacters ||\r\n field.validationRules?.maxLength }} Characters\r\n </div>\r\n </div>\r\n <div class=\"hint-text mt-2\"\r\n *ngIf=\"(field.hint || field.helpText) && !field.uiConfig?.maxCharacters && !field.validationRules?.maxLength\">\r\n {{ field.hint || field.helpText }}\r\n </div>\r\n </div>\r\n\r\n <!-- Select / Dropdown -->\r\n <div *ngIf=\"field.type === 'select' || field.type === 'dropdown'\" class=\"field-container\">\r\n <div class=\"field-label\" *ngIf=\"field.label\">\r\n {{ field.label }}\r\n <span class=\"text-danger\" *ngIf=\"field.required || field.mandatory\">*</span>\r\n </div>\r\n <select [formControlName]=\"field.name\" class=\"form-input\"\r\n [class.is-invalid]=\"group.get(field.name)?.touched && group.get(field.name)?.invalid\">\r\n <option value=\"\" disabled selected *ngIf=\"field.placeholder\">{{ field.placeholder }}</option>\r\n <option value=\"\" disabled selected *ngIf=\"!field.placeholder\">Select</option>\r\n <option *ngFor=\"let opt of getFieldOptions(field)\" [value]=\"opt.value\">{{ opt.label }}</option>\r\n </select>\r\n <div class=\"hint-text mt-2\" *ngIf=\"field.hint || field.helpText\">{{ field.hint || field.helpText }}</div>\r\n </div>\r\n\r\n <!-- Date -->\r\n <div *ngIf=\"field.type === 'date'\" class=\"field-container\">\r\n <div class=\"field-label\" *ngIf=\"field.label\">\r\n {{ field.label }}\r\n <span class=\"text-danger\" *ngIf=\"field.required || field.mandatory\">*</span>\r\n </div>\r\n <div class=\"relative\">\r\n <input matInput [matDatepicker]=\"picker\" [formControlName]=\"field.name\"\r\n [placeholder]=\"field.placeholder || ''\" class=\"form-input\"\r\n [class.is-invalid]=\"group.get(field.name)?.touched && group.get(field.name)?.invalid\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\" class=\"date-toggle\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n </div>\r\n <div class=\"hint-text mt-2\" *ngIf=\"field.hint || field.helpText\">{{ field.hint || field.helpText }}</div>\r\n </div>\r\n\r\n <!-- Radio -->\r\n <div *ngIf=\"field.type === 'radio'\" class=\"radio-group-container\"\r\n [class.is-invalid]=\"group.get(field.name)?.touched && group.get(field.name)?.invalid\">\r\n <label class=\"field-label\">\r\n {{ field.label }}\r\n <span class=\"text-danger\" *ngIf=\"field.required || field.mandatory\">*</span>\r\n </label>\r\n <mat-radio-group [formControlName]=\"field.name\" class=\"radio-group\">\r\n <mat-radio-button *ngFor=\"let opt of getFieldOptions(field)\" [value]=\"opt.value\" class=\"radio-button\">\r\n {{ opt.label }}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n <div class=\"hint-text mt-2\" *ngIf=\"field.hint || field.helpText\">{{ field.hint || field.helpText }}</div>\r\n </div>\r\n\r\n <!-- Composite Field (Sub-groups) -->\r\n <div *ngIf=\"field.type === 'composite'\" class=\"field-container\">\r\n <div class=\"field-label\" *ngIf=\"field.label\">\r\n {{ field.label }}\r\n <span class=\"text-danger\" *ngIf=\"field.required || field.mandatory\">*</span>\r\n </div>\r\n <div class=\"composite-container\">\r\n <ng-container *ngFor=\"let sub of field.subFields; let last = last\">\r\n <div class=\"composite-sub-field\" style=\"flex: 1;\">\r\n <div class=\"field-label\" *ngIf=\"sub.label\"\r\n style=\"font-size: 0.75rem; font-weight: normal; margin-bottom: 0.25rem;\">\r\n {{ sub.label }}\r\n </div>\r\n <div class=\"input-wrapper\">\r\n <input [type]=\"sub.type\" [formControlName]=\"sub.name\" [placeholder]=\"sub.placeholder || ''\"\r\n [readonly]=\"sub.readonly\" class=\"form-input\"\r\n [class.is-invalid]=\"group.get(sub.name)?.touched && group.get(sub.name)?.invalid\">\r\n <div class=\"input-suffix\" [class.color-suffix]=\"sub.suffixText === '%'\">\r\n <span class=\"suffix-text\" *ngIf=\"sub.suffixText\">{{ sub.suffixText }}</span>\r\n <mat-icon *ngIf=\"sub.readonly\" class=\"lock-icon\">lock_outline</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Adjust separator alignment if labels are present -->\r\n <span class=\"separator\" *ngIf=\"!last && field.separator\"\r\n [style.padding-top]=\"sub.label ? '1.25rem' : '0'\">{{ field.separator }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"hint-text mt-2\" *ngIf=\"field.hint || field.helpText\">{{ field.hint || field.helpText }}</div>\r\n <div class=\"error-text text-danger text-small mt-1\" *ngIf=\"group.errors?.['invalid_minMax_' + field.name]\">\r\n Min value cannot be greater than Max value.\r\n </div>\r\n <div class=\"error-text text-danger text-small mt-1\"\r\n *ngIf=\"group.errors?.['invalid_percentageTotal_' + field.name]\">\r\n Total percentage must be 100%.\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- File Upload -->\r\n <div *ngIf=\"field.type === 'file'\" class=\"field-container\">\r\n <div class=\"field-label\" *ngIf=\"field.label\">\r\n {{ field.label }}\r\n <span class=\"text-danger\" *ngIf=\"field.required || field.mandatory\">*</span>\r\n </div>\r\n\r\n <!-- Upload Box -->\r\n <div class=\"upload-box\" (click)=\"fileInput.click()\"\r\n [class.is-invalid]=\"group.get(field.name)?.touched && group.get(field.name)?.invalid\"\r\n *ngIf=\"!field.uploadedFiles || field.uploadedFiles.length === 0 || field.multiple\">\r\n <mat-icon class=\"upload-icon\">cloud_upload</mat-icon>\r\n <div class=\"upload-text\">Click to upload File</div>\r\n <div class=\"upload-hint\">PDF, DOCX, JPG, PNG (Max 5MB)</div>\r\n <input #fileInput type=\"file\" [attr.multiple]=\"field.multiple ? true : null\" [attr.accept]=\"field.accept\"\r\n (change)=\"onFileChange($event, field)\" style=\"display: none;\">\r\n </div>\r\n\r\n <!-- Uploaded Files List -->\r\n <div class=\"uploaded-files-list\" *ngIf=\"field.uploadedFiles && field.uploadedFiles.length > 0\">\r\n <div class=\"uploaded-file-item\" *ngFor=\"let file of field.uploadedFiles; let i = index\">\r\n <div class=\"file-icon\">\r\n <mat-icon class=\"pdf-icon\" *ngIf=\"file.type === 'application/pdf'\">picture_as_pdf</mat-icon>\r\n <mat-icon class=\"doc-icon\"\r\n *ngIf=\"file.type.includes('word') || file.type.includes('document')\">description</mat-icon>\r\n <mat-icon class=\"img-icon\" *ngIf=\"file.type.includes('image')\">image</mat-icon>\r\n <mat-icon class=\"file-icon-default\"\r\n *ngIf=\"!file.type.includes('pdf') && !file.type.includes('word') && !file.type.includes('document') && !file.type.includes('image')\">insert_drive_file</mat-icon>\r\n </div>\r\n <div class=\"file-info\">\r\n <div class=\"file-name\">{{ file.name }}</div>\r\n <div class=\"file-size\">{{ (file.size / 1024).toFixed(2) }} KB</div>\r\n </div>\r\n <button mat-icon-button color=\"warn\" type=\"button\" (click)=\"removeFile(field, i)\"\r\n class=\"remove-file-btn\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n</ng-template>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { ConfigurableFormComponent } from './component/configurable-form.component';\r\nimport { MaterialModule } from '../material/material.module';\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n HttpClientModule,\r\n MaterialModule,\r\n ConfigurableFormComponent\r\n ],\r\n exports: [\r\n ConfigurableFormComponent\r\n ]\r\n})\r\nexport class ConfigurableFormModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MaterialModule } from './modules/material/material.module';\r\n\r\nimport { CardsModule } from './modules/cards/cards.module';\r\nimport { AlertModule } from './modules/alert/alert.module';\r\nimport { ButtonModule } from './modules/button/button.module';\r\nimport { ConfirmationModalModule } from './modules/confirmation-modal/confirmation-modal.module';\r\nimport { FilterSidebarModule } from './modules/filter-sidebar/filter-sidebar.module';\r\nimport { SummaryCardModule } from './modules/summary-card/summary-card.module';\r\nimport { ConfigurableFormModule } from './modules/configurable-form/configurable-form.module';\r\n\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n MaterialModule,\r\n CardsModule, AlertModule, ButtonModule, ConfirmationModalModule, FilterSidebarModule,\r\n SummaryCardModule,\r\n ConfigurableFormModule,\r\n ],\r\n exports: [\r\n MaterialModule,\r\n CardsModule, AlertModule, ButtonModule, ConfirmationModalModule, FilterSidebarModule,\r\n SummaryCardModule,\r\n ConfigurableFormModule,\r\n ],\r\n})\r\nexport class SharedUiModule { }\r\n","/**\n * Utility functions for LocalStorage operations\n */\nexport const getLocalStorageItem = (key: string): string | null => {\n return localStorage.getItem(key);\n};\n\nexport const setLocalStorageItem = (key: string, value: string): void => {\n localStorage.setItem(key, value);\n};\n\nexport const removeLocalStorageItem = (key: string): void => {\n localStorage.removeItem(key);\n};\n\nexport const clearLocalStorage = (): void => {\n localStorage.clear();\n};\n\n/**\n * Utility functions for SessionStorage operations\n */\nexport const getSessionStorageItem = (key: string): string | null => {\n return sessionStorage.getItem(key);\n};\n\nexport const setSessionStorageItem = (key: string, value: string): void => {\n sessionStorage.setItem(key, value);\n};\n\nexport const removeSessionStorageItem = (key: string): void => {\n sessionStorage.removeItem(key);\n};\n\nexport const clearSessionStorage = (): void => {\n sessionStorage.clear();\n};\n","import { FormConfig } from './configurable-form.model';\r\n\r\n/**\r\n * Example: Basic Form Configuration\r\n * This is a generic example for testing and demonstration purposes.\r\n */\r\nexport const EXAMPLE_FORM_CONFIG: FormConfig = {\r\n sections: [\r\n {\r\n sectionTitle: 'User Information',\r\n fields: [\r\n {\r\n name: 'fullName',\r\n label: 'Full Name',\r\n type: 'text',\r\n placeholder: 'Enter full name',\r\n required: true,\r\n class: 'col-12'\r\n },\r\n {\r\n name: 'email',\r\n label: 'Email Address',\r\n type: 'email',\r\n placeholder: 'Enter email address',\r\n required: true,\r\n class: 'col-6'\r\n },\r\n {\r\n name: 'phone',\r\n label: 'Phone Number',\r\n type: 'tel',\r\n placeholder: '+91 9999999999',\r\n class: 'col-6'\r\n },\r\n {\r\n name: 'role',\r\n label: 'Role',\r\n type: 'dropdown',\r\n placeholder: 'Select Role',\r\n options: [\r\n { label: 'Admin', value: 'admin' },\r\n { label: 'User', value: 'user' },\r\n { label: 'Guest', value: 'guest' }\r\n ],\r\n class: 'col-12'\r\n }\r\n ]\r\n },\r\n {\r\n sectionTitle: 'Preferences',\r\n fields: [\r\n {\r\n name: 'notifications',\r\n label: 'Receive Notifications',\r\n type: 'radio',\r\n options: [\r\n { label: 'Yes', value: 'yes' },\r\n { label: 'No', value: 'no' }\r\n ],\r\n value: 'yes',\r\n class: 'col-12'\r\n }\r\n ]\r\n },\r\n {\r\n sectionTitle: 'Documents',\r\n fields: [\r\n {\r\n name: 'profilePicture',\r\n label: 'Profile Picture',\r\n type: 'file',\r\n accept: '.jpg,.png',\r\n multiple: false,\r\n helpText: 'Upload a single profile picture (Max 5MB)',\r\n class: 'col-12'\r\n },\r\n {\r\n name: 'certificates',\r\n label: 'Certificates',\r\n type: 'file',\r\n accept: '.pdf,.doc,.docx',\r\n multiple: true,\r\n helpText: 'Upload multiple certificates (Max 5MB each)',\r\n class: 'col-12'\r\n }\r\n ]\r\n }\r\n ],\r\n submitLabel: 'Save',\r\n cancelLabel: 'Cancel',\r\n entityType: 'User'\r\n};\r\n\r\n/**\r\n * Example: Target Group Configuration\r\n * Demonstrates composite fields for Age Group and Gender Split\r\n */\r\nexport const TARGET_GROUP_CONFIG: FormConfig = {\r\n sections: [\r\n {\r\n sectionTitle: 'Target Group Settings',\r\n fields: [\r\n {\r\n name: 'targetAgeGroup',\r\n label: 'Target Age Group',\r\n type: 'composite',\r\n separator: '-',\r\n subFields: [\r\n {\r\n label: \"Min Age\",\r\n name: 'minAge',\r\n type: 'number',\r\n placeholder: 'Min Age',\r\n validationRules: { min: 0 }\r\n },\r\n {\r\n label: \"Max Age\",\r\n name: 'maxAge',\r\n type: 'number',\r\n placeholder: 'Max Age',\r\n validationRules: { min: 0 }\r\n }\r\n ],\r\n compositeValidationRule: 'minMax',\r\n class: 'col-12'\r\n },\r\n {\r\n name: 'genderSplit',\r\n label: 'Target Gender Split',\r\n type: 'composite',\r\n subFields: [\r\n {\r\n label: \"Male\",\r\n name: 'malePercentage',\r\n type: 'number',\r\n placeholder: 'Male',\r\n suffixText: '%',\r\n validationRules: { min: 0, max: 100 }\r\n },\r\n {\r\n label: \"Female\",\r\n name: 'femalePercentage',\r\n type: 'number',\r\n placeholder: 'Female',\r\n suffixText: '%',\r\n validationRules: { min: 0, max: 100 }\r\n }\r\n ],\r\n compositeValidationRule: 'percentageTotal',\r\n class: 'col-12'\r\n }\r\n ]\r\n }\r\n ],\r\n submitLabel: 'Save Configuration',\r\n cancelLabel: 'Cancel'\r\n};\r\n","export const DEFAULT_ITEMS_PER_PAGE = 10;\r\nexport const DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50];\r\nexport const PAGINATION_THEME_DEFAULT = 'theme-1';\r\nexport const PAGINATION_THEME_DARK = 'theme-2';\r\n\r\n// Nav\r\nexport const NAV_VARIANT_DEFAULT: 'filled' | 'underline' | 'pills' = 'filled';\r\nexport const NAV_ORIENTATION_DEFAULT: 'horizontal' | 'vertical' = 'horizontal';\r\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { DEFAULT_ITEMS_PER_PAGE, DEFAULT_PAGE_SIZE_OPTIONS, PAGINATION_THEME_DEFAULT } from '../../../../utils/constants';\n\nexport interface PaginationLabels {\n items: string;\n of: string;\n perPage: string;\n}\n\n@Component({\n selector: 'lib-pagination',\n templateUrl: './pagination.component.html',\n styleUrls: ['./pagination.component.scss'],\n standalone: false\n})\nexport class PaginationComponent implements OnInit, OnChanges {\n @Input() totalItems: number = 0;\n @Input() itemsPerPage: number = DEFAULT_ITEMS_PER_PAGE;\n @Input() currentPage: number = 1;\n @Input() pageSizeOptions: number[] = DEFAULT_PAGE_SIZE_OPTIONS;\n @Input() theme: 'theme-1' | 'theme-2' = PAGINATION_THEME_DEFAULT;\n @Input() labels: PaginationLabels = {\n items: 'items',\n of: 'of',\n perPage: 'Per Page'\n };\n\n @Output() pageChange = new EventEmitter<number>();\n @Output() itemsPerPageChange = new EventEmitter<number>();\n\n totalPages: number = 0;\n pages: (number | string)[] = [];\n startItem: number = 0;\n endItem: number = 0;\n\n constructor() { }\n\n ngOnInit(): void {\n this.calculatePagination();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes['totalItems'] || changes['itemsPerPage'] || changes['currentPage']) {\n this.calculatePagination();\n }\n }\n\n calculatePagination(): void {\n this.totalPages = Math.ceil(this.totalItems / this.itemsPerPage);\n\n // Ensure current page is valid\n if (this.currentPage < 1) {\n this.currentPage = 1;\n } else if (this.currentPage > this.totalPages && this.totalPages > 0) {\n this.currentPage = this.totalPages;\n }\n\n this.startItem = (this.currentPage - 1) * this.itemsPerPage + 1;\n this.endItem = Math.min(this.currentPage * this.itemsPerPage, this.totalItems);\n\n if (this.totalItems === 0) {\n this.startItem = 0;\n this.endItem = 0;\n }\n\n this.pages = this.getVisiblePages(this.currentPage, this.totalPages);\n }\n\n getVisiblePages(current: number, total: number): (number | string)[] {\n if (total <= 7) {\n return Array.from({ length: total }, (_, i) => i + 1);\n }\n\n if (current <= 4) {\n return [1, 2, 3, 4, 5, '...', total];\n }\n\n if (current >= total - 3) {\n return [1, '...', total - 4, total - 3, total - 2, total - 1, total];\n }\n\n return [1, '...', current - 1, current, current + 1, '...', total];\n }\n\n onPageChange(page: number | string): void {\n if (typeof page === 'string') return;\n if (page < 1 || page > this.totalPages || page === this.currentPage) return;\n \n this.pageChange.emit(page);\n }\n\n onItemsPerPageChange(event: Event): void {\n const target = event.target as HTMLSelectElement;\n const newSize = Number(target.value);\n this.itemsPerPageChange.emit(newSize);\n }\n\n nextPage(): void {\n if (this.currentPage < this.totalPages) {\n this.onPageChange(this.currentPage + 1);\n }\n }\n\n prevPage(): void {\n if (this.currentPage > 1) {\n this.onPageChange(this.currentPage - 1);\n }\n }\n}\n","<div class=\"cc-pagination\" [ngClass]=\"theme\">\n <!-- Left Side: Items Info & Per Page -->\n <div class=\"pagination-left\" *ngIf=\"pageSizeOptions.length > 1 || totalItems > 0\">\n <span class=\"items-info\">\n {{ startItem }}-{{ endItem }} {{ labels.of }} {{ totalItems }} {{ labels.items }}\n </span>\n\n <div class=\"per-page-selector\" *ngIf=\"pageSizeOptions.length > 1\">\n <div class=\"select-wrapper\">\n <select [value]=\"itemsPerPage\" (change)=\"onItemsPerPageChange($event)\">\n <option *ngFor=\"let option of pageSizeOptions\" [value]=\"option\">\n {{ option }}\n </option>\n </select>\n <span class=\"select-arrow\"></span>\n </div>\n <span class=\"per-page-label\">{{ labels.perPage }}</span>\n </div>\n </div>\n\n <!-- Right Side: Page Controls -->\n <div class=\"pagination-right\">\n <button \n class=\"page-btn prev-btn\" \n [disabled]=\"currentPage === 1\" \n (click)=\"prevPage()\"\n aria-label=\"Previous Page\">\n <span class=\"icon\">‹</span>\n </button>\n\n <div class=\"page-numbers\">\n <ng-container *ngFor=\"let page of pages\">\n <button \n *ngIf=\"page !== '...'\"\n class=\"page-btn number-btn\" \n [class.active]=\"page === currentPage\"\n (click)=\"onPageChange(page)\">\n {{ page }}\n </button>\n <span *ngIf=\"page === '...'\" class=\"ellipsis\">...</span>\n </ng-container>\n </div>\n\n <button \n class=\"page-btn next-btn\" \n [disabled]=\"currentPage === totalPages || totalPages === 0\" \n (click)=\"nextPage()\"\n aria-label=\"Next Page\">\n <span class=\"icon\">›</span>\n </button>\n </div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PaginationComponent } from './components/pagination/pagination.component';\n\n\n@NgModule({\n declarations: [\n PaginationComponent\n ],\n imports: [\n CommonModule\n ],\n exports: [\n PaginationComponent\n ]\n})\nexport class PaginationModule { }\n","import { Component, EventEmitter, Input, Output, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { NAV_VARIANT_DEFAULT, NAV_ORIENTATION_DEFAULT } from '../../../../utils/constants';\r\nimport { NavStyleConfig } from '../../nav.models';\r\n\r\nexport interface NavItem {\r\n id: string | number;\r\n label: string;\r\n icon?: string;\r\n badge?: string | number;\r\n disabled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'lib-nav',\r\n templateUrl: './nav.component.html',\r\n styleUrls: ['./nav.component.scss'],\r\n standalone: false\r\n})\r\nexport class NavComponent implements OnChanges {\r\n @Input() items: NavItem[] = [];\r\n @Input() activeId: string | number | null = null;\r\n @Input() variant: 'filled' | 'underline' | 'pills' = NAV_VARIANT_DEFAULT;\r\n @Input() orientation: 'horizontal' | 'vertical' = NAV_ORIENTATION_DEFAULT;\r\n @Input() styleConfig: NavStyleConfig = {};\r\n\r\n @Output() selectionChange = new EventEmitter<NavItem>();\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['styleConfig']) {\r\n console.log(' [NavComponent] styleConfig changed:', this.styleConfig);\r\n console.log(' [NavComponent] computedStyles:', this.computedStyles);\r\n }\r\n }\r\n\r\n get computedStyles(): { [key: string]: string | undefined } {\r\n const c = this.styleConfig;\r\n return {\r\n // Container (direct CSS)\r\n 'width': c.width,\r\n 'box-shadow': c.boxShadow,\r\n\r\n // Container (CSS Variables)\r\n '--cc-nav-container-bg': c.backgroundColor,\r\n '--cc-nav-container-radius': c.borderRadius,\r\n '--cc-nav-container-border': c.border,\r\n '--cc-nav-container-padding': c.padding,\r\n '--cc-nav-container-gap': c.gap,\r\n\r\n // Item (CSS Variables)\r\n '--cc-nav-font-size': c.fontSize,\r\n '--cc-nav-font-weight': c.fontWeight,\r\n '--cc-nav-item-color': c.itemColor,\r\n '--cc-nav-item-radius': c.itemRadius,\r\n '--cc-nav-item-padding': c.itemPadding,\r\n\r\n // Active Item (CSS Variables)\r\n '--cc-nav-item-active-bg': c.activeItemBg,\r\n '--cc-nav-item-active-color': c.activeItemColor,\r\n '--cc-nav-item-active-font-weight': c.activeItemFontWeight,\r\n '--cc-nav-item-active-border-color': c.activeItemBorderColor,\r\n\r\n // Hover Item (CSS Variables)\r\n '--cc-nav-item-hover-bg': c.hoverItemBg,\r\n '--cc-nav-item-hover-color': c.hoverItemColor,\r\n\r\n // Badge (CSS Variables)\r\n '--cc-nav-badge-bg': c.badgeBg,\r\n '--cc-nav-badge-color': c.badgeColor,\r\n };\r\n }\r\n\r\n onItemClick(item: NavItem): void {\r\n if (item.disabled) return;\r\n if (item.id === this.activeId) return;\r\n\r\n this.selectionChange.emit(item);\r\n }\r\n\r\n trackById(index: number, item: NavItem): string | number {\r\n return item.id;\r\n }\r\n}\r\n","<nav\r\n class=\"cc-nav\"\r\n [ngClass]=\"[variant, orientation]\"\r\n [ngStyle]=\"computedStyles\"\r\n role=\"tablist\"\r\n [attr.aria-orientation]=\"orientation\">\r\n\r\n <button\r\n *ngFor=\"let item of items; trackBy: trackById\"\r\n class=\"cc-nav-item\"\r\n [class.active]=\"item.id === activeId\"\r\n [class.disabled]=\"item.disabled\"\r\n [disabled]=\"item.disabled\"\r\n role=\"tab\"\r\n [attr.aria-selected]=\"item.id === activeId\"\r\n [attr.aria-disabled]=\"item.disabled || null\"\r\n (click)=\"onItemClick(item)\">\r\n\r\n <!-- Icon (optional) -->\r\n <span *ngIf=\"item.icon\" class=\"cc-nav-item-icon\">\r\n <i [ngClass]=\"item.icon\"></i>\r\n </span>\r\n\r\n <!-- Label -->\r\n <span class=\"cc-nav-item-label\">{{ item.label }}</span>\r\n\r\n <!-- Badge (optional) -->\r\n <span *ngIf=\"item.badge != null\" class=\"cc-nav-item-badge\">\r\n {{ item.badge }}\r\n </span>\r\n\r\n </button>\r\n\r\n</nav>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NavComponent } from './components/nav/nav.component';\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n NavComponent\r\n ],\r\n imports: [\r\n CommonModule\r\n ],\r\n exports: [\r\n NavComponent\r\n ]\r\n})\r\nexport class NavModule { }\r\n","/*\r\n * Public API Surface of shared-ui\r\n */\r\n\r\nexport * from './lib/shared-ui.module';\r\nexport * from './lib/modules/material/material.module';\r\nexport * from './lib/utils/storage.utils';\r\nexport * from './lib/modules/cards/cards.module';\r\nexport * from './lib/modules/cards/cards.models';\r\nexport * from './lib/modules/cards/components/card-type-1/card-type-1.component';\r\nexport * from './lib/modules/cards/components/card-type-2/card-type-2.component';\r\nexport * from './lib/modules/summary-card/summary-card.module';\r\nexport * from './lib/modules/summary-card/components/summary-card/summary-card.component';\r\nexport * from './lib/modules/configurable-form/configurable-form.module';\r\nexport * from './lib/modules/configurable-form/component/configurable-form.component';\r\n// Export Configurable Form resources namespaced to avoid collisions\r\nexport * from './lib/modules/configurable-form/configurable-form.model';\r\nexport * as ConfigurableFormExamples from './lib/modules/configurable-form/configurable-form.examples';\r\n\r\nexport * from './lib/modules/pagination/pagination.module';\r\nexport * from './lib/modules/pagination/components/pagination/pagination.component';\r\nexport * from './lib/modules/nav/nav.module';\r\nexport * from './lib/modules/nav/components/nav/nav.component';\r\nexport * from './lib/modules/nav/nav.models';\r\nexport * from './lib/utils/constants';\r\nexport * from './lib/modules/alert/alert.module';\r\nexport * from './lib/modules/alert/components/alert/alert.component';\r\nexport * from './lib/modules/button/button.module';\r\nexport * from './lib/modules/button/components/button/button.component';\r\nexport * from './lib/modules/confirmation-modal/confirmation-modal.module';\r\nexport * from './lib/modules/confirmation-modal/confirmation-modal.models';\r\nexport * from './lib/modules/confirmation-modal/components/confirmation-modal/confirmation-modal.component';\r\nexport * from './lib/modules/filter-sidebar/filter-sidebar.module';\r\nexport * from './lib/modules/filter-sidebar/filter-sidebar.models';\r\nexport * from './lib/modules/filter-sidebar/components/filter-sidebar/filter-sidebar.component';\r\n\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4","i7","i8","i9","i10"],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -390,9 +390,8 @@ interface SummaryCardMeta {
|
|
|
390
390
|
}
|
|
391
391
|
declare class SummaryCardComponent {
|
|
392
392
|
config: SummaryCardConfig;
|
|
393
|
-
theme
|
|
393
|
+
theme?: 'theme-1' | 'theme-2';
|
|
394
394
|
cardClick: EventEmitter<void>;
|
|
395
|
-
get hostClasses(): string;
|
|
396
395
|
constructor();
|
|
397
396
|
onCardClick(): void;
|
|
398
397
|
get cardClasses(): {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "commons-shared-web-ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/animations": "20.3.15",
|
|
6
6
|
"@angular/cdk": "20.2.14",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"@angular/platform-browser-dynamic": "20.3.15",
|
|
14
14
|
"@angular/router": "20.3.15",
|
|
15
15
|
"rxjs": "7.8.0",
|
|
16
|
-
"zone.js": "0.14.
|
|
16
|
+
"zone.js": "~0.14.0 || ~0.15.0"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"tslib": "^2.3.0"
|
|
@@ -173,12 +173,4 @@ $theme-2-summary-card-config: (
|
|
|
173
173
|
--cc-sc-meta-pill-radius: #{map.get($config, meta-pill-radius)};
|
|
174
174
|
--cc-sc-meta-pill-font-size: #{map.get($config, meta-pill-font-size)};
|
|
175
175
|
--cc-sc-meta-pill-font-weight: #{map.get($config, meta-pill-font-weight)};
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
.theme-1 .cc-summary-card {
|
|
179
|
-
@include summary-card-theme();
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
.theme-2 .cc-summary-card {
|
|
183
|
-
@include summary-card-theme($theme-2-summary-card-config);
|
|
184
176
|
}
|