@cerca/design-system 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,831 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, signal, computed, Input, Component, forwardRef, EventEmitter, Output, ContentChild, HostListener, inject, HostBinding } from '@angular/core';
3
+ import * as i1$2 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import * as i1 from 'ng-zorro-antd/button';
6
+ import { NzButtonModule } from 'ng-zorro-antd/button';
7
+ import * as i3$1 from 'ng-zorro-antd/icon';
8
+ import { NzIconModule } from 'ng-zorro-antd/icon';
9
+ import * as i2 from 'ng-zorro-antd/core/transition-patch';
10
+ import * as i3 from 'ng-zorro-antd/core/wave';
11
+ import * as i1$1 from '@angular/forms';
12
+ import { FormsModule, NG_VALUE_ACCESSOR, FormBuilder, Validators, ReactiveFormsModule } from '@angular/forms';
13
+ import * as i2$1 from 'ng-zorro-antd/input';
14
+ import { NzInputModule } from 'ng-zorro-antd/input';
15
+ import { NzSelectComponent, NzOptionComponent } from 'ng-zorro-antd/select';
16
+ import * as i1$3 from 'ng-zorro-antd/card';
17
+ import { NzCardModule } from 'ng-zorro-antd/card';
18
+ import { Subject, Subscription } from 'rxjs';
19
+ import { debounceTime, distinctUntilChanged } from 'rxjs/operators';
20
+ import { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';
21
+ import * as i2$2 from 'ng-zorro-antd/alert';
22
+ import { NzAlertModule } from 'ng-zorro-antd/alert';
23
+ import * as i4 from 'ng-zorro-antd/checkbox';
24
+ import { NzCheckboxModule } from 'ng-zorro-antd/checkbox';
25
+ import { NzFormDirective, NzFormControlComponent, NzFormLabelComponent, NzFormItemComponent } from 'ng-zorro-antd/form';
26
+
27
+ class CcButtonComponent {
28
+ constructor() {
29
+ this.variant = input('primary', ...(ngDevMode ? [{ debugName: "variant" }] : []));
30
+ this.type = input('button', ...(ngDevMode ? [{ debugName: "type" }] : []));
31
+ this._disabled = signal(false, ...(ngDevMode ? [{ debugName: "_disabled" }] : []));
32
+ this.loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
33
+ this.icon = input(undefined, ...(ngDevMode ? [{ debugName: "icon" }] : []));
34
+ this.size = input('default', ...(ngDevMode ? [{ debugName: "size" }] : []));
35
+ this.nzType = computed(() => {
36
+ const variantMap = {
37
+ 'primary': 'primary',
38
+ 'secondary': 'default',
39
+ 'ghost': 'text',
40
+ 'outline': 'dashed'
41
+ };
42
+ return variantMap[this.variant()] || 'default';
43
+ }, ...(ngDevMode ? [{ debugName: "nzType" }] : []));
44
+ }
45
+ set disabled(value) { this._disabled.set(value); }
46
+ get disabled() { return this._disabled(); }
47
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
48
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: CcButtonComponent, isStandalone: true, selector: "cc-button", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<button nz-button [nzType]=\"nzType()\" [nzLoading]=\"loading()\" [nzSize]=\"size()\" [disabled]=\"disabled\" [type]=\"type()\"\r\n class=\"cerca-btn\">\r\n @if (icon(); as iconName) {\r\n <span nz-icon [nzType]=\"$any(iconName)\"></span>\r\n }\r\n <ng-content></ng-content>\r\n</button>", styles: [".cerca-btn{min-height:44px;min-width:44px;font-family:var(--font-family-base);font-weight:var(--btn-font-weight, var(--font-weight-medium));border-radius:var(--btn-radius, var(--radius-md));transition:all .2s cubic-bezier(.4,0,.2,1)}.cerca-btn:focus-visible{box-shadow:0 0 0 3px var(--color-focus-ring);outline:none}.cerca-btn:hover:not(:disabled){transform:translateY(-1px)}.cerca-btn:active:not(:disabled){transform:translateY(0)}:host ::ng-deep .ant-btn-primary.cerca-btn{background-color:var(--btn-bg-primary, var(--color-brand));border-color:var(--btn-bg-primary, var(--color-brand));box-shadow:var(--btn-shadow-default, var(--shadow-sm))}:host ::ng-deep .ant-btn-primary.cerca-btn:hover:not(:disabled){background-color:var(--color-brand-hover);border-color:var(--color-brand-hover);box-shadow:var(--btn-shadow-hover, var(--shadow-md))}:host ::ng-deep .ant-btn-default.cerca-btn{background-color:var(--color-bg-primary);color:var(--color-brand);border-color:var(--color-border-strong)}:host ::ng-deep .ant-btn-default.cerca-btn:hover:not(:disabled){background-color:var(--color-bg-secondary);border-color:var(--color-brand);color:var(--color-brand)}:host ::ng-deep .ant-btn-text.cerca-btn{color:var(--color-text-secondary)}:host ::ng-deep .ant-btn-text.cerca-btn:hover:not(:disabled){background-color:var(--color-bg-secondary);color:var(--color-brand)}:host ::ng-deep .ant-btn-dashed.cerca-btn{color:var(--color-brand);border-color:var(--color-brand)}:host ::ng-deep .ant-btn-dashed.cerca-btn:hover:not(:disabled){background-color:var(--color-bg-secondary);border-color:var(--color-brand-hover);color:var(--color-brand-hover)}:host ::ng-deep .cerca-btn:disabled{opacity:.5;cursor:not-allowed;transform:none!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: NzButtonModule }, { kind: "component", type: i1.NzButtonComponent, selector: "button[nz-button], a[nz-button]", inputs: ["nzBlock", "nzGhost", "nzSearch", "nzLoading", "nzDanger", "disabled", "tabIndex", "nzType", "nzShape", "nzSize"], exportAs: ["nzButton"] }, { kind: "directive", type: i2.ɵNzTransitionPatchDirective, selector: "[nz-button], [nz-icon], nz-icon, [nz-menu-item], [nz-submenu], nz-select-top-control, nz-select-placeholder, nz-input-group", inputs: ["hidden"] }, { kind: "directive", type: i3.NzWaveDirective, selector: "[nz-wave],button[nz-button]:not([nzType=\"link\"]):not([nzType=\"text\"])", inputs: ["nzWaveExtraNode"], exportAs: ["nzWave"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i3$1.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] }); }
49
+ }
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcButtonComponent, decorators: [{
51
+ type: Component,
52
+ args: [{ selector: 'cc-button', standalone: true, imports: [CommonModule, NzButtonModule, NzIconModule], template: "<button nz-button [nzType]=\"nzType()\" [nzLoading]=\"loading()\" [nzSize]=\"size()\" [disabled]=\"disabled\" [type]=\"type()\"\r\n class=\"cerca-btn\">\r\n @if (icon(); as iconName) {\r\n <span nz-icon [nzType]=\"$any(iconName)\"></span>\r\n }\r\n <ng-content></ng-content>\r\n</button>", styles: [".cerca-btn{min-height:44px;min-width:44px;font-family:var(--font-family-base);font-weight:var(--btn-font-weight, var(--font-weight-medium));border-radius:var(--btn-radius, var(--radius-md));transition:all .2s cubic-bezier(.4,0,.2,1)}.cerca-btn:focus-visible{box-shadow:0 0 0 3px var(--color-focus-ring);outline:none}.cerca-btn:hover:not(:disabled){transform:translateY(-1px)}.cerca-btn:active:not(:disabled){transform:translateY(0)}:host ::ng-deep .ant-btn-primary.cerca-btn{background-color:var(--btn-bg-primary, var(--color-brand));border-color:var(--btn-bg-primary, var(--color-brand));box-shadow:var(--btn-shadow-default, var(--shadow-sm))}:host ::ng-deep .ant-btn-primary.cerca-btn:hover:not(:disabled){background-color:var(--color-brand-hover);border-color:var(--color-brand-hover);box-shadow:var(--btn-shadow-hover, var(--shadow-md))}:host ::ng-deep .ant-btn-default.cerca-btn{background-color:var(--color-bg-primary);color:var(--color-brand);border-color:var(--color-border-strong)}:host ::ng-deep .ant-btn-default.cerca-btn:hover:not(:disabled){background-color:var(--color-bg-secondary);border-color:var(--color-brand);color:var(--color-brand)}:host ::ng-deep .ant-btn-text.cerca-btn{color:var(--color-text-secondary)}:host ::ng-deep .ant-btn-text.cerca-btn:hover:not(:disabled){background-color:var(--color-bg-secondary);color:var(--color-brand)}:host ::ng-deep .ant-btn-dashed.cerca-btn{color:var(--color-brand);border-color:var(--color-brand)}:host ::ng-deep .ant-btn-dashed.cerca-btn:hover:not(:disabled){background-color:var(--color-bg-secondary);border-color:var(--color-brand-hover);color:var(--color-brand-hover)}:host ::ng-deep .cerca-btn:disabled{opacity:.5;cursor:not-allowed;transform:none!important}\n"] }]
53
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], disabled: [{
54
+ type: Input
55
+ }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
56
+
57
+ class CcInputComponent {
58
+ constructor() {
59
+ this.type = input('text', ...(ngDevMode ? [{ debugName: "type" }] : []));
60
+ this.placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
61
+ this.label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
62
+ this.error = input(false, ...(ngDevMode ? [{ debugName: "error" }] : []));
63
+ this._disabled = signal(false, ...(ngDevMode ? [{ debugName: "_disabled" }] : []));
64
+ this.size = input('default', ...(ngDevMode ? [{ debugName: "size" }] : []));
65
+ this.prefix = input(undefined, ...(ngDevMode ? [{ debugName: "prefix" }] : []));
66
+ this.suffix = input(undefined, ...(ngDevMode ? [{ debugName: "suffix" }] : []));
67
+ this.value = '';
68
+ this.passwordVisible = signal(false, ...(ngDevMode ? [{ debugName: "passwordVisible" }] : []));
69
+ this.onChange = () => { };
70
+ this.onTouched = () => { };
71
+ this.inputType = computed(() => {
72
+ if (this.type() === 'password') {
73
+ return this.passwordVisible() ? 'text' : 'password';
74
+ }
75
+ return this.type();
76
+ }, ...(ngDevMode ? [{ debugName: "inputType" }] : []));
77
+ }
78
+ set disabled(value) { this._disabled.set(value); }
79
+ get disabled() { return this._disabled(); }
80
+ onInputChange(event) {
81
+ const target = event.target;
82
+ this.value = target.value;
83
+ this.onChange(this.value);
84
+ this.onTouched();
85
+ }
86
+ togglePasswordVisibility() {
87
+ if (this.type() === 'password') {
88
+ this.passwordVisible.update(visible => !visible);
89
+ }
90
+ }
91
+ writeValue(value) {
92
+ this.value = value || '';
93
+ }
94
+ registerOnChange(fn) {
95
+ this.onChange = fn;
96
+ }
97
+ registerOnTouched(fn) {
98
+ this.onTouched = fn;
99
+ }
100
+ setDisabledState(isDisabled) {
101
+ this._disabled.set(isDisabled);
102
+ }
103
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
104
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: CcInputComponent, isStandalone: true, selector: "cc-input", inputs: { type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, prefix: { classPropertyName: "prefix", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, suffix: { classPropertyName: "suffix", publicName: "suffix", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
105
+ {
106
+ provide: NG_VALUE_ACCESSOR,
107
+ useExisting: forwardRef(() => CcInputComponent),
108
+ multi: true
109
+ }
110
+ ], ngImport: i0, template: "@if (label()) {\r\n<label class=\"input-label\">{{ label() }}</label>\r\n}\r\n\r\n<nz-input-group [class.has-error]=\"$any(error())\" [nzPrefix]=\"prefixTemplate\" [nzSuffix]=\"suffixTemplate\">\r\n <input nz-input [type]=\"inputType()\" [placeholder]=\"$any(placeholder())\" [disabled]=\"disabled\" [(ngModel)]=\"value\"\r\n (ngModelChange)=\"onChange($event)\" (blur)=\"onTouched()\" [nzSize]=\"$any(size())\" />\r\n</nz-input-group>\r\n\r\n<ng-template #prefixTemplate>\r\n @if (prefix()) {\r\n <span nz-icon [nzType]=\"$any(prefix())\"></span>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #suffixTemplate>\r\n @if (type() === 'password') {\r\n <span nz-icon [nzType]=\"passwordVisible() ? 'eye-invisible' : 'eye'\" (click)=\"togglePasswordVisibility()\"\r\n class=\"password-toggle\"></span>\r\n }\r\n @if (type() !== 'password' && suffix()) {\r\n <span nz-icon [nzType]=\"$any(suffix())\"></span>\r\n }\r\n</ng-template>", styles: [":host{display:block;width:100%}.input-label{display:block;margin-bottom:8px;font-size:14px;color:#262626;font-weight:500}.password-toggle{cursor:pointer;color:#00000073}.password-toggle:hover{color:#000000d9}nz-input-group{width:100%}.has-error ::ng-deep .ant-input,.has-error ::ng-deep .ant-input-affix-wrapper{border-color:#ff4d4f}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NzInputModule }, { kind: "directive", type: i2$1.NzInputDirective, selector: "input[nz-input],textarea[nz-input]", inputs: ["nzVariant", "nzSize", "nzStepperless", "nzStatus", "disabled", "readonly"], exportAs: ["nzInput"] }, { kind: "component", type: i2$1.NzInputGroupComponent, selector: "nz-input-group", inputs: ["nzAddOnBeforeIcon", "nzAddOnAfterIcon", "nzPrefixIcon", "nzSuffixIcon", "nzAddOnBefore", "nzAddOnAfter", "nzPrefix", "nzStatus", "nzSuffix", "nzSize", "nzSearch"], exportAs: ["nzInputGroup"] }, { kind: "directive", type: i2$1.NzInputGroupWhitSuffixOrPrefixDirective, selector: "nz-input-group[nzSuffix], nz-input-group[nzPrefix]" }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i3$1.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }] }); }
111
+ }
112
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcInputComponent, decorators: [{
113
+ type: Component,
114
+ args: [{ selector: 'cc-input', standalone: true, imports: [
115
+ CommonModule,
116
+ FormsModule,
117
+ NzInputModule,
118
+ NzIconModule
119
+ ], providers: [
120
+ {
121
+ provide: NG_VALUE_ACCESSOR,
122
+ useExisting: forwardRef(() => CcInputComponent),
123
+ multi: true
124
+ }
125
+ ], template: "@if (label()) {\r\n<label class=\"input-label\">{{ label() }}</label>\r\n}\r\n\r\n<nz-input-group [class.has-error]=\"$any(error())\" [nzPrefix]=\"prefixTemplate\" [nzSuffix]=\"suffixTemplate\">\r\n <input nz-input [type]=\"inputType()\" [placeholder]=\"$any(placeholder())\" [disabled]=\"disabled\" [(ngModel)]=\"value\"\r\n (ngModelChange)=\"onChange($event)\" (blur)=\"onTouched()\" [nzSize]=\"$any(size())\" />\r\n</nz-input-group>\r\n\r\n<ng-template #prefixTemplate>\r\n @if (prefix()) {\r\n <span nz-icon [nzType]=\"$any(prefix())\"></span>\r\n }\r\n</ng-template>\r\n\r\n<ng-template #suffixTemplate>\r\n @if (type() === 'password') {\r\n <span nz-icon [nzType]=\"passwordVisible() ? 'eye-invisible' : 'eye'\" (click)=\"togglePasswordVisibility()\"\r\n class=\"password-toggle\"></span>\r\n }\r\n @if (type() !== 'password' && suffix()) {\r\n <span nz-icon [nzType]=\"$any(suffix())\"></span>\r\n }\r\n</ng-template>", styles: [":host{display:block;width:100%}.input-label{display:block;margin-bottom:8px;font-size:14px;color:#262626;font-weight:500}.password-toggle{cursor:pointer;color:#00000073}.password-toggle:hover{color:#000000d9}nz-input-group{width:100%}.has-error ::ng-deep .ant-input,.has-error ::ng-deep .ant-input-affix-wrapper{border-color:#ff4d4f}\n"] }]
126
+ }], propDecorators: { type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], disabled: [{
127
+ type: Input
128
+ }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], prefix: [{ type: i0.Input, args: [{ isSignal: true, alias: "prefix", required: false }] }], suffix: [{ type: i0.Input, args: [{ isSignal: true, alias: "suffix", required: false }] }] } });
129
+
130
+ class CcSelectComponent {
131
+ constructor() {
132
+ this.options = input([], ...(ngDevMode ? [{ debugName: "options" }] : []));
133
+ this.placeholder = input('Seleccionar opción', ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
134
+ this.label = input('', ...(ngDevMode ? [{ debugName: "label" }] : []));
135
+ this.size = input('default', ...(ngDevMode ? [{ debugName: "size" }] : []));
136
+ this.allowClear = input(true, ...(ngDevMode ? [{ debugName: "allowClear" }] : []));
137
+ this.showSearch = input(false, ...(ngDevMode ? [{ debugName: "showSearch" }] : []));
138
+ this._disabled = signal(false, ...(ngDevMode ? [{ debugName: "_disabled" }] : []));
139
+ this.onChange = () => { };
140
+ this.onTouched = () => { };
141
+ }
142
+ set disabled(value) { this._disabled.set(value); }
143
+ get disabled() { return this._disabled(); }
144
+ onValueChange(value) {
145
+ this.value = value;
146
+ this.onChange(value);
147
+ this.onTouched();
148
+ }
149
+ writeValue(value) {
150
+ this.value = value;
151
+ }
152
+ registerOnChange(fn) {
153
+ this.onChange = fn;
154
+ }
155
+ registerOnTouched(fn) {
156
+ this.onTouched = fn;
157
+ }
158
+ setDisabledState(isDisabled) {
159
+ this._disabled.set(isDisabled);
160
+ }
161
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
162
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.4", type: CcSelectComponent, isStandalone: true, selector: "cc-select", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, allowClear: { classPropertyName: "allowClear", publicName: "allowClear", isSignal: true, isRequired: false, transformFunction: null }, showSearch: { classPropertyName: "showSearch", publicName: "showSearch", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null } }, providers: [
163
+ {
164
+ provide: NG_VALUE_ACCESSOR,
165
+ useExisting: forwardRef(() => CcSelectComponent),
166
+ multi: true
167
+ }
168
+ ], ngImport: i0, template: "<div class=\"cc-select-wrapper\">\r\n <nz-select class=\"cerca-select\" [nzSize]=\"$any(size())\" [nzPlaceHolder]=\"$any(placeholder())\"\r\n [nzDisabled]=\"disabled\" [nzAllowClear]=\"$any(allowClear())\" [nzShowSearch]=\"$any(showSearch())\"\r\n [(ngModel)]=\"value\" (ngModelChange)=\"onValueChange($event)\">\r\n <nz-option *ngFor=\"let option of options()\" [nzValue]=\"option.value\" [nzLabel]=\"option.label\">\r\n </nz-option>\r\n </nz-select>\r\n</div>", styles: [".cc-select-wrapper{width:100%}:host ::ng-deep .cerca-select{width:100%}:host ::ng-deep .cerca-select .ant-select-selector{min-height:44px!important;border-radius:var(--radius-md)!important;font-family:var(--font-family-base)!important;transition:all .2s cubic-bezier(.4,0,.2,1)!important}:host ::ng-deep .cerca-select .ant-select-selector:focus,:host ::ng-deep .cerca-select .ant-select-selector:focus-within{box-shadow:0 0 0 3px var(--color-focus-ring)!important;border-color:var(--color-brand)!important}:host ::ng-deep .cerca-select:hover .ant-select-selector{border-color:var(--color-brand)!important}:host ::ng-deep .cerca-select.ant-select-disabled .ant-select-selector{background-color:var(--color-bg-secondary)!important;cursor:not-allowed!important;opacity:.7!important}:host ::ng-deep .ant-select-dropdown{border-radius:var(--radius-md)!important;box-shadow:var(--shadow-lg)!important}:host ::ng-deep .ant-select-dropdown .ant-select-item{min-height:40px!important;padding:var(--space-2) var(--space-3)!important;transition:background-color .15s ease!important}:host ::ng-deep .ant-select-dropdown .ant-select-item:hover{background-color:var(--color-bg-hover)!important}:host ::ng-deep .ant-select-dropdown .ant-select-item.ant-select-item-option-selected{background-color:var(--color-brand-subtle)!important;color:var(--color-brand)!important;font-weight:var(--font-weight-medium)!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: NzSelectComponent, selector: "nz-select", inputs: ["nzId", "nzSize", "nzStatus", "nzVariant", "nzOptionHeightPx", "nzOptionOverflowSize", "nzDropdownClassName", "nzDropdownMatchSelectWidth", "nzDropdownStyle", "nzNotFoundContent", "nzPlaceHolder", "nzPlacement", "nzMaxTagCount", "nzDropdownRender", "nzCustomTemplate", "nzPrefix", "nzSuffixIcon", "nzClearIcon", "nzRemoveIcon", "nzMenuItemSelectedIcon", "nzTokenSeparators", "nzMaxTagPlaceholder", "nzMaxMultipleCount", "nzMode", "nzFilterOption", "compareWith", "nzAllowClear", "nzShowSearch", "nzLoading", "nzAutoFocus", "nzAutoClearSearchValue", "nzServerSearch", "nzDisabled", "nzOpen", "nzSelectOnTab", "nzBackdrop", "nzOptions", "nzShowArrow"], outputs: ["nzOnSearch", "nzScrollToBottom", "nzOpenChange", "nzBlur", "nzFocus", "nzOnClear"], exportAs: ["nzSelect"] }, { kind: "component", type: NzOptionComponent, selector: "nz-option", inputs: ["nzTitle", "nzLabel", "nzValue", "nzKey", "nzDisabled", "nzHide", "nzCustomContent"], exportAs: ["nzOption"] }] }); }
169
+ }
170
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcSelectComponent, decorators: [{
171
+ type: Component,
172
+ args: [{ selector: 'cc-select', standalone: true, imports: [CommonModule, FormsModule, NzSelectComponent, NzOptionComponent], providers: [
173
+ {
174
+ provide: NG_VALUE_ACCESSOR,
175
+ useExisting: forwardRef(() => CcSelectComponent),
176
+ multi: true
177
+ }
178
+ ], template: "<div class=\"cc-select-wrapper\">\r\n <nz-select class=\"cerca-select\" [nzSize]=\"$any(size())\" [nzPlaceHolder]=\"$any(placeholder())\"\r\n [nzDisabled]=\"disabled\" [nzAllowClear]=\"$any(allowClear())\" [nzShowSearch]=\"$any(showSearch())\"\r\n [(ngModel)]=\"value\" (ngModelChange)=\"onValueChange($event)\">\r\n <nz-option *ngFor=\"let option of options()\" [nzValue]=\"option.value\" [nzLabel]=\"option.label\">\r\n </nz-option>\r\n </nz-select>\r\n</div>", styles: [".cc-select-wrapper{width:100%}:host ::ng-deep .cerca-select{width:100%}:host ::ng-deep .cerca-select .ant-select-selector{min-height:44px!important;border-radius:var(--radius-md)!important;font-family:var(--font-family-base)!important;transition:all .2s cubic-bezier(.4,0,.2,1)!important}:host ::ng-deep .cerca-select .ant-select-selector:focus,:host ::ng-deep .cerca-select .ant-select-selector:focus-within{box-shadow:0 0 0 3px var(--color-focus-ring)!important;border-color:var(--color-brand)!important}:host ::ng-deep .cerca-select:hover .ant-select-selector{border-color:var(--color-brand)!important}:host ::ng-deep .cerca-select.ant-select-disabled .ant-select-selector{background-color:var(--color-bg-secondary)!important;cursor:not-allowed!important;opacity:.7!important}:host ::ng-deep .ant-select-dropdown{border-radius:var(--radius-md)!important;box-shadow:var(--shadow-lg)!important}:host ::ng-deep .ant-select-dropdown .ant-select-item{min-height:40px!important;padding:var(--space-2) var(--space-3)!important;transition:background-color .15s ease!important}:host ::ng-deep .ant-select-dropdown .ant-select-item:hover{background-color:var(--color-bg-hover)!important}:host ::ng-deep .ant-select-dropdown .ant-select-item.ant-select-item-option-selected{background-color:var(--color-brand-subtle)!important;color:var(--color-brand)!important;font-weight:var(--font-weight-medium)!important}\n"] }]
179
+ }], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], allowClear: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowClear", required: false }] }], showSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSearch", required: false }] }], disabled: [{
180
+ type: Input
181
+ }] } });
182
+
183
+ class CcBadgeComponent {
184
+ constructor() {
185
+ this.variant = 'neutral';
186
+ this.type = 'subtle';
187
+ }
188
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
189
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: CcBadgeComponent, isStandalone: true, selector: "cc-badge", inputs: { variant: "variant", type: "type" }, ngImport: i0, template: "<span class=\"cc-badge\" [ngClass]=\"[variant, type]\">\r\n <ng-content></ng-content>\r\n</span>", styles: [".cc-badge{display:inline-flex;align-items:center;justify-content:center;padding:var(--badge-padding-v) var(--badge-padding-h);border-radius:var(--badge-radius);font-size:var(--badge-font-size);font-weight:var(--badge-font-weight);line-height:1;white-space:nowrap;border:1px solid transparent}.cc-badge.success.filled{background-color:var(--color-success-500);color:#fff}.cc-badge.success.subtle{background-color:var(--badge-success-bg);color:var(--badge-success-text);border-color:var(--badge-success-border)}.cc-badge.success.outline{background-color:transparent;color:var(--badge-success-text);border-color:var(--badge-success-border)}.cc-badge.warning.filled{background-color:var(--color-warning-500);color:#fff}.cc-badge.warning.subtle{background-color:var(--badge-warning-bg);color:var(--badge-warning-text);border-color:var(--badge-warning-border)}.cc-badge.warning.outline{background-color:transparent;color:var(--badge-warning-text);border-color:var(--badge-warning-border)}.cc-badge.error.filled{background-color:var(--color-error-500);color:#fff}.cc-badge.error.subtle{background-color:var(--badge-error-bg);color:var(--badge-error-text);border-color:var(--badge-error-border)}.cc-badge.error.outline{background-color:transparent;color:var(--badge-error-text);border-color:var(--badge-error-border)}.cc-badge.info.filled{background-color:var(--color-info-500);color:#fff}.cc-badge.info.subtle{background-color:var(--badge-info-bg);color:var(--badge-info-text);border-color:var(--badge-info-border)}.cc-badge.info.outline{background-color:transparent;color:var(--badge-info-text);border-color:var(--badge-info-border)}.cc-badge.neutral.filled{background-color:var(--color-text-primary);color:var(--color-bg-primary)}.cc-badge.neutral.subtle{background-color:var(--badge-neutral-bg);color:var(--badge-neutral-text);border-color:var(--badge-neutral-border)}.cc-badge.neutral.outline{background-color:transparent;color:var(--badge-neutral-text);border-color:var(--badge-neutral-border)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
190
+ }
191
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcBadgeComponent, decorators: [{
192
+ type: Component,
193
+ args: [{ selector: 'cc-badge', standalone: true, imports: [CommonModule], template: "<span class=\"cc-badge\" [ngClass]=\"[variant, type]\">\r\n <ng-content></ng-content>\r\n</span>", styles: [".cc-badge{display:inline-flex;align-items:center;justify-content:center;padding:var(--badge-padding-v) var(--badge-padding-h);border-radius:var(--badge-radius);font-size:var(--badge-font-size);font-weight:var(--badge-font-weight);line-height:1;white-space:nowrap;border:1px solid transparent}.cc-badge.success.filled{background-color:var(--color-success-500);color:#fff}.cc-badge.success.subtle{background-color:var(--badge-success-bg);color:var(--badge-success-text);border-color:var(--badge-success-border)}.cc-badge.success.outline{background-color:transparent;color:var(--badge-success-text);border-color:var(--badge-success-border)}.cc-badge.warning.filled{background-color:var(--color-warning-500);color:#fff}.cc-badge.warning.subtle{background-color:var(--badge-warning-bg);color:var(--badge-warning-text);border-color:var(--badge-warning-border)}.cc-badge.warning.outline{background-color:transparent;color:var(--badge-warning-text);border-color:var(--badge-warning-border)}.cc-badge.error.filled{background-color:var(--color-error-500);color:#fff}.cc-badge.error.subtle{background-color:var(--badge-error-bg);color:var(--badge-error-text);border-color:var(--badge-error-border)}.cc-badge.error.outline{background-color:transparent;color:var(--badge-error-text);border-color:var(--badge-error-border)}.cc-badge.info.filled{background-color:var(--color-info-500);color:#fff}.cc-badge.info.subtle{background-color:var(--badge-info-bg);color:var(--badge-info-text);border-color:var(--badge-info-border)}.cc-badge.info.outline{background-color:transparent;color:var(--badge-info-text);border-color:var(--badge-info-border)}.cc-badge.neutral.filled{background-color:var(--color-text-primary);color:var(--color-bg-primary)}.cc-badge.neutral.subtle{background-color:var(--badge-neutral-bg);color:var(--badge-neutral-text);border-color:var(--badge-neutral-border)}.cc-badge.neutral.outline{background-color:transparent;color:var(--badge-neutral-text);border-color:var(--badge-neutral-border)}\n"] }]
194
+ }], propDecorators: { variant: [{
195
+ type: Input
196
+ }], type: [{
197
+ type: Input
198
+ }] } });
199
+
200
+ class CcLabelComponent {
201
+ constructor() {
202
+ this.text = '';
203
+ this.for = '';
204
+ this.required = false;
205
+ this.error = false;
206
+ }
207
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcLabelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
208
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: CcLabelComponent, isStandalone: true, selector: "cc-label", inputs: { text: "text", for: "for", required: "required", error: "error" }, ngImport: i0, template: "<label [attr.for]=\"for\" class=\"cc-label\" [class.has-error]=\"error\">\r\n {{ text }}\r\n <span *ngIf=\"required\" class=\"required-indicator\" aria-hidden=\"true\">*</span>\r\n</label>", styles: [".cc-label{display:block;font-size:var(--label-font-size);font-weight:var(--label-font-weight);color:var(--label-color);margin-bottom:var(--label-margin-bottom);-webkit-user-select:none;user-select:none}.cc-label .required-indicator{color:var(--label-required-color);margin-left:var(--space-0-5)}.cc-label.has-error{color:var(--color-error-600)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
209
+ }
210
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcLabelComponent, decorators: [{
211
+ type: Component,
212
+ args: [{ selector: 'cc-label', standalone: true, imports: [CommonModule], template: "<label [attr.for]=\"for\" class=\"cc-label\" [class.has-error]=\"error\">\r\n {{ text }}\r\n <span *ngIf=\"required\" class=\"required-indicator\" aria-hidden=\"true\">*</span>\r\n</label>", styles: [".cc-label{display:block;font-size:var(--label-font-size);font-weight:var(--label-font-weight);color:var(--label-color);margin-bottom:var(--label-margin-bottom);-webkit-user-select:none;user-select:none}.cc-label .required-indicator{color:var(--label-required-color);margin-left:var(--space-0-5)}.cc-label.has-error{color:var(--color-error-600)}\n"] }]
213
+ }], propDecorators: { text: [{
214
+ type: Input
215
+ }], for: [{
216
+ type: Input
217
+ }], required: [{
218
+ type: Input
219
+ }], error: [{
220
+ type: Input
221
+ }] } });
222
+
223
+ class CcIconComponent {
224
+ constructor() {
225
+ this.name = '';
226
+ this.size = 'md';
227
+ this.color = 'currentColor';
228
+ }
229
+ get iconClass() {
230
+ return `icon-${this.size}`;
231
+ }
232
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
233
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: CcIconComponent, isStandalone: true, selector: "cc-icon", inputs: { name: "name", size: "size", color: "color" }, ngImport: i0, template: "<i class=\"cc-icon\" [ngClass]=\"iconClass\" [style.color]=\"color\" aria-hidden=\"true\">\r\n {{ name }}\r\n</i>", styles: [".cc-icon{display:inline-flex;align-items:center;justify-content:center;font-family:Material Symbols Outlined;font-weight:400;font-style:normal;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}.cc-icon.icon-xs{font-size:16px;width:16px;height:16px}.cc-icon.icon-sm{font-size:20px;width:20px;height:20px}.cc-icon.icon-md{font-size:24px;width:24px;height:24px}.cc-icon.icon-lg{font-size:32px;width:32px;height:32px}.cc-icon.icon-xl{font-size:40px;width:40px;height:40px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
234
+ }
235
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcIconComponent, decorators: [{
236
+ type: Component,
237
+ args: [{ selector: 'cc-icon', standalone: true, imports: [CommonModule], template: "<i class=\"cc-icon\" [ngClass]=\"iconClass\" [style.color]=\"color\" aria-hidden=\"true\">\r\n {{ name }}\r\n</i>", styles: [".cc-icon{display:inline-flex;align-items:center;justify-content:center;font-family:Material Symbols Outlined;font-weight:400;font-style:normal;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}.cc-icon.icon-xs{font-size:16px;width:16px;height:16px}.cc-icon.icon-sm{font-size:20px;width:20px;height:20px}.cc-icon.icon-md{font-size:24px;width:24px;height:24px}.cc-icon.icon-lg{font-size:32px;width:32px;height:32px}.cc-icon.icon-xl{font-size:40px;width:40px;height:40px}\n"] }]
238
+ }], propDecorators: { name: [{
239
+ type: Input
240
+ }], size: [{
241
+ type: Input
242
+ }], color: [{
243
+ type: Input
244
+ }] } });
245
+
246
+ class CcCardComponent {
247
+ constructor() {
248
+ this.title = input('', ...(ngDevMode ? [{ debugName: "title" }] : []));
249
+ this.extra = input(undefined, ...(ngDevMode ? [{ debugName: "extra" }] : []));
250
+ this.loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
251
+ this.bordered = input(true, ...(ngDevMode ? [{ debugName: "bordered" }] : []));
252
+ this.padding = input('24px', ...(ngDevMode ? [{ debugName: "padding" }] : []));
253
+ }
254
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
255
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.4", type: CcCardComponent, isStandalone: true, selector: "cc-card", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, extra: { classPropertyName: "extra", publicName: "extra", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<nz-card [nzTitle]=\"$any(title())\" [nzExtra]=\"extra()\" [nzLoading]=\"$any(loading())\" [nzBordered]=\"$any(bordered())\">\r\n <ng-content></ng-content>\r\n</nz-card>", styles: [":host ::ng-deep .cerca-card{border-radius:var(--radius-lg)!important;box-shadow:var(--shadow-md)!important;transition:all .2s cubic-bezier(.4,0,.2,1)!important}:host ::ng-deep .cerca-card .ant-card-head{border-bottom-color:var(--color-border-subtle)!important;font-family:var(--font-family-base)!important;font-weight:var(--font-weight-semibold)!important}:host ::ng-deep .cerca-card.ant-card-hoverable:hover{box-shadow:var(--shadow-lg)!important;transform:translateY(-2px)!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: NzCardModule }, { kind: "component", type: i1$3.NzCardComponent, selector: "nz-card", inputs: ["nzBordered", "nzLoading", "nzHoverable", "nzBodyStyle", "nzCover", "nzActions", "nzType", "nzSize", "nzTitle", "nzExtra"], exportAs: ["nzCard"] }] }); }
256
+ }
257
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcCardComponent, decorators: [{
258
+ type: Component,
259
+ args: [{ selector: 'cc-card', standalone: true, imports: [CommonModule, NzCardModule], template: "<nz-card [nzTitle]=\"$any(title())\" [nzExtra]=\"extra()\" [nzLoading]=\"$any(loading())\" [nzBordered]=\"$any(bordered())\">\r\n <ng-content></ng-content>\r\n</nz-card>", styles: [":host ::ng-deep .cerca-card{border-radius:var(--radius-lg)!important;box-shadow:var(--shadow-md)!important;transition:all .2s cubic-bezier(.4,0,.2,1)!important}:host ::ng-deep .cerca-card .ant-card-head{border-bottom-color:var(--color-border-subtle)!important;font-family:var(--font-family-base)!important;font-weight:var(--font-weight-semibold)!important}:host ::ng-deep .cerca-card.ant-card-hoverable:hover{box-shadow:var(--shadow-lg)!important;transform:translateY(-2px)!important}\n"] }]
260
+ }], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], extra: [{ type: i0.Input, args: [{ isSignal: true, alias: "extra", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], bordered: [{ type: i0.Input, args: [{ isSignal: true, alias: "bordered", required: false }] }], padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }] } });
261
+
262
+ class CcFormFieldComponent {
263
+ constructor() {
264
+ this.label = '';
265
+ this.hint = '';
266
+ this.errorMessage = null;
267
+ this.required = false;
268
+ this.error = false;
269
+ this.for = '';
270
+ }
271
+ get hasError() {
272
+ return !!this.errorMessage;
273
+ }
274
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcFormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
275
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: CcFormFieldComponent, isStandalone: true, selector: "cc-form-field", inputs: { label: "label", hint: "hint", errorMessage: "errorMessage", required: "required", error: "error", for: "for" }, ngImport: i0, template: "<div class=\"cc-form-field\" [class.has-error]=\"hasError\">\r\n <cc-label *ngIf=\"label\" [text]=\"label\" [for]=\"for\" [required]=\"required\" [error]=\"hasError\">\r\n </cc-label>\r\n\r\n <div class=\"cc-form-field-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div class=\"cc-form-field-info\" *ngIf=\"hint || errorMessage\">\r\n <span class=\"cc-form-field-error\" *ngIf=\"errorMessage\">{{ errorMessage }}</span>\r\n <span class=\"cc-form-field-hint\" *ngIf=\"hint && !errorMessage\">{{ hint }}</span>\r\n </div>\r\n</div>", styles: [".cc-form-field{display:flex;flex-direction:column;margin-bottom:var(--form-field-margin-bottom);width:100%}.cc-form-field .cc-form-field-content{position:relative;display:flex;flex-direction:column}.cc-form-field .cc-form-field-info{margin-top:var(--form-field-message-margin);min-height:1.25rem}.cc-form-field .cc-form-field-error{color:var(--form-field-error-color);font-size:var(--form-field-message-font-size);font-weight:var(--font-weight-medium);display:block;animation:fadeIn .2s ease-out}.cc-form-field .cc-form-field-hint{color:var(--form-field-message-color);font-size:var(--form-field-message-font-size);display:block}@keyframes fadeIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CcLabelComponent, selector: "cc-label", inputs: ["text", "for", "required", "error"] }] }); }
276
+ }
277
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcFormFieldComponent, decorators: [{
278
+ type: Component,
279
+ args: [{ selector: 'cc-form-field', standalone: true, imports: [CommonModule, CcLabelComponent], template: "<div class=\"cc-form-field\" [class.has-error]=\"hasError\">\r\n <cc-label *ngIf=\"label\" [text]=\"label\" [for]=\"for\" [required]=\"required\" [error]=\"hasError\">\r\n </cc-label>\r\n\r\n <div class=\"cc-form-field-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div class=\"cc-form-field-info\" *ngIf=\"hint || errorMessage\">\r\n <span class=\"cc-form-field-error\" *ngIf=\"errorMessage\">{{ errorMessage }}</span>\r\n <span class=\"cc-form-field-hint\" *ngIf=\"hint && !errorMessage\">{{ hint }}</span>\r\n </div>\r\n</div>", styles: [".cc-form-field{display:flex;flex-direction:column;margin-bottom:var(--form-field-margin-bottom);width:100%}.cc-form-field .cc-form-field-content{position:relative;display:flex;flex-direction:column}.cc-form-field .cc-form-field-info{margin-top:var(--form-field-message-margin);min-height:1.25rem}.cc-form-field .cc-form-field-error{color:var(--form-field-error-color);font-size:var(--form-field-message-font-size);font-weight:var(--font-weight-medium);display:block;animation:fadeIn .2s ease-out}.cc-form-field .cc-form-field-hint{color:var(--form-field-message-color);font-size:var(--form-field-message-font-size);display:block}@keyframes fadeIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}\n"] }]
280
+ }], propDecorators: { label: [{
281
+ type: Input
282
+ }], hint: [{
283
+ type: Input
284
+ }], errorMessage: [{
285
+ type: Input
286
+ }], required: [{
287
+ type: Input
288
+ }], error: [{
289
+ type: Input
290
+ }], for: [{
291
+ type: Input
292
+ }] } });
293
+
294
+ class CcSearchBarComponent {
295
+ constructor() {
296
+ this.placeholder = 'Buscar...';
297
+ this.debounce = 300;
298
+ this.loading = false;
299
+ this.variant = 'standalone';
300
+ this.search = new EventEmitter();
301
+ this.searchQuery = '';
302
+ this.searchSubject = new Subject();
303
+ this.subscription = new Subscription();
304
+ }
305
+ ngOnInit() {
306
+ this.subscription = this.searchSubject
307
+ .pipe(debounceTime(this.debounce), distinctUntilChanged())
308
+ .subscribe(query => {
309
+ this.search.emit(query);
310
+ });
311
+ }
312
+ onQueryChange() {
313
+ this.searchSubject.next(this.searchQuery);
314
+ }
315
+ clear() {
316
+ this.searchQuery = '';
317
+ this.onQueryChange();
318
+ }
319
+ ngOnDestroy() {
320
+ this.subscription.unsubscribe();
321
+ }
322
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcSearchBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
323
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: CcSearchBarComponent, isStandalone: true, selector: "cc-search-bar", inputs: { placeholder: "placeholder", debounce: "debounce", loading: "loading", variant: "variant" }, outputs: { search: "search" }, ngImport: i0, template: "<div class=\"cc-search-bar\" [ngClass]=\"variant\">\r\n <div class=\"cc-search-icon-wrapper\">\r\n <cc-icon name=\"search\" size=\"sm\" *ngIf=\"!loading\"></cc-icon>\r\n <div class=\"cc-search-loader\" *ngIf=\"loading\"></div>\r\n </div>\r\n\r\n <input type=\"text\" class=\"cc-search-input\" [placeholder]=\"placeholder\" [(ngModel)]=\"searchQuery\"\r\n (ngModelChange)=\"onQueryChange()\">\r\n\r\n <button class=\"cc-search-clear\" *ngIf=\"searchQuery && !loading\" (click)=\"clear()\" type=\"button\">\r\n <cc-icon name=\"close\" size=\"xs\"></cc-icon>\r\n </button>\r\n</div>", styles: [".cc-search-bar{display:flex;align-items:center;gap:var(--space-2);height:var(--input-height-md);padding:0 var(--space-3);border-radius:var(--radius-md);transition:all .15s ease-in-out;width:100%}.cc-search-bar.standalone{background-color:var(--color-bg-primary);border:1px solid var(--color-border-subtle);box-shadow:var(--shadow-sm)}.cc-search-bar.standalone:focus-within{border-color:var(--color-brand-primary);box-shadow:var(--shadow-focus)}.cc-search-bar.header{background-color:#ffffff1a;border:1px solid rgba(255,255,255,.2);color:#fff}.cc-search-bar.header .cc-search-input{color:#fff}.cc-search-bar.header .cc-search-input::placeholder{color:#fff9}.cc-search-bar.header .cc-search-icon-wrapper{color:#fffc}.cc-search-icon-wrapper{display:flex;color:var(--color-text-muted)}.cc-search-input{flex:1;border:none;background:transparent;font-size:var(--font-size-md);color:var(--color-text-primary);outline:none;padding:0}.cc-search-input::placeholder{color:var(--color-text-muted)}.cc-search-clear{display:flex;background:transparent;border:none;color:var(--color-text-muted);cursor:pointer;padding:var(--space-1);border-radius:var(--radius-full);transition:background-color .15s ease}.cc-search-clear:hover{background-color:var(--color-bg-secondary);color:var(--color-text-primary)}.cc-search-loader{width:18px;height:18px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CcIconComponent, selector: "cc-icon", inputs: ["name", "size", "color"] }] }); }
324
+ }
325
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcSearchBarComponent, decorators: [{
326
+ type: Component,
327
+ args: [{ selector: 'cc-search-bar', standalone: true, imports: [CommonModule, FormsModule, CcIconComponent], template: "<div class=\"cc-search-bar\" [ngClass]=\"variant\">\r\n <div class=\"cc-search-icon-wrapper\">\r\n <cc-icon name=\"search\" size=\"sm\" *ngIf=\"!loading\"></cc-icon>\r\n <div class=\"cc-search-loader\" *ngIf=\"loading\"></div>\r\n </div>\r\n\r\n <input type=\"text\" class=\"cc-search-input\" [placeholder]=\"placeholder\" [(ngModel)]=\"searchQuery\"\r\n (ngModelChange)=\"onQueryChange()\">\r\n\r\n <button class=\"cc-search-clear\" *ngIf=\"searchQuery && !loading\" (click)=\"clear()\" type=\"button\">\r\n <cc-icon name=\"close\" size=\"xs\"></cc-icon>\r\n </button>\r\n</div>", styles: [".cc-search-bar{display:flex;align-items:center;gap:var(--space-2);height:var(--input-height-md);padding:0 var(--space-3);border-radius:var(--radius-md);transition:all .15s ease-in-out;width:100%}.cc-search-bar.standalone{background-color:var(--color-bg-primary);border:1px solid var(--color-border-subtle);box-shadow:var(--shadow-sm)}.cc-search-bar.standalone:focus-within{border-color:var(--color-brand-primary);box-shadow:var(--shadow-focus)}.cc-search-bar.header{background-color:#ffffff1a;border:1px solid rgba(255,255,255,.2);color:#fff}.cc-search-bar.header .cc-search-input{color:#fff}.cc-search-bar.header .cc-search-input::placeholder{color:#fff9}.cc-search-bar.header .cc-search-icon-wrapper{color:#fffc}.cc-search-icon-wrapper{display:flex;color:var(--color-text-muted)}.cc-search-input{flex:1;border:none;background:transparent;font-size:var(--font-size-md);color:var(--color-text-primary);outline:none;padding:0}.cc-search-input::placeholder{color:var(--color-text-muted)}.cc-search-clear{display:flex;background:transparent;border:none;color:var(--color-text-muted);cursor:pointer;padding:var(--space-1);border-radius:var(--radius-full);transition:background-color .15s ease}.cc-search-clear:hover{background-color:var(--color-bg-secondary);color:var(--color-text-primary)}.cc-search-loader{width:18px;height:18px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}\n"] }]
328
+ }], propDecorators: { placeholder: [{
329
+ type: Input
330
+ }], debounce: [{
331
+ type: Input
332
+ }], loading: [{
333
+ type: Input
334
+ }], variant: [{
335
+ type: Input
336
+ }], search: [{
337
+ type: Output
338
+ }] } });
339
+
340
+ class CcHeaderComponent {
341
+ constructor() {
342
+ this.notificationsCount = 0;
343
+ this.showMenuButton = true;
344
+ this.hasLogoContent = true; // Added missing property
345
+ this.toggleSidebar = new EventEmitter();
346
+ this.userClick = new EventEmitter();
347
+ this.notificationClick = new EventEmitter();
348
+ this.userAction = new EventEmitter();
349
+ }
350
+ onUserClick() {
351
+ this.userClick.emit();
352
+ this.userAction.emit('profile');
353
+ }
354
+ get initials() {
355
+ if (!this.user?.name)
356
+ return '?';
357
+ return this.user.name
358
+ .split(' ')
359
+ .map(n => n[0])
360
+ .join('')
361
+ .toUpperCase()
362
+ .slice(0, 2);
363
+ }
364
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
365
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: CcHeaderComponent, isStandalone: true, selector: "cc-header", inputs: { user: "user", notificationsCount: "notificationsCount", showMenuButton: "showMenuButton", hasLogoContent: "hasLogoContent" }, outputs: { toggleSidebar: "toggleSidebar", userClick: "userClick", notificationClick: "notificationClick", userAction: "userAction" }, ngImport: i0, template: "<header class=\"cc-header\">\r\n <div class=\"cc-header-left\">\r\n <button *ngIf=\"showMenuButton\" class=\"cc-header-menu-btn\" (click)=\"toggleSidebar.emit()\" type=\"button\">\r\n <cc-icon name=\"menu\" size=\"md\"></cc-icon>\r\n </button>\r\n\r\n <div class=\"cc-header-logo\">\r\n <ng-content select=\"[logo]\"></ng-content>\r\n <span class=\"cc-header-logo-fallback\" *ngIf=\"!hasLogoContent\">\r\n CERCA\r\n </span>\r\n </div>\r\n\r\n <div class=\"cc-header-breadcrumb\">\r\n <ng-content select=\"[breadcrumb]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div class=\"cc-header-right\">\r\n <button class=\"cc-header-action-btn\" (click)=\"notificationClick.emit()\">\r\n <cc-icon name=\"notifications\" size=\"md\"></cc-icon>\r\n <cc-badge *ngIf=\"notificationsCount > 0\" variant=\"error\" type=\"filled\" class=\"cc-header-badge\">\r\n {{ notificationsCount > 99 ? '99+' : notificationsCount }}\r\n </cc-badge>\r\n </button>\r\n\r\n <div class=\"cc-header-divider\"></div>\r\n\r\n <div class=\"cc-header-user\" (click)=\"onUserClick()\" *ngIf=\"user\">\r\n <div class=\"cc-header-user-info\">\r\n <span class=\"cc-header-user-name\">{{ user.name }}</span>\r\n <span class=\"cc-header-user-role\">{{ user.role }}</span>\r\n </div>\r\n\r\n <div class=\"cc-header-avatar\">\r\n <img *ngIf=\"user.avatarUrl\" [src]=\"user.avatarUrl\" [alt]=\"user.name\">\r\n <span *ngIf=\"!user.avatarUrl\">{{ initials }}</span>\r\n </div>\r\n\r\n <cc-icon name=\"expand_more\" size=\"sm\" class=\"cc-header-user-arrow\"></cc-icon>\r\n </div>\r\n </div>\r\n</header>", styles: [":root,[data-theme=light]{--color-bg-primary: #FFFFFF;--color-bg-secondary: #FAFAF9;--color-text-primary: #1C1917;--color-text-secondary: #57534E;--color-text-muted: #A8A29E;--color-border-subtle: #E7E5E4;--color-border-strong: #D6D3D1;--color-brand: #0284C7;--color-brand-hover: #0369A1;--color-focus-ring: rgba(2, 132, 199, .2);--color-success: #10B981;--color-danger: #F43F5E;--surface-glass-bg: rgba(255, 255, 255, .7);--surface-glass-border: rgba(255, 255, 255, .3);--surface-glass-blur: 12px;--surface-glass-shadow: 0 4px 6px -1px rgba(0, 0, 0, .1);--font-heading-xl: 32px;--font-heading-lg: 24px;--font-heading-md: 20px;--font-body-lg: 18px;--font-body-md: 16px;--font-caption: 12px;--font-family-base: Inter, sans-serif;--font-weight-regular: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 14px;--radius-xl: 18px;--radius-full: 9999px;--font-size-xs: 12px;--font-size-sm: 14px;--font-size-md: 16px;--font-size-lg: 18px;--font-size-xl: 20px;--font-size-2xl: 24px;--font-size-3xl: 32px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-6: 24px;--space-8: calc(var(--space-4) * 2);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .06);--shadow-md: 0 4px 12px rgba(0, 0, 0, .08);--shadow-lg: 0 12px 32px rgba(0, 0, 0, .12)}[data-theme=dark]{--color-bg-primary: #1C1917;--color-bg-secondary: #292524;--color-text-primary: #FFFFFF;--color-text-secondary: #A8A29E;--color-text-muted: #78716C;--color-border-subtle: #44403C;--color-border-strong: #57534E;--color-brand: #0EA5E9;--color-brand-hover: #7DD3FC;--color-focus-ring: rgba(59, 130, 246, .5);--surface-glass-bg: rgba(15, 23, 42, .8);--surface-glass-border: rgba(255, 255, 255, .1);--surface-glass-blur: 16px;--surface-glass-shadow: 0 10px 15px -3px rgba(0, 0, 0, .3)}:root{--h1-size: var(--font-size-h1);--h1-weight: var(--font-weight-semibold);--h2-size: var(--font-size-h2);--h2-weight: var(--font-weight-semibold);--h3-size: var(--font-size-h3);--h3-weight: var(--font-weight-semibold);--body-size: var(--font-size-body);--body-weight: var(--font-weight-regular);--sm-size: var(--font-size-sm);--sm-weight: var(--font-weight-regular);--caption-size: var(--font-size-caption);--caption-weight: var(--font-weight-regular)}:root{--btn-height-md: 44px;--btn-radius: var(--radius-md);--btn-font-weight: var(--font-weight-medium);--btn-bg-primary: var(--color-brand);--btn-text-primary: #FFFFFF;--btn-shadow-default: var(--shadow-sm);--btn-shadow-hover: var(--shadow-md);--btn-transition: .15s ease;--btn-focus-ring: 0 0 0 2px var(--color-focus-ring)}:root{--card-bg: var(--color-bg-primary);--card-radius: var(--radius-lg);--card-shadow: var(--shadow-sm);--card-shadow-hover: var(--shadow-md)}:root{--input-height-md: 44px;--input-bg: var(--color-bg-primary);--input-radius: var(--radius-md);--input-border-default: var(--color-border-subtle);--input-border-hover: var(--color-border-strong);--input-border-focus: var(--color-brand);--input-border-error: var(--color-danger);--input-transition: .12s ease-in-out;--input-focus-ring: 0 0 0 3px var(--color-focus-ring);--input-error-ring: 0 0 0 3px rgba(239, 68, 68, .15)}.cc-badge-tokens{--badge-radius: var(--radius-sm);--badge-padding-v: var(--space-1);--badge-padding-h: var(--space-2);--badge-font-size: var(--font-size-xs);--badge-font-weight: var(--font-weight-medium);--badge-success-bg: #D1FAE5;--badge-success-text: #065F46;--badge-success-border: #A7F3D0;--badge-warning-bg: #FEF3C7;--badge-warning-text: #92400E;--badge-warning-border: #FDE68A;--badge-error-bg: #FFE4E6;--badge-error-text: #9F1239;--badge-error-border: #FECDD3;--badge-info-bg: var(--color-info-50);--badge-info-text: var(--color-info-700);--badge-info-border: var(--color-info-200);--badge-neutral-bg: #F5F5F4;--badge-neutral-text: #44403C;--badge-neutral-border: #E7E5E4}.cc-label-tokens{--label-font-size: var(--font-size-sm);--label-font-weight: var(--font-weight-medium);--label-color: var(--color-text-secondary);--label-required-color: var(--color-error-500);--label-margin-bottom: var(--space-2)}.cc-select-tokens{--select-bg: var(--color-bg-primary);--select-border: var(--color-border-subtle);--select-border-hover: var(--color-border-strong);--select-border-focus: var(--color-brand-primary);--select-shadow-focus: var(--shadow-focus);--select-radius: var(--radius-md);--select-height: 44px;--select-padding-h: var(--space-4);--select-dropdown-bg: var(--color-bg-primary);--select-dropdown-shadow: var(--shadow-md);--select-dropdown-max-height: 240px;--select-option-padding: var(--space-3) var(--space-4);--select-option-hover: var(--color-bg-secondary);--select-option-selected-bg: var(--color-brand-50);--select-option-selected-text: var(--color-brand-primary)}.cc-form-field-tokens{--form-field-margin-bottom: var(--space-6);--form-field-label-margin: var(--space-2);--form-field-message-margin: var(--space-1);--form-field-message-font-size: var(--font-size-xs);--form-field-message-color: var(--color-text-muted);--form-field-error-color: var(--color-error-600)}.cc-header-tokens{--header-height: 72px;--header-bg: #FFFFFF;--header-border-color: #F5F5F4;--header-padding: 0 var(--space-6);--header-shadow: 0 1px 2px rgba(0, 0, 0, .05);--header-z-index: 100;--header-logo-height: 32px;--header-user-gap: var(--space-4)}.cc-sidebar-tokens{--sidebar-width: 280px;--sidebar-collapsed-width: 80px;--sidebar-bg: #1C1917;--sidebar-border-color: #292524;--sidebar-padding: var(--space-4);--sidebar-z-index: 101;--sidebar-transition: width .3s cubic-bezier(.4, 0, .2, 1);--sidebar-item-height: 48px;--sidebar-item-radius: var(--radius-lg);--sidebar-item-padding: 0 var(--space-4);--sidebar-item-gap: var(--space-3);--sidebar-accent-color: #0EA5E9;--sidebar-text-color: #FFFFFF;--sidebar-text-muted: #A8A29E}.cc-data-table-tokens{--table-bg: var(--color-bg-primary);--table-header-bg: var(--color-bg-secondary);--table-border-color: var(--color-border-subtle);--table-header-color: var(--color-text-muted);--table-row-hover: rgba(var(--color-brand-primary-rgb), .04);--table-cell-padding: var(--space-4);--table-font-size: var(--font-size-sm);--table-radius: var(--radius-lg)}.cc-modal-tokens{--modal-bg: var(--color-bg-primary);--modal-overlay-bg: rgba(0, 0, 0, .5);--modal-radius: var(--radius-xl);--modal-shadow: var(--shadow-xl);--modal-z-index: 1000;--modal-header-padding: var(--space-6);--modal-body-padding: var(--space-6);--modal-footer-padding: var(--space-4) var(--space-6);--modal-sm-width: 400px;--modal-md-width: 600px;--modal-lg-width: 900px}.cc-header{height:var(--header-height);background:var(--surface-glass-bg);backdrop-filter:blur(var(--surface-glass-blur));-webkit-backdrop-filter:blur(var(--surface-glass-blur));border-bottom:1px solid var(--surface-glass-border);padding:var(--header-padding);display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:100;box-shadow:var(--surface-glass-shadow);transition:all .3s ease}.cc-header-left,.cc-header-right{display:flex;align-items:center;gap:var(--space-4)}.cc-header-menu-btn{background:transparent;border:none;color:var(--color-text-primary);cursor:pointer;padding:var(--space-2);border-radius:var(--radius-md);display:flex;transition:background-color .15s ease}.cc-header-menu-btn:hover{background-color:var(--color-bg-secondary)}@media(min-width:1024px){.cc-header-menu-btn{display:none}}.cc-header-logo{display:flex;align-items:center;height:var(--header-logo-height)}.cc-header-logo .cc-header-logo-fallback{font-weight:var(--font-weight-bold);font-size:var(--font-size-xl);letter-spacing:-.025em;color:var(--color-brand-primary)}.cc-header-action-btn{position:relative;background:transparent;border:none;color:var(--color-text-muted);cursor:pointer;padding:var(--space-2);border-radius:var(--radius-full);display:flex;transition:all .15s ease}.cc-header-action-btn:hover{background-color:var(--color-bg-secondary);color:var(--color-text-primary)}.cc-header-action-btn .cc-header-badge{position:absolute;top:4px;right:4px;font-size:10px;padding:2px 4px;min-width:16px;height:16px;display:flex;align-items:center;justify-content:center}.cc-header-divider{width:1px;height:24px;background-color:var(--color-border-subtle);margin:0 var(--space-2)}.cc-header-user{display:flex;align-items:center;gap:var(--space-3);cursor:pointer;padding:var(--space-1) var(--space-2);border-radius:var(--radius-lg);transition:background-color .15s ease}.cc-header-user:hover{background-color:var(--color-bg-secondary)}.cc-header-user-info{display:none;flex-direction:column;text-align:right}@media(min-width:768px){.cc-header-user-info{display:flex}}.cc-header-user-info .cc-header-user-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);line-height:1.2}.cc-header-user-info .cc-header-user-role{font-size:var(--font-size-xs);color:var(--color-text-muted)}.cc-header-avatar{width:36px;height:36px;border-radius:var(--radius-full);background:#0ea5e9;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);overflow:hidden;box-shadow:0 0 0 2px var(--header-bg),0 0 0 4px var(--color-border-subtle)}.cc-header-avatar img{width:100%;height:100%;object-fit:cover}.cc-header-user-arrow{color:var(--color-text-muted)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CcIconComponent, selector: "cc-icon", inputs: ["name", "size", "color"] }, { kind: "component", type: CcBadgeComponent, selector: "cc-badge", inputs: ["variant", "type"] }] }); }
366
+ }
367
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcHeaderComponent, decorators: [{
368
+ type: Component,
369
+ args: [{ selector: 'cc-header', standalone: true, imports: [CommonModule, CcIconComponent, CcBadgeComponent], template: "<header class=\"cc-header\">\r\n <div class=\"cc-header-left\">\r\n <button *ngIf=\"showMenuButton\" class=\"cc-header-menu-btn\" (click)=\"toggleSidebar.emit()\" type=\"button\">\r\n <cc-icon name=\"menu\" size=\"md\"></cc-icon>\r\n </button>\r\n\r\n <div class=\"cc-header-logo\">\r\n <ng-content select=\"[logo]\"></ng-content>\r\n <span class=\"cc-header-logo-fallback\" *ngIf=\"!hasLogoContent\">\r\n CERCA\r\n </span>\r\n </div>\r\n\r\n <div class=\"cc-header-breadcrumb\">\r\n <ng-content select=\"[breadcrumb]\"></ng-content>\r\n </div>\r\n </div>\r\n\r\n <div class=\"cc-header-right\">\r\n <button class=\"cc-header-action-btn\" (click)=\"notificationClick.emit()\">\r\n <cc-icon name=\"notifications\" size=\"md\"></cc-icon>\r\n <cc-badge *ngIf=\"notificationsCount > 0\" variant=\"error\" type=\"filled\" class=\"cc-header-badge\">\r\n {{ notificationsCount > 99 ? '99+' : notificationsCount }}\r\n </cc-badge>\r\n </button>\r\n\r\n <div class=\"cc-header-divider\"></div>\r\n\r\n <div class=\"cc-header-user\" (click)=\"onUserClick()\" *ngIf=\"user\">\r\n <div class=\"cc-header-user-info\">\r\n <span class=\"cc-header-user-name\">{{ user.name }}</span>\r\n <span class=\"cc-header-user-role\">{{ user.role }}</span>\r\n </div>\r\n\r\n <div class=\"cc-header-avatar\">\r\n <img *ngIf=\"user.avatarUrl\" [src]=\"user.avatarUrl\" [alt]=\"user.name\">\r\n <span *ngIf=\"!user.avatarUrl\">{{ initials }}</span>\r\n </div>\r\n\r\n <cc-icon name=\"expand_more\" size=\"sm\" class=\"cc-header-user-arrow\"></cc-icon>\r\n </div>\r\n </div>\r\n</header>", styles: [":root,[data-theme=light]{--color-bg-primary: #FFFFFF;--color-bg-secondary: #FAFAF9;--color-text-primary: #1C1917;--color-text-secondary: #57534E;--color-text-muted: #A8A29E;--color-border-subtle: #E7E5E4;--color-border-strong: #D6D3D1;--color-brand: #0284C7;--color-brand-hover: #0369A1;--color-focus-ring: rgba(2, 132, 199, .2);--color-success: #10B981;--color-danger: #F43F5E;--surface-glass-bg: rgba(255, 255, 255, .7);--surface-glass-border: rgba(255, 255, 255, .3);--surface-glass-blur: 12px;--surface-glass-shadow: 0 4px 6px -1px rgba(0, 0, 0, .1);--font-heading-xl: 32px;--font-heading-lg: 24px;--font-heading-md: 20px;--font-body-lg: 18px;--font-body-md: 16px;--font-caption: 12px;--font-family-base: Inter, sans-serif;--font-weight-regular: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 14px;--radius-xl: 18px;--radius-full: 9999px;--font-size-xs: 12px;--font-size-sm: 14px;--font-size-md: 16px;--font-size-lg: 18px;--font-size-xl: 20px;--font-size-2xl: 24px;--font-size-3xl: 32px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-6: 24px;--space-8: calc(var(--space-4) * 2);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .06);--shadow-md: 0 4px 12px rgba(0, 0, 0, .08);--shadow-lg: 0 12px 32px rgba(0, 0, 0, .12)}[data-theme=dark]{--color-bg-primary: #1C1917;--color-bg-secondary: #292524;--color-text-primary: #FFFFFF;--color-text-secondary: #A8A29E;--color-text-muted: #78716C;--color-border-subtle: #44403C;--color-border-strong: #57534E;--color-brand: #0EA5E9;--color-brand-hover: #7DD3FC;--color-focus-ring: rgba(59, 130, 246, .5);--surface-glass-bg: rgba(15, 23, 42, .8);--surface-glass-border: rgba(255, 255, 255, .1);--surface-glass-blur: 16px;--surface-glass-shadow: 0 10px 15px -3px rgba(0, 0, 0, .3)}:root{--h1-size: var(--font-size-h1);--h1-weight: var(--font-weight-semibold);--h2-size: var(--font-size-h2);--h2-weight: var(--font-weight-semibold);--h3-size: var(--font-size-h3);--h3-weight: var(--font-weight-semibold);--body-size: var(--font-size-body);--body-weight: var(--font-weight-regular);--sm-size: var(--font-size-sm);--sm-weight: var(--font-weight-regular);--caption-size: var(--font-size-caption);--caption-weight: var(--font-weight-regular)}:root{--btn-height-md: 44px;--btn-radius: var(--radius-md);--btn-font-weight: var(--font-weight-medium);--btn-bg-primary: var(--color-brand);--btn-text-primary: #FFFFFF;--btn-shadow-default: var(--shadow-sm);--btn-shadow-hover: var(--shadow-md);--btn-transition: .15s ease;--btn-focus-ring: 0 0 0 2px var(--color-focus-ring)}:root{--card-bg: var(--color-bg-primary);--card-radius: var(--radius-lg);--card-shadow: var(--shadow-sm);--card-shadow-hover: var(--shadow-md)}:root{--input-height-md: 44px;--input-bg: var(--color-bg-primary);--input-radius: var(--radius-md);--input-border-default: var(--color-border-subtle);--input-border-hover: var(--color-border-strong);--input-border-focus: var(--color-brand);--input-border-error: var(--color-danger);--input-transition: .12s ease-in-out;--input-focus-ring: 0 0 0 3px var(--color-focus-ring);--input-error-ring: 0 0 0 3px rgba(239, 68, 68, .15)}.cc-badge-tokens{--badge-radius: var(--radius-sm);--badge-padding-v: var(--space-1);--badge-padding-h: var(--space-2);--badge-font-size: var(--font-size-xs);--badge-font-weight: var(--font-weight-medium);--badge-success-bg: #D1FAE5;--badge-success-text: #065F46;--badge-success-border: #A7F3D0;--badge-warning-bg: #FEF3C7;--badge-warning-text: #92400E;--badge-warning-border: #FDE68A;--badge-error-bg: #FFE4E6;--badge-error-text: #9F1239;--badge-error-border: #FECDD3;--badge-info-bg: var(--color-info-50);--badge-info-text: var(--color-info-700);--badge-info-border: var(--color-info-200);--badge-neutral-bg: #F5F5F4;--badge-neutral-text: #44403C;--badge-neutral-border: #E7E5E4}.cc-label-tokens{--label-font-size: var(--font-size-sm);--label-font-weight: var(--font-weight-medium);--label-color: var(--color-text-secondary);--label-required-color: var(--color-error-500);--label-margin-bottom: var(--space-2)}.cc-select-tokens{--select-bg: var(--color-bg-primary);--select-border: var(--color-border-subtle);--select-border-hover: var(--color-border-strong);--select-border-focus: var(--color-brand-primary);--select-shadow-focus: var(--shadow-focus);--select-radius: var(--radius-md);--select-height: 44px;--select-padding-h: var(--space-4);--select-dropdown-bg: var(--color-bg-primary);--select-dropdown-shadow: var(--shadow-md);--select-dropdown-max-height: 240px;--select-option-padding: var(--space-3) var(--space-4);--select-option-hover: var(--color-bg-secondary);--select-option-selected-bg: var(--color-brand-50);--select-option-selected-text: var(--color-brand-primary)}.cc-form-field-tokens{--form-field-margin-bottom: var(--space-6);--form-field-label-margin: var(--space-2);--form-field-message-margin: var(--space-1);--form-field-message-font-size: var(--font-size-xs);--form-field-message-color: var(--color-text-muted);--form-field-error-color: var(--color-error-600)}.cc-header-tokens{--header-height: 72px;--header-bg: #FFFFFF;--header-border-color: #F5F5F4;--header-padding: 0 var(--space-6);--header-shadow: 0 1px 2px rgba(0, 0, 0, .05);--header-z-index: 100;--header-logo-height: 32px;--header-user-gap: var(--space-4)}.cc-sidebar-tokens{--sidebar-width: 280px;--sidebar-collapsed-width: 80px;--sidebar-bg: #1C1917;--sidebar-border-color: #292524;--sidebar-padding: var(--space-4);--sidebar-z-index: 101;--sidebar-transition: width .3s cubic-bezier(.4, 0, .2, 1);--sidebar-item-height: 48px;--sidebar-item-radius: var(--radius-lg);--sidebar-item-padding: 0 var(--space-4);--sidebar-item-gap: var(--space-3);--sidebar-accent-color: #0EA5E9;--sidebar-text-color: #FFFFFF;--sidebar-text-muted: #A8A29E}.cc-data-table-tokens{--table-bg: var(--color-bg-primary);--table-header-bg: var(--color-bg-secondary);--table-border-color: var(--color-border-subtle);--table-header-color: var(--color-text-muted);--table-row-hover: rgba(var(--color-brand-primary-rgb), .04);--table-cell-padding: var(--space-4);--table-font-size: var(--font-size-sm);--table-radius: var(--radius-lg)}.cc-modal-tokens{--modal-bg: var(--color-bg-primary);--modal-overlay-bg: rgba(0, 0, 0, .5);--modal-radius: var(--radius-xl);--modal-shadow: var(--shadow-xl);--modal-z-index: 1000;--modal-header-padding: var(--space-6);--modal-body-padding: var(--space-6);--modal-footer-padding: var(--space-4) var(--space-6);--modal-sm-width: 400px;--modal-md-width: 600px;--modal-lg-width: 900px}.cc-header{height:var(--header-height);background:var(--surface-glass-bg);backdrop-filter:blur(var(--surface-glass-blur));-webkit-backdrop-filter:blur(var(--surface-glass-blur));border-bottom:1px solid var(--surface-glass-border);padding:var(--header-padding);display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:100;box-shadow:var(--surface-glass-shadow);transition:all .3s ease}.cc-header-left,.cc-header-right{display:flex;align-items:center;gap:var(--space-4)}.cc-header-menu-btn{background:transparent;border:none;color:var(--color-text-primary);cursor:pointer;padding:var(--space-2);border-radius:var(--radius-md);display:flex;transition:background-color .15s ease}.cc-header-menu-btn:hover{background-color:var(--color-bg-secondary)}@media(min-width:1024px){.cc-header-menu-btn{display:none}}.cc-header-logo{display:flex;align-items:center;height:var(--header-logo-height)}.cc-header-logo .cc-header-logo-fallback{font-weight:var(--font-weight-bold);font-size:var(--font-size-xl);letter-spacing:-.025em;color:var(--color-brand-primary)}.cc-header-action-btn{position:relative;background:transparent;border:none;color:var(--color-text-muted);cursor:pointer;padding:var(--space-2);border-radius:var(--radius-full);display:flex;transition:all .15s ease}.cc-header-action-btn:hover{background-color:var(--color-bg-secondary);color:var(--color-text-primary)}.cc-header-action-btn .cc-header-badge{position:absolute;top:4px;right:4px;font-size:10px;padding:2px 4px;min-width:16px;height:16px;display:flex;align-items:center;justify-content:center}.cc-header-divider{width:1px;height:24px;background-color:var(--color-border-subtle);margin:0 var(--space-2)}.cc-header-user{display:flex;align-items:center;gap:var(--space-3);cursor:pointer;padding:var(--space-1) var(--space-2);border-radius:var(--radius-lg);transition:background-color .15s ease}.cc-header-user:hover{background-color:var(--color-bg-secondary)}.cc-header-user-info{display:none;flex-direction:column;text-align:right}@media(min-width:768px){.cc-header-user-info{display:flex}}.cc-header-user-info .cc-header-user-name{font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);line-height:1.2}.cc-header-user-info .cc-header-user-role{font-size:var(--font-size-xs);color:var(--color-text-muted)}.cc-header-avatar{width:36px;height:36px;border-radius:var(--radius-full);background:#0ea5e9;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:var(--font-weight-bold);font-size:var(--font-size-sm);overflow:hidden;box-shadow:0 0 0 2px var(--header-bg),0 0 0 4px var(--color-border-subtle)}.cc-header-avatar img{width:100%;height:100%;object-fit:cover}.cc-header-user-arrow{color:var(--color-text-muted)}\n"] }]
370
+ }], propDecorators: { user: [{
371
+ type: Input
372
+ }], notificationsCount: [{
373
+ type: Input
374
+ }], showMenuButton: [{
375
+ type: Input
376
+ }], hasLogoContent: [{
377
+ type: Input
378
+ }], toggleSidebar: [{
379
+ type: Output
380
+ }], userClick: [{
381
+ type: Output
382
+ }], notificationClick: [{
383
+ type: Output
384
+ }], userAction: [{
385
+ type: Output
386
+ }] } });
387
+
388
+ class CcSidebarComponent {
389
+ constructor() {
390
+ this.menuItems = [];
391
+ this.collapsed = false;
392
+ this.activeRoute = '';
393
+ this.navigate = new EventEmitter();
394
+ this.toggleCollapse = new EventEmitter();
395
+ }
396
+ onItemClick(item) {
397
+ this.navigate.emit(item);
398
+ }
399
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcSidebarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
400
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: CcSidebarComponent, isStandalone: true, selector: "cc-sidebar", inputs: { menuItems: "menuItems", collapsed: "collapsed", activeRoute: "activeRoute" }, outputs: { navigate: "navigate", toggleCollapse: "toggleCollapse" }, ngImport: i0, template: "<aside class=\"cc-sidebar\" [class.collapsed]=\"collapsed\">\r\n <div class=\"cc-sidebar-header\">\r\n <div class=\"cc-sidebar-logo\">\r\n <ng-content select=\"[logo]\"></ng-content>\r\n </div>\r\n <button class=\"cc-sidebar-toggle\" (click)=\"toggleCollapse.emit()\" type=\"button\">\r\n <cc-icon [name]=\"collapsed ? 'chevron_right' : 'chevron_left'\" size=\"sm\"></cc-icon>\r\n </button>\r\n </div>\r\n\r\n <nav class=\"cc-sidebar-nav\">\r\n <div class=\"cc-sidebar-group\" *ngFor=\"let item of menuItems\">\r\n <a class=\"cc-sidebar-item\" [routerLink]=\"item.route\" routerLinkActive=\"active\"\r\n [routerLinkActiveOptions]=\"{ exact: item.exact || false }\" [title]=\"collapsed ? item.label : ''\"\r\n (click)=\"onItemClick(item)\">\r\n\r\n <cc-icon [name]=\"item.icon\" size=\"md\" class=\"cc-sidebar-item-icon\"></cc-icon>\r\n <span class=\"cc-sidebar-item-label\" *ngIf=\"!collapsed\">{{ item.label }}</span>\r\n\r\n <span class=\"cc-sidebar-item-badge\" *ngIf=\"item.badge && !collapsed\">\r\n {{ item.badge }}\r\n </span>\r\n </a>\r\n </div>\r\n </nav>\r\n\r\n <div class=\"cc-sidebar-footer\">\r\n <ng-content select=\"[footer]\"></ng-content>\r\n </div>\r\n</aside>", styles: [":root,[data-theme=light]{--color-bg-primary: #FFFFFF;--color-bg-secondary: #FAFAF9;--color-text-primary: #1C1917;--color-text-secondary: #57534E;--color-text-muted: #A8A29E;--color-border-subtle: #E7E5E4;--color-border-strong: #D6D3D1;--color-brand: #0284C7;--color-brand-hover: #0369A1;--color-focus-ring: rgba(2, 132, 199, .2);--color-success: #10B981;--color-danger: #F43F5E;--surface-glass-bg: rgba(255, 255, 255, .7);--surface-glass-border: rgba(255, 255, 255, .3);--surface-glass-blur: 12px;--surface-glass-shadow: 0 4px 6px -1px rgba(0, 0, 0, .1);--font-heading-xl: 32px;--font-heading-lg: 24px;--font-heading-md: 20px;--font-body-lg: 18px;--font-body-md: 16px;--font-caption: 12px;--font-family-base: Inter, sans-serif;--font-weight-regular: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 14px;--radius-xl: 18px;--radius-full: 9999px;--font-size-xs: 12px;--font-size-sm: 14px;--font-size-md: 16px;--font-size-lg: 18px;--font-size-xl: 20px;--font-size-2xl: 24px;--font-size-3xl: 32px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-6: 24px;--space-8: calc(var(--space-4) * 2);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .06);--shadow-md: 0 4px 12px rgba(0, 0, 0, .08);--shadow-lg: 0 12px 32px rgba(0, 0, 0, .12)}[data-theme=dark]{--color-bg-primary: #1C1917;--color-bg-secondary: #292524;--color-text-primary: #FFFFFF;--color-text-secondary: #A8A29E;--color-text-muted: #78716C;--color-border-subtle: #44403C;--color-border-strong: #57534E;--color-brand: #0EA5E9;--color-brand-hover: #7DD3FC;--color-focus-ring: rgba(59, 130, 246, .5);--surface-glass-bg: rgba(15, 23, 42, .8);--surface-glass-border: rgba(255, 255, 255, .1);--surface-glass-blur: 16px;--surface-glass-shadow: 0 10px 15px -3px rgba(0, 0, 0, .3)}:root{--h1-size: var(--font-size-h1);--h1-weight: var(--font-weight-semibold);--h2-size: var(--font-size-h2);--h2-weight: var(--font-weight-semibold);--h3-size: var(--font-size-h3);--h3-weight: var(--font-weight-semibold);--body-size: var(--font-size-body);--body-weight: var(--font-weight-regular);--sm-size: var(--font-size-sm);--sm-weight: var(--font-weight-regular);--caption-size: var(--font-size-caption);--caption-weight: var(--font-weight-regular)}:root{--btn-height-md: 44px;--btn-radius: var(--radius-md);--btn-font-weight: var(--font-weight-medium);--btn-bg-primary: var(--color-brand);--btn-text-primary: #FFFFFF;--btn-shadow-default: var(--shadow-sm);--btn-shadow-hover: var(--shadow-md);--btn-transition: .15s ease;--btn-focus-ring: 0 0 0 2px var(--color-focus-ring)}:root{--card-bg: var(--color-bg-primary);--card-radius: var(--radius-lg);--card-shadow: var(--shadow-sm);--card-shadow-hover: var(--shadow-md)}:root{--input-height-md: 44px;--input-bg: var(--color-bg-primary);--input-radius: var(--radius-md);--input-border-default: var(--color-border-subtle);--input-border-hover: var(--color-border-strong);--input-border-focus: var(--color-brand);--input-border-error: var(--color-danger);--input-transition: .12s ease-in-out;--input-focus-ring: 0 0 0 3px var(--color-focus-ring);--input-error-ring: 0 0 0 3px rgba(239, 68, 68, .15)}.cc-badge-tokens{--badge-radius: var(--radius-sm);--badge-padding-v: var(--space-1);--badge-padding-h: var(--space-2);--badge-font-size: var(--font-size-xs);--badge-font-weight: var(--font-weight-medium);--badge-success-bg: #D1FAE5;--badge-success-text: #065F46;--badge-success-border: #A7F3D0;--badge-warning-bg: #FEF3C7;--badge-warning-text: #92400E;--badge-warning-border: #FDE68A;--badge-error-bg: #FFE4E6;--badge-error-text: #9F1239;--badge-error-border: #FECDD3;--badge-info-bg: var(--color-info-50);--badge-info-text: var(--color-info-700);--badge-info-border: var(--color-info-200);--badge-neutral-bg: #F5F5F4;--badge-neutral-text: #44403C;--badge-neutral-border: #E7E5E4}.cc-label-tokens{--label-font-size: var(--font-size-sm);--label-font-weight: var(--font-weight-medium);--label-color: var(--color-text-secondary);--label-required-color: var(--color-error-500);--label-margin-bottom: var(--space-2)}.cc-select-tokens{--select-bg: var(--color-bg-primary);--select-border: var(--color-border-subtle);--select-border-hover: var(--color-border-strong);--select-border-focus: var(--color-brand-primary);--select-shadow-focus: var(--shadow-focus);--select-radius: var(--radius-md);--select-height: 44px;--select-padding-h: var(--space-4);--select-dropdown-bg: var(--color-bg-primary);--select-dropdown-shadow: var(--shadow-md);--select-dropdown-max-height: 240px;--select-option-padding: var(--space-3) var(--space-4);--select-option-hover: var(--color-bg-secondary);--select-option-selected-bg: var(--color-brand-50);--select-option-selected-text: var(--color-brand-primary)}.cc-form-field-tokens{--form-field-margin-bottom: var(--space-6);--form-field-label-margin: var(--space-2);--form-field-message-margin: var(--space-1);--form-field-message-font-size: var(--font-size-xs);--form-field-message-color: var(--color-text-muted);--form-field-error-color: var(--color-error-600)}.cc-header-tokens{--header-height: 72px;--header-bg: #FFFFFF;--header-border-color: #F5F5F4;--header-padding: 0 var(--space-6);--header-shadow: 0 1px 2px rgba(0, 0, 0, .05);--header-z-index: 100;--header-logo-height: 32px;--header-user-gap: var(--space-4)}.cc-sidebar-tokens{--sidebar-width: 280px;--sidebar-collapsed-width: 80px;--sidebar-bg: #1C1917;--sidebar-border-color: #292524;--sidebar-padding: var(--space-4);--sidebar-z-index: 101;--sidebar-transition: width .3s cubic-bezier(.4, 0, .2, 1);--sidebar-item-height: 48px;--sidebar-item-radius: var(--radius-lg);--sidebar-item-padding: 0 var(--space-4);--sidebar-item-gap: var(--space-3);--sidebar-accent-color: #0EA5E9;--sidebar-text-color: #FFFFFF;--sidebar-text-muted: #A8A29E}.cc-data-table-tokens{--table-bg: var(--color-bg-primary);--table-header-bg: var(--color-bg-secondary);--table-border-color: var(--color-border-subtle);--table-header-color: var(--color-text-muted);--table-row-hover: rgba(var(--color-brand-primary-rgb), .04);--table-cell-padding: var(--space-4);--table-font-size: var(--font-size-sm);--table-radius: var(--radius-lg)}.cc-modal-tokens{--modal-bg: var(--color-bg-primary);--modal-overlay-bg: rgba(0, 0, 0, .5);--modal-radius: var(--radius-xl);--modal-shadow: var(--shadow-xl);--modal-z-index: 1000;--modal-header-padding: var(--space-6);--modal-body-padding: var(--space-6);--modal-footer-padding: var(--space-4) var(--space-6);--modal-sm-width: 400px;--modal-md-width: 600px;--modal-lg-width: 900px}.cc-sidebar{width:var(--sidebar-width);height:100vh;background:var(--neutral-900)}@supports (backdrop-filter: blur(1px)){.cc-sidebar{background:var(--surface-glass-bg);backdrop-filter:blur(var(--surface-glass-blur));-webkit-backdrop-filter:blur(var(--surface-glass-blur))}}.cc-sidebar{border-right:1px solid var(--surface-glass-border);display:flex;flex-direction:column;transition:var(--sidebar-transition);overflow-x:hidden;position:sticky;top:0;z-index:110}.cc-sidebar.collapsed{width:var(--sidebar-collapsed-width)}.cc-sidebar.collapsed .cc-sidebar-header{padding:var(--space-4) 0;justify-content:center}.cc-sidebar.collapsed .cc-sidebar-logo{display:none}.cc-sidebar.collapsed .cc-sidebar-toggle{position:static}.cc-sidebar.collapsed .cc-sidebar-item{justify-content:center;padding:0}.cc-sidebar-header{height:var(--header-height);padding:0 var(--space-6);display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--surface-glass-border);position:relative;background:transparent}.cc-sidebar-logo{display:flex;align-items:center}.cc-sidebar-toggle{background:var(--color-bg-secondary);border:1px solid var(--color-border-subtle);color:var(--color-text-muted);width:24px;height:24px;border-radius:var(--radius-full);display:flex;align-items:center;justify-content:center;cursor:pointer;position:absolute;right:-12px;top:calc(var(--header-height) / 2 - 12px);z-index:2;transition:all .15s ease}.cc-sidebar-toggle:hover{background-color:var(--color-brand);border-color:var(--color-brand);color:#fff}.cc-sidebar-nav{flex:1;padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-2);overflow-y:auto}.cc-sidebar-item{height:48px;padding:0 var(--space-4);display:flex;align-items:center;gap:var(--space-3);border-radius:var(--radius-lg);color:var(--color-text-secondary);text-decoration:none;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);transition:all .2s cubic-bezier(.4,0,.2,1);position:relative}.cc-sidebar-item:hover{background-color:var(--color-bg-secondary);color:var(--color-text-primary)}.cc-sidebar-item.active{background-color:var(--color-brand);color:#fff;box-shadow:0 4px 12px rgba(var(--brand-600),.2)}.cc-sidebar-item.active .cc-sidebar-item-icon{color:#fff}.cc-sidebar-item.active:after{content:\"\";position:absolute;left:-4px;top:25%;height:50%;width:4px;background:#fff;border-radius:0 4px 4px 0}.cc-sidebar-item-icon{flex-shrink:0;color:inherit;font-size:24px}.cc-sidebar-item-label{white-space:nowrap;opacity:1;transition:opacity .2s ease}.cc-sidebar-item-badge{margin-left:auto;background-color:var(--color-danger);color:#fff;font-size:var(--font-size-xs);padding:2px 6px;border-radius:var(--radius-full)}.cc-sidebar-footer{padding:var(--space-4);border-top:1px solid var(--surface-glass-border)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "component", type: CcIconComponent, selector: "cc-icon", inputs: ["name", "size", "color"] }] }); }
401
+ }
402
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcSidebarComponent, decorators: [{
403
+ type: Component,
404
+ args: [{ selector: 'cc-sidebar', standalone: true, imports: [CommonModule, RouterLink, RouterLinkActive, CcIconComponent], template: "<aside class=\"cc-sidebar\" [class.collapsed]=\"collapsed\">\r\n <div class=\"cc-sidebar-header\">\r\n <div class=\"cc-sidebar-logo\">\r\n <ng-content select=\"[logo]\"></ng-content>\r\n </div>\r\n <button class=\"cc-sidebar-toggle\" (click)=\"toggleCollapse.emit()\" type=\"button\">\r\n <cc-icon [name]=\"collapsed ? 'chevron_right' : 'chevron_left'\" size=\"sm\"></cc-icon>\r\n </button>\r\n </div>\r\n\r\n <nav class=\"cc-sidebar-nav\">\r\n <div class=\"cc-sidebar-group\" *ngFor=\"let item of menuItems\">\r\n <a class=\"cc-sidebar-item\" [routerLink]=\"item.route\" routerLinkActive=\"active\"\r\n [routerLinkActiveOptions]=\"{ exact: item.exact || false }\" [title]=\"collapsed ? item.label : ''\"\r\n (click)=\"onItemClick(item)\">\r\n\r\n <cc-icon [name]=\"item.icon\" size=\"md\" class=\"cc-sidebar-item-icon\"></cc-icon>\r\n <span class=\"cc-sidebar-item-label\" *ngIf=\"!collapsed\">{{ item.label }}</span>\r\n\r\n <span class=\"cc-sidebar-item-badge\" *ngIf=\"item.badge && !collapsed\">\r\n {{ item.badge }}\r\n </span>\r\n </a>\r\n </div>\r\n </nav>\r\n\r\n <div class=\"cc-sidebar-footer\">\r\n <ng-content select=\"[footer]\"></ng-content>\r\n </div>\r\n</aside>", styles: [":root,[data-theme=light]{--color-bg-primary: #FFFFFF;--color-bg-secondary: #FAFAF9;--color-text-primary: #1C1917;--color-text-secondary: #57534E;--color-text-muted: #A8A29E;--color-border-subtle: #E7E5E4;--color-border-strong: #D6D3D1;--color-brand: #0284C7;--color-brand-hover: #0369A1;--color-focus-ring: rgba(2, 132, 199, .2);--color-success: #10B981;--color-danger: #F43F5E;--surface-glass-bg: rgba(255, 255, 255, .7);--surface-glass-border: rgba(255, 255, 255, .3);--surface-glass-blur: 12px;--surface-glass-shadow: 0 4px 6px -1px rgba(0, 0, 0, .1);--font-heading-xl: 32px;--font-heading-lg: 24px;--font-heading-md: 20px;--font-body-lg: 18px;--font-body-md: 16px;--font-caption: 12px;--font-family-base: Inter, sans-serif;--font-weight-regular: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--radius-sm: 6px;--radius-md: 8px;--radius-lg: 14px;--radius-xl: 18px;--radius-full: 9999px;--font-size-xs: 12px;--font-size-sm: 14px;--font-size-md: 16px;--font-size-lg: 18px;--font-size-xl: 20px;--font-size-2xl: 24px;--font-size-3xl: 32px;--space-1: 4px;--space-2: 8px;--space-3: 12px;--space-4: 16px;--space-6: 24px;--space-8: calc(var(--space-4) * 2);--shadow-sm: 0 1px 2px rgba(0, 0, 0, .06);--shadow-md: 0 4px 12px rgba(0, 0, 0, .08);--shadow-lg: 0 12px 32px rgba(0, 0, 0, .12)}[data-theme=dark]{--color-bg-primary: #1C1917;--color-bg-secondary: #292524;--color-text-primary: #FFFFFF;--color-text-secondary: #A8A29E;--color-text-muted: #78716C;--color-border-subtle: #44403C;--color-border-strong: #57534E;--color-brand: #0EA5E9;--color-brand-hover: #7DD3FC;--color-focus-ring: rgba(59, 130, 246, .5);--surface-glass-bg: rgba(15, 23, 42, .8);--surface-glass-border: rgba(255, 255, 255, .1);--surface-glass-blur: 16px;--surface-glass-shadow: 0 10px 15px -3px rgba(0, 0, 0, .3)}:root{--h1-size: var(--font-size-h1);--h1-weight: var(--font-weight-semibold);--h2-size: var(--font-size-h2);--h2-weight: var(--font-weight-semibold);--h3-size: var(--font-size-h3);--h3-weight: var(--font-weight-semibold);--body-size: var(--font-size-body);--body-weight: var(--font-weight-regular);--sm-size: var(--font-size-sm);--sm-weight: var(--font-weight-regular);--caption-size: var(--font-size-caption);--caption-weight: var(--font-weight-regular)}:root{--btn-height-md: 44px;--btn-radius: var(--radius-md);--btn-font-weight: var(--font-weight-medium);--btn-bg-primary: var(--color-brand);--btn-text-primary: #FFFFFF;--btn-shadow-default: var(--shadow-sm);--btn-shadow-hover: var(--shadow-md);--btn-transition: .15s ease;--btn-focus-ring: 0 0 0 2px var(--color-focus-ring)}:root{--card-bg: var(--color-bg-primary);--card-radius: var(--radius-lg);--card-shadow: var(--shadow-sm);--card-shadow-hover: var(--shadow-md)}:root{--input-height-md: 44px;--input-bg: var(--color-bg-primary);--input-radius: var(--radius-md);--input-border-default: var(--color-border-subtle);--input-border-hover: var(--color-border-strong);--input-border-focus: var(--color-brand);--input-border-error: var(--color-danger);--input-transition: .12s ease-in-out;--input-focus-ring: 0 0 0 3px var(--color-focus-ring);--input-error-ring: 0 0 0 3px rgba(239, 68, 68, .15)}.cc-badge-tokens{--badge-radius: var(--radius-sm);--badge-padding-v: var(--space-1);--badge-padding-h: var(--space-2);--badge-font-size: var(--font-size-xs);--badge-font-weight: var(--font-weight-medium);--badge-success-bg: #D1FAE5;--badge-success-text: #065F46;--badge-success-border: #A7F3D0;--badge-warning-bg: #FEF3C7;--badge-warning-text: #92400E;--badge-warning-border: #FDE68A;--badge-error-bg: #FFE4E6;--badge-error-text: #9F1239;--badge-error-border: #FECDD3;--badge-info-bg: var(--color-info-50);--badge-info-text: var(--color-info-700);--badge-info-border: var(--color-info-200);--badge-neutral-bg: #F5F5F4;--badge-neutral-text: #44403C;--badge-neutral-border: #E7E5E4}.cc-label-tokens{--label-font-size: var(--font-size-sm);--label-font-weight: var(--font-weight-medium);--label-color: var(--color-text-secondary);--label-required-color: var(--color-error-500);--label-margin-bottom: var(--space-2)}.cc-select-tokens{--select-bg: var(--color-bg-primary);--select-border: var(--color-border-subtle);--select-border-hover: var(--color-border-strong);--select-border-focus: var(--color-brand-primary);--select-shadow-focus: var(--shadow-focus);--select-radius: var(--radius-md);--select-height: 44px;--select-padding-h: var(--space-4);--select-dropdown-bg: var(--color-bg-primary);--select-dropdown-shadow: var(--shadow-md);--select-dropdown-max-height: 240px;--select-option-padding: var(--space-3) var(--space-4);--select-option-hover: var(--color-bg-secondary);--select-option-selected-bg: var(--color-brand-50);--select-option-selected-text: var(--color-brand-primary)}.cc-form-field-tokens{--form-field-margin-bottom: var(--space-6);--form-field-label-margin: var(--space-2);--form-field-message-margin: var(--space-1);--form-field-message-font-size: var(--font-size-xs);--form-field-message-color: var(--color-text-muted);--form-field-error-color: var(--color-error-600)}.cc-header-tokens{--header-height: 72px;--header-bg: #FFFFFF;--header-border-color: #F5F5F4;--header-padding: 0 var(--space-6);--header-shadow: 0 1px 2px rgba(0, 0, 0, .05);--header-z-index: 100;--header-logo-height: 32px;--header-user-gap: var(--space-4)}.cc-sidebar-tokens{--sidebar-width: 280px;--sidebar-collapsed-width: 80px;--sidebar-bg: #1C1917;--sidebar-border-color: #292524;--sidebar-padding: var(--space-4);--sidebar-z-index: 101;--sidebar-transition: width .3s cubic-bezier(.4, 0, .2, 1);--sidebar-item-height: 48px;--sidebar-item-radius: var(--radius-lg);--sidebar-item-padding: 0 var(--space-4);--sidebar-item-gap: var(--space-3);--sidebar-accent-color: #0EA5E9;--sidebar-text-color: #FFFFFF;--sidebar-text-muted: #A8A29E}.cc-data-table-tokens{--table-bg: var(--color-bg-primary);--table-header-bg: var(--color-bg-secondary);--table-border-color: var(--color-border-subtle);--table-header-color: var(--color-text-muted);--table-row-hover: rgba(var(--color-brand-primary-rgb), .04);--table-cell-padding: var(--space-4);--table-font-size: var(--font-size-sm);--table-radius: var(--radius-lg)}.cc-modal-tokens{--modal-bg: var(--color-bg-primary);--modal-overlay-bg: rgba(0, 0, 0, .5);--modal-radius: var(--radius-xl);--modal-shadow: var(--shadow-xl);--modal-z-index: 1000;--modal-header-padding: var(--space-6);--modal-body-padding: var(--space-6);--modal-footer-padding: var(--space-4) var(--space-6);--modal-sm-width: 400px;--modal-md-width: 600px;--modal-lg-width: 900px}.cc-sidebar{width:var(--sidebar-width);height:100vh;background:var(--neutral-900)}@supports (backdrop-filter: blur(1px)){.cc-sidebar{background:var(--surface-glass-bg);backdrop-filter:blur(var(--surface-glass-blur));-webkit-backdrop-filter:blur(var(--surface-glass-blur))}}.cc-sidebar{border-right:1px solid var(--surface-glass-border);display:flex;flex-direction:column;transition:var(--sidebar-transition);overflow-x:hidden;position:sticky;top:0;z-index:110}.cc-sidebar.collapsed{width:var(--sidebar-collapsed-width)}.cc-sidebar.collapsed .cc-sidebar-header{padding:var(--space-4) 0;justify-content:center}.cc-sidebar.collapsed .cc-sidebar-logo{display:none}.cc-sidebar.collapsed .cc-sidebar-toggle{position:static}.cc-sidebar.collapsed .cc-sidebar-item{justify-content:center;padding:0}.cc-sidebar-header{height:var(--header-height);padding:0 var(--space-6);display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--surface-glass-border);position:relative;background:transparent}.cc-sidebar-logo{display:flex;align-items:center}.cc-sidebar-toggle{background:var(--color-bg-secondary);border:1px solid var(--color-border-subtle);color:var(--color-text-muted);width:24px;height:24px;border-radius:var(--radius-full);display:flex;align-items:center;justify-content:center;cursor:pointer;position:absolute;right:-12px;top:calc(var(--header-height) / 2 - 12px);z-index:2;transition:all .15s ease}.cc-sidebar-toggle:hover{background-color:var(--color-brand);border-color:var(--color-brand);color:#fff}.cc-sidebar-nav{flex:1;padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-2);overflow-y:auto}.cc-sidebar-item{height:48px;padding:0 var(--space-4);display:flex;align-items:center;gap:var(--space-3);border-radius:var(--radius-lg);color:var(--color-text-secondary);text-decoration:none;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);transition:all .2s cubic-bezier(.4,0,.2,1);position:relative}.cc-sidebar-item:hover{background-color:var(--color-bg-secondary);color:var(--color-text-primary)}.cc-sidebar-item.active{background-color:var(--color-brand);color:#fff;box-shadow:0 4px 12px rgba(var(--brand-600),.2)}.cc-sidebar-item.active .cc-sidebar-item-icon{color:#fff}.cc-sidebar-item.active:after{content:\"\";position:absolute;left:-4px;top:25%;height:50%;width:4px;background:#fff;border-radius:0 4px 4px 0}.cc-sidebar-item-icon{flex-shrink:0;color:inherit;font-size:24px}.cc-sidebar-item-label{white-space:nowrap;opacity:1;transition:opacity .2s ease}.cc-sidebar-item-badge{margin-left:auto;background-color:var(--color-danger);color:#fff;font-size:var(--font-size-xs);padding:2px 6px;border-radius:var(--radius-full)}.cc-sidebar-footer{padding:var(--space-4);border-top:1px solid var(--surface-glass-border)}\n"] }]
405
+ }], propDecorators: { menuItems: [{
406
+ type: Input
407
+ }], collapsed: [{
408
+ type: Input
409
+ }], activeRoute: [{
410
+ type: Input
411
+ }], navigate: [{
412
+ type: Output
413
+ }], toggleCollapse: [{
414
+ type: Output
415
+ }] } });
416
+
417
+ class CcDataTableComponent {
418
+ constructor() {
419
+ this.data = [];
420
+ this.columns = [];
421
+ this.loading = false;
422
+ this.showSearch = true;
423
+ this.searchPlaceholder = 'Buscar en la tabla...';
424
+ this.rowClick = new EventEmitter();
425
+ this.search = new EventEmitter();
426
+ this.actionClick = new EventEmitter();
427
+ }
428
+ get skeletonRows() {
429
+ return Array(5).fill(0);
430
+ }
431
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcDataTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
432
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: CcDataTableComponent, isStandalone: true, selector: "cc-data-table", inputs: { data: "data", columns: "columns", loading: "loading", showSearch: "showSearch", searchPlaceholder: "searchPlaceholder" }, outputs: { rowClick: "rowClick", search: "search", actionClick: "actionClick" }, queries: [{ propertyName: "customCellTemplate", first: true, predicate: ["customCell"], descendants: true }, { propertyName: "rowActionsTemplate", first: true, predicate: ["rowActions"], descendants: true }], ngImport: i0, template: "<div class=\"cc-data-table-container\">\r\n <div class=\"cc-data-table-wrapper\">\r\n <table class=\"cc-data-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let col of columns\">\r\n {{ col.label }}\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr *ngFor=\"let row of data\">\r\n <td *ngFor=\"let col of columns\">\r\n {{ row[col.key] }}\r\n </td>\r\n </tr>\r\n\r\n <tr *ngIf=\"data.length === 0\">\r\n <td [attr.colspan]=\"columns.length\">\r\n No se encontraron resultados\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n</div>", styles: [".cc-data-table-container{display:flex;flex-direction:column;gap:var(--space-4);width:100%}.cc-data-table-header{display:flex;justify-content:space-between;align-items:center;gap:var(--space-4)}.cc-data-table-wrapper{background-color:var(--table-bg);border:1px solid var(--table-border-color);border-radius:var(--table-radius);overflow:hidden;box-shadow:var(--shadow-sm)}.cc-data-table{width:100%;border-collapse:collapse;text-align:left;font-size:var(--table-font-size)}.cc-data-table thead{background-color:var(--color-bg-secondary)}.cc-data-table thead th{padding:var(--space-4) var(--space-6);font-weight:var(--font-weight-bold);font-size:var(--font-size-xs);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--color-border-subtle)}.cc-data-table thead th.sortable{cursor:pointer}.cc-data-table thead th.sortable:hover{color:var(--color-text-primary)}.cc-data-table tbody tr{border-bottom:1px solid var(--color-border-subtle);transition:all .2s ease;cursor:pointer;height:52px}.cc-data-table tbody tr:last-child{border-bottom:none}.cc-data-table tbody tr:hover{background-color:rgba(var(--brand-600),.02)}.cc-data-table tbody tr:hover td{color:var(--color-brand)}.cc-data-table tbody tr.active{background-color:var(--color-bg-secondary);box-shadow:inset 3px 0 0 0 var(--color-brand)}.cc-data-table tbody td{padding:var(--space-3) var(--space-6);color:var(--color-text-primary);font-size:var(--font-size-sm)}.cc-table-th-content{display:flex;align-items:center;gap:var(--space-2)}.cc-table-empty-content{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-12);color:var(--color-text-muted);gap:var(--space-4)}.cc-table-empty-content p{font-size:var(--font-size-lg);font-weight:var(--font-weight-medium)}.cc-table-skeleton-bar{height:12px;background:linear-gradient(90deg,var(--color-bg-secondary) 25%,var(--color-border-subtle) 50%,var(--color-bg-secondary) 75%);background-size:200% 100%;animation:loading-shimmer 1.5s infinite;border-radius:var(--radius-sm);width:100%}@keyframes loading-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
433
+ }
434
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcDataTableComponent, decorators: [{
435
+ type: Component,
436
+ args: [{ selector: 'cc-data-table', standalone: true, imports: [CommonModule], template: "<div class=\"cc-data-table-container\">\r\n <div class=\"cc-data-table-wrapper\">\r\n <table class=\"cc-data-table\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let col of columns\">\r\n {{ col.label }}\r\n </th>\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n <tr *ngFor=\"let row of data\">\r\n <td *ngFor=\"let col of columns\">\r\n {{ row[col.key] }}\r\n </td>\r\n </tr>\r\n\r\n <tr *ngIf=\"data.length === 0\">\r\n <td [attr.colspan]=\"columns.length\">\r\n No se encontraron resultados\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n</div>", styles: [".cc-data-table-container{display:flex;flex-direction:column;gap:var(--space-4);width:100%}.cc-data-table-header{display:flex;justify-content:space-between;align-items:center;gap:var(--space-4)}.cc-data-table-wrapper{background-color:var(--table-bg);border:1px solid var(--table-border-color);border-radius:var(--table-radius);overflow:hidden;box-shadow:var(--shadow-sm)}.cc-data-table{width:100%;border-collapse:collapse;text-align:left;font-size:var(--table-font-size)}.cc-data-table thead{background-color:var(--color-bg-secondary)}.cc-data-table thead th{padding:var(--space-4) var(--space-6);font-weight:var(--font-weight-bold);font-size:var(--font-size-xs);color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--color-border-subtle)}.cc-data-table thead th.sortable{cursor:pointer}.cc-data-table thead th.sortable:hover{color:var(--color-text-primary)}.cc-data-table tbody tr{border-bottom:1px solid var(--color-border-subtle);transition:all .2s ease;cursor:pointer;height:52px}.cc-data-table tbody tr:last-child{border-bottom:none}.cc-data-table tbody tr:hover{background-color:rgba(var(--brand-600),.02)}.cc-data-table tbody tr:hover td{color:var(--color-brand)}.cc-data-table tbody tr.active{background-color:var(--color-bg-secondary);box-shadow:inset 3px 0 0 0 var(--color-brand)}.cc-data-table tbody td{padding:var(--space-3) var(--space-6);color:var(--color-text-primary);font-size:var(--font-size-sm)}.cc-table-th-content{display:flex;align-items:center;gap:var(--space-2)}.cc-table-empty-content{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:var(--space-12);color:var(--color-text-muted);gap:var(--space-4)}.cc-table-empty-content p{font-size:var(--font-size-lg);font-weight:var(--font-weight-medium)}.cc-table-skeleton-bar{height:12px;background:linear-gradient(90deg,var(--color-bg-secondary) 25%,var(--color-border-subtle) 50%,var(--color-bg-secondary) 75%);background-size:200% 100%;animation:loading-shimmer 1.5s infinite;border-radius:var(--radius-sm);width:100%}@keyframes loading-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"] }]
437
+ }], propDecorators: { data: [{
438
+ type: Input
439
+ }], columns: [{
440
+ type: Input
441
+ }], loading: [{
442
+ type: Input
443
+ }], showSearch: [{
444
+ type: Input
445
+ }], searchPlaceholder: [{
446
+ type: Input
447
+ }], rowClick: [{
448
+ type: Output
449
+ }], search: [{
450
+ type: Output
451
+ }], actionClick: [{
452
+ type: Output
453
+ }], customCellTemplate: [{
454
+ type: ContentChild,
455
+ args: ['customCell']
456
+ }], rowActionsTemplate: [{
457
+ type: ContentChild,
458
+ args: ['rowActions']
459
+ }] } });
460
+
461
+ class CcModalComponent {
462
+ constructor() {
463
+ this.isOpen = false;
464
+ this.title = '';
465
+ this.size = 'md';
466
+ this.closeOnOverlay = true;
467
+ this.showFooter = true;
468
+ this.close = new EventEmitter();
469
+ }
470
+ onOverlayClick(event) {
471
+ if (this.closeOnOverlay && event.target.classList.contains('cc-modal-overlay')) {
472
+ this.close.emit();
473
+ }
474
+ }
475
+ onEscape() {
476
+ if (this.isOpen) {
477
+ this.close.emit();
478
+ }
479
+ }
480
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
481
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: CcModalComponent, isStandalone: true, selector: "cc-modal", inputs: { isOpen: "isOpen", title: "title", size: "size", closeOnOverlay: "closeOnOverlay", showFooter: "showFooter" }, outputs: { close: "close" }, host: { listeners: { "document:keydown.escape": "onEscape()" } }, ngImport: i0, template: "<div class=\"cc-modal-overlay\" *ngIf=\"isOpen\" (click)=\"onOverlayClick($event)\">\r\n\r\n <div class=\"cc-modal\" [ngClass]=\"'size-' + size\" role=\"dialog\" aria-modal=\"true\">\r\n\r\n <header class=\"cc-modal-header\">\r\n <h3 class=\"cc-modal-title\">{{ title }}</h3>\r\n <button class=\"cc-modal-close\" (click)=\"close.emit()\" type=\"button\">\r\n <cc-icon name=\"close\" size=\"md\"></cc-icon>\r\n </button>\r\n </header>\r\n\r\n <div class=\"cc-modal-body\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <footer class=\"cc-modal-footer\" *ngIf=\"showFooter\">\r\n <ng-content select=\"[footer]\"></ng-content>\r\n </footer>\r\n </div>\r\n</div>", styles: [".cc-modal-overlay{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:var(--modal-overlay-bg);display:flex;align-items:center;justify-content:center;z-index:var(--modal-z-index);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);padding:var(--space-4)}.cc-modal{background-color:var(--modal-bg);border-radius:var(--modal-radius);box-shadow:var(--modal-shadow);display:flex;flex-direction:column;max-height:90vh;width:100%;animation:modalScaleUp .2s ease-out;overflow:hidden}.cc-modal.size-sm{max-width:var(--modal-sm-width)}.cc-modal.size-md{max-width:var(--modal-md-width)}.cc-modal.size-lg{max-width:var(--modal-lg-width)}.cc-modal-header{padding:var(--modal-header-padding);display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--color-border-subtle)}.cc-modal-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin:0}.cc-modal-close{background:transparent;border:none;color:var(--color-text-muted);cursor:pointer;padding:var(--space-1);border-radius:var(--radius-md);display:flex;transition:all .15s ease}.cc-modal-close:hover{background-color:var(--color-bg-secondary);color:var(--color-text-primary)}.cc-modal-body{padding:var(--modal-body-padding);overflow-y:auto;flex:1}.cc-modal-footer{padding:var(--modal-footer-padding);border-top:1px solid var(--color-border-subtle);display:flex;justify-content:flex-end;gap:var(--space-3);background-color:var(--color-bg-secondary)}@keyframes modalScaleUp{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CcIconComponent, selector: "cc-icon", inputs: ["name", "size", "color"] }] }); }
482
+ }
483
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcModalComponent, decorators: [{
484
+ type: Component,
485
+ args: [{ selector: 'cc-modal', standalone: true, imports: [CommonModule, CcIconComponent], template: "<div class=\"cc-modal-overlay\" *ngIf=\"isOpen\" (click)=\"onOverlayClick($event)\">\r\n\r\n <div class=\"cc-modal\" [ngClass]=\"'size-' + size\" role=\"dialog\" aria-modal=\"true\">\r\n\r\n <header class=\"cc-modal-header\">\r\n <h3 class=\"cc-modal-title\">{{ title }}</h3>\r\n <button class=\"cc-modal-close\" (click)=\"close.emit()\" type=\"button\">\r\n <cc-icon name=\"close\" size=\"md\"></cc-icon>\r\n </button>\r\n </header>\r\n\r\n <div class=\"cc-modal-body\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <footer class=\"cc-modal-footer\" *ngIf=\"showFooter\">\r\n <ng-content select=\"[footer]\"></ng-content>\r\n </footer>\r\n </div>\r\n</div>", styles: [".cc-modal-overlay{position:fixed;top:0;left:0;width:100vw;height:100vh;background-color:var(--modal-overlay-bg);display:flex;align-items:center;justify-content:center;z-index:var(--modal-z-index);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);padding:var(--space-4)}.cc-modal{background-color:var(--modal-bg);border-radius:var(--modal-radius);box-shadow:var(--modal-shadow);display:flex;flex-direction:column;max-height:90vh;width:100%;animation:modalScaleUp .2s ease-out;overflow:hidden}.cc-modal.size-sm{max-width:var(--modal-sm-width)}.cc-modal.size-md{max-width:var(--modal-md-width)}.cc-modal.size-lg{max-width:var(--modal-lg-width)}.cc-modal-header{padding:var(--modal-header-padding);display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--color-border-subtle)}.cc-modal-title{font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);color:var(--color-text-primary);margin:0}.cc-modal-close{background:transparent;border:none;color:var(--color-text-muted);cursor:pointer;padding:var(--space-1);border-radius:var(--radius-md);display:flex;transition:all .15s ease}.cc-modal-close:hover{background-color:var(--color-bg-secondary);color:var(--color-text-primary)}.cc-modal-body{padding:var(--modal-body-padding);overflow-y:auto;flex:1}.cc-modal-footer{padding:var(--modal-footer-padding);border-top:1px solid var(--color-border-subtle);display:flex;justify-content:flex-end;gap:var(--space-3);background-color:var(--color-bg-secondary)}@keyframes modalScaleUp{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}\n"] }]
486
+ }], propDecorators: { isOpen: [{
487
+ type: Input
488
+ }], title: [{
489
+ type: Input
490
+ }], size: [{
491
+ type: Input
492
+ }], closeOnOverlay: [{
493
+ type: Input
494
+ }], showFooter: [{
495
+ type: Input
496
+ }], close: [{
497
+ type: Output
498
+ }], onEscape: [{
499
+ type: HostListener,
500
+ args: ['document:keydown.escape']
501
+ }] } });
502
+
503
+ class CcLoginComponent {
504
+ constructor() {
505
+ this.fb = inject(FormBuilder);
506
+ this.title = 'Bienvenido';
507
+ this.subtitle = 'Inicia sesión para continuar';
508
+ this.loading = false;
509
+ this.errorMessage = null;
510
+ this.supportEmail = 'soporte@cerca.com.co';
511
+ this.forgotPasswordLabel = '¿Olvidaste tu clave?';
512
+ this.loginSubmit = new EventEmitter();
513
+ this.forgotPasswordClick = new EventEmitter();
514
+ this.loginForm = this.fb.group({
515
+ email: ['', [Validators.required, Validators.email]],
516
+ password: ['', [Validators.required]],
517
+ remember: [true]
518
+ });
519
+ }
520
+ submitForm() {
521
+ if (this.loginForm.valid) {
522
+ const { email, password, remember } = this.loginForm.getRawValue();
523
+ this.loginSubmit.emit({ email: email, password: password, remember: remember });
524
+ }
525
+ else {
526
+ Object.values(this.loginForm.controls).forEach(control => {
527
+ if (control.invalid) {
528
+ control.markAsDirty();
529
+ control.updateValueAndValidity({ onlySelf: true });
530
+ }
531
+ });
532
+ }
533
+ }
534
+ fieldInvalid(field) {
535
+ const control = this.loginForm.get(field);
536
+ return (control && control.invalid && (control.dirty || control.touched)) || false;
537
+ }
538
+ onForgotPassword() {
539
+ this.forgotPasswordClick.emit();
540
+ }
541
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcLoginComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
542
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: CcLoginComponent, isStandalone: true, selector: "cc-login", inputs: { title: "title", titleAccent: "titleAccent", subtitle: "subtitle", logoUrl: "logoUrl", icon: "icon", loading: "loading", errorMessage: "errorMessage", supportEmail: "supportEmail", recoverPasswordUrl: "recoverPasswordUrl", forgotPasswordLabel: "forgotPasswordLabel" }, outputs: { loginSubmit: "loginSubmit", forgotPasswordClick: "forgotPasswordClick" }, ngImport: i0, template: "<div class=\"login-container\">\r\n <div class=\"login-card\">\r\n <div class=\"login-header\">\r\n @if (logoUrl) {\r\n <img [src]=\"logoUrl\" alt=\"Logo\" class=\"logo\" />\r\n } @else if (icon) {\r\n <div class=\"logo-box\">\r\n <span nz-icon [nzType]=\"icon\" nzTheme=\"fill\"></span>\r\n </div>\r\n }\r\n <h2 class=\"title\">\r\n {{ title }}\r\n @if (titleAccent) {\r\n <span class=\"accent\">{{ titleAccent }}</span>\r\n }\r\n </h2>\r\n <p class=\"subtitle text-uppercase\">{{ subtitle }}</p>\r\n </div>\r\n\r\n @if (errorMessage) {\r\n <nz-alert nzType=\"error\" [nzMessage]=\"errorMessage\" nzShowIcon class=\"error-alert\"></nz-alert>\r\n }\r\n\r\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"submitForm()\" class=\"login-form\">\r\n <div class=\"form-group\">\r\n <cc-input formControlName=\"email\" placeholder=\"correo@ejemplo.com\" label=\"Correo Electr\u00F3nico\"\r\n type=\"email\" prefix=\"mail\" [error]=\"fieldInvalid('email')\">\r\n </cc-input>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <cc-input formControlName=\"password\" placeholder=\"********\" label=\"Contrase\u00F1a\" type=\"password\"\r\n prefix=\"lock\" [error]=\"fieldInvalid('password')\">\r\n </cc-input>\r\n </div>\r\n\r\n <div class=\"form-actions-row\">\r\n <label nz-checkbox formControlName=\"remember\">Recordarme</label>\r\n @if (recoverPasswordUrl) {\r\n <a [href]=\"recoverPasswordUrl\" class=\"forgot-password\">{{ forgotPasswordLabel }}</a>\r\n } @else {\r\n <a class=\"forgot-password\" (click)=\"forgotPasswordClick.emit()\">{{ forgotPasswordLabel }}</a>\r\n }\r\n </div>\r\n\r\n <cc-button [loading]=\"loading\" variant=\"primary\" type=\"submit\" class=\"submit-button\"\r\n [disabled]=\"loginForm.invalid || loading\">\r\n Iniciar Sesi\u00F3n\r\n </cc-button>\r\n </form>\r\n\r\n <div class=\"login-footer\">\r\n <p>\u00BFNecesitas ayuda? Contacta a <a [href]=\"'mailto:' + supportEmail\">{{ supportEmail }}</a></p>\r\n </div>\r\n </div>\r\n</div>", styles: [":host{display:block;height:100%;width:100%}.login-container{display:flex;justify-content:center;align-items:center;min-height:100vh;width:100vw;overflow:hidden;background:radial-gradient(circle at top left,#0284c7,#001529);padding:1rem;box-sizing:border-box}.login-card{width:100%;max-width:380px;padding:24px;background:#fff;border-radius:8px;box-shadow:0 12px 48px #0000004d;animation:fadeIn .5s ease-out}.login-header{text-align:center;margin-bottom:24px}.login-header .logo-box{width:40px;height:40px;background:#0284c7;color:#fff;font-size:20px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;margin-bottom:12px}.login-header .logo{max-height:60px;margin-bottom:1rem;object-fit:contain}.login-header .title{font-size:20px;font-weight:700;color:#001529;margin:0;line-height:1.2}.login-header .title .accent{color:#0284c7;font-style:italic}.login-header .subtitle{font-size:10px;letter-spacing:2px;color:#8c8c8c;margin-top:4px}.error-alert{margin-bottom:16px;border-radius:4px}.login-form{display:flex;flex-direction:column;gap:16px}.form-group{display:flex;flex-direction:column;gap:4px}.error-message{color:#ff4d4f;font-size:12px;margin-top:2px;animation:slideDown .2s ease-out}.form-actions-row{display:flex;justify-content:space-between;align-items:center;font-size:12px;margin-bottom:8px}.form-actions-row ::ng-deep .ant-checkbox-wrapper span{color:#000000d9}.form-actions-row .forgot-password{color:#0284c7;text-decoration:none;cursor:pointer}.form-actions-row .forgot-password:hover{color:#0050b3;text-decoration:underline}.submit-button{width:100%;margin-top:8px}.submit-button ::ng-deep button{width:100%;height:36px;font-size:14px;font-weight:600;border-radius:4px}.login-footer{margin-top:24px;text-align:center;color:#bfbfbf;font-size:10px}.login-footer p{margin:2px 0}.login-footer a{color:#8c8c8c;text-decoration:none}.login-footer a:hover{color:#0284c7}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CcInputComponent, selector: "cc-input", inputs: ["type", "placeholder", "label", "error", "disabled", "size", "prefix", "suffix"] }, { kind: "component", type: CcButtonComponent, selector: "cc-button", inputs: ["variant", "type", "disabled", "loading", "icon", "size"] }, { kind: "ngmodule", type: NzAlertModule }, { kind: "component", type: i2$2.NzAlertComponent, selector: "nz-alert", inputs: ["nzAction", "nzCloseText", "nzIconType", "nzMessage", "nzDescription", "nzType", "nzCloseable", "nzShowIcon", "nzBanner", "nzNoAnimation", "nzIcon"], outputs: ["nzOnClose"], exportAs: ["nzAlert"] }, { kind: "ngmodule", type: NzIconModule }, { kind: "directive", type: i3$1.NzIconDirective, selector: "nz-icon,[nz-icon]", inputs: ["nzSpin", "nzRotate", "nzType", "nzTheme", "nzTwotoneColor", "nzIconfont"], exportAs: ["nzIcon"] }, { kind: "ngmodule", type: NzCheckboxModule }, { kind: "component", type: i4.NzCheckboxComponent, selector: "[nz-checkbox]", inputs: ["nzValue", "nzAutoFocus", "nzDisabled", "nzIndeterminate", "nzChecked", "nzId", "nzName"], outputs: ["nzCheckedChange"], exportAs: ["nzCheckbox"] }] }); }
543
+ }
544
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcLoginComponent, decorators: [{
545
+ type: Component,
546
+ args: [{ selector: 'cc-login', standalone: true, imports: [
547
+ CommonModule,
548
+ ReactiveFormsModule,
549
+ CcInputComponent,
550
+ CcButtonComponent,
551
+ NzAlertModule,
552
+ NzIconModule,
553
+ NzCheckboxModule,
554
+ NzFormDirective,
555
+ NzFormControlComponent,
556
+ NzFormLabelComponent,
557
+ NzFormItemComponent
558
+ ], template: "<div class=\"login-container\">\r\n <div class=\"login-card\">\r\n <div class=\"login-header\">\r\n @if (logoUrl) {\r\n <img [src]=\"logoUrl\" alt=\"Logo\" class=\"logo\" />\r\n } @else if (icon) {\r\n <div class=\"logo-box\">\r\n <span nz-icon [nzType]=\"icon\" nzTheme=\"fill\"></span>\r\n </div>\r\n }\r\n <h2 class=\"title\">\r\n {{ title }}\r\n @if (titleAccent) {\r\n <span class=\"accent\">{{ titleAccent }}</span>\r\n }\r\n </h2>\r\n <p class=\"subtitle text-uppercase\">{{ subtitle }}</p>\r\n </div>\r\n\r\n @if (errorMessage) {\r\n <nz-alert nzType=\"error\" [nzMessage]=\"errorMessage\" nzShowIcon class=\"error-alert\"></nz-alert>\r\n }\r\n\r\n <form [formGroup]=\"loginForm\" (ngSubmit)=\"submitForm()\" class=\"login-form\">\r\n <div class=\"form-group\">\r\n <cc-input formControlName=\"email\" placeholder=\"correo@ejemplo.com\" label=\"Correo Electr\u00F3nico\"\r\n type=\"email\" prefix=\"mail\" [error]=\"fieldInvalid('email')\">\r\n </cc-input>\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <cc-input formControlName=\"password\" placeholder=\"********\" label=\"Contrase\u00F1a\" type=\"password\"\r\n prefix=\"lock\" [error]=\"fieldInvalid('password')\">\r\n </cc-input>\r\n </div>\r\n\r\n <div class=\"form-actions-row\">\r\n <label nz-checkbox formControlName=\"remember\">Recordarme</label>\r\n @if (recoverPasswordUrl) {\r\n <a [href]=\"recoverPasswordUrl\" class=\"forgot-password\">{{ forgotPasswordLabel }}</a>\r\n } @else {\r\n <a class=\"forgot-password\" (click)=\"forgotPasswordClick.emit()\">{{ forgotPasswordLabel }}</a>\r\n }\r\n </div>\r\n\r\n <cc-button [loading]=\"loading\" variant=\"primary\" type=\"submit\" class=\"submit-button\"\r\n [disabled]=\"loginForm.invalid || loading\">\r\n Iniciar Sesi\u00F3n\r\n </cc-button>\r\n </form>\r\n\r\n <div class=\"login-footer\">\r\n <p>\u00BFNecesitas ayuda? Contacta a <a [href]=\"'mailto:' + supportEmail\">{{ supportEmail }}</a></p>\r\n </div>\r\n </div>\r\n</div>", styles: [":host{display:block;height:100%;width:100%}.login-container{display:flex;justify-content:center;align-items:center;min-height:100vh;width:100vw;overflow:hidden;background:radial-gradient(circle at top left,#0284c7,#001529);padding:1rem;box-sizing:border-box}.login-card{width:100%;max-width:380px;padding:24px;background:#fff;border-radius:8px;box-shadow:0 12px 48px #0000004d;animation:fadeIn .5s ease-out}.login-header{text-align:center;margin-bottom:24px}.login-header .logo-box{width:40px;height:40px;background:#0284c7;color:#fff;font-size:20px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;margin-bottom:12px}.login-header .logo{max-height:60px;margin-bottom:1rem;object-fit:contain}.login-header .title{font-size:20px;font-weight:700;color:#001529;margin:0;line-height:1.2}.login-header .title .accent{color:#0284c7;font-style:italic}.login-header .subtitle{font-size:10px;letter-spacing:2px;color:#8c8c8c;margin-top:4px}.error-alert{margin-bottom:16px;border-radius:4px}.login-form{display:flex;flex-direction:column;gap:16px}.form-group{display:flex;flex-direction:column;gap:4px}.error-message{color:#ff4d4f;font-size:12px;margin-top:2px;animation:slideDown .2s ease-out}.form-actions-row{display:flex;justify-content:space-between;align-items:center;font-size:12px;margin-bottom:8px}.form-actions-row ::ng-deep .ant-checkbox-wrapper span{color:#000000d9}.form-actions-row .forgot-password{color:#0284c7;text-decoration:none;cursor:pointer}.form-actions-row .forgot-password:hover{color:#0050b3;text-decoration:underline}.submit-button{width:100%;margin-top:8px}.submit-button ::ng-deep button{width:100%;height:36px;font-size:14px;font-weight:600;border-radius:4px}.login-footer{margin-top:24px;text-align:center;color:#bfbfbf;font-size:10px}.login-footer p{margin:2px 0}.login-footer a{color:#8c8c8c;text-decoration:none}.login-footer a:hover{color:#0284c7}@keyframes fadeIn{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}\n"] }]
559
+ }], propDecorators: { title: [{
560
+ type: Input
561
+ }], titleAccent: [{
562
+ type: Input
563
+ }], subtitle: [{
564
+ type: Input
565
+ }], logoUrl: [{
566
+ type: Input
567
+ }], icon: [{
568
+ type: Input
569
+ }], loading: [{
570
+ type: Input
571
+ }], errorMessage: [{
572
+ type: Input
573
+ }], supportEmail: [{
574
+ type: Input
575
+ }], recoverPasswordUrl: [{
576
+ type: Input
577
+ }], forgotPasswordLabel: [{
578
+ type: Input
579
+ }], loginSubmit: [{
580
+ type: Output
581
+ }], forgotPasswordClick: [{
582
+ type: Output
583
+ }] } });
584
+
585
+ class CcContainerComponent {
586
+ constructor() {
587
+ this.fluid = false;
588
+ this.size = 'xl';
589
+ }
590
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
591
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: CcContainerComponent, isStandalone: true, selector: "cc-container", inputs: { fluid: "fluid", size: "size" }, ngImport: i0, template: "<div class=\"cc-container\" [class.cc-container-fluid]=\"fluid\" [ngClass]=\"'size-' + size\">\r\n <ng-content></ng-content>\r\n</div>", styles: [".cc-container{width:100%;margin-right:auto;margin-left:auto;padding-right:var(--space-4);padding-left:var(--space-4)}@media(min-width:768px){.cc-container{padding-right:var(--space-6);padding-left:var(--space-6)}}@media(min-width:1280px){.cc-container{padding-right:var(--space-8);padding-left:var(--space-8)}}.cc-container.cc-container-fluid{max-width:none!important}.cc-container.size-sm{max-width:640px}.cc-container.size-md{max-width:768px}.cc-container.size-lg{max-width:1024px}.cc-container.size-xl{max-width:1280px}.cc-container.size-2xl{max-width:1536px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
592
+ }
593
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcContainerComponent, decorators: [{
594
+ type: Component,
595
+ args: [{ selector: 'cc-container', standalone: true, imports: [CommonModule], template: "<div class=\"cc-container\" [class.cc-container-fluid]=\"fluid\" [ngClass]=\"'size-' + size\">\r\n <ng-content></ng-content>\r\n</div>", styles: [".cc-container{width:100%;margin-right:auto;margin-left:auto;padding-right:var(--space-4);padding-left:var(--space-4)}@media(min-width:768px){.cc-container{padding-right:var(--space-6);padding-left:var(--space-6)}}@media(min-width:1280px){.cc-container{padding-right:var(--space-8);padding-left:var(--space-8)}}.cc-container.cc-container-fluid{max-width:none!important}.cc-container.size-sm{max-width:640px}.cc-container.size-md{max-width:768px}.cc-container.size-lg{max-width:1024px}.cc-container.size-xl{max-width:1280px}.cc-container.size-2xl{max-width:1536px}\n"] }]
596
+ }], propDecorators: { fluid: [{
597
+ type: Input
598
+ }], size: [{
599
+ type: Input
600
+ }] } });
601
+
602
+ class CcStackComponent {
603
+ constructor() {
604
+ this.gap = input(4, ...(ngDevMode ? [{ debugName: "gap" }] : []));
605
+ this.align = input('stretch', ...(ngDevMode ? [{ debugName: "align" }] : []));
606
+ this.justify = input('start', ...(ngDevMode ? [{ debugName: "justify" }] : []));
607
+ }
608
+ get gapStyle() {
609
+ const g = this.gap();
610
+ return typeof g === 'number' ? `var(--space-${g})` : g;
611
+ }
612
+ get alignStyle() {
613
+ const map = { start: 'flex-start', center: 'center', end: 'flex-end', stretch: 'stretch' };
614
+ return map[this.align()];
615
+ }
616
+ get justifyStyle() {
617
+ const map = { start: 'flex-start', center: 'center', end: 'flex-end', between: 'space-between' };
618
+ const j = this.justify();
619
+ if (j === 'between')
620
+ return 'space-between';
621
+ return map[j] || 'flex-start';
622
+ }
623
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcStackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
624
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.4", type: CcStackComponent, isStandalone: true, selector: "cc-stack", inputs: { gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, justify: { classPropertyName: "justify", publicName: "justify", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.gap": "this.gapStyle", "style.align-items": "this.alignStyle", "style.justify-content": "this.justifyStyle" } }, ngImport: i0, template: "<ng-content></ng-content>", styles: [":host{display:flex;flex-direction:column;width:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
625
+ }
626
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcStackComponent, decorators: [{
627
+ type: Component,
628
+ args: [{ selector: 'cc-stack', standalone: true, imports: [CommonModule], template: "<ng-content></ng-content>", styles: [":host{display:flex;flex-direction:column;width:100%}\n"] }]
629
+ }], propDecorators: { gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], justify: [{ type: i0.Input, args: [{ isSignal: true, alias: "justify", required: false }] }], gapStyle: [{
630
+ type: HostBinding,
631
+ args: ['style.gap']
632
+ }], alignStyle: [{
633
+ type: HostBinding,
634
+ args: ['style.align-items']
635
+ }], justifyStyle: [{
636
+ type: HostBinding,
637
+ args: ['style.justify-content']
638
+ }] } });
639
+
640
+ class CcGridComponent {
641
+ constructor() {
642
+ this.cols = 1;
643
+ this.gap = 4;
644
+ }
645
+ get classes() {
646
+ return [
647
+ `cc-grid-cols-${this.cols}`,
648
+ this.colsMd ? `cc-grid-cols-md-${this.colsMd}` : '',
649
+ this.colsLg ? `cc-grid-cols-lg-${this.colsLg}` : '',
650
+ `cc-grid-gap-${this.gap}`
651
+ ].filter(Boolean).join(' ');
652
+ }
653
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
654
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: CcGridComponent, isStandalone: true, selector: "cc-grid", inputs: { cols: "cols", colsMd: "colsMd", colsLg: "colsLg", gap: "gap" }, host: { properties: { "class": "this.classes" } }, ngImport: i0, template: "<div class=\"cc-grid\">\r\n <ng-content></ng-content>\r\n</div>", styles: [".cc-grid{display:grid;width:100%}.cc-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.cc-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.cc-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.cc-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.cc-grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.cc-grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.cc-grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.cc-grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.cc-grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.cc-grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.cc-grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.cc-grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}@media(min-width:768px){.cc-grid-cols-md-1{grid-template-columns:repeat(1,minmax(0,1fr))}.cc-grid-cols-md-2{grid-template-columns:repeat(2,minmax(0,1fr))}.cc-grid-cols-md-3{grid-template-columns:repeat(3,minmax(0,1fr))}.cc-grid-cols-md-4{grid-template-columns:repeat(4,minmax(0,1fr))}.cc-grid-cols-md-5{grid-template-columns:repeat(5,minmax(0,1fr))}.cc-grid-cols-md-6{grid-template-columns:repeat(6,minmax(0,1fr))}.cc-grid-cols-md-7{grid-template-columns:repeat(7,minmax(0,1fr))}.cc-grid-cols-md-8{grid-template-columns:repeat(8,minmax(0,1fr))}.cc-grid-cols-md-9{grid-template-columns:repeat(9,minmax(0,1fr))}.cc-grid-cols-md-10{grid-template-columns:repeat(10,minmax(0,1fr))}.cc-grid-cols-md-11{grid-template-columns:repeat(11,minmax(0,1fr))}.cc-grid-cols-md-12{grid-template-columns:repeat(12,minmax(0,1fr))}}@media(min-width:1024px){.cc-grid-cols-lg-1{grid-template-columns:repeat(1,minmax(0,1fr))}.cc-grid-cols-lg-2{grid-template-columns:repeat(2,minmax(0,1fr))}.cc-grid-cols-lg-3{grid-template-columns:repeat(3,minmax(0,1fr))}.cc-grid-cols-lg-4{grid-template-columns:repeat(4,minmax(0,1fr))}.cc-grid-cols-lg-5{grid-template-columns:repeat(5,minmax(0,1fr))}.cc-grid-cols-lg-6{grid-template-columns:repeat(6,minmax(0,1fr))}.cc-grid-cols-lg-7{grid-template-columns:repeat(7,minmax(0,1fr))}.cc-grid-cols-lg-8{grid-template-columns:repeat(8,minmax(0,1fr))}.cc-grid-cols-lg-9{grid-template-columns:repeat(9,minmax(0,1fr))}.cc-grid-cols-lg-10{grid-template-columns:repeat(10,minmax(0,1fr))}.cc-grid-cols-lg-11{grid-template-columns:repeat(11,minmax(0,1fr))}.cc-grid-cols-lg-12{grid-template-columns:repeat(12,minmax(0,1fr))}}.cc-grid-gap-1{gap:var(--space-1)}.cc-grid-gap-2{gap:var(--space-2)}.cc-grid-gap-3{gap:var(--space-3)}.cc-grid-gap-4{gap:var(--space-4)}.cc-grid-gap-5{gap:var(--space-5)}.cc-grid-gap-6{gap:var(--space-6)}.cc-grid-gap-7{gap:var(--space-7)}.cc-grid-gap-8{gap:var(--space-8)}.cc-grid-gap-9{gap:var(--space-9)}.cc-grid-gap-10{gap:var(--space-10)}.cc-grid-gap-11{gap:var(--space-11)}.cc-grid-gap-12{gap:var(--space-12)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
655
+ }
656
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcGridComponent, decorators: [{
657
+ type: Component,
658
+ args: [{ selector: 'cc-grid', standalone: true, imports: [CommonModule], template: "<div class=\"cc-grid\">\r\n <ng-content></ng-content>\r\n</div>", styles: [".cc-grid{display:grid;width:100%}.cc-grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.cc-grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.cc-grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.cc-grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.cc-grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.cc-grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.cc-grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.cc-grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.cc-grid-cols-9{grid-template-columns:repeat(9,minmax(0,1fr))}.cc-grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.cc-grid-cols-11{grid-template-columns:repeat(11,minmax(0,1fr))}.cc-grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}@media(min-width:768px){.cc-grid-cols-md-1{grid-template-columns:repeat(1,minmax(0,1fr))}.cc-grid-cols-md-2{grid-template-columns:repeat(2,minmax(0,1fr))}.cc-grid-cols-md-3{grid-template-columns:repeat(3,minmax(0,1fr))}.cc-grid-cols-md-4{grid-template-columns:repeat(4,minmax(0,1fr))}.cc-grid-cols-md-5{grid-template-columns:repeat(5,minmax(0,1fr))}.cc-grid-cols-md-6{grid-template-columns:repeat(6,minmax(0,1fr))}.cc-grid-cols-md-7{grid-template-columns:repeat(7,minmax(0,1fr))}.cc-grid-cols-md-8{grid-template-columns:repeat(8,minmax(0,1fr))}.cc-grid-cols-md-9{grid-template-columns:repeat(9,minmax(0,1fr))}.cc-grid-cols-md-10{grid-template-columns:repeat(10,minmax(0,1fr))}.cc-grid-cols-md-11{grid-template-columns:repeat(11,minmax(0,1fr))}.cc-grid-cols-md-12{grid-template-columns:repeat(12,minmax(0,1fr))}}@media(min-width:1024px){.cc-grid-cols-lg-1{grid-template-columns:repeat(1,minmax(0,1fr))}.cc-grid-cols-lg-2{grid-template-columns:repeat(2,minmax(0,1fr))}.cc-grid-cols-lg-3{grid-template-columns:repeat(3,minmax(0,1fr))}.cc-grid-cols-lg-4{grid-template-columns:repeat(4,minmax(0,1fr))}.cc-grid-cols-lg-5{grid-template-columns:repeat(5,minmax(0,1fr))}.cc-grid-cols-lg-6{grid-template-columns:repeat(6,minmax(0,1fr))}.cc-grid-cols-lg-7{grid-template-columns:repeat(7,minmax(0,1fr))}.cc-grid-cols-lg-8{grid-template-columns:repeat(8,minmax(0,1fr))}.cc-grid-cols-lg-9{grid-template-columns:repeat(9,minmax(0,1fr))}.cc-grid-cols-lg-10{grid-template-columns:repeat(10,minmax(0,1fr))}.cc-grid-cols-lg-11{grid-template-columns:repeat(11,minmax(0,1fr))}.cc-grid-cols-lg-12{grid-template-columns:repeat(12,minmax(0,1fr))}}.cc-grid-gap-1{gap:var(--space-1)}.cc-grid-gap-2{gap:var(--space-2)}.cc-grid-gap-3{gap:var(--space-3)}.cc-grid-gap-4{gap:var(--space-4)}.cc-grid-gap-5{gap:var(--space-5)}.cc-grid-gap-6{gap:var(--space-6)}.cc-grid-gap-7{gap:var(--space-7)}.cc-grid-gap-8{gap:var(--space-8)}.cc-grid-gap-9{gap:var(--space-9)}.cc-grid-gap-10{gap:var(--space-10)}.cc-grid-gap-11{gap:var(--space-11)}.cc-grid-gap-12{gap:var(--space-12)}\n"] }]
659
+ }], propDecorators: { cols: [{
660
+ type: Input
661
+ }], colsMd: [{
662
+ type: Input
663
+ }], colsLg: [{
664
+ type: Input
665
+ }], gap: [{
666
+ type: Input
667
+ }], classes: [{
668
+ type: HostBinding,
669
+ args: ['class']
670
+ }] } });
671
+
672
+ class CcInlineComponent {
673
+ constructor() {
674
+ this.gap = input(4, ...(ngDevMode ? [{ debugName: "gap" }] : []));
675
+ this.align = input('center', ...(ngDevMode ? [{ debugName: "align" }] : []));
676
+ this.justify = input('start', ...(ngDevMode ? [{ debugName: "justify" }] : []));
677
+ this.wrap = input(false, ...(ngDevMode ? [{ debugName: "wrap" }] : []));
678
+ }
679
+ get gapStyle() {
680
+ const g = this.gap();
681
+ return typeof g === 'number' ? `var(--space-${g})` : g;
682
+ }
683
+ get alignStyle() {
684
+ const map = { start: 'flex-start', center: 'center', end: 'flex-end', baseline: 'baseline' };
685
+ return map[this.align()];
686
+ }
687
+ get justifyStyle() {
688
+ const map = { start: 'flex-start', center: 'center', end: 'flex-end', between: 'space-between', around: 'space-around' };
689
+ return map[this.justify()];
690
+ }
691
+ get wrapStyle() {
692
+ return this.wrap() ? 'wrap' : 'nowrap';
693
+ }
694
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcInlineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
695
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.1.4", type: CcInlineComponent, isStandalone: true, selector: "cc-inline", inputs: { gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, justify: { classPropertyName: "justify", publicName: "justify", isSignal: true, isRequired: false, transformFunction: null }, wrap: { classPropertyName: "wrap", publicName: "wrap", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.--inline-gap": "this.gapStyle", "style.--inline-align": "this.alignStyle", "style.--inline-justify": "this.justifyStyle", "style.--inline-wrap": "this.wrapStyle" } }, ngImport: i0, template: '<ng-content></ng-content>', isInline: true, styles: [":host{display:flex;flex-direction:row;flex-wrap:var(--inline-wrap, nowrap);align-items:var(--inline-align, center);justify-content:var(--inline-justify, flex-start);gap:var(--inline-gap, var(--space-4))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
696
+ }
697
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcInlineComponent, decorators: [{
698
+ type: Component,
699
+ args: [{ selector: 'cc-inline', standalone: true, imports: [CommonModule], template: '<ng-content></ng-content>', styles: [":host{display:flex;flex-direction:row;flex-wrap:var(--inline-wrap, nowrap);align-items:var(--inline-align, center);justify-content:var(--inline-justify, flex-start);gap:var(--inline-gap, var(--space-4))}\n"] }]
700
+ }], propDecorators: { gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }], align: [{ type: i0.Input, args: [{ isSignal: true, alias: "align", required: false }] }], justify: [{ type: i0.Input, args: [{ isSignal: true, alias: "justify", required: false }] }], wrap: [{ type: i0.Input, args: [{ isSignal: true, alias: "wrap", required: false }] }], gapStyle: [{
701
+ type: HostBinding,
702
+ args: ['style.--inline-gap']
703
+ }], alignStyle: [{
704
+ type: HostBinding,
705
+ args: ['style.--inline-align']
706
+ }], justifyStyle: [{
707
+ type: HostBinding,
708
+ args: ['style.--inline-justify']
709
+ }], wrapStyle: [{
710
+ type: HostBinding,
711
+ args: ['style.--inline-wrap']
712
+ }] } });
713
+
714
+ class CcAdminLayoutComponent {
715
+ constructor() {
716
+ this.menuItems = [];
717
+ this.notificationsCount = 0;
718
+ this.isSidebarCollapsed = false;
719
+ this.isMobileMenuOpen = false;
720
+ }
721
+ toggleSidebar() {
722
+ this.isSidebarCollapsed = !this.isSidebarCollapsed;
723
+ }
724
+ toggleMobileMenu() {
725
+ this.isMobileMenuOpen = !this.isMobileMenuOpen;
726
+ }
727
+ onNavItemClick(item) {
728
+ if (this.isMobileMenuOpen) {
729
+ this.isMobileMenuOpen = false;
730
+ }
731
+ }
732
+ onUserAction(action) {
733
+ console.log('User action:', action);
734
+ }
735
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcAdminLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
736
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: CcAdminLayoutComponent, isStandalone: true, selector: "cc-admin-layout", inputs: { user: "user", menuItems: "menuItems", notificationsCount: "notificationsCount" }, ngImport: i0, template: "<div class=\"cc-admin-layout\" [class.sidebar-collapsed]=\"isSidebarCollapsed\">\r\n\r\n <cc-sidebar class=\"cc-admin-sidebar\" [class.mobile-open]=\"isMobileMenuOpen\" [menuItems]=\"menuItems\"\r\n [collapsed]=\"isSidebarCollapsed\" (toggleCollapse)=\"toggleSidebar()\" (navigate)=\"onNavItemClick($event)\">\r\n </cc-sidebar>\r\n\r\n <div class=\"cc-admin-main\">\r\n <cc-header [user]=\"user\" [notificationsCount]=\"notificationsCount\" (toggleSidebar)=\"toggleMobileMenu()\"\r\n (userAction)=\"onUserAction($event)\">\r\n </cc-header>\r\n\r\n <main class=\"cc-admin-content\">\r\n <div class=\"cc-admin-content-container\">\r\n <ng-content></ng-content>\r\n </div>\r\n </main>\r\n </div>\r\n\r\n <!-- Overlay para m\u00F3vil -->\r\n <div class=\"cc-admin-overlay\" *ngIf=\"isMobileMenuOpen\" (click)=\"isMobileMenuOpen = false\"></div>\r\n</div>", styles: [".cc-admin-layout{display:flex;min-height:100vh;background-color:var(--color-bg-secondary);--sidebar-width: 280px;--sidebar-collapsed-width: 80px}.cc-admin-layout.sidebar-collapsed{--sidebar-width: var(--sidebar-collapsed-width)}.cc-admin-sidebar{position:fixed;inset-y:0;left:0;z-index:40;width:var(--sidebar-width);transition:width .3s cubic-bezier(.4,0,.2,1);box-shadow:4px 0 24px #0000000d}.cc-admin-sidebar.mobile-open{display:block;box-shadow:var(--shadow-xl)}.cc-admin-main{flex:1;display:flex;flex-direction:column;min-width:0;padding-left:0;transition:padding-left .3s cubic-bezier(.4,0,.2,1)}@media(min-width:1024px){.cc-admin-main{padding-left:var(--sidebar-width)}}.cc-admin-content{flex:1;padding:var(--space-6) var(--space-4);background-color:var(--color-bg-secondary);min-height:calc(100vh - var(--header-height))}@media(min-width:1024px){.cc-admin-content{padding:var(--space-8) var(--space-6)}}.cc-admin-content-container{max-width:1280px;margin:0 auto;width:100%}.cc-admin-overlay{position:fixed;inset:0;background-color:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:30}@media(min-width:1024px){.cc-admin-overlay{display:none}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CcHeaderComponent, selector: "cc-header", inputs: ["user", "notificationsCount", "showMenuButton", "hasLogoContent"], outputs: ["toggleSidebar", "userClick", "notificationClick", "userAction"] }, { kind: "component", type: CcSidebarComponent, selector: "cc-sidebar", inputs: ["menuItems", "collapsed", "activeRoute"], outputs: ["navigate", "toggleCollapse"] }] }); }
737
+ }
738
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcAdminLayoutComponent, decorators: [{
739
+ type: Component,
740
+ args: [{ selector: 'cc-admin-layout', standalone: true, imports: [CommonModule, CcHeaderComponent, CcSidebarComponent, RouterOutlet], template: "<div class=\"cc-admin-layout\" [class.sidebar-collapsed]=\"isSidebarCollapsed\">\r\n\r\n <cc-sidebar class=\"cc-admin-sidebar\" [class.mobile-open]=\"isMobileMenuOpen\" [menuItems]=\"menuItems\"\r\n [collapsed]=\"isSidebarCollapsed\" (toggleCollapse)=\"toggleSidebar()\" (navigate)=\"onNavItemClick($event)\">\r\n </cc-sidebar>\r\n\r\n <div class=\"cc-admin-main\">\r\n <cc-header [user]=\"user\" [notificationsCount]=\"notificationsCount\" (toggleSidebar)=\"toggleMobileMenu()\"\r\n (userAction)=\"onUserAction($event)\">\r\n </cc-header>\r\n\r\n <main class=\"cc-admin-content\">\r\n <div class=\"cc-admin-content-container\">\r\n <ng-content></ng-content>\r\n </div>\r\n </main>\r\n </div>\r\n\r\n <!-- Overlay para m\u00F3vil -->\r\n <div class=\"cc-admin-overlay\" *ngIf=\"isMobileMenuOpen\" (click)=\"isMobileMenuOpen = false\"></div>\r\n</div>", styles: [".cc-admin-layout{display:flex;min-height:100vh;background-color:var(--color-bg-secondary);--sidebar-width: 280px;--sidebar-collapsed-width: 80px}.cc-admin-layout.sidebar-collapsed{--sidebar-width: var(--sidebar-collapsed-width)}.cc-admin-sidebar{position:fixed;inset-y:0;left:0;z-index:40;width:var(--sidebar-width);transition:width .3s cubic-bezier(.4,0,.2,1);box-shadow:4px 0 24px #0000000d}.cc-admin-sidebar.mobile-open{display:block;box-shadow:var(--shadow-xl)}.cc-admin-main{flex:1;display:flex;flex-direction:column;min-width:0;padding-left:0;transition:padding-left .3s cubic-bezier(.4,0,.2,1)}@media(min-width:1024px){.cc-admin-main{padding-left:var(--sidebar-width)}}.cc-admin-content{flex:1;padding:var(--space-6) var(--space-4);background-color:var(--color-bg-secondary);min-height:calc(100vh - var(--header-height))}@media(min-width:1024px){.cc-admin-content{padding:var(--space-8) var(--space-6)}}.cc-admin-content-container{max-width:1280px;margin:0 auto;width:100%}.cc-admin-overlay{position:fixed;inset:0;background-color:#00000080;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:30}@media(min-width:1024px){.cc-admin-overlay{display:none}}\n"] }]
741
+ }], propDecorators: { user: [{
742
+ type: Input
743
+ }], menuItems: [{
744
+ type: Input
745
+ }], notificationsCount: [{
746
+ type: Input
747
+ }] } });
748
+
749
+ class CcAuthLayoutComponent {
750
+ constructor() {
751
+ this.backgroundType = 'gradient';
752
+ }
753
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcAuthLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
754
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: CcAuthLayoutComponent, isStandalone: true, selector: "cc-auth-layout", inputs: { backgroundType: "backgroundType" }, ngImport: i0, template: "<div class=\"cc-auth-layout\" [ngClass]=\"'bg-' + backgroundType\">\r\n <div class=\"cc-auth-container\">\r\n <div class=\"cc-auth-card\">\r\n <div class=\"cc-auth-logo\">\r\n <!-- Espacio para logo -->\r\n <div class=\"cc-auth-logo-placeholder\">CERCA</div>\r\n </div>\r\n\r\n <div class=\"cc-auth-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".cc-auth-layout{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:var(--space-4)}.cc-auth-layout.bg-gradient{background:radial-gradient(circle at top left,var(--color-brand-900),var(--neutral-900))}.cc-auth-layout.bg-simple{background-color:var(--color-bg-secondary)}.cc-auth-container{width:100%;max-width:440px}.cc-auth-card{background-color:var(--color-bg-primary);border:1px solid var(--color-border-subtle);border-radius:var(--radius-2xl);padding:var(--space-8);box-shadow:var(--shadow-2xl)}.cc-auth-logo{display:flex;justify-content:center;margin-bottom:var(--space-8)}.cc-auth-logo .cc-auth-logo-placeholder{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-brand-600);letter-spacing:-.05em}.cc-auth-content{display:flex;flex-direction:column;gap:var(--space-6)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
755
+ }
756
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcAuthLayoutComponent, decorators: [{
757
+ type: Component,
758
+ args: [{ selector: 'cc-auth-layout', standalone: true, imports: [CommonModule], template: "<div class=\"cc-auth-layout\" [ngClass]=\"'bg-' + backgroundType\">\r\n <div class=\"cc-auth-container\">\r\n <div class=\"cc-auth-card\">\r\n <div class=\"cc-auth-logo\">\r\n <!-- Espacio para logo -->\r\n <div class=\"cc-auth-logo-placeholder\">CERCA</div>\r\n </div>\r\n\r\n <div class=\"cc-auth-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".cc-auth-layout{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:var(--space-4)}.cc-auth-layout.bg-gradient{background:radial-gradient(circle at top left,var(--color-brand-900),var(--neutral-900))}.cc-auth-layout.bg-simple{background-color:var(--color-bg-secondary)}.cc-auth-container{width:100%;max-width:440px}.cc-auth-card{background-color:var(--color-bg-primary);border:1px solid var(--color-border-subtle);border-radius:var(--radius-2xl);padding:var(--space-8);box-shadow:var(--shadow-2xl)}.cc-auth-logo{display:flex;justify-content:center;margin-bottom:var(--space-8)}.cc-auth-logo .cc-auth-logo-placeholder{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-brand-600);letter-spacing:-.05em}.cc-auth-content{display:flex;flex-direction:column;gap:var(--space-6)}\n"] }]
759
+ }], propDecorators: { backgroundType: [{
760
+ type: Input
761
+ }] } });
762
+
763
+ class CcDashboardTemplateComponent {
764
+ constructor() {
765
+ this.title = 'Escritorio';
766
+ }
767
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcDashboardTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
768
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: CcDashboardTemplateComponent, isStandalone: true, selector: "cc-dashboard-template", inputs: { title: "title", subtitle: "subtitle" }, ngImport: i0, template: "<div class=\"cc-dashboard-template\">\r\n <header class=\"cc-dashboard-header\">\r\n <cc-stack [gap]=\"1\">\r\n <h1 class=\"cc-dashboard-title\">{{ title }}</h1>\r\n <p class=\"cc-dashboard-subtitle\" *ngIf=\"subtitle\">{{ subtitle }}</p>\r\n </cc-stack>\r\n <div class=\"cc-dashboard-actions\">\r\n <ng-content select=\"[actions]\"></ng-content>\r\n </div>\r\n </header>\r\n\r\n <cc-grid [cols]=\"1\" [colsMd]=\"2\" [colsLg]=\"4\" [gap]=\"6\" class=\"cc-dashboard-metrics\">\r\n <ng-content select=\"[metrics]\"></ng-content>\r\n </cc-grid>\r\n\r\n <cc-grid [cols]=\"1\" [colsLg]=\"3\" [gap]=\"6\" class=\"cc-dashboard-main\">\r\n <div class=\"cc-dashboard-primary-content\">\r\n <ng-content select=\"[main-content]\"></ng-content>\r\n </div>\r\n <aside class=\"cc-dashboard-secondary-content\">\r\n <ng-content select=\"[sidebar-content]\"></ng-content>\r\n </aside>\r\n </cc-grid>\r\n</div>", styles: [".cc-dashboard-template{display:flex;flex-direction:column;gap:var(--space-8)}.cc-dashboard-header{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-4)}.cc-dashboard-title{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);line-height:1}.cc-dashboard-subtitle{color:var(--color-text-muted);font-size:var(--font-size-md)}.cc-dashboard-metrics{margin-bottom:var(--space-4)}@media(min-width:1024px){.cc-dashboard-primary-content{grid-column:span 2}}.cc-dashboard-secondary-content{display:flex;flex-direction:column;gap:var(--space-6)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CcGridComponent, selector: "cc-grid", inputs: ["cols", "colsMd", "colsLg", "gap"] }, { kind: "component", type: CcStackComponent, selector: "cc-stack", inputs: ["gap", "align", "justify"] }] }); }
769
+ }
770
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcDashboardTemplateComponent, decorators: [{
771
+ type: Component,
772
+ args: [{ selector: 'cc-dashboard-template', standalone: true, imports: [CommonModule, CcGridComponent, CcStackComponent], template: "<div class=\"cc-dashboard-template\">\r\n <header class=\"cc-dashboard-header\">\r\n <cc-stack [gap]=\"1\">\r\n <h1 class=\"cc-dashboard-title\">{{ title }}</h1>\r\n <p class=\"cc-dashboard-subtitle\" *ngIf=\"subtitle\">{{ subtitle }}</p>\r\n </cc-stack>\r\n <div class=\"cc-dashboard-actions\">\r\n <ng-content select=\"[actions]\"></ng-content>\r\n </div>\r\n </header>\r\n\r\n <cc-grid [cols]=\"1\" [colsMd]=\"2\" [colsLg]=\"4\" [gap]=\"6\" class=\"cc-dashboard-metrics\">\r\n <ng-content select=\"[metrics]\"></ng-content>\r\n </cc-grid>\r\n\r\n <cc-grid [cols]=\"1\" [colsLg]=\"3\" [gap]=\"6\" class=\"cc-dashboard-main\">\r\n <div class=\"cc-dashboard-primary-content\">\r\n <ng-content select=\"[main-content]\"></ng-content>\r\n </div>\r\n <aside class=\"cc-dashboard-secondary-content\">\r\n <ng-content select=\"[sidebar-content]\"></ng-content>\r\n </aside>\r\n </cc-grid>\r\n</div>", styles: [".cc-dashboard-template{display:flex;flex-direction:column;gap:var(--space-8)}.cc-dashboard-header{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-4)}.cc-dashboard-title{font-size:var(--font-size-3xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);line-height:1}.cc-dashboard-subtitle{color:var(--color-text-muted);font-size:var(--font-size-md)}.cc-dashboard-metrics{margin-bottom:var(--space-4)}@media(min-width:1024px){.cc-dashboard-primary-content{grid-column:span 2}}.cc-dashboard-secondary-content{display:flex;flex-direction:column;gap:var(--space-6)}\n"] }]
773
+ }], propDecorators: { title: [{
774
+ type: Input
775
+ }], subtitle: [{
776
+ type: Input
777
+ }] } });
778
+
779
+ class CcListPageTemplateComponent {
780
+ constructor() {
781
+ this.title = '';
782
+ this.hasFilters = true; // Added missing property
783
+ }
784
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcListPageTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
785
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: CcListPageTemplateComponent, isStandalone: true, selector: "cc-list-page-template", inputs: { title: "title", description: "description", hasFilters: "hasFilters" }, queries: [{ propertyName: "filtersTemplate", first: true, predicate: ["filters"], descendants: true }], ngImport: i0, template: "<div class=\"cc-list-page\">\r\n <header class=\"cc-page-header\">\r\n <cc-stack [gap]=\"1\">\r\n <h1 class=\"cc-page-title\">{{ title }}</h1>\r\n <p class=\"cc-page-description\" *ngIf=\"description\">{{ description }}</p>\r\n </cc-stack>\r\n <div class=\"cc-page-actions\">\r\n <ng-content select=\"[actions]\"></ng-content>\r\n </div>\r\n </header>\r\n\r\n <section class=\"cc-page-filters\" *ngIf=\"hasFilters\">\r\n <ng-content select=\"[filters]\"></ng-content>\r\n </section>\r\n\r\n <main class=\"cc-page-main\">\r\n <ng-content select=\"[table]\"></ng-content>\r\n </main>\r\n\r\n <footer class=\"cc-page-footer\">\r\n <ng-content select=\"[pagination]\"></ng-content>\r\n </footer>\r\n</div>", styles: [".cc-list-page{display:flex;flex-direction:column;gap:var(--space-6)}.cc-page-header{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-4);margin-bottom:var(--space-2)}.cc-page-title{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);line-height:1.2}.cc-page-description{color:var(--color-text-muted);font-size:var(--font-size-sm)}.cc-page-filters{background-color:var(--color-bg-primary);border:1px solid var(--color-border-subtle);border-radius:var(--radius-xl);padding:var(--space-4)}.cc-page-main{background-color:var(--color-bg-primary);border:1px solid var(--color-border-subtle);border-radius:var(--radius-xl);overflow:hidden;box-shadow:var(--shadow-sm)}.cc-page-footer{display:flex;justify-content:flex-end;margin-top:var(--space-2)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CcStackComponent, selector: "cc-stack", inputs: ["gap", "align", "justify"] }] }); }
786
+ }
787
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcListPageTemplateComponent, decorators: [{
788
+ type: Component,
789
+ args: [{ selector: 'cc-list-page-template', standalone: true, imports: [CommonModule, CcStackComponent], template: "<div class=\"cc-list-page\">\r\n <header class=\"cc-page-header\">\r\n <cc-stack [gap]=\"1\">\r\n <h1 class=\"cc-page-title\">{{ title }}</h1>\r\n <p class=\"cc-page-description\" *ngIf=\"description\">{{ description }}</p>\r\n </cc-stack>\r\n <div class=\"cc-page-actions\">\r\n <ng-content select=\"[actions]\"></ng-content>\r\n </div>\r\n </header>\r\n\r\n <section class=\"cc-page-filters\" *ngIf=\"hasFilters\">\r\n <ng-content select=\"[filters]\"></ng-content>\r\n </section>\r\n\r\n <main class=\"cc-page-main\">\r\n <ng-content select=\"[table]\"></ng-content>\r\n </main>\r\n\r\n <footer class=\"cc-page-footer\">\r\n <ng-content select=\"[pagination]\"></ng-content>\r\n </footer>\r\n</div>", styles: [".cc-list-page{display:flex;flex-direction:column;gap:var(--space-6)}.cc-page-header{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-4);margin-bottom:var(--space-2)}.cc-page-title{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary);line-height:1.2}.cc-page-description{color:var(--color-text-muted);font-size:var(--font-size-sm)}.cc-page-filters{background-color:var(--color-bg-primary);border:1px solid var(--color-border-subtle);border-radius:var(--radius-xl);padding:var(--space-4)}.cc-page-main{background-color:var(--color-bg-primary);border:1px solid var(--color-border-subtle);border-radius:var(--radius-xl);overflow:hidden;box-shadow:var(--shadow-sm)}.cc-page-footer{display:flex;justify-content:flex-end;margin-top:var(--space-2)}\n"] }]
790
+ }], propDecorators: { title: [{
791
+ type: Input
792
+ }], description: [{
793
+ type: Input
794
+ }], hasFilters: [{
795
+ type: Input
796
+ }], filtersTemplate: [{
797
+ type: ContentChild,
798
+ args: ['filters']
799
+ }] } });
800
+
801
+ class CcFormPageTemplateComponent {
802
+ constructor() {
803
+ this.title = '';
804
+ this.loading = false;
805
+ }
806
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcFormPageTemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
807
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: CcFormPageTemplateComponent, isStandalone: true, selector: "cc-form-page-template", inputs: { title: "title", backUrl: "backUrl", loading: "loading" }, ngImport: i0, template: "<div class=\"cc-form-page\">\r\n <header class=\"cc-form-page-header\">\r\n <cc-stack [gap]=\"1\">\r\n <div class=\"cc-form-page-nav\">\r\n <ng-content select=\"[back-button]\"></ng-content>\r\n </div>\r\n <h1 class=\"cc-form-page-title\">{{ title }}</h1>\r\n </cc-stack>\r\n <div class=\"cc-form-page-actions-header\">\r\n <ng-content select=\"[header-actions]\"></ng-content>\r\n </div>\r\n </header>\r\n\r\n <main class=\"cc-form-page-main\">\r\n <div class=\"cc-form-page-card\">\r\n <ng-content select=\"[form-content]\"></ng-content>\r\n </div>\r\n </main>\r\n\r\n <footer class=\"cc-form-page-footer\">\r\n <ng-content select=\"[form-actions]\"></ng-content>\r\n </footer>\r\n\r\n <div class=\"cc-form-page-loading-overlay\" *ngIf=\"loading\">\r\n <div class=\"cc-form-page-spinner\"></div>\r\n </div>\r\n</div>", styles: [".cc-form-page{display:flex;flex-direction:column;gap:var(--space-6);position:relative;min-height:100%}.cc-form-page-header{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-4);margin-bottom:var(--space-2)}.cc-form-page-title{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary)}.cc-form-page-main{flex:1}.cc-form-page-card{background-color:var(--color-bg-primary);border:1px solid var(--color-border-subtle);border-radius:var(--radius-2xl);padding:var(--space-6);box-shadow:var(--shadow-sm)}@media(min-width:768px){.cc-form-page-card{padding:var(--space-8)}}.cc-form-page-footer{background-color:var(--color-bg-primary);border-top:1px solid var(--color-border-subtle);padding:var(--space-4) var(--space-6);margin:0 calc(var(--space-6) * -1);display:flex;justify-content:flex-end;gap:var(--space-4);border-bottom-left-radius:var(--radius-2xl);border-bottom-right-radius:var(--radius-2xl)}.cc-form-page-loading-overlay{position:absolute;inset:0;background-color:#ffffffbf;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:center;justify-content:center;z-index:50;border-radius:var(--radius-2xl)}.cc-form-page-spinner{width:40px;height:40px;border:3px solid var(--color-border-subtle);border-top-color:var(--color-brand-600);border-radius:50%;animation:cc-spin .8s linear infinite}@keyframes cc-spin{to{transform:rotate(360deg)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CcStackComponent, selector: "cc-stack", inputs: ["gap", "align", "justify"] }] }); }
808
+ }
809
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: CcFormPageTemplateComponent, decorators: [{
810
+ type: Component,
811
+ args: [{ selector: 'cc-form-page-template', standalone: true, imports: [CommonModule, CcStackComponent], template: "<div class=\"cc-form-page\">\r\n <header class=\"cc-form-page-header\">\r\n <cc-stack [gap]=\"1\">\r\n <div class=\"cc-form-page-nav\">\r\n <ng-content select=\"[back-button]\"></ng-content>\r\n </div>\r\n <h1 class=\"cc-form-page-title\">{{ title }}</h1>\r\n </cc-stack>\r\n <div class=\"cc-form-page-actions-header\">\r\n <ng-content select=\"[header-actions]\"></ng-content>\r\n </div>\r\n </header>\r\n\r\n <main class=\"cc-form-page-main\">\r\n <div class=\"cc-form-page-card\">\r\n <ng-content select=\"[form-content]\"></ng-content>\r\n </div>\r\n </main>\r\n\r\n <footer class=\"cc-form-page-footer\">\r\n <ng-content select=\"[form-actions]\"></ng-content>\r\n </footer>\r\n\r\n <div class=\"cc-form-page-loading-overlay\" *ngIf=\"loading\">\r\n <div class=\"cc-form-page-spinner\"></div>\r\n </div>\r\n</div>", styles: [".cc-form-page{display:flex;flex-direction:column;gap:var(--space-6);position:relative;min-height:100%}.cc-form-page-header{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-4);margin-bottom:var(--space-2)}.cc-form-page-title{font-size:var(--font-size-2xl);font-weight:var(--font-weight-bold);color:var(--color-text-primary)}.cc-form-page-main{flex:1}.cc-form-page-card{background-color:var(--color-bg-primary);border:1px solid var(--color-border-subtle);border-radius:var(--radius-2xl);padding:var(--space-6);box-shadow:var(--shadow-sm)}@media(min-width:768px){.cc-form-page-card{padding:var(--space-8)}}.cc-form-page-footer{background-color:var(--color-bg-primary);border-top:1px solid var(--color-border-subtle);padding:var(--space-4) var(--space-6);margin:0 calc(var(--space-6) * -1);display:flex;justify-content:flex-end;gap:var(--space-4);border-bottom-left-radius:var(--radius-2xl);border-bottom-right-radius:var(--radius-2xl)}.cc-form-page-loading-overlay{position:absolute;inset:0;background-color:#ffffffbf;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:flex;align-items:center;justify-content:center;z-index:50;border-radius:var(--radius-2xl)}.cc-form-page-spinner{width:40px;height:40px;border:3px solid var(--color-border-subtle);border-top-color:var(--color-brand-600);border-radius:50%;animation:cc-spin .8s linear infinite}@keyframes cc-spin{to{transform:rotate(360deg)}}\n"] }]
812
+ }], propDecorators: { title: [{
813
+ type: Input
814
+ }], backUrl: [{
815
+ type: Input
816
+ }], loading: [{
817
+ type: Input
818
+ }] } });
819
+
820
+ // Atoms
821
+
822
+ /*
823
+ * Public API Surface of @cerca/design-system
824
+ */
825
+
826
+ /**
827
+ * Generated bundle index. Do not edit.
828
+ */
829
+
830
+ export { CcAdminLayoutComponent, CcAuthLayoutComponent, CcBadgeComponent, CcButtonComponent, CcCardComponent, CcContainerComponent, CcDashboardTemplateComponent, CcDataTableComponent, CcFormFieldComponent, CcFormPageTemplateComponent, CcGridComponent, CcHeaderComponent, CcIconComponent, CcInlineComponent, CcInputComponent, CcLabelComponent, CcListPageTemplateComponent, CcLoginComponent, CcModalComponent, CcSearchBarComponent, CcSelectComponent, CcSidebarComponent, CcStackComponent };
831
+ //# sourceMappingURL=cerca-design-system.mjs.map