ng-comps 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +62 -0
- package/fesm2022/ng-comps.mjs +2479 -0
- package/fesm2022/ng-comps.mjs.map +1 -0
- package/package.json +45 -0
- package/src/styles.css +182 -0
- package/src/theme/material-theme.scss +40 -0
- package/src/theme/tokens.css +107 -0
- package/types/ng-comps.d.ts +917 -0
|
@@ -0,0 +1,2479 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, computed, ChangeDetectionStrategy, Component, output, effect, signal, inject, Injectable } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/material/expansion';
|
|
4
|
+
import { MatExpansionModule } from '@angular/material/expansion';
|
|
5
|
+
import * as i1$1 from '@angular/material/icon';
|
|
6
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
7
|
+
import * as i1$2 from '@angular/forms';
|
|
8
|
+
import { FormsModule } from '@angular/forms';
|
|
9
|
+
import * as i2 from '@angular/material/autocomplete';
|
|
10
|
+
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
11
|
+
import * as i1$3 from '@angular/material/form-field';
|
|
12
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
13
|
+
import * as i5 from '@angular/material/input';
|
|
14
|
+
import { MatInputModule } from '@angular/material/input';
|
|
15
|
+
import * as i1$4 from '@angular/material/badge';
|
|
16
|
+
import { MatBadgeModule } from '@angular/material/badge';
|
|
17
|
+
import * as i1$5 from '@angular/material/button';
|
|
18
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
19
|
+
import * as i1$6 from '@angular/material/card';
|
|
20
|
+
import { MatCardModule } from '@angular/material/card';
|
|
21
|
+
import * as i1$7 from '@angular/material/checkbox';
|
|
22
|
+
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
23
|
+
import * as i1$8 from '@angular/material/chips';
|
|
24
|
+
import { MatChipsModule } from '@angular/material/chips';
|
|
25
|
+
import * as i1$9 from '@angular/material/datepicker';
|
|
26
|
+
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
27
|
+
import { MatNativeDateModule } from '@angular/material/core';
|
|
28
|
+
import { MatDialogRef, MatDialogModule } from '@angular/material/dialog';
|
|
29
|
+
import * as i1$a from '@angular/material/divider';
|
|
30
|
+
import { MatDividerModule } from '@angular/material/divider';
|
|
31
|
+
import * as i1$b from '@angular/material/grid-list';
|
|
32
|
+
import { MatGridListModule } from '@angular/material/grid-list';
|
|
33
|
+
import * as i1$c from '@angular/material/menu';
|
|
34
|
+
import { MatMenuModule } from '@angular/material/menu';
|
|
35
|
+
import * as i1$d from '@angular/material/paginator';
|
|
36
|
+
import { MatPaginatorModule } from '@angular/material/paginator';
|
|
37
|
+
import * as i1$e from '@angular/material/progress-bar';
|
|
38
|
+
import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
39
|
+
import * as i1$f from '@angular/material/progress-spinner';
|
|
40
|
+
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
41
|
+
import * as i1$g from '@angular/material/radio';
|
|
42
|
+
import { MatRadioModule } from '@angular/material/radio';
|
|
43
|
+
import * as i2$1 from '@angular/material/select';
|
|
44
|
+
import { MatSelectModule } from '@angular/material/select';
|
|
45
|
+
import * as i1$h from '@angular/material/sidenav';
|
|
46
|
+
import { MatSidenavModule } from '@angular/material/sidenav';
|
|
47
|
+
import * as i1$i from '@angular/material/slide-toggle';
|
|
48
|
+
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
49
|
+
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
50
|
+
import * as i1$j from '@angular/material/table';
|
|
51
|
+
import { MatTableModule } from '@angular/material/table';
|
|
52
|
+
import * as i2$2 from '@angular/material/sort';
|
|
53
|
+
import { MatSortModule } from '@angular/material/sort';
|
|
54
|
+
import * as i1$k from '@angular/material/tabs';
|
|
55
|
+
import { MatTabsModule } from '@angular/material/tabs';
|
|
56
|
+
import * as i1$l from '@angular/material/toolbar';
|
|
57
|
+
import { MatToolbarModule } from '@angular/material/toolbar';
|
|
58
|
+
import * as i1$m from '@angular/material/tooltip';
|
|
59
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Accordion de la librería ng-comps.
|
|
63
|
+
* Envuelve Angular Material `mat-accordion` / `mat-expansion-panel` y expone
|
|
64
|
+
* una API uniforme con look and feel de marca.
|
|
65
|
+
*/
|
|
66
|
+
class MfAccordionComponent {
|
|
67
|
+
/** Paneles del accordion */
|
|
68
|
+
panels = input.required(...(ngDevMode ? [{ debugName: "panels" }] : /* istanbul ignore next */ []));
|
|
69
|
+
/** Permite múltiples paneles abiertos */
|
|
70
|
+
multi = input(false, ...(ngDevMode ? [{ debugName: "multi" }] : /* istanbul ignore next */ []));
|
|
71
|
+
hostClasses = computed(() => 'mf-accordion', ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
72
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfAccordionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
73
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfAccordionComponent, isStandalone: true, selector: "mf-accordion", inputs: { panels: { classPropertyName: "panels", publicName: "panels", isSignal: true, isRequired: true, transformFunction: null }, multi: { classPropertyName: "multi", publicName: "multi", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
74
|
+
<mat-accordion [multi]="multi()" [class]="hostClasses()">
|
|
75
|
+
@for (panel of panels(); track panel.title) {
|
|
76
|
+
<mat-expansion-panel
|
|
77
|
+
[expanded]="panel.expanded ?? false"
|
|
78
|
+
[disabled]="panel.disabled ?? false"
|
|
79
|
+
>
|
|
80
|
+
<mat-expansion-panel-header>
|
|
81
|
+
<mat-panel-title>{{ panel.title }}</mat-panel-title>
|
|
82
|
+
@if (panel.description) {
|
|
83
|
+
<mat-panel-description>{{ panel.description }}</mat-panel-description>
|
|
84
|
+
}
|
|
85
|
+
</mat-expansion-panel-header>
|
|
86
|
+
<p>{{ panel.content }}</p>
|
|
87
|
+
</mat-expansion-panel>
|
|
88
|
+
}
|
|
89
|
+
</mat-accordion>
|
|
90
|
+
`, isInline: true, styles: [":host{display:block}.mf-accordion .mat-expansion-panel{font-family:var(--mf-font-base)!important;border-radius:var(--mf-radius-md)!important;box-shadow:var(--mf-shadow-none)!important;border:1px solid var(--mf-color-border);margin-bottom:var(--mf-space-2)}.mf-accordion .mat-expansion-panel-header{font-family:var(--mf-font-base)!important}.mf-accordion .mat-expansion-panel-header-title{font-weight:var(--mf-weight-bold)!important;color:var(--mf-color-on-surface)!important}.mf-accordion .mat-expansion-panel-header-description{color:var(--mf-color-neutral-400)!important}.mf-accordion .mat-expansion-panel-body{font-size:var(--mf-text-sm)!important;color:var(--mf-color-neutral-600)!important;line-height:var(--mf-leading-normal)}.mf-accordion .mat-expansion-indicator:after{color:var(--mf-color-brand)!important}.mf-accordion .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover{background-color:var(--mf-color-brand-light)!important}\n"], dependencies: [{ kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i1.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i1.MatExpansionPanelDescription, selector: "mat-panel-description" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
91
|
+
}
|
|
92
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfAccordionComponent, decorators: [{
|
|
93
|
+
type: Component,
|
|
94
|
+
args: [{ selector: 'mf-accordion', imports: [MatExpansionModule], template: `
|
|
95
|
+
<mat-accordion [multi]="multi()" [class]="hostClasses()">
|
|
96
|
+
@for (panel of panels(); track panel.title) {
|
|
97
|
+
<mat-expansion-panel
|
|
98
|
+
[expanded]="panel.expanded ?? false"
|
|
99
|
+
[disabled]="panel.disabled ?? false"
|
|
100
|
+
>
|
|
101
|
+
<mat-expansion-panel-header>
|
|
102
|
+
<mat-panel-title>{{ panel.title }}</mat-panel-title>
|
|
103
|
+
@if (panel.description) {
|
|
104
|
+
<mat-panel-description>{{ panel.description }}</mat-panel-description>
|
|
105
|
+
}
|
|
106
|
+
</mat-expansion-panel-header>
|
|
107
|
+
<p>{{ panel.content }}</p>
|
|
108
|
+
</mat-expansion-panel>
|
|
109
|
+
}
|
|
110
|
+
</mat-accordion>
|
|
111
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.mf-accordion .mat-expansion-panel{font-family:var(--mf-font-base)!important;border-radius:var(--mf-radius-md)!important;box-shadow:var(--mf-shadow-none)!important;border:1px solid var(--mf-color-border);margin-bottom:var(--mf-space-2)}.mf-accordion .mat-expansion-panel-header{font-family:var(--mf-font-base)!important}.mf-accordion .mat-expansion-panel-header-title{font-weight:var(--mf-weight-bold)!important;color:var(--mf-color-on-surface)!important}.mf-accordion .mat-expansion-panel-header-description{color:var(--mf-color-neutral-400)!important}.mf-accordion .mat-expansion-panel-body{font-size:var(--mf-text-sm)!important;color:var(--mf-color-neutral-600)!important;line-height:var(--mf-leading-normal)}.mf-accordion .mat-expansion-indicator:after{color:var(--mf-color-brand)!important}.mf-accordion .mat-expansion-panel:not(.mat-expanded) .mat-expansion-panel-header:hover{background-color:var(--mf-color-brand-light)!important}\n"] }]
|
|
112
|
+
}], propDecorators: { panels: [{ type: i0.Input, args: [{ isSignal: true, alias: "panels", required: true }] }], multi: [{ type: i0.Input, args: [{ isSignal: true, alias: "multi", required: false }] }] } });
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Alerta de la librería ng-comps.
|
|
116
|
+
* Componente de banner para mensajes de sistema, alertas y notificaciones.
|
|
117
|
+
* Ideal para dashboards y paneles administrativos.
|
|
118
|
+
*/
|
|
119
|
+
class MfAlertComponent {
|
|
120
|
+
/** Mensaje principal */
|
|
121
|
+
message = input.required(...(ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []));
|
|
122
|
+
/** Título opcional */
|
|
123
|
+
title = input(undefined, ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
124
|
+
/** Severidad de la alerta */
|
|
125
|
+
severity = input('info', ...(ngDevMode ? [{ debugName: "severity" }] : /* istanbul ignore next */ []));
|
|
126
|
+
/** Se puede cerrar */
|
|
127
|
+
dismissible = input(false, ...(ngDevMode ? [{ debugName: "dismissible" }] : /* istanbul ignore next */ []));
|
|
128
|
+
mfDismiss = output();
|
|
129
|
+
iconName = computed(() => {
|
|
130
|
+
const map = {
|
|
131
|
+
info: 'info',
|
|
132
|
+
success: 'check_circle',
|
|
133
|
+
warning: 'warning',
|
|
134
|
+
error: 'error',
|
|
135
|
+
};
|
|
136
|
+
return map[this.severity()];
|
|
137
|
+
}, ...(ngDevMode ? [{ debugName: "iconName" }] : /* istanbul ignore next */ []));
|
|
138
|
+
hostClasses = computed(() => {
|
|
139
|
+
return ['mf-alert', `mf-alert--${this.severity()}`].join(' ');
|
|
140
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
141
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfAlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
142
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfAlertComponent, isStandalone: true, selector: "mf-alert", inputs: { message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: true, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, severity: { classPropertyName: "severity", publicName: "severity", isSignal: true, isRequired: false, transformFunction: null }, dismissible: { classPropertyName: "dismissible", publicName: "dismissible", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mfDismiss: "mfDismiss" }, ngImport: i0, template: `
|
|
143
|
+
<div [class]="hostClasses()" role="alert">
|
|
144
|
+
<mat-icon class="mf-alert__icon" aria-hidden="true">{{ iconName() }}</mat-icon>
|
|
145
|
+
<div class="mf-alert__content">
|
|
146
|
+
@if (title()) {
|
|
147
|
+
<strong class="mf-alert__title">{{ title() }}</strong>
|
|
148
|
+
}
|
|
149
|
+
<span class="mf-alert__message">{{ message() }}</span>
|
|
150
|
+
</div>
|
|
151
|
+
@if (dismissible()) {
|
|
152
|
+
<button
|
|
153
|
+
class="mf-alert__close"
|
|
154
|
+
(click)="mfDismiss.emit()"
|
|
155
|
+
[attr.aria-label]="'Cerrar alerta'"
|
|
156
|
+
>
|
|
157
|
+
<mat-icon aria-hidden="true">close</mat-icon>
|
|
158
|
+
</button>
|
|
159
|
+
}
|
|
160
|
+
</div>
|
|
161
|
+
`, isInline: true, styles: [":host{display:block}.mf-alert{display:flex;align-items:flex-start;gap:var(--mf-space-3);padding:var(--mf-space-3) var(--mf-space-4);border-radius:var(--mf-radius-md);font-family:var(--mf-font-base);font-size:var(--mf-text-sm);line-height:var(--mf-leading-normal)}.mf-alert--info{background-color:var(--mf-color-secondary-50);border-left:4px solid var(--mf-color-secondary-500);color:var(--mf-color-secondary-900)}.mf-alert--info .mf-alert__icon{color:var(--mf-color-secondary-500)}.mf-alert--success{background-color:var(--mf-color-primary-50);border-left:4px solid var(--mf-color-primary-500);color:var(--mf-color-primary-900)}.mf-alert--success .mf-alert__icon{color:var(--mf-color-primary-500)}.mf-alert--warning{background-color:#fffbeb;border-left:4px solid var(--mf-color-accent-500);color:var(--mf-color-accent-700)}.mf-alert--warning .mf-alert__icon{color:var(--mf-color-accent-500)}.mf-alert--error{background-color:#fef2f2;border-left:4px solid var(--mf-color-error-500);color:var(--mf-color-error-700)}.mf-alert--error .mf-alert__icon{color:var(--mf-color-error-500)}.mf-alert__content{flex:1;display:flex;flex-direction:column;gap:var(--mf-space-1)}.mf-alert__title{font-weight:var(--mf-weight-bold)}.mf-alert__icon{flex-shrink:0;margin-top:1px}.mf-alert__close{display:inline-flex;align-items:center;justify-content:center;border:none;background:none;cursor:pointer;padding:var(--mf-space-1);border-radius:var(--mf-radius-sm);color:inherit;opacity:.6;transition:opacity var(--mf-duration-fast) var(--mf-ease-standard)}.mf-alert__close:hover{opacity:1}.mf-alert__close .mat-icon{font-size:18px;width:18px;height:18px}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
162
|
+
}
|
|
163
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfAlertComponent, decorators: [{
|
|
164
|
+
type: Component,
|
|
165
|
+
args: [{ selector: 'mf-alert', imports: [MatIconModule], template: `
|
|
166
|
+
<div [class]="hostClasses()" role="alert">
|
|
167
|
+
<mat-icon class="mf-alert__icon" aria-hidden="true">{{ iconName() }}</mat-icon>
|
|
168
|
+
<div class="mf-alert__content">
|
|
169
|
+
@if (title()) {
|
|
170
|
+
<strong class="mf-alert__title">{{ title() }}</strong>
|
|
171
|
+
}
|
|
172
|
+
<span class="mf-alert__message">{{ message() }}</span>
|
|
173
|
+
</div>
|
|
174
|
+
@if (dismissible()) {
|
|
175
|
+
<button
|
|
176
|
+
class="mf-alert__close"
|
|
177
|
+
(click)="mfDismiss.emit()"
|
|
178
|
+
[attr.aria-label]="'Cerrar alerta'"
|
|
179
|
+
>
|
|
180
|
+
<mat-icon aria-hidden="true">close</mat-icon>
|
|
181
|
+
</button>
|
|
182
|
+
}
|
|
183
|
+
</div>
|
|
184
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.mf-alert{display:flex;align-items:flex-start;gap:var(--mf-space-3);padding:var(--mf-space-3) var(--mf-space-4);border-radius:var(--mf-radius-md);font-family:var(--mf-font-base);font-size:var(--mf-text-sm);line-height:var(--mf-leading-normal)}.mf-alert--info{background-color:var(--mf-color-secondary-50);border-left:4px solid var(--mf-color-secondary-500);color:var(--mf-color-secondary-900)}.mf-alert--info .mf-alert__icon{color:var(--mf-color-secondary-500)}.mf-alert--success{background-color:var(--mf-color-primary-50);border-left:4px solid var(--mf-color-primary-500);color:var(--mf-color-primary-900)}.mf-alert--success .mf-alert__icon{color:var(--mf-color-primary-500)}.mf-alert--warning{background-color:#fffbeb;border-left:4px solid var(--mf-color-accent-500);color:var(--mf-color-accent-700)}.mf-alert--warning .mf-alert__icon{color:var(--mf-color-accent-500)}.mf-alert--error{background-color:#fef2f2;border-left:4px solid var(--mf-color-error-500);color:var(--mf-color-error-700)}.mf-alert--error .mf-alert__icon{color:var(--mf-color-error-500)}.mf-alert__content{flex:1;display:flex;flex-direction:column;gap:var(--mf-space-1)}.mf-alert__title{font-weight:var(--mf-weight-bold)}.mf-alert__icon{flex-shrink:0;margin-top:1px}.mf-alert__close{display:inline-flex;align-items:center;justify-content:center;border:none;background:none;cursor:pointer;padding:var(--mf-space-1);border-radius:var(--mf-radius-sm);color:inherit;opacity:.6;transition:opacity var(--mf-duration-fast) var(--mf-ease-standard)}.mf-alert__close:hover{opacity:1}.mf-alert__close .mat-icon{font-size:18px;width:18px;height:18px}\n"] }]
|
|
185
|
+
}], propDecorators: { message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: true }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], severity: [{ type: i0.Input, args: [{ isSignal: true, alias: "severity", required: false }] }], dismissible: [{ type: i0.Input, args: [{ isSignal: true, alias: "dismissible", required: false }] }], mfDismiss: [{ type: i0.Output, args: ["mfDismiss"] }] } });
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Autocompletar de la librería ng-comps.
|
|
189
|
+
* Envuelve Angular Material `mat-autocomplete` y expone una API uniforme
|
|
190
|
+
* con look and feel de marca.
|
|
191
|
+
*
|
|
192
|
+
* El panel desplegable se estiliza con la clase global `mf-autocomplete-panel`.
|
|
193
|
+
* Puedes añadir clases adicionales con `panelClass`.
|
|
194
|
+
*/
|
|
195
|
+
class MfAutocompleteComponent {
|
|
196
|
+
/** Lista completa de opciones */
|
|
197
|
+
options = input.required(...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
198
|
+
/** Etiqueta flotante del campo */
|
|
199
|
+
label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
200
|
+
/** Placeholder del input */
|
|
201
|
+
placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
202
|
+
/** Valor actual (texto en el campo) */
|
|
203
|
+
value = input('', ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
204
|
+
/** Deshabilitado */
|
|
205
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
206
|
+
/** Tamaño del campo */
|
|
207
|
+
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
208
|
+
/** Ancho completo */
|
|
209
|
+
fullWidth = input(false, ...(ngDevMode ? [{ debugName: "fullWidth" }] : /* istanbul ignore next */ []));
|
|
210
|
+
/** Texto de ayuda debajo del campo */
|
|
211
|
+
hint = input(undefined, ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
|
|
212
|
+
/** Mensaje de error */
|
|
213
|
+
error = input(undefined, ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
|
|
214
|
+
/** Icono al inicio del campo */
|
|
215
|
+
leadingIcon = input(undefined, ...(ngDevMode ? [{ debugName: "leadingIcon" }] : /* istanbul ignore next */ []));
|
|
216
|
+
/** Icono al final del campo */
|
|
217
|
+
trailingIcon = input(undefined, ...(ngDevMode ? [{ debugName: "trailingIcon" }] : /* istanbul ignore next */ []));
|
|
218
|
+
/**
|
|
219
|
+
* Ancho del panel del autocomplete.
|
|
220
|
+
* Por defecto `''`: el panel toma el mismo ancho que el campo.
|
|
221
|
+
* Acepta cualquier valor CSS válido ('300px', '80vw', etc.) para sobreescribirlo.
|
|
222
|
+
*/
|
|
223
|
+
panelWidth = input('', ...(ngDevMode ? [{ debugName: "panelWidth" }] : /* istanbul ignore next */ []));
|
|
224
|
+
/**
|
|
225
|
+
* Clases extra que se añaden al panel del autocomplete (overlay).
|
|
226
|
+
* La clase `mf-autocomplete-panel` siempre está presente.
|
|
227
|
+
*/
|
|
228
|
+
panelClass = input('', ...(ngDevMode ? [{ debugName: "panelClass" }] : /* istanbul ignore next */ []));
|
|
229
|
+
/** Emite el texto escrito en el campo */
|
|
230
|
+
mfInput = output();
|
|
231
|
+
/** Emite el valor de la opción seleccionada */
|
|
232
|
+
mfOptionSelected = output();
|
|
233
|
+
mfBlur = output();
|
|
234
|
+
inputValue = '';
|
|
235
|
+
hostClasses = computed(() => {
|
|
236
|
+
const classes = ['mf-autocomplete', `mf-autocomplete--${this.size()}`];
|
|
237
|
+
if (this.fullWidth())
|
|
238
|
+
classes.push('mf-autocomplete--full');
|
|
239
|
+
if (this.error())
|
|
240
|
+
classes.push('mf-autocomplete--error');
|
|
241
|
+
return classes.join(' ');
|
|
242
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
243
|
+
autocompletePanelClasses = computed(() => {
|
|
244
|
+
const base = ['mf-autocomplete-panel'];
|
|
245
|
+
const extra = this.panelClass();
|
|
246
|
+
if (Array.isArray(extra)) {
|
|
247
|
+
base.push(...extra.filter(Boolean));
|
|
248
|
+
}
|
|
249
|
+
else if (extra) {
|
|
250
|
+
base.push(extra);
|
|
251
|
+
}
|
|
252
|
+
return base.join(' ');
|
|
253
|
+
}, ...(ngDevMode ? [{ debugName: "autocompletePanelClasses" }] : /* istanbul ignore next */ []));
|
|
254
|
+
filteredOptions = computed(() => {
|
|
255
|
+
const query = this.inputValue.toLowerCase().trim();
|
|
256
|
+
if (!query)
|
|
257
|
+
return this.options();
|
|
258
|
+
return this.options().filter((o) => o.label.toLowerCase().includes(query));
|
|
259
|
+
}, ...(ngDevMode ? [{ debugName: "filteredOptions" }] : /* istanbul ignore next */ []));
|
|
260
|
+
constructor() {
|
|
261
|
+
effect(() => {
|
|
262
|
+
this.inputValue = this.value();
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
onInputChange(value) {
|
|
266
|
+
this.mfInput.emit(value);
|
|
267
|
+
}
|
|
268
|
+
onOptionSelected(event) {
|
|
269
|
+
const label = event.option.value;
|
|
270
|
+
const match = this.options().find((o) => o.label === label);
|
|
271
|
+
if (match) {
|
|
272
|
+
this.mfOptionSelected.emit(match);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfAutocompleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
276
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfAutocompleteComponent, isStandalone: true, selector: "mf-autocomplete", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, leadingIcon: { classPropertyName: "leadingIcon", publicName: "leadingIcon", isSignal: true, isRequired: false, transformFunction: null }, trailingIcon: { classPropertyName: "trailingIcon", publicName: "trailingIcon", isSignal: true, isRequired: false, transformFunction: null }, panelWidth: { classPropertyName: "panelWidth", publicName: "panelWidth", isSignal: true, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mfInput: "mfInput", mfOptionSelected: "mfOptionSelected", mfBlur: "mfBlur" }, ngImport: i0, template: `
|
|
277
|
+
<mat-form-field [appearance]="'outline'" [class]="hostClasses()">
|
|
278
|
+
@if (label()) {
|
|
279
|
+
<mat-label>{{ label() }}</mat-label>
|
|
280
|
+
}
|
|
281
|
+
@if (leadingIcon()) {
|
|
282
|
+
<mat-icon matPrefix aria-hidden="true">{{ leadingIcon() }}</mat-icon>
|
|
283
|
+
}
|
|
284
|
+
<input
|
|
285
|
+
matInput
|
|
286
|
+
[placeholder]="placeholder()"
|
|
287
|
+
[disabled]="disabled()"
|
|
288
|
+
[matAutocomplete]="auto"
|
|
289
|
+
[(ngModel)]="inputValue"
|
|
290
|
+
(ngModelChange)="onInputChange($event)"
|
|
291
|
+
(blur)="mfBlur.emit()"
|
|
292
|
+
/>
|
|
293
|
+
@if (trailingIcon()) {
|
|
294
|
+
<mat-icon matSuffix aria-hidden="true">{{ trailingIcon() }}</mat-icon>
|
|
295
|
+
}
|
|
296
|
+
@if (hint()) {
|
|
297
|
+
<mat-hint>{{ hint() }}</mat-hint>
|
|
298
|
+
}
|
|
299
|
+
@if (error()) {
|
|
300
|
+
<mat-error>{{ error() }}</mat-error>
|
|
301
|
+
}
|
|
302
|
+
<mat-autocomplete
|
|
303
|
+
#auto
|
|
304
|
+
[panelWidth]="panelWidth()"
|
|
305
|
+
[class]="autocompletePanelClasses()"
|
|
306
|
+
(optionSelected)="onOptionSelected($event)"
|
|
307
|
+
>
|
|
308
|
+
@for (option of filteredOptions(); track option.value) {
|
|
309
|
+
<mat-option [value]="option.label" [disabled]="option.disabled ?? false">
|
|
310
|
+
{{ option.label }}
|
|
311
|
+
</mat-option>
|
|
312
|
+
}
|
|
313
|
+
</mat-autocomplete>
|
|
314
|
+
</mat-form-field>
|
|
315
|
+
`, isInline: true, styles: [":host{display:inline-block}.mf-autocomplete{font-family:var(--mf-font-base)!important;width:100%}.mf-autocomplete--full{width:100%}.mf-autocomplete .mat-mdc-text-field-wrapper{border-radius:var(--mf-radius-md)!important}.mf-autocomplete .mdc-notched-outline__leading,.mf-autocomplete .mdc-notched-outline__notch,.mf-autocomplete .mdc-notched-outline__trailing{border-color:var(--mf-color-border)!important;transition:border-color var(--mf-duration-base) var(--mf-ease-standard)}.mf-autocomplete .mat-mdc-form-field-focus-overlay{background-color:transparent!important}.mf-autocomplete.mat-focused .mdc-notched-outline__leading,.mf-autocomplete.mat-focused .mdc-notched-outline__notch,.mf-autocomplete.mat-focused .mdc-notched-outline__trailing{border-color:var(--mf-color-brand)!important;border-width:1.5px!important}.mf-autocomplete--error .mdc-notched-outline__leading,.mf-autocomplete--error .mdc-notched-outline__notch,.mf-autocomplete--error .mdc-notched-outline__trailing{border-color:var(--mf-color-error-500)!important}.mf-autocomplete .mat-mdc-floating-label{font-family:var(--mf-font-base)!important;font-weight:var(--mf-weight-medium)!important;color:var(--mf-color-neutral-400)!important}.mf-autocomplete.mat-focused .mat-mdc-floating-label{color:var(--mf-color-brand)!important}.mf-autocomplete .mat-mdc-input-element{font-family:var(--mf-font-base)!important;color:var(--mf-color-on-surface)!important;caret-color:var(--mf-color-brand)}.mf-autocomplete .mat-mdc-form-field-hint{font-size:var(--mf-text-xs)!important;color:var(--mf-color-neutral-400)!important}.mf-autocomplete .mat-mdc-form-field-error{font-size:var(--mf-text-xs)!important}.mf-autocomplete .mat-icon{color:var(--mf-color-neutral-400)!important;font-size:20px;width:20px;height:20px;transition:color var(--mf-duration-base) var(--mf-ease-standard)}.mf-autocomplete.mat-focused .mat-icon{color:var(--mf-color-brand)!important}.mf-autocomplete--sm .mat-mdc-input-element{font-size:var(--mf-text-sm)!important}.mf-autocomplete--md .mat-mdc-input-element{font-size:var(--mf-text-base)!important}.mf-autocomplete--lg .mat-mdc-input-element{font-size:var(--mf-text-lg)!important;padding-top:var(--mf-space-1)!important;padding-bottom:var(--mf-space-1)!important}.mf-autocomplete .mat-mdc-input-element:disabled{color:var(--mf-color-neutral-300)!important}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.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$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i2.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i1$3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i1$3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i1$3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
316
|
+
}
|
|
317
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfAutocompleteComponent, decorators: [{
|
|
318
|
+
type: Component,
|
|
319
|
+
args: [{ selector: 'mf-autocomplete', imports: [
|
|
320
|
+
FormsModule,
|
|
321
|
+
MatAutocompleteModule,
|
|
322
|
+
MatFormFieldModule,
|
|
323
|
+
MatIconModule,
|
|
324
|
+
MatInputModule,
|
|
325
|
+
], template: `
|
|
326
|
+
<mat-form-field [appearance]="'outline'" [class]="hostClasses()">
|
|
327
|
+
@if (label()) {
|
|
328
|
+
<mat-label>{{ label() }}</mat-label>
|
|
329
|
+
}
|
|
330
|
+
@if (leadingIcon()) {
|
|
331
|
+
<mat-icon matPrefix aria-hidden="true">{{ leadingIcon() }}</mat-icon>
|
|
332
|
+
}
|
|
333
|
+
<input
|
|
334
|
+
matInput
|
|
335
|
+
[placeholder]="placeholder()"
|
|
336
|
+
[disabled]="disabled()"
|
|
337
|
+
[matAutocomplete]="auto"
|
|
338
|
+
[(ngModel)]="inputValue"
|
|
339
|
+
(ngModelChange)="onInputChange($event)"
|
|
340
|
+
(blur)="mfBlur.emit()"
|
|
341
|
+
/>
|
|
342
|
+
@if (trailingIcon()) {
|
|
343
|
+
<mat-icon matSuffix aria-hidden="true">{{ trailingIcon() }}</mat-icon>
|
|
344
|
+
}
|
|
345
|
+
@if (hint()) {
|
|
346
|
+
<mat-hint>{{ hint() }}</mat-hint>
|
|
347
|
+
}
|
|
348
|
+
@if (error()) {
|
|
349
|
+
<mat-error>{{ error() }}</mat-error>
|
|
350
|
+
}
|
|
351
|
+
<mat-autocomplete
|
|
352
|
+
#auto
|
|
353
|
+
[panelWidth]="panelWidth()"
|
|
354
|
+
[class]="autocompletePanelClasses()"
|
|
355
|
+
(optionSelected)="onOptionSelected($event)"
|
|
356
|
+
>
|
|
357
|
+
@for (option of filteredOptions(); track option.value) {
|
|
358
|
+
<mat-option [value]="option.label" [disabled]="option.disabled ?? false">
|
|
359
|
+
{{ option.label }}
|
|
360
|
+
</mat-option>
|
|
361
|
+
}
|
|
362
|
+
</mat-autocomplete>
|
|
363
|
+
</mat-form-field>
|
|
364
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block}.mf-autocomplete{font-family:var(--mf-font-base)!important;width:100%}.mf-autocomplete--full{width:100%}.mf-autocomplete .mat-mdc-text-field-wrapper{border-radius:var(--mf-radius-md)!important}.mf-autocomplete .mdc-notched-outline__leading,.mf-autocomplete .mdc-notched-outline__notch,.mf-autocomplete .mdc-notched-outline__trailing{border-color:var(--mf-color-border)!important;transition:border-color var(--mf-duration-base) var(--mf-ease-standard)}.mf-autocomplete .mat-mdc-form-field-focus-overlay{background-color:transparent!important}.mf-autocomplete.mat-focused .mdc-notched-outline__leading,.mf-autocomplete.mat-focused .mdc-notched-outline__notch,.mf-autocomplete.mat-focused .mdc-notched-outline__trailing{border-color:var(--mf-color-brand)!important;border-width:1.5px!important}.mf-autocomplete--error .mdc-notched-outline__leading,.mf-autocomplete--error .mdc-notched-outline__notch,.mf-autocomplete--error .mdc-notched-outline__trailing{border-color:var(--mf-color-error-500)!important}.mf-autocomplete .mat-mdc-floating-label{font-family:var(--mf-font-base)!important;font-weight:var(--mf-weight-medium)!important;color:var(--mf-color-neutral-400)!important}.mf-autocomplete.mat-focused .mat-mdc-floating-label{color:var(--mf-color-brand)!important}.mf-autocomplete .mat-mdc-input-element{font-family:var(--mf-font-base)!important;color:var(--mf-color-on-surface)!important;caret-color:var(--mf-color-brand)}.mf-autocomplete .mat-mdc-form-field-hint{font-size:var(--mf-text-xs)!important;color:var(--mf-color-neutral-400)!important}.mf-autocomplete .mat-mdc-form-field-error{font-size:var(--mf-text-xs)!important}.mf-autocomplete .mat-icon{color:var(--mf-color-neutral-400)!important;font-size:20px;width:20px;height:20px;transition:color var(--mf-duration-base) var(--mf-ease-standard)}.mf-autocomplete.mat-focused .mat-icon{color:var(--mf-color-brand)!important}.mf-autocomplete--sm .mat-mdc-input-element{font-size:var(--mf-text-sm)!important}.mf-autocomplete--md .mat-mdc-input-element{font-size:var(--mf-text-base)!important}.mf-autocomplete--lg .mat-mdc-input-element{font-size:var(--mf-text-lg)!important;padding-top:var(--mf-space-1)!important;padding-bottom:var(--mf-space-1)!important}.mf-autocomplete .mat-mdc-input-element:disabled{color:var(--mf-color-neutral-300)!important}\n"] }]
|
|
365
|
+
}], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], leadingIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "leadingIcon", required: false }] }], trailingIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "trailingIcon", required: false }] }], panelWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelWidth", required: false }] }], panelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelClass", required: false }] }], mfInput: [{ type: i0.Output, args: ["mfInput"] }], mfOptionSelected: [{ type: i0.Output, args: ["mfOptionSelected"] }], mfBlur: [{ type: i0.Output, args: ["mfBlur"] }] } });
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* Avatar de la librería ng-comps.
|
|
369
|
+
* Muestra una imagen de perfil, iniciales o un icono.
|
|
370
|
+
* Componente puro sin dependencia de Angular Material.
|
|
371
|
+
*/
|
|
372
|
+
class MfAvatarComponent {
|
|
373
|
+
/** URL de la imagen */
|
|
374
|
+
src = input(undefined, ...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
|
|
375
|
+
/** Texto alternativo */
|
|
376
|
+
alt = input('', ...(ngDevMode ? [{ debugName: "alt" }] : /* istanbul ignore next */ []));
|
|
377
|
+
/** Nombre completo para generar iniciales */
|
|
378
|
+
name = input('', ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
379
|
+
/** Tamaño */
|
|
380
|
+
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
381
|
+
/** Forma */
|
|
382
|
+
variant = input('circle', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
383
|
+
initials = computed(() => {
|
|
384
|
+
const n = this.name();
|
|
385
|
+
if (!n)
|
|
386
|
+
return '?';
|
|
387
|
+
const parts = n.trim().split(/\s+/);
|
|
388
|
+
if (parts.length === 1)
|
|
389
|
+
return parts[0].charAt(0).toUpperCase();
|
|
390
|
+
return (parts[0].charAt(0) + parts[parts.length - 1].charAt(0)).toUpperCase();
|
|
391
|
+
}, ...(ngDevMode ? [{ debugName: "initials" }] : /* istanbul ignore next */ []));
|
|
392
|
+
hostClasses = computed(() => {
|
|
393
|
+
return ['mf-avatar', `mf-avatar--${this.size()}`, `mf-avatar--${this.variant()}`].join(' ');
|
|
394
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
395
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfAvatarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
396
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfAvatarComponent, isStandalone: true, selector: "mf-avatar", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null }, alt: { classPropertyName: "alt", publicName: "alt", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
397
|
+
@if (src()) {
|
|
398
|
+
<img
|
|
399
|
+
[src]="src()"
|
|
400
|
+
[alt]="alt()"
|
|
401
|
+
[class]="hostClasses()"
|
|
402
|
+
/>
|
|
403
|
+
} @else {
|
|
404
|
+
<span [class]="hostClasses()" [attr.aria-label]="alt()">
|
|
405
|
+
{{ initials() }}
|
|
406
|
+
</span>
|
|
407
|
+
}
|
|
408
|
+
`, isInline: true, styles: [":host{display:inline-block}.mf-avatar{display:inline-flex;align-items:center;justify-content:center;overflow:hidden;object-fit:cover;background-color:var(--mf-color-primary-100);color:var(--mf-color-primary-800);font-family:var(--mf-font-base);font-weight:var(--mf-weight-bold);-webkit-user-select:none;user-select:none}.mf-avatar--xs{width:24px;height:24px;font-size:var(--mf-text-xs)}.mf-avatar--sm{width:32px;height:32px;font-size:var(--mf-text-sm)}.mf-avatar--md{width:40px;height:40px;font-size:var(--mf-text-base)}.mf-avatar--lg{width:56px;height:56px;font-size:var(--mf-text-xl)}.mf-avatar--xl{width:80px;height:80px;font-size:var(--mf-text-3xl)}.mf-avatar--circle{border-radius:var(--mf-radius-full)}.mf-avatar--rounded{border-radius:var(--mf-radius-md)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
409
|
+
}
|
|
410
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfAvatarComponent, decorators: [{
|
|
411
|
+
type: Component,
|
|
412
|
+
args: [{ selector: 'mf-avatar', imports: [], template: `
|
|
413
|
+
@if (src()) {
|
|
414
|
+
<img
|
|
415
|
+
[src]="src()"
|
|
416
|
+
[alt]="alt()"
|
|
417
|
+
[class]="hostClasses()"
|
|
418
|
+
/>
|
|
419
|
+
} @else {
|
|
420
|
+
<span [class]="hostClasses()" [attr.aria-label]="alt()">
|
|
421
|
+
{{ initials() }}
|
|
422
|
+
</span>
|
|
423
|
+
}
|
|
424
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block}.mf-avatar{display:inline-flex;align-items:center;justify-content:center;overflow:hidden;object-fit:cover;background-color:var(--mf-color-primary-100);color:var(--mf-color-primary-800);font-family:var(--mf-font-base);font-weight:var(--mf-weight-bold);-webkit-user-select:none;user-select:none}.mf-avatar--xs{width:24px;height:24px;font-size:var(--mf-text-xs)}.mf-avatar--sm{width:32px;height:32px;font-size:var(--mf-text-sm)}.mf-avatar--md{width:40px;height:40px;font-size:var(--mf-text-base)}.mf-avatar--lg{width:56px;height:56px;font-size:var(--mf-text-xl)}.mf-avatar--xl{width:80px;height:80px;font-size:var(--mf-text-3xl)}.mf-avatar--circle{border-radius:var(--mf-radius-full)}.mf-avatar--rounded{border-radius:var(--mf-radius-md)}\n"] }]
|
|
425
|
+
}], propDecorators: { src: [{ type: i0.Input, args: [{ isSignal: true, alias: "src", required: false }] }], alt: [{ type: i0.Input, args: [{ isSignal: true, alias: "alt", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* Badge de la librería ng-comps.
|
|
429
|
+
* Envuelve Angular Material `matBadge` y expone una API uniforme
|
|
430
|
+
* con look and feel de marca.
|
|
431
|
+
*/
|
|
432
|
+
class MfBadgeComponent {
|
|
433
|
+
/** Contenido del badge (texto o número) */
|
|
434
|
+
content = input('', ...(ngDevMode ? [{ debugName: "content" }] : /* istanbul ignore next */ []));
|
|
435
|
+
/** Color semántico */
|
|
436
|
+
color = input('brand', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
437
|
+
/** Tamaño del badge */
|
|
438
|
+
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
439
|
+
/** Posición del badge */
|
|
440
|
+
position = input('above-after', ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
|
|
441
|
+
/** Ocultar el badge */
|
|
442
|
+
hidden = input(false, ...(ngDevMode ? [{ debugName: "hidden" }] : /* istanbul ignore next */ []));
|
|
443
|
+
/** Deshabilitado */
|
|
444
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
445
|
+
/** Superponer sobre el contenido */
|
|
446
|
+
overlap = input(true, ...(ngDevMode ? [{ debugName: "overlap" }] : /* istanbul ignore next */ []));
|
|
447
|
+
matPosition = computed(() => {
|
|
448
|
+
const pos = this.position();
|
|
449
|
+
const map = {
|
|
450
|
+
'above-after': 'above after',
|
|
451
|
+
'above-before': 'above before',
|
|
452
|
+
'below-after': 'below after',
|
|
453
|
+
'below-before': 'below before',
|
|
454
|
+
};
|
|
455
|
+
return map[pos];
|
|
456
|
+
}, ...(ngDevMode ? [{ debugName: "matPosition" }] : /* istanbul ignore next */ []));
|
|
457
|
+
matSize = computed(() => {
|
|
458
|
+
const map = { sm: 'small', md: 'medium', lg: 'large' };
|
|
459
|
+
return map[this.size()];
|
|
460
|
+
}, ...(ngDevMode ? [{ debugName: "matSize" }] : /* istanbul ignore next */ []));
|
|
461
|
+
hostClasses = computed(() => {
|
|
462
|
+
return ['mf-badge', `mf-badge--${this.color()}`].join(' ');
|
|
463
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
464
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
465
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: MfBadgeComponent, isStandalone: true, selector: "mf-badge", inputs: { content: { classPropertyName: "content", publicName: "content", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, hidden: { classPropertyName: "hidden", publicName: "hidden", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, overlap: { classPropertyName: "overlap", publicName: "overlap", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
466
|
+
<span
|
|
467
|
+
[matBadge]="content()"
|
|
468
|
+
[matBadgeHidden]="hidden()"
|
|
469
|
+
[matBadgeDisabled]="disabled()"
|
|
470
|
+
[matBadgeOverlap]="overlap()"
|
|
471
|
+
[matBadgePosition]="matPosition()"
|
|
472
|
+
[matBadgeSize]="matSize()"
|
|
473
|
+
[class]="hostClasses()"
|
|
474
|
+
>
|
|
475
|
+
<ng-content />
|
|
476
|
+
</span>
|
|
477
|
+
`, isInline: true, styles: [":host{display:inline-block}.mf-badge--brand .mat-badge-content{background-color:var(--mf-color-brand)!important;color:var(--mf-color-on-brand)!important}.mf-badge--accent .mat-badge-content{background-color:var(--mf-color-accent-500)!important;color:var(--mf-color-neutral-900)!important}.mf-badge--error .mat-badge-content{background-color:var(--mf-color-error-500)!important;color:var(--mf-color-neutral-0)!important}.mf-badge--neutral .mat-badge-content{background-color:var(--mf-color-neutral-400)!important;color:var(--mf-color-neutral-0)!important}.mat-badge-content{font-family:var(--mf-font-base)!important;font-weight:var(--mf-weight-bold)!important}\n"], dependencies: [{ kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i1$4.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
478
|
+
}
|
|
479
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfBadgeComponent, decorators: [{
|
|
480
|
+
type: Component,
|
|
481
|
+
args: [{ selector: 'mf-badge', imports: [MatBadgeModule], template: `
|
|
482
|
+
<span
|
|
483
|
+
[matBadge]="content()"
|
|
484
|
+
[matBadgeHidden]="hidden()"
|
|
485
|
+
[matBadgeDisabled]="disabled()"
|
|
486
|
+
[matBadgeOverlap]="overlap()"
|
|
487
|
+
[matBadgePosition]="matPosition()"
|
|
488
|
+
[matBadgeSize]="matSize()"
|
|
489
|
+
[class]="hostClasses()"
|
|
490
|
+
>
|
|
491
|
+
<ng-content />
|
|
492
|
+
</span>
|
|
493
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block}.mf-badge--brand .mat-badge-content{background-color:var(--mf-color-brand)!important;color:var(--mf-color-on-brand)!important}.mf-badge--accent .mat-badge-content{background-color:var(--mf-color-accent-500)!important;color:var(--mf-color-neutral-900)!important}.mf-badge--error .mat-badge-content{background-color:var(--mf-color-error-500)!important;color:var(--mf-color-neutral-0)!important}.mf-badge--neutral .mat-badge-content{background-color:var(--mf-color-neutral-400)!important;color:var(--mf-color-neutral-0)!important}.mat-badge-content{font-family:var(--mf-font-base)!important;font-weight:var(--mf-weight-bold)!important}\n"] }]
|
|
494
|
+
}], propDecorators: { content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], hidden: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidden", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], overlap: [{ type: i0.Input, args: [{ isSignal: true, alias: "overlap", required: false }] }] } });
|
|
495
|
+
|
|
496
|
+
/**
|
|
497
|
+
* Breadcrumb de la librería ng-comps.
|
|
498
|
+
* Componente de navegación jerárquica para indicar la ubicación
|
|
499
|
+
* del usuario en la aplicación.
|
|
500
|
+
*/
|
|
501
|
+
class MfBreadcrumbComponent {
|
|
502
|
+
/** Items del breadcrumb */
|
|
503
|
+
items = input.required(...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
504
|
+
/** Icono separador */
|
|
505
|
+
separator = input('chevron_right', ...(ngDevMode ? [{ debugName: "separator" }] : /* istanbul ignore next */ []));
|
|
506
|
+
/** Label de accesibilidad */
|
|
507
|
+
ariaLabel = input('Breadcrumb', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
508
|
+
mfItemClick = output();
|
|
509
|
+
hostClasses = computed(() => 'mf-breadcrumb', ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
510
|
+
onItemClick(event, item) {
|
|
511
|
+
event.preventDefault();
|
|
512
|
+
this.mfItemClick.emit(item);
|
|
513
|
+
}
|
|
514
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfBreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
515
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfBreadcrumbComponent, isStandalone: true, selector: "mf-breadcrumb", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mfItemClick: "mfItemClick" }, ngImport: i0, template: `
|
|
516
|
+
<nav [attr.aria-label]="ariaLabel()" [class]="hostClasses()">
|
|
517
|
+
<ol class="mf-breadcrumb__list">
|
|
518
|
+
@for (item of items(); track item.label; let last = $last) {
|
|
519
|
+
<li class="mf-breadcrumb__item">
|
|
520
|
+
@if (!last && item.href) {
|
|
521
|
+
<a
|
|
522
|
+
class="mf-breadcrumb__link"
|
|
523
|
+
[href]="item.href"
|
|
524
|
+
(click)="onItemClick($event, item)"
|
|
525
|
+
>
|
|
526
|
+
@if (item.icon) {
|
|
527
|
+
<mat-icon class="mf-breadcrumb__icon" aria-hidden="true">{{ item.icon }}</mat-icon>
|
|
528
|
+
}
|
|
529
|
+
{{ item.label }}
|
|
530
|
+
</a>
|
|
531
|
+
} @else {
|
|
532
|
+
<span class="mf-breadcrumb__current" [attr.aria-current]="last ? 'page' : null">
|
|
533
|
+
@if (item.icon) {
|
|
534
|
+
<mat-icon class="mf-breadcrumb__icon" aria-hidden="true">{{ item.icon }}</mat-icon>
|
|
535
|
+
}
|
|
536
|
+
{{ item.label }}
|
|
537
|
+
</span>
|
|
538
|
+
}
|
|
539
|
+
@if (!last) {
|
|
540
|
+
<mat-icon class="mf-breadcrumb__separator" aria-hidden="true">{{ separator() }}</mat-icon>
|
|
541
|
+
}
|
|
542
|
+
</li>
|
|
543
|
+
}
|
|
544
|
+
</ol>
|
|
545
|
+
</nav>
|
|
546
|
+
`, isInline: true, styles: [":host{display:block}.mf-breadcrumb__list{display:flex;align-items:center;flex-wrap:wrap;list-style:none;margin:0;padding:0;gap:var(--mf-space-1)}.mf-breadcrumb__item{display:flex;align-items:center;gap:var(--mf-space-1)}.mf-breadcrumb__link{display:inline-flex;align-items:center;gap:var(--mf-space-1);color:var(--mf-color-brand);text-decoration:none;font-family:var(--mf-font-base);font-size:var(--mf-text-sm);font-weight:var(--mf-weight-medium);padding:var(--mf-space-1) var(--mf-space-2);border-radius:var(--mf-radius-sm);transition:background-color var(--mf-duration-fast) var(--mf-ease-standard)}.mf-breadcrumb__link:hover{background-color:var(--mf-color-brand-light)}.mf-breadcrumb__current{display:inline-flex;align-items:center;gap:var(--mf-space-1);color:var(--mf-color-neutral-400);font-family:var(--mf-font-base);font-size:var(--mf-text-sm);font-weight:var(--mf-weight-medium);padding:var(--mf-space-1) var(--mf-space-2)}.mf-breadcrumb__separator{font-size:18px!important;width:18px!important;height:18px!important;color:var(--mf-color-neutral-300)}.mf-breadcrumb__icon{font-size:16px!important;width:16px!important;height:16px!important}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
547
|
+
}
|
|
548
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfBreadcrumbComponent, decorators: [{
|
|
549
|
+
type: Component,
|
|
550
|
+
args: [{ selector: 'mf-breadcrumb', imports: [MatIconModule], template: `
|
|
551
|
+
<nav [attr.aria-label]="ariaLabel()" [class]="hostClasses()">
|
|
552
|
+
<ol class="mf-breadcrumb__list">
|
|
553
|
+
@for (item of items(); track item.label; let last = $last) {
|
|
554
|
+
<li class="mf-breadcrumb__item">
|
|
555
|
+
@if (!last && item.href) {
|
|
556
|
+
<a
|
|
557
|
+
class="mf-breadcrumb__link"
|
|
558
|
+
[href]="item.href"
|
|
559
|
+
(click)="onItemClick($event, item)"
|
|
560
|
+
>
|
|
561
|
+
@if (item.icon) {
|
|
562
|
+
<mat-icon class="mf-breadcrumb__icon" aria-hidden="true">{{ item.icon }}</mat-icon>
|
|
563
|
+
}
|
|
564
|
+
{{ item.label }}
|
|
565
|
+
</a>
|
|
566
|
+
} @else {
|
|
567
|
+
<span class="mf-breadcrumb__current" [attr.aria-current]="last ? 'page' : null">
|
|
568
|
+
@if (item.icon) {
|
|
569
|
+
<mat-icon class="mf-breadcrumb__icon" aria-hidden="true">{{ item.icon }}</mat-icon>
|
|
570
|
+
}
|
|
571
|
+
{{ item.label }}
|
|
572
|
+
</span>
|
|
573
|
+
}
|
|
574
|
+
@if (!last) {
|
|
575
|
+
<mat-icon class="mf-breadcrumb__separator" aria-hidden="true">{{ separator() }}</mat-icon>
|
|
576
|
+
}
|
|
577
|
+
</li>
|
|
578
|
+
}
|
|
579
|
+
</ol>
|
|
580
|
+
</nav>
|
|
581
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.mf-breadcrumb__list{display:flex;align-items:center;flex-wrap:wrap;list-style:none;margin:0;padding:0;gap:var(--mf-space-1)}.mf-breadcrumb__item{display:flex;align-items:center;gap:var(--mf-space-1)}.mf-breadcrumb__link{display:inline-flex;align-items:center;gap:var(--mf-space-1);color:var(--mf-color-brand);text-decoration:none;font-family:var(--mf-font-base);font-size:var(--mf-text-sm);font-weight:var(--mf-weight-medium);padding:var(--mf-space-1) var(--mf-space-2);border-radius:var(--mf-radius-sm);transition:background-color var(--mf-duration-fast) var(--mf-ease-standard)}.mf-breadcrumb__link:hover{background-color:var(--mf-color-brand-light)}.mf-breadcrumb__current{display:inline-flex;align-items:center;gap:var(--mf-space-1);color:var(--mf-color-neutral-400);font-family:var(--mf-font-base);font-size:var(--mf-text-sm);font-weight:var(--mf-weight-medium);padding:var(--mf-space-1) var(--mf-space-2)}.mf-breadcrumb__separator{font-size:18px!important;width:18px!important;height:18px!important;color:var(--mf-color-neutral-300)}.mf-breadcrumb__icon{font-size:16px!important;width:16px!important;height:16px!important}\n"] }]
|
|
582
|
+
}], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }], separator: [{ type: i0.Input, args: [{ isSignal: true, alias: "separator", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], mfItemClick: [{ type: i0.Output, args: ["mfItemClick"] }] } });
|
|
583
|
+
|
|
584
|
+
/**
|
|
585
|
+
* Botón de la librería ng-comps.
|
|
586
|
+
* Envuelve Angular Material `mat-button` / `mat-flat-button` / `mat-stroked-button`
|
|
587
|
+
* y expone una API uniforme con look and feel de marca.
|
|
588
|
+
*/
|
|
589
|
+
class MfButtonComponent {
|
|
590
|
+
label = input.required(...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
591
|
+
variant = input('filled', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
592
|
+
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
593
|
+
type = input('button', ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
|
|
594
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
595
|
+
leadingIcon = input(undefined, ...(ngDevMode ? [{ debugName: "leadingIcon" }] : /* istanbul ignore next */ []));
|
|
596
|
+
trailingIcon = input(undefined, ...(ngDevMode ? [{ debugName: "trailingIcon" }] : /* istanbul ignore next */ []));
|
|
597
|
+
fullWidth = input(false, ...(ngDevMode ? [{ debugName: "fullWidth" }] : /* istanbul ignore next */ []));
|
|
598
|
+
mfClick = output();
|
|
599
|
+
hostClasses = computed(() => {
|
|
600
|
+
const classes = ['mf-btn', `mf-btn--${this.variant()}`, `mf-btn--${this.size()}`];
|
|
601
|
+
if (this.fullWidth())
|
|
602
|
+
classes.push('mf-btn--full');
|
|
603
|
+
return classes.join(' ');
|
|
604
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
605
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
606
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfButtonComponent, isStandalone: true, selector: "mf-button", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, leadingIcon: { classPropertyName: "leadingIcon", publicName: "leadingIcon", isSignal: true, isRequired: false, transformFunction: null }, trailingIcon: { classPropertyName: "trailingIcon", publicName: "trailingIcon", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mfClick: "mfClick" }, ngImport: i0, template: `
|
|
607
|
+
@if (variant() === 'filled') {
|
|
608
|
+
<button
|
|
609
|
+
mat-flat-button
|
|
610
|
+
[type]="type()"
|
|
611
|
+
[disabled]="disabled()"
|
|
612
|
+
[class]="hostClasses()"
|
|
613
|
+
(click)="mfClick.emit($event)"
|
|
614
|
+
>
|
|
615
|
+
@if (leadingIcon()) {
|
|
616
|
+
<mat-icon aria-hidden="true">{{ leadingIcon() }}</mat-icon>
|
|
617
|
+
}
|
|
618
|
+
<span>{{ label() }}</span>
|
|
619
|
+
@if (trailingIcon()) {
|
|
620
|
+
<mat-icon aria-hidden="true">{{ trailingIcon() }}</mat-icon>
|
|
621
|
+
}
|
|
622
|
+
</button>
|
|
623
|
+
} @else if (variant() === 'outlined') {
|
|
624
|
+
<button
|
|
625
|
+
mat-stroked-button
|
|
626
|
+
[type]="type()"
|
|
627
|
+
[disabled]="disabled()"
|
|
628
|
+
[class]="hostClasses()"
|
|
629
|
+
(click)="mfClick.emit($event)"
|
|
630
|
+
>
|
|
631
|
+
@if (leadingIcon()) {
|
|
632
|
+
<mat-icon aria-hidden="true">{{ leadingIcon() }}</mat-icon>
|
|
633
|
+
}
|
|
634
|
+
<span>{{ label() }}</span>
|
|
635
|
+
@if (trailingIcon()) {
|
|
636
|
+
<mat-icon aria-hidden="true">{{ trailingIcon() }}</mat-icon>
|
|
637
|
+
}
|
|
638
|
+
</button>
|
|
639
|
+
} @else {
|
|
640
|
+
<button
|
|
641
|
+
mat-button
|
|
642
|
+
[type]="type()"
|
|
643
|
+
[disabled]="disabled()"
|
|
644
|
+
[class]="hostClasses()"
|
|
645
|
+
(click)="mfClick.emit($event)"
|
|
646
|
+
>
|
|
647
|
+
@if (leadingIcon()) {
|
|
648
|
+
<mat-icon aria-hidden="true">{{ leadingIcon() }}</mat-icon>
|
|
649
|
+
}
|
|
650
|
+
<span>{{ label() }}</span>
|
|
651
|
+
@if (trailingIcon()) {
|
|
652
|
+
<mat-icon aria-hidden="true">{{ trailingIcon() }}</mat-icon>
|
|
653
|
+
}
|
|
654
|
+
</button>
|
|
655
|
+
}
|
|
656
|
+
`, isInline: true, styles: [":host{display:inline-block}:host([fullWidth]),:host-context(.mf-btn--full){display:block}.mf-btn{border-radius:var(--mf-radius-full)!important;font-family:var(--mf-font-base)!important;font-weight:var(--mf-weight-bold)!important;letter-spacing:.01em;transition:background-color var(--mf-duration-base) var(--mf-ease-standard),box-shadow var(--mf-duration-base) var(--mf-ease-standard),opacity var(--mf-duration-fast) var(--mf-ease-standard)}.mf-btn.mf-btn--full{width:100%}.mf-btn--filled.mdc-button,.mf-btn--filled.mat-mdc-unelevated-button{background-color:var(--mf-color-brand)!important;color:var(--mf-color-on-brand)!important}.mf-btn--filled.mdc-button:hover:not([disabled]),.mf-btn--filled.mat-mdc-unelevated-button:hover:not([disabled]){background-color:var(--mf-color-brand-hover)!important;box-shadow:var(--mf-shadow-md)}.mf-btn--outlined.mdc-button,.mf-btn--outlined.mat-mdc-outlined-button{color:var(--mf-color-secondary-900)!important;border-color:var(--mf-color-border)!important;background-color:var(--mf-color-surface)}.mf-btn--outlined.mdc-button:hover:not([disabled]),.mf-btn--outlined.mat-mdc-outlined-button:hover:not([disabled]){background-color:var(--mf-color-surface-raised);box-shadow:var(--mf-shadow-sm)}.mf-btn--text.mdc-button,.mf-btn--text.mat-mdc-button{color:var(--mf-color-brand)!important}.mf-btn--text.mdc-button:hover:not([disabled]),.mf-btn--text.mat-mdc-button:hover:not([disabled]){background-color:var(--mf-color-brand-light)}.mf-btn--sm.mdc-button{height:34px!important;padding:0 var(--mf-space-4)!important;font-size:var(--mf-text-sm)!important}.mf-btn--md.mdc-button{height:40px!important;padding:0 var(--mf-space-5)!important;font-size:var(--mf-text-sm)!important}.mf-btn--lg.mdc-button{height:48px!important;padding:0 var(--mf-space-6)!important;font-size:var(--mf-text-base)!important}.mf-btn[disabled],.mf-btn.mdc-button:disabled{opacity:.42;cursor:default;pointer-events:none}.mf-btn .mat-icon{font-size:1.1em;height:1.1em;width:1.1em;vertical-align:middle;line-height:1}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$5.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
657
|
+
}
|
|
658
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfButtonComponent, decorators: [{
|
|
659
|
+
type: Component,
|
|
660
|
+
args: [{ selector: 'mf-button', imports: [MatButtonModule, MatIconModule], template: `
|
|
661
|
+
@if (variant() === 'filled') {
|
|
662
|
+
<button
|
|
663
|
+
mat-flat-button
|
|
664
|
+
[type]="type()"
|
|
665
|
+
[disabled]="disabled()"
|
|
666
|
+
[class]="hostClasses()"
|
|
667
|
+
(click)="mfClick.emit($event)"
|
|
668
|
+
>
|
|
669
|
+
@if (leadingIcon()) {
|
|
670
|
+
<mat-icon aria-hidden="true">{{ leadingIcon() }}</mat-icon>
|
|
671
|
+
}
|
|
672
|
+
<span>{{ label() }}</span>
|
|
673
|
+
@if (trailingIcon()) {
|
|
674
|
+
<mat-icon aria-hidden="true">{{ trailingIcon() }}</mat-icon>
|
|
675
|
+
}
|
|
676
|
+
</button>
|
|
677
|
+
} @else if (variant() === 'outlined') {
|
|
678
|
+
<button
|
|
679
|
+
mat-stroked-button
|
|
680
|
+
[type]="type()"
|
|
681
|
+
[disabled]="disabled()"
|
|
682
|
+
[class]="hostClasses()"
|
|
683
|
+
(click)="mfClick.emit($event)"
|
|
684
|
+
>
|
|
685
|
+
@if (leadingIcon()) {
|
|
686
|
+
<mat-icon aria-hidden="true">{{ leadingIcon() }}</mat-icon>
|
|
687
|
+
}
|
|
688
|
+
<span>{{ label() }}</span>
|
|
689
|
+
@if (trailingIcon()) {
|
|
690
|
+
<mat-icon aria-hidden="true">{{ trailingIcon() }}</mat-icon>
|
|
691
|
+
}
|
|
692
|
+
</button>
|
|
693
|
+
} @else {
|
|
694
|
+
<button
|
|
695
|
+
mat-button
|
|
696
|
+
[type]="type()"
|
|
697
|
+
[disabled]="disabled()"
|
|
698
|
+
[class]="hostClasses()"
|
|
699
|
+
(click)="mfClick.emit($event)"
|
|
700
|
+
>
|
|
701
|
+
@if (leadingIcon()) {
|
|
702
|
+
<mat-icon aria-hidden="true">{{ leadingIcon() }}</mat-icon>
|
|
703
|
+
}
|
|
704
|
+
<span>{{ label() }}</span>
|
|
705
|
+
@if (trailingIcon()) {
|
|
706
|
+
<mat-icon aria-hidden="true">{{ trailingIcon() }}</mat-icon>
|
|
707
|
+
}
|
|
708
|
+
</button>
|
|
709
|
+
}
|
|
710
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block}:host([fullWidth]),:host-context(.mf-btn--full){display:block}.mf-btn{border-radius:var(--mf-radius-full)!important;font-family:var(--mf-font-base)!important;font-weight:var(--mf-weight-bold)!important;letter-spacing:.01em;transition:background-color var(--mf-duration-base) var(--mf-ease-standard),box-shadow var(--mf-duration-base) var(--mf-ease-standard),opacity var(--mf-duration-fast) var(--mf-ease-standard)}.mf-btn.mf-btn--full{width:100%}.mf-btn--filled.mdc-button,.mf-btn--filled.mat-mdc-unelevated-button{background-color:var(--mf-color-brand)!important;color:var(--mf-color-on-brand)!important}.mf-btn--filled.mdc-button:hover:not([disabled]),.mf-btn--filled.mat-mdc-unelevated-button:hover:not([disabled]){background-color:var(--mf-color-brand-hover)!important;box-shadow:var(--mf-shadow-md)}.mf-btn--outlined.mdc-button,.mf-btn--outlined.mat-mdc-outlined-button{color:var(--mf-color-secondary-900)!important;border-color:var(--mf-color-border)!important;background-color:var(--mf-color-surface)}.mf-btn--outlined.mdc-button:hover:not([disabled]),.mf-btn--outlined.mat-mdc-outlined-button:hover:not([disabled]){background-color:var(--mf-color-surface-raised);box-shadow:var(--mf-shadow-sm)}.mf-btn--text.mdc-button,.mf-btn--text.mat-mdc-button{color:var(--mf-color-brand)!important}.mf-btn--text.mdc-button:hover:not([disabled]),.mf-btn--text.mat-mdc-button:hover:not([disabled]){background-color:var(--mf-color-brand-light)}.mf-btn--sm.mdc-button{height:34px!important;padding:0 var(--mf-space-4)!important;font-size:var(--mf-text-sm)!important}.mf-btn--md.mdc-button{height:40px!important;padding:0 var(--mf-space-5)!important;font-size:var(--mf-text-sm)!important}.mf-btn--lg.mdc-button{height:48px!important;padding:0 var(--mf-space-6)!important;font-size:var(--mf-text-base)!important}.mf-btn[disabled],.mf-btn.mdc-button:disabled{opacity:.42;cursor:default;pointer-events:none}.mf-btn .mat-icon{font-size:1.1em;height:1.1em;width:1.1em;vertical-align:middle;line-height:1}\n"] }]
|
|
711
|
+
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], leadingIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "leadingIcon", required: false }] }], trailingIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "trailingIcon", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], mfClick: [{ type: i0.Output, args: ["mfClick"] }] } });
|
|
712
|
+
|
|
713
|
+
/**
|
|
714
|
+
* Card de la librería ng-comps.
|
|
715
|
+
* Envuelve Angular Material `mat-card` y expone una API uniforme
|
|
716
|
+
* con look and feel de marca. Admite contenido proyectado mediante slots.
|
|
717
|
+
*/
|
|
718
|
+
class MfCardComponent {
|
|
719
|
+
/** Título de la card */
|
|
720
|
+
title = input(undefined, ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
721
|
+
/** Subtítulo de la card */
|
|
722
|
+
subtitle = input(undefined, ...(ngDevMode ? [{ debugName: "subtitle" }] : /* istanbul ignore next */ []));
|
|
723
|
+
/** Variante visual */
|
|
724
|
+
variant = input('elevated', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
725
|
+
/** Padding interno */
|
|
726
|
+
padding = input('md', ...(ngDevMode ? [{ debugName: "padding" }] : /* istanbul ignore next */ []));
|
|
727
|
+
/** Interactiva (hover effect) */
|
|
728
|
+
interactive = input(false, ...(ngDevMode ? [{ debugName: "interactive" }] : /* istanbul ignore next */ []));
|
|
729
|
+
hasHeader = computed(() => !!this.title() || !!this.subtitle(), ...(ngDevMode ? [{ debugName: "hasHeader" }] : /* istanbul ignore next */ []));
|
|
730
|
+
hostClasses = computed(() => {
|
|
731
|
+
const classes = ['mf-card', `mf-card--${this.variant()}`, `mf-card--pad-${this.padding()}`];
|
|
732
|
+
if (this.interactive())
|
|
733
|
+
classes.push('mf-card--interactive');
|
|
734
|
+
return classes.join(' ');
|
|
735
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
736
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
737
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfCardComponent, isStandalone: true, selector: "mf-card", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, subtitle: { classPropertyName: "subtitle", publicName: "subtitle", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, interactive: { classPropertyName: "interactive", publicName: "interactive", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
738
|
+
<mat-card [class]="hostClasses()">
|
|
739
|
+
@if (hasHeader()) {
|
|
740
|
+
<mat-card-header>
|
|
741
|
+
@if (title()) {
|
|
742
|
+
<mat-card-title class="mf-card__title">{{ title() }}</mat-card-title>
|
|
743
|
+
}
|
|
744
|
+
@if (subtitle()) {
|
|
745
|
+
<mat-card-subtitle class="mf-card__subtitle">{{ subtitle() }}</mat-card-subtitle>
|
|
746
|
+
}
|
|
747
|
+
</mat-card-header>
|
|
748
|
+
}
|
|
749
|
+
<mat-card-content>
|
|
750
|
+
<ng-content />
|
|
751
|
+
</mat-card-content>
|
|
752
|
+
<ng-content select="[mfCardFooter]" />
|
|
753
|
+
</mat-card>
|
|
754
|
+
`, isInline: true, styles: [":host{display:block}.mf-card{font-family:var(--mf-font-base)!important;border-radius:var(--mf-radius-xl)!important;overflow:hidden;transition:box-shadow var(--mf-duration-base) var(--mf-ease-standard),transform var(--mf-duration-base) var(--mf-ease-standard)}.mf-card--elevated{background-color:var(--mf-color-surface)!important;box-shadow:var(--mf-shadow-md)!important;border:none!important}.mf-card--outlined{background-color:var(--mf-color-surface)!important;box-shadow:none!important;border:1px solid var(--mf-color-border)!important}.mf-card--flat{background-color:var(--mf-color-surface-raised)!important;box-shadow:none!important;border:none!important}.mf-card--interactive{cursor:pointer}.mf-card--interactive:hover{box-shadow:var(--mf-shadow-lg)!important;transform:translateY(-2px)}.mf-card--interactive:active{transform:translateY(0)}.mf-card--pad-none .mat-mdc-card-content{padding:0!important}.mf-card--pad-sm .mat-mdc-card-content{padding:var(--mf-space-3)!important}.mf-card--pad-md .mat-mdc-card-content{padding:var(--mf-space-5)!important}.mf-card--pad-lg .mat-mdc-card-content{padding:var(--mf-space-8)!important}.mf-card .mat-mdc-card-header{padding:var(--mf-space-5) var(--mf-space-5) 0!important}.mf-card__title{font-family:var(--mf-font-display)!important;font-size:var(--mf-text-lg)!important;font-weight:var(--mf-weight-bold)!important;color:var(--mf-color-on-surface)!important;margin:0!important}.mf-card__subtitle{font-size:var(--mf-text-sm)!important;color:var(--mf-color-neutral-400)!important;margin-top:var(--mf-space-1)!important}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i1$6.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i1$6.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i1$6.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i1$6.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i1$6.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
755
|
+
}
|
|
756
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfCardComponent, decorators: [{
|
|
757
|
+
type: Component,
|
|
758
|
+
args: [{ selector: 'mf-card', imports: [MatCardModule], template: `
|
|
759
|
+
<mat-card [class]="hostClasses()">
|
|
760
|
+
@if (hasHeader()) {
|
|
761
|
+
<mat-card-header>
|
|
762
|
+
@if (title()) {
|
|
763
|
+
<mat-card-title class="mf-card__title">{{ title() }}</mat-card-title>
|
|
764
|
+
}
|
|
765
|
+
@if (subtitle()) {
|
|
766
|
+
<mat-card-subtitle class="mf-card__subtitle">{{ subtitle() }}</mat-card-subtitle>
|
|
767
|
+
}
|
|
768
|
+
</mat-card-header>
|
|
769
|
+
}
|
|
770
|
+
<mat-card-content>
|
|
771
|
+
<ng-content />
|
|
772
|
+
</mat-card-content>
|
|
773
|
+
<ng-content select="[mfCardFooter]" />
|
|
774
|
+
</mat-card>
|
|
775
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.mf-card{font-family:var(--mf-font-base)!important;border-radius:var(--mf-radius-xl)!important;overflow:hidden;transition:box-shadow var(--mf-duration-base) var(--mf-ease-standard),transform var(--mf-duration-base) var(--mf-ease-standard)}.mf-card--elevated{background-color:var(--mf-color-surface)!important;box-shadow:var(--mf-shadow-md)!important;border:none!important}.mf-card--outlined{background-color:var(--mf-color-surface)!important;box-shadow:none!important;border:1px solid var(--mf-color-border)!important}.mf-card--flat{background-color:var(--mf-color-surface-raised)!important;box-shadow:none!important;border:none!important}.mf-card--interactive{cursor:pointer}.mf-card--interactive:hover{box-shadow:var(--mf-shadow-lg)!important;transform:translateY(-2px)}.mf-card--interactive:active{transform:translateY(0)}.mf-card--pad-none .mat-mdc-card-content{padding:0!important}.mf-card--pad-sm .mat-mdc-card-content{padding:var(--mf-space-3)!important}.mf-card--pad-md .mat-mdc-card-content{padding:var(--mf-space-5)!important}.mf-card--pad-lg .mat-mdc-card-content{padding:var(--mf-space-8)!important}.mf-card .mat-mdc-card-header{padding:var(--mf-space-5) var(--mf-space-5) 0!important}.mf-card__title{font-family:var(--mf-font-display)!important;font-size:var(--mf-text-lg)!important;font-weight:var(--mf-weight-bold)!important;color:var(--mf-color-on-surface)!important;margin:0!important}.mf-card__subtitle{font-size:var(--mf-text-sm)!important;color:var(--mf-color-neutral-400)!important;margin-top:var(--mf-space-1)!important}\n"] }]
|
|
776
|
+
}], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], subtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "subtitle", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }], interactive: [{ type: i0.Input, args: [{ isSignal: true, alias: "interactive", required: false }] }] } });
|
|
777
|
+
|
|
778
|
+
/**
|
|
779
|
+
* Checkbox de la librería ng-comps.
|
|
780
|
+
* Envuelve Angular Material `mat-checkbox` y expone una API uniforme
|
|
781
|
+
* con look and feel de marca.
|
|
782
|
+
*/
|
|
783
|
+
class MfCheckboxComponent {
|
|
784
|
+
/** Texto del checkbox */
|
|
785
|
+
label = input.required(...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
786
|
+
/** Estado marcado */
|
|
787
|
+
checked = input(false, ...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
|
|
788
|
+
/** Estado indeterminado */
|
|
789
|
+
indeterminate = input(false, ...(ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []));
|
|
790
|
+
/** Deshabilitado */
|
|
791
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
792
|
+
mfChange = output();
|
|
793
|
+
hostClasses = computed(() => {
|
|
794
|
+
const classes = ['mf-checkbox'];
|
|
795
|
+
if (this.disabled())
|
|
796
|
+
classes.push('mf-checkbox--disabled');
|
|
797
|
+
return classes.join(' ');
|
|
798
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
799
|
+
onChange(event) {
|
|
800
|
+
this.mfChange.emit(event.checked);
|
|
801
|
+
}
|
|
802
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfCheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
803
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: MfCheckboxComponent, isStandalone: true, selector: "mf-checkbox", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mfChange: "mfChange" }, ngImport: i0, template: `
|
|
804
|
+
<mat-checkbox
|
|
805
|
+
[checked]="checked()"
|
|
806
|
+
[disabled]="disabled()"
|
|
807
|
+
[indeterminate]="indeterminate()"
|
|
808
|
+
[class]="hostClasses()"
|
|
809
|
+
(change)="onChange($event)"
|
|
810
|
+
>
|
|
811
|
+
{{ label() }}
|
|
812
|
+
</mat-checkbox>
|
|
813
|
+
`, isInline: true, styles: [":host{display:inline-block}.mf-checkbox{font-family:var(--mf-font-base)!important}.mf-checkbox .mdc-label,.mf-checkbox .mat-mdc-checkbox-label{font-family:var(--mf-font-base)!important;font-size:var(--mf-text-sm)!important;color:var(--mf-color-on-surface)!important;cursor:pointer}.mf-checkbox .mdc-checkbox__background{border-color:var(--mf-color-neutral-300)!important;border-radius:var(--mf-radius-sm)!important;border-width:1.5px!important;transition:border-color var(--mf-duration-base) var(--mf-ease-standard),background-color var(--mf-duration-base) var(--mf-ease-standard)}.mf-checkbox .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mf-checkbox .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:var(--mf-color-brand)!important;border-color:var(--mf-color-brand)!important}.mf-checkbox:hover .mdc-checkbox__background{border-color:var(--mf-color-brand)!important}.mf-checkbox .mat-mdc-checkbox-ripple,.mf-checkbox .mdc-checkbox__ripple{display:none!important}.mf-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__background{box-shadow:0 0 0 3px var(--mf-color-primary-100)}.mf-checkbox--disabled{opacity:.42;pointer-events:none}\n"], dependencies: [{ kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i1$7.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
814
|
+
}
|
|
815
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfCheckboxComponent, decorators: [{
|
|
816
|
+
type: Component,
|
|
817
|
+
args: [{ selector: 'mf-checkbox', imports: [MatCheckboxModule], template: `
|
|
818
|
+
<mat-checkbox
|
|
819
|
+
[checked]="checked()"
|
|
820
|
+
[disabled]="disabled()"
|
|
821
|
+
[indeterminate]="indeterminate()"
|
|
822
|
+
[class]="hostClasses()"
|
|
823
|
+
(change)="onChange($event)"
|
|
824
|
+
>
|
|
825
|
+
{{ label() }}
|
|
826
|
+
</mat-checkbox>
|
|
827
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block}.mf-checkbox{font-family:var(--mf-font-base)!important}.mf-checkbox .mdc-label,.mf-checkbox .mat-mdc-checkbox-label{font-family:var(--mf-font-base)!important;font-size:var(--mf-text-sm)!important;color:var(--mf-color-on-surface)!important;cursor:pointer}.mf-checkbox .mdc-checkbox__background{border-color:var(--mf-color-neutral-300)!important;border-radius:var(--mf-radius-sm)!important;border-width:1.5px!important;transition:border-color var(--mf-duration-base) var(--mf-ease-standard),background-color var(--mf-duration-base) var(--mf-ease-standard)}.mf-checkbox .mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mf-checkbox .mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background{background-color:var(--mf-color-brand)!important;border-color:var(--mf-color-brand)!important}.mf-checkbox:hover .mdc-checkbox__background{border-color:var(--mf-color-brand)!important}.mf-checkbox .mat-mdc-checkbox-ripple,.mf-checkbox .mdc-checkbox__ripple{display:none!important}.mf-checkbox .mdc-checkbox__native-control:focus~.mdc-checkbox__background{box-shadow:0 0 0 3px var(--mf-color-primary-100)}.mf-checkbox--disabled{opacity:.42;pointer-events:none}\n"] }]
|
|
828
|
+
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], indeterminate: [{ type: i0.Input, args: [{ isSignal: true, alias: "indeterminate", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], mfChange: [{ type: i0.Output, args: ["mfChange"] }] } });
|
|
829
|
+
|
|
830
|
+
/**
|
|
831
|
+
* Chip de la librería ng-comps.
|
|
832
|
+
* Envuelve Angular Material `mat-chip` y expone una API uniforme
|
|
833
|
+
* con look and feel de marca. Ideal para tags, filtros y etiquetas.
|
|
834
|
+
*/
|
|
835
|
+
class MfChipComponent {
|
|
836
|
+
/** Texto del chip */
|
|
837
|
+
label = input.required(...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
838
|
+
/** Variante visual */
|
|
839
|
+
variant = input('filled', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
840
|
+
/** Color semántico */
|
|
841
|
+
color = input('brand', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
842
|
+
/** Seleccionado */
|
|
843
|
+
selected = input(false, ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
|
|
844
|
+
/** Puede ser removido */
|
|
845
|
+
removable = input(false, ...(ngDevMode ? [{ debugName: "removable" }] : /* istanbul ignore next */ []));
|
|
846
|
+
/** Deshabilitado */
|
|
847
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
848
|
+
/** Icono inicial */
|
|
849
|
+
leadingIcon = input(undefined, ...(ngDevMode ? [{ debugName: "leadingIcon" }] : /* istanbul ignore next */ []));
|
|
850
|
+
mfRemoved = output();
|
|
851
|
+
hostClasses = computed(() => {
|
|
852
|
+
const classes = ['mf-chip', `mf-chip--${this.variant()}`, `mf-chip--${this.color()}`];
|
|
853
|
+
if (this.selected())
|
|
854
|
+
classes.push('mf-chip--selected');
|
|
855
|
+
return classes.join(' ');
|
|
856
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
857
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfChipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
858
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfChipComponent, isStandalone: true, selector: "mf-chip", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, removable: { classPropertyName: "removable", publicName: "removable", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, leadingIcon: { classPropertyName: "leadingIcon", publicName: "leadingIcon", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mfRemoved: "mfRemoved" }, ngImport: i0, template: `
|
|
859
|
+
@if (removable()) {
|
|
860
|
+
<mat-chip
|
|
861
|
+
[highlighted]="selected()"
|
|
862
|
+
[disabled]="disabled()"
|
|
863
|
+
[class]="hostClasses()"
|
|
864
|
+
(removed)="mfRemoved.emit()"
|
|
865
|
+
>
|
|
866
|
+
@if (leadingIcon()) {
|
|
867
|
+
<mat-icon matChipAvatar aria-hidden="true">{{ leadingIcon() }}</mat-icon>
|
|
868
|
+
}
|
|
869
|
+
{{ label() }}
|
|
870
|
+
<button matChipRemove [attr.aria-label]="'Eliminar ' + label()">
|
|
871
|
+
<mat-icon>cancel</mat-icon>
|
|
872
|
+
</button>
|
|
873
|
+
</mat-chip>
|
|
874
|
+
} @else {
|
|
875
|
+
<mat-chip
|
|
876
|
+
[highlighted]="selected()"
|
|
877
|
+
[disabled]="disabled()"
|
|
878
|
+
[class]="hostClasses()"
|
|
879
|
+
>
|
|
880
|
+
@if (leadingIcon()) {
|
|
881
|
+
<mat-icon matChipAvatar aria-hidden="true">{{ leadingIcon() }}</mat-icon>
|
|
882
|
+
}
|
|
883
|
+
{{ label() }}
|
|
884
|
+
</mat-chip>
|
|
885
|
+
}
|
|
886
|
+
`, isInline: true, styles: [":host{display:inline-block}.mf-chip.mat-mdc-chip{font-family:var(--mf-font-base)!important;font-size:var(--mf-text-sm)!important;font-weight:var(--mf-weight-medium)!important;border-radius:var(--mf-radius-full)!important;transition:background-color var(--mf-duration-base) var(--mf-ease-standard),box-shadow var(--mf-duration-base) var(--mf-ease-standard)}.mf-chip--filled.mf-chip--brand.mat-mdc-chip{background-color:var(--mf-color-primary-100)!important;color:var(--mf-color-primary-800)!important}.mf-chip--filled.mf-chip--accent.mat-mdc-chip{background-color:var(--mf-color-accent-300)!important;color:var(--mf-color-accent-700)!important}.mf-chip--filled.mf-chip--error.mat-mdc-chip{background-color:#fee2e2!important;color:var(--mf-color-error-700)!important}.mf-chip--filled.mf-chip--neutral.mat-mdc-chip{background-color:var(--mf-color-neutral-100)!important;color:var(--mf-color-neutral-600)!important}.mf-chip--outlined.mat-mdc-chip{background-color:transparent!important;border:1px solid var(--mf-color-border)!important}.mf-chip--outlined.mf-chip--brand.mat-mdc-chip{color:var(--mf-color-primary-700)!important;border-color:var(--mf-color-primary-200)!important}.mf-chip--outlined.mf-chip--accent.mat-mdc-chip{color:var(--mf-color-accent-700)!important;border-color:var(--mf-color-accent-300)!important}.mf-chip--outlined.mf-chip--error.mat-mdc-chip{color:var(--mf-color-error-700)!important;border-color:var(--mf-color-error-500)!important}.mf-chip--selected.mat-mdc-chip{box-shadow:var(--mf-shadow-sm)}.mf-chip.mat-mdc-chip.mat-mdc-chip-disabled{opacity:.42}\n"], dependencies: [{ kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i1$8.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i1$8.MatChipAvatar, selector: "mat-chip-avatar, [matChipAvatar]" }, { kind: "directive", type: i1$8.MatChipRemove, selector: "[matChipRemove]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
887
|
+
}
|
|
888
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfChipComponent, decorators: [{
|
|
889
|
+
type: Component,
|
|
890
|
+
args: [{ selector: 'mf-chip', imports: [MatChipsModule, MatIconModule], template: `
|
|
891
|
+
@if (removable()) {
|
|
892
|
+
<mat-chip
|
|
893
|
+
[highlighted]="selected()"
|
|
894
|
+
[disabled]="disabled()"
|
|
895
|
+
[class]="hostClasses()"
|
|
896
|
+
(removed)="mfRemoved.emit()"
|
|
897
|
+
>
|
|
898
|
+
@if (leadingIcon()) {
|
|
899
|
+
<mat-icon matChipAvatar aria-hidden="true">{{ leadingIcon() }}</mat-icon>
|
|
900
|
+
}
|
|
901
|
+
{{ label() }}
|
|
902
|
+
<button matChipRemove [attr.aria-label]="'Eliminar ' + label()">
|
|
903
|
+
<mat-icon>cancel</mat-icon>
|
|
904
|
+
</button>
|
|
905
|
+
</mat-chip>
|
|
906
|
+
} @else {
|
|
907
|
+
<mat-chip
|
|
908
|
+
[highlighted]="selected()"
|
|
909
|
+
[disabled]="disabled()"
|
|
910
|
+
[class]="hostClasses()"
|
|
911
|
+
>
|
|
912
|
+
@if (leadingIcon()) {
|
|
913
|
+
<mat-icon matChipAvatar aria-hidden="true">{{ leadingIcon() }}</mat-icon>
|
|
914
|
+
}
|
|
915
|
+
{{ label() }}
|
|
916
|
+
</mat-chip>
|
|
917
|
+
}
|
|
918
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block}.mf-chip.mat-mdc-chip{font-family:var(--mf-font-base)!important;font-size:var(--mf-text-sm)!important;font-weight:var(--mf-weight-medium)!important;border-radius:var(--mf-radius-full)!important;transition:background-color var(--mf-duration-base) var(--mf-ease-standard),box-shadow var(--mf-duration-base) var(--mf-ease-standard)}.mf-chip--filled.mf-chip--brand.mat-mdc-chip{background-color:var(--mf-color-primary-100)!important;color:var(--mf-color-primary-800)!important}.mf-chip--filled.mf-chip--accent.mat-mdc-chip{background-color:var(--mf-color-accent-300)!important;color:var(--mf-color-accent-700)!important}.mf-chip--filled.mf-chip--error.mat-mdc-chip{background-color:#fee2e2!important;color:var(--mf-color-error-700)!important}.mf-chip--filled.mf-chip--neutral.mat-mdc-chip{background-color:var(--mf-color-neutral-100)!important;color:var(--mf-color-neutral-600)!important}.mf-chip--outlined.mat-mdc-chip{background-color:transparent!important;border:1px solid var(--mf-color-border)!important}.mf-chip--outlined.mf-chip--brand.mat-mdc-chip{color:var(--mf-color-primary-700)!important;border-color:var(--mf-color-primary-200)!important}.mf-chip--outlined.mf-chip--accent.mat-mdc-chip{color:var(--mf-color-accent-700)!important;border-color:var(--mf-color-accent-300)!important}.mf-chip--outlined.mf-chip--error.mat-mdc-chip{color:var(--mf-color-error-700)!important;border-color:var(--mf-color-error-500)!important}.mf-chip--selected.mat-mdc-chip{box-shadow:var(--mf-shadow-sm)}.mf-chip.mat-mdc-chip.mat-mdc-chip-disabled{opacity:.42}\n"] }]
|
|
919
|
+
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], removable: [{ type: i0.Input, args: [{ isSignal: true, alias: "removable", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], leadingIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "leadingIcon", required: false }] }], mfRemoved: [{ type: i0.Output, args: ["mfRemoved"] }] } });
|
|
920
|
+
|
|
921
|
+
/**
|
|
922
|
+
* Selector de fecha de la librería ng-comps.
|
|
923
|
+
* Envuelve Angular Material `mat-datepicker` y expone una API uniforme
|
|
924
|
+
* con look and feel de marca.
|
|
925
|
+
*/
|
|
926
|
+
class MfDatepickerComponent {
|
|
927
|
+
/** Etiqueta flotante del campo */
|
|
928
|
+
label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
929
|
+
/** Placeholder del input */
|
|
930
|
+
placeholder = input('DD/MM/YYYY', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
931
|
+
/** Tamaño del campo */
|
|
932
|
+
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
933
|
+
/** Deshabilitado */
|
|
934
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
935
|
+
/** Valor inicial del datepicker */
|
|
936
|
+
value = input(null, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
937
|
+
/** Texto de ayuda debajo del campo */
|
|
938
|
+
hint = input(undefined, ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
|
|
939
|
+
/** Mensaje de error */
|
|
940
|
+
error = input(undefined, ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
|
|
941
|
+
/** Fecha mínima seleccionable */
|
|
942
|
+
min = input(null, ...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
943
|
+
/** Fecha máxima seleccionable */
|
|
944
|
+
max = input(null, ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
945
|
+
/** Ancho completo */
|
|
946
|
+
fullWidth = input(false, ...(ngDevMode ? [{ debugName: "fullWidth" }] : /* istanbul ignore next */ []));
|
|
947
|
+
mfChange = output();
|
|
948
|
+
mfBlur = output();
|
|
949
|
+
currentValue = signal(null, ...(ngDevMode ? [{ debugName: "currentValue" }] : /* istanbul ignore next */ []));
|
|
950
|
+
constructor() {
|
|
951
|
+
effect(() => {
|
|
952
|
+
this.currentValue.set(this.value());
|
|
953
|
+
});
|
|
954
|
+
}
|
|
955
|
+
hostClasses = computed(() => {
|
|
956
|
+
const classes = ['mf-datepicker', `mf-datepicker--${this.size()}`];
|
|
957
|
+
if (this.fullWidth())
|
|
958
|
+
classes.push('mf-datepicker--full');
|
|
959
|
+
if (this.error())
|
|
960
|
+
classes.push('mf-datepicker--error');
|
|
961
|
+
return classes.join(' ');
|
|
962
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
963
|
+
onDateChange(event) {
|
|
964
|
+
this.currentValue.set(event.value);
|
|
965
|
+
this.mfChange.emit(event.value);
|
|
966
|
+
}
|
|
967
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfDatepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
968
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfDatepickerComponent, isStandalone: true, selector: "mf-datepicker", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mfChange: "mfChange", mfBlur: "mfBlur" }, ngImport: i0, template: `
|
|
969
|
+
<mat-form-field [appearance]="'outline'" [class]="hostClasses()">
|
|
970
|
+
@if (label()) {
|
|
971
|
+
<mat-label>{{ label() }}</mat-label>
|
|
972
|
+
}
|
|
973
|
+
<input
|
|
974
|
+
matInput
|
|
975
|
+
[matDatepicker]="picker"
|
|
976
|
+
[placeholder]="placeholder()"
|
|
977
|
+
[disabled]="disabled()"
|
|
978
|
+
[min]="min()"
|
|
979
|
+
[max]="max()"
|
|
980
|
+
[ngModel]="currentValue()"
|
|
981
|
+
(dateChange)="onDateChange($event)"
|
|
982
|
+
(blur)="mfBlur.emit()"
|
|
983
|
+
/>
|
|
984
|
+
<mat-datepicker-toggle matIconSuffix [for]="picker" [disabled]="disabled()">
|
|
985
|
+
<mat-icon matDatepickerToggleIcon aria-hidden="true">calendar_month</mat-icon>
|
|
986
|
+
</mat-datepicker-toggle>
|
|
987
|
+
<mat-datepicker #picker />
|
|
988
|
+
@if (hint()) {
|
|
989
|
+
<mat-hint>{{ hint() }}</mat-hint>
|
|
990
|
+
}
|
|
991
|
+
@if (error()) {
|
|
992
|
+
<mat-error>{{ error() }}</mat-error>
|
|
993
|
+
}
|
|
994
|
+
</mat-form-field>
|
|
995
|
+
`, isInline: true, styles: [":host{display:inline-block}.mf-datepicker{font-family:var(--mf-font-base)!important;width:100%}.mf-datepicker--full{width:100%}.mf-datepicker .mat-mdc-text-field-wrapper{border-radius:var(--mf-radius-md)!important}.mf-datepicker .mdc-notched-outline__leading,.mf-datepicker .mdc-notched-outline__notch,.mf-datepicker .mdc-notched-outline__trailing{border-color:var(--mf-color-border)!important;transition:border-color var(--mf-duration-base) var(--mf-ease-standard)}.mf-datepicker .mat-mdc-form-field-focus-overlay{background-color:transparent!important}.mf-datepicker.mat-focused .mdc-notched-outline__leading,.mf-datepicker.mat-focused .mdc-notched-outline__notch,.mf-datepicker.mat-focused .mdc-notched-outline__trailing{border-color:var(--mf-color-brand)!important;border-width:1.5px!important}.mf-datepicker--error .mdc-notched-outline__leading,.mf-datepicker--error .mdc-notched-outline__notch,.mf-datepicker--error .mdc-notched-outline__trailing{border-color:var(--mf-color-error-500)!important}.mf-datepicker .mat-mdc-floating-label{font-family:var(--mf-font-base)!important;font-weight:var(--mf-weight-medium)!important;color:var(--mf-color-neutral-400)!important}.mf-datepicker.mat-focused .mat-mdc-floating-label{color:var(--mf-color-brand)!important}.mf-datepicker .mat-mdc-input-element{font-family:var(--mf-font-base)!important;color:var(--mf-color-on-surface)!important;caret-color:var(--mf-color-brand)}.mf-datepicker .mat-datepicker-toggle .mat-icon{color:var(--mf-color-neutral-400)!important;transition:color var(--mf-duration-base) var(--mf-ease-standard)}.mf-datepicker.mat-focused .mat-datepicker-toggle .mat-icon{color:var(--mf-color-brand)!important}.mf-datepicker .mat-mdc-form-field-hint{font-size:var(--mf-text-xs)!important;color:var(--mf-color-neutral-400)!important}.mf-datepicker .mat-mdc-form-field-error{font-size:var(--mf-text-xs)!important}.mf-datepicker--sm .mat-mdc-input-element{font-size:var(--mf-text-sm)!important}.mf-datepicker--md .mat-mdc-input-element{font-size:var(--mf-text-base)!important}.mf-datepicker--lg .mat-mdc-input-element{font-size:var(--mf-text-lg)!important;padding-top:var(--mf-space-1)!important;padding-bottom:var(--mf-space-1)!important}.mf-datepicker .mat-mdc-input-element:disabled{color:var(--mf-color-neutral-300)!important}\n"], dependencies: [{ kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i1$9.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i1$9.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i1$9.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "directive", type: i1$9.MatDatepickerToggleIcon, selector: "[matDatepickerToggleIcon]" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i1$3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i1$3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.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$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
996
|
+
}
|
|
997
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfDatepickerComponent, decorators: [{
|
|
998
|
+
type: Component,
|
|
999
|
+
args: [{ selector: 'mf-datepicker', imports: [
|
|
1000
|
+
MatDatepickerModule,
|
|
1001
|
+
MatFormFieldModule,
|
|
1002
|
+
MatInputModule,
|
|
1003
|
+
MatNativeDateModule,
|
|
1004
|
+
MatIconModule,
|
|
1005
|
+
FormsModule,
|
|
1006
|
+
], template: `
|
|
1007
|
+
<mat-form-field [appearance]="'outline'" [class]="hostClasses()">
|
|
1008
|
+
@if (label()) {
|
|
1009
|
+
<mat-label>{{ label() }}</mat-label>
|
|
1010
|
+
}
|
|
1011
|
+
<input
|
|
1012
|
+
matInput
|
|
1013
|
+
[matDatepicker]="picker"
|
|
1014
|
+
[placeholder]="placeholder()"
|
|
1015
|
+
[disabled]="disabled()"
|
|
1016
|
+
[min]="min()"
|
|
1017
|
+
[max]="max()"
|
|
1018
|
+
[ngModel]="currentValue()"
|
|
1019
|
+
(dateChange)="onDateChange($event)"
|
|
1020
|
+
(blur)="mfBlur.emit()"
|
|
1021
|
+
/>
|
|
1022
|
+
<mat-datepicker-toggle matIconSuffix [for]="picker" [disabled]="disabled()">
|
|
1023
|
+
<mat-icon matDatepickerToggleIcon aria-hidden="true">calendar_month</mat-icon>
|
|
1024
|
+
</mat-datepicker-toggle>
|
|
1025
|
+
<mat-datepicker #picker />
|
|
1026
|
+
@if (hint()) {
|
|
1027
|
+
<mat-hint>{{ hint() }}</mat-hint>
|
|
1028
|
+
}
|
|
1029
|
+
@if (error()) {
|
|
1030
|
+
<mat-error>{{ error() }}</mat-error>
|
|
1031
|
+
}
|
|
1032
|
+
</mat-form-field>
|
|
1033
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block}.mf-datepicker{font-family:var(--mf-font-base)!important;width:100%}.mf-datepicker--full{width:100%}.mf-datepicker .mat-mdc-text-field-wrapper{border-radius:var(--mf-radius-md)!important}.mf-datepicker .mdc-notched-outline__leading,.mf-datepicker .mdc-notched-outline__notch,.mf-datepicker .mdc-notched-outline__trailing{border-color:var(--mf-color-border)!important;transition:border-color var(--mf-duration-base) var(--mf-ease-standard)}.mf-datepicker .mat-mdc-form-field-focus-overlay{background-color:transparent!important}.mf-datepicker.mat-focused .mdc-notched-outline__leading,.mf-datepicker.mat-focused .mdc-notched-outline__notch,.mf-datepicker.mat-focused .mdc-notched-outline__trailing{border-color:var(--mf-color-brand)!important;border-width:1.5px!important}.mf-datepicker--error .mdc-notched-outline__leading,.mf-datepicker--error .mdc-notched-outline__notch,.mf-datepicker--error .mdc-notched-outline__trailing{border-color:var(--mf-color-error-500)!important}.mf-datepicker .mat-mdc-floating-label{font-family:var(--mf-font-base)!important;font-weight:var(--mf-weight-medium)!important;color:var(--mf-color-neutral-400)!important}.mf-datepicker.mat-focused .mat-mdc-floating-label{color:var(--mf-color-brand)!important}.mf-datepicker .mat-mdc-input-element{font-family:var(--mf-font-base)!important;color:var(--mf-color-on-surface)!important;caret-color:var(--mf-color-brand)}.mf-datepicker .mat-datepicker-toggle .mat-icon{color:var(--mf-color-neutral-400)!important;transition:color var(--mf-duration-base) var(--mf-ease-standard)}.mf-datepicker.mat-focused .mat-datepicker-toggle .mat-icon{color:var(--mf-color-brand)!important}.mf-datepicker .mat-mdc-form-field-hint{font-size:var(--mf-text-xs)!important;color:var(--mf-color-neutral-400)!important}.mf-datepicker .mat-mdc-form-field-error{font-size:var(--mf-text-xs)!important}.mf-datepicker--sm .mat-mdc-input-element{font-size:var(--mf-text-sm)!important}.mf-datepicker--md .mat-mdc-input-element{font-size:var(--mf-text-base)!important}.mf-datepicker--lg .mat-mdc-input-element{font-size:var(--mf-text-lg)!important;padding-top:var(--mf-space-1)!important;padding-bottom:var(--mf-space-1)!important}.mf-datepicker .mat-mdc-input-element:disabled{color:var(--mf-color-neutral-300)!important}\n"] }]
|
|
1034
|
+
}], ctorParameters: () => [], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], mfChange: [{ type: i0.Output, args: ["mfChange"] }], mfBlur: [{ type: i0.Output, args: ["mfBlur"] }] } });
|
|
1035
|
+
|
|
1036
|
+
/**
|
|
1037
|
+
* Contenido de diálogo de la librería ng-comps.
|
|
1038
|
+
* Envuelve las directivas de Angular Material `mat-dialog-*` y expone
|
|
1039
|
+
* una API uniforme con look and feel de marca.
|
|
1040
|
+
*
|
|
1041
|
+
* Uso:
|
|
1042
|
+
* ```
|
|
1043
|
+
* dialog.open(MfDialogComponent, {
|
|
1044
|
+
* data: { title: 'Confirmar', message: '¿Deseas continuar?' }
|
|
1045
|
+
* });
|
|
1046
|
+
* ```
|
|
1047
|
+
*/
|
|
1048
|
+
class MfDialogComponent {
|
|
1049
|
+
dialogRef = inject((MatDialogRef), {
|
|
1050
|
+
optional: true,
|
|
1051
|
+
});
|
|
1052
|
+
/** Título del diálogo */
|
|
1053
|
+
title = input.required(...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
1054
|
+
/** Mensaje descriptivo */
|
|
1055
|
+
message = input(undefined, ...(ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []));
|
|
1056
|
+
/** Mostrar botón de cerrar */
|
|
1057
|
+
showClose = input(true, ...(ngDevMode ? [{ debugName: "showClose" }] : /* istanbul ignore next */ []));
|
|
1058
|
+
/** Mostrar área de acciones (footer) */
|
|
1059
|
+
showActions = input(true, ...(ngDevMode ? [{ debugName: "showActions" }] : /* istanbul ignore next */ []));
|
|
1060
|
+
mfClose = output();
|
|
1061
|
+
hostClasses = computed(() => {
|
|
1062
|
+
return 'mf-dialog';
|
|
1063
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
1064
|
+
onClose() {
|
|
1065
|
+
this.mfClose.emit();
|
|
1066
|
+
this.dialogRef?.close();
|
|
1067
|
+
}
|
|
1068
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1069
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfDialogComponent, isStandalone: true, selector: "mf-dialog", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, message: { classPropertyName: "message", publicName: "message", isSignal: true, isRequired: false, transformFunction: null }, showClose: { classPropertyName: "showClose", publicName: "showClose", isSignal: true, isRequired: false, transformFunction: null }, showActions: { classPropertyName: "showActions", publicName: "showActions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mfClose: "mfClose" }, ngImport: i0, template: `
|
|
1070
|
+
<div [class]="hostClasses()">
|
|
1071
|
+
<div class="mf-dialog__header">
|
|
1072
|
+
<h2 class="mf-dialog__title">{{ title() }}</h2>
|
|
1073
|
+
@if (showClose()) {
|
|
1074
|
+
<button
|
|
1075
|
+
class="mf-dialog__close"
|
|
1076
|
+
(click)="onClose()"
|
|
1077
|
+
aria-label="Cerrar diálogo"
|
|
1078
|
+
type="button"
|
|
1079
|
+
>
|
|
1080
|
+
<mat-icon>close</mat-icon>
|
|
1081
|
+
</button>
|
|
1082
|
+
}
|
|
1083
|
+
</div>
|
|
1084
|
+
|
|
1085
|
+
@if (message()) {
|
|
1086
|
+
<div class="mf-dialog__body">
|
|
1087
|
+
<p class="mf-dialog__message">{{ message() }}</p>
|
|
1088
|
+
</div>
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1091
|
+
<div class="mf-dialog__content">
|
|
1092
|
+
<ng-content />
|
|
1093
|
+
</div>
|
|
1094
|
+
|
|
1095
|
+
@if (showActions()) {
|
|
1096
|
+
<div class="mf-dialog__actions">
|
|
1097
|
+
<ng-content select="[mfDialogActions]" />
|
|
1098
|
+
</div>
|
|
1099
|
+
}
|
|
1100
|
+
</div>
|
|
1101
|
+
`, isInline: true, styles: [".mf-dialog{font-family:var(--mf-font-base);min-width:360px;max-width:560px}.mf-dialog__header{display:flex;align-items:center;justify-content:space-between;padding:var(--mf-space-6) var(--mf-space-6) var(--mf-space-3)}.mf-dialog__title{font-family:var(--mf-font-display);font-size:var(--mf-text-xl);font-weight:var(--mf-weight-bold);color:var(--mf-color-on-surface);margin:0;line-height:var(--mf-leading-tight)}.mf-dialog__close{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:transparent;border-radius:var(--mf-radius-sm, 6px);color:var(--mf-color-neutral-400);cursor:pointer;transition:background-color var(--mf-duration-fast) var(--mf-ease-standard),color var(--mf-duration-fast) var(--mf-ease-standard)}.mf-dialog__close:hover{background-color:var(--mf-color-neutral-100);color:var(--mf-color-on-surface)}.mf-dialog__close .mat-icon{font-size:20px;width:20px;height:20px}.mf-dialog__body{padding:0 var(--mf-space-6)}.mf-dialog__message{font-size:var(--mf-text-sm);color:var(--mf-color-neutral-600);line-height:var(--mf-leading-normal);margin:0}.mf-dialog__content{padding:var(--mf-space-3) var(--mf-space-6)}.mf-dialog__content:empty{display:none}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1102
|
+
}
|
|
1103
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfDialogComponent, decorators: [{
|
|
1104
|
+
type: Component,
|
|
1105
|
+
args: [{ selector: 'mf-dialog', imports: [MatDialogModule, MatIconModule], template: `
|
|
1106
|
+
<div [class]="hostClasses()">
|
|
1107
|
+
<div class="mf-dialog__header">
|
|
1108
|
+
<h2 class="mf-dialog__title">{{ title() }}</h2>
|
|
1109
|
+
@if (showClose()) {
|
|
1110
|
+
<button
|
|
1111
|
+
class="mf-dialog__close"
|
|
1112
|
+
(click)="onClose()"
|
|
1113
|
+
aria-label="Cerrar diálogo"
|
|
1114
|
+
type="button"
|
|
1115
|
+
>
|
|
1116
|
+
<mat-icon>close</mat-icon>
|
|
1117
|
+
</button>
|
|
1118
|
+
}
|
|
1119
|
+
</div>
|
|
1120
|
+
|
|
1121
|
+
@if (message()) {
|
|
1122
|
+
<div class="mf-dialog__body">
|
|
1123
|
+
<p class="mf-dialog__message">{{ message() }}</p>
|
|
1124
|
+
</div>
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1127
|
+
<div class="mf-dialog__content">
|
|
1128
|
+
<ng-content />
|
|
1129
|
+
</div>
|
|
1130
|
+
|
|
1131
|
+
@if (showActions()) {
|
|
1132
|
+
<div class="mf-dialog__actions">
|
|
1133
|
+
<ng-content select="[mfDialogActions]" />
|
|
1134
|
+
</div>
|
|
1135
|
+
}
|
|
1136
|
+
</div>
|
|
1137
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [".mf-dialog{font-family:var(--mf-font-base);min-width:360px;max-width:560px}.mf-dialog__header{display:flex;align-items:center;justify-content:space-between;padding:var(--mf-space-6) var(--mf-space-6) var(--mf-space-3)}.mf-dialog__title{font-family:var(--mf-font-display);font-size:var(--mf-text-xl);font-weight:var(--mf-weight-bold);color:var(--mf-color-on-surface);margin:0;line-height:var(--mf-leading-tight)}.mf-dialog__close{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;border:none;background:transparent;border-radius:var(--mf-radius-sm, 6px);color:var(--mf-color-neutral-400);cursor:pointer;transition:background-color var(--mf-duration-fast) var(--mf-ease-standard),color var(--mf-duration-fast) var(--mf-ease-standard)}.mf-dialog__close:hover{background-color:var(--mf-color-neutral-100);color:var(--mf-color-on-surface)}.mf-dialog__close .mat-icon{font-size:20px;width:20px;height:20px}.mf-dialog__body{padding:0 var(--mf-space-6)}.mf-dialog__message{font-size:var(--mf-text-sm);color:var(--mf-color-neutral-600);line-height:var(--mf-leading-normal);margin:0}.mf-dialog__content{padding:var(--mf-space-3) var(--mf-space-6)}.mf-dialog__content:empty{display:none}\n"] }]
|
|
1138
|
+
}], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: true }] }], message: [{ type: i0.Input, args: [{ isSignal: true, alias: "message", required: false }] }], showClose: [{ type: i0.Input, args: [{ isSignal: true, alias: "showClose", required: false }] }], showActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "showActions", required: false }] }], mfClose: [{ type: i0.Output, args: ["mfClose"] }] } });
|
|
1139
|
+
|
|
1140
|
+
/**
|
|
1141
|
+
* Divider de la librería ng-comps.
|
|
1142
|
+
* Envuelve Angular Material `mat-divider` y expone una API uniforme
|
|
1143
|
+
* con look and feel de marca.
|
|
1144
|
+
*/
|
|
1145
|
+
class MfDividerComponent {
|
|
1146
|
+
/** Orientación vertical */
|
|
1147
|
+
vertical = input(false, ...(ngDevMode ? [{ debugName: "vertical" }] : /* istanbul ignore next */ []));
|
|
1148
|
+
/** Variante visual */
|
|
1149
|
+
variant = input('full', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
1150
|
+
/** Espaciado extra arriba y abajo */
|
|
1151
|
+
spacing = input('none', ...(ngDevMode ? [{ debugName: "spacing" }] : /* istanbul ignore next */ []));
|
|
1152
|
+
insetValue = computed(() => this.variant() === 'inset', ...(ngDevMode ? [{ debugName: "insetValue" }] : /* istanbul ignore next */ []));
|
|
1153
|
+
hostClasses = computed(() => {
|
|
1154
|
+
const classes = ['mf-divider', `mf-divider--${this.variant()}`, `mf-divider--spacing-${this.spacing()}`];
|
|
1155
|
+
if (this.vertical())
|
|
1156
|
+
classes.push('mf-divider--vertical');
|
|
1157
|
+
return classes.join(' ');
|
|
1158
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
1159
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfDividerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1160
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: MfDividerComponent, isStandalone: true, selector: "mf-divider", inputs: { vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, spacing: { classPropertyName: "spacing", publicName: "spacing", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
1161
|
+
<mat-divider
|
|
1162
|
+
[vertical]="vertical()"
|
|
1163
|
+
[inset]="insetValue()"
|
|
1164
|
+
[class]="hostClasses()"
|
|
1165
|
+
/>
|
|
1166
|
+
`, isInline: true, styles: [":host{display:block}:host:has(.mf-divider--vertical){display:inline-block;height:100%}.mf-divider .mat-divider{border-top-color:var(--mf-color-border)!important}.mf-divider--vertical .mat-divider{border-left-color:var(--mf-color-border)!important}.mf-divider--middle .mat-divider{margin-left:var(--mf-space-4)!important;margin-right:var(--mf-space-4)!important}.mf-divider--spacing-sm{padding-top:var(--mf-space-2);padding-bottom:var(--mf-space-2)}.mf-divider--spacing-md{padding-top:var(--mf-space-4);padding-bottom:var(--mf-space-4)}.mf-divider--spacing-lg{padding-top:var(--mf-space-6);padding-bottom:var(--mf-space-6)}\n"], dependencies: [{ kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i1$a.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1167
|
+
}
|
|
1168
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfDividerComponent, decorators: [{
|
|
1169
|
+
type: Component,
|
|
1170
|
+
args: [{ selector: 'mf-divider', imports: [MatDividerModule], template: `
|
|
1171
|
+
<mat-divider
|
|
1172
|
+
[vertical]="vertical()"
|
|
1173
|
+
[inset]="insetValue()"
|
|
1174
|
+
[class]="hostClasses()"
|
|
1175
|
+
/>
|
|
1176
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}:host:has(.mf-divider--vertical){display:inline-block;height:100%}.mf-divider .mat-divider{border-top-color:var(--mf-color-border)!important}.mf-divider--vertical .mat-divider{border-left-color:var(--mf-color-border)!important}.mf-divider--middle .mat-divider{margin-left:var(--mf-space-4)!important;margin-right:var(--mf-space-4)!important}.mf-divider--spacing-sm{padding-top:var(--mf-space-2);padding-bottom:var(--mf-space-2)}.mf-divider--spacing-md{padding-top:var(--mf-space-4);padding-bottom:var(--mf-space-4)}.mf-divider--spacing-lg{padding-top:var(--mf-space-6);padding-bottom:var(--mf-space-6)}\n"] }]
|
|
1177
|
+
}], propDecorators: { vertical: [{ type: i0.Input, args: [{ isSignal: true, alias: "vertical", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], spacing: [{ type: i0.Input, args: [{ isSignal: true, alias: "spacing", required: false }] }] } });
|
|
1178
|
+
|
|
1179
|
+
/**
|
|
1180
|
+
* Contenedor de campo de formulario de la librería ng-comps.
|
|
1181
|
+
* Proporciona estructura de layout consistente con label, contenido proyectado,
|
|
1182
|
+
* y mensajes opcionales de ayuda o error.
|
|
1183
|
+
*/
|
|
1184
|
+
class MfFormFieldComponent {
|
|
1185
|
+
/** Etiqueta del campo */
|
|
1186
|
+
label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
1187
|
+
/** ID para asociar el label con el control */
|
|
1188
|
+
fieldId = input(undefined, ...(ngDevMode ? [{ debugName: "fieldId" }] : /* istanbul ignore next */ []));
|
|
1189
|
+
/** Texto de ayuda */
|
|
1190
|
+
hint = input(undefined, ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
|
|
1191
|
+
/** Mensaje de error */
|
|
1192
|
+
error = input(undefined, ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
|
|
1193
|
+
/** Campo requerido (muestra asterisco) */
|
|
1194
|
+
required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
|
|
1195
|
+
labelClasses = computed(() => {
|
|
1196
|
+
const classes = ['mf-form-field__label'];
|
|
1197
|
+
if (this.error())
|
|
1198
|
+
classes.push('mf-form-field__label--error');
|
|
1199
|
+
return classes.join(' ');
|
|
1200
|
+
}, ...(ngDevMode ? [{ debugName: "labelClasses" }] : /* istanbul ignore next */ []));
|
|
1201
|
+
hostClasses = computed(() => {
|
|
1202
|
+
const classes = ['mf-form-field'];
|
|
1203
|
+
if (this.error())
|
|
1204
|
+
classes.push('mf-form-field--error');
|
|
1205
|
+
return classes.join(' ');
|
|
1206
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
1207
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfFormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1208
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfFormFieldComponent, isStandalone: true, selector: "mf-form-field", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, fieldId: { classPropertyName: "fieldId", publicName: "fieldId", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "hostClasses()" } }, ngImport: i0, template: `
|
|
1209
|
+
@if (label()) {
|
|
1210
|
+
<label [class]="labelClasses()" [attr.for]="fieldId()">{{ label() }}
|
|
1211
|
+
@if (required()) {
|
|
1212
|
+
<span class="mf-form-field__required" aria-hidden="true"> *</span>
|
|
1213
|
+
}
|
|
1214
|
+
</label>
|
|
1215
|
+
}
|
|
1216
|
+
<div class="mf-form-field__control">
|
|
1217
|
+
<ng-content />
|
|
1218
|
+
</div>
|
|
1219
|
+
@if (error()) {
|
|
1220
|
+
<p class="mf-form-field__error" role="alert">{{ error() }}</p>
|
|
1221
|
+
} @else if (hint()) {
|
|
1222
|
+
<p class="mf-form-field__hint">{{ hint() }}</p>
|
|
1223
|
+
}
|
|
1224
|
+
`, isInline: true, styles: [":host{display:block}.mf-form-field{display:flex;flex-direction:column;gap:var(--mf-space-1)}.mf-form-field__label{font-family:var(--mf-font-base);font-size:var(--mf-text-sm);font-weight:var(--mf-weight-medium);color:var(--mf-color-on-surface);line-height:var(--mf-leading-normal);cursor:default}.mf-form-field__label--error,.mf-form-field__required{color:var(--mf-color-error-500)}.mf-form-field__control{width:100%}.mf-form-field__hint{font-family:var(--mf-font-base);font-size:var(--mf-text-xs);color:var(--mf-color-neutral-400);margin:0;padding-left:var(--mf-space-1)}.mf-form-field__error{font-family:var(--mf-font-base);font-size:var(--mf-text-xs);color:var(--mf-color-error-500);margin:0;padding-left:var(--mf-space-1)}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1225
|
+
}
|
|
1226
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfFormFieldComponent, decorators: [{
|
|
1227
|
+
type: Component,
|
|
1228
|
+
args: [{ selector: 'mf-form-field', imports: [], template: `
|
|
1229
|
+
@if (label()) {
|
|
1230
|
+
<label [class]="labelClasses()" [attr.for]="fieldId()">{{ label() }}
|
|
1231
|
+
@if (required()) {
|
|
1232
|
+
<span class="mf-form-field__required" aria-hidden="true"> *</span>
|
|
1233
|
+
}
|
|
1234
|
+
</label>
|
|
1235
|
+
}
|
|
1236
|
+
<div class="mf-form-field__control">
|
|
1237
|
+
<ng-content />
|
|
1238
|
+
</div>
|
|
1239
|
+
@if (error()) {
|
|
1240
|
+
<p class="mf-form-field__error" role="alert">{{ error() }}</p>
|
|
1241
|
+
} @else if (hint()) {
|
|
1242
|
+
<p class="mf-form-field__hint">{{ hint() }}</p>
|
|
1243
|
+
}
|
|
1244
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
1245
|
+
'[class]': 'hostClasses()',
|
|
1246
|
+
}, styles: [":host{display:block}.mf-form-field{display:flex;flex-direction:column;gap:var(--mf-space-1)}.mf-form-field__label{font-family:var(--mf-font-base);font-size:var(--mf-text-sm);font-weight:var(--mf-weight-medium);color:var(--mf-color-on-surface);line-height:var(--mf-leading-normal);cursor:default}.mf-form-field__label--error,.mf-form-field__required{color:var(--mf-color-error-500)}.mf-form-field__control{width:100%}.mf-form-field__hint{font-family:var(--mf-font-base);font-size:var(--mf-text-xs);color:var(--mf-color-neutral-400);margin:0;padding-left:var(--mf-space-1)}.mf-form-field__error{font-family:var(--mf-font-base);font-size:var(--mf-text-xs);color:var(--mf-color-error-500);margin:0;padding-left:var(--mf-space-1)}\n"] }]
|
|
1247
|
+
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], fieldId: [{ type: i0.Input, args: [{ isSignal: true, alias: "fieldId", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }] } });
|
|
1248
|
+
|
|
1249
|
+
/**
|
|
1250
|
+
* Lista en cuadrícula de la librería ng-comps.
|
|
1251
|
+
* Envuelve Angular Material `mat-grid-list` y expone una API uniforme
|
|
1252
|
+
* con look and feel de marca. Soporta tiles estáticas y content projection.
|
|
1253
|
+
*/
|
|
1254
|
+
class MfGridListComponent {
|
|
1255
|
+
/** Número de columnas */
|
|
1256
|
+
cols = input(2, ...(ngDevMode ? [{ debugName: "cols" }] : /* istanbul ignore next */ []));
|
|
1257
|
+
/** Altura de cada fila */
|
|
1258
|
+
rowHeight = input('1:1', ...(ngDevMode ? [{ debugName: "rowHeight" }] : /* istanbul ignore next */ []));
|
|
1259
|
+
/** Espacio entre tiles */
|
|
1260
|
+
gutterSize = input('8px', ...(ngDevMode ? [{ debugName: "gutterSize" }] : /* istanbul ignore next */ []));
|
|
1261
|
+
/** Tiles a renderizar */
|
|
1262
|
+
tiles = input([], ...(ngDevMode ? [{ debugName: "tiles" }] : /* istanbul ignore next */ []));
|
|
1263
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfGridListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1264
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfGridListComponent, isStandalone: true, selector: "mf-grid-list", inputs: { cols: { classPropertyName: "cols", publicName: "cols", isSignal: true, isRequired: false, transformFunction: null }, rowHeight: { classPropertyName: "rowHeight", publicName: "rowHeight", isSignal: true, isRequired: false, transformFunction: null }, gutterSize: { classPropertyName: "gutterSize", publicName: "gutterSize", isSignal: true, isRequired: false, transformFunction: null }, tiles: { classPropertyName: "tiles", publicName: "tiles", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
1265
|
+
<mat-grid-list
|
|
1266
|
+
class="mf-grid-list"
|
|
1267
|
+
[cols]="cols()"
|
|
1268
|
+
[rowHeight]="rowHeight()"
|
|
1269
|
+
[gutterSize]="gutterSize()"
|
|
1270
|
+
>
|
|
1271
|
+
@for (tile of tiles(); track $index) {
|
|
1272
|
+
<mat-grid-tile
|
|
1273
|
+
class="mf-grid-list__tile"
|
|
1274
|
+
[colspan]="tile.colspan ?? 1"
|
|
1275
|
+
[rowspan]="tile.rowspan ?? 1"
|
|
1276
|
+
[style.background]="tile.background || null"
|
|
1277
|
+
>
|
|
1278
|
+
<mat-grid-tile-header>
|
|
1279
|
+
@if (tile.title) {
|
|
1280
|
+
<span class="mf-grid-list__tile-title">{{ tile.title }}</span>
|
|
1281
|
+
}
|
|
1282
|
+
@if (tile.subtitle) {
|
|
1283
|
+
<span class="mf-grid-list__tile-subtitle">{{ tile.subtitle }}</span>
|
|
1284
|
+
}
|
|
1285
|
+
</mat-grid-tile-header>
|
|
1286
|
+
</mat-grid-tile>
|
|
1287
|
+
}
|
|
1288
|
+
<ng-content />
|
|
1289
|
+
</mat-grid-list>
|
|
1290
|
+
`, isInline: true, styles: [":host{display:block}.mf-grid-list{font-family:var(--mf-font-base)!important}.mf-grid-list__tile{background-color:var(--mf-color-surface-raised);border-radius:var(--mf-radius-md)!important;overflow:hidden;transition:box-shadow var(--mf-duration-base) var(--mf-ease-standard)}.mf-grid-list__tile:hover{box-shadow:var(--mf-shadow-md)}.mf-grid-list__tile mat-grid-tile-header,.mf-grid-list__tile .mat-grid-tile-header{background:linear-gradient(to top,#0f172aa3,#0f172a00)!important;padding:var(--mf-space-3) var(--mf-space-4)!important}.mf-grid-list__tile-title{font-family:var(--mf-font-base);font-size:var(--mf-text-sm);font-weight:var(--mf-weight-bold);color:var(--mf-color-neutral-0);display:block}.mf-grid-list__tile-subtitle{font-family:var(--mf-font-base);font-size:var(--mf-text-xs);font-weight:var(--mf-weight-regular);color:var(--mf-color-neutral-200);display:block}\n"], dependencies: [{ kind: "ngmodule", type: MatGridListModule }, { kind: "component", type: i1$b.MatGridList, selector: "mat-grid-list", inputs: ["cols", "gutterSize", "rowHeight"], exportAs: ["matGridList"] }, { kind: "component", type: i1$b.MatGridTile, selector: "mat-grid-tile", inputs: ["rowspan", "colspan"], exportAs: ["matGridTile"] }, { kind: "component", type: i1$b.MatGridTileText, selector: "mat-grid-tile-header, mat-grid-tile-footer" }, { kind: "directive", type: i1$b.MatGridTileHeaderCssMatStyler, selector: "mat-grid-tile-header" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1291
|
+
}
|
|
1292
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfGridListComponent, decorators: [{
|
|
1293
|
+
type: Component,
|
|
1294
|
+
args: [{ selector: 'mf-grid-list', imports: [MatGridListModule], template: `
|
|
1295
|
+
<mat-grid-list
|
|
1296
|
+
class="mf-grid-list"
|
|
1297
|
+
[cols]="cols()"
|
|
1298
|
+
[rowHeight]="rowHeight()"
|
|
1299
|
+
[gutterSize]="gutterSize()"
|
|
1300
|
+
>
|
|
1301
|
+
@for (tile of tiles(); track $index) {
|
|
1302
|
+
<mat-grid-tile
|
|
1303
|
+
class="mf-grid-list__tile"
|
|
1304
|
+
[colspan]="tile.colspan ?? 1"
|
|
1305
|
+
[rowspan]="tile.rowspan ?? 1"
|
|
1306
|
+
[style.background]="tile.background || null"
|
|
1307
|
+
>
|
|
1308
|
+
<mat-grid-tile-header>
|
|
1309
|
+
@if (tile.title) {
|
|
1310
|
+
<span class="mf-grid-list__tile-title">{{ tile.title }}</span>
|
|
1311
|
+
}
|
|
1312
|
+
@if (tile.subtitle) {
|
|
1313
|
+
<span class="mf-grid-list__tile-subtitle">{{ tile.subtitle }}</span>
|
|
1314
|
+
}
|
|
1315
|
+
</mat-grid-tile-header>
|
|
1316
|
+
</mat-grid-tile>
|
|
1317
|
+
}
|
|
1318
|
+
<ng-content />
|
|
1319
|
+
</mat-grid-list>
|
|
1320
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.mf-grid-list{font-family:var(--mf-font-base)!important}.mf-grid-list__tile{background-color:var(--mf-color-surface-raised);border-radius:var(--mf-radius-md)!important;overflow:hidden;transition:box-shadow var(--mf-duration-base) var(--mf-ease-standard)}.mf-grid-list__tile:hover{box-shadow:var(--mf-shadow-md)}.mf-grid-list__tile mat-grid-tile-header,.mf-grid-list__tile .mat-grid-tile-header{background:linear-gradient(to top,#0f172aa3,#0f172a00)!important;padding:var(--mf-space-3) var(--mf-space-4)!important}.mf-grid-list__tile-title{font-family:var(--mf-font-base);font-size:var(--mf-text-sm);font-weight:var(--mf-weight-bold);color:var(--mf-color-neutral-0);display:block}.mf-grid-list__tile-subtitle{font-family:var(--mf-font-base);font-size:var(--mf-text-xs);font-weight:var(--mf-weight-regular);color:var(--mf-color-neutral-200);display:block}\n"] }]
|
|
1321
|
+
}], propDecorators: { cols: [{ type: i0.Input, args: [{ isSignal: true, alias: "cols", required: false }] }], rowHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowHeight", required: false }] }], gutterSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "gutterSize", required: false }] }], tiles: [{ type: i0.Input, args: [{ isSignal: true, alias: "tiles", required: false }] }] } });
|
|
1322
|
+
|
|
1323
|
+
/**
|
|
1324
|
+
* Icono de la librería ng-comps.
|
|
1325
|
+
* Envuelve Angular Material `mat-icon` y expone una API uniforme
|
|
1326
|
+
* con tamaños y colores de marca.
|
|
1327
|
+
*/
|
|
1328
|
+
class MfIconComponent {
|
|
1329
|
+
/** Nombre del icono de Material Symbols / Material Icons */
|
|
1330
|
+
name = input.required(...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
1331
|
+
/** Tamaño visual del icono */
|
|
1332
|
+
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
1333
|
+
/** Color semántico del icono */
|
|
1334
|
+
color = input('default', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
1335
|
+
/** Etiqueta accesible. Si se omite, el icono será decorativo (aria-hidden) */
|
|
1336
|
+
label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
1337
|
+
ariaHidden = computed(() => (this.label() ? 'false' : 'true'), ...(ngDevMode ? [{ debugName: "ariaHidden" }] : /* istanbul ignore next */ []));
|
|
1338
|
+
hostClasses = computed(() => {
|
|
1339
|
+
return ['mf-icon', `mf-icon--${this.size()}`, `mf-icon--${this.color()}`].join(' ');
|
|
1340
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
1341
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1342
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: MfIconComponent, isStandalone: true, selector: "mf-icon", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
1343
|
+
<mat-icon [class]="hostClasses()" [attr.aria-hidden]="ariaHidden()" [attr.aria-label]="label()">{{ name() }}</mat-icon>
|
|
1344
|
+
`, isInline: true, styles: [":host{display:inline-flex;align-items:center;justify-content:center}.mf-icon{transition:color var(--mf-duration-base) var(--mf-ease-standard)}.mf-icon--sm{font-size:16px!important;width:16px!important;height:16px!important}.mf-icon--md{font-size:20px!important;width:20px!important;height:20px!important}.mf-icon--lg{font-size:24px!important;width:24px!important;height:24px!important}.mf-icon--xl{font-size:32px!important;width:32px!important;height:32px!important}.mf-icon--default{color:var(--mf-color-on-surface)}.mf-icon--brand{color:var(--mf-color-brand)}.mf-icon--muted{color:var(--mf-color-neutral-400)}.mf-icon--error{color:var(--mf-color-error-500)}.mf-icon--inherit{color:inherit}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1345
|
+
}
|
|
1346
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfIconComponent, decorators: [{
|
|
1347
|
+
type: Component,
|
|
1348
|
+
args: [{ selector: 'mf-icon', imports: [MatIconModule], template: `
|
|
1349
|
+
<mat-icon [class]="hostClasses()" [attr.aria-hidden]="ariaHidden()" [attr.aria-label]="label()">{{ name() }}</mat-icon>
|
|
1350
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-flex;align-items:center;justify-content:center}.mf-icon{transition:color var(--mf-duration-base) var(--mf-ease-standard)}.mf-icon--sm{font-size:16px!important;width:16px!important;height:16px!important}.mf-icon--md{font-size:20px!important;width:20px!important;height:20px!important}.mf-icon--lg{font-size:24px!important;width:24px!important;height:24px!important}.mf-icon--xl{font-size:32px!important;width:32px!important;height:32px!important}.mf-icon--default{color:var(--mf-color-on-surface)}.mf-icon--brand{color:var(--mf-color-brand)}.mf-icon--muted{color:var(--mf-color-neutral-400)}.mf-icon--error{color:var(--mf-color-error-500)}.mf-icon--inherit{color:inherit}\n"] }]
|
|
1351
|
+
}], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: true }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
|
|
1352
|
+
|
|
1353
|
+
/**
|
|
1354
|
+
* Campo de texto de la librería ng-comps.
|
|
1355
|
+
* Envuelve Angular Material `mat-form-field` + `matInput`
|
|
1356
|
+
* y expone una API uniforme con look and feel de marca.
|
|
1357
|
+
*/
|
|
1358
|
+
class MfInputComponent {
|
|
1359
|
+
/** Etiqueta flotante del campo */
|
|
1360
|
+
label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
1361
|
+
/** Placeholder del input */
|
|
1362
|
+
placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
1363
|
+
/** Tipo de input HTML */
|
|
1364
|
+
type = input('text', ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
|
|
1365
|
+
/** Tamaño del campo */
|
|
1366
|
+
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
1367
|
+
/** Valor actual del campo */
|
|
1368
|
+
value = input('', ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
1369
|
+
/** Deshabilitado */
|
|
1370
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
1371
|
+
/** Solo lectura */
|
|
1372
|
+
readonly = input(false, ...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
|
|
1373
|
+
/** Texto de ayuda debajo del campo */
|
|
1374
|
+
hint = input(undefined, ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
|
|
1375
|
+
/** Mensaje de error */
|
|
1376
|
+
error = input(undefined, ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
|
|
1377
|
+
/** Icono al inicio */
|
|
1378
|
+
leadingIcon = input(undefined, ...(ngDevMode ? [{ debugName: "leadingIcon" }] : /* istanbul ignore next */ []));
|
|
1379
|
+
/** Icono al final */
|
|
1380
|
+
trailingIcon = input(undefined, ...(ngDevMode ? [{ debugName: "trailingIcon" }] : /* istanbul ignore next */ []));
|
|
1381
|
+
/** Ancho completo */
|
|
1382
|
+
fullWidth = input(false, ...(ngDevMode ? [{ debugName: "fullWidth" }] : /* istanbul ignore next */ []));
|
|
1383
|
+
mfInput = output();
|
|
1384
|
+
mfBlur = output();
|
|
1385
|
+
hostClasses = computed(() => {
|
|
1386
|
+
const classes = ['mf-input', `mf-input--${this.size()}`];
|
|
1387
|
+
if (this.fullWidth())
|
|
1388
|
+
classes.push('mf-input--full');
|
|
1389
|
+
if (this.error())
|
|
1390
|
+
classes.push('mf-input--error');
|
|
1391
|
+
return classes.join(' ');
|
|
1392
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
1393
|
+
onInput(event) {
|
|
1394
|
+
const target = event.target;
|
|
1395
|
+
this.mfInput.emit(target.value);
|
|
1396
|
+
}
|
|
1397
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1398
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfInputComponent, isStandalone: true, selector: "mf-input", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, leadingIcon: { classPropertyName: "leadingIcon", publicName: "leadingIcon", isSignal: true, isRequired: false, transformFunction: null }, trailingIcon: { classPropertyName: "trailingIcon", publicName: "trailingIcon", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mfInput: "mfInput", mfBlur: "mfBlur" }, ngImport: i0, template: `
|
|
1399
|
+
<mat-form-field [appearance]="'outline'" [class]="hostClasses()">
|
|
1400
|
+
@if (label()) {
|
|
1401
|
+
<mat-label>{{ label() }}</mat-label>
|
|
1402
|
+
}
|
|
1403
|
+
@if (leadingIcon()) {
|
|
1404
|
+
<mat-icon matPrefix aria-hidden="true">{{ leadingIcon() }}</mat-icon>
|
|
1405
|
+
}
|
|
1406
|
+
<input
|
|
1407
|
+
matInput
|
|
1408
|
+
[type]="type()"
|
|
1409
|
+
[placeholder]="placeholder()"
|
|
1410
|
+
[disabled]="disabled()"
|
|
1411
|
+
[readonly]="readonly()"
|
|
1412
|
+
[value]="value()"
|
|
1413
|
+
(input)="onInput($event)"
|
|
1414
|
+
(blur)="mfBlur.emit()"
|
|
1415
|
+
/>
|
|
1416
|
+
@if (trailingIcon()) {
|
|
1417
|
+
<mat-icon matSuffix aria-hidden="true">{{ trailingIcon() }}</mat-icon>
|
|
1418
|
+
}
|
|
1419
|
+
@if (hint()) {
|
|
1420
|
+
<mat-hint>{{ hint() }}</mat-hint>
|
|
1421
|
+
}
|
|
1422
|
+
@if (error()) {
|
|
1423
|
+
<mat-error>{{ error() }}</mat-error>
|
|
1424
|
+
}
|
|
1425
|
+
</mat-form-field>
|
|
1426
|
+
`, isInline: true, styles: [":host{display:inline-block}.mf-input{font-family:var(--mf-font-base)!important;width:100%}.mf-input--full{width:100%}.mf-input .mat-mdc-text-field-wrapper{border-radius:var(--mf-radius-md)!important}.mf-input .mdc-notched-outline__leading,.mf-input .mdc-notched-outline__notch,.mf-input .mdc-notched-outline__trailing{border-color:var(--mf-color-border)!important;transition:border-color var(--mf-duration-base) var(--mf-ease-standard)}.mf-input .mat-mdc-form-field-focus-overlay{background-color:transparent!important}.mf-input.mat-focused .mdc-notched-outline__leading,.mf-input.mat-focused .mdc-notched-outline__notch,.mf-input.mat-focused .mdc-notched-outline__trailing{border-color:var(--mf-color-brand)!important;border-width:1.5px!important}.mf-input--error .mdc-notched-outline__leading,.mf-input--error .mdc-notched-outline__notch,.mf-input--error .mdc-notched-outline__trailing{border-color:var(--mf-color-error-500)!important}.mf-input .mat-mdc-floating-label{font-family:var(--mf-font-base)!important;font-weight:var(--mf-weight-medium)!important;color:var(--mf-color-neutral-400)!important}.mf-input.mat-focused .mat-mdc-floating-label{color:var(--mf-color-brand)!important}.mf-input .mat-mdc-input-element{font-family:var(--mf-font-base)!important;color:var(--mf-color-on-surface)!important;caret-color:var(--mf-color-brand)}.mf-input .mat-mdc-form-field-hint{font-size:var(--mf-text-xs)!important;color:var(--mf-color-neutral-400)!important}.mf-input .mat-mdc-form-field-error{font-size:var(--mf-text-xs)!important}.mf-input--sm .mat-mdc-input-element{font-size:var(--mf-text-sm)!important}.mf-input--md .mat-mdc-input-element{font-size:var(--mf-text-base)!important}.mf-input--lg .mat-mdc-input-element{font-size:var(--mf-text-lg)!important;padding-top:var(--mf-space-1)!important;padding-bottom:var(--mf-space-1)!important}.mf-input .mat-icon{color:var(--mf-color-neutral-400)!important;font-size:20px;width:20px;height:20px;transition:color var(--mf-duration-base) var(--mf-ease-standard)}.mf-input.mat-focused .mat-icon{color:var(--mf-color-brand)!important}.mf-input .mat-mdc-input-element:disabled{color:var(--mf-color-neutral-300)!important}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i1$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i1$3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i1$3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i1$3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1427
|
+
}
|
|
1428
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfInputComponent, decorators: [{
|
|
1429
|
+
type: Component,
|
|
1430
|
+
args: [{ selector: 'mf-input', imports: [MatFormFieldModule, MatInputModule, MatIconModule], template: `
|
|
1431
|
+
<mat-form-field [appearance]="'outline'" [class]="hostClasses()">
|
|
1432
|
+
@if (label()) {
|
|
1433
|
+
<mat-label>{{ label() }}</mat-label>
|
|
1434
|
+
}
|
|
1435
|
+
@if (leadingIcon()) {
|
|
1436
|
+
<mat-icon matPrefix aria-hidden="true">{{ leadingIcon() }}</mat-icon>
|
|
1437
|
+
}
|
|
1438
|
+
<input
|
|
1439
|
+
matInput
|
|
1440
|
+
[type]="type()"
|
|
1441
|
+
[placeholder]="placeholder()"
|
|
1442
|
+
[disabled]="disabled()"
|
|
1443
|
+
[readonly]="readonly()"
|
|
1444
|
+
[value]="value()"
|
|
1445
|
+
(input)="onInput($event)"
|
|
1446
|
+
(blur)="mfBlur.emit()"
|
|
1447
|
+
/>
|
|
1448
|
+
@if (trailingIcon()) {
|
|
1449
|
+
<mat-icon matSuffix aria-hidden="true">{{ trailingIcon() }}</mat-icon>
|
|
1450
|
+
}
|
|
1451
|
+
@if (hint()) {
|
|
1452
|
+
<mat-hint>{{ hint() }}</mat-hint>
|
|
1453
|
+
}
|
|
1454
|
+
@if (error()) {
|
|
1455
|
+
<mat-error>{{ error() }}</mat-error>
|
|
1456
|
+
}
|
|
1457
|
+
</mat-form-field>
|
|
1458
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block}.mf-input{font-family:var(--mf-font-base)!important;width:100%}.mf-input--full{width:100%}.mf-input .mat-mdc-text-field-wrapper{border-radius:var(--mf-radius-md)!important}.mf-input .mdc-notched-outline__leading,.mf-input .mdc-notched-outline__notch,.mf-input .mdc-notched-outline__trailing{border-color:var(--mf-color-border)!important;transition:border-color var(--mf-duration-base) var(--mf-ease-standard)}.mf-input .mat-mdc-form-field-focus-overlay{background-color:transparent!important}.mf-input.mat-focused .mdc-notched-outline__leading,.mf-input.mat-focused .mdc-notched-outline__notch,.mf-input.mat-focused .mdc-notched-outline__trailing{border-color:var(--mf-color-brand)!important;border-width:1.5px!important}.mf-input--error .mdc-notched-outline__leading,.mf-input--error .mdc-notched-outline__notch,.mf-input--error .mdc-notched-outline__trailing{border-color:var(--mf-color-error-500)!important}.mf-input .mat-mdc-floating-label{font-family:var(--mf-font-base)!important;font-weight:var(--mf-weight-medium)!important;color:var(--mf-color-neutral-400)!important}.mf-input.mat-focused .mat-mdc-floating-label{color:var(--mf-color-brand)!important}.mf-input .mat-mdc-input-element{font-family:var(--mf-font-base)!important;color:var(--mf-color-on-surface)!important;caret-color:var(--mf-color-brand)}.mf-input .mat-mdc-form-field-hint{font-size:var(--mf-text-xs)!important;color:var(--mf-color-neutral-400)!important}.mf-input .mat-mdc-form-field-error{font-size:var(--mf-text-xs)!important}.mf-input--sm .mat-mdc-input-element{font-size:var(--mf-text-sm)!important}.mf-input--md .mat-mdc-input-element{font-size:var(--mf-text-base)!important}.mf-input--lg .mat-mdc-input-element{font-size:var(--mf-text-lg)!important;padding-top:var(--mf-space-1)!important;padding-bottom:var(--mf-space-1)!important}.mf-input .mat-icon{color:var(--mf-color-neutral-400)!important;font-size:20px;width:20px;height:20px;transition:color var(--mf-duration-base) var(--mf-ease-standard)}.mf-input.mat-focused .mat-icon{color:var(--mf-color-brand)!important}.mf-input .mat-mdc-input-element:disabled{color:var(--mf-color-neutral-300)!important}\n"] }]
|
|
1459
|
+
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], leadingIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "leadingIcon", required: false }] }], trailingIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "trailingIcon", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], mfInput: [{ type: i0.Output, args: ["mfInput"] }], mfBlur: [{ type: i0.Output, args: ["mfBlur"] }] } });
|
|
1460
|
+
|
|
1461
|
+
/**
|
|
1462
|
+
* Menu de la librería ng-comps.
|
|
1463
|
+
* Envuelve Angular Material `mat-menu` y expone una API uniforme
|
|
1464
|
+
* con look and feel de marca.
|
|
1465
|
+
*/
|
|
1466
|
+
class MfMenuComponent {
|
|
1467
|
+
/** Items del menú */
|
|
1468
|
+
items = input.required(...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
1469
|
+
/** Icono del trigger */
|
|
1470
|
+
triggerIcon = input('more_vert', ...(ngDevMode ? [{ debugName: "triggerIcon" }] : /* istanbul ignore next */ []));
|
|
1471
|
+
/** Label accesible del trigger */
|
|
1472
|
+
triggerLabel = input('Abrir menú', ...(ngDevMode ? [{ debugName: "triggerLabel" }] : /* istanbul ignore next */ []));
|
|
1473
|
+
mfItemClick = output();
|
|
1474
|
+
hostClasses = computed(() => 'mf-menu', ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
1475
|
+
triggerClasses = computed(() => 'mf-menu__trigger', ...(ngDevMode ? [{ debugName: "triggerClasses" }] : /* istanbul ignore next */ []));
|
|
1476
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1477
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfMenuComponent, isStandalone: true, selector: "mf-menu", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, triggerIcon: { classPropertyName: "triggerIcon", publicName: "triggerIcon", isSignal: true, isRequired: false, transformFunction: null }, triggerLabel: { classPropertyName: "triggerLabel", publicName: "triggerLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mfItemClick: "mfItemClick" }, ngImport: i0, template: `
|
|
1478
|
+
<button
|
|
1479
|
+
mat-icon-button
|
|
1480
|
+
[matMenuTriggerFor]="menu"
|
|
1481
|
+
[class]="triggerClasses()"
|
|
1482
|
+
[attr.aria-label]="triggerLabel()"
|
|
1483
|
+
>
|
|
1484
|
+
<mat-icon>{{ triggerIcon() }}</mat-icon>
|
|
1485
|
+
</button>
|
|
1486
|
+
<mat-menu #menu="matMenu" [class]="hostClasses()">
|
|
1487
|
+
@for (item of items(); track item.value) {
|
|
1488
|
+
<button
|
|
1489
|
+
mat-menu-item
|
|
1490
|
+
[disabled]="item.disabled ?? false"
|
|
1491
|
+
(click)="mfItemClick.emit(item.value)"
|
|
1492
|
+
>
|
|
1493
|
+
@if (item.icon) {
|
|
1494
|
+
<mat-icon aria-hidden="true">{{ item.icon }}</mat-icon>
|
|
1495
|
+
}
|
|
1496
|
+
<span>{{ item.label }}</span>
|
|
1497
|
+
</button>
|
|
1498
|
+
}
|
|
1499
|
+
</mat-menu>
|
|
1500
|
+
`, isInline: true, styles: [":host{display:inline-block}.mf-menu__trigger{color:var(--mf-color-neutral-600)!important}.mf-menu__trigger:hover{color:var(--mf-color-brand)!important}.mf-menu .mat-mdc-menu-panel{border-radius:var(--mf-radius-md)!important;box-shadow:var(--mf-shadow-lg)!important}.mf-menu .mat-mdc-menu-item{font-family:var(--mf-font-base)!important;font-size:var(--mf-text-sm)!important;color:var(--mf-color-on-surface)!important}.mf-menu .mat-mdc-menu-item:hover{background-color:var(--mf-color-brand-light)!important}.mf-menu .mat-mdc-menu-item .mat-icon{color:var(--mf-color-neutral-400)!important;margin-right:var(--mf-space-2)!important}\n"], dependencies: [{ kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i1$c.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i1$c.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i1$c.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1$5.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1501
|
+
}
|
|
1502
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfMenuComponent, decorators: [{
|
|
1503
|
+
type: Component,
|
|
1504
|
+
args: [{ selector: 'mf-menu', imports: [MatMenuModule, MatButtonModule, MatIconModule], template: `
|
|
1505
|
+
<button
|
|
1506
|
+
mat-icon-button
|
|
1507
|
+
[matMenuTriggerFor]="menu"
|
|
1508
|
+
[class]="triggerClasses()"
|
|
1509
|
+
[attr.aria-label]="triggerLabel()"
|
|
1510
|
+
>
|
|
1511
|
+
<mat-icon>{{ triggerIcon() }}</mat-icon>
|
|
1512
|
+
</button>
|
|
1513
|
+
<mat-menu #menu="matMenu" [class]="hostClasses()">
|
|
1514
|
+
@for (item of items(); track item.value) {
|
|
1515
|
+
<button
|
|
1516
|
+
mat-menu-item
|
|
1517
|
+
[disabled]="item.disabled ?? false"
|
|
1518
|
+
(click)="mfItemClick.emit(item.value)"
|
|
1519
|
+
>
|
|
1520
|
+
@if (item.icon) {
|
|
1521
|
+
<mat-icon aria-hidden="true">{{ item.icon }}</mat-icon>
|
|
1522
|
+
}
|
|
1523
|
+
<span>{{ item.label }}</span>
|
|
1524
|
+
</button>
|
|
1525
|
+
}
|
|
1526
|
+
</mat-menu>
|
|
1527
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block}.mf-menu__trigger{color:var(--mf-color-neutral-600)!important}.mf-menu__trigger:hover{color:var(--mf-color-brand)!important}.mf-menu .mat-mdc-menu-panel{border-radius:var(--mf-radius-md)!important;box-shadow:var(--mf-shadow-lg)!important}.mf-menu .mat-mdc-menu-item{font-family:var(--mf-font-base)!important;font-size:var(--mf-text-sm)!important;color:var(--mf-color-on-surface)!important}.mf-menu .mat-mdc-menu-item:hover{background-color:var(--mf-color-brand-light)!important}.mf-menu .mat-mdc-menu-item .mat-icon{color:var(--mf-color-neutral-400)!important;margin-right:var(--mf-space-2)!important}\n"] }]
|
|
1528
|
+
}], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }], triggerIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "triggerIcon", required: false }] }], triggerLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "triggerLabel", required: false }] }], mfItemClick: [{ type: i0.Output, args: ["mfItemClick"] }] } });
|
|
1529
|
+
|
|
1530
|
+
/**
|
|
1531
|
+
* Paginator de la librería ng-comps.
|
|
1532
|
+
* Envuelve Angular Material `mat-paginator` y expone una API uniforme
|
|
1533
|
+
* con look and feel de marca.
|
|
1534
|
+
*/
|
|
1535
|
+
class MfPaginatorComponent {
|
|
1536
|
+
/** Total de elementos */
|
|
1537
|
+
length = input.required(...(ngDevMode ? [{ debugName: "length" }] : /* istanbul ignore next */ []));
|
|
1538
|
+
/** Tamaño de página */
|
|
1539
|
+
pageSize = input(10, ...(ngDevMode ? [{ debugName: "pageSize" }] : /* istanbul ignore next */ []));
|
|
1540
|
+
/** Índice de página actual */
|
|
1541
|
+
pageIndex = input(0, ...(ngDevMode ? [{ debugName: "pageIndex" }] : /* istanbul ignore next */ []));
|
|
1542
|
+
/** Opciones de tamaño de página */
|
|
1543
|
+
pageSizeOptions = input([5, 10, 25, 50], ...(ngDevMode ? [{ debugName: "pageSizeOptions" }] : /* istanbul ignore next */ []));
|
|
1544
|
+
/** Mostrar botones de primera/última página */
|
|
1545
|
+
showFirstLastButtons = input(true, ...(ngDevMode ? [{ debugName: "showFirstLastButtons" }] : /* istanbul ignore next */ []));
|
|
1546
|
+
/** Ocultar selector de tamaño de página */
|
|
1547
|
+
hidePageSize = input(false, ...(ngDevMode ? [{ debugName: "hidePageSize" }] : /* istanbul ignore next */ []));
|
|
1548
|
+
mfPageChange = output();
|
|
1549
|
+
hostClasses = computed(() => {
|
|
1550
|
+
return 'mf-paginator';
|
|
1551
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
1552
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfPaginatorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1553
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: MfPaginatorComponent, isStandalone: true, selector: "mf-paginator", inputs: { length: { classPropertyName: "length", publicName: "length", isSignal: true, isRequired: true, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, pageIndex: { classPropertyName: "pageIndex", publicName: "pageIndex", isSignal: true, isRequired: false, transformFunction: null }, pageSizeOptions: { classPropertyName: "pageSizeOptions", publicName: "pageSizeOptions", isSignal: true, isRequired: false, transformFunction: null }, showFirstLastButtons: { classPropertyName: "showFirstLastButtons", publicName: "showFirstLastButtons", isSignal: true, isRequired: false, transformFunction: null }, hidePageSize: { classPropertyName: "hidePageSize", publicName: "hidePageSize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mfPageChange: "mfPageChange" }, ngImport: i0, template: `
|
|
1554
|
+
<mat-paginator
|
|
1555
|
+
[length]="length()"
|
|
1556
|
+
[pageSize]="pageSize()"
|
|
1557
|
+
[pageIndex]="pageIndex()"
|
|
1558
|
+
[pageSizeOptions]="pageSizeOptions()"
|
|
1559
|
+
[showFirstLastButtons]="showFirstLastButtons()"
|
|
1560
|
+
[hidePageSize]="hidePageSize()"
|
|
1561
|
+
[class]="hostClasses()"
|
|
1562
|
+
(page)="mfPageChange.emit($event)"
|
|
1563
|
+
/>
|
|
1564
|
+
`, isInline: true, styles: [":host{display:block}.mf-paginator.mat-mdc-paginator{font-family:var(--mf-font-base)!important;font-size:var(--mf-text-sm)!important;background-color:transparent!important}.mf-paginator .mat-mdc-paginator-container{padding:var(--mf-space-2) 0!important}.mf-paginator .mat-mdc-paginator-range-label{color:var(--mf-color-neutral-600)!important;font-family:var(--mf-font-base)!important}.mf-paginator .mat-mdc-paginator-navigation-previous,.mf-paginator .mat-mdc-paginator-navigation-next,.mf-paginator .mat-mdc-paginator-navigation-first,.mf-paginator .mat-mdc-paginator-navigation-last{color:var(--mf-color-brand)!important}.mf-paginator .mat-mdc-paginator-navigation-previous:disabled,.mf-paginator .mat-mdc-paginator-navigation-next:disabled,.mf-paginator .mat-mdc-paginator-navigation-first:disabled,.mf-paginator .mat-mdc-paginator-navigation-last:disabled{color:var(--mf-color-neutral-300)!important}\n"], dependencies: [{ kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i1$d.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1565
|
+
}
|
|
1566
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfPaginatorComponent, decorators: [{
|
|
1567
|
+
type: Component,
|
|
1568
|
+
args: [{ selector: 'mf-paginator', imports: [MatPaginatorModule], template: `
|
|
1569
|
+
<mat-paginator
|
|
1570
|
+
[length]="length()"
|
|
1571
|
+
[pageSize]="pageSize()"
|
|
1572
|
+
[pageIndex]="pageIndex()"
|
|
1573
|
+
[pageSizeOptions]="pageSizeOptions()"
|
|
1574
|
+
[showFirstLastButtons]="showFirstLastButtons()"
|
|
1575
|
+
[hidePageSize]="hidePageSize()"
|
|
1576
|
+
[class]="hostClasses()"
|
|
1577
|
+
(page)="mfPageChange.emit($event)"
|
|
1578
|
+
/>
|
|
1579
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.mf-paginator.mat-mdc-paginator{font-family:var(--mf-font-base)!important;font-size:var(--mf-text-sm)!important;background-color:transparent!important}.mf-paginator .mat-mdc-paginator-container{padding:var(--mf-space-2) 0!important}.mf-paginator .mat-mdc-paginator-range-label{color:var(--mf-color-neutral-600)!important;font-family:var(--mf-font-base)!important}.mf-paginator .mat-mdc-paginator-navigation-previous,.mf-paginator .mat-mdc-paginator-navigation-next,.mf-paginator .mat-mdc-paginator-navigation-first,.mf-paginator .mat-mdc-paginator-navigation-last{color:var(--mf-color-brand)!important}.mf-paginator .mat-mdc-paginator-navigation-previous:disabled,.mf-paginator .mat-mdc-paginator-navigation-next:disabled,.mf-paginator .mat-mdc-paginator-navigation-first:disabled,.mf-paginator .mat-mdc-paginator-navigation-last:disabled{color:var(--mf-color-neutral-300)!important}\n"] }]
|
|
1580
|
+
}], propDecorators: { length: [{ type: i0.Input, args: [{ isSignal: true, alias: "length", required: true }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }], pageIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageIndex", required: false }] }], pageSizeOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSizeOptions", required: false }] }], showFirstLastButtons: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFirstLastButtons", required: false }] }], hidePageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "hidePageSize", required: false }] }], mfPageChange: [{ type: i0.Output, args: ["mfPageChange"] }] } });
|
|
1581
|
+
|
|
1582
|
+
/**
|
|
1583
|
+
* Barra de progreso de la librería ng-comps.
|
|
1584
|
+
* Envuelve Angular Material `mat-progress-bar` y expone una API uniforme
|
|
1585
|
+
* con look and feel de marca.
|
|
1586
|
+
*/
|
|
1587
|
+
class MfProgressBarComponent {
|
|
1588
|
+
/** Modo de la barra de progreso */
|
|
1589
|
+
mode = input('determinate', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
1590
|
+
/** Valor actual (0–100) */
|
|
1591
|
+
value = input(0, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
1592
|
+
/** Valor del buffer (0–100, solo en modo buffer) */
|
|
1593
|
+
bufferValue = input(0, ...(ngDevMode ? [{ debugName: "bufferValue" }] : /* istanbul ignore next */ []));
|
|
1594
|
+
/** Color de la barra */
|
|
1595
|
+
color = input('brand', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
1596
|
+
/** Etiqueta accesible */
|
|
1597
|
+
label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
1598
|
+
/** Muestra el porcentaje junto a la barra */
|
|
1599
|
+
showValue = input(false, ...(ngDevMode ? [{ debugName: "showValue" }] : /* istanbul ignore next */ []));
|
|
1600
|
+
/** Altura de la barra en px */
|
|
1601
|
+
height = input(4, ...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
|
|
1602
|
+
hostClasses = computed(() => {
|
|
1603
|
+
return `mf-progress-bar mf-progress-bar--${this.color()}`;
|
|
1604
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
1605
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfProgressBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1606
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfProgressBarComponent, isStandalone: true, selector: "mf-progress-bar", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, bufferValue: { classPropertyName: "bufferValue", publicName: "bufferValue", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, showValue: { classPropertyName: "showValue", publicName: "showValue", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
1607
|
+
<div class="mf-progress-bar__wrapper" [attr.aria-label]="label() || null">
|
|
1608
|
+
@if (label()) {
|
|
1609
|
+
<span class="mf-progress-bar__label">{{ label() }}</span>
|
|
1610
|
+
}
|
|
1611
|
+
<mat-progress-bar
|
|
1612
|
+
[class]="hostClasses()"
|
|
1613
|
+
[mode]="mode()"
|
|
1614
|
+
[value]="value()"
|
|
1615
|
+
[bufferValue]="bufferValue()"
|
|
1616
|
+
/>
|
|
1617
|
+
@if (showValue() && mode() === 'determinate') {
|
|
1618
|
+
<span class="mf-progress-bar__value" aria-hidden="true">{{ value() }}%</span>
|
|
1619
|
+
}
|
|
1620
|
+
</div>
|
|
1621
|
+
`, isInline: true, styles: [":host{display:block}.mf-progress-bar__wrapper{display:flex;flex-direction:column;gap:var(--mf-space-2)}.mf-progress-bar__label{font-family:var(--mf-font-base);font-size:var(--mf-text-sm);font-weight:var(--mf-weight-medium);color:var(--mf-color-on-surface)}.mf-progress-bar__value{font-family:var(--mf-font-base);font-size:var(--mf-text-xs);font-weight:var(--mf-weight-medium);color:var(--mf-color-neutral-600);align-self:flex-end}.mf-progress-bar{border-radius:var(--mf-radius-full)!important;overflow:hidden}.mf-progress-bar.mat-mdc-progress-bar{--mdc-linear-progress-track-shape: 9999px}.mf-progress-bar--brand.mat-mdc-progress-bar{--mdc-linear-progress-active-indicator-color: var(--mf-color-brand) !important;--mdc-linear-progress-track-color: var(--mf-color-primary-100) !important}.mf-progress-bar--accent.mat-mdc-progress-bar{--mdc-linear-progress-active-indicator-color: var(--mf-color-accent-500) !important;--mdc-linear-progress-track-color: var(--mf-color-accent-300) !important}.mf-progress-bar--warn.mat-mdc-progress-bar{--mdc-linear-progress-active-indicator-color: var(--mf-color-error-500) !important;--mdc-linear-progress-track-color: #fecaca !important}\n"], dependencies: [{ kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i1$e.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1622
|
+
}
|
|
1623
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfProgressBarComponent, decorators: [{
|
|
1624
|
+
type: Component,
|
|
1625
|
+
args: [{ selector: 'mf-progress-bar', imports: [MatProgressBarModule], template: `
|
|
1626
|
+
<div class="mf-progress-bar__wrapper" [attr.aria-label]="label() || null">
|
|
1627
|
+
@if (label()) {
|
|
1628
|
+
<span class="mf-progress-bar__label">{{ label() }}</span>
|
|
1629
|
+
}
|
|
1630
|
+
<mat-progress-bar
|
|
1631
|
+
[class]="hostClasses()"
|
|
1632
|
+
[mode]="mode()"
|
|
1633
|
+
[value]="value()"
|
|
1634
|
+
[bufferValue]="bufferValue()"
|
|
1635
|
+
/>
|
|
1636
|
+
@if (showValue() && mode() === 'determinate') {
|
|
1637
|
+
<span class="mf-progress-bar__value" aria-hidden="true">{{ value() }}%</span>
|
|
1638
|
+
}
|
|
1639
|
+
</div>
|
|
1640
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.mf-progress-bar__wrapper{display:flex;flex-direction:column;gap:var(--mf-space-2)}.mf-progress-bar__label{font-family:var(--mf-font-base);font-size:var(--mf-text-sm);font-weight:var(--mf-weight-medium);color:var(--mf-color-on-surface)}.mf-progress-bar__value{font-family:var(--mf-font-base);font-size:var(--mf-text-xs);font-weight:var(--mf-weight-medium);color:var(--mf-color-neutral-600);align-self:flex-end}.mf-progress-bar{border-radius:var(--mf-radius-full)!important;overflow:hidden}.mf-progress-bar.mat-mdc-progress-bar{--mdc-linear-progress-track-shape: 9999px}.mf-progress-bar--brand.mat-mdc-progress-bar{--mdc-linear-progress-active-indicator-color: var(--mf-color-brand) !important;--mdc-linear-progress-track-color: var(--mf-color-primary-100) !important}.mf-progress-bar--accent.mat-mdc-progress-bar{--mdc-linear-progress-active-indicator-color: var(--mf-color-accent-500) !important;--mdc-linear-progress-track-color: var(--mf-color-accent-300) !important}.mf-progress-bar--warn.mat-mdc-progress-bar{--mdc-linear-progress-active-indicator-color: var(--mf-color-error-500) !important;--mdc-linear-progress-track-color: #fecaca !important}\n"] }]
|
|
1641
|
+
}], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], bufferValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "bufferValue", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], showValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "showValue", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }] } });
|
|
1642
|
+
|
|
1643
|
+
/**
|
|
1644
|
+
* Spinner de progreso de la librería ng-comps.
|
|
1645
|
+
* Envuelve Angular Material `mat-progress-spinner` y expone una API uniforme
|
|
1646
|
+
* con look and feel de marca.
|
|
1647
|
+
*/
|
|
1648
|
+
class MfProgressSpinnerComponent {
|
|
1649
|
+
/** Modo del spinner */
|
|
1650
|
+
mode = input('indeterminate', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
1651
|
+
/** Valor actual (0–100, solo en modo determinate) */
|
|
1652
|
+
value = input(0, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
1653
|
+
/** Diámetro en px */
|
|
1654
|
+
diameter = input(40, ...(ngDevMode ? [{ debugName: "diameter" }] : /* istanbul ignore next */ []));
|
|
1655
|
+
/** Grosor del trazo en px */
|
|
1656
|
+
strokeWidth = input(4, ...(ngDevMode ? [{ debugName: "strokeWidth" }] : /* istanbul ignore next */ []));
|
|
1657
|
+
/** Color del spinner */
|
|
1658
|
+
color = input('brand', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
1659
|
+
/** Etiqueta accesible y visible */
|
|
1660
|
+
label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
1661
|
+
hostClasses = computed(() => {
|
|
1662
|
+
return `mf-progress-spinner mf-progress-spinner--${this.color()}`;
|
|
1663
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
1664
|
+
wrapperClasses = computed(() => {
|
|
1665
|
+
const classes = ['mf-progress-spinner__wrapper'];
|
|
1666
|
+
if (this.label())
|
|
1667
|
+
classes.push('mf-progress-spinner__wrapper--labeled');
|
|
1668
|
+
return classes.join(' ');
|
|
1669
|
+
}, ...(ngDevMode ? [{ debugName: "wrapperClasses" }] : /* istanbul ignore next */ []));
|
|
1670
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfProgressSpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1671
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfProgressSpinnerComponent, isStandalone: true, selector: "mf-progress-spinner", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, diameter: { classPropertyName: "diameter", publicName: "diameter", isSignal: true, isRequired: false, transformFunction: null }, strokeWidth: { classPropertyName: "strokeWidth", publicName: "strokeWidth", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
1672
|
+
<div [class]="wrapperClasses()" [attr.aria-label]="label() || 'Cargando'">
|
|
1673
|
+
<mat-progress-spinner
|
|
1674
|
+
[class]="hostClasses()"
|
|
1675
|
+
[mode]="mode()"
|
|
1676
|
+
[value]="value()"
|
|
1677
|
+
[diameter]="diameter()"
|
|
1678
|
+
[strokeWidth]="strokeWidth()"
|
|
1679
|
+
/>
|
|
1680
|
+
@if (label()) {
|
|
1681
|
+
<span class="mf-progress-spinner__label">{{ label() }}</span>
|
|
1682
|
+
}
|
|
1683
|
+
</div>
|
|
1684
|
+
`, isInline: true, styles: [":host{display:inline-flex;align-items:center;justify-content:center}.mf-progress-spinner__wrapper{display:inline-flex;align-items:center;gap:var(--mf-space-3)}.mf-progress-spinner__wrapper--labeled{flex-direction:row}.mf-progress-spinner__label{font-family:var(--mf-font-base);font-size:var(--mf-text-sm);font-weight:var(--mf-weight-medium);color:var(--mf-color-on-surface)}.mf-progress-spinner--brand.mat-mdc-progress-spinner{--mdc-circular-progress-active-indicator-color: var(--mf-color-brand) !important}.mf-progress-spinner--accent.mat-mdc-progress-spinner{--mdc-circular-progress-active-indicator-color: var(--mf-color-accent-500) !important}.mf-progress-spinner--warn.mat-mdc-progress-spinner{--mdc-circular-progress-active-indicator-color: var(--mf-color-error-500) !important}\n"], dependencies: [{ kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1$f.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1685
|
+
}
|
|
1686
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfProgressSpinnerComponent, decorators: [{
|
|
1687
|
+
type: Component,
|
|
1688
|
+
args: [{ selector: 'mf-progress-spinner', imports: [MatProgressSpinnerModule], template: `
|
|
1689
|
+
<div [class]="wrapperClasses()" [attr.aria-label]="label() || 'Cargando'">
|
|
1690
|
+
<mat-progress-spinner
|
|
1691
|
+
[class]="hostClasses()"
|
|
1692
|
+
[mode]="mode()"
|
|
1693
|
+
[value]="value()"
|
|
1694
|
+
[diameter]="diameter()"
|
|
1695
|
+
[strokeWidth]="strokeWidth()"
|
|
1696
|
+
/>
|
|
1697
|
+
@if (label()) {
|
|
1698
|
+
<span class="mf-progress-spinner__label">{{ label() }}</span>
|
|
1699
|
+
}
|
|
1700
|
+
</div>
|
|
1701
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-flex;align-items:center;justify-content:center}.mf-progress-spinner__wrapper{display:inline-flex;align-items:center;gap:var(--mf-space-3)}.mf-progress-spinner__wrapper--labeled{flex-direction:row}.mf-progress-spinner__label{font-family:var(--mf-font-base);font-size:var(--mf-text-sm);font-weight:var(--mf-weight-medium);color:var(--mf-color-on-surface)}.mf-progress-spinner--brand.mat-mdc-progress-spinner{--mdc-circular-progress-active-indicator-color: var(--mf-color-brand) !important}.mf-progress-spinner--accent.mat-mdc-progress-spinner{--mdc-circular-progress-active-indicator-color: var(--mf-color-accent-500) !important}.mf-progress-spinner--warn.mat-mdc-progress-spinner{--mdc-circular-progress-active-indicator-color: var(--mf-color-error-500) !important}\n"] }]
|
|
1702
|
+
}], propDecorators: { mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], diameter: [{ type: i0.Input, args: [{ isSignal: true, alias: "diameter", required: false }] }], strokeWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "strokeWidth", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }] } });
|
|
1703
|
+
|
|
1704
|
+
/**
|
|
1705
|
+
* Grupo de radio buttons de la librería ng-comps.
|
|
1706
|
+
* Envuelve Angular Material `mat-radio-group` + `mat-radio-button`
|
|
1707
|
+
* y expone una API uniforme con look and feel de marca.
|
|
1708
|
+
*/
|
|
1709
|
+
class MfRadioButtonComponent {
|
|
1710
|
+
/** Opciones del grupo */
|
|
1711
|
+
options = input.required(...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
1712
|
+
/** Valor seleccionado */
|
|
1713
|
+
value = input(undefined, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
1714
|
+
/** Deshabilitado */
|
|
1715
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
1716
|
+
/** Dirección del grupo */
|
|
1717
|
+
direction = input('vertical', ...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
|
|
1718
|
+
/** Etiqueta accesible para el grupo */
|
|
1719
|
+
ariaLabel = input(undefined, ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
1720
|
+
mfChange = output();
|
|
1721
|
+
currentValue = signal(undefined, ...(ngDevMode ? [{ debugName: "currentValue" }] : /* istanbul ignore next */ []));
|
|
1722
|
+
constructor() {
|
|
1723
|
+
effect(() => {
|
|
1724
|
+
this.currentValue.set(this.value());
|
|
1725
|
+
});
|
|
1726
|
+
}
|
|
1727
|
+
hostClasses = computed(() => {
|
|
1728
|
+
return `mf-radio mf-radio--${this.direction()}`;
|
|
1729
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
1730
|
+
onChange(event) {
|
|
1731
|
+
this.currentValue.set(event.value);
|
|
1732
|
+
this.mfChange.emit(event.value);
|
|
1733
|
+
}
|
|
1734
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfRadioButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1735
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfRadioButtonComponent, isStandalone: true, selector: "mf-radio-button", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mfChange: "mfChange" }, ngImport: i0, template: `
|
|
1736
|
+
<mat-radio-group
|
|
1737
|
+
[class]="hostClasses()"
|
|
1738
|
+
[disabled]="disabled()"
|
|
1739
|
+
[ngModel]="currentValue()"
|
|
1740
|
+
(change)="onChange($event)"
|
|
1741
|
+
[attr.aria-label]="ariaLabel() || null"
|
|
1742
|
+
>
|
|
1743
|
+
@for (option of options(); track option.value) {
|
|
1744
|
+
<mat-radio-button
|
|
1745
|
+
class="mf-radio__option"
|
|
1746
|
+
[value]="option.value"
|
|
1747
|
+
[disabled]="option.disabled ?? false"
|
|
1748
|
+
>
|
|
1749
|
+
{{ option.label }}
|
|
1750
|
+
</mat-radio-button>
|
|
1751
|
+
}
|
|
1752
|
+
</mat-radio-group>
|
|
1753
|
+
`, isInline: true, styles: [":host{display:block}.mf-radio{display:flex}.mf-radio--vertical{flex-direction:column;gap:var(--mf-space-2)}.mf-radio--horizontal{flex-direction:row;flex-wrap:wrap;gap:var(--mf-space-4)}.mf-radio__option{font-family:var(--mf-font-base)!important;font-size:var(--mf-text-sm)!important;color:var(--mf-color-on-surface)!important}.mf-radio__option .mdc-radio .mdc-radio__outer-circle{border-color:var(--mf-color-border)!important;transition:border-color var(--mf-duration-base) var(--mf-ease-standard)}.mf-radio__option.mat-mdc-radio-checked .mdc-radio .mdc-radio__outer-circle,.mf-radio__option.mat-mdc-radio-checked .mdc-radio .mdc-radio__inner-circle{border-color:var(--mf-color-brand)!important}.mf-radio__option .mat-ripple-element{background-color:var(--mf-color-brand-light)!important}.mf-radio__option .mdc-label{font-family:var(--mf-font-base)!important;color:var(--mf-color-on-surface)!important;cursor:pointer}.mf-radio__option.mat-mdc-radio-disabled .mdc-label{color:var(--mf-color-neutral-400)!important;cursor:default}\n"], dependencies: [{ kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i1$g.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i1$g.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1754
|
+
}
|
|
1755
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfRadioButtonComponent, decorators: [{
|
|
1756
|
+
type: Component,
|
|
1757
|
+
args: [{ selector: 'mf-radio-button', imports: [MatRadioModule, FormsModule], template: `
|
|
1758
|
+
<mat-radio-group
|
|
1759
|
+
[class]="hostClasses()"
|
|
1760
|
+
[disabled]="disabled()"
|
|
1761
|
+
[ngModel]="currentValue()"
|
|
1762
|
+
(change)="onChange($event)"
|
|
1763
|
+
[attr.aria-label]="ariaLabel() || null"
|
|
1764
|
+
>
|
|
1765
|
+
@for (option of options(); track option.value) {
|
|
1766
|
+
<mat-radio-button
|
|
1767
|
+
class="mf-radio__option"
|
|
1768
|
+
[value]="option.value"
|
|
1769
|
+
[disabled]="option.disabled ?? false"
|
|
1770
|
+
>
|
|
1771
|
+
{{ option.label }}
|
|
1772
|
+
</mat-radio-button>
|
|
1773
|
+
}
|
|
1774
|
+
</mat-radio-group>
|
|
1775
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.mf-radio{display:flex}.mf-radio--vertical{flex-direction:column;gap:var(--mf-space-2)}.mf-radio--horizontal{flex-direction:row;flex-wrap:wrap;gap:var(--mf-space-4)}.mf-radio__option{font-family:var(--mf-font-base)!important;font-size:var(--mf-text-sm)!important;color:var(--mf-color-on-surface)!important}.mf-radio__option .mdc-radio .mdc-radio__outer-circle{border-color:var(--mf-color-border)!important;transition:border-color var(--mf-duration-base) var(--mf-ease-standard)}.mf-radio__option.mat-mdc-radio-checked .mdc-radio .mdc-radio__outer-circle,.mf-radio__option.mat-mdc-radio-checked .mdc-radio .mdc-radio__inner-circle{border-color:var(--mf-color-brand)!important}.mf-radio__option .mat-ripple-element{background-color:var(--mf-color-brand-light)!important}.mf-radio__option .mdc-label{font-family:var(--mf-font-base)!important;color:var(--mf-color-on-surface)!important;cursor:pointer}.mf-radio__option.mat-mdc-radio-disabled .mdc-label{color:var(--mf-color-neutral-400)!important;cursor:default}\n"] }]
|
|
1776
|
+
}], ctorParameters: () => [], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], mfChange: [{ type: i0.Output, args: ["mfChange"] }] } });
|
|
1777
|
+
|
|
1778
|
+
/**
|
|
1779
|
+
* Select de la librería ng-comps.
|
|
1780
|
+
* Envuelve Angular Material `mat-select` y expone una API uniforme
|
|
1781
|
+
* con look and feel de marca.
|
|
1782
|
+
*
|
|
1783
|
+
* El dropdown se estiliza mediante la clase global `mf-select-panel` que se
|
|
1784
|
+
* inserta en el overlay. Puedes añadir clases adicionales con `panelClass`.
|
|
1785
|
+
*/
|
|
1786
|
+
class MfSelectComponent {
|
|
1787
|
+
/** Opciones del select */
|
|
1788
|
+
options = input.required(...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
1789
|
+
/** Etiqueta flotante */
|
|
1790
|
+
label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
1791
|
+
/** Placeholder */
|
|
1792
|
+
placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
1793
|
+
/** Valor actual */
|
|
1794
|
+
value = input(undefined, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
1795
|
+
/** Selección múltiple */
|
|
1796
|
+
multiple = input(false, ...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
|
|
1797
|
+
/** Deshabilitado */
|
|
1798
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
1799
|
+
/** Texto de ayuda */
|
|
1800
|
+
hint = input(undefined, ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
|
|
1801
|
+
/** Mensaje de error */
|
|
1802
|
+
error = input(undefined, ...(ngDevMode ? [{ debugName: "error" }] : /* istanbul ignore next */ []));
|
|
1803
|
+
/** Tamaño del campo */
|
|
1804
|
+
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
1805
|
+
/** Ancho completo */
|
|
1806
|
+
fullWidth = input(false, ...(ngDevMode ? [{ debugName: "fullWidth" }] : /* istanbul ignore next */ []));
|
|
1807
|
+
/** Icono al inicio del campo */
|
|
1808
|
+
leadingIcon = input(undefined, ...(ngDevMode ? [{ debugName: "leadingIcon" }] : /* istanbul ignore next */ []));
|
|
1809
|
+
/** Icono al final del campo */
|
|
1810
|
+
trailingIcon = input(undefined, ...(ngDevMode ? [{ debugName: "trailingIcon" }] : /* istanbul ignore next */ []));
|
|
1811
|
+
/**
|
|
1812
|
+
* Clases extra que se añaden al panel del dropdown (overlay).
|
|
1813
|
+
* La clase `mf-select-panel` siempre está presente para los estilos base.
|
|
1814
|
+
*/
|
|
1815
|
+
panelClass = input('', ...(ngDevMode ? [{ debugName: "panelClass" }] : /* istanbul ignore next */ []));
|
|
1816
|
+
mfSelectionChange = output();
|
|
1817
|
+
hostClasses = computed(() => {
|
|
1818
|
+
const classes = ['mf-select', `mf-select--${this.size()}`];
|
|
1819
|
+
if (this.fullWidth())
|
|
1820
|
+
classes.push('mf-select--full');
|
|
1821
|
+
if (this.error())
|
|
1822
|
+
classes.push('mf-select--error');
|
|
1823
|
+
return classes.join(' ');
|
|
1824
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
1825
|
+
panelClasses = computed(() => {
|
|
1826
|
+
const base = ['mf-select-panel'];
|
|
1827
|
+
const extra = this.panelClass();
|
|
1828
|
+
if (Array.isArray(extra)) {
|
|
1829
|
+
base.push(...extra.filter(Boolean));
|
|
1830
|
+
}
|
|
1831
|
+
else if (extra) {
|
|
1832
|
+
base.push(extra);
|
|
1833
|
+
}
|
|
1834
|
+
return base;
|
|
1835
|
+
}, ...(ngDevMode ? [{ debugName: "panelClasses" }] : /* istanbul ignore next */ []));
|
|
1836
|
+
onSelectionChange(event) {
|
|
1837
|
+
this.mfSelectionChange.emit(event.value);
|
|
1838
|
+
}
|
|
1839
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfSelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1840
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfSelectComponent, isStandalone: true, selector: "mf-select", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, error: { classPropertyName: "error", publicName: "error", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, leadingIcon: { classPropertyName: "leadingIcon", publicName: "leadingIcon", isSignal: true, isRequired: false, transformFunction: null }, trailingIcon: { classPropertyName: "trailingIcon", publicName: "trailingIcon", isSignal: true, isRequired: false, transformFunction: null }, panelClass: { classPropertyName: "panelClass", publicName: "panelClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mfSelectionChange: "mfSelectionChange" }, ngImport: i0, template: `
|
|
1841
|
+
<mat-form-field [appearance]="'outline'" [class]="hostClasses()">
|
|
1842
|
+
@if (label()) {
|
|
1843
|
+
<mat-label>{{ label() }}</mat-label>
|
|
1844
|
+
}
|
|
1845
|
+
@if (leadingIcon()) {
|
|
1846
|
+
<mat-icon matPrefix aria-hidden="true">{{ leadingIcon() }}</mat-icon>
|
|
1847
|
+
}
|
|
1848
|
+
<mat-select
|
|
1849
|
+
[value]="value()"
|
|
1850
|
+
[disabled]="disabled()"
|
|
1851
|
+
[multiple]="multiple()"
|
|
1852
|
+
[placeholder]="placeholder()"
|
|
1853
|
+
[panelClass]="panelClasses()"
|
|
1854
|
+
(selectionChange)="onSelectionChange($event)"
|
|
1855
|
+
>
|
|
1856
|
+
@for (option of options(); track option.value) {
|
|
1857
|
+
<mat-option [value]="option.value" [disabled]="option.disabled ?? false">
|
|
1858
|
+
{{ option.label }}
|
|
1859
|
+
</mat-option>
|
|
1860
|
+
}
|
|
1861
|
+
</mat-select>
|
|
1862
|
+
@if (trailingIcon()) {
|
|
1863
|
+
<mat-icon matSuffix aria-hidden="true">{{ trailingIcon() }}</mat-icon>
|
|
1864
|
+
}
|
|
1865
|
+
@if (hint()) {
|
|
1866
|
+
<mat-hint>{{ hint() }}</mat-hint>
|
|
1867
|
+
}
|
|
1868
|
+
@if (error()) {
|
|
1869
|
+
<mat-error>{{ error() }}</mat-error>
|
|
1870
|
+
}
|
|
1871
|
+
</mat-form-field>
|
|
1872
|
+
`, isInline: true, styles: [":host{display:inline-block}.mf-select{font-family:var(--mf-font-base)!important;width:100%}.mf-select--full{width:100%}.mf-select .mat-mdc-text-field-wrapper,.mf-select .mdc-notched-outline{border-radius:var(--mf-radius-md)!important}.mf-select .mdc-notched-outline__leading,.mf-select .mdc-notched-outline__notch,.mf-select .mdc-notched-outline__trailing{border-color:var(--mf-color-border)!important;transition:border-color var(--mf-duration-base) var(--mf-ease-standard)}.mf-select .mat-mdc-form-field-focus-overlay{background-color:transparent!important}.mf-select.mat-focused .mdc-notched-outline__leading,.mf-select.mat-focused .mdc-notched-outline__notch,.mf-select.mat-focused .mdc-notched-outline__trailing{border-color:var(--mf-color-brand)!important;border-width:1.5px!important}.mf-select--error .mdc-notched-outline__leading,.mf-select--error .mdc-notched-outline__notch,.mf-select--error .mdc-notched-outline__trailing{border-color:var(--mf-color-error-500)!important}.mf-select .mat-mdc-floating-label{font-family:var(--mf-font-base)!important;font-weight:var(--mf-weight-medium)!important;color:var(--mf-color-neutral-400)!important}.mf-select.mat-focused .mat-mdc-floating-label{color:var(--mf-color-brand)!important}.mf-select .mat-mdc-select-trigger{font-family:var(--mf-font-base)!important;color:var(--mf-color-on-surface)!important}.mf-select .mat-mdc-select-placeholder{color:var(--mf-color-neutral-400)!important}.mf-select .mat-mdc-select-arrow{color:var(--mf-color-neutral-400)!important;transition:color var(--mf-duration-base) var(--mf-ease-standard)}.mf-select.mat-focused .mat-mdc-select-arrow{color:var(--mf-color-brand)!important}.mf-select .mat-icon{color:var(--mf-color-neutral-400)!important;font-size:20px;width:20px;height:20px;transition:color var(--mf-duration-base) var(--mf-ease-standard)}.mf-select.mat-focused .mat-icon{color:var(--mf-color-brand)!important}.mf-select .mat-mdc-form-field-hint{font-size:var(--mf-text-xs)!important;color:var(--mf-color-neutral-400)!important}.mf-select .mat-mdc-form-field-error{font-size:var(--mf-text-xs)!important}.mf-select--sm .mat-mdc-select-trigger{font-size:var(--mf-text-sm)!important}.mf-select--md .mat-mdc-select-trigger{font-size:var(--mf-text-base)!important}.mf-select--lg .mat-mdc-select-trigger{font-size:var(--mf-text-lg)!important}.mf-select .mat-mdc-select-trigger[aria-disabled=true],.mf-select .mat-mdc-select-trigger.mat-mdc-select-disabled{color:var(--mf-color-neutral-300)!important}\n"], dependencies: [{ kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i1$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i1$3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i1$3.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i1$3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i2$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1873
|
+
}
|
|
1874
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfSelectComponent, decorators: [{
|
|
1875
|
+
type: Component,
|
|
1876
|
+
args: [{ selector: 'mf-select', imports: [MatSelectModule, MatFormFieldModule, MatIconModule], template: `
|
|
1877
|
+
<mat-form-field [appearance]="'outline'" [class]="hostClasses()">
|
|
1878
|
+
@if (label()) {
|
|
1879
|
+
<mat-label>{{ label() }}</mat-label>
|
|
1880
|
+
}
|
|
1881
|
+
@if (leadingIcon()) {
|
|
1882
|
+
<mat-icon matPrefix aria-hidden="true">{{ leadingIcon() }}</mat-icon>
|
|
1883
|
+
}
|
|
1884
|
+
<mat-select
|
|
1885
|
+
[value]="value()"
|
|
1886
|
+
[disabled]="disabled()"
|
|
1887
|
+
[multiple]="multiple()"
|
|
1888
|
+
[placeholder]="placeholder()"
|
|
1889
|
+
[panelClass]="panelClasses()"
|
|
1890
|
+
(selectionChange)="onSelectionChange($event)"
|
|
1891
|
+
>
|
|
1892
|
+
@for (option of options(); track option.value) {
|
|
1893
|
+
<mat-option [value]="option.value" [disabled]="option.disabled ?? false">
|
|
1894
|
+
{{ option.label }}
|
|
1895
|
+
</mat-option>
|
|
1896
|
+
}
|
|
1897
|
+
</mat-select>
|
|
1898
|
+
@if (trailingIcon()) {
|
|
1899
|
+
<mat-icon matSuffix aria-hidden="true">{{ trailingIcon() }}</mat-icon>
|
|
1900
|
+
}
|
|
1901
|
+
@if (hint()) {
|
|
1902
|
+
<mat-hint>{{ hint() }}</mat-hint>
|
|
1903
|
+
}
|
|
1904
|
+
@if (error()) {
|
|
1905
|
+
<mat-error>{{ error() }}</mat-error>
|
|
1906
|
+
}
|
|
1907
|
+
</mat-form-field>
|
|
1908
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block}.mf-select{font-family:var(--mf-font-base)!important;width:100%}.mf-select--full{width:100%}.mf-select .mat-mdc-text-field-wrapper,.mf-select .mdc-notched-outline{border-radius:var(--mf-radius-md)!important}.mf-select .mdc-notched-outline__leading,.mf-select .mdc-notched-outline__notch,.mf-select .mdc-notched-outline__trailing{border-color:var(--mf-color-border)!important;transition:border-color var(--mf-duration-base) var(--mf-ease-standard)}.mf-select .mat-mdc-form-field-focus-overlay{background-color:transparent!important}.mf-select.mat-focused .mdc-notched-outline__leading,.mf-select.mat-focused .mdc-notched-outline__notch,.mf-select.mat-focused .mdc-notched-outline__trailing{border-color:var(--mf-color-brand)!important;border-width:1.5px!important}.mf-select--error .mdc-notched-outline__leading,.mf-select--error .mdc-notched-outline__notch,.mf-select--error .mdc-notched-outline__trailing{border-color:var(--mf-color-error-500)!important}.mf-select .mat-mdc-floating-label{font-family:var(--mf-font-base)!important;font-weight:var(--mf-weight-medium)!important;color:var(--mf-color-neutral-400)!important}.mf-select.mat-focused .mat-mdc-floating-label{color:var(--mf-color-brand)!important}.mf-select .mat-mdc-select-trigger{font-family:var(--mf-font-base)!important;color:var(--mf-color-on-surface)!important}.mf-select .mat-mdc-select-placeholder{color:var(--mf-color-neutral-400)!important}.mf-select .mat-mdc-select-arrow{color:var(--mf-color-neutral-400)!important;transition:color var(--mf-duration-base) var(--mf-ease-standard)}.mf-select.mat-focused .mat-mdc-select-arrow{color:var(--mf-color-brand)!important}.mf-select .mat-icon{color:var(--mf-color-neutral-400)!important;font-size:20px;width:20px;height:20px;transition:color var(--mf-duration-base) var(--mf-ease-standard)}.mf-select.mat-focused .mat-icon{color:var(--mf-color-brand)!important}.mf-select .mat-mdc-form-field-hint{font-size:var(--mf-text-xs)!important;color:var(--mf-color-neutral-400)!important}.mf-select .mat-mdc-form-field-error{font-size:var(--mf-text-xs)!important}.mf-select--sm .mat-mdc-select-trigger{font-size:var(--mf-text-sm)!important}.mf-select--md .mat-mdc-select-trigger{font-size:var(--mf-text-base)!important}.mf-select--lg .mat-mdc-select-trigger{font-size:var(--mf-text-lg)!important}.mf-select .mat-mdc-select-trigger[aria-disabled=true],.mf-select .mat-mdc-select-trigger.mat-mdc-select-disabled{color:var(--mf-color-neutral-300)!important}\n"] }]
|
|
1909
|
+
}], propDecorators: { options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: true }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], error: [{ type: i0.Input, args: [{ isSignal: true, alias: "error", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], leadingIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "leadingIcon", required: false }] }], trailingIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "trailingIcon", required: false }] }], panelClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "panelClass", required: false }] }], mfSelectionChange: [{ type: i0.Output, args: ["mfSelectionChange"] }] } });
|
|
1910
|
+
|
|
1911
|
+
/**
|
|
1912
|
+
* Panel lateral de la librería ng-comps.
|
|
1913
|
+
* Envuelve Angular Material `mat-sidenav-container` y expone una API uniforme
|
|
1914
|
+
* con look and feel de marca.
|
|
1915
|
+
*
|
|
1916
|
+
* Dos formas de uso:
|
|
1917
|
+
* 1. **Navitems declarativos** — Proporciona `navItems`, `headerTitle` e icono.
|
|
1918
|
+
* 2. **Content projection** — Proyecta `[mfSidenavContent]` para control total.
|
|
1919
|
+
*
|
|
1920
|
+
* El contenido principal se proyecta sin atributo.
|
|
1921
|
+
*/
|
|
1922
|
+
class MfSidenavComponent {
|
|
1923
|
+
/** Abierto o cerrado */
|
|
1924
|
+
opened = input(false, ...(ngDevMode ? [{ debugName: "opened" }] : /* istanbul ignore next */ []));
|
|
1925
|
+
/** Modo de apertura */
|
|
1926
|
+
mode = input('side', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
1927
|
+
/** Posición del panel */
|
|
1928
|
+
position = input('start', ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
|
|
1929
|
+
/** Muestra backdrop al abrir */
|
|
1930
|
+
hasBackdrop = input(null, ...(ngDevMode ? [{ debugName: "hasBackdrop" }] : /* istanbul ignore next */ []));
|
|
1931
|
+
/** Ancho del panel lateral */
|
|
1932
|
+
sidenavWidth = input('260px', ...(ngDevMode ? [{ debugName: "sidenavWidth" }] : /* istanbul ignore next */ []));
|
|
1933
|
+
/** Ítems de navegación declarativos */
|
|
1934
|
+
navItems = input([], ...(ngDevMode ? [{ debugName: "navItems" }] : /* istanbul ignore next */ []));
|
|
1935
|
+
/** Título de la cabecera del sidenav */
|
|
1936
|
+
headerTitle = input(undefined, ...(ngDevMode ? [{ debugName: "headerTitle" }] : /* istanbul ignore next */ []));
|
|
1937
|
+
/** Icono Material de la cabecera */
|
|
1938
|
+
headerIcon = input(undefined, ...(ngDevMode ? [{ debugName: "headerIcon" }] : /* istanbul ignore next */ []));
|
|
1939
|
+
/** Aria-label del elemento nav */
|
|
1940
|
+
navAriaLabel = input('Navegación principal', ...(ngDevMode ? [{ debugName: "navAriaLabel" }] : /* istanbul ignore next */ []));
|
|
1941
|
+
mfOpenedChange = output();
|
|
1942
|
+
/** Emite el ítem de navegación pulsado */
|
|
1943
|
+
mfNavItemClick = output();
|
|
1944
|
+
containerClasses = computed(() => 'mf-sidenav-container', ...(ngDevMode ? [{ debugName: "containerClasses" }] : /* istanbul ignore next */ []));
|
|
1945
|
+
sidenavClasses = computed(() => {
|
|
1946
|
+
return `mf-sidenav mf-sidenav--${this.mode()}`;
|
|
1947
|
+
}, ...(ngDevMode ? [{ debugName: "sidenavClasses" }] : /* istanbul ignore next */ []));
|
|
1948
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfSidenavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1949
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfSidenavComponent, isStandalone: true, selector: "mf-sidenav", inputs: { opened: { classPropertyName: "opened", publicName: "opened", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, hasBackdrop: { classPropertyName: "hasBackdrop", publicName: "hasBackdrop", isSignal: true, isRequired: false, transformFunction: null }, sidenavWidth: { classPropertyName: "sidenavWidth", publicName: "sidenavWidth", isSignal: true, isRequired: false, transformFunction: null }, navItems: { classPropertyName: "navItems", publicName: "navItems", isSignal: true, isRequired: false, transformFunction: null }, headerTitle: { classPropertyName: "headerTitle", publicName: "headerTitle", isSignal: true, isRequired: false, transformFunction: null }, headerIcon: { classPropertyName: "headerIcon", publicName: "headerIcon", isSignal: true, isRequired: false, transformFunction: null }, navAriaLabel: { classPropertyName: "navAriaLabel", publicName: "navAriaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mfOpenedChange: "mfOpenedChange", mfNavItemClick: "mfNavItemClick" }, ngImport: i0, template: `
|
|
1950
|
+
<mat-sidenav-container [class]="containerClasses()" [hasBackdrop]="hasBackdrop()">
|
|
1951
|
+
<mat-sidenav
|
|
1952
|
+
[class]="sidenavClasses()"
|
|
1953
|
+
[mode]="mode()"
|
|
1954
|
+
[position]="position()"
|
|
1955
|
+
[opened]="opened()"
|
|
1956
|
+
[style.width]="sidenavWidth()"
|
|
1957
|
+
(openedChange)="mfOpenedChange.emit($event)"
|
|
1958
|
+
>
|
|
1959
|
+
@if (navItems().length > 0) {
|
|
1960
|
+
<div class="mf-sidenav__nav">
|
|
1961
|
+
@if (headerTitle()) {
|
|
1962
|
+
<div class="mf-sidenav__header">
|
|
1963
|
+
@if (headerIcon()) {
|
|
1964
|
+
<mat-icon class="mf-sidenav__header-icon" aria-hidden="true">{{ headerIcon() }}</mat-icon>
|
|
1965
|
+
}
|
|
1966
|
+
<span class="mf-sidenav__header-title">{{ headerTitle() }}</span>
|
|
1967
|
+
</div>
|
|
1968
|
+
}
|
|
1969
|
+
<nav class="mf-sidenav__menu" [attr.aria-label]="navAriaLabel()">
|
|
1970
|
+
@for (item of navItems(); track item.id) {
|
|
1971
|
+
<button
|
|
1972
|
+
type="button"
|
|
1973
|
+
class="mf-sidenav__item"
|
|
1974
|
+
[class.mf-sidenav__item--active]="item.active"
|
|
1975
|
+
[class.mf-sidenav__item--disabled]="item.disabled"
|
|
1976
|
+
[disabled]="item.disabled ?? false"
|
|
1977
|
+
[attr.aria-current]="item.active ? 'page' : null"
|
|
1978
|
+
(click)="!item.disabled && mfNavItemClick.emit(item)"
|
|
1979
|
+
>
|
|
1980
|
+
<mat-icon class="mf-sidenav__item-icon" aria-hidden="true">{{ item.icon }}</mat-icon>
|
|
1981
|
+
<span class="mf-sidenav__item-label">{{ item.label }}</span>
|
|
1982
|
+
@if (item.badge && item.badge > 0) {
|
|
1983
|
+
<span class="mf-sidenav__item-badge" aria-label="{{ item.badge }} notificaciones">
|
|
1984
|
+
{{ item.badge > 99 ? '99+' : item.badge }}
|
|
1985
|
+
</span>
|
|
1986
|
+
}
|
|
1987
|
+
</button>
|
|
1988
|
+
}
|
|
1989
|
+
</nav>
|
|
1990
|
+
</div>
|
|
1991
|
+
} @else {
|
|
1992
|
+
<ng-content select="[mfSidenavContent]" />
|
|
1993
|
+
}
|
|
1994
|
+
</mat-sidenav>
|
|
1995
|
+
<mat-sidenav-content class="mf-sidenav__main">
|
|
1996
|
+
<ng-content />
|
|
1997
|
+
</mat-sidenav-content>
|
|
1998
|
+
</mat-sidenav-container>
|
|
1999
|
+
`, isInline: true, styles: [":host{display:block;height:100%}.mf-sidenav-container{height:100%;background-color:var(--mf-color-surface)!important}.mf-sidenav{background-color:var(--mf-color-surface)!important;border-right:1px solid var(--mf-color-border)!important;font-family:var(--mf-font-base)!important}.mf-sidenav--over,.mf-sidenav--push{box-shadow:var(--mf-shadow-lg)!important}.mf-sidenav--side{box-shadow:none;border-right:1px solid var(--mf-color-border)!important}.mf-sidenav__nav{display:flex;flex-direction:column;height:100%;overflow:hidden}.mf-sidenav__header{display:flex;align-items:center;gap:var(--mf-space-2);padding:var(--mf-space-5) var(--mf-space-4) var(--mf-space-4);border-bottom:1px solid var(--mf-color-border);flex-shrink:0}.mf-sidenav__header-icon{color:var(--mf-color-brand)!important;font-size:22px;width:22px;height:22px}.mf-sidenav__header-title{font-family:var(--mf-font-display)!important;font-size:var(--mf-text-base);font-weight:var(--mf-weight-bold);color:var(--mf-color-on-surface);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mf-sidenav__menu{display:flex;flex-direction:column;gap:var(--mf-space-1);padding:var(--mf-space-3) var(--mf-space-3);flex:1;overflow-y:auto}.mf-sidenav__item{display:flex;align-items:center;gap:var(--mf-space-3);width:100%;padding:var(--mf-space-2) var(--mf-space-3);border:none;border-radius:var(--mf-radius-md);background:transparent;color:var(--mf-color-neutral-600);font-family:var(--mf-font-base);font-size:var(--mf-text-sm);font-weight:var(--mf-weight-medium);cursor:pointer;text-align:left;transition:background-color var(--mf-duration-fast) var(--mf-ease-standard),color var(--mf-duration-fast) var(--mf-ease-standard);position:relative}.mf-sidenav__item:hover:not(.mf-sidenav__item--disabled){background-color:var(--mf-color-neutral-100);color:var(--mf-color-on-surface)}.mf-sidenav__item:hover:not(.mf-sidenav__item--disabled) .mf-sidenav__item-icon{color:var(--mf-color-brand)!important}.mf-sidenav__item--active{background-color:var(--mf-color-brand-light)!important;color:var(--mf-color-brand)!important;font-weight:var(--mf-weight-bold)!important}.mf-sidenav__item--active .mf-sidenav__item-icon{color:var(--mf-color-brand)!important}.mf-sidenav__item--disabled{opacity:.4;cursor:not-allowed}.mf-sidenav__item-icon{font-size:20px;width:20px;height:20px;flex-shrink:0;color:var(--mf-color-neutral-400)!important;transition:color var(--mf-duration-fast) var(--mf-ease-standard)}.mf-sidenav__item-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mf-sidenav__item-badge{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 var(--mf-space-1);border-radius:var(--mf-radius-full);background-color:var(--mf-color-brand);color:var(--mf-color-on-brand);font-size:.625rem;font-weight:var(--mf-weight-bold);line-height:1;flex-shrink:0}.mf-sidenav__main{background-color:var(--mf-color-surface);padding:var(--mf-space-6);font-family:var(--mf-font-base)}.mf-sidenav-container .mat-drawer-backdrop.mat-drawer-shown{background-color:#0f172a52!important}\n"], dependencies: [{ kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i1$h.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i1$h.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "component", type: i1$h.MatSidenavContent, selector: "mat-sidenav-content" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2000
|
+
}
|
|
2001
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfSidenavComponent, decorators: [{
|
|
2002
|
+
type: Component,
|
|
2003
|
+
args: [{ selector: 'mf-sidenav', imports: [MatSidenavModule, MatIconModule], template: `
|
|
2004
|
+
<mat-sidenav-container [class]="containerClasses()" [hasBackdrop]="hasBackdrop()">
|
|
2005
|
+
<mat-sidenav
|
|
2006
|
+
[class]="sidenavClasses()"
|
|
2007
|
+
[mode]="mode()"
|
|
2008
|
+
[position]="position()"
|
|
2009
|
+
[opened]="opened()"
|
|
2010
|
+
[style.width]="sidenavWidth()"
|
|
2011
|
+
(openedChange)="mfOpenedChange.emit($event)"
|
|
2012
|
+
>
|
|
2013
|
+
@if (navItems().length > 0) {
|
|
2014
|
+
<div class="mf-sidenav__nav">
|
|
2015
|
+
@if (headerTitle()) {
|
|
2016
|
+
<div class="mf-sidenav__header">
|
|
2017
|
+
@if (headerIcon()) {
|
|
2018
|
+
<mat-icon class="mf-sidenav__header-icon" aria-hidden="true">{{ headerIcon() }}</mat-icon>
|
|
2019
|
+
}
|
|
2020
|
+
<span class="mf-sidenav__header-title">{{ headerTitle() }}</span>
|
|
2021
|
+
</div>
|
|
2022
|
+
}
|
|
2023
|
+
<nav class="mf-sidenav__menu" [attr.aria-label]="navAriaLabel()">
|
|
2024
|
+
@for (item of navItems(); track item.id) {
|
|
2025
|
+
<button
|
|
2026
|
+
type="button"
|
|
2027
|
+
class="mf-sidenav__item"
|
|
2028
|
+
[class.mf-sidenav__item--active]="item.active"
|
|
2029
|
+
[class.mf-sidenav__item--disabled]="item.disabled"
|
|
2030
|
+
[disabled]="item.disabled ?? false"
|
|
2031
|
+
[attr.aria-current]="item.active ? 'page' : null"
|
|
2032
|
+
(click)="!item.disabled && mfNavItemClick.emit(item)"
|
|
2033
|
+
>
|
|
2034
|
+
<mat-icon class="mf-sidenav__item-icon" aria-hidden="true">{{ item.icon }}</mat-icon>
|
|
2035
|
+
<span class="mf-sidenav__item-label">{{ item.label }}</span>
|
|
2036
|
+
@if (item.badge && item.badge > 0) {
|
|
2037
|
+
<span class="mf-sidenav__item-badge" aria-label="{{ item.badge }} notificaciones">
|
|
2038
|
+
{{ item.badge > 99 ? '99+' : item.badge }}
|
|
2039
|
+
</span>
|
|
2040
|
+
}
|
|
2041
|
+
</button>
|
|
2042
|
+
}
|
|
2043
|
+
</nav>
|
|
2044
|
+
</div>
|
|
2045
|
+
} @else {
|
|
2046
|
+
<ng-content select="[mfSidenavContent]" />
|
|
2047
|
+
}
|
|
2048
|
+
</mat-sidenav>
|
|
2049
|
+
<mat-sidenav-content class="mf-sidenav__main">
|
|
2050
|
+
<ng-content />
|
|
2051
|
+
</mat-sidenav-content>
|
|
2052
|
+
</mat-sidenav-container>
|
|
2053
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;height:100%}.mf-sidenav-container{height:100%;background-color:var(--mf-color-surface)!important}.mf-sidenav{background-color:var(--mf-color-surface)!important;border-right:1px solid var(--mf-color-border)!important;font-family:var(--mf-font-base)!important}.mf-sidenav--over,.mf-sidenav--push{box-shadow:var(--mf-shadow-lg)!important}.mf-sidenav--side{box-shadow:none;border-right:1px solid var(--mf-color-border)!important}.mf-sidenav__nav{display:flex;flex-direction:column;height:100%;overflow:hidden}.mf-sidenav__header{display:flex;align-items:center;gap:var(--mf-space-2);padding:var(--mf-space-5) var(--mf-space-4) var(--mf-space-4);border-bottom:1px solid var(--mf-color-border);flex-shrink:0}.mf-sidenav__header-icon{color:var(--mf-color-brand)!important;font-size:22px;width:22px;height:22px}.mf-sidenav__header-title{font-family:var(--mf-font-display)!important;font-size:var(--mf-text-base);font-weight:var(--mf-weight-bold);color:var(--mf-color-on-surface);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mf-sidenav__menu{display:flex;flex-direction:column;gap:var(--mf-space-1);padding:var(--mf-space-3) var(--mf-space-3);flex:1;overflow-y:auto}.mf-sidenav__item{display:flex;align-items:center;gap:var(--mf-space-3);width:100%;padding:var(--mf-space-2) var(--mf-space-3);border:none;border-radius:var(--mf-radius-md);background:transparent;color:var(--mf-color-neutral-600);font-family:var(--mf-font-base);font-size:var(--mf-text-sm);font-weight:var(--mf-weight-medium);cursor:pointer;text-align:left;transition:background-color var(--mf-duration-fast) var(--mf-ease-standard),color var(--mf-duration-fast) var(--mf-ease-standard);position:relative}.mf-sidenav__item:hover:not(.mf-sidenav__item--disabled){background-color:var(--mf-color-neutral-100);color:var(--mf-color-on-surface)}.mf-sidenav__item:hover:not(.mf-sidenav__item--disabled) .mf-sidenav__item-icon{color:var(--mf-color-brand)!important}.mf-sidenav__item--active{background-color:var(--mf-color-brand-light)!important;color:var(--mf-color-brand)!important;font-weight:var(--mf-weight-bold)!important}.mf-sidenav__item--active .mf-sidenav__item-icon{color:var(--mf-color-brand)!important}.mf-sidenav__item--disabled{opacity:.4;cursor:not-allowed}.mf-sidenav__item-icon{font-size:20px;width:20px;height:20px;flex-shrink:0;color:var(--mf-color-neutral-400)!important;transition:color var(--mf-duration-fast) var(--mf-ease-standard)}.mf-sidenav__item-label{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mf-sidenav__item-badge{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 var(--mf-space-1);border-radius:var(--mf-radius-full);background-color:var(--mf-color-brand);color:var(--mf-color-on-brand);font-size:.625rem;font-weight:var(--mf-weight-bold);line-height:1;flex-shrink:0}.mf-sidenav__main{background-color:var(--mf-color-surface);padding:var(--mf-space-6);font-family:var(--mf-font-base)}.mf-sidenav-container .mat-drawer-backdrop.mat-drawer-shown{background-color:#0f172a52!important}\n"] }]
|
|
2054
|
+
}], propDecorators: { opened: [{ type: i0.Input, args: [{ isSignal: true, alias: "opened", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], hasBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasBackdrop", required: false }] }], sidenavWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "sidenavWidth", required: false }] }], navItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "navItems", required: false }] }], headerTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerTitle", required: false }] }], headerIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerIcon", required: false }] }], navAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "navAriaLabel", required: false }] }], mfOpenedChange: [{ type: i0.Output, args: ["mfOpenedChange"] }], mfNavItemClick: [{ type: i0.Output, args: ["mfNavItemClick"] }] } });
|
|
2055
|
+
|
|
2056
|
+
/**
|
|
2057
|
+
* Slide Toggle de la librería ng-comps.
|
|
2058
|
+
* Envuelve Angular Material `mat-slide-toggle` y expone una API uniforme
|
|
2059
|
+
* con look and feel de marca.
|
|
2060
|
+
*/
|
|
2061
|
+
class MfSlideToggleComponent {
|
|
2062
|
+
/** Texto descriptivo */
|
|
2063
|
+
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
2064
|
+
/** Estado activado */
|
|
2065
|
+
checked = input(false, ...(ngDevMode ? [{ debugName: "checked" }] : /* istanbul ignore next */ []));
|
|
2066
|
+
/** Deshabilitado */
|
|
2067
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
2068
|
+
mfChange = output();
|
|
2069
|
+
hostClasses = computed(() => {
|
|
2070
|
+
const classes = ['mf-slide-toggle'];
|
|
2071
|
+
if (this.disabled())
|
|
2072
|
+
classes.push('mf-slide-toggle--disabled');
|
|
2073
|
+
return classes.join(' ');
|
|
2074
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
2075
|
+
onChange(event) {
|
|
2076
|
+
this.mfChange.emit(event.checked);
|
|
2077
|
+
}
|
|
2078
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfSlideToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2079
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: MfSlideToggleComponent, isStandalone: true, selector: "mf-slide-toggle", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mfChange: "mfChange" }, ngImport: i0, template: `
|
|
2080
|
+
<mat-slide-toggle
|
|
2081
|
+
[checked]="checked()"
|
|
2082
|
+
[disabled]="disabled()"
|
|
2083
|
+
[class]="hostClasses()"
|
|
2084
|
+
(change)="onChange($event)"
|
|
2085
|
+
>
|
|
2086
|
+
{{ label() }}
|
|
2087
|
+
</mat-slide-toggle>
|
|
2088
|
+
`, isInline: true, styles: [":host{display:inline-block}.mf-slide-toggle.mat-mdc-slide-toggle{font-family:var(--mf-font-base)!important;font-size:var(--mf-text-sm)!important}.mf-slide-toggle .mdc-switch--selected .mdc-switch__track:after{background-color:var(--mf-color-primary-200)!important}.mf-slide-toggle .mdc-switch--selected .mdc-switch__handle:after{background-color:var(--mf-color-brand)!important}.mf-slide-toggle--disabled{opacity:.42}\n"], dependencies: [{ kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i1$i.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2089
|
+
}
|
|
2090
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfSlideToggleComponent, decorators: [{
|
|
2091
|
+
type: Component,
|
|
2092
|
+
args: [{ selector: 'mf-slide-toggle', imports: [MatSlideToggleModule], template: `
|
|
2093
|
+
<mat-slide-toggle
|
|
2094
|
+
[checked]="checked()"
|
|
2095
|
+
[disabled]="disabled()"
|
|
2096
|
+
[class]="hostClasses()"
|
|
2097
|
+
(change)="onChange($event)"
|
|
2098
|
+
>
|
|
2099
|
+
{{ label() }}
|
|
2100
|
+
</mat-slide-toggle>
|
|
2101
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block}.mf-slide-toggle.mat-mdc-slide-toggle{font-family:var(--mf-font-base)!important;font-size:var(--mf-text-sm)!important}.mf-slide-toggle .mdc-switch--selected .mdc-switch__track:after{background-color:var(--mf-color-primary-200)!important}.mf-slide-toggle .mdc-switch--selected .mdc-switch__handle:after{background-color:var(--mf-color-brand)!important}.mf-slide-toggle--disabled{opacity:.42}\n"] }]
|
|
2102
|
+
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], mfChange: [{ type: i0.Output, args: ["mfChange"] }] } });
|
|
2103
|
+
|
|
2104
|
+
/**
|
|
2105
|
+
* Servicio de Snackbar de la librería ng-comps.
|
|
2106
|
+
* Envuelve Angular Material `MatSnackBar` y expone una API uniforme
|
|
2107
|
+
* con estilos de marca y tipos semánticos.
|
|
2108
|
+
*/
|
|
2109
|
+
class MfSnackbarService {
|
|
2110
|
+
matSnackBar = inject(MatSnackBar);
|
|
2111
|
+
open(config) {
|
|
2112
|
+
const type = config.type ?? 'info';
|
|
2113
|
+
const matConfig = {
|
|
2114
|
+
duration: config.duration ?? 4000,
|
|
2115
|
+
horizontalPosition: config.horizontalPosition ?? 'end',
|
|
2116
|
+
verticalPosition: config.verticalPosition ?? 'bottom',
|
|
2117
|
+
panelClass: ['mf-snackbar', `mf-snackbar--${type}`],
|
|
2118
|
+
};
|
|
2119
|
+
return this.matSnackBar.open(config.message, config.action, matConfig);
|
|
2120
|
+
}
|
|
2121
|
+
info(message, action) {
|
|
2122
|
+
return this.open({ message, action, type: 'info' });
|
|
2123
|
+
}
|
|
2124
|
+
success(message, action) {
|
|
2125
|
+
return this.open({ message, action, type: 'success' });
|
|
2126
|
+
}
|
|
2127
|
+
warning(message, action) {
|
|
2128
|
+
return this.open({ message, action, type: 'warning' });
|
|
2129
|
+
}
|
|
2130
|
+
error(message, action) {
|
|
2131
|
+
return this.open({ message, action, type: 'error' });
|
|
2132
|
+
}
|
|
2133
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfSnackbarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
2134
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfSnackbarService, providedIn: 'root' });
|
|
2135
|
+
}
|
|
2136
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfSnackbarService, decorators: [{
|
|
2137
|
+
type: Injectable,
|
|
2138
|
+
args: [{ providedIn: 'root' }]
|
|
2139
|
+
}] });
|
|
2140
|
+
|
|
2141
|
+
/**
|
|
2142
|
+
* Table de la librería ng-comps.
|
|
2143
|
+
* Envuelve Angular Material `mat-table` y expone una API uniforme
|
|
2144
|
+
* con look and feel de marca. Ideal para dashboards y paneles de datos.
|
|
2145
|
+
*/
|
|
2146
|
+
class MfTableComponent {
|
|
2147
|
+
/** Columnas de la tabla */
|
|
2148
|
+
columns = input.required(...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
2149
|
+
/** Datos de la tabla */
|
|
2150
|
+
data = input.required(...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
2151
|
+
/** Variante visual */
|
|
2152
|
+
variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
2153
|
+
mfSortChange = output();
|
|
2154
|
+
mfRowClick = output();
|
|
2155
|
+
displayedColumns = computed(() => this.columns().map(c => c.key), ...(ngDevMode ? [{ debugName: "displayedColumns" }] : /* istanbul ignore next */ []));
|
|
2156
|
+
hostClasses = computed(() => {
|
|
2157
|
+
return ['mf-table', `mf-table--${this.variant()}`].join(' ');
|
|
2158
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
2159
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2160
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfTableComponent, isStandalone: true, selector: "mf-table", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: true, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mfSortChange: "mfSortChange", mfRowClick: "mfRowClick" }, ngImport: i0, template: `
|
|
2161
|
+
<div class="mf-table__wrapper" [class]="hostClasses()">
|
|
2162
|
+
<table
|
|
2163
|
+
mat-table
|
|
2164
|
+
[dataSource]="data()"
|
|
2165
|
+
matSort
|
|
2166
|
+
(matSortChange)="mfSortChange.emit($event)"
|
|
2167
|
+
>
|
|
2168
|
+
@for (col of columns(); track col.key) {
|
|
2169
|
+
<ng-container [matColumnDef]="col.key">
|
|
2170
|
+
@if (col.sortable) {
|
|
2171
|
+
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ col.header }}</th>
|
|
2172
|
+
} @else {
|
|
2173
|
+
<th mat-header-cell *matHeaderCellDef>{{ col.header }}</th>
|
|
2174
|
+
}
|
|
2175
|
+
<td mat-cell *matCellDef="let row">{{ row[col.key] }}</td>
|
|
2176
|
+
</ng-container>
|
|
2177
|
+
}
|
|
2178
|
+
|
|
2179
|
+
<tr mat-header-row *matHeaderRowDef="displayedColumns()"></tr>
|
|
2180
|
+
<tr mat-row *matRowDef="let row; columns: displayedColumns()" (click)="mfRowClick.emit(row)"></tr>
|
|
2181
|
+
</table>
|
|
2182
|
+
</div>
|
|
2183
|
+
`, isInline: true, styles: [":host{display:block}.mf-table__wrapper{overflow-x:auto;border-radius:var(--mf-radius-md);border:1px solid var(--mf-color-border)}.mf-table .mat-mdc-table{width:100%;font-family:var(--mf-font-base)!important}.mf-table .mat-mdc-header-cell{font-family:var(--mf-font-base)!important;font-weight:var(--mf-weight-bold)!important;font-size:var(--mf-text-sm)!important;color:var(--mf-color-neutral-600)!important;background-color:var(--mf-color-neutral-50)!important;border-bottom-color:var(--mf-color-border)!important}.mf-table .mat-mdc-cell{font-family:var(--mf-font-base)!important;font-size:var(--mf-text-sm)!important;color:var(--mf-color-on-surface)!important;border-bottom-color:var(--mf-color-border)!important}.mf-table .mat-mdc-row:hover{background-color:var(--mf-color-brand-light)!important;cursor:pointer}.mf-table--striped .mat-mdc-row:nth-child(2n){background-color:var(--mf-color-neutral-50)}.mf-table--bordered .mat-mdc-cell,.mf-table--bordered .mat-mdc-header-cell{border-right:1px solid var(--mf-color-border)!important}.mf-table--bordered .mat-mdc-cell:last-child,.mf-table--bordered .mat-mdc-header-cell:last-child{border-right:none!important}.mf-table .mat-sort-header-arrow{color:var(--mf-color-brand)!important}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i1$j.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i1$j.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i1$j.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i1$j.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i1$j.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i1$j.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i1$j.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i1$j.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i1$j.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i1$j.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i2$2.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i2$2.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2184
|
+
}
|
|
2185
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfTableComponent, decorators: [{
|
|
2186
|
+
type: Component,
|
|
2187
|
+
args: [{ selector: 'mf-table', imports: [MatTableModule, MatSortModule], template: `
|
|
2188
|
+
<div class="mf-table__wrapper" [class]="hostClasses()">
|
|
2189
|
+
<table
|
|
2190
|
+
mat-table
|
|
2191
|
+
[dataSource]="data()"
|
|
2192
|
+
matSort
|
|
2193
|
+
(matSortChange)="mfSortChange.emit($event)"
|
|
2194
|
+
>
|
|
2195
|
+
@for (col of columns(); track col.key) {
|
|
2196
|
+
<ng-container [matColumnDef]="col.key">
|
|
2197
|
+
@if (col.sortable) {
|
|
2198
|
+
<th mat-header-cell *matHeaderCellDef mat-sort-header>{{ col.header }}</th>
|
|
2199
|
+
} @else {
|
|
2200
|
+
<th mat-header-cell *matHeaderCellDef>{{ col.header }}</th>
|
|
2201
|
+
}
|
|
2202
|
+
<td mat-cell *matCellDef="let row">{{ row[col.key] }}</td>
|
|
2203
|
+
</ng-container>
|
|
2204
|
+
}
|
|
2205
|
+
|
|
2206
|
+
<tr mat-header-row *matHeaderRowDef="displayedColumns()"></tr>
|
|
2207
|
+
<tr mat-row *matRowDef="let row; columns: displayedColumns()" (click)="mfRowClick.emit(row)"></tr>
|
|
2208
|
+
</table>
|
|
2209
|
+
</div>
|
|
2210
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.mf-table__wrapper{overflow-x:auto;border-radius:var(--mf-radius-md);border:1px solid var(--mf-color-border)}.mf-table .mat-mdc-table{width:100%;font-family:var(--mf-font-base)!important}.mf-table .mat-mdc-header-cell{font-family:var(--mf-font-base)!important;font-weight:var(--mf-weight-bold)!important;font-size:var(--mf-text-sm)!important;color:var(--mf-color-neutral-600)!important;background-color:var(--mf-color-neutral-50)!important;border-bottom-color:var(--mf-color-border)!important}.mf-table .mat-mdc-cell{font-family:var(--mf-font-base)!important;font-size:var(--mf-text-sm)!important;color:var(--mf-color-on-surface)!important;border-bottom-color:var(--mf-color-border)!important}.mf-table .mat-mdc-row:hover{background-color:var(--mf-color-brand-light)!important;cursor:pointer}.mf-table--striped .mat-mdc-row:nth-child(2n){background-color:var(--mf-color-neutral-50)}.mf-table--bordered .mat-mdc-cell,.mf-table--bordered .mat-mdc-header-cell{border-right:1px solid var(--mf-color-border)!important}.mf-table--bordered .mat-mdc-cell:last-child,.mf-table--bordered .mat-mdc-header-cell:last-child{border-right:none!important}.mf-table .mat-sort-header-arrow{color:var(--mf-color-brand)!important}\n"] }]
|
|
2211
|
+
}], propDecorators: { columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: true }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], mfSortChange: [{ type: i0.Output, args: ["mfSortChange"] }], mfRowClick: [{ type: i0.Output, args: ["mfRowClick"] }] } });
|
|
2212
|
+
|
|
2213
|
+
/**
|
|
2214
|
+
* Tabs de la librería ng-comps.
|
|
2215
|
+
* Envuelve Angular Material `mat-tab-group` y expone una API uniforme
|
|
2216
|
+
* con look and feel de marca.
|
|
2217
|
+
*/
|
|
2218
|
+
class MfTabsComponent {
|
|
2219
|
+
/** Pestañas */
|
|
2220
|
+
tabs = input.required(...(ngDevMode ? [{ debugName: "tabs" }] : /* istanbul ignore next */ []));
|
|
2221
|
+
/** Índice seleccionado */
|
|
2222
|
+
selectedIndex = input(0, ...(ngDevMode ? [{ debugName: "selectedIndex" }] : /* istanbul ignore next */ []));
|
|
2223
|
+
/** Variante visual */
|
|
2224
|
+
variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
2225
|
+
mfSelectedIndexChange = output();
|
|
2226
|
+
hostClasses = computed(() => {
|
|
2227
|
+
return ['mf-tabs', `mf-tabs--${this.variant()}`].join(' ');
|
|
2228
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
2229
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfTabsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2230
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfTabsComponent, isStandalone: true, selector: "mf-tabs", inputs: { tabs: { classPropertyName: "tabs", publicName: "tabs", isSignal: true, isRequired: true, transformFunction: null }, selectedIndex: { classPropertyName: "selectedIndex", publicName: "selectedIndex", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mfSelectedIndexChange: "mfSelectedIndexChange" }, ngImport: i0, template: `
|
|
2231
|
+
<mat-tab-group
|
|
2232
|
+
[selectedIndex]="selectedIndex()"
|
|
2233
|
+
[class]="hostClasses()"
|
|
2234
|
+
[mat-stretch-tabs]="variant() === 'stretched'"
|
|
2235
|
+
(selectedIndexChange)="mfSelectedIndexChange.emit($event)"
|
|
2236
|
+
>
|
|
2237
|
+
@for (tab of tabs(); track tab.label) {
|
|
2238
|
+
<mat-tab [disabled]="tab.disabled ?? false">
|
|
2239
|
+
<ng-template mat-tab-label>
|
|
2240
|
+
@if (tab.icon) {
|
|
2241
|
+
<mat-icon class="mf-tabs__icon" aria-hidden="true">{{ tab.icon }}</mat-icon>
|
|
2242
|
+
}
|
|
2243
|
+
{{ tab.label }}
|
|
2244
|
+
</ng-template>
|
|
2245
|
+
</mat-tab>
|
|
2246
|
+
}
|
|
2247
|
+
</mat-tab-group>
|
|
2248
|
+
`, isInline: true, styles: [":host{display:block}.mf-tabs .mat-mdc-tab-header{border-bottom:1px solid var(--mf-color-border)!important}.mf-tabs .mat-mdc-tab:not(.mdc-tab--active) .mdc-tab__text-label{color:var(--mf-color-neutral-400)!important;font-family:var(--mf-font-base)!important;font-weight:var(--mf-weight-medium)!important}.mf-tabs .mat-mdc-tab.mdc-tab--active .mdc-tab__text-label{color:var(--mf-color-brand)!important;font-family:var(--mf-font-base)!important;font-weight:var(--mf-weight-bold)!important}.mf-tabs .mat-mdc-tab-header .mdc-tab-indicator__content--underline{border-color:var(--mf-color-brand)!important}.mf-tabs__icon{margin-right:var(--mf-space-2);font-size:1.1em;height:1.1em;width:1.1em;vertical-align:middle}\n"], dependencies: [{ kind: "ngmodule", type: MatTabsModule }, { kind: "directive", type: i1$k.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i1$k.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i1$k.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i1$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2249
|
+
}
|
|
2250
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfTabsComponent, decorators: [{
|
|
2251
|
+
type: Component,
|
|
2252
|
+
args: [{ selector: 'mf-tabs', imports: [MatTabsModule, MatIconModule], template: `
|
|
2253
|
+
<mat-tab-group
|
|
2254
|
+
[selectedIndex]="selectedIndex()"
|
|
2255
|
+
[class]="hostClasses()"
|
|
2256
|
+
[mat-stretch-tabs]="variant() === 'stretched'"
|
|
2257
|
+
(selectedIndexChange)="mfSelectedIndexChange.emit($event)"
|
|
2258
|
+
>
|
|
2259
|
+
@for (tab of tabs(); track tab.label) {
|
|
2260
|
+
<mat-tab [disabled]="tab.disabled ?? false">
|
|
2261
|
+
<ng-template mat-tab-label>
|
|
2262
|
+
@if (tab.icon) {
|
|
2263
|
+
<mat-icon class="mf-tabs__icon" aria-hidden="true">{{ tab.icon }}</mat-icon>
|
|
2264
|
+
}
|
|
2265
|
+
{{ tab.label }}
|
|
2266
|
+
</ng-template>
|
|
2267
|
+
</mat-tab>
|
|
2268
|
+
}
|
|
2269
|
+
</mat-tab-group>
|
|
2270
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.mf-tabs .mat-mdc-tab-header{border-bottom:1px solid var(--mf-color-border)!important}.mf-tabs .mat-mdc-tab:not(.mdc-tab--active) .mdc-tab__text-label{color:var(--mf-color-neutral-400)!important;font-family:var(--mf-font-base)!important;font-weight:var(--mf-weight-medium)!important}.mf-tabs .mat-mdc-tab.mdc-tab--active .mdc-tab__text-label{color:var(--mf-color-brand)!important;font-family:var(--mf-font-base)!important;font-weight:var(--mf-weight-bold)!important}.mf-tabs .mat-mdc-tab-header .mdc-tab-indicator__content--underline{border-color:var(--mf-color-brand)!important}.mf-tabs__icon{margin-right:var(--mf-space-2);font-size:1.1em;height:1.1em;width:1.1em;vertical-align:middle}\n"] }]
|
|
2271
|
+
}], propDecorators: { tabs: [{ type: i0.Input, args: [{ isSignal: true, alias: "tabs", required: true }] }], selectedIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedIndex", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], mfSelectedIndexChange: [{ type: i0.Output, args: ["mfSelectedIndexChange"] }] } });
|
|
2272
|
+
|
|
2273
|
+
/**
|
|
2274
|
+
* Textarea de la librería ng-comps.
|
|
2275
|
+
* Envuelve Angular Material `matInput` con textarea y expone una API uniforme
|
|
2276
|
+
* con look and feel de marca.
|
|
2277
|
+
*/
|
|
2278
|
+
class MfTextareaComponent {
|
|
2279
|
+
/** Etiqueta */
|
|
2280
|
+
label = input(undefined, ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
2281
|
+
/** Placeholder */
|
|
2282
|
+
placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
2283
|
+
/** Valor */
|
|
2284
|
+
value = input('', ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
2285
|
+
/** Filas visibles */
|
|
2286
|
+
rows = input(4, ...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
2287
|
+
/** Tamaño */
|
|
2288
|
+
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
2289
|
+
/** Máximo de caracteres */
|
|
2290
|
+
maxLength = input(undefined, ...(ngDevMode ? [{ debugName: "maxLength" }] : /* istanbul ignore next */ []));
|
|
2291
|
+
/** Deshabilitado */
|
|
2292
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
2293
|
+
/** Solo lectura */
|
|
2294
|
+
readonly = input(false, ...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
|
|
2295
|
+
/** Texto de ayuda */
|
|
2296
|
+
hint = input(undefined, ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
|
|
2297
|
+
/** Resize */
|
|
2298
|
+
resize = input('vertical', ...(ngDevMode ? [{ debugName: "resize" }] : /* istanbul ignore next */ []));
|
|
2299
|
+
mfInput = output();
|
|
2300
|
+
mfBlur = output();
|
|
2301
|
+
currentLength = computed(() => this.value().length, ...(ngDevMode ? [{ debugName: "currentLength" }] : /* istanbul ignore next */ []));
|
|
2302
|
+
hostClasses = computed(() => {
|
|
2303
|
+
return ['mf-textarea', `mf-textarea--${this.size()}`, `mf-textarea--resize-${this.resize()}`].join(' ');
|
|
2304
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
2305
|
+
onInput(event) {
|
|
2306
|
+
const value = event.target.value;
|
|
2307
|
+
this.mfInput.emit(value);
|
|
2308
|
+
}
|
|
2309
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfTextareaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2310
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfTextareaComponent, isStandalone: true, selector: "mf-textarea", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, maxLength: { classPropertyName: "maxLength", publicName: "maxLength", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, resize: { classPropertyName: "resize", publicName: "resize", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { mfInput: "mfInput", mfBlur: "mfBlur" }, ngImport: i0, template: `
|
|
2311
|
+
<mat-form-field [appearance]="'outline'" [class]="hostClasses()">
|
|
2312
|
+
@if (label()) {
|
|
2313
|
+
<mat-label>{{ label() }}</mat-label>
|
|
2314
|
+
}
|
|
2315
|
+
<textarea
|
|
2316
|
+
matInput
|
|
2317
|
+
[placeholder]="placeholder()"
|
|
2318
|
+
[disabled]="disabled()"
|
|
2319
|
+
[readonly]="readonly()"
|
|
2320
|
+
[rows]="rows()"
|
|
2321
|
+
[attr.maxlength]="maxLength() ?? null"
|
|
2322
|
+
[value]="value()"
|
|
2323
|
+
(input)="onInput($event)"
|
|
2324
|
+
(blur)="mfBlur.emit()"
|
|
2325
|
+
></textarea>
|
|
2326
|
+
@if (hint()) {
|
|
2327
|
+
<mat-hint>{{ hint() }}</mat-hint>
|
|
2328
|
+
}
|
|
2329
|
+
@if (maxLength()) {
|
|
2330
|
+
<mat-hint align="end">{{ currentLength() }} / {{ maxLength() }}</mat-hint>
|
|
2331
|
+
}
|
|
2332
|
+
</mat-form-field>
|
|
2333
|
+
`, isInline: true, styles: [":host{display:block}.mf-textarea.mat-mdc-form-field{font-family:var(--mf-font-base)!important;width:100%}.mf-textarea textarea.mat-mdc-input-element{font-family:var(--mf-font-base)!important;line-height:var(--mf-leading-normal)!important}.mf-textarea .mdc-notched-outline__leading,.mf-textarea .mdc-notched-outline__notch,.mf-textarea .mdc-notched-outline__trailing{border-color:var(--mf-color-border)!important}.mf-textarea.mat-mdc-form-field.mat-focused .mdc-notched-outline__leading,.mf-textarea.mat-mdc-form-field.mat-focused .mdc-notched-outline__notch,.mf-textarea.mat-mdc-form-field.mat-focused .mdc-notched-outline__trailing{border-color:var(--mf-color-brand)!important}.mf-textarea .mdc-notched-outline{border-radius:var(--mf-radius-md)!important}.mf-textarea--sm textarea.mat-mdc-input-element{font-size:var(--mf-text-sm)!important}.mf-textarea--md textarea.mat-mdc-input-element{font-size:var(--mf-text-base)!important}.mf-textarea--lg textarea.mat-mdc-input-element{font-size:var(--mf-text-lg)!important}.mf-textarea--resize-none textarea{resize:none}.mf-textarea--resize-vertical textarea{resize:vertical}.mf-textarea--resize-horizontal textarea{resize:horizontal}.mf-textarea--resize-both textarea{resize:both}\n"], dependencies: [{ kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i1$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1$3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1$3.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "ngmodule", type: MatFormFieldModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2334
|
+
}
|
|
2335
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfTextareaComponent, decorators: [{
|
|
2336
|
+
type: Component,
|
|
2337
|
+
args: [{ selector: 'mf-textarea', imports: [MatInputModule, MatFormFieldModule], template: `
|
|
2338
|
+
<mat-form-field [appearance]="'outline'" [class]="hostClasses()">
|
|
2339
|
+
@if (label()) {
|
|
2340
|
+
<mat-label>{{ label() }}</mat-label>
|
|
2341
|
+
}
|
|
2342
|
+
<textarea
|
|
2343
|
+
matInput
|
|
2344
|
+
[placeholder]="placeholder()"
|
|
2345
|
+
[disabled]="disabled()"
|
|
2346
|
+
[readonly]="readonly()"
|
|
2347
|
+
[rows]="rows()"
|
|
2348
|
+
[attr.maxlength]="maxLength() ?? null"
|
|
2349
|
+
[value]="value()"
|
|
2350
|
+
(input)="onInput($event)"
|
|
2351
|
+
(blur)="mfBlur.emit()"
|
|
2352
|
+
></textarea>
|
|
2353
|
+
@if (hint()) {
|
|
2354
|
+
<mat-hint>{{ hint() }}</mat-hint>
|
|
2355
|
+
}
|
|
2356
|
+
@if (maxLength()) {
|
|
2357
|
+
<mat-hint align="end">{{ currentLength() }} / {{ maxLength() }}</mat-hint>
|
|
2358
|
+
}
|
|
2359
|
+
</mat-form-field>
|
|
2360
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.mf-textarea.mat-mdc-form-field{font-family:var(--mf-font-base)!important;width:100%}.mf-textarea textarea.mat-mdc-input-element{font-family:var(--mf-font-base)!important;line-height:var(--mf-leading-normal)!important}.mf-textarea .mdc-notched-outline__leading,.mf-textarea .mdc-notched-outline__notch,.mf-textarea .mdc-notched-outline__trailing{border-color:var(--mf-color-border)!important}.mf-textarea.mat-mdc-form-field.mat-focused .mdc-notched-outline__leading,.mf-textarea.mat-mdc-form-field.mat-focused .mdc-notched-outline__notch,.mf-textarea.mat-mdc-form-field.mat-focused .mdc-notched-outline__trailing{border-color:var(--mf-color-brand)!important}.mf-textarea .mdc-notched-outline{border-radius:var(--mf-radius-md)!important}.mf-textarea--sm textarea.mat-mdc-input-element{font-size:var(--mf-text-sm)!important}.mf-textarea--md textarea.mat-mdc-input-element{font-size:var(--mf-text-base)!important}.mf-textarea--lg textarea.mat-mdc-input-element{font-size:var(--mf-text-lg)!important}.mf-textarea--resize-none textarea{resize:none}.mf-textarea--resize-vertical textarea{resize:vertical}.mf-textarea--resize-horizontal textarea{resize:horizontal}.mf-textarea--resize-both textarea{resize:both}\n"] }]
|
|
2361
|
+
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], rows: [{ type: i0.Input, args: [{ isSignal: true, alias: "rows", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], maxLength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLength", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], resize: [{ type: i0.Input, args: [{ isSignal: true, alias: "resize", required: false }] }], mfInput: [{ type: i0.Output, args: ["mfInput"] }], mfBlur: [{ type: i0.Output, args: ["mfBlur"] }] } });
|
|
2362
|
+
|
|
2363
|
+
/**
|
|
2364
|
+
* Toolbar de la librería ng-comps.
|
|
2365
|
+
* Envuelve Angular Material `mat-toolbar` y expone una API uniforme
|
|
2366
|
+
* con look and feel de marca. Usa content projection para acciones.
|
|
2367
|
+
*/
|
|
2368
|
+
class MfToolbarComponent {
|
|
2369
|
+
/** Título que se muestra en la toolbar */
|
|
2370
|
+
title = input(undefined, ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
2371
|
+
/** Variante visual */
|
|
2372
|
+
variant = input('surface', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
2373
|
+
/** Muestra borde inferior */
|
|
2374
|
+
bordered = input(true, ...(ngDevMode ? [{ debugName: "bordered" }] : /* istanbul ignore next */ []));
|
|
2375
|
+
/** Toolbar fija en la parte superior */
|
|
2376
|
+
sticky = input(false, ...(ngDevMode ? [{ debugName: "sticky" }] : /* istanbul ignore next */ []));
|
|
2377
|
+
/** Elevación sutil */
|
|
2378
|
+
elevated = input(false, ...(ngDevMode ? [{ debugName: "elevated" }] : /* istanbul ignore next */ []));
|
|
2379
|
+
hostClasses = computed(() => {
|
|
2380
|
+
const classes = ['mf-toolbar', `mf-toolbar--${this.variant()}`];
|
|
2381
|
+
if (this.bordered())
|
|
2382
|
+
classes.push('mf-toolbar--bordered');
|
|
2383
|
+
if (this.sticky())
|
|
2384
|
+
classes.push('mf-toolbar--sticky');
|
|
2385
|
+
if (this.elevated())
|
|
2386
|
+
classes.push('mf-toolbar--elevated');
|
|
2387
|
+
return classes.join(' ');
|
|
2388
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
2389
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2390
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MfToolbarComponent, isStandalone: true, selector: "mf-toolbar", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, bordered: { classPropertyName: "bordered", publicName: "bordered", isSignal: true, isRequired: false, transformFunction: null }, sticky: { classPropertyName: "sticky", publicName: "sticky", isSignal: true, isRequired: false, transformFunction: null }, elevated: { classPropertyName: "elevated", publicName: "elevated", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
2391
|
+
<mat-toolbar [class]="hostClasses()">
|
|
2392
|
+
<div class="mf-toolbar__start">
|
|
2393
|
+
@if (title()) {
|
|
2394
|
+
<span class="mf-toolbar__title">{{ title() }}</span>
|
|
2395
|
+
}
|
|
2396
|
+
<ng-content select="[mfToolbarStart]" />
|
|
2397
|
+
</div>
|
|
2398
|
+
<div class="mf-toolbar__spacer"></div>
|
|
2399
|
+
<div class="mf-toolbar__end">
|
|
2400
|
+
<ng-content select="[mfToolbarEnd]" />
|
|
2401
|
+
<ng-content />
|
|
2402
|
+
</div>
|
|
2403
|
+
</mat-toolbar>
|
|
2404
|
+
`, isInline: true, styles: [":host{display:block}.mf-toolbar.mat-toolbar{font-family:var(--mf-font-base)!important;padding:0 var(--mf-space-6)!important;min-height:56px!important;display:flex!important;align-items:center!important;transition:background-color var(--mf-duration-base) var(--mf-ease-standard),box-shadow var(--mf-duration-base) var(--mf-ease-standard)}.mf-toolbar--surface.mat-toolbar{background-color:var(--mf-color-surface)!important;color:var(--mf-color-on-surface)!important}.mf-toolbar--brand.mat-toolbar{background-color:var(--mf-color-brand)!important;color:var(--mf-color-on-brand)!important}.mf-toolbar--transparent.mat-toolbar{background-color:transparent!important;color:var(--mf-color-on-surface)!important}.mf-toolbar--bordered.mat-toolbar{border-bottom:1px solid var(--mf-color-border)}.mf-toolbar--brand.mf-toolbar--bordered.mat-toolbar{border-bottom-color:#ffffff26}.mf-toolbar--sticky.mat-toolbar{position:sticky;top:0;z-index:1000}.mf-toolbar--elevated.mat-toolbar{box-shadow:var(--mf-shadow-sm)!important}.mf-toolbar__start{display:flex;align-items:center;gap:var(--mf-space-3)}.mf-toolbar__spacer{flex:1}.mf-toolbar__end{display:flex;align-items:center;gap:var(--mf-space-2)}.mf-toolbar__title{font-family:var(--mf-font-display)!important;font-size:var(--mf-text-lg)!important;font-weight:var(--mf-weight-bold)!important;letter-spacing:-.01em}\n"], dependencies: [{ kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i1$l.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2405
|
+
}
|
|
2406
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfToolbarComponent, decorators: [{
|
|
2407
|
+
type: Component,
|
|
2408
|
+
args: [{ selector: 'mf-toolbar', imports: [MatToolbarModule], template: `
|
|
2409
|
+
<mat-toolbar [class]="hostClasses()">
|
|
2410
|
+
<div class="mf-toolbar__start">
|
|
2411
|
+
@if (title()) {
|
|
2412
|
+
<span class="mf-toolbar__title">{{ title() }}</span>
|
|
2413
|
+
}
|
|
2414
|
+
<ng-content select="[mfToolbarStart]" />
|
|
2415
|
+
</div>
|
|
2416
|
+
<div class="mf-toolbar__spacer"></div>
|
|
2417
|
+
<div class="mf-toolbar__end">
|
|
2418
|
+
<ng-content select="[mfToolbarEnd]" />
|
|
2419
|
+
<ng-content />
|
|
2420
|
+
</div>
|
|
2421
|
+
</mat-toolbar>
|
|
2422
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.mf-toolbar.mat-toolbar{font-family:var(--mf-font-base)!important;padding:0 var(--mf-space-6)!important;min-height:56px!important;display:flex!important;align-items:center!important;transition:background-color var(--mf-duration-base) var(--mf-ease-standard),box-shadow var(--mf-duration-base) var(--mf-ease-standard)}.mf-toolbar--surface.mat-toolbar{background-color:var(--mf-color-surface)!important;color:var(--mf-color-on-surface)!important}.mf-toolbar--brand.mat-toolbar{background-color:var(--mf-color-brand)!important;color:var(--mf-color-on-brand)!important}.mf-toolbar--transparent.mat-toolbar{background-color:transparent!important;color:var(--mf-color-on-surface)!important}.mf-toolbar--bordered.mat-toolbar{border-bottom:1px solid var(--mf-color-border)}.mf-toolbar--brand.mf-toolbar--bordered.mat-toolbar{border-bottom-color:#ffffff26}.mf-toolbar--sticky.mat-toolbar{position:sticky;top:0;z-index:1000}.mf-toolbar--elevated.mat-toolbar{box-shadow:var(--mf-shadow-sm)!important}.mf-toolbar__start{display:flex;align-items:center;gap:var(--mf-space-3)}.mf-toolbar__spacer{flex:1}.mf-toolbar__end{display:flex;align-items:center;gap:var(--mf-space-2)}.mf-toolbar__title{font-family:var(--mf-font-display)!important;font-size:var(--mf-text-lg)!important;font-weight:var(--mf-weight-bold)!important;letter-spacing:-.01em}\n"] }]
|
|
2423
|
+
}], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], bordered: [{ type: i0.Input, args: [{ isSignal: true, alias: "bordered", required: false }] }], sticky: [{ type: i0.Input, args: [{ isSignal: true, alias: "sticky", required: false }] }], elevated: [{ type: i0.Input, args: [{ isSignal: true, alias: "elevated", required: false }] }] } });
|
|
2424
|
+
|
|
2425
|
+
/**
|
|
2426
|
+
* Tooltip de la librería ng-comps.
|
|
2427
|
+
* Envuelve Angular Material `matTooltip` y expone una API uniforme
|
|
2428
|
+
* con look and feel de marca.
|
|
2429
|
+
*/
|
|
2430
|
+
class MfTooltipComponent {
|
|
2431
|
+
/** Texto del tooltip */
|
|
2432
|
+
text = input.required(...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
|
|
2433
|
+
/** Posición del tooltip */
|
|
2434
|
+
position = input('above', ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
|
|
2435
|
+
/** Deshabilitado */
|
|
2436
|
+
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
2437
|
+
/** Delay para mostrar (ms) */
|
|
2438
|
+
showDelay = input(200, ...(ngDevMode ? [{ debugName: "showDelay" }] : /* istanbul ignore next */ []));
|
|
2439
|
+
/** Delay para ocultar (ms) */
|
|
2440
|
+
hideDelay = input(0, ...(ngDevMode ? [{ debugName: "hideDelay" }] : /* istanbul ignore next */ []));
|
|
2441
|
+
hostClasses = computed(() => {
|
|
2442
|
+
return ['mf-tooltip', `mf-tooltip--${this.position()}`].join(' ');
|
|
2443
|
+
}, ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
2444
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfTooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2445
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.4", type: MfTooltipComponent, isStandalone: true, selector: "mf-tooltip", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, showDelay: { classPropertyName: "showDelay", publicName: "showDelay", isSignal: true, isRequired: false, transformFunction: null }, hideDelay: { classPropertyName: "hideDelay", publicName: "hideDelay", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
2446
|
+
<span
|
|
2447
|
+
[matTooltip]="text()"
|
|
2448
|
+
[matTooltipPosition]="position()"
|
|
2449
|
+
[matTooltipDisabled]="disabled()"
|
|
2450
|
+
[matTooltipShowDelay]="showDelay()"
|
|
2451
|
+
[matTooltipHideDelay]="hideDelay()"
|
|
2452
|
+
[class]="hostClasses()"
|
|
2453
|
+
>
|
|
2454
|
+
<ng-content />
|
|
2455
|
+
</span>
|
|
2456
|
+
`, isInline: true, styles: [":host{display:inline-block}.mf-tooltip{cursor:default}\n"], dependencies: [{ kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1$m.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2457
|
+
}
|
|
2458
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MfTooltipComponent, decorators: [{
|
|
2459
|
+
type: Component,
|
|
2460
|
+
args: [{ selector: 'mf-tooltip', imports: [MatTooltipModule], template: `
|
|
2461
|
+
<span
|
|
2462
|
+
[matTooltip]="text()"
|
|
2463
|
+
[matTooltipPosition]="position()"
|
|
2464
|
+
[matTooltipDisabled]="disabled()"
|
|
2465
|
+
[matTooltipShowDelay]="showDelay()"
|
|
2466
|
+
[matTooltipHideDelay]="hideDelay()"
|
|
2467
|
+
[class]="hostClasses()"
|
|
2468
|
+
>
|
|
2469
|
+
<ng-content />
|
|
2470
|
+
</span>
|
|
2471
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:inline-block}.mf-tooltip{cursor:default}\n"] }]
|
|
2472
|
+
}], propDecorators: { text: [{ type: i0.Input, args: [{ isSignal: true, alias: "text", required: true }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], showDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "showDelay", required: false }] }], hideDelay: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideDelay", required: false }] }] } });
|
|
2473
|
+
|
|
2474
|
+
/**
|
|
2475
|
+
* Generated bundle index. Do not edit.
|
|
2476
|
+
*/
|
|
2477
|
+
|
|
2478
|
+
export { MfAccordionComponent, MfAlertComponent, MfAutocompleteComponent, MfAvatarComponent, MfBadgeComponent, MfBreadcrumbComponent, MfButtonComponent, MfCardComponent, MfCheckboxComponent, MfChipComponent, MfDatepickerComponent, MfDialogComponent, MfDividerComponent, MfFormFieldComponent, MfGridListComponent, MfIconComponent, MfInputComponent, MfMenuComponent, MfPaginatorComponent, MfProgressBarComponent, MfProgressSpinnerComponent, MfRadioButtonComponent, MfSelectComponent, MfSidenavComponent, MfSlideToggleComponent, MfSnackbarService, MfTableComponent, MfTabsComponent, MfTextareaComponent, MfToolbarComponent, MfTooltipComponent };
|
|
2479
|
+
//# sourceMappingURL=ng-comps.mjs.map
|