@cerca/design-system 1.0.2 → 1.0.4
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.
- package/fesm2022/cerca-design-system.mjs +337 -201
- package/fesm2022/cerca-design-system.mjs.map +1 -1
- package/package.json +1 -1
- package/src/lib/styles/_index.scss +7 -0
- package/src/lib/styles/_overrides.scss +4 -0
- package/src/lib/styles/_theme.scss +87 -0
- package/types/cerca-design-system.d.ts +32 -10
|
@@ -224,6 +224,7 @@ class AdInputComponent {
|
|
|
224
224
|
size = input('small', ...(ngDevMode ? [{ debugName: "size" }] : []));
|
|
225
225
|
prefix = input(undefined, ...(ngDevMode ? [{ debugName: "prefix" }] : []));
|
|
226
226
|
suffix = input(undefined, ...(ngDevMode ? [{ debugName: "suffix" }] : []));
|
|
227
|
+
mask = input(undefined, ...(ngDevMode ? [{ debugName: "mask" }] : []));
|
|
227
228
|
value = '';
|
|
228
229
|
passwordVisible = signal(false, ...(ngDevMode ? [{ debugName: "passwordVisible" }] : []));
|
|
229
230
|
onChange = () => { };
|
|
@@ -234,19 +235,61 @@ class AdInputComponent {
|
|
|
234
235
|
}
|
|
235
236
|
return this.type();
|
|
236
237
|
}, ...(ngDevMode ? [{ debugName: "inputType" }] : []));
|
|
238
|
+
isIcon(name) {
|
|
239
|
+
if (!name)
|
|
240
|
+
return false;
|
|
241
|
+
// Simple heuristic: if it contains '$' or is just one character, it's likely text
|
|
242
|
+
// In our system, icon names are usually strings like 'user', 'lock', etc.
|
|
243
|
+
// We can also check against a known set of icons if needed, but for now:
|
|
244
|
+
const knownIcons = ['user', 'lock', 'eye', 'plus', 'download', 'eye-invisible', 'email', 'person', 'search', 'logout', 'menu'];
|
|
245
|
+
return knownIcons.includes(name);
|
|
246
|
+
}
|
|
237
247
|
onInputChange(event) {
|
|
238
248
|
const target = event.target;
|
|
239
|
-
|
|
240
|
-
this.
|
|
249
|
+
let val = target.value;
|
|
250
|
+
if (this.mask() === 'currency') {
|
|
251
|
+
// 1. Remove all non-numeric characters except the decimal separator (comma)
|
|
252
|
+
let cleanValue = val.replace(/[^\d,]/g, '');
|
|
253
|
+
// 2. Handle multiple commas (keep only the first one)
|
|
254
|
+
const parts = cleanValue.split(',');
|
|
255
|
+
if (parts.length > 2) {
|
|
256
|
+
cleanValue = parts[0] + ',' + parts.slice(1).join('');
|
|
257
|
+
}
|
|
258
|
+
// 3. Format for display (Thousand separators as dots)
|
|
259
|
+
const formatted = this.formatCurrencyDisplay(cleanValue);
|
|
260
|
+
target.value = formatted;
|
|
261
|
+
this.value = formatted;
|
|
262
|
+
// 4. Update the model with numeric value
|
|
263
|
+
const numericValue = parseFloat(cleanValue.replace(',', '.'));
|
|
264
|
+
this.onChange(isNaN(numericValue) ? null : numericValue);
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
this.value = val;
|
|
268
|
+
this.onChange(this.value);
|
|
269
|
+
}
|
|
241
270
|
this.onTouched();
|
|
242
271
|
}
|
|
272
|
+
formatCurrencyDisplay(value) {
|
|
273
|
+
if (!value)
|
|
274
|
+
return '';
|
|
275
|
+
const parts = value.split(',');
|
|
276
|
+
// Add dots every 3 digits
|
|
277
|
+
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, '.');
|
|
278
|
+
return parts.join(',');
|
|
279
|
+
}
|
|
243
280
|
togglePasswordVisibility() {
|
|
244
281
|
if (this.type() === 'password') {
|
|
245
282
|
this.passwordVisible.update(visible => !visible);
|
|
246
283
|
}
|
|
247
284
|
}
|
|
248
285
|
writeValue(value) {
|
|
249
|
-
this.value
|
|
286
|
+
if (this.mask() === 'currency' && value !== undefined && value !== null) {
|
|
287
|
+
const stringValue = value.toString().replace('.', ',');
|
|
288
|
+
this.value = this.formatCurrencyDisplay(stringValue);
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
this.value = value || '';
|
|
292
|
+
}
|
|
250
293
|
}
|
|
251
294
|
registerOnChange(fn) {
|
|
252
295
|
this.onChange = fn;
|
|
@@ -258,13 +301,13 @@ class AdInputComponent {
|
|
|
258
301
|
this._disabled.set(isDisabled);
|
|
259
302
|
}
|
|
260
303
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AdInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
261
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: AdInputComponent, isStandalone: true, selector: "ad-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 }, rows: { classPropertyName: "rows", publicName: "rows", 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: [
|
|
304
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: AdInputComponent, isStandalone: true, selector: "ad-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 }, rows: { classPropertyName: "rows", publicName: "rows", 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 }, mask: { classPropertyName: "mask", publicName: "mask", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
262
305
|
{
|
|
263
306
|
provide: NG_VALUE_ACCESSOR,
|
|
264
307
|
useExisting: forwardRef(() => AdInputComponent),
|
|
265
308
|
multi: true
|
|
266
309
|
}
|
|
267
|
-
], ngImport: i0, template: "@if (label()) {\r\n<label class=\"block text-sm font-medium leading-6 text-slate-900 mb-2\">{{ label() }}</label>\r\n}\r\n\r\n<div class=\"flex items-center w-full rounded-md border border-slate-300 bg-white px-3 py-1.5 shadow-sm transition-all focus-within:border-cerca-primary\"\r\n [class.bg-slate-50]=\"disabled\" [class.text-slate-500]=\"disabled\" [class.cursor-not-allowed]=\"disabled\"\r\n [class.border-cerca-alert]=\"error()\" [class.text-cerca-alert-text]=\"error()\"\r\n [class.focus-within:border-cerca-alert]=\"error()\">\r\n\r\n @if (prefix()) {\r\n <span class=\"mr-2 flex items-center\" [class.text-slate-500]=\"!error()\"
|
|
310
|
+
], ngImport: i0, template: "@if (label()) {\r\n<label class=\"block text-sm font-medium leading-6 text-slate-900 mb-2\">{{ label() }}</label>\r\n}\r\n\r\n<div class=\"flex items-center w-full rounded-md border border-slate-300 bg-white px-3 py-1.5 shadow-sm transition-all focus-within:border-cerca-primary\"\r\n [class.bg-slate-50]=\"disabled\" [class.text-slate-500]=\"disabled\" [class.cursor-not-allowed]=\"disabled\"\r\n [class.border-cerca-alert]=\"error()\" [class.text-cerca-alert-text]=\"error()\"\r\n [class.focus-within:border-cerca-alert]=\"error()\">\r\n\r\n @if (prefix()) {\r\n <span class=\"mr-2 flex items-center whitespace-nowrap\" [class.text-slate-500]=\"!error()\"\r\n [class.text-cerca-alert-text]=\"error()\">\r\n @if (isIcon(prefix())) {\r\n <ad-icon [name]=\"prefix()!\" size=\"sm\"></ad-icon>\r\n } @else {\r\n <span class=\"text-sm font-medium\">{{ prefix() }}</span>\r\n }\r\n </span>\r\n }\r\n\r\n @if (type() === 'textarea') {\r\n <textarea [rows]=\"rows()\" [placeholder]=\"placeholder()\" [disabled]=\"disabled\" [(ngModel)]=\"value\"\r\n (ngModelChange)=\"onChange($event)\" (blur)=\"onTouched()\"\r\n class=\"block w-full border-0 p-0 text-slate-900 placeholder:text-slate-400 focus:ring-0 outline-none sm:text-sm sm:leading-6 bg-transparent disabled:cursor-not-allowed resize-none\"></textarea>\r\n } @else {\r\n <input [type]=\"inputType()\" [placeholder]=\"placeholder()\" [disabled]=\"disabled\" [value]=\"value\"\r\n (input)=\"onInputChange($event)\" (blur)=\"onTouched()\"\r\n class=\"block w-full border-0 p-0 text-slate-900 placeholder:text-slate-400 focus:ring-0 outline-none sm:text-sm sm:leading-6 bg-transparent disabled:cursor-not-allowed\" />\r\n }\r\n\r\n @if (type() === 'password') {\r\n <button type=\"button\" (click)=\"togglePasswordVisibility()\"\r\n class=\"ml-2 text-slate-500 hover:text-slate-700 focus:outline-none cursor-pointer\">\r\n <ad-icon [name]=\"passwordVisible() ? 'eye-invisible' : 'eye'\" size=\"sm\"></ad-icon>\r\n </button>\r\n }\r\n\r\n @if (type() !== 'password' && suffix()) {\r\n <span class=\"ml-2 text-slate-500 flex items-center\">\r\n <ad-icon [name]=\"suffix()!\" size=\"sm\"></ad-icon>\r\n </span>\r\n }\r\n</div>", styles: [""], 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: "component", type: AdIconComponent, selector: "ad-icon", inputs: ["name", "size", "color"] }] });
|
|
268
311
|
}
|
|
269
312
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AdInputComponent, decorators: [{
|
|
270
313
|
type: Component,
|
|
@@ -278,10 +321,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
|
|
|
278
321
|
useExisting: forwardRef(() => AdInputComponent),
|
|
279
322
|
multi: true
|
|
280
323
|
}
|
|
281
|
-
], template: "@if (label()) {\r\n<label class=\"block text-sm font-medium leading-6 text-slate-900 mb-2\">{{ label() }}</label>\r\n}\r\n\r\n<div class=\"flex items-center w-full rounded-md border border-slate-300 bg-white px-3 py-1.5 shadow-sm transition-all focus-within:border-cerca-primary\"\r\n [class.bg-slate-50]=\"disabled\" [class.text-slate-500]=\"disabled\" [class.cursor-not-allowed]=\"disabled\"\r\n [class.border-cerca-alert]=\"error()\" [class.text-cerca-alert-text]=\"error()\"\r\n [class.focus-within:border-cerca-alert]=\"error()\">\r\n\r\n @if (prefix()) {\r\n <span class=\"mr-2 flex items-center\" [class.text-slate-500]=\"!error()\"
|
|
324
|
+
], template: "@if (label()) {\r\n<label class=\"block text-sm font-medium leading-6 text-slate-900 mb-2\">{{ label() }}</label>\r\n}\r\n\r\n<div class=\"flex items-center w-full rounded-md border border-slate-300 bg-white px-3 py-1.5 shadow-sm transition-all focus-within:border-cerca-primary\"\r\n [class.bg-slate-50]=\"disabled\" [class.text-slate-500]=\"disabled\" [class.cursor-not-allowed]=\"disabled\"\r\n [class.border-cerca-alert]=\"error()\" [class.text-cerca-alert-text]=\"error()\"\r\n [class.focus-within:border-cerca-alert]=\"error()\">\r\n\r\n @if (prefix()) {\r\n <span class=\"mr-2 flex items-center whitespace-nowrap\" [class.text-slate-500]=\"!error()\"\r\n [class.text-cerca-alert-text]=\"error()\">\r\n @if (isIcon(prefix())) {\r\n <ad-icon [name]=\"prefix()!\" size=\"sm\"></ad-icon>\r\n } @else {\r\n <span class=\"text-sm font-medium\">{{ prefix() }}</span>\r\n }\r\n </span>\r\n }\r\n\r\n @if (type() === 'textarea') {\r\n <textarea [rows]=\"rows()\" [placeholder]=\"placeholder()\" [disabled]=\"disabled\" [(ngModel)]=\"value\"\r\n (ngModelChange)=\"onChange($event)\" (blur)=\"onTouched()\"\r\n class=\"block w-full border-0 p-0 text-slate-900 placeholder:text-slate-400 focus:ring-0 outline-none sm:text-sm sm:leading-6 bg-transparent disabled:cursor-not-allowed resize-none\"></textarea>\r\n } @else {\r\n <input [type]=\"inputType()\" [placeholder]=\"placeholder()\" [disabled]=\"disabled\" [value]=\"value\"\r\n (input)=\"onInputChange($event)\" (blur)=\"onTouched()\"\r\n class=\"block w-full border-0 p-0 text-slate-900 placeholder:text-slate-400 focus:ring-0 outline-none sm:text-sm sm:leading-6 bg-transparent disabled:cursor-not-allowed\" />\r\n }\r\n\r\n @if (type() === 'password') {\r\n <button type=\"button\" (click)=\"togglePasswordVisibility()\"\r\n class=\"ml-2 text-slate-500 hover:text-slate-700 focus:outline-none cursor-pointer\">\r\n <ad-icon [name]=\"passwordVisible() ? 'eye-invisible' : 'eye'\" size=\"sm\"></ad-icon>\r\n </button>\r\n }\r\n\r\n @if (type() !== 'password' && suffix()) {\r\n <span class=\"ml-2 text-slate-500 flex items-center\">\r\n <ad-icon [name]=\"suffix()!\" size=\"sm\"></ad-icon>\r\n </span>\r\n }\r\n</div>" }]
|
|
282
325
|
}], 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 }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], disabled: [{
|
|
283
326
|
type: Input
|
|
284
|
-
}], 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 }] }] } });
|
|
327
|
+
}], 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 }] }], mask: [{ type: i0.Input, args: [{ isSignal: true, alias: "mask", required: false }] }] } });
|
|
285
328
|
|
|
286
329
|
class AdSelectComponent {
|
|
287
330
|
options = input([], ...(ngDevMode ? [{ debugName: "options" }] : []));
|
|
@@ -435,10 +478,10 @@ class DynamicFieldComponent {
|
|
|
435
478
|
}
|
|
436
479
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: DynamicFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
437
480
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: DynamicFieldComponent, isStandalone: true, selector: "ad-dynamic-field", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, form: { classPropertyName: "form", publicName: "form", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
|
|
438
|
-
<div
|
|
481
|
+
<div [formGroup]="form()">
|
|
439
482
|
<!-- Label -->
|
|
440
483
|
@if (renderType !== 'checkbox' && renderType !== 'switch' && field().label) {
|
|
441
|
-
<label [for]="controlName" class="block text-sm font-medium leading-6 text-slate-900 dark:text-slate-200 mb-
|
|
484
|
+
<label [for]="controlName" class="block text-sm font-medium leading-6 text-slate-900 dark:text-slate-200 mb-1">
|
|
442
485
|
{{ field().label }}
|
|
443
486
|
@if (isRequired) { <span class="text-cerca-rose">*</span> }
|
|
444
487
|
</label>
|
|
@@ -505,6 +548,16 @@ class DynamicFieldComponent {
|
|
|
505
548
|
[formControlName]="controlName"
|
|
506
549
|
[options]="getSwitchOptions()">
|
|
507
550
|
</ad-switch>
|
|
551
|
+
}
|
|
552
|
+
@case ('currency') {
|
|
553
|
+
<ad-input
|
|
554
|
+
[formControlName]="controlName"
|
|
555
|
+
[placeholder]="placeholder"
|
|
556
|
+
type="text"
|
|
557
|
+
prefix="$"
|
|
558
|
+
mask="currency"
|
|
559
|
+
[disabled]="field().disabled || false">
|
|
560
|
+
</ad-input>
|
|
508
561
|
}
|
|
509
562
|
@case ('custom') {
|
|
510
563
|
@if (getRenderer(controlName); as component) {
|
|
@@ -528,7 +581,7 @@ class DynamicFieldComponent {
|
|
|
528
581
|
</p>
|
|
529
582
|
}
|
|
530
583
|
</div>
|
|
531
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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: AdInputComponent, selector: "ad-input", inputs: ["type", "placeholder", "label", "error", "rows", "disabled", "size", "prefix", "suffix"] }, { kind: "component", type: AdSelectComponent, selector: "ad-select", inputs: ["options", "placeholder", "label", "size", "allowClear", "showSearch", "disabled"] }, { kind: "component", type: AdSwitchComponent, selector: "ad-switch", inputs: ["options", "disabled"] }] });
|
|
584
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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: AdInputComponent, selector: "ad-input", inputs: ["type", "placeholder", "label", "error", "rows", "disabled", "size", "prefix", "suffix", "mask"] }, { kind: "component", type: AdSelectComponent, selector: "ad-select", inputs: ["options", "placeholder", "label", "size", "allowClear", "showSearch", "disabled"] }, { kind: "component", type: AdSwitchComponent, selector: "ad-switch", inputs: ["options", "disabled"] }] });
|
|
532
585
|
}
|
|
533
586
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: DynamicFieldComponent, decorators: [{
|
|
534
587
|
type: Component,
|
|
@@ -537,10 +590,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
|
|
|
537
590
|
standalone: true,
|
|
538
591
|
imports: [CommonModule, ReactiveFormsModule, AdInputComponent, AdSelectComponent, AdSwitchComponent],
|
|
539
592
|
template: `
|
|
540
|
-
<div
|
|
593
|
+
<div [formGroup]="form()">
|
|
541
594
|
<!-- Label -->
|
|
542
595
|
@if (renderType !== 'checkbox' && renderType !== 'switch' && field().label) {
|
|
543
|
-
<label [for]="controlName" class="block text-sm font-medium leading-6 text-slate-900 dark:text-slate-200 mb-
|
|
596
|
+
<label [for]="controlName" class="block text-sm font-medium leading-6 text-slate-900 dark:text-slate-200 mb-1">
|
|
544
597
|
{{ field().label }}
|
|
545
598
|
@if (isRequired) { <span class="text-cerca-rose">*</span> }
|
|
546
599
|
</label>
|
|
@@ -607,6 +660,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
|
|
|
607
660
|
[formControlName]="controlName"
|
|
608
661
|
[options]="getSwitchOptions()">
|
|
609
662
|
</ad-switch>
|
|
663
|
+
}
|
|
664
|
+
@case ('currency') {
|
|
665
|
+
<ad-input
|
|
666
|
+
[formControlName]="controlName"
|
|
667
|
+
[placeholder]="placeholder"
|
|
668
|
+
type="text"
|
|
669
|
+
prefix="$"
|
|
670
|
+
mask="currency"
|
|
671
|
+
[disabled]="field().disabled || false">
|
|
672
|
+
</ad-input>
|
|
610
673
|
}
|
|
611
674
|
@case ('custom') {
|
|
612
675
|
@if (getRenderer(controlName); as component) {
|
|
@@ -853,20 +916,27 @@ class AdFormRendererComponent {
|
|
|
853
916
|
};
|
|
854
917
|
getGridClass(props) {
|
|
855
918
|
const classes = [];
|
|
856
|
-
//
|
|
919
|
+
// Helper to map 24-scale (AntD) to 12-scale (Tailwind)
|
|
920
|
+
const to12Scale = (val) => {
|
|
921
|
+
if (!val)
|
|
922
|
+
return 12;
|
|
923
|
+
return Math.max(1, Math.min(12, Math.round(val / 2)));
|
|
924
|
+
};
|
|
925
|
+
// Base Span (Mobile/Default)
|
|
857
926
|
if (props?.span) {
|
|
858
|
-
|
|
927
|
+
const span12 = to12Scale(props.span);
|
|
928
|
+
classes.push(this.mdColSpanMap[span12] || 'md:col-span-12');
|
|
859
929
|
}
|
|
860
930
|
else {
|
|
861
931
|
classes.push('md:col-span-12'); // Default full width
|
|
862
932
|
}
|
|
863
933
|
// LG Override
|
|
864
934
|
if (props?.lg) {
|
|
865
|
-
classes.push(this.lgColSpanMap[props.lg]);
|
|
935
|
+
classes.push(this.lgColSpanMap[to12Scale(props.lg)]);
|
|
866
936
|
}
|
|
867
937
|
// XL Override
|
|
868
938
|
if (props?.xl) {
|
|
869
|
-
classes.push(this.xlColSpanMap[props.xl]);
|
|
939
|
+
classes.push(this.xlColSpanMap[to12Scale(props.xl)]);
|
|
870
940
|
}
|
|
871
941
|
return classes.join(' ');
|
|
872
942
|
}
|
|
@@ -893,7 +963,7 @@ class AdFormRendererComponent {
|
|
|
893
963
|
@switch (node.layoutType) {
|
|
894
964
|
|
|
895
965
|
@case ('row') {
|
|
896
|
-
<div class="grid grid-cols-1 md:grid-cols-12 gap-
|
|
966
|
+
<div class="grid grid-cols-1 md:grid-cols-12 gap-4 items-start w-full md:col-span-12">
|
|
897
967
|
<ad-form-renderer [nodes]="node.children || []" [form]="form()"></ad-form-renderer>
|
|
898
968
|
</div>
|
|
899
969
|
}
|
|
@@ -971,7 +1041,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
|
|
|
971
1041
|
@switch (node.layoutType) {
|
|
972
1042
|
|
|
973
1043
|
@case ('row') {
|
|
974
|
-
<div class="grid grid-cols-1 md:grid-cols-12 gap-
|
|
1044
|
+
<div class="grid grid-cols-1 md:grid-cols-12 gap-4 items-start w-full md:col-span-12">
|
|
975
1045
|
<ad-form-renderer [nodes]="node.children || []" [form]="form()"></ad-form-renderer>
|
|
976
1046
|
</div>
|
|
977
1047
|
}
|
|
@@ -1034,7 +1104,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
|
|
|
1034
1104
|
}]
|
|
1035
1105
|
}], propDecorators: { nodes: [{ type: i0.Input, args: [{ isSignal: true, alias: "nodes", required: true }] }], form: [{ type: i0.Input, args: [{ isSignal: true, alias: "form", required: true }] }] } });
|
|
1036
1106
|
|
|
1037
|
-
class
|
|
1107
|
+
class AdFormEngineComponent {
|
|
1038
1108
|
// Inputs (Signals)
|
|
1039
1109
|
schema = input.required(...(ngDevMode ? [{ debugName: "schema" }] : []));
|
|
1040
1110
|
model = input({}, ...(ngDevMode ? [{ debugName: "model" }] : []));
|
|
@@ -1084,14 +1154,14 @@ class FormEngineComponent {
|
|
|
1084
1154
|
onCancel() {
|
|
1085
1155
|
this.formCancel.emit();
|
|
1086
1156
|
}
|
|
1087
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type:
|
|
1088
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type:
|
|
1157
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AdFormEngineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1158
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: AdFormEngineComponent, isStandalone: true, selector: "ad-form-engine", inputs: { schema: { classPropertyName: "schema", publicName: "schema", isSignal: true, isRequired: true, transformFunction: null }, model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: false, transformFunction: null }, showCancel: { classPropertyName: "showCancel", publicName: "showCancel", isSignal: true, isRequired: false, transformFunction: null }, showSubmit: { classPropertyName: "showSubmit", publicName: "showSubmit", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { formSubmit: "formSubmit", formCancel: "formCancel" }, ngImport: i0, template: `
|
|
1089
1159
|
@if (form()) {
|
|
1090
1160
|
<form [formGroup]="form()" class="space-y-6" (ngSubmit)="submit()">
|
|
1091
1161
|
|
|
1092
1162
|
<!-- NEW: Recursive Schema Rendering -->
|
|
1093
1163
|
@if (schema().fields) {
|
|
1094
|
-
<div class="grid grid-cols-1 md:grid-cols-12 gap-
|
|
1164
|
+
<div class="grid grid-cols-1 md:grid-cols-12 gap-4 w-full">
|
|
1095
1165
|
<ad-form-renderer [nodes]="schema().fields!" [form]="form()"></ad-form-renderer>
|
|
1096
1166
|
</div>
|
|
1097
1167
|
}
|
|
@@ -1129,7 +1199,7 @@ class FormEngineComponent {
|
|
|
1129
1199
|
}
|
|
1130
1200
|
`, isInline: true, 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.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: "component", type: DynamicLayoutComponent, selector: "ad-dynamic-layout", inputs: ["field", "form"] }, { kind: "component", type: AdButtonComponent, selector: "ad-button", inputs: ["variant", "type", "disabled", "loading", "icon", "size", "block"] }, { kind: "component", type: AdFormRendererComponent, selector: "ad-form-renderer", inputs: ["nodes", "form"] }] });
|
|
1131
1201
|
}
|
|
1132
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type:
|
|
1202
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AdFormEngineComponent, decorators: [{
|
|
1133
1203
|
type: Component,
|
|
1134
1204
|
args: [{
|
|
1135
1205
|
selector: 'ad-form-engine',
|
|
@@ -1141,7 +1211,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
|
|
|
1141
1211
|
|
|
1142
1212
|
<!-- NEW: Recursive Schema Rendering -->
|
|
1143
1213
|
@if (schema().fields) {
|
|
1144
|
-
<div class="grid grid-cols-1 md:grid-cols-12 gap-
|
|
1214
|
+
<div class="grid grid-cols-1 md:grid-cols-12 gap-4 w-full">
|
|
1145
1215
|
<ad-form-renderer [nodes]="schema().fields!" [form]="form()"></ad-form-renderer>
|
|
1146
1216
|
</div>
|
|
1147
1217
|
}
|
|
@@ -1223,14 +1293,14 @@ class AdModalWrapperComponent {
|
|
|
1223
1293
|
</div>
|
|
1224
1294
|
}
|
|
1225
1295
|
</ad-modal>
|
|
1226
|
-
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AdModalComponent, selector: "ad-modal", inputs: ["resource"], outputs: ["close"] }, { kind: "component", type:
|
|
1296
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AdModalComponent, selector: "ad-modal", inputs: ["resource"], outputs: ["close"] }, { kind: "component", type: AdFormEngineComponent, selector: "ad-form-engine", inputs: ["schema", "model", "showCancel", "showSubmit"], outputs: ["formSubmit", "formCancel"] }] });
|
|
1227
1297
|
}
|
|
1228
1298
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AdModalWrapperComponent, decorators: [{
|
|
1229
1299
|
type: Component,
|
|
1230
1300
|
args: [{
|
|
1231
1301
|
selector: 'ad-modal-wrapper',
|
|
1232
1302
|
standalone: true,
|
|
1233
|
-
imports: [CommonModule, AdModalComponent,
|
|
1303
|
+
imports: [CommonModule, AdModalComponent, AdFormEngineComponent],
|
|
1234
1304
|
template: `
|
|
1235
1305
|
<ad-modal
|
|
1236
1306
|
[resource]="modalResource()"
|
|
@@ -1296,25 +1366,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
|
|
|
1296
1366
|
}], ctorParameters: () => [{ type: i0.ApplicationRef }, { type: i0.EnvironmentInjector }] });
|
|
1297
1367
|
|
|
1298
1368
|
class TableEngineComponent {
|
|
1299
|
-
|
|
1300
|
-
schema = input.required(...(ngDevMode ? [{ debugName: "schema" }] : [])); // Optional if using columns directly, but Schema approach implies passing the whole schema object usually.
|
|
1301
|
-
// Actually, keeping flexible to support both direct cols or schema.
|
|
1302
|
-
// Let's support independent inputs for now to match old API but strict typed.
|
|
1303
|
-
// Re-defining inputs to match Core Schema
|
|
1369
|
+
schema = input.required(...(ngDevMode ? [{ debugName: "schema" }] : []));
|
|
1304
1370
|
columns = input([], ...(ngDevMode ? [{ debugName: "columns" }] : []));
|
|
1305
1371
|
data = input([], ...(ngDevMode ? [{ debugName: "data" }] : []));
|
|
1306
1372
|
loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
|
|
1307
1373
|
total = input(0, ...(ngDevMode ? [{ debugName: "total" }] : []));
|
|
1308
1374
|
pageSize = input(10, ...(ngDevMode ? [{ debugName: "pageSize" }] : []));
|
|
1309
1375
|
pageIndex = input(1, ...(ngDevMode ? [{ debugName: "pageIndex" }] : []));
|
|
1310
|
-
actions = input([], ...(ngDevMode ? [{ debugName: "actions" }] : []));
|
|
1376
|
+
actions = input([], ...(ngDevMode ? [{ debugName: "actions" }] : []));
|
|
1311
1377
|
queryParamsChange = output();
|
|
1312
1378
|
action = output();
|
|
1313
1379
|
Math = Math;
|
|
1314
1380
|
displayColumns = computed(() => {
|
|
1315
|
-
// Filter visible if property exists, or default true
|
|
1316
|
-
// CoreTableColumn doesn't have is_v displayColumns = computed(() => {
|
|
1317
|
-
// Use schema columns if available, otherwise fallback to columns input
|
|
1318
1381
|
return this.schema().columns || this.columns();
|
|
1319
1382
|
}, ...(ngDevMode ? [{ debugName: "displayColumns" }] : []));
|
|
1320
1383
|
hasActions = computed(() => {
|
|
@@ -1322,12 +1385,24 @@ class TableEngineComponent {
|
|
|
1322
1385
|
const inputActions = this.actions();
|
|
1323
1386
|
return schemaActions.length > 0 || inputActions.length > 0;
|
|
1324
1387
|
}, ...(ngDevMode ? [{ debugName: "hasActions" }] : []));
|
|
1325
|
-
|
|
1388
|
+
stickyActions = computed(() => {
|
|
1389
|
+
return this.schema().stickyActions ?? false;
|
|
1390
|
+
}, ...(ngDevMode ? [{ debugName: "stickyActions" }] : []));
|
|
1326
1391
|
getActions = computed(() => {
|
|
1327
1392
|
const schemaActions = this.schema().actions || [];
|
|
1328
1393
|
const inputActions = this.actions();
|
|
1329
1394
|
return [...schemaActions, ...inputActions];
|
|
1330
1395
|
}, ...(ngDevMode ? [{ debugName: "getActions" }] : []));
|
|
1396
|
+
/**
|
|
1397
|
+
* Returns the box-shadow for a sticky column to create a visual separator
|
|
1398
|
+
*/
|
|
1399
|
+
getStickyColumnShadow(sticky) {
|
|
1400
|
+
if (sticky === 'left')
|
|
1401
|
+
return '4px 0 8px -4px rgba(0,0,0,0.08)';
|
|
1402
|
+
if (sticky === 'right')
|
|
1403
|
+
return '-4px 0 8px -4px rgba(0,0,0,0.08)';
|
|
1404
|
+
return null;
|
|
1405
|
+
}
|
|
1331
1406
|
mapVariant(color) {
|
|
1332
1407
|
if (color === 'primary')
|
|
1333
1408
|
return 'primary';
|
|
@@ -1353,96 +1428,120 @@ class TableEngineComponent {
|
|
|
1353
1428
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: TableEngineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1354
1429
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: TableEngineComponent, isStandalone: true, selector: "ad-table-engine", inputs: { schema: { classPropertyName: "schema", publicName: "schema", isSignal: true, isRequired: true, transformFunction: null }, columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, total: { classPropertyName: "total", publicName: "total", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, pageIndex: { classPropertyName: "pageIndex", publicName: "pageIndex", isSignal: true, isRequired: false, transformFunction: null }, actions: { classPropertyName: "actions", publicName: "actions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { queryParamsChange: "queryParamsChange", action: "action" }, ngImport: i0, template: `
|
|
1355
1430
|
<div class="flow-root">
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
<
|
|
1361
|
-
<
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1431
|
+
<!-- Scroll container: overflow-x-auto allows horizontal scroll, sticky works inside it -->
|
|
1432
|
+
<div class="relative rounded-xl border border-slate-200/70 overflow-x-auto">
|
|
1433
|
+
@if (loading()) {
|
|
1434
|
+
<div class="absolute inset-0 bg-white/60 backdrop-blur-[1px] z-30 flex items-center justify-center">
|
|
1435
|
+
<svg class="animate-spin h-8 w-8 text-sky-600" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
|
|
1436
|
+
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
|
1437
|
+
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
|
|
1438
|
+
</svg>
|
|
1439
|
+
</div>
|
|
1440
|
+
}
|
|
1441
|
+
|
|
1442
|
+
<table class="min-w-full">
|
|
1443
|
+
<thead>
|
|
1444
|
+
<tr class="bg-slate-50 border-b border-slate-200">
|
|
1445
|
+
@for (column of displayColumns(); track column.key) {
|
|
1446
|
+
<th scope="col"
|
|
1447
|
+
class="px-5 py-3.5 text-left text-xs font-semibold text-slate-500 uppercase tracking-wider"
|
|
1448
|
+
[style.position]="column.sticky ? 'sticky' : null"
|
|
1449
|
+
[style.left]="column.sticky === 'left' ? '0' : null"
|
|
1450
|
+
[style.right]="column.sticky === 'right' ? '0' : null"
|
|
1451
|
+
[style.z-index]="column.sticky ? '20' : null"
|
|
1452
|
+
[style.background-color]="column.sticky ? '#f8fafc' : null"
|
|
1453
|
+
[style.box-shadow]="getStickyColumnShadow(column.sticky)"
|
|
1454
|
+
[style.width]="column.width || 'auto'"
|
|
1455
|
+
[style.min-width]="column.width || 'auto'"
|
|
1456
|
+
[style.max-width]="column.width || 'none'">
|
|
1457
|
+
{{ column.label }}
|
|
1458
|
+
</th>
|
|
1459
|
+
}
|
|
1460
|
+
@if (hasActions()) {
|
|
1461
|
+
<th scope="col"
|
|
1462
|
+
class="px-5 py-3.5 text-center text-xs font-semibold text-slate-500 uppercase tracking-wider"
|
|
1463
|
+
[style.position]="stickyActions() ? 'sticky' : null"
|
|
1464
|
+
[style.right]="stickyActions() ? '0' : null"
|
|
1465
|
+
[style.z-index]="stickyActions() ? '20' : null"
|
|
1466
|
+
[style.background-color]="stickyActions() ? '#f8fafc' : null"
|
|
1467
|
+
[style.box-shadow]="stickyActions() ? '-4px 0 8px -4px rgba(0,0,0,0.08)' : null">
|
|
1468
|
+
Acciones
|
|
1469
|
+
</th>
|
|
1470
|
+
}
|
|
1471
|
+
</tr>
|
|
1472
|
+
</thead>
|
|
1473
|
+
<tbody class="bg-white divide-y divide-slate-100">
|
|
1474
|
+
@for (item of data(); track item; let idx = $index) {
|
|
1475
|
+
<tr class="hover:bg-slate-50/70 transition-colors duration-150 ease-in-out">
|
|
1476
|
+
@for (column of displayColumns(); track column.key) {
|
|
1477
|
+
<td class="whitespace-nowrap px-5 py-4 text-sm text-slate-600 truncate"
|
|
1478
|
+
[style.position]="column.sticky ? 'sticky' : null"
|
|
1479
|
+
[style.left]="column.sticky === 'left' ? '0' : null"
|
|
1480
|
+
[style.right]="column.sticky === 'right' ? '0' : null"
|
|
1481
|
+
[style.z-index]="column.sticky ? '10' : null"
|
|
1482
|
+
[style.background-color]="column.sticky ? '#ffffff' : null"
|
|
1483
|
+
[style.box-shadow]="getStickyColumnShadow(column.sticky)"
|
|
1484
|
+
[style.width]="column.width || 'auto'"
|
|
1485
|
+
[style.min-width]="column.width || 'auto'"
|
|
1486
|
+
[style.max-width]="column.width || 'none'">
|
|
1487
|
+
{{ item[column.key] }}
|
|
1488
|
+
</td>
|
|
1489
|
+
}
|
|
1490
|
+
@if (hasActions()) {
|
|
1491
|
+
<td class="whitespace-nowrap px-5 py-4 text-right text-sm"
|
|
1492
|
+
[style.position]="stickyActions() ? 'sticky' : null"
|
|
1493
|
+
[style.right]="stickyActions() ? '0' : null"
|
|
1494
|
+
[style.z-index]="stickyActions() ? '10' : null"
|
|
1495
|
+
[style.background-color]="stickyActions() ? '#ffffff' : null"
|
|
1496
|
+
[style.box-shadow]="stickyActions() ? '-4px 0 8px -4px rgba(0,0,0,0.08)' : null">
|
|
1497
|
+
<div class="flex justify-end items-center gap-2">
|
|
1498
|
+
@for (act of getActions(); track act.action) {
|
|
1499
|
+
<ad-button
|
|
1500
|
+
[variant]="mapVariant(act.color)"
|
|
1501
|
+
size="small"
|
|
1502
|
+
(click)="onActionClick(act.action, item)">
|
|
1503
|
+
@if (act.icon) {
|
|
1504
|
+
<ad-icon [name]="act.icon" class="mr-1"></ad-icon>
|
|
1505
|
+
}
|
|
1506
|
+
{{ act.label }}
|
|
1507
|
+
</ad-button>
|
|
1508
|
+
|
|
1509
|
+
}
|
|
1510
|
+
</div>
|
|
1511
|
+
</td>
|
|
1512
|
+
}
|
|
1513
|
+
</tr>
|
|
1514
|
+
}
|
|
1515
|
+
@if (data().length === 0 && !loading()) {
|
|
1370
1516
|
<tr>
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
class="
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
</th>
|
|
1379
|
-
}
|
|
1380
|
-
@if (hasActions()) {
|
|
1381
|
-
<th scope="col" class="relative py-3.5 pl-3 pr-4 sm:pr-0">
|
|
1382
|
-
<span class="sr-only">Acciones</span>
|
|
1383
|
-
</th>
|
|
1384
|
-
}
|
|
1517
|
+
<td [attr.colspan]="displayColumns().length + (hasActions() ? 1 : 0)"
|
|
1518
|
+
class="py-12 text-center">
|
|
1519
|
+
<div class="flex flex-col items-center gap-2">
|
|
1520
|
+
<span class="material-icons-outlined text-3xl text-slate-300">inbox</span>
|
|
1521
|
+
<p class="text-sm text-slate-400 font-medium">No hay datos disponibles</p>
|
|
1522
|
+
</div>
|
|
1523
|
+
</td>
|
|
1385
1524
|
</tr>
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
<tr>
|
|
1390
|
-
@for (column of displayColumns(); track column.key) {
|
|
1391
|
-
<td class="whitespace-nowrap py-4 pl-4 pr-3 text-sm text-slate-500 sm:pl-0">
|
|
1392
|
-
<!-- Simple rendering for now. Registry support can be added here -->
|
|
1393
|
-
{{ item[column.key] }}
|
|
1394
|
-
</td>
|
|
1395
|
-
}
|
|
1396
|
-
@if (hasActions()) {
|
|
1397
|
-
<td class="whitespace-nowrap py-4 pl-3 pr-4 text-right text-sm font-medium sm:pr-0">
|
|
1398
|
-
<div class="flex justify-end gap-2">
|
|
1399
|
-
@for (act of getActions(); track act.action) {
|
|
1400
|
-
<ad-button
|
|
1401
|
-
[variant]="mapVariant(act.color)"
|
|
1402
|
-
size="small"
|
|
1403
|
-
(click)="onActionClick(act.action, item)">
|
|
1404
|
-
@if (act.icon) {
|
|
1405
|
-
<ad-icon [name]="act.icon" class="mr-1"></ad-icon>
|
|
1406
|
-
}
|
|
1407
|
-
{{ act.label }}
|
|
1408
|
-
</ad-button>
|
|
1409
|
-
}
|
|
1410
|
-
</div>
|
|
1411
|
-
</td>
|
|
1412
|
-
}
|
|
1413
|
-
</tr>
|
|
1414
|
-
}
|
|
1415
|
-
@if (data().length === 0 && !loading()) {
|
|
1416
|
-
<tr>
|
|
1417
|
-
<td [attr.colspan]="displayColumns().length + (hasActions() ? 1 : 0)" class="py-8 text-center text-sm text-slate-500">
|
|
1418
|
-
No hay datos disponibles
|
|
1419
|
-
</td>
|
|
1420
|
-
</tr>
|
|
1421
|
-
}
|
|
1422
|
-
</tbody>
|
|
1423
|
-
</table>
|
|
1424
|
-
</div>
|
|
1425
|
-
</div>
|
|
1525
|
+
}
|
|
1526
|
+
</tbody>
|
|
1527
|
+
</table>
|
|
1426
1528
|
</div>
|
|
1427
1529
|
|
|
1428
1530
|
<!-- Pagination -->
|
|
1429
|
-
<div class="flex items-center justify-between
|
|
1430
|
-
<!-- Simplified Pagination for brevity, can be expanded -->
|
|
1531
|
+
<div class="flex items-center justify-between px-2 py-4">
|
|
1431
1532
|
<div class="flex flex-1 justify-between sm:hidden">
|
|
1432
|
-
<ad-button variant="
|
|
1433
|
-
<ad-button variant="
|
|
1533
|
+
<ad-button variant="outline" [disabled]="pageIndex() === 1" (click)="onPageChange(pageIndex() - 1)">Anterior</ad-button>
|
|
1534
|
+
<ad-button variant="outline" [disabled]="pageIndex() * pageSize() >= total()" (click)="onPageChange(pageIndex() + 1)">Siguiente</ad-button>
|
|
1434
1535
|
</div>
|
|
1435
1536
|
<div class="hidden sm:flex sm:flex-1 sm:items-center sm:justify-between">
|
|
1436
1537
|
<div>
|
|
1437
|
-
<p class="text-sm text-slate-
|
|
1438
|
-
Mostrando <span class="font-
|
|
1538
|
+
<p class="text-sm text-slate-500">
|
|
1539
|
+
Mostrando <span class="font-semibold text-slate-700">{{ (pageIndex() - 1) * pageSize() + 1 }}</span> a <span class="font-semibold text-slate-700">{{ Math.min(pageIndex() * pageSize(), total()) }}</span> de <span class="font-semibold text-slate-700">{{ total() }}</span> resultados
|
|
1439
1540
|
</p>
|
|
1440
1541
|
</div>
|
|
1441
|
-
<div>
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
<ad-button variant="secondary" class="rounded-r-md" [disabled]="pageIndex() * pageSize() >= total()" (click)="onPageChange(pageIndex() + 1)">Sig</ad-button>
|
|
1445
|
-
</nav>
|
|
1542
|
+
<div class="flex items-center gap-2">
|
|
1543
|
+
<ad-button variant="outline" size="small" [disabled]="pageIndex() === 1" (click)="onPageChange(pageIndex() - 1)">Ant</ad-button>
|
|
1544
|
+
<ad-button variant="outline" size="small" [disabled]="pageIndex() * pageSize() >= total()" (click)="onPageChange(pageIndex() + 1)">Sig</ad-button>
|
|
1446
1545
|
</div>
|
|
1447
1546
|
</div>
|
|
1448
1547
|
</div>
|
|
@@ -1457,96 +1556,120 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
|
|
|
1457
1556
|
imports: [CommonModule, AdButtonComponent, AdIconComponent],
|
|
1458
1557
|
template: `
|
|
1459
1558
|
<div class="flow-root">
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
<
|
|
1465
|
-
<
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1559
|
+
<!-- Scroll container: overflow-x-auto allows horizontal scroll, sticky works inside it -->
|
|
1560
|
+
<div class="relative rounded-xl border border-slate-200/70 overflow-x-auto">
|
|
1561
|
+
@if (loading()) {
|
|
1562
|
+
<div class="absolute inset-0 bg-white/60 backdrop-blur-[1px] z-30 flex items-center justify-center">
|
|
1563
|
+
<svg class="animate-spin h-8 w-8 text-sky-600" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
|
|
1564
|
+
<circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
|
|
1565
|
+
<path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
|
|
1566
|
+
</svg>
|
|
1567
|
+
</div>
|
|
1568
|
+
}
|
|
1569
|
+
|
|
1570
|
+
<table class="min-w-full">
|
|
1571
|
+
<thead>
|
|
1572
|
+
<tr class="bg-slate-50 border-b border-slate-200">
|
|
1573
|
+
@for (column of displayColumns(); track column.key) {
|
|
1574
|
+
<th scope="col"
|
|
1575
|
+
class="px-5 py-3.5 text-left text-xs font-semibold text-slate-500 uppercase tracking-wider"
|
|
1576
|
+
[style.position]="column.sticky ? 'sticky' : null"
|
|
1577
|
+
[style.left]="column.sticky === 'left' ? '0' : null"
|
|
1578
|
+
[style.right]="column.sticky === 'right' ? '0' : null"
|
|
1579
|
+
[style.z-index]="column.sticky ? '20' : null"
|
|
1580
|
+
[style.background-color]="column.sticky ? '#f8fafc' : null"
|
|
1581
|
+
[style.box-shadow]="getStickyColumnShadow(column.sticky)"
|
|
1582
|
+
[style.width]="column.width || 'auto'"
|
|
1583
|
+
[style.min-width]="column.width || 'auto'"
|
|
1584
|
+
[style.max-width]="column.width || 'none'">
|
|
1585
|
+
{{ column.label }}
|
|
1586
|
+
</th>
|
|
1587
|
+
}
|
|
1588
|
+
@if (hasActions()) {
|
|
1589
|
+
<th scope="col"
|
|
1590
|
+
class="px-5 py-3.5 text-center text-xs font-semibold text-slate-500 uppercase tracking-wider"
|
|
1591
|
+
[style.position]="stickyActions() ? 'sticky' : null"
|
|
1592
|
+
[style.right]="stickyActions() ? '0' : null"
|
|
1593
|
+
[style.z-index]="stickyActions() ? '20' : null"
|
|
1594
|
+
[style.background-color]="stickyActions() ? '#f8fafc' : null"
|
|
1595
|
+
[style.box-shadow]="stickyActions() ? '-4px 0 8px -4px rgba(0,0,0,0.08)' : null">
|
|
1596
|
+
Acciones
|
|
1597
|
+
</th>
|
|
1598
|
+
}
|
|
1599
|
+
</tr>
|
|
1600
|
+
</thead>
|
|
1601
|
+
<tbody class="bg-white divide-y divide-slate-100">
|
|
1602
|
+
@for (item of data(); track item; let idx = $index) {
|
|
1603
|
+
<tr class="hover:bg-slate-50/70 transition-colors duration-150 ease-in-out">
|
|
1604
|
+
@for (column of displayColumns(); track column.key) {
|
|
1605
|
+
<td class="whitespace-nowrap px-5 py-4 text-sm text-slate-600 truncate"
|
|
1606
|
+
[style.position]="column.sticky ? 'sticky' : null"
|
|
1607
|
+
[style.left]="column.sticky === 'left' ? '0' : null"
|
|
1608
|
+
[style.right]="column.sticky === 'right' ? '0' : null"
|
|
1609
|
+
[style.z-index]="column.sticky ? '10' : null"
|
|
1610
|
+
[style.background-color]="column.sticky ? '#ffffff' : null"
|
|
1611
|
+
[style.box-shadow]="getStickyColumnShadow(column.sticky)"
|
|
1612
|
+
[style.width]="column.width || 'auto'"
|
|
1613
|
+
[style.min-width]="column.width || 'auto'"
|
|
1614
|
+
[style.max-width]="column.width || 'none'">
|
|
1615
|
+
{{ item[column.key] }}
|
|
1616
|
+
</td>
|
|
1617
|
+
}
|
|
1618
|
+
@if (hasActions()) {
|
|
1619
|
+
<td class="whitespace-nowrap px-5 py-4 text-right text-sm"
|
|
1620
|
+
[style.position]="stickyActions() ? 'sticky' : null"
|
|
1621
|
+
[style.right]="stickyActions() ? '0' : null"
|
|
1622
|
+
[style.z-index]="stickyActions() ? '10' : null"
|
|
1623
|
+
[style.background-color]="stickyActions() ? '#ffffff' : null"
|
|
1624
|
+
[style.box-shadow]="stickyActions() ? '-4px 0 8px -4px rgba(0,0,0,0.08)' : null">
|
|
1625
|
+
<div class="flex justify-end items-center gap-2">
|
|
1626
|
+
@for (act of getActions(); track act.action) {
|
|
1627
|
+
<ad-button
|
|
1628
|
+
[variant]="mapVariant(act.color)"
|
|
1629
|
+
size="small"
|
|
1630
|
+
(click)="onActionClick(act.action, item)">
|
|
1631
|
+
@if (act.icon) {
|
|
1632
|
+
<ad-icon [name]="act.icon" class="mr-1"></ad-icon>
|
|
1633
|
+
}
|
|
1634
|
+
{{ act.label }}
|
|
1635
|
+
</ad-button>
|
|
1636
|
+
|
|
1637
|
+
}
|
|
1638
|
+
</div>
|
|
1639
|
+
</td>
|
|
1640
|
+
}
|
|
1641
|
+
</tr>
|
|
1642
|
+
}
|
|
1643
|
+
@if (data().length === 0 && !loading()) {
|
|
1474
1644
|
<tr>
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
class="
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
</th>
|
|
1483
|
-
}
|
|
1484
|
-
@if (hasActions()) {
|
|
1485
|
-
<th scope="col" class="relative py-3.5 pl-3 pr-4 sm:pr-0">
|
|
1486
|
-
<span class="sr-only">Acciones</span>
|
|
1487
|
-
</th>
|
|
1488
|
-
}
|
|
1645
|
+
<td [attr.colspan]="displayColumns().length + (hasActions() ? 1 : 0)"
|
|
1646
|
+
class="py-12 text-center">
|
|
1647
|
+
<div class="flex flex-col items-center gap-2">
|
|
1648
|
+
<span class="material-icons-outlined text-3xl text-slate-300">inbox</span>
|
|
1649
|
+
<p class="text-sm text-slate-400 font-medium">No hay datos disponibles</p>
|
|
1650
|
+
</div>
|
|
1651
|
+
</td>
|
|
1489
1652
|
</tr>
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
<tr>
|
|
1494
|
-
@for (column of displayColumns(); track column.key) {
|
|
1495
|
-
<td class="whitespace-nowrap py-4 pl-4 pr-3 text-sm text-slate-500 sm:pl-0">
|
|
1496
|
-
<!-- Simple rendering for now. Registry support can be added here -->
|
|
1497
|
-
{{ item[column.key] }}
|
|
1498
|
-
</td>
|
|
1499
|
-
}
|
|
1500
|
-
@if (hasActions()) {
|
|
1501
|
-
<td class="whitespace-nowrap py-4 pl-3 pr-4 text-right text-sm font-medium sm:pr-0">
|
|
1502
|
-
<div class="flex justify-end gap-2">
|
|
1503
|
-
@for (act of getActions(); track act.action) {
|
|
1504
|
-
<ad-button
|
|
1505
|
-
[variant]="mapVariant(act.color)"
|
|
1506
|
-
size="small"
|
|
1507
|
-
(click)="onActionClick(act.action, item)">
|
|
1508
|
-
@if (act.icon) {
|
|
1509
|
-
<ad-icon [name]="act.icon" class="mr-1"></ad-icon>
|
|
1510
|
-
}
|
|
1511
|
-
{{ act.label }}
|
|
1512
|
-
</ad-button>
|
|
1513
|
-
}
|
|
1514
|
-
</div>
|
|
1515
|
-
</td>
|
|
1516
|
-
}
|
|
1517
|
-
</tr>
|
|
1518
|
-
}
|
|
1519
|
-
@if (data().length === 0 && !loading()) {
|
|
1520
|
-
<tr>
|
|
1521
|
-
<td [attr.colspan]="displayColumns().length + (hasActions() ? 1 : 0)" class="py-8 text-center text-sm text-slate-500">
|
|
1522
|
-
No hay datos disponibles
|
|
1523
|
-
</td>
|
|
1524
|
-
</tr>
|
|
1525
|
-
}
|
|
1526
|
-
</tbody>
|
|
1527
|
-
</table>
|
|
1528
|
-
</div>
|
|
1529
|
-
</div>
|
|
1653
|
+
}
|
|
1654
|
+
</tbody>
|
|
1655
|
+
</table>
|
|
1530
1656
|
</div>
|
|
1531
1657
|
|
|
1532
1658
|
<!-- Pagination -->
|
|
1533
|
-
<div class="flex items-center justify-between
|
|
1534
|
-
<!-- Simplified Pagination for brevity, can be expanded -->
|
|
1659
|
+
<div class="flex items-center justify-between px-2 py-4">
|
|
1535
1660
|
<div class="flex flex-1 justify-between sm:hidden">
|
|
1536
|
-
<ad-button variant="
|
|
1537
|
-
<ad-button variant="
|
|
1661
|
+
<ad-button variant="outline" [disabled]="pageIndex() === 1" (click)="onPageChange(pageIndex() - 1)">Anterior</ad-button>
|
|
1662
|
+
<ad-button variant="outline" [disabled]="pageIndex() * pageSize() >= total()" (click)="onPageChange(pageIndex() + 1)">Siguiente</ad-button>
|
|
1538
1663
|
</div>
|
|
1539
1664
|
<div class="hidden sm:flex sm:flex-1 sm:items-center sm:justify-between">
|
|
1540
1665
|
<div>
|
|
1541
|
-
<p class="text-sm text-slate-
|
|
1542
|
-
Mostrando <span class="font-
|
|
1666
|
+
<p class="text-sm text-slate-500">
|
|
1667
|
+
Mostrando <span class="font-semibold text-slate-700">{{ (pageIndex() - 1) * pageSize() + 1 }}</span> a <span class="font-semibold text-slate-700">{{ Math.min(pageIndex() * pageSize(), total()) }}</span> de <span class="font-semibold text-slate-700">{{ total() }}</span> resultados
|
|
1543
1668
|
</p>
|
|
1544
1669
|
</div>
|
|
1545
|
-
<div>
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
<ad-button variant="secondary" class="rounded-r-md" [disabled]="pageIndex() * pageSize() >= total()" (click)="onPageChange(pageIndex() + 1)">Sig</ad-button>
|
|
1549
|
-
</nav>
|
|
1670
|
+
<div class="flex items-center gap-2">
|
|
1671
|
+
<ad-button variant="outline" size="small" [disabled]="pageIndex() === 1" (click)="onPageChange(pageIndex() - 1)">Ant</ad-button>
|
|
1672
|
+
<ad-button variant="outline" size="small" [disabled]="pageIndex() * pageSize() >= total()" (click)="onPageChange(pageIndex() + 1)">Sig</ad-button>
|
|
1550
1673
|
</div>
|
|
1551
1674
|
</div>
|
|
1552
1675
|
</div>
|
|
@@ -1713,6 +1836,8 @@ class AdDescriptionHeaderComponent {
|
|
|
1713
1836
|
subtitle = computed(() => this.resource().subtitle, ...(ngDevMode ? [{ debugName: "subtitle" }] : []));
|
|
1714
1837
|
buttons = computed(() => this.resource().buttons, ...(ngDevMode ? [{ debugName: "buttons" }] : []));
|
|
1715
1838
|
showDivider = computed(() => this.resource().showDivider, ...(ngDevMode ? [{ debugName: "showDivider" }] : []));
|
|
1839
|
+
backButton = computed(() => this.resource().backButton, ...(ngDevMode ? [{ debugName: "backButton" }] : []));
|
|
1840
|
+
onBack = computed(() => this.resource().onBack, ...(ngDevMode ? [{ debugName: "onBack" }] : []));
|
|
1716
1841
|
getModalTriggerResource(button) {
|
|
1717
1842
|
return {
|
|
1718
1843
|
resource: button.modalResource,
|
|
@@ -1732,6 +1857,15 @@ class AdDescriptionHeaderComponent {
|
|
|
1732
1857
|
onClick();
|
|
1733
1858
|
}
|
|
1734
1859
|
}
|
|
1860
|
+
/**
|
|
1861
|
+
* Maneja el clic en el botón de regresar
|
|
1862
|
+
*/
|
|
1863
|
+
handleBack() {
|
|
1864
|
+
const onBackFn = this.onBack();
|
|
1865
|
+
if (onBackFn) {
|
|
1866
|
+
onBackFn();
|
|
1867
|
+
}
|
|
1868
|
+
}
|
|
1735
1869
|
/**
|
|
1736
1870
|
* Maneja la confirmación de un modal
|
|
1737
1871
|
* @param onConfirm Callback de confirmación
|
|
@@ -1752,11 +1886,11 @@ class AdDescriptionHeaderComponent {
|
|
|
1752
1886
|
}
|
|
1753
1887
|
}
|
|
1754
1888
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AdDescriptionHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1755
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: AdDescriptionHeaderComponent, isStandalone: true, selector: "ad-description-header", inputs: { resource: { classPropertyName: "resource", publicName: "resource", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"premium-header-card\">\r\n <div class=\"header-main\">\r\n <div class=\"title-group\">\r\n <h1 class=\"premium-title\">\r\n {{ title() }}\r\n @if (accentedTitle()) {\r\n <span class=\"accent-text\">\r\n {{ accentedTitle() }}\r\n </span>\r\n }\r\n </h1>\r\n @if (subtitle()) {\r\n <p class=\"premium-subtitle\">\r\n {{ subtitle() }}\r\n </p>\r\n }\r\n </div>\r\n @if (buttons() && buttons()!.length > 0) {\r\n <div class=\"header-actions\">\r\n @for (button of buttons(); track $index) {\r\n @if (button.isModalTrigger && button.modalResource) {\r\n <ad-modal-trigger [resource]=\"getModalTriggerResource(button)\"\r\n (confirm)=\"handleModalConfirm(button.onModalConfirm, $event)\"\r\n (cancel)=\"handleModalCancel(button.onModalCancel)\">\r\n </ad-modal-trigger>\r\n } @else {\r\n <ad-button [variant]=\"button.variant || 'primary'\" [type]=\"button.type || 'button'\"\r\n [disabled]=\"button.disabled || false\" (click)=\"handleButtonClick(button.onClick)\" [icon]=\"button.icon\">\r\n {{ button.label }}\r\n </ad-button>\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n\r\n<!-- Divider is no longer needed with the card style -->\r\n@if (showDivider() && false) {\r\n<div class=\"ad-description-header__divider\"></div>\r\n}", styles: [":root{--color-primary: #002855;--color-primary-hover: #003366;--color-primary-active: #001a38;--color-primary-light: #F1F5F9;--color-primary-accent: #5BC2E7;--color-background: #F8FAFC;--color-surface: #FFFFFF;--color-border: #F1F5F9;--color-secondary: #475569;--color-secondary-light: #94A3B8;--color-success: #A2D033;--color-success-bg: rgba(162, 208, 51, .05);--color-success-text: #7A9F26;--color-alert: #EF4444;--color-alert-bg: rgba(239, 68, 68, .05);--color-alert-text: #DC2626;--color-warning: #F59E0B;--color-warning-bg: rgba(245, 158, 11, .05);--color-warning-text: #D97706;--color-slate-900: #0f172a;--color-slate-800: #1e293b;--color-slate-700: #334155;--color-slate-500: #64748b;--color-slate-400: #94a3b8;--color-slate-200: #e2e8f0;--color-slate-100: #f1f5f9;--color-slate-50: #f8fafc;--color-white: #ffffff;--radius-cerca: 1.25rem;--radius-cerca-sm: .75rem;--radius-cerca-lg: 2rem;--shadow-premium: 0 20px 25px -5px rgba(0, 0, 0, .02), 0 8px 10px -6px rgba(0, 0, 0, .02);--shadow-premium-hover: 0 30px 40px -5px rgba(0, 0, 0, .05), 0 15px 20px -5px rgba(0, 0, 0, .03);--shadow-glass: 0 8px 32px 0 rgba(31, 38, 135, .07);--shadow-sidebar: 4px 0 24px 0 rgba(0, 0, 0, .05);--shadow-glow-primary: 0 0 20px rgba(91, 194, 231, .15);--gradient-premium: linear-gradient(135deg, #002855 0%, #001a38 100%);--gradient-glass: linear-gradient(135deg, rgba(255, 255, 255, .1), rgba(255, 255, 255, .05));--gradient-accent: linear-gradient(135deg, #5BC2E7 0%, #002855 100%);--ant-primary-color: var(--color-primary);--ant-primary-color-hover: var(--color-primary-hover);--ant-primary-color-active: var(--color-primary-active);--ant-primary-color-outline: rgba(0, 40, 85, .2);--ant-success-color: var(--color-success);--ant-success-color-hover: #b3e040;--ant-success-color-active: #8fb82b;--ant-success-color-outline: rgba(162, 208, 51, .2);--ant-info-color: var(--color-primary);--ant-link-color: var(--color-primary-accent);--ant-link-color-hover: #4db3d9;--ant-link-color-active: var(--color-primary)}:root{--font-sans: \"Inter\", system-ui, sans-serif;--font-display: \"Outfit\", sans-serif}:root,[data-theme=light]{--color-bg-primary: var(--color-surface);--color-bg-secondary: var(--color-background);--color-text-primary: var(--color-slate-900);--color-text-secondary: var(--color-secondary);--color-text-muted: var(--color-secondary-light);--color-border-subtle: var(--color-slate-200);--color-border-strong: var(--color-slate-300);--color-brand: var(--color-primary);--color-brand-hover: var(--color-primary-hover);--color-focus-ring: var(--ant-primary-color-outline);--color-success: var(--color-success);--color-danger: var(--color-alert);--surface-glass-bg: rgba(255, 255, 255, .7);--surface-glass-border: rgba(255, 255, 255, .3);--surface-glass-blur: 12px;--surface-glass-shadow: var(--shadow-glass);--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: var(--font-sans);--font-weight-regular: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--radius-sm: var(--radius-cerca-sm);--radius-md: var(--radius-cerca);--radius-lg: var(--radius-cerca-lg);--radius-xl: 3rem;--radius-full: 9999px;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1)}[data-theme=dark]{--color-bg-primary: var(--color-slate-900);--color-bg-secondary: var(--color-slate-800);--color-text-primary: var(--color-white);--color-text-secondary: var(--color-slate-400);--color-text-muted: var(--color-slate-500);--color-border-subtle: var(--color-slate-700);--color-border-strong: var(--color-slate-600);--color-brand: var(--color-primary-light);--color-brand-hover: var(--color-primary-accent);--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)}.ad-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: var(--color-slate-100);--badge-neutral-text: var(--color-slate-700);--badge-neutral-border: var(--color-slate-200)}.ad-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)}.ad-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)}.ad-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)}.ad-header-tokens{--header-height: 72px;--header-bg: var(--color-surface);--header-border-color: var(--color-border);--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)}.ad-sidebar-tokens{--sidebar-width: 280px;--sidebar-collapsed-width: 80px;--sidebar-bg: var(--color-slate-900);--sidebar-border-color: var(--color-slate-800);--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: var(--color-primary);--sidebar-text-color: var(--color-surface);--sidebar-text-muted: var(--color-slate-400)}.ad-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)}:root{--modal-bg: var(--color-surface);--modal-overlay-bg: rgba(0, 0, 0, .5);--modal-radius: var(--radius-cerca);--modal-shadow: var(--shadow-premium);--modal-z-index: 1000;--modal-header-padding: 12px 24px;--modal-body-padding: 24px;--modal-footer-padding: 16px 24px;--modal-sm-width: 400px;--modal-md-width: 600px;--modal-lg-width: 900px}.premium-header-card{background:#fff;padding:1.5rem 2rem;border-radius:16px;box-shadow:var(--shadow-premium, 0 4px 20px -2px rgba(0, 0, 0, .1));margin-bottom:2rem;position:relative;overflow:hidden;border:1px solid rgba(0,0,0,.03)}.premium-header-card:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:4px;background:linear-gradient(to right,var(--color-primary),var(--color-primary-accent, #00d2ff))}.header-main{display:flex;justify-content:space-between;align-items:center;gap:1.5rem;flex-wrap:wrap}@media(max-width:768px){.header-main{flex-direction:column;align-items:stretch}}.title-group{display:flex;flex-direction:column;gap:.25rem}.premium-title{font-size:1.5rem;font-weight:800;letter-spacing:-.04em;margin:0;color:var(--color-slate-900, #1e293b);line-height:1.2}.premium-title .accent-text{background:linear-gradient(135deg,var(--color-primary) 0%,var(--color-primary-accent, #00d2ff) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;margin-left:.3rem}.premium-subtitle{margin-top:0rem;color:var(--color-slate-500, #64748b);font-size:.9rem;font-weight:500;letter-spacing:-.01em}.header-actions{display:flex;gap:var(--spacing-sm);align-items:center}@media(max-width:768px){.header-actions{width:100%;justify-content:flex-start}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AdButtonComponent, selector: "ad-button", inputs: ["variant", "type", "disabled", "loading", "icon", "size", "block"] }, { kind: "component", type: AdModalTriggerComponent, selector: "ad-modal-trigger", inputs: ["resource"], outputs: ["confirm", "cancel"] }] });
|
|
1889
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: AdDescriptionHeaderComponent, isStandalone: true, selector: "ad-description-header", inputs: { resource: { classPropertyName: "resource", publicName: "resource", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"premium-header-card\">\r\n <div class=\"header-main\">\r\n <div class=\"title-wrapper\">\r\n @if (backButton()) {\r\n <ad-button variant=\"ghost\" icon=\"arrow_back\" (click)=\"handleBack()\" class=\"back-btn\" />\r\n }\r\n <div class=\"title-group\">\r\n <h1 class=\"premium-title\">\r\n {{ title() }}\r\n @if (accentedTitle()) {\r\n <span class=\"accent-text\">\r\n {{ accentedTitle() }}\r\n </span>\r\n }\r\n </h1>\r\n @if (subtitle()) {\r\n <p class=\"premium-subtitle\">\r\n {{ subtitle() }}\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n @if (buttons() && buttons()!.length > 0) {\r\n <div class=\"header-actions\">\r\n @for (button of buttons(); track $index) {\r\n @if (button.isModalTrigger && button.modalResource) {\r\n <ad-modal-trigger [resource]=\"getModalTriggerResource(button)\"\r\n (confirm)=\"handleModalConfirm(button.onModalConfirm, $event)\"\r\n (cancel)=\"handleModalCancel(button.onModalCancel)\">\r\n </ad-modal-trigger>\r\n } @else {\r\n <ad-button [variant]=\"button.variant || 'primary'\" [type]=\"button.type || 'button'\"\r\n [disabled]=\"button.disabled || false\" (click)=\"handleButtonClick(button.onClick)\" [icon]=\"button.icon\">\r\n {{ button.label }}\r\n </ad-button>\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n\r\n<!-- Divider is no longer needed with the card style -->\r\n@if (showDivider() && false) {\r\n<div class=\"ad-description-header__divider\"></div>\r\n}", styles: [":root{--color-primary: #002855;--color-primary-hover: #003366;--color-primary-active: #001a38;--color-primary-light: #F1F5F9;--color-primary-accent: #5BC2E7;--color-background: #F8FAFC;--color-surface: #FFFFFF;--color-border: #F1F5F9;--color-secondary: #475569;--color-secondary-light: #94A3B8;--color-success: #A2D033;--color-success-bg: rgba(162, 208, 51, .05);--color-success-text: #7A9F26;--color-alert: #EF4444;--color-alert-bg: rgba(239, 68, 68, .05);--color-alert-text: #DC2626;--color-warning: #F59E0B;--color-warning-bg: rgba(245, 158, 11, .05);--color-warning-text: #D97706;--color-slate-900: #0f172a;--color-slate-800: #1e293b;--color-slate-700: #334155;--color-slate-500: #64748b;--color-slate-400: #94a3b8;--color-slate-200: #e2e8f0;--color-slate-100: #f1f5f9;--color-slate-50: #f8fafc;--color-white: #ffffff;--radius-cerca: 1.25rem;--radius-cerca-sm: .75rem;--radius-cerca-lg: 2rem;--shadow-premium: 0 20px 25px -5px rgba(0, 0, 0, .02), 0 8px 10px -6px rgba(0, 0, 0, .02);--shadow-premium-hover: 0 30px 40px -5px rgba(0, 0, 0, .05), 0 15px 20px -5px rgba(0, 0, 0, .03);--shadow-glass: 0 8px 32px 0 rgba(31, 38, 135, .07);--shadow-sidebar: 4px 0 24px 0 rgba(0, 0, 0, .05);--shadow-glow-primary: 0 0 20px rgba(91, 194, 231, .15);--gradient-premium: linear-gradient(135deg, #002855 0%, #001a38 100%);--gradient-glass: linear-gradient(135deg, rgba(255, 255, 255, .1), rgba(255, 255, 255, .05));--gradient-accent: linear-gradient(135deg, #5BC2E7 0%, #002855 100%);--ant-primary-color: var(--color-primary);--ant-primary-color-hover: var(--color-primary-hover);--ant-primary-color-active: var(--color-primary-active);--ant-primary-color-outline: rgba(0, 40, 85, .2);--ant-success-color: var(--color-success);--ant-success-color-hover: #b3e040;--ant-success-color-active: #8fb82b;--ant-success-color-outline: rgba(162, 208, 51, .2);--ant-info-color: var(--color-primary);--ant-link-color: var(--color-primary-accent);--ant-link-color-hover: #4db3d9;--ant-link-color-active: var(--color-primary)}:root{--font-sans: \"Inter\", system-ui, sans-serif;--font-display: \"Outfit\", sans-serif}:root,[data-theme=light]{--color-bg-primary: var(--color-surface);--color-bg-secondary: var(--color-background);--color-text-primary: var(--color-slate-900);--color-text-secondary: var(--color-secondary);--color-text-muted: var(--color-secondary-light);--color-border-subtle: var(--color-slate-200);--color-border-strong: var(--color-slate-300);--color-brand: var(--color-primary);--color-brand-hover: var(--color-primary-hover);--color-focus-ring: var(--ant-primary-color-outline);--color-success: var(--color-success);--color-danger: var(--color-alert);--surface-glass-bg: rgba(255, 255, 255, .7);--surface-glass-border: rgba(255, 255, 255, .3);--surface-glass-blur: 12px;--surface-glass-shadow: var(--shadow-glass);--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: var(--font-sans);--font-weight-regular: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--radius-sm: var(--radius-cerca-sm);--radius-md: var(--radius-cerca);--radius-lg: var(--radius-cerca-lg);--radius-xl: 3rem;--radius-full: 9999px;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1)}[data-theme=dark]{--color-bg-primary: var(--color-slate-900);--color-bg-secondary: var(--color-slate-800);--color-text-primary: var(--color-white);--color-text-secondary: var(--color-slate-400);--color-text-muted: var(--color-slate-500);--color-border-subtle: var(--color-slate-700);--color-border-strong: var(--color-slate-600);--color-brand: var(--color-primary-light);--color-brand-hover: var(--color-primary-accent);--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)}.ad-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: var(--color-slate-100);--badge-neutral-text: var(--color-slate-700);--badge-neutral-border: var(--color-slate-200)}.ad-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)}.ad-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)}.ad-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)}.ad-header-tokens{--header-height: 72px;--header-bg: var(--color-surface);--header-border-color: var(--color-border);--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)}.ad-sidebar-tokens{--sidebar-width: 280px;--sidebar-collapsed-width: 80px;--sidebar-bg: var(--color-slate-900);--sidebar-border-color: var(--color-slate-800);--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: var(--color-primary);--sidebar-text-color: var(--color-surface);--sidebar-text-muted: var(--color-slate-400)}.ad-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)}:root{--modal-bg: var(--color-surface);--modal-overlay-bg: rgba(0, 0, 0, .5);--modal-radius: var(--radius-cerca);--modal-shadow: var(--shadow-premium);--modal-z-index: 1000;--modal-header-padding: 12px 24px;--modal-body-padding: 24px;--modal-footer-padding: 16px 24px;--modal-sm-width: 400px;--modal-md-width: 600px;--modal-lg-width: 900px}.premium-header-card{background:#fff;padding:1.5rem 2rem;border-radius:16px;box-shadow:var(--shadow-premium, 0 4px 20px -2px rgba(0, 0, 0, .1));margin-bottom:2rem;position:relative;overflow:hidden;border:1px solid rgba(0,0,0,.03)}.premium-header-card:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:4px;background:linear-gradient(to right,var(--color-primary),var(--color-primary-accent, #00d2ff))}.header-main{display:flex;justify-content:space-between;align-items:center;gap:1.5rem;flex-wrap:wrap}@media(max-width:768px){.header-main{flex-direction:column;align-items:stretch}}.title-wrapper{display:flex;align-items:center;gap:1rem}.title-group{display:flex;flex-direction:column;gap:.25rem}.back-btn ::ng-deep button{padding:.5rem;height:2.5rem;width:2.5rem;border-radius:50%;color:var(--color-slate-500, #64748b);display:flex;align-items:center;justify-content:center}.back-btn ::ng-deep button:hover{background-color:var(--color-slate-100, #f1f5f9);color:var(--color-slate-700, #334155)}.premium-title{font-size:1.5rem;font-weight:800;letter-spacing:-.04em;margin:0;color:var(--color-slate-900, #1e293b);line-height:1.2}.premium-title .accent-text{background:linear-gradient(135deg,var(--color-primary) 0%,var(--color-primary-accent, #00d2ff) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;margin-left:.3rem}.premium-subtitle{margin-top:0rem;color:var(--color-slate-500, #64748b);font-size:.9rem;font-weight:500;letter-spacing:-.01em}.header-actions{display:flex;gap:var(--spacing-sm);align-items:center}@media(max-width:768px){.header-actions{width:100%;justify-content:flex-start}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AdButtonComponent, selector: "ad-button", inputs: ["variant", "type", "disabled", "loading", "icon", "size", "block"] }, { kind: "component", type: AdModalTriggerComponent, selector: "ad-modal-trigger", inputs: ["resource"], outputs: ["confirm", "cancel"] }] });
|
|
1756
1890
|
}
|
|
1757
1891
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AdDescriptionHeaderComponent, decorators: [{
|
|
1758
1892
|
type: Component,
|
|
1759
|
-
args: [{ selector: 'ad-description-header', standalone: true, imports: [CommonModule, AdButtonComponent, AdModalTriggerComponent], template: "<div class=\"premium-header-card\">\r\n <div class=\"header-main\">\r\n <div class=\"title-group\">\r\n <h1 class=\"premium-title\">\r\n {{ title() }}\r\n @if (accentedTitle()) {\r\n <span class=\"accent-text\">\r\n {{ accentedTitle() }}\r\n </span>\r\n }\r\n </h1>\r\n @if (subtitle()) {\r\n <p class=\"premium-subtitle\">\r\n {{ subtitle() }}\r\n </p>\r\n }\r\n </div>\r\n @if (buttons() && buttons()!.length > 0) {\r\n <div class=\"header-actions\">\r\n @for (button of buttons(); track $index) {\r\n @if (button.isModalTrigger && button.modalResource) {\r\n <ad-modal-trigger [resource]=\"getModalTriggerResource(button)\"\r\n (confirm)=\"handleModalConfirm(button.onModalConfirm, $event)\"\r\n (cancel)=\"handleModalCancel(button.onModalCancel)\">\r\n </ad-modal-trigger>\r\n } @else {\r\n <ad-button [variant]=\"button.variant || 'primary'\" [type]=\"button.type || 'button'\"\r\n [disabled]=\"button.disabled || false\" (click)=\"handleButtonClick(button.onClick)\" [icon]=\"button.icon\">\r\n {{ button.label }}\r\n </ad-button>\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n\r\n<!-- Divider is no longer needed with the card style -->\r\n@if (showDivider() && false) {\r\n<div class=\"ad-description-header__divider\"></div>\r\n}", styles: [":root{--color-primary: #002855;--color-primary-hover: #003366;--color-primary-active: #001a38;--color-primary-light: #F1F5F9;--color-primary-accent: #5BC2E7;--color-background: #F8FAFC;--color-surface: #FFFFFF;--color-border: #F1F5F9;--color-secondary: #475569;--color-secondary-light: #94A3B8;--color-success: #A2D033;--color-success-bg: rgba(162, 208, 51, .05);--color-success-text: #7A9F26;--color-alert: #EF4444;--color-alert-bg: rgba(239, 68, 68, .05);--color-alert-text: #DC2626;--color-warning: #F59E0B;--color-warning-bg: rgba(245, 158, 11, .05);--color-warning-text: #D97706;--color-slate-900: #0f172a;--color-slate-800: #1e293b;--color-slate-700: #334155;--color-slate-500: #64748b;--color-slate-400: #94a3b8;--color-slate-200: #e2e8f0;--color-slate-100: #f1f5f9;--color-slate-50: #f8fafc;--color-white: #ffffff;--radius-cerca: 1.25rem;--radius-cerca-sm: .75rem;--radius-cerca-lg: 2rem;--shadow-premium: 0 20px 25px -5px rgba(0, 0, 0, .02), 0 8px 10px -6px rgba(0, 0, 0, .02);--shadow-premium-hover: 0 30px 40px -5px rgba(0, 0, 0, .05), 0 15px 20px -5px rgba(0, 0, 0, .03);--shadow-glass: 0 8px 32px 0 rgba(31, 38, 135, .07);--shadow-sidebar: 4px 0 24px 0 rgba(0, 0, 0, .05);--shadow-glow-primary: 0 0 20px rgba(91, 194, 231, .15);--gradient-premium: linear-gradient(135deg, #002855 0%, #001a38 100%);--gradient-glass: linear-gradient(135deg, rgba(255, 255, 255, .1), rgba(255, 255, 255, .05));--gradient-accent: linear-gradient(135deg, #5BC2E7 0%, #002855 100%);--ant-primary-color: var(--color-primary);--ant-primary-color-hover: var(--color-primary-hover);--ant-primary-color-active: var(--color-primary-active);--ant-primary-color-outline: rgba(0, 40, 85, .2);--ant-success-color: var(--color-success);--ant-success-color-hover: #b3e040;--ant-success-color-active: #8fb82b;--ant-success-color-outline: rgba(162, 208, 51, .2);--ant-info-color: var(--color-primary);--ant-link-color: var(--color-primary-accent);--ant-link-color-hover: #4db3d9;--ant-link-color-active: var(--color-primary)}:root{--font-sans: \"Inter\", system-ui, sans-serif;--font-display: \"Outfit\", sans-serif}:root,[data-theme=light]{--color-bg-primary: var(--color-surface);--color-bg-secondary: var(--color-background);--color-text-primary: var(--color-slate-900);--color-text-secondary: var(--color-secondary);--color-text-muted: var(--color-secondary-light);--color-border-subtle: var(--color-slate-200);--color-border-strong: var(--color-slate-300);--color-brand: var(--color-primary);--color-brand-hover: var(--color-primary-hover);--color-focus-ring: var(--ant-primary-color-outline);--color-success: var(--color-success);--color-danger: var(--color-alert);--surface-glass-bg: rgba(255, 255, 255, .7);--surface-glass-border: rgba(255, 255, 255, .3);--surface-glass-blur: 12px;--surface-glass-shadow: var(--shadow-glass);--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: var(--font-sans);--font-weight-regular: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--radius-sm: var(--radius-cerca-sm);--radius-md: var(--radius-cerca);--radius-lg: var(--radius-cerca-lg);--radius-xl: 3rem;--radius-full: 9999px;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1)}[data-theme=dark]{--color-bg-primary: var(--color-slate-900);--color-bg-secondary: var(--color-slate-800);--color-text-primary: var(--color-white);--color-text-secondary: var(--color-slate-400);--color-text-muted: var(--color-slate-500);--color-border-subtle: var(--color-slate-700);--color-border-strong: var(--color-slate-600);--color-brand: var(--color-primary-light);--color-brand-hover: var(--color-primary-accent);--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)}.ad-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: var(--color-slate-100);--badge-neutral-text: var(--color-slate-700);--badge-neutral-border: var(--color-slate-200)}.ad-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)}.ad-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)}.ad-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)}.ad-header-tokens{--header-height: 72px;--header-bg: var(--color-surface);--header-border-color: var(--color-border);--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)}.ad-sidebar-tokens{--sidebar-width: 280px;--sidebar-collapsed-width: 80px;--sidebar-bg: var(--color-slate-900);--sidebar-border-color: var(--color-slate-800);--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: var(--color-primary);--sidebar-text-color: var(--color-surface);--sidebar-text-muted: var(--color-slate-400)}.ad-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)}:root{--modal-bg: var(--color-surface);--modal-overlay-bg: rgba(0, 0, 0, .5);--modal-radius: var(--radius-cerca);--modal-shadow: var(--shadow-premium);--modal-z-index: 1000;--modal-header-padding: 12px 24px;--modal-body-padding: 24px;--modal-footer-padding: 16px 24px;--modal-sm-width: 400px;--modal-md-width: 600px;--modal-lg-width: 900px}.premium-header-card{background:#fff;padding:1.5rem 2rem;border-radius:16px;box-shadow:var(--shadow-premium, 0 4px 20px -2px rgba(0, 0, 0, .1));margin-bottom:2rem;position:relative;overflow:hidden;border:1px solid rgba(0,0,0,.03)}.premium-header-card:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:4px;background:linear-gradient(to right,var(--color-primary),var(--color-primary-accent, #00d2ff))}.header-main{display:flex;justify-content:space-between;align-items:center;gap:1.5rem;flex-wrap:wrap}@media(max-width:768px){.header-main{flex-direction:column;align-items:stretch}}.title-group{display:flex;flex-direction:column;gap:.25rem}.premium-title{font-size:1.5rem;font-weight:800;letter-spacing:-.04em;margin:0;color:var(--color-slate-900, #1e293b);line-height:1.2}.premium-title .accent-text{background:linear-gradient(135deg,var(--color-primary) 0%,var(--color-primary-accent, #00d2ff) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;margin-left:.3rem}.premium-subtitle{margin-top:0rem;color:var(--color-slate-500, #64748b);font-size:.9rem;font-weight:500;letter-spacing:-.01em}.header-actions{display:flex;gap:var(--spacing-sm);align-items:center}@media(max-width:768px){.header-actions{width:100%;justify-content:flex-start}}\n"] }]
|
|
1893
|
+
args: [{ selector: 'ad-description-header', standalone: true, imports: [CommonModule, AdButtonComponent, AdModalTriggerComponent], template: "<div class=\"premium-header-card\">\r\n <div class=\"header-main\">\r\n <div class=\"title-wrapper\">\r\n @if (backButton()) {\r\n <ad-button variant=\"ghost\" icon=\"arrow_back\" (click)=\"handleBack()\" class=\"back-btn\" />\r\n }\r\n <div class=\"title-group\">\r\n <h1 class=\"premium-title\">\r\n {{ title() }}\r\n @if (accentedTitle()) {\r\n <span class=\"accent-text\">\r\n {{ accentedTitle() }}\r\n </span>\r\n }\r\n </h1>\r\n @if (subtitle()) {\r\n <p class=\"premium-subtitle\">\r\n {{ subtitle() }}\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n @if (buttons() && buttons()!.length > 0) {\r\n <div class=\"header-actions\">\r\n @for (button of buttons(); track $index) {\r\n @if (button.isModalTrigger && button.modalResource) {\r\n <ad-modal-trigger [resource]=\"getModalTriggerResource(button)\"\r\n (confirm)=\"handleModalConfirm(button.onModalConfirm, $event)\"\r\n (cancel)=\"handleModalCancel(button.onModalCancel)\">\r\n </ad-modal-trigger>\r\n } @else {\r\n <ad-button [variant]=\"button.variant || 'primary'\" [type]=\"button.type || 'button'\"\r\n [disabled]=\"button.disabled || false\" (click)=\"handleButtonClick(button.onClick)\" [icon]=\"button.icon\">\r\n {{ button.label }}\r\n </ad-button>\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n\r\n<!-- Divider is no longer needed with the card style -->\r\n@if (showDivider() && false) {\r\n<div class=\"ad-description-header__divider\"></div>\r\n}", styles: [":root{--color-primary: #002855;--color-primary-hover: #003366;--color-primary-active: #001a38;--color-primary-light: #F1F5F9;--color-primary-accent: #5BC2E7;--color-background: #F8FAFC;--color-surface: #FFFFFF;--color-border: #F1F5F9;--color-secondary: #475569;--color-secondary-light: #94A3B8;--color-success: #A2D033;--color-success-bg: rgba(162, 208, 51, .05);--color-success-text: #7A9F26;--color-alert: #EF4444;--color-alert-bg: rgba(239, 68, 68, .05);--color-alert-text: #DC2626;--color-warning: #F59E0B;--color-warning-bg: rgba(245, 158, 11, .05);--color-warning-text: #D97706;--color-slate-900: #0f172a;--color-slate-800: #1e293b;--color-slate-700: #334155;--color-slate-500: #64748b;--color-slate-400: #94a3b8;--color-slate-200: #e2e8f0;--color-slate-100: #f1f5f9;--color-slate-50: #f8fafc;--color-white: #ffffff;--radius-cerca: 1.25rem;--radius-cerca-sm: .75rem;--radius-cerca-lg: 2rem;--shadow-premium: 0 20px 25px -5px rgba(0, 0, 0, .02), 0 8px 10px -6px rgba(0, 0, 0, .02);--shadow-premium-hover: 0 30px 40px -5px rgba(0, 0, 0, .05), 0 15px 20px -5px rgba(0, 0, 0, .03);--shadow-glass: 0 8px 32px 0 rgba(31, 38, 135, .07);--shadow-sidebar: 4px 0 24px 0 rgba(0, 0, 0, .05);--shadow-glow-primary: 0 0 20px rgba(91, 194, 231, .15);--gradient-premium: linear-gradient(135deg, #002855 0%, #001a38 100%);--gradient-glass: linear-gradient(135deg, rgba(255, 255, 255, .1), rgba(255, 255, 255, .05));--gradient-accent: linear-gradient(135deg, #5BC2E7 0%, #002855 100%);--ant-primary-color: var(--color-primary);--ant-primary-color-hover: var(--color-primary-hover);--ant-primary-color-active: var(--color-primary-active);--ant-primary-color-outline: rgba(0, 40, 85, .2);--ant-success-color: var(--color-success);--ant-success-color-hover: #b3e040;--ant-success-color-active: #8fb82b;--ant-success-color-outline: rgba(162, 208, 51, .2);--ant-info-color: var(--color-primary);--ant-link-color: var(--color-primary-accent);--ant-link-color-hover: #4db3d9;--ant-link-color-active: var(--color-primary)}:root{--font-sans: \"Inter\", system-ui, sans-serif;--font-display: \"Outfit\", sans-serif}:root,[data-theme=light]{--color-bg-primary: var(--color-surface);--color-bg-secondary: var(--color-background);--color-text-primary: var(--color-slate-900);--color-text-secondary: var(--color-secondary);--color-text-muted: var(--color-secondary-light);--color-border-subtle: var(--color-slate-200);--color-border-strong: var(--color-slate-300);--color-brand: var(--color-primary);--color-brand-hover: var(--color-primary-hover);--color-focus-ring: var(--ant-primary-color-outline);--color-success: var(--color-success);--color-danger: var(--color-alert);--surface-glass-bg: rgba(255, 255, 255, .7);--surface-glass-border: rgba(255, 255, 255, .3);--surface-glass-blur: 12px;--surface-glass-shadow: var(--shadow-glass);--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: var(--font-sans);--font-weight-regular: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--radius-sm: var(--radius-cerca-sm);--radius-md: var(--radius-cerca);--radius-lg: var(--radius-cerca-lg);--radius-xl: 3rem;--radius-full: 9999px;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1)}[data-theme=dark]{--color-bg-primary: var(--color-slate-900);--color-bg-secondary: var(--color-slate-800);--color-text-primary: var(--color-white);--color-text-secondary: var(--color-slate-400);--color-text-muted: var(--color-slate-500);--color-border-subtle: var(--color-slate-700);--color-border-strong: var(--color-slate-600);--color-brand: var(--color-primary-light);--color-brand-hover: var(--color-primary-accent);--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)}.ad-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: var(--color-slate-100);--badge-neutral-text: var(--color-slate-700);--badge-neutral-border: var(--color-slate-200)}.ad-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)}.ad-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)}.ad-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)}.ad-header-tokens{--header-height: 72px;--header-bg: var(--color-surface);--header-border-color: var(--color-border);--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)}.ad-sidebar-tokens{--sidebar-width: 280px;--sidebar-collapsed-width: 80px;--sidebar-bg: var(--color-slate-900);--sidebar-border-color: var(--color-slate-800);--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: var(--color-primary);--sidebar-text-color: var(--color-surface);--sidebar-text-muted: var(--color-slate-400)}.ad-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)}:root{--modal-bg: var(--color-surface);--modal-overlay-bg: rgba(0, 0, 0, .5);--modal-radius: var(--radius-cerca);--modal-shadow: var(--shadow-premium);--modal-z-index: 1000;--modal-header-padding: 12px 24px;--modal-body-padding: 24px;--modal-footer-padding: 16px 24px;--modal-sm-width: 400px;--modal-md-width: 600px;--modal-lg-width: 900px}.premium-header-card{background:#fff;padding:1.5rem 2rem;border-radius:16px;box-shadow:var(--shadow-premium, 0 4px 20px -2px rgba(0, 0, 0, .1));margin-bottom:2rem;position:relative;overflow:hidden;border:1px solid rgba(0,0,0,.03)}.premium-header-card:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:4px;background:linear-gradient(to right,var(--color-primary),var(--color-primary-accent, #00d2ff))}.header-main{display:flex;justify-content:space-between;align-items:center;gap:1.5rem;flex-wrap:wrap}@media(max-width:768px){.header-main{flex-direction:column;align-items:stretch}}.title-wrapper{display:flex;align-items:center;gap:1rem}.title-group{display:flex;flex-direction:column;gap:.25rem}.back-btn ::ng-deep button{padding:.5rem;height:2.5rem;width:2.5rem;border-radius:50%;color:var(--color-slate-500, #64748b);display:flex;align-items:center;justify-content:center}.back-btn ::ng-deep button:hover{background-color:var(--color-slate-100, #f1f5f9);color:var(--color-slate-700, #334155)}.premium-title{font-size:1.5rem;font-weight:800;letter-spacing:-.04em;margin:0;color:var(--color-slate-900, #1e293b);line-height:1.2}.premium-title .accent-text{background:linear-gradient(135deg,var(--color-primary) 0%,var(--color-primary-accent, #00d2ff) 100%);-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;margin-left:.3rem}.premium-subtitle{margin-top:0rem;color:var(--color-slate-500, #64748b);font-size:.9rem;font-weight:500;letter-spacing:-.01em}.header-actions{display:flex;gap:var(--spacing-sm);align-items:center}@media(max-width:768px){.header-actions{width:100%;justify-content:flex-start}}\n"] }]
|
|
1760
1894
|
}], propDecorators: { resource: [{ type: i0.Input, args: [{ isSignal: true, alias: "resource", required: true }] }] } });
|
|
1761
1895
|
|
|
1762
1896
|
const DescriptionHeaderButtonSchema = z.object({
|
|
@@ -1778,6 +1912,8 @@ const DescriptionHeaderResourceSchema = z.object({
|
|
|
1778
1912
|
subtitle: z.string().optional(),
|
|
1779
1913
|
buttons: z.array(DescriptionHeaderButtonSchema).optional(),
|
|
1780
1914
|
showDivider: z.boolean().optional(),
|
|
1915
|
+
backButton: z.boolean().optional(),
|
|
1916
|
+
onBack: z.custom().optional(),
|
|
1781
1917
|
});
|
|
1782
1918
|
|
|
1783
1919
|
class AdFormFieldComponent {
|
|
@@ -1790,11 +1926,11 @@ class AdFormFieldComponent {
|
|
|
1790
1926
|
forAttr = computed(() => this.resource().for || '', ...(ngDevMode ? [{ debugName: "forAttr" }] : []));
|
|
1791
1927
|
hasError = computed(() => !!this.errorMessage(), ...(ngDevMode ? [{ debugName: "hasError" }] : []));
|
|
1792
1928
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AdFormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1793
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: AdFormFieldComponent, isStandalone: true, selector: "ad-form-field", inputs: { resource: { classPropertyName: "resource", publicName: "resource", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"ad-form-field\" [class.has-error]=\"hasError()\">\r\n @if (label()) {\r\n <ad-label [text]=\"label()\" [for]=\"forAttr()\" [required]=\"required()\" [error]=\"hasError()\">\r\n </ad-label>\r\n }\r\n\r\n <div class=\"ad-form-field-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n @if (hint() || errorMessage()) {\r\n <div class=\"ad-form-field-info\">\r\n @if (errorMessage()) {\r\n <span class=\"ad-form-field-error\">{{ errorMessage() }}</span>\r\n }\r\n @if (hint() && !errorMessage()) {\r\n <span class=\"ad-form-field-hint\">{{ hint() }}</span>\r\n }\r\n </div>\r\n }\r\n</div>", styles: [".ad-form-field{display:flex;flex-direction:column;
|
|
1929
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: AdFormFieldComponent, isStandalone: true, selector: "ad-form-field", inputs: { resource: { classPropertyName: "resource", publicName: "resource", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<div class=\"ad-form-field\" [class.has-error]=\"hasError()\">\r\n @if (label()) {\r\n <ad-label [text]=\"label()\" [for]=\"forAttr()\" [required]=\"required()\" [error]=\"hasError()\">\r\n </ad-label>\r\n }\r\n\r\n <div class=\"ad-form-field-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n @if (hint() || errorMessage()) {\r\n <div class=\"ad-form-field-info\">\r\n @if (errorMessage()) {\r\n <span class=\"ad-form-field-error\">{{ errorMessage() }}</span>\r\n }\r\n @if (hint() && !errorMessage()) {\r\n <span class=\"ad-form-field-hint\">{{ hint() }}</span>\r\n }\r\n </div>\r\n }\r\n</div>", styles: [".ad-form-field{display:flex;flex-direction:column;width:100%}.ad-form-field .ad-form-field-content{position:relative;display:flex;flex-direction:column}.ad-form-field .ad-form-field-info{margin-top:var(--form-field-message-margin);min-height:1.25rem}.ad-form-field .ad-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}.ad-form-field .ad-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: "component", type: AdLabelComponent, selector: "ad-label", inputs: ["text", "for", "required", "error"] }] });
|
|
1794
1930
|
}
|
|
1795
1931
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AdFormFieldComponent, decorators: [{
|
|
1796
1932
|
type: Component,
|
|
1797
|
-
args: [{ selector: 'ad-form-field', standalone: true, imports: [CommonModule, AdLabelComponent], template: "<div class=\"ad-form-field\" [class.has-error]=\"hasError()\">\r\n @if (label()) {\r\n <ad-label [text]=\"label()\" [for]=\"forAttr()\" [required]=\"required()\" [error]=\"hasError()\">\r\n </ad-label>\r\n }\r\n\r\n <div class=\"ad-form-field-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n @if (hint() || errorMessage()) {\r\n <div class=\"ad-form-field-info\">\r\n @if (errorMessage()) {\r\n <span class=\"ad-form-field-error\">{{ errorMessage() }}</span>\r\n }\r\n @if (hint() && !errorMessage()) {\r\n <span class=\"ad-form-field-hint\">{{ hint() }}</span>\r\n }\r\n </div>\r\n }\r\n</div>", styles: [".ad-form-field{display:flex;flex-direction:column;
|
|
1933
|
+
args: [{ selector: 'ad-form-field', standalone: true, imports: [CommonModule, AdLabelComponent], template: "<div class=\"ad-form-field\" [class.has-error]=\"hasError()\">\r\n @if (label()) {\r\n <ad-label [text]=\"label()\" [for]=\"forAttr()\" [required]=\"required()\" [error]=\"hasError()\">\r\n </ad-label>\r\n }\r\n\r\n <div class=\"ad-form-field-content\">\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n @if (hint() || errorMessage()) {\r\n <div class=\"ad-form-field-info\">\r\n @if (errorMessage()) {\r\n <span class=\"ad-form-field-error\">{{ errorMessage() }}</span>\r\n }\r\n @if (hint() && !errorMessage()) {\r\n <span class=\"ad-form-field-hint\">{{ hint() }}</span>\r\n }\r\n </div>\r\n }\r\n</div>", styles: [".ad-form-field{display:flex;flex-direction:column;width:100%}.ad-form-field .ad-form-field-content{position:relative;display:flex;flex-direction:column}.ad-form-field .ad-form-field-info{margin-top:var(--form-field-message-margin);min-height:1.25rem}.ad-form-field .ad-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}.ad-form-field .ad-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"] }]
|
|
1798
1934
|
}], propDecorators: { resource: [{ type: i0.Input, args: [{ isSignal: true, alias: "resource", required: true }] }] } });
|
|
1799
1935
|
|
|
1800
1936
|
const FormFieldResourceSchema = z.object({
|
|
@@ -2043,7 +2179,7 @@ class AdLoginComponent {
|
|
|
2043
2179
|
return (control && control.invalid && (control.dirty || control.touched)) || false;
|
|
2044
2180
|
}
|
|
2045
2181
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AdLoginComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2046
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: AdLoginComponent, isStandalone: true, selector: "ad-login", inputs: { resource: { classPropertyName: "resource", publicName: "resource", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { loginSubmit: "loginSubmit", forgotPasswordClick: "forgotPasswordClick" }, ngImport: i0, template: "<div class=\"w-full max-w-md space-y-8 bg-white p-8 rounded-xl shadow-lg border border-slate-100\">\r\n
|
|
2182
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: AdLoginComponent, isStandalone: true, selector: "ad-login", inputs: { resource: { classPropertyName: "resource", publicName: "resource", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { loginSubmit: "loginSubmit", forgotPasswordClick: "forgotPasswordClick" }, ngImport: i0, template: "<div class=\"min-h-screen flex items-center justify-center bg-auth-gradient py-12 px-4 sm:px-6 lg:px-8\">\r\n <div class=\"w-full max-w-md space-y-8 bg-white p-8 rounded-xl shadow-lg border border-slate-100\">\r\n <div class=\"text-center\">\r\n @if (logo()) {\r\n <img [src]=\"logo()\" alt=\"Logo\" class=\"mx-auto h-12 w-auto\" />\r\n } @else if (icon()) {\r\n <div class=\"mx-auto h-12 w-12 flex items-center justify-center rounded-full bg-sky-100 text-sky-600\">\r\n <!-- Fallback icon or remove nz-icon -->\r\n <span class=\"text-2xl font-bold\">C</span>\r\n </div>\r\n }\r\n <h2 class=\"mt-6 text-3xl font-extrabold text-cerca-navy\">\r\n {{ title() }}\r\n @if (titleAccent()) {\r\n <span class=\"accent-text\">{{ titleAccent() }}</span>\r\n }\r\n </h2>\r\n <p class=\"mt-2 text-sm text-slate-600 uppercase tracking-wide\">{{ subtitle() }}</p>\r\n </div>\r\n\r\n @if (errorMessage()) {\r\n <div class=\"bg-red-50 border-l-4 border-red-500 p-4 mb-4 rounded-md\">\r\n <div class=\"flex\">\r\n <div class=\"ml-3\">\r\n <p class=\"text-sm text-red-700\">{{ errorMessage() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <form [formGroup]=\"loginForm\" class=\"mt-8 space-y-6\" (ngSubmit)=\"submitForm()\">\r\n <div class=\"space-y-4\">\r\n <div class=\"form-group\">\r\n <ad-input formControlName=\"email\" placeholder=\"correo@ejemplo.com\" label=\"Correo Electr\u00F3nico\"\r\n type=\"email\" prefix=\"user\" [error]=\"fieldInvalid('email')\">\r\n </ad-input>\r\n @if (fieldInvalid('email')) {\r\n <p class=\"mt-1 text-sm text-red-600\">\r\n @if (loginForm.get('email')?.hasError('required')) { El campo es requerido }\r\n @else { Ingrese un correo v\u00E1lido }\r\n </p>\r\n }\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <ad-input formControlName=\"password\" placeholder=\"********\" label=\"Contrase\u00F1a\" type=\"password\"\r\n prefix=\"lock\" [error]=\"fieldInvalid('password')\">\r\n </ad-input>\r\n @if (fieldInvalid('password')) {\r\n <p class=\"mt-1 text-sm text-red-600\">\r\n La contrase\u00F1a es requerida\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex items-center justify-between\">\r\n <div class=\"flex items-center\">\r\n <input id=\"remember-me\" formControlName=\"remember\" type=\"checkbox\"\r\n class=\"h-4 w-4 rounded border-slate-300 text-sky-600 focus:ring-sky-600\">\r\n <label for=\"remember-me\" class=\"ml-2 block text-sm text-slate-900\">Recordarme</label>\r\n </div>\r\n\r\n @if (recoverPasswordUrl()) {\r\n <a [href]=\"recoverPasswordUrl()\" class=\"text-sm font-medium text-sky-600 hover:text-sky-500\">\r\n {{ forgotPasswordLabel() }}\r\n </a>\r\n } @else {\r\n <a class=\"text-sm font-medium text-sky-600 hover:text-sky-500 cursor-pointer\"\r\n (click)=\"forgotPasswordClick.emit()\">\r\n {{ forgotPasswordLabel() }}\r\n </a>\r\n }\r\n </div>\r\n\r\n <div>\r\n <div>\r\n <ad-button [loading]=\"loading()\" variant=\"primary\" type=\"submit\" [block]=\"true\"\r\n class=\"w-full justify-center\" [disabled]=\"loginForm.invalid || loading()\">\r\n Iniciar Sesi\u00F3n\r\n </ad-button>\r\n </div>\r\n </div>\r\n </form>\r\n\r\n <div class=\"mt-6 text-center text-xs text-slate-400\">\r\n <p>\u00BFNecesitas ayuda? Contacta a <a [href]=\"'mailto:' + supportEmail()\"\r\n class=\"hover:text-sky-600 transition-colors\">{{ supportEmail() }}</a></p>\r\n </div>\r\n </div>\r\n</div>", styles: [""], 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.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { 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: AdInputComponent, selector: "ad-input", inputs: ["type", "placeholder", "label", "error", "rows", "disabled", "size", "prefix", "suffix", "mask"] }, { kind: "component", type: AdButtonComponent, selector: "ad-button", inputs: ["variant", "type", "disabled", "loading", "icon", "size", "block"] }] });
|
|
2047
2183
|
}
|
|
2048
2184
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: AdLoginComponent, decorators: [{
|
|
2049
2185
|
type: Component,
|
|
@@ -2052,7 +2188,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
|
|
|
2052
2188
|
ReactiveFormsModule,
|
|
2053
2189
|
AdInputComponent,
|
|
2054
2190
|
AdButtonComponent
|
|
2055
|
-
], template: "<div class=\"w-full max-w-md space-y-8 bg-white p-8 rounded-xl shadow-lg border border-slate-100\">\r\n
|
|
2191
|
+
], template: "<div class=\"min-h-screen flex items-center justify-center bg-auth-gradient py-12 px-4 sm:px-6 lg:px-8\">\r\n <div class=\"w-full max-w-md space-y-8 bg-white p-8 rounded-xl shadow-lg border border-slate-100\">\r\n <div class=\"text-center\">\r\n @if (logo()) {\r\n <img [src]=\"logo()\" alt=\"Logo\" class=\"mx-auto h-12 w-auto\" />\r\n } @else if (icon()) {\r\n <div class=\"mx-auto h-12 w-12 flex items-center justify-center rounded-full bg-sky-100 text-sky-600\">\r\n <!-- Fallback icon or remove nz-icon -->\r\n <span class=\"text-2xl font-bold\">C</span>\r\n </div>\r\n }\r\n <h2 class=\"mt-6 text-3xl font-extrabold text-cerca-navy\">\r\n {{ title() }}\r\n @if (titleAccent()) {\r\n <span class=\"accent-text\">{{ titleAccent() }}</span>\r\n }\r\n </h2>\r\n <p class=\"mt-2 text-sm text-slate-600 uppercase tracking-wide\">{{ subtitle() }}</p>\r\n </div>\r\n\r\n @if (errorMessage()) {\r\n <div class=\"bg-red-50 border-l-4 border-red-500 p-4 mb-4 rounded-md\">\r\n <div class=\"flex\">\r\n <div class=\"ml-3\">\r\n <p class=\"text-sm text-red-700\">{{ errorMessage() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <form [formGroup]=\"loginForm\" class=\"mt-8 space-y-6\" (ngSubmit)=\"submitForm()\">\r\n <div class=\"space-y-4\">\r\n <div class=\"form-group\">\r\n <ad-input formControlName=\"email\" placeholder=\"correo@ejemplo.com\" label=\"Correo Electr\u00F3nico\"\r\n type=\"email\" prefix=\"user\" [error]=\"fieldInvalid('email')\">\r\n </ad-input>\r\n @if (fieldInvalid('email')) {\r\n <p class=\"mt-1 text-sm text-red-600\">\r\n @if (loginForm.get('email')?.hasError('required')) { El campo es requerido }\r\n @else { Ingrese un correo v\u00E1lido }\r\n </p>\r\n }\r\n </div>\r\n\r\n <div class=\"form-group\">\r\n <ad-input formControlName=\"password\" placeholder=\"********\" label=\"Contrase\u00F1a\" type=\"password\"\r\n prefix=\"lock\" [error]=\"fieldInvalid('password')\">\r\n </ad-input>\r\n @if (fieldInvalid('password')) {\r\n <p class=\"mt-1 text-sm text-red-600\">\r\n La contrase\u00F1a es requerida\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex items-center justify-between\">\r\n <div class=\"flex items-center\">\r\n <input id=\"remember-me\" formControlName=\"remember\" type=\"checkbox\"\r\n class=\"h-4 w-4 rounded border-slate-300 text-sky-600 focus:ring-sky-600\">\r\n <label for=\"remember-me\" class=\"ml-2 block text-sm text-slate-900\">Recordarme</label>\r\n </div>\r\n\r\n @if (recoverPasswordUrl()) {\r\n <a [href]=\"recoverPasswordUrl()\" class=\"text-sm font-medium text-sky-600 hover:text-sky-500\">\r\n {{ forgotPasswordLabel() }}\r\n </a>\r\n } @else {\r\n <a class=\"text-sm font-medium text-sky-600 hover:text-sky-500 cursor-pointer\"\r\n (click)=\"forgotPasswordClick.emit()\">\r\n {{ forgotPasswordLabel() }}\r\n </a>\r\n }\r\n </div>\r\n\r\n <div>\r\n <div>\r\n <ad-button [loading]=\"loading()\" variant=\"primary\" type=\"submit\" [block]=\"true\"\r\n class=\"w-full justify-center\" [disabled]=\"loginForm.invalid || loading()\">\r\n Iniciar Sesi\u00F3n\r\n </ad-button>\r\n </div>\r\n </div>\r\n </form>\r\n\r\n <div class=\"mt-6 text-center text-xs text-slate-400\">\r\n <p>\u00BFNecesitas ayuda? Contacta a <a [href]=\"'mailto:' + supportEmail()\"\r\n class=\"hover:text-sky-600 transition-colors\">{{ supportEmail() }}</a></p>\r\n </div>\r\n </div>\r\n</div>" }]
|
|
2056
2192
|
}], propDecorators: { resource: [{ type: i0.Input, args: [{ isSignal: true, alias: "resource", required: true }] }], loginSubmit: [{ type: i0.Output, args: ["loginSubmit"] }], forgotPasswordClick: [{ type: i0.Output, args: ["forgotPasswordClick"] }] } });
|
|
2057
2193
|
|
|
2058
2194
|
const LoginResourceSchema = z.object({
|
|
@@ -2861,5 +2997,5 @@ const ListPageTemplateResourceSchema = z.object({
|
|
|
2861
2997
|
* Generated bundle index. Do not edit.
|
|
2862
2998
|
*/
|
|
2863
2999
|
|
|
2864
|
-
export { AdAdminLayoutComponent, AdAuthLayoutComponent, AdBadgeComponent, AdButtonComponent, AdCardComponent, AdDashboardTemplateComponent, AdDataTableComponent, AdDescriptionHeaderComponent, AdDocViewerComponent, AdDocumentationWrapperComponent, AdFormFieldComponent, AdFormLayoutComponent, AdFormPageTemplateComponent, AdFormSectionComponent, AdHeaderComponent, AdIconComponent, AdInputComponent, AdLabelComponent, AdListPageTemplateComponent, AdLoadingComponent, AdLoginComponent, AdModalComponent, AdModalService, AdModalTriggerComponent, AdModalWrapperComponent, AdSearchBarComponent, AdSelectComponent, AdSidebarComponent, AdStatCardComponent, AdSwitchComponent, AdTableColumnSchema, AdTableComponent, AdminLayoutResourceSchema, AdminSectionCardActionSchema, AdminSectionCardComponent, AdminSectionCardResourceSchema, AuthLayoutResourceSchema, CardResourceSchema, ComponentApiInputSchema, ComponentApiOutputSchema, ComponentVariantSchema, DashboardTemplateResourceSchema, DataTableColumnSchema, DataTableResourceSchema, DescriptionHeaderButtonSchema, DescriptionHeaderResourceSchema, DesignSystem, DocStatusSchema, DocViewerResourceSchema, DocumentationWrapperResourceSchema, FieldRendererRegistry,
|
|
3000
|
+
export { AdAdminLayoutComponent, AdAuthLayoutComponent, AdBadgeComponent, AdButtonComponent, AdCardComponent, AdDashboardTemplateComponent, AdDataTableComponent, AdDescriptionHeaderComponent, AdDocViewerComponent, AdDocumentationWrapperComponent, AdFormEngineComponent, AdFormFieldComponent, AdFormLayoutComponent, AdFormPageTemplateComponent, AdFormSectionComponent, AdHeaderComponent, AdIconComponent, AdInputComponent, AdLabelComponent, AdListPageTemplateComponent, AdLoadingComponent, AdLoginComponent, AdModalComponent, AdModalService, AdModalTriggerComponent, AdModalWrapperComponent, AdSearchBarComponent, AdSelectComponent, AdSidebarComponent, AdStatCardComponent, AdSwitchComponent, AdTableColumnSchema, AdTableComponent, AdminLayoutResourceSchema, AdminSectionCardActionSchema, AdminSectionCardComponent, AdminSectionCardResourceSchema, AuthLayoutResourceSchema, CardResourceSchema, ComponentApiInputSchema, ComponentApiOutputSchema, ComponentVariantSchema, DashboardTemplateResourceSchema, DataTableColumnSchema, DataTableResourceSchema, DescriptionHeaderButtonSchema, DescriptionHeaderResourceSchema, DesignSystem, DocStatusSchema, DocViewerResourceSchema, DocumentationWrapperResourceSchema, FieldRendererRegistry, FormEngineService, FormFieldResourceSchema, FormLayoutResourceSchema, FormPageTemplateResourceSchema, FormSectionResourceSchema, HeaderResourceSchema, ListPageTemplateResourceSchema, LoginResourceSchema, ModalResourceSchema, ModalTriggerResourceSchema, NavItemSchema, STAT_CARD_COLOR_MAP, SearchBarResourceSchema, SidebarResourceSchema, StatCardColorSchema, StatCardResourceSchema, TableEngineComponent, TableResourceSchema, UserSchema, ValidatorRegistry };
|
|
2865
3001
|
//# sourceMappingURL=cerca-design-system.mjs.map
|