@neural-ui/core 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/neural-ui-core.mjs +271 -271
- package/fesm2022/neural-ui-core.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/_tokens.scss +7 -7
- package/types/neural-ui-core.d.ts +304 -304
|
@@ -149,9 +149,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
149
149
|
* toast.error('Ha ocurrido un error', { title: 'Error', duration: 8000 });
|
|
150
150
|
*/
|
|
151
151
|
class NeuToastService {
|
|
152
|
-
/** Lista reactiva de toasts activos */
|
|
152
|
+
/** Lista reactiva de toasts activos / Reactive list of active toasts */
|
|
153
153
|
toasts = signal([], ...(ngDevMode ? [{ debugName: "toasts" }] : /* istanbul ignore next */ []));
|
|
154
|
-
/** Posición del contenedor de toasts */
|
|
154
|
+
/** Posición del contenedor de toasts / Toast container position */
|
|
155
155
|
position = signal('top-right', ...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
|
|
156
156
|
setPosition(position) {
|
|
157
157
|
this.position.set(position);
|
|
@@ -213,7 +213,7 @@ class NeuCheckboxComponent {
|
|
|
213
213
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
214
214
|
_id = `neu-checkbox-${_neuCheckboxIdSeq++}`;
|
|
215
215
|
_checked = signal(false, ...(ngDevMode ? [{ debugName: "_checked" }] : /* istanbul ignore next */ []));
|
|
216
|
-
/** Estado disabled interno — combina el input `disabled` con el CVA setDisabledState */
|
|
216
|
+
/** Estado disabled interno — combina el input `disabled` con el CVA setDisabledState / Internal disabled state — combines the `disabled` input with CVA setDisabledState */
|
|
217
217
|
_cvaDisabled = signal(false, ...(ngDevMode ? [{ debugName: "_cvaDisabled" }] : /* istanbul ignore next */ []));
|
|
218
218
|
_isDisabled = computed(() => this.disabled() || this._cvaDisabled(), ...(ngDevMode ? [{ debugName: "_isDisabled" }] : /* istanbul ignore next */ []));
|
|
219
219
|
_onChange = () => { };
|
|
@@ -329,29 +329,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
329
329
|
let _neuDateInputIdSeq = 0;
|
|
330
330
|
class NeuDateInputComponent {
|
|
331
331
|
el = inject(ElementRef);
|
|
332
|
-
/** Tipo: date | time | datetime-local */
|
|
332
|
+
/** Tipo: date | time | datetime-local / Type: date | time | datetime-local */
|
|
333
333
|
type = input('date', ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
|
|
334
|
-
/** Etiqueta del campo */
|
|
334
|
+
/** Etiqueta del campo / Field label */
|
|
335
335
|
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
336
|
-
/** Texto de ayuda */
|
|
336
|
+
/** Texto de ayuda / Help text */
|
|
337
337
|
hint = input('', ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
|
|
338
|
-
/** Mensaje de error */
|
|
338
|
+
/** Mensaje de error / Error message */
|
|
339
339
|
errorMessage = input('', ...(ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []));
|
|
340
|
-
/** Deshabilita el campo */
|
|
340
|
+
/** Deshabilita el campo / Disables the field */
|
|
341
341
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
342
|
-
/** Solo lectura */
|
|
342
|
+
/** Solo lectura / Read only */
|
|
343
343
|
readonly = input(false, ...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
|
|
344
|
-
/** Nombre del campo (formularios nativos) */
|
|
344
|
+
/** Nombre del campo (formularios nativos) / Field name (native forms) */
|
|
345
345
|
name = input('', ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
346
|
-
/** ID accesible */
|
|
346
|
+
/** ID accesible / Accessible ID */
|
|
347
347
|
inputId = input('', ...(ngDevMode ? [{ debugName: "inputId" }] : /* istanbul ignore next */ []));
|
|
348
|
-
/** Requerido */
|
|
348
|
+
/** Requerido / Required */
|
|
349
349
|
required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
|
|
350
|
-
/** Mínimo (no implementado visualmente en v1) */
|
|
350
|
+
/** Mínimo (no implementado visualmente en v1) / Minimum (not visually implemented in v1) */
|
|
351
351
|
min = input(null, ...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
352
|
-
/** Máximo (no implementado visualmente en v1) */
|
|
352
|
+
/** Máximo (no implementado visualmente en v1) / Maximum (not visually implemented in v1) */
|
|
353
353
|
max = input(null, ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
354
|
-
/** Paso */
|
|
354
|
+
/** Paso / Step */
|
|
355
355
|
step = input(null, ...(ngDevMode ? [{ debugName: "step" }] : /* istanbul ignore next */ []));
|
|
356
356
|
// ── Estado ──────────────────────────────────────────────
|
|
357
357
|
_id = `neu-date-input-${++_neuDateInputIdSeq}`;
|
|
@@ -1170,7 +1170,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
1170
1170
|
* <neu-icon name="lucideAlertCircle" size="1rem" />
|
|
1171
1171
|
*/
|
|
1172
1172
|
class NeuIconComponent {
|
|
1173
|
-
/** Nombre del icono registrado con provideIcons() */
|
|
1173
|
+
/** Nombre del icono registrado con provideIcons() / Icon name registered with provideIcons() */
|
|
1174
1174
|
name = input.required(...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
1175
1175
|
/**
|
|
1176
1176
|
* Grosor del trazo. Default '2' para estética fina y técnica.
|
|
@@ -1182,7 +1182,7 @@ class NeuIconComponent {
|
|
|
1182
1182
|
* Si no se especifica, usa la variable CSS `--neu-icon-size` (1.25rem por defecto).
|
|
1183
1183
|
*/
|
|
1184
1184
|
size = input('', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
1185
|
-
/** Tamaño resuelto: usa el input `size` o cae al token CSS. */
|
|
1185
|
+
/** Tamaño resuelto: usa el input `size` o cae al token CSS. / Resolved size: uses the `size` input or falls back to the CSS token. */
|
|
1186
1186
|
resolvedSize = computed(() => this.size() || 'var(--neu-icon-size, 1.25rem)', ...(ngDevMode ? [{ debugName: "resolvedSize" }] : /* istanbul ignore next */ []));
|
|
1187
1187
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: NeuIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1188
1188
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.7", type: NeuIconComponent, isStandalone: true, selector: "neu-icon", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: true, transformFunction: null }, strokeWidth: { classPropertyName: "strokeWidth", publicName: "strokeWidth", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.display": "\"inline-flex\"", "style.align-items": "\"center\"", "style.line-height": "\"1\"", "style.color": "\"inherit\"" }, classAttribute: "neu-icon" }, ngImport: i0, template: `<ng-icon [name]="name()" [size]="resolvedSize()" [strokeWidth]="strokeWidth()" />`, isInline: true, styles: [".neu-icon{color:inherit;vertical-align:middle;flex-shrink:0}\n"], dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
@@ -1198,7 +1198,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
1198
1198
|
}, template: `<ng-icon [name]="name()" [size]="resolvedSize()" [strokeWidth]="strokeWidth()" />`, styles: [".neu-icon{color:inherit;vertical-align:middle;flex-shrink:0}\n"] }]
|
|
1199
1199
|
}], propDecorators: { name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: true }] }], strokeWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "strokeWidth", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
|
|
1200
1200
|
|
|
1201
|
-
/** Contador global para IDs estables — seguro en SSR, predecible en hidratación */
|
|
1201
|
+
/** Contador global para IDs estables — seguro en SSR, predecible en hidratación / Global counter for stable IDs — SSR-safe, predictable on hydration */
|
|
1202
1202
|
let _neuInputIdSeq = 0;
|
|
1203
1203
|
/**
|
|
1204
1204
|
* NeuralUI Input Component
|
|
@@ -1213,47 +1213,47 @@ let _neuInputIdSeq = 0;
|
|
|
1213
1213
|
* <neu-input label="Correo" [formControl]="emailCtrl" [errorMessage]="emailError()" />
|
|
1214
1214
|
*/
|
|
1215
1215
|
class NeuInputComponent {
|
|
1216
|
-
/** Tipo de input HTML */
|
|
1216
|
+
/** Tipo de input HTML / HTML input type */
|
|
1217
1217
|
type = input('text', ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
|
|
1218
|
-
/** Texto del floating label */
|
|
1218
|
+
/** Texto del floating label / Floating label text */
|
|
1219
1219
|
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
1220
|
-
/** Placeholder visible cuando floatingLabel=false */
|
|
1220
|
+
/** Placeholder visible cuando floatingLabel=false / Visible placeholder when floatingLabel=false */
|
|
1221
1221
|
placeholder = input('', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
1222
|
-
/** Muestra el label como flotante (true) o estático encima del campo (false) */
|
|
1222
|
+
/** Muestra el label como flotante (true) o estático encima del campo (false) / Shows the label as floating (true) or static above the field (false) */
|
|
1223
1223
|
floatingLabel = input(true, ...(ngDevMode ? [{ debugName: "floatingLabel" }] : /* istanbul ignore next */ []));
|
|
1224
|
-
/** Hint de ayuda (visible cuando no hay error) */
|
|
1224
|
+
/** Hint de ayuda (visible cuando no hay error) / Help hint (visible when there is no error) */
|
|
1225
1225
|
hint = input('', ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
|
|
1226
|
-
/** Mensaje de error (activa el estado de error) */
|
|
1226
|
+
/** Mensaje de error (activa el estado de error) / Error message (activates the error state) */
|
|
1227
1227
|
errorMessage = input('', ...(ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []));
|
|
1228
|
-
/** Deshabilita el campo */
|
|
1228
|
+
/** Deshabilita el campo / Disables the field */
|
|
1229
1229
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
1230
|
-
/** Atributo autocomplete HTML */
|
|
1230
|
+
/** Atributo autocomplete HTML / HTML autocomplete attribute */
|
|
1231
1231
|
autocomplete = input('off', ...(ngDevMode ? [{ debugName: "autocomplete" }] : /* istanbul ignore next */ []));
|
|
1232
|
-
/** Muestra zona para icono al inicio */
|
|
1232
|
+
/** Muestra zona para icono al inicio / Shows icon slot at the start */
|
|
1233
1233
|
startIcon = input(false, ...(ngDevMode ? [{ debugName: "startIcon" }] : /* istanbul ignore next */ []));
|
|
1234
|
-
/** Muestra zona para icono al final */
|
|
1234
|
+
/** Muestra zona para icono al final / Shows icon slot at the end */
|
|
1235
1235
|
endIcon = input(false, ...(ngDevMode ? [{ debugName: "endIcon" }] : /* istanbul ignore next */ []));
|
|
1236
|
-
/** Nombre del icono lucide a renderizar dentro del campo */
|
|
1236
|
+
/** Nombre del icono lucide a renderizar dentro del campo / Lucide icon name to render inside the field */
|
|
1237
1237
|
icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
|
|
1238
|
-
/** Posición del icono cuando se usa `icon` */
|
|
1238
|
+
/** Posición del icono cuando se usa `icon` / Icon position when using `icon` */
|
|
1239
1239
|
iconPosition = input('left', ...(ngDevMode ? [{ debugName: "iconPosition" }] : /* istanbul ignore next */ []));
|
|
1240
|
-
/** ID accesible para el input — generado con contador estable (seguro en SSR) */
|
|
1240
|
+
/** ID accesible para el input — generado con contador estable (seguro en SSR) / Accessible ID for the input — generated with stable counter (SSR-safe) */
|
|
1241
1241
|
inputId = input(`neu-input-${++_neuInputIdSeq}`, ...(ngDevMode ? [{ debugName: "inputId" }] : /* istanbul ignore next */ []));
|
|
1242
|
-
/** Nombre del campo para formularios nativos */
|
|
1242
|
+
/** Nombre del campo para formularios nativos / Field name for native forms */
|
|
1243
1243
|
name = input('', ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
1244
|
-
/** Marca el campo como requerido */
|
|
1244
|
+
/** Marca el campo como requerido / Marks the field as required */
|
|
1245
1245
|
required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : /* istanbul ignore next */ []));
|
|
1246
|
-
/** Hace el campo de solo lectura */
|
|
1246
|
+
/** Hace el campo de solo lectura / Makes the field read-only */
|
|
1247
1247
|
readonly = input(false, ...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
|
|
1248
|
-
/** Longitud máxima de caracteres */
|
|
1248
|
+
/** Longitud máxima de caracteres / Maximum character length */
|
|
1249
1249
|
maxlength = input(null, ...(ngDevMode ? [{ debugName: "maxlength" }] : /* istanbul ignore next */ []));
|
|
1250
|
-
/** Longitud mínima de caracteres */
|
|
1250
|
+
/** Longitud mínima de caracteres / Minimum character length */
|
|
1251
1251
|
minlength = input(null, ...(ngDevMode ? [{ debugName: "minlength" }] : /* istanbul ignore next */ []));
|
|
1252
|
-
/** Valor mínimo (para type=number/date) */
|
|
1252
|
+
/** Valor mínimo (para type=number/date) / Minimum value (for type=number/date) */
|
|
1253
1253
|
min = input(null, ...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
1254
|
-
/** Valor máximo (para type=number/date) */
|
|
1254
|
+
/** Valor máximo (para type=number/date) / Maximum value (for type=number/date) */
|
|
1255
1255
|
max = input(null, ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
1256
|
-
/** Patrón de validación HTML5 */
|
|
1256
|
+
/** Patrón de validación HTML5 / HTML5 validation pattern */
|
|
1257
1257
|
pattern = input(null, ...(ngDevMode ? [{ debugName: "pattern" }] : /* istanbul ignore next */ []));
|
|
1258
1258
|
// --- Estado interno reactivo ---
|
|
1259
1259
|
_value = signal('', ...(ngDevMode ? [{ debugName: "_value" }] : /* istanbul ignore next */ []));
|
|
@@ -1502,7 +1502,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
1502
1502
|
}], propDecorators: { type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], floatingLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "floatingLabel", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], errorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessage", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], autocomplete: [{ type: i0.Input, args: [{ isSignal: true, alias: "autocomplete", required: false }] }], startIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "startIcon", required: false }] }], endIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "endIcon", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], iconPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconPosition", required: false }] }], inputId: [{ type: i0.Input, args: [{ isSignal: true, alias: "inputId", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], maxlength: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxlength", required: false }] }], minlength: [{ type: i0.Input, args: [{ isSignal: true, alias: "minlength", required: false }] }], min: [{ type: i0.Input, args: [{ isSignal: true, alias: "min", required: false }] }], max: [{ type: i0.Input, args: [{ isSignal: true, alias: "max", required: false }] }], pattern: [{ type: i0.Input, args: [{ isSignal: true, alias: "pattern", required: false }] }] } });
|
|
1503
1503
|
|
|
1504
1504
|
/**
|
|
1505
|
-
* Directiva para personalizar el template de cada ítem del dropdown de Multiselect.
|
|
1505
|
+
* Directiva para personalizar el template de cada ítem del dropdown de Multiselect. / Directive to customize the template of each Multiselect dropdown item.
|
|
1506
1506
|
*
|
|
1507
1507
|
* Uso:
|
|
1508
1508
|
* ```html
|
|
@@ -1528,8 +1528,8 @@ let _neuMultiselectIdSeq = 0;
|
|
|
1528
1528
|
/**
|
|
1529
1529
|
* NeuralUI Multiselect Component
|
|
1530
1530
|
*
|
|
1531
|
-
* Dropdown de selección múltiple con chips, búsqueda integrada y soporte
|
|
1532
|
-
* completo para Angular Forms (ngModel y Reactive Forms).
|
|
1531
|
+
* Dropdown de selección múltiple con chips, búsqueda integrada y soporte / Multiple selection dropdown with chips, integrated search and support
|
|
1532
|
+
* completo para Angular Forms (ngModel y Reactive Forms). / for Angular Forms (ngModel and Reactive Forms).
|
|
1533
1533
|
*
|
|
1534
1534
|
* Uso:
|
|
1535
1535
|
* <neu-multiselect label="Tecnologías" [options]="opts" [(ngModel)]="selected" />
|
|
@@ -1553,31 +1553,31 @@ class NeuMultiselectComponent {
|
|
|
1553
1553
|
}
|
|
1554
1554
|
/** @internal */
|
|
1555
1555
|
_triggerId = `neu-multiselect-trigger-${_neuMultiselectIdSeq++}`;
|
|
1556
|
-
/** Template personalizado para cada opción del dropdown */
|
|
1556
|
+
/** Template personalizado para cada opción del dropdown / Custom template for each dropdown option */
|
|
1557
1557
|
itemTpl = contentChild(NeuMultiselectItemDirective, ...(ngDevMode ? [{ debugName: "itemTpl" }] : /* istanbul ignore next */ []));
|
|
1558
|
-
/** Opciones del dropdown */
|
|
1558
|
+
/** Opciones del dropdown / Dropdown options */
|
|
1559
1559
|
options = input([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
1560
|
-
/** Etiqueta del componente */
|
|
1560
|
+
/** Etiqueta del componente / Component label */
|
|
1561
1561
|
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
1562
|
-
/** Muestra el label como flotante dentro del campo (true) o estático encima (false) */
|
|
1562
|
+
/** Muestra el label como flotante dentro del campo (true) o estático encima (false) / Shows the label as floating inside the field (true) or static above (false) */
|
|
1563
1563
|
floatingLabel = input(false, ...(ngDevMode ? [{ debugName: "floatingLabel" }] : /* istanbul ignore next */ []));
|
|
1564
|
-
/** Placeholder cuando no hay selección */
|
|
1564
|
+
/** Placeholder cuando no hay selección / Placeholder when there is no selection */
|
|
1565
1565
|
placeholder = input('Seleccionar...', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
1566
|
-
/** Mensaje de error */
|
|
1566
|
+
/** Mensaje de error / Error message */
|
|
1567
1567
|
errorMessage = input('', ...(ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []));
|
|
1568
|
-
/** Deshabilita el componente */
|
|
1568
|
+
/** Deshabilita el componente / Disables the component */
|
|
1569
1569
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
1570
|
-
/** Activa input de búsqueda/filtro en el panel */
|
|
1570
|
+
/** Activa input de búsqueda/filtro en el panel / Activates the search/filter input in the panel */
|
|
1571
1571
|
searchable = input(false, ...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
|
|
1572
|
-
/** Placeholder del input de búsqueda */
|
|
1572
|
+
/** Placeholder del input de búsqueda / Search input placeholder */
|
|
1573
1573
|
searchPlaceholder = input('Buscar...', ...(ngDevMode ? [{ debugName: "searchPlaceholder" }] : /* istanbul ignore next */ []));
|
|
1574
|
-
/** Texto cuando no hay opciones tras filtrar */
|
|
1574
|
+
/** Texto cuando no hay opciones tras filtrar / Text when no options remain after filtering */
|
|
1575
1575
|
noResultsMessage = input('Sin resultados', ...(ngDevMode ? [{ debugName: "noResultsMessage" }] : /* istanbul ignore next */ []));
|
|
1576
|
-
/** Texto del botón de limpiar todas las selecciones */
|
|
1576
|
+
/** Texto del botón de limpiar todas las selecciones / Button text to clear all selections */
|
|
1577
1577
|
clearAllLabel = input('Limpiar todo', ...(ngDevMode ? [{ debugName: "clearAllLabel" }] : /* istanbul ignore next */ []));
|
|
1578
|
-
/** Muestra un botón × en el trigger para limpiar la selección de una vez */
|
|
1578
|
+
/** Muestra un botón × en el trigger para limpiar la selección de una vez / Shows a × button in the trigger to clear the selection at once */
|
|
1579
1579
|
clearable = input(false, ...(ngDevMode ? [{ debugName: "clearable" }] : /* istanbul ignore next */ []));
|
|
1580
|
-
/** Aria-label del botón clear que aparece en el trigger */
|
|
1580
|
+
/** Aria-label del botón clear que aparece en el trigger / Aria-label for the clear button shown in the trigger */
|
|
1581
1581
|
clearAriaLabel = input('Limpiar selección', ...(ngDevMode ? [{ debugName: "clearAriaLabel" }] : /* istanbul ignore next */ []));
|
|
1582
1582
|
/**
|
|
1583
1583
|
* Sincroniza los valores seleccionados con este query param de la URL.
|
|
@@ -1643,7 +1643,7 @@ class NeuMultiselectComponent {
|
|
|
1643
1643
|
});
|
|
1644
1644
|
}
|
|
1645
1645
|
}
|
|
1646
|
-
/** Abre el panel y mueve el foco al primer item */
|
|
1646
|
+
/** Abre el panel y mueve el foco al primer item / Opens the panel and moves focus to the first item */
|
|
1647
1647
|
onTriggerKey(event) {
|
|
1648
1648
|
event.preventDefault();
|
|
1649
1649
|
if (!this.isOpen()) {
|
|
@@ -1654,7 +1654,7 @@ class NeuMultiselectComponent {
|
|
|
1654
1654
|
});
|
|
1655
1655
|
}
|
|
1656
1656
|
}
|
|
1657
|
-
/** Navega entre opciones con flechas */
|
|
1657
|
+
/** Navega entre opciones con flechas / Navigates between options with arrows */
|
|
1658
1658
|
focusOptionByIndex(event, current, dir) {
|
|
1659
1659
|
event.preventDefault();
|
|
1660
1660
|
const opts = this.filteredOptions().filter((o) => !o.disabled);
|
|
@@ -1933,7 +1933,7 @@ class NeuMultiselectComponent {
|
|
|
1933
1933
|
@if (hasError()) {
|
|
1934
1934
|
<p class="neu-multiselect__error" role="alert">{{ errorMessage() }}</p>
|
|
1935
1935
|
}
|
|
1936
|
-
`, isInline: true, styles: [".neu-multiselect__static-label{display:block;font-size:var(--neu-text-sm);font-weight:500;color:var(--neu-text-muted);margin-bottom:var(--neu-space-2)}.neu-multiselect__label{position:absolute;left:var(--neu-space-3);top:50%;transform:translateY(-50%);font-size:var(--neu-text-base);color:var(--neu-text-muted);pointer-events:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - var(--neu-space-8));transition:top var(--neu-transition),font-size var(--neu-transition),color var(--neu-transition),transform var(--neu-transition),padding var(--neu-transition),background var(--neu-transition)}.neu-multiselect--open .neu-multiselect__label,.neu-multiselect--has-value .neu-multiselect__label{top:0;transform:translateY(-50%);font-size:12px;font-weight:600;letter-spacing:.01em;background:var(--neu-surface);padding:0 4px;left:calc(var(--neu-space-3) - 4px)}.neu-multiselect--open .neu-multiselect__label{color:var(--neu-primary)}.neu-multiselect--error .neu-multiselect__label{color:var(--neu-error)}.neu-multiselect--disabled .neu-multiselect__label{background:var(--neu-surface-2)}.neu-multiselect{position:relative;font-family:var(--neu-font-sans)}.neu-multiselect__trigger{display:flex;align-items:center;width:100%;min-height:48px;padding:var(--neu-space-2) var(--neu-space-3);padding-right:36px;background:var(--neu-surface);border:1.5px solid var(--neu-border);border-radius:var(--neu-radius);cursor:pointer;text-align:left;transition:border-color var(--neu-transition),box-shadow var(--neu-transition)}.neu-multiselect__trigger:hover:not(:disabled){border-color:var(--neu-border-hover)}.neu-multiselect__trigger:disabled{opacity:.6;cursor:not-allowed;background:var(--neu-surface-2)}.neu-multiselect--open .neu-multiselect__trigger{border-color:var(--neu-primary);box-shadow:0 0 0 3px #007aff1f}.neu-multiselect--error .neu-multiselect__trigger{border-color:var(--neu-error)}.neu-multiselect__chips{display:flex;flex-wrap:wrap;gap:var(--neu-space-1);flex:1;min-width:0}.neu-multiselect__placeholder{color:var(--neu-text-disabled);font-size:var(--neu-text-base);line-height:1.5}.neu-multiselect:not(.neu-multiselect--no-float):not(.neu-multiselect--open) .neu-multiselect__placeholder{visibility:hidden}.neu-multiselect__chip{display:inline-flex;align-items:center;gap:4px;padding:2px 4px 2px 8px;background:var(--neu-primary-soft, rgba(0, 122, 255, .1));color:var(--neu-primary);border-radius:var(--neu-radius-sm);font-size:var(--neu-text-xs);font-weight:500;max-width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-multiselect__chip-remove{display:flex;align-items:center;justify-content:center;width:16px;height:16px;padding:0;border:none;background:transparent;cursor:pointer;color:inherit;opacity:.7;border-radius:2px;transition:opacity var(--neu-transition);flex-shrink:0}.neu-multiselect__chip-remove:hover{opacity:1}.neu-multiselect__chip-remove svg{width:10px;height:10px}.neu-multiselect__clear{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;margin-right:2px;padding:0;border:none;background:transparent;color:var(--neu-text-muted);cursor:pointer;border-radius:var(--neu-radius-sm);flex-shrink:0;transition:color var(--neu-transition),background var(--neu-transition)}.neu-multiselect__clear svg{width:14px;height:14px}.neu-multiselect__clear:hover{color:var(--neu-text);background:var(--neu-surface-3)}.neu-multiselect__chevron{position:absolute;right:var(--neu-space-3);top:50%;transform:translateY(-50%);width:16px;height:16px;color:var(--neu-text-muted);pointer-events:none;transition:transform var(--neu-transition);flex-shrink:0}.neu-multiselect--open .neu-multiselect__chevron{transform:translateY(-50%) rotate(180deg)}.neu-multiselect__panel{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:200;background:var(--neu-surface);border:1.5px solid var(--neu-border);border-radius:var(--neu-radius);box-shadow:var(--neu-shadow-lg);overflow:hidden;max-height:280px;display:flex;flex-direction:column;animation:neu-multiselect-fade-in .12s ease}@keyframes neu-multiselect-fade-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.neu-multiselect__search{padding:var(--neu-space-2);border-bottom:1px solid var(--neu-border);flex-shrink:0}.neu-multiselect__search-input{width:100%;height:34px;padding:0 var(--neu-space-3);border:1.5px solid var(--neu-border);border-radius:var(--neu-radius-sm);background:var(--neu-bg);font-family:var(--neu-font-sans);font-size:var(--neu-text-sm);color:var(--neu-text);outline:none;transition:border-color var(--neu-transition),box-shadow var(--neu-transition)}.neu-multiselect__search-input:focus{border-color:var(--neu-primary);box-shadow:0 0 0 2px #007aff1f}.neu-multiselect__search-input::placeholder{color:var(--neu-text-disabled)}.neu-multiselect__options{flex:1;overflow-y:auto;min-height:0}.neu-multiselect__option{display:flex;align-items:center;gap:var(--neu-space-2);padding:10px var(--neu-space-3);cursor:pointer;font-size:var(--neu-text-sm);color:var(--neu-text);transition:background var(--neu-transition)}.neu-multiselect__option:hover:not(.neu-multiselect__option--disabled){background:var(--neu-surface-2)}.neu-multiselect__option--selected{background:var(--neu-primary-soft, rgba(0, 122, 255, .06));color:var(--neu-primary);font-weight:500}.neu-multiselect__option--disabled{opacity:.4;cursor:not-allowed}.neu-multiselect__checkbox{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:3px;border:1.5px solid var(--neu-border);background:var(--neu-bg);flex-shrink:0;transition:border-color var(--neu-transition),background var(--neu-transition)}.neu-multiselect__checkbox--checked{background:var(--neu-primary);border-color:var(--neu-primary);color:#fff}.neu-multiselect__checkbox-check{width:10px;height:8px;opacity:0;transform:scale(.6);transition:opacity .12s ease,transform .12s ease}.neu-multiselect__checkbox--checked .neu-multiselect__checkbox-check{opacity:1;transform:scale(1)}.neu-multiselect__empty{padding:var(--neu-space-4);text-align:center;font-size:var(--neu-text-sm);color:var(--neu-text-disabled);font-family:var(--neu-font-sans)}.neu-multiselect__footer{display:flex;align-items:center;justify-content:space-between;padding:var(--neu-space-2) var(--neu-space-3);border-top:1px solid var(--neu-border);background:var(--neu-surface);flex-shrink:0}.neu-multiselect__footer-count{font-size:var(--neu-text-xs);color:var(--neu-text-muted)}.neu-multiselect__footer-actions{display:flex;align-items:center;gap:var(--neu-space-2)}.neu-multiselect__footer-mode{background:none;border:1px solid var(--neu-border);border-radius:var(--neu-radius-sm);padding:2px 6px;font-size:var(--neu-text-xs);font-family:var(--neu-font-sans);color:var(--neu-text-muted);cursor:pointer;line-height:1.4}.neu-multiselect__footer-mode:hover{background:var(--neu-surface-2);color:var(--neu-text)}.neu-multiselect__footer-clear{background:none;border:none;padding:0;font-size:var(--neu-text-xs);font-family:var(--neu-font-sans);color:var(--neu-primary);cursor:pointer;font-weight:500}.neu-multiselect__footer-clear:hover{text-decoration:underline}.neu-multiselect__count-badge{display:inline-flex;align-items:center;padding:2px 10px;background:var(--neu-primary-100, rgba(14, 165, 233, .12));color:var(--neu-primary);border-radius:var(--neu-radius-full);font-size:var(--neu-text-sm);font-weight:500}.neu-multiselect__chip--overflow{background:var(--neu-surface-2);color:var(--neu-text-muted);border:1px dashed var(--neu-border);cursor:default;pointer-events:none}.neu-multiselect__error{margin-top:var(--neu-space-1);font-size:var(--neu-text-xs);color:var(--neu-error-text, var(--neu-error));font-family:var(--neu-font-sans)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1936
|
+
`, isInline: true, styles: [".neu-multiselect__static-label{display:block;font-size:var(--neu-text-sm);font-weight:500;color:var(--neu-text-muted);margin-bottom:var(--neu-space-2)}.neu-multiselect__label{position:absolute;left:var(--neu-space-3);top:50%;transform:translateY(-50%);font-size:var(--neu-text-base);color:var(--neu-text-muted);pointer-events:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - var(--neu-space-8));transition:top var(--neu-transition),font-size var(--neu-transition),color var(--neu-transition),transform var(--neu-transition),padding var(--neu-transition),background var(--neu-transition)}.neu-multiselect--open .neu-multiselect__label,.neu-multiselect--has-value .neu-multiselect__label{top:0;transform:translateY(-50%);font-size:12px;font-weight:600;letter-spacing:.01em;background:var(--neu-surface);padding:0 4px;left:calc(var(--neu-space-3) - 4px)}.neu-multiselect--open .neu-multiselect__label{color:var(--neu-primary)}.neu-multiselect--error .neu-multiselect__label{color:var(--neu-error)}.neu-multiselect--disabled .neu-multiselect__label{background:var(--neu-surface-2)}.neu-multiselect{position:relative;font-family:var(--neu-font-sans)}.neu-multiselect__trigger{display:flex;align-items:center;width:100%;min-height:48px;padding:var(--neu-space-2) var(--neu-space-3);padding-right:36px;background:var(--neu-surface);border:1.5px solid var(--neu-border);border-radius:var(--neu-radius);cursor:pointer;text-align:left;transition:border-color var(--neu-transition),box-shadow var(--neu-transition)}.neu-multiselect__trigger:hover:not(:disabled){border-color:var(--neu-border-hover)}.neu-multiselect__trigger:focus-visible{outline:none;border-color:var(--neu-primary);box-shadow:0 0 0 3px #007aff1f}.neu-multiselect__trigger:disabled{opacity:.6;cursor:not-allowed;background:var(--neu-surface-2)}.neu-multiselect--open .neu-multiselect__trigger{border-color:var(--neu-primary);box-shadow:0 0 0 3px #007aff1f}.neu-multiselect--error .neu-multiselect__trigger{border-color:var(--neu-error)}.neu-multiselect--error .neu-multiselect__trigger:focus-visible{box-shadow:0 0 0 3px #ef44441f}.neu-multiselect__chips{display:flex;flex-wrap:wrap;gap:var(--neu-space-1);flex:1;min-width:0}.neu-multiselect__placeholder{color:var(--neu-text-disabled);font-size:var(--neu-text-base);line-height:1.5}.neu-multiselect:not(.neu-multiselect--no-float):not(.neu-multiselect--open) .neu-multiselect__placeholder{visibility:hidden}.neu-multiselect__chip{display:inline-flex;align-items:center;gap:4px;padding:2px 4px 2px 8px;background:var(--neu-primary-soft, rgba(0, 122, 255, .1));color:var(--neu-primary);border-radius:var(--neu-radius-sm);font-size:var(--neu-text-xs);font-weight:500;max-width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-multiselect__chip-remove{display:flex;align-items:center;justify-content:center;width:16px;height:16px;padding:0;border:none;background:transparent;cursor:pointer;color:inherit;opacity:.7;border-radius:2px;transition:opacity var(--neu-transition);flex-shrink:0}.neu-multiselect__chip-remove:hover{opacity:1}.neu-multiselect__chip-remove svg{width:10px;height:10px}.neu-multiselect__clear{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;margin-right:2px;padding:0;border:none;background:transparent;color:var(--neu-text-muted);cursor:pointer;border-radius:var(--neu-radius-sm);flex-shrink:0;transition:color var(--neu-transition),background var(--neu-transition)}.neu-multiselect__clear svg{width:14px;height:14px}.neu-multiselect__clear:hover{color:var(--neu-text);background:var(--neu-surface-3)}.neu-multiselect__chevron{position:absolute;right:var(--neu-space-3);top:50%;transform:translateY(-50%);width:16px;height:16px;color:var(--neu-text-muted);pointer-events:none;transition:transform var(--neu-transition);flex-shrink:0}.neu-multiselect--open .neu-multiselect__chevron{transform:translateY(-50%) rotate(180deg)}.neu-multiselect__panel{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:200;background:var(--neu-surface);border:1.5px solid var(--neu-border);border-radius:var(--neu-radius);box-shadow:var(--neu-shadow-lg);overflow:hidden;max-height:280px;display:flex;flex-direction:column;animation:neu-multiselect-fade-in .12s ease}@keyframes neu-multiselect-fade-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.neu-multiselect__search{padding:var(--neu-space-2);border-bottom:1px solid var(--neu-border);flex-shrink:0}.neu-multiselect__search-input{width:100%;height:34px;padding:0 var(--neu-space-3);border:1.5px solid var(--neu-border);border-radius:var(--neu-radius-sm);background:var(--neu-bg);font-family:var(--neu-font-sans);font-size:var(--neu-text-sm);color:var(--neu-text);outline:none;transition:border-color var(--neu-transition),box-shadow var(--neu-transition)}.neu-multiselect__search-input:focus{border-color:var(--neu-primary);box-shadow:0 0 0 2px #007aff1f}.neu-multiselect__search-input::placeholder{color:var(--neu-text-disabled)}.neu-multiselect__options{flex:1;overflow-y:auto;min-height:0}.neu-multiselect__option{display:flex;align-items:center;gap:var(--neu-space-2);padding:10px var(--neu-space-3);cursor:pointer;font-size:var(--neu-text-sm);color:var(--neu-text);transition:background var(--neu-transition)}.neu-multiselect__option:hover:not(.neu-multiselect__option--disabled){background:var(--neu-surface-2)}.neu-multiselect__option--selected{background:var(--neu-primary-soft, rgba(0, 122, 255, .06));color:var(--neu-primary);font-weight:500}.neu-multiselect__option--disabled{opacity:.4;cursor:not-allowed}.neu-multiselect__checkbox{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:3px;border:1.5px solid var(--neu-border);background:var(--neu-bg);flex-shrink:0;transition:border-color var(--neu-transition),background var(--neu-transition)}.neu-multiselect__checkbox--checked{background:var(--neu-primary);border-color:var(--neu-primary);color:#fff}.neu-multiselect__checkbox-check{width:10px;height:8px;opacity:0;transform:scale(.6);transition:opacity .12s ease,transform .12s ease}.neu-multiselect__checkbox--checked .neu-multiselect__checkbox-check{opacity:1;transform:scale(1)}.neu-multiselect__empty{padding:var(--neu-space-4);text-align:center;font-size:var(--neu-text-sm);color:var(--neu-text-disabled);font-family:var(--neu-font-sans)}.neu-multiselect__footer{display:flex;align-items:center;justify-content:space-between;padding:var(--neu-space-2) var(--neu-space-3);border-top:1px solid var(--neu-border);background:var(--neu-surface);flex-shrink:0}.neu-multiselect__footer-count{font-size:var(--neu-text-xs);color:var(--neu-text-muted)}.neu-multiselect__footer-actions{display:flex;align-items:center;gap:var(--neu-space-2)}.neu-multiselect__footer-mode{background:none;border:1px solid var(--neu-border);border-radius:var(--neu-radius-sm);padding:2px 6px;font-size:var(--neu-text-xs);font-family:var(--neu-font-sans);color:var(--neu-text-muted);cursor:pointer;line-height:1.4}.neu-multiselect__footer-mode:hover{background:var(--neu-surface-2);color:var(--neu-text)}.neu-multiselect__footer-clear{background:none;border:none;padding:0;font-size:var(--neu-text-xs);font-family:var(--neu-font-sans);color:var(--neu-primary);cursor:pointer;font-weight:500}.neu-multiselect__footer-clear:hover{text-decoration:underline}.neu-multiselect__count-badge{display:inline-flex;align-items:center;padding:2px 10px;background:var(--neu-primary-100, rgba(14, 165, 233, .12));color:var(--neu-primary);border-radius:var(--neu-radius-full);font-size:var(--neu-text-sm);font-weight:500}.neu-multiselect__chip--overflow{background:var(--neu-surface-2);color:var(--neu-text-muted);border:1px dashed var(--neu-border);cursor:default;pointer-events:none}.neu-multiselect__error{margin-top:var(--neu-space-1);font-size:var(--neu-text-xs);color:var(--neu-error-text, var(--neu-error));font-family:var(--neu-font-sans)}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
1937
1937
|
}
|
|
1938
1938
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: NeuMultiselectComponent, decorators: [{
|
|
1939
1939
|
type: Component,
|
|
@@ -2158,10 +2158,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
2158
2158
|
@if (hasError()) {
|
|
2159
2159
|
<p class="neu-multiselect__error" role="alert">{{ errorMessage() }}</p>
|
|
2160
2160
|
}
|
|
2161
|
-
`, styles: [".neu-multiselect__static-label{display:block;font-size:var(--neu-text-sm);font-weight:500;color:var(--neu-text-muted);margin-bottom:var(--neu-space-2)}.neu-multiselect__label{position:absolute;left:var(--neu-space-3);top:50%;transform:translateY(-50%);font-size:var(--neu-text-base);color:var(--neu-text-muted);pointer-events:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - var(--neu-space-8));transition:top var(--neu-transition),font-size var(--neu-transition),color var(--neu-transition),transform var(--neu-transition),padding var(--neu-transition),background var(--neu-transition)}.neu-multiselect--open .neu-multiselect__label,.neu-multiselect--has-value .neu-multiselect__label{top:0;transform:translateY(-50%);font-size:12px;font-weight:600;letter-spacing:.01em;background:var(--neu-surface);padding:0 4px;left:calc(var(--neu-space-3) - 4px)}.neu-multiselect--open .neu-multiselect__label{color:var(--neu-primary)}.neu-multiselect--error .neu-multiselect__label{color:var(--neu-error)}.neu-multiselect--disabled .neu-multiselect__label{background:var(--neu-surface-2)}.neu-multiselect{position:relative;font-family:var(--neu-font-sans)}.neu-multiselect__trigger{display:flex;align-items:center;width:100%;min-height:48px;padding:var(--neu-space-2) var(--neu-space-3);padding-right:36px;background:var(--neu-surface);border:1.5px solid var(--neu-border);border-radius:var(--neu-radius);cursor:pointer;text-align:left;transition:border-color var(--neu-transition),box-shadow var(--neu-transition)}.neu-multiselect__trigger:hover:not(:disabled){border-color:var(--neu-border-hover)}.neu-multiselect__trigger:disabled{opacity:.6;cursor:not-allowed;background:var(--neu-surface-2)}.neu-multiselect--open .neu-multiselect__trigger{border-color:var(--neu-primary);box-shadow:0 0 0 3px #007aff1f}.neu-multiselect--error .neu-multiselect__trigger{border-color:var(--neu-error)}.neu-multiselect__chips{display:flex;flex-wrap:wrap;gap:var(--neu-space-1);flex:1;min-width:0}.neu-multiselect__placeholder{color:var(--neu-text-disabled);font-size:var(--neu-text-base);line-height:1.5}.neu-multiselect:not(.neu-multiselect--no-float):not(.neu-multiselect--open) .neu-multiselect__placeholder{visibility:hidden}.neu-multiselect__chip{display:inline-flex;align-items:center;gap:4px;padding:2px 4px 2px 8px;background:var(--neu-primary-soft, rgba(0, 122, 255, .1));color:var(--neu-primary);border-radius:var(--neu-radius-sm);font-size:var(--neu-text-xs);font-weight:500;max-width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-multiselect__chip-remove{display:flex;align-items:center;justify-content:center;width:16px;height:16px;padding:0;border:none;background:transparent;cursor:pointer;color:inherit;opacity:.7;border-radius:2px;transition:opacity var(--neu-transition);flex-shrink:0}.neu-multiselect__chip-remove:hover{opacity:1}.neu-multiselect__chip-remove svg{width:10px;height:10px}.neu-multiselect__clear{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;margin-right:2px;padding:0;border:none;background:transparent;color:var(--neu-text-muted);cursor:pointer;border-radius:var(--neu-radius-sm);flex-shrink:0;transition:color var(--neu-transition),background var(--neu-transition)}.neu-multiselect__clear svg{width:14px;height:14px}.neu-multiselect__clear:hover{color:var(--neu-text);background:var(--neu-surface-3)}.neu-multiselect__chevron{position:absolute;right:var(--neu-space-3);top:50%;transform:translateY(-50%);width:16px;height:16px;color:var(--neu-text-muted);pointer-events:none;transition:transform var(--neu-transition);flex-shrink:0}.neu-multiselect--open .neu-multiselect__chevron{transform:translateY(-50%) rotate(180deg)}.neu-multiselect__panel{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:200;background:var(--neu-surface);border:1.5px solid var(--neu-border);border-radius:var(--neu-radius);box-shadow:var(--neu-shadow-lg);overflow:hidden;max-height:280px;display:flex;flex-direction:column;animation:neu-multiselect-fade-in .12s ease}@keyframes neu-multiselect-fade-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.neu-multiselect__search{padding:var(--neu-space-2);border-bottom:1px solid var(--neu-border);flex-shrink:0}.neu-multiselect__search-input{width:100%;height:34px;padding:0 var(--neu-space-3);border:1.5px solid var(--neu-border);border-radius:var(--neu-radius-sm);background:var(--neu-bg);font-family:var(--neu-font-sans);font-size:var(--neu-text-sm);color:var(--neu-text);outline:none;transition:border-color var(--neu-transition),box-shadow var(--neu-transition)}.neu-multiselect__search-input:focus{border-color:var(--neu-primary);box-shadow:0 0 0 2px #007aff1f}.neu-multiselect__search-input::placeholder{color:var(--neu-text-disabled)}.neu-multiselect__options{flex:1;overflow-y:auto;min-height:0}.neu-multiselect__option{display:flex;align-items:center;gap:var(--neu-space-2);padding:10px var(--neu-space-3);cursor:pointer;font-size:var(--neu-text-sm);color:var(--neu-text);transition:background var(--neu-transition)}.neu-multiselect__option:hover:not(.neu-multiselect__option--disabled){background:var(--neu-surface-2)}.neu-multiselect__option--selected{background:var(--neu-primary-soft, rgba(0, 122, 255, .06));color:var(--neu-primary);font-weight:500}.neu-multiselect__option--disabled{opacity:.4;cursor:not-allowed}.neu-multiselect__checkbox{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:3px;border:1.5px solid var(--neu-border);background:var(--neu-bg);flex-shrink:0;transition:border-color var(--neu-transition),background var(--neu-transition)}.neu-multiselect__checkbox--checked{background:var(--neu-primary);border-color:var(--neu-primary);color:#fff}.neu-multiselect__checkbox-check{width:10px;height:8px;opacity:0;transform:scale(.6);transition:opacity .12s ease,transform .12s ease}.neu-multiselect__checkbox--checked .neu-multiselect__checkbox-check{opacity:1;transform:scale(1)}.neu-multiselect__empty{padding:var(--neu-space-4);text-align:center;font-size:var(--neu-text-sm);color:var(--neu-text-disabled);font-family:var(--neu-font-sans)}.neu-multiselect__footer{display:flex;align-items:center;justify-content:space-between;padding:var(--neu-space-2) var(--neu-space-3);border-top:1px solid var(--neu-border);background:var(--neu-surface);flex-shrink:0}.neu-multiselect__footer-count{font-size:var(--neu-text-xs);color:var(--neu-text-muted)}.neu-multiselect__footer-actions{display:flex;align-items:center;gap:var(--neu-space-2)}.neu-multiselect__footer-mode{background:none;border:1px solid var(--neu-border);border-radius:var(--neu-radius-sm);padding:2px 6px;font-size:var(--neu-text-xs);font-family:var(--neu-font-sans);color:var(--neu-text-muted);cursor:pointer;line-height:1.4}.neu-multiselect__footer-mode:hover{background:var(--neu-surface-2);color:var(--neu-text)}.neu-multiselect__footer-clear{background:none;border:none;padding:0;font-size:var(--neu-text-xs);font-family:var(--neu-font-sans);color:var(--neu-primary);cursor:pointer;font-weight:500}.neu-multiselect__footer-clear:hover{text-decoration:underline}.neu-multiselect__count-badge{display:inline-flex;align-items:center;padding:2px 10px;background:var(--neu-primary-100, rgba(14, 165, 233, .12));color:var(--neu-primary);border-radius:var(--neu-radius-full);font-size:var(--neu-text-sm);font-weight:500}.neu-multiselect__chip--overflow{background:var(--neu-surface-2);color:var(--neu-text-muted);border:1px dashed var(--neu-border);cursor:default;pointer-events:none}.neu-multiselect__error{margin-top:var(--neu-space-1);font-size:var(--neu-text-xs);color:var(--neu-error-text, var(--neu-error));font-family:var(--neu-font-sans)}\n"] }]
|
|
2161
|
+
`, styles: [".neu-multiselect__static-label{display:block;font-size:var(--neu-text-sm);font-weight:500;color:var(--neu-text-muted);margin-bottom:var(--neu-space-2)}.neu-multiselect__label{position:absolute;left:var(--neu-space-3);top:50%;transform:translateY(-50%);font-size:var(--neu-text-base);color:var(--neu-text-muted);pointer-events:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:calc(100% - var(--neu-space-8));transition:top var(--neu-transition),font-size var(--neu-transition),color var(--neu-transition),transform var(--neu-transition),padding var(--neu-transition),background var(--neu-transition)}.neu-multiselect--open .neu-multiselect__label,.neu-multiselect--has-value .neu-multiselect__label{top:0;transform:translateY(-50%);font-size:12px;font-weight:600;letter-spacing:.01em;background:var(--neu-surface);padding:0 4px;left:calc(var(--neu-space-3) - 4px)}.neu-multiselect--open .neu-multiselect__label{color:var(--neu-primary)}.neu-multiselect--error .neu-multiselect__label{color:var(--neu-error)}.neu-multiselect--disabled .neu-multiselect__label{background:var(--neu-surface-2)}.neu-multiselect{position:relative;font-family:var(--neu-font-sans)}.neu-multiselect__trigger{display:flex;align-items:center;width:100%;min-height:48px;padding:var(--neu-space-2) var(--neu-space-3);padding-right:36px;background:var(--neu-surface);border:1.5px solid var(--neu-border);border-radius:var(--neu-radius);cursor:pointer;text-align:left;transition:border-color var(--neu-transition),box-shadow var(--neu-transition)}.neu-multiselect__trigger:hover:not(:disabled){border-color:var(--neu-border-hover)}.neu-multiselect__trigger:focus-visible{outline:none;border-color:var(--neu-primary);box-shadow:0 0 0 3px #007aff1f}.neu-multiselect__trigger:disabled{opacity:.6;cursor:not-allowed;background:var(--neu-surface-2)}.neu-multiselect--open .neu-multiselect__trigger{border-color:var(--neu-primary);box-shadow:0 0 0 3px #007aff1f}.neu-multiselect--error .neu-multiselect__trigger{border-color:var(--neu-error)}.neu-multiselect--error .neu-multiselect__trigger:focus-visible{box-shadow:0 0 0 3px #ef44441f}.neu-multiselect__chips{display:flex;flex-wrap:wrap;gap:var(--neu-space-1);flex:1;min-width:0}.neu-multiselect__placeholder{color:var(--neu-text-disabled);font-size:var(--neu-text-base);line-height:1.5}.neu-multiselect:not(.neu-multiselect--no-float):not(.neu-multiselect--open) .neu-multiselect__placeholder{visibility:hidden}.neu-multiselect__chip{display:inline-flex;align-items:center;gap:4px;padding:2px 4px 2px 8px;background:var(--neu-primary-soft, rgba(0, 122, 255, .1));color:var(--neu-primary);border-radius:var(--neu-radius-sm);font-size:var(--neu-text-xs);font-weight:500;max-width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.neu-multiselect__chip-remove{display:flex;align-items:center;justify-content:center;width:16px;height:16px;padding:0;border:none;background:transparent;cursor:pointer;color:inherit;opacity:.7;border-radius:2px;transition:opacity var(--neu-transition);flex-shrink:0}.neu-multiselect__chip-remove:hover{opacity:1}.neu-multiselect__chip-remove svg{width:10px;height:10px}.neu-multiselect__clear{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;margin-right:2px;padding:0;border:none;background:transparent;color:var(--neu-text-muted);cursor:pointer;border-radius:var(--neu-radius-sm);flex-shrink:0;transition:color var(--neu-transition),background var(--neu-transition)}.neu-multiselect__clear svg{width:14px;height:14px}.neu-multiselect__clear:hover{color:var(--neu-text);background:var(--neu-surface-3)}.neu-multiselect__chevron{position:absolute;right:var(--neu-space-3);top:50%;transform:translateY(-50%);width:16px;height:16px;color:var(--neu-text-muted);pointer-events:none;transition:transform var(--neu-transition);flex-shrink:0}.neu-multiselect--open .neu-multiselect__chevron{transform:translateY(-50%) rotate(180deg)}.neu-multiselect__panel{position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:200;background:var(--neu-surface);border:1.5px solid var(--neu-border);border-radius:var(--neu-radius);box-shadow:var(--neu-shadow-lg);overflow:hidden;max-height:280px;display:flex;flex-direction:column;animation:neu-multiselect-fade-in .12s ease}@keyframes neu-multiselect-fade-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}.neu-multiselect__search{padding:var(--neu-space-2);border-bottom:1px solid var(--neu-border);flex-shrink:0}.neu-multiselect__search-input{width:100%;height:34px;padding:0 var(--neu-space-3);border:1.5px solid var(--neu-border);border-radius:var(--neu-radius-sm);background:var(--neu-bg);font-family:var(--neu-font-sans);font-size:var(--neu-text-sm);color:var(--neu-text);outline:none;transition:border-color var(--neu-transition),box-shadow var(--neu-transition)}.neu-multiselect__search-input:focus{border-color:var(--neu-primary);box-shadow:0 0 0 2px #007aff1f}.neu-multiselect__search-input::placeholder{color:var(--neu-text-disabled)}.neu-multiselect__options{flex:1;overflow-y:auto;min-height:0}.neu-multiselect__option{display:flex;align-items:center;gap:var(--neu-space-2);padding:10px var(--neu-space-3);cursor:pointer;font-size:var(--neu-text-sm);color:var(--neu-text);transition:background var(--neu-transition)}.neu-multiselect__option:hover:not(.neu-multiselect__option--disabled){background:var(--neu-surface-2)}.neu-multiselect__option--selected{background:var(--neu-primary-soft, rgba(0, 122, 255, .06));color:var(--neu-primary);font-weight:500}.neu-multiselect__option--disabled{opacity:.4;cursor:not-allowed}.neu-multiselect__checkbox{display:flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:3px;border:1.5px solid var(--neu-border);background:var(--neu-bg);flex-shrink:0;transition:border-color var(--neu-transition),background var(--neu-transition)}.neu-multiselect__checkbox--checked{background:var(--neu-primary);border-color:var(--neu-primary);color:#fff}.neu-multiselect__checkbox-check{width:10px;height:8px;opacity:0;transform:scale(.6);transition:opacity .12s ease,transform .12s ease}.neu-multiselect__checkbox--checked .neu-multiselect__checkbox-check{opacity:1;transform:scale(1)}.neu-multiselect__empty{padding:var(--neu-space-4);text-align:center;font-size:var(--neu-text-sm);color:var(--neu-text-disabled);font-family:var(--neu-font-sans)}.neu-multiselect__footer{display:flex;align-items:center;justify-content:space-between;padding:var(--neu-space-2) var(--neu-space-3);border-top:1px solid var(--neu-border);background:var(--neu-surface);flex-shrink:0}.neu-multiselect__footer-count{font-size:var(--neu-text-xs);color:var(--neu-text-muted)}.neu-multiselect__footer-actions{display:flex;align-items:center;gap:var(--neu-space-2)}.neu-multiselect__footer-mode{background:none;border:1px solid var(--neu-border);border-radius:var(--neu-radius-sm);padding:2px 6px;font-size:var(--neu-text-xs);font-family:var(--neu-font-sans);color:var(--neu-text-muted);cursor:pointer;line-height:1.4}.neu-multiselect__footer-mode:hover{background:var(--neu-surface-2);color:var(--neu-text)}.neu-multiselect__footer-clear{background:none;border:none;padding:0;font-size:var(--neu-text-xs);font-family:var(--neu-font-sans);color:var(--neu-primary);cursor:pointer;font-weight:500}.neu-multiselect__footer-clear:hover{text-decoration:underline}.neu-multiselect__count-badge{display:inline-flex;align-items:center;padding:2px 10px;background:var(--neu-primary-100, rgba(14, 165, 233, .12));color:var(--neu-primary);border-radius:var(--neu-radius-full);font-size:var(--neu-text-sm);font-weight:500}.neu-multiselect__chip--overflow{background:var(--neu-surface-2);color:var(--neu-text-muted);border:1px dashed var(--neu-border);cursor:default;pointer-events:none}.neu-multiselect__error{margin-top:var(--neu-space-1);font-size:var(--neu-text-xs);color:var(--neu-error-text, var(--neu-error));font-family:var(--neu-font-sans)}\n"] }]
|
|
2162
2162
|
}], ctorParameters: () => [], propDecorators: { itemTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => NeuMultiselectItemDirective), { isSignal: true }] }], options: [{ type: i0.Input, args: [{ isSignal: true, alias: "options", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], floatingLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "floatingLabel", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], errorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessage", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], searchable: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchable", required: false }] }], searchPlaceholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchPlaceholder", required: false }] }], noResultsMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "noResultsMessage", required: false }] }], clearAllLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearAllLabel", required: false }] }], clearable: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearable", required: false }] }], clearAriaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "clearAriaLabel", required: false }] }], urlParam: [{ type: i0.Input, args: [{ isSignal: true, alias: "urlParam", required: false }] }], selectionChange: [{ type: i0.Output, args: ["selectionChange"] }] } });
|
|
2163
2163
|
|
|
2164
|
-
/** Token para que neu-radio encuentre a su grupo padre */
|
|
2164
|
+
/** Token para que neu-radio encuentre a su grupo padre / Token for neu-radio to find its parent group */
|
|
2165
2165
|
const NEU_RADIO_GROUP = new InjectionToken('NEU_RADIO_GROUP');
|
|
2166
2166
|
/**
|
|
2167
2167
|
* NeuralUI Radio Group Component
|
|
@@ -2177,9 +2177,9 @@ const NEU_RADIO_GROUP = new InjectionToken('NEU_RADIO_GROUP');
|
|
|
2177
2177
|
let _neuRadioGroupIdSeq = 0;
|
|
2178
2178
|
class NeuRadioGroupComponent {
|
|
2179
2179
|
direction = input('column', ...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
|
|
2180
|
-
/** Etiqueta accesible del grupo (WCAG 4.1.2). Usar cuando no hay <legend> visible. */
|
|
2180
|
+
/** Etiqueta accesible del grupo (WCAG 4.1.2). Usar cuando no hay <legend> visible. / Accessible label for the group (WCAG 4.1.2). Use when there is no visible <legend>. */
|
|
2181
2181
|
ariaLabel = input('', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
2182
|
-
/** Nombre HTML compartido por todos los neu-radio hijos — garantiza la exclusión mutua nativa */
|
|
2182
|
+
/** Nombre HTML compartido por todos los neu-radio hijos — garantiza la exclusión mutua nativa / HTML name shared by all child neu-radio — guarantees native mutual exclusion */
|
|
2183
2183
|
_name = `neu-radio-group-${++_neuRadioGroupIdSeq}`;
|
|
2184
2184
|
_value = signal(null, ...(ngDevMode ? [{ debugName: "_value" }] : /* istanbul ignore next */ []));
|
|
2185
2185
|
_isDisabled = signal(false, ...(ngDevMode ? [{ debugName: "_isDisabled" }] : /* istanbul ignore next */ []));
|
|
@@ -2250,7 +2250,7 @@ class NeuRadioComponent {
|
|
|
2250
2250
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
2251
2251
|
group = inject(NEU_RADIO_GROUP);
|
|
2252
2252
|
_id = `neu-radio-${_neuRadioIdSeq++}`;
|
|
2253
|
-
/** Toma el nombre del grupo padre — así todos los radios del grupo comparten el mismo `name` nativo */
|
|
2253
|
+
/** Toma el nombre del grupo padre — así todos los radios del grupo comparten el mismo `name` nativo / Takes the parent group name — so all radios in the group share the same native `name` */
|
|
2254
2254
|
_groupName = this.group._name;
|
|
2255
2255
|
isChecked = computed(() => this.group._value() === this.value(), ...(ngDevMode ? [{ debugName: "isChecked" }] : /* istanbul ignore next */ []));
|
|
2256
2256
|
isDisabled = computed(() => this.disabled() || this.group._isDisabled(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
|
|
@@ -2396,31 +2396,31 @@ class NeuSelectComponent {
|
|
|
2396
2396
|
}
|
|
2397
2397
|
/** @internal — ID \u00fanico para asociar label con trigger */
|
|
2398
2398
|
_triggerId = `neu-select-trigger-${_neuSelectIdSeq++}`;
|
|
2399
|
-
/** Template personalizado para cada opción del dropdown */
|
|
2399
|
+
/** Template personalizado para cada opción del dropdown / Custom template for each dropdown option */
|
|
2400
2400
|
itemTpl = contentChild(NeuSelectItemDirective, ...(ngDevMode ? [{ debugName: "itemTpl" }] : /* istanbul ignore next */ []));
|
|
2401
|
-
/** Template personalizado para el valor seleccionado en el trigger */
|
|
2401
|
+
/** Template personalizado para el valor seleccionado en el trigger / Custom template for the selected value in the trigger */
|
|
2402
2402
|
selectedItemTpl = contentChild(NeuSelectSelectedDirective, ...(ngDevMode ? [{ debugName: "selectedItemTpl" }] : /* istanbul ignore next */ []));
|
|
2403
|
-
/** Opciones del dropdown */
|
|
2403
|
+
/** Opciones del dropdown / Dropdown options */
|
|
2404
2404
|
options = input([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
2405
|
-
/** Texto del floating label */
|
|
2405
|
+
/** Texto del floating label / Floating label text */
|
|
2406
2406
|
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
2407
|
-
/** Placeholder cuando no hay selección */
|
|
2407
|
+
/** Placeholder cuando no hay selección / Placeholder when there is no selection */
|
|
2408
2408
|
placeholder = input('Seleccionar...', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
2409
|
-
/** Mensaje de error */
|
|
2409
|
+
/** Mensaje de error / Error message */
|
|
2410
2410
|
errorMessage = input('', ...(ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []));
|
|
2411
|
-
/** Deshabilita el select */
|
|
2411
|
+
/** Deshabilita el select / Disables the select */
|
|
2412
2412
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
2413
|
-
/** Muestra el label como flotante (true) o como label estático encima (false, por defecto) */
|
|
2413
|
+
/** Muestra el label como flotante (true) o como label estático encima (false, por defecto) / Shows the label as floating (true) or static above (false, default) */
|
|
2414
2414
|
floatingLabel = input(false, ...(ngDevMode ? [{ debugName: "floatingLabel" }] : /* istanbul ignore next */ []));
|
|
2415
|
-
/** Activa input de búsqueda/filtro en el panel */
|
|
2415
|
+
/** Activa input de búsqueda/filtro en el panel / Activates the search/filter input in the panel */
|
|
2416
2416
|
searchable = input(false, ...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
|
|
2417
|
-
/** Placeholder del input de búsqueda */
|
|
2417
|
+
/** Placeholder del input de búsqueda / Search input placeholder */
|
|
2418
2418
|
searchPlaceholder = input('Buscar...', ...(ngDevMode ? [{ debugName: "searchPlaceholder" }] : /* istanbul ignore next */ []));
|
|
2419
|
-
/** Muestra un botón para limpiar la selección */
|
|
2419
|
+
/** Muestra un botón para limpiar la selección / Shows a button to clear the selection */
|
|
2420
2420
|
clearable = input(false, ...(ngDevMode ? [{ debugName: "clearable" }] : /* istanbul ignore next */ []));
|
|
2421
|
-
/** Texto cuando no hay opciones tras filtrar */
|
|
2421
|
+
/** Texto cuando no hay opciones tras filtrar / Text when no options remain after filtering */
|
|
2422
2422
|
noResultsMessage = input('Sin resultados', ...(ngDevMode ? [{ debugName: "noResultsMessage" }] : /* istanbul ignore next */ []));
|
|
2423
|
-
/** Aria-label del botón de limpiar */
|
|
2423
|
+
/** Aria-label del botón de limpiar / Aria-label for the clear button */
|
|
2424
2424
|
clearAriaLabel = input('Limpiar selección', ...(ngDevMode ? [{ debugName: "clearAriaLabel" }] : /* istanbul ignore next */ []));
|
|
2425
2425
|
/**
|
|
2426
2426
|
* Sincroniza el valor seleccionado con este query param de la URL.
|
|
@@ -2480,7 +2480,7 @@ class NeuSelectComponent {
|
|
|
2480
2480
|
this.searchQuery.set('');
|
|
2481
2481
|
this._onTouched();
|
|
2482
2482
|
}
|
|
2483
|
-
/** Abre el panel y navega con flechas desde el trigger */
|
|
2483
|
+
/** Abre el panel y navega con flechas desde el trigger / Opens the panel and navigates with arrows from the trigger */
|
|
2484
2484
|
onTriggerKey(event) {
|
|
2485
2485
|
event.preventDefault();
|
|
2486
2486
|
if (!this.isOpen()) {
|
|
@@ -2491,7 +2491,7 @@ class NeuSelectComponent {
|
|
|
2491
2491
|
});
|
|
2492
2492
|
}
|
|
2493
2493
|
}
|
|
2494
|
-
/** Navega entre opciones con flechas */
|
|
2494
|
+
/** Navega entre opciones con flechas / Navigates between options with arrows */
|
|
2495
2495
|
focusOptionByIndex(event, current, dir) {
|
|
2496
2496
|
event.preventDefault();
|
|
2497
2497
|
const opts = this.filteredOptions().filter((o) => !o.disabled);
|
|
@@ -2871,25 +2871,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
2871
2871
|
class NeuSliderComponent {
|
|
2872
2872
|
static _idCounter = 0;
|
|
2873
2873
|
sliderId = `neu-slider-${++NeuSliderComponent._idCounter}`;
|
|
2874
|
-
/** Valor actual */
|
|
2874
|
+
/** Valor actual / Current value */
|
|
2875
2875
|
value = input(0, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
2876
|
-
/** Valor mínimo */
|
|
2876
|
+
/** Valor mínimo / Minimum value */
|
|
2877
2877
|
min = input(0, ...(ngDevMode ? [{ debugName: "min" }] : /* istanbul ignore next */ []));
|
|
2878
|
-
/** Valor máximo */
|
|
2878
|
+
/** Valor máximo / Maximum value */
|
|
2879
2879
|
max = input(100, ...(ngDevMode ? [{ debugName: "max" }] : /* istanbul ignore next */ []));
|
|
2880
|
-
/** Paso */
|
|
2880
|
+
/** Paso / Step */
|
|
2881
2881
|
step = input(1, ...(ngDevMode ? [{ debugName: "step" }] : /* istanbul ignore next */ []));
|
|
2882
|
-
/** Etiqueta */
|
|
2882
|
+
/** Etiqueta / Label */
|
|
2883
2883
|
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
2884
|
-
/** Muestra el valor numerico */
|
|
2884
|
+
/** Muestra el valor numerico / Shows the numeric value */
|
|
2885
2885
|
showValue = input(true, ...(ngDevMode ? [{ debugName: "showValue" }] : /* istanbul ignore next */ []));
|
|
2886
|
-
/** Muestra min/mid/max bajo la barra */
|
|
2886
|
+
/** Muestra min/mid/max bajo la barra / Shows min/mid/max below the bar */
|
|
2887
2887
|
showTicks = input(false, ...(ngDevMode ? [{ debugName: "showTicks" }] : /* istanbul ignore next */ []));
|
|
2888
|
-
/** Unidad a mostrar junto al valor */
|
|
2888
|
+
/** Unidad a mostrar junto al valor / Unit to display next to the value */
|
|
2889
2889
|
unit = input('', ...(ngDevMode ? [{ debugName: "unit" }] : /* istanbul ignore next */ []));
|
|
2890
|
-
/** Deshabilitado */
|
|
2890
|
+
/** Deshabilitado / Disabled */
|
|
2891
2891
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
2892
|
-
/** Emite al mover el slider */
|
|
2892
|
+
/** Emite al mover el slider / Emits when the slider moves */
|
|
2893
2893
|
valueChange = output();
|
|
2894
2894
|
fillPercent = computed(() => {
|
|
2895
2895
|
const range = this.max() - this.min();
|
|
@@ -3011,7 +3011,7 @@ class NeuSwitchComponent {
|
|
|
3011
3011
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
3012
3012
|
_id = `neu-switch-${_neuSwitchIdSeq++}`;
|
|
3013
3013
|
_checked = signal(false, ...(ngDevMode ? [{ debugName: "_checked" }] : /* istanbul ignore next */ []));
|
|
3014
|
-
/** Estado disabled interno — combina el input `disabled` con el CVA setDisabledState */
|
|
3014
|
+
/** Estado disabled interno — combina el input `disabled` con el CVA setDisabledState / Internal disabled state — combines the `disabled` input with CVA setDisabledState */
|
|
3015
3015
|
_cvaDisabled = signal(false, ...(ngDevMode ? [{ debugName: "_cvaDisabled" }] : /* istanbul ignore next */ []));
|
|
3016
3016
|
_isDisabled = computed(() => this.disabled() || this._cvaDisabled(), ...(ngDevMode ? [{ debugName: "_isDisabled" }] : /* istanbul ignore next */ []));
|
|
3017
3017
|
_onChange = () => { };
|
|
@@ -3111,7 +3111,7 @@ class NeuTextareaComponent {
|
|
|
3111
3111
|
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
3112
3112
|
rows = input(3, ...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
3113
3113
|
autoResize = input(false, ...(ngDevMode ? [{ debugName: "autoResize" }] : /* istanbul ignore next */ []));
|
|
3114
|
-
/** Permite al usuario redimensionar el campo manualmente (por defecto: true) */
|
|
3114
|
+
/** Permite al usuario redimensionar el campo manualmente (por defecto: true) / Allows the user to manually resize the field (default: true) */
|
|
3115
3115
|
resizable = input(true, ...(ngDevMode ? [{ debugName: "resizable" }] : /* istanbul ignore next */ []));
|
|
3116
3116
|
errorMessage = input('', ...(ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []));
|
|
3117
3117
|
hint = input('', ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
|
|
@@ -3271,8 +3271,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
3271
3271
|
/**
|
|
3272
3272
|
* NeuralUI ToggleButtonGroup Component
|
|
3273
3273
|
*
|
|
3274
|
-
* Grupo de botones de selección (single o múltiple).
|
|
3275
|
-
* Equivalente técnicamente superior al SelectButton de PrimeNG.
|
|
3274
|
+
* Grupo de botones de selección (single o múltiple). / Selection button group (single or multiple).
|
|
3275
|
+
* Equivalente técnicamente superior al SelectButton de PrimeNG. / Technically superior equivalent to PrimeNG's SelectButton.
|
|
3276
3276
|
*
|
|
3277
3277
|
* Uso (single):
|
|
3278
3278
|
* <neu-toggle-button-group [options]="opts" [(ngModel)]="value" />
|
|
@@ -3281,7 +3281,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
3281
3281
|
* <neu-toggle-button-group [options]="opts" [multiple]="true" [(ngModel)]="values" />
|
|
3282
3282
|
*/
|
|
3283
3283
|
class NeuToggleButtonGroupComponent {
|
|
3284
|
-
/** Lista de opciones del grupo */
|
|
3284
|
+
/** Lista de opciones del grupo / Group option list */
|
|
3285
3285
|
options = input([], ...(ngDevMode ? [{ debugName: "options" }] : /* istanbul ignore next */ []));
|
|
3286
3286
|
/**
|
|
3287
3287
|
* Permite seleccionar múltiples opciones.
|
|
@@ -3289,11 +3289,11 @@ class NeuToggleButtonGroupComponent {
|
|
|
3289
3289
|
* - true: valor es `T[]`
|
|
3290
3290
|
*/
|
|
3291
3291
|
multiple = input(false, ...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
|
|
3292
|
-
/** Tamaño visual */
|
|
3292
|
+
/** Tamaño visual / Visual size */
|
|
3293
3293
|
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
3294
|
-
/** Deshabilita todo el grupo */
|
|
3294
|
+
/** Deshabilita todo el grupo / Disables the entire group */
|
|
3295
3295
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
3296
|
-
/** Emite el nuevo valor al cambiar (útil sin formControl) */
|
|
3296
|
+
/** Emite el nuevo valor al cambiar (útil sin formControl) / Emits the new value on change (useful without formControl) */
|
|
3297
3297
|
neuChange = output();
|
|
3298
3298
|
_value = signal(null, ...(ngDevMode ? [{ debugName: "_value" }] : /* istanbul ignore next */ []));
|
|
3299
3299
|
_isDisabled = signal(false, ...(ngDevMode ? [{ debugName: "_isDisabled" }] : /* istanbul ignore next */ []));
|
|
@@ -3435,9 +3435,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
3435
3435
|
* ];
|
|
3436
3436
|
*/
|
|
3437
3437
|
class NeuBreadcrumbComponent {
|
|
3438
|
-
/** Lista de ítems de navegación */
|
|
3438
|
+
/** Lista de ítems de navegación / Navigation item list */
|
|
3439
3439
|
items = input([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
3440
|
-
/** Separador personalizable */
|
|
3440
|
+
/** Separador personalizable / Customizable separator */
|
|
3441
3441
|
separator = input('/', ...(ngDevMode ? [{ debugName: "separator" }] : /* istanbul ignore next */ []));
|
|
3442
3442
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: NeuBreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3443
3443
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: NeuBreadcrumbComponent, isStandalone: true, selector: "neu-breadcrumb", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
@@ -3493,7 +3493,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
3493
3493
|
`, styles: [".neu-breadcrumb{display:inline-flex}.neu-breadcrumb__list{display:flex;align-items:center;flex-wrap:wrap;gap:4px;list-style:none;margin:0;padding:0;font-family:var(--neu-font-sans);font-size:var(--neu-text-sm)}.neu-breadcrumb__item{display:inline-flex;align-items:center;gap:4px}.neu-breadcrumb__link{color:var(--neu-text-muted);text-decoration:none;transition:color var(--neu-transition);border-radius:var(--neu-radius-xs);outline:none}.neu-breadcrumb__link:hover{color:var(--neu-text)}.neu-breadcrumb__link:focus-visible{outline:2px solid var(--neu-primary);outline-offset:2px}.neu-breadcrumb__separator{color:var(--neu-text-disabled);font-size:var(--neu-text-xs);-webkit-user-select:none;user-select:none;margin:0 2px}.neu-breadcrumb__current{color:var(--neu-text);font-weight:500}\n"] }]
|
|
3494
3494
|
}], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], separator: [{ type: i0.Input, args: [{ isSignal: true, alias: "separator", required: false }] }] } });
|
|
3495
3495
|
|
|
3496
|
-
/** @internal — componente flotante del tooltip, renderizado vía CDK Portal */
|
|
3496
|
+
/** @internal — componente flotante del tooltip, renderizado vía CDK Portal / floating tooltip component, rendered via CDK Portal */
|
|
3497
3497
|
class NeuTooltipOverlayComponent {
|
|
3498
3498
|
text = input.required(...(ngDevMode ? [{ debugName: "text" }] : /* istanbul ignore next */ []));
|
|
3499
3499
|
tooltipId = input('', ...(ngDevMode ? [{ debugName: "tooltipId" }] : /* istanbul ignore next */ []));
|
|
@@ -3527,7 +3527,7 @@ class NeuTooltipDirective {
|
|
|
3527
3527
|
_elementRef = inject((ElementRef));
|
|
3528
3528
|
_injector = inject(Injector);
|
|
3529
3529
|
_tooltipId = `neu-tooltip-${Math.random().toString(36).slice(2, 7)}`;
|
|
3530
|
-
/** Elementos HTML nativamente focusables que no necesitan tabindex extra */
|
|
3530
|
+
/** Elementos HTML nativamente focusables que no necesitan tabindex extra / Natively focusable HTML elements that don't need extra tabindex */
|
|
3531
3531
|
_NATIVE_FOCUSABLE = /^(a|button|input|select|textarea|details|summary)$/i;
|
|
3532
3532
|
_needsTabindex = () => !this._NATIVE_FOCUSABLE.test(this._elementRef.nativeElement.tagName);
|
|
3533
3533
|
_overlayRef = null;
|
|
@@ -3635,29 +3635,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
3635
3635
|
|
|
3636
3636
|
class NeuNavComponent {
|
|
3637
3637
|
router = inject(Router);
|
|
3638
|
-
// ---- Señal reactiva de ruta activa ----
|
|
3638
|
+
// ---- Señal reactiva de ruta activa / Reactive active route signal ----
|
|
3639
3639
|
currentUrl = toSignal(this.router.events.pipe(filter$1((e) => e instanceof NavigationEnd)), { initialValue: null });
|
|
3640
3640
|
// ---- Inputs ----
|
|
3641
|
-
/** Lista de ítems de navegación */
|
|
3641
|
+
/** Lista de ítems de navegación / Navigation item list */
|
|
3642
3642
|
items = input([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
3643
|
-
/** Estado inicial colapsado */
|
|
3643
|
+
/** Estado inicial colapsado / Initial collapsed state */
|
|
3644
3644
|
collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []));
|
|
3645
|
-
/** Muestra el botón de colapsar/expandir */
|
|
3645
|
+
/** Muestra el botón de colapsar/expandir / Shows the collapse/expand button */
|
|
3646
3646
|
collapsible = input(true, ...(ngDevMode ? [{ debugName: "collapsible" }] : /* istanbul ignore next */ []));
|
|
3647
|
-
/** Etiqueta accesible del <nav> */
|
|
3647
|
+
/** Etiqueta accesible del <nav> / Accessible label for the <nav> */
|
|
3648
3648
|
ariaLabel = input('Navegación principal', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
3649
|
-
/** Aria-label del botón cuando el nav está colapsado */
|
|
3649
|
+
/** Aria-label del botón cuando el nav está colapsado / Aria-label for the button when the nav is collapsed */
|
|
3650
3650
|
expandLabel = input('Expandir menú', ...(ngDevMode ? [{ debugName: "expandLabel" }] : /* istanbul ignore next */ []));
|
|
3651
|
-
/** Aria-label del botón cuando el nav está expandido */
|
|
3651
|
+
/** Aria-label del botón cuando el nav está expandido / Aria-label for the button when the nav is expanded */
|
|
3652
3652
|
collapseLabel = input('Colapsar menú', ...(ngDevMode ? [{ debugName: "collapseLabel" }] : /* istanbul ignore next */ []));
|
|
3653
|
-
/** Emite cuando cambia el estado colapsado */
|
|
3653
|
+
/** Emite cuando cambia el estado colapsado / Emits when the collapsed state changes */
|
|
3654
3654
|
collapsedChange = output();
|
|
3655
|
-
// ---- Estado interno ----
|
|
3655
|
+
// ---- Estado interno / Internal state ----
|
|
3656
3656
|
// Sigue el input `collapsed` del padre (permite el configurador)
|
|
3657
3657
|
// pero puede ser sobreescrito localmente con toggleCollapse()
|
|
3658
3658
|
isCollapsed = signal(this.collapsed(), ...(ngDevMode ? [{ debugName: "isCollapsed" }] : /* istanbul ignore next */ []));
|
|
3659
3659
|
openGroups = signal(new Set(), ...(ngDevMode ? [{ debugName: "openGroups" }] : /* istanbul ignore next */ []));
|
|
3660
|
-
// ---- Flyout para modo colapsado ----
|
|
3660
|
+
// ---- Flyout para modo colapsado / Flyout for collapsed mode ----
|
|
3661
3661
|
flyoutState = signal(null, ...(ngDevMode ? [{ debugName: "flyoutState" }] : /* istanbul ignore next */ []));
|
|
3662
3662
|
_flyoutTimer = null;
|
|
3663
3663
|
constructor() {
|
|
@@ -3671,7 +3671,7 @@ class NeuNavComponent {
|
|
|
3671
3671
|
clearTimeout(this._flyoutTimer);
|
|
3672
3672
|
});
|
|
3673
3673
|
}
|
|
3674
|
-
// ---- Helpers de estado ----
|
|
3674
|
+
// ---- Helpers de estado / State helpers ----
|
|
3675
3675
|
toggleCollapse() {
|
|
3676
3676
|
this.isCollapsed.update((v) => {
|
|
3677
3677
|
const next = !v;
|
|
@@ -4581,15 +4581,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
4581
4581
|
* (pageChange)="currentPage = $event" />
|
|
4582
4582
|
*/
|
|
4583
4583
|
class NeuPaginationComponent {
|
|
4584
|
-
/** Página actual (1-indexed) */
|
|
4584
|
+
/** Página actual (1-indexed) / Current page (1-indexed) */
|
|
4585
4585
|
page = input(1, ...(ngDevMode ? [{ debugName: "page" }] : /* istanbul ignore next */ []));
|
|
4586
|
-
/** Total de ítems */
|
|
4586
|
+
/** Total de ítems / Total items */
|
|
4587
4587
|
total = input(0, ...(ngDevMode ? [{ debugName: "total" }] : /* istanbul ignore next */ []));
|
|
4588
|
-
/** Ítems por página */
|
|
4588
|
+
/** Ítems por página / Items per page */
|
|
4589
4589
|
pageSize = input(10, ...(ngDevMode ? [{ debugName: "pageSize" }] : /* istanbul ignore next */ []));
|
|
4590
|
-
/** Número máximo de botones de página visibles (sin contar anterior/siguiente) */
|
|
4590
|
+
/** Número máximo de botones de página visibles (sin contar anterior/siguiente) / Maximum number of visible page buttons (not counting prev/next) */
|
|
4591
4591
|
maxVisible = input(7, ...(ngDevMode ? [{ debugName: "maxVisible" }] : /* istanbul ignore next */ []));
|
|
4592
|
-
/** Emite la nueva página al hacer click */
|
|
4592
|
+
/** Emite la nueva página al hacer click / Emits the new page on click */
|
|
4593
4593
|
pageChange = output();
|
|
4594
4594
|
totalPages = computed(() => Math.max(1, Math.ceil(this.total() / this.pageSize())), ...(ngDevMode ? [{ debugName: "totalPages" }] : /* istanbul ignore next */ []));
|
|
4595
4595
|
pages = computed(() => {
|
|
@@ -4763,12 +4763,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
4763
4763
|
/**
|
|
4764
4764
|
* NeuralUI Sidebar Component
|
|
4765
4765
|
*
|
|
4766
|
-
* El estado abierto/cerrado se gestiona automáticamente desde la URL
|
|
4767
|
-
* via NeuUrlStateService (?menu=open por defecto).
|
|
4766
|
+
* El estado abierto/cerrado se gestiona automáticamente desde la URL / The open/closed state is automatically managed from the URL
|
|
4767
|
+
* via NeuUrlStateService (?menu=open por defecto). / via NeuUrlStateService (?menu=open by default).
|
|
4768
4768
|
*
|
|
4769
4769
|
* Modos:
|
|
4770
|
-
* - overlay (default): panel flotante sobre el contenido con backdrop
|
|
4771
|
-
* - persistent: sidebar fijo integrado en el layout (desktop)
|
|
4770
|
+
* - overlay (default): panel flotante sobre el contenido con backdrop / floating panel above content with backdrop
|
|
4771
|
+
* - persistent: sidebar fijo integrado en el layout (desktop) / fixed sidebar integrated in the layout (desktop)
|
|
4772
4772
|
*
|
|
4773
4773
|
* Uso:
|
|
4774
4774
|
* <neu-sidebar urlParam="menu" [persistent]="isDesktop()">
|
|
@@ -4777,14 +4777,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
4777
4777
|
* <div neu-sidebar-footer>...</div>
|
|
4778
4778
|
* </neu-sidebar>
|
|
4779
4779
|
*
|
|
4780
|
-
* Abrir desde cualquier parte:
|
|
4780
|
+
* Abrir desde cualquier parte: / Open from anywhere:
|
|
4781
4781
|
* inject(NeuUrlStateService).setParam('menu', 'open', false);
|
|
4782
4782
|
*/
|
|
4783
4783
|
class NeuSidebarComponent {
|
|
4784
4784
|
urlState = inject(NeuUrlStateService);
|
|
4785
|
-
/** Posición del sidebar: izquierda o derecha de la pantalla */
|
|
4785
|
+
/** Posición del sidebar: izquierda o derecha de la pantalla / Sidebar position: left or right of the screen */
|
|
4786
4786
|
side = input('left', ...(ngDevMode ? [{ debugName: "side" }] : /* istanbul ignore next */ []));
|
|
4787
|
-
/** QueryParam que controla el estado. Default: 'menu' (?menu=open) */
|
|
4787
|
+
/** QueryParam que controla el estado. Default: 'menu' (?menu=open) / QueryParam that controls the state. Default: 'menu' (?menu=open) */
|
|
4788
4788
|
urlParam = input('menu', ...(ngDevMode ? [{ debugName: "urlParam" }] : /* istanbul ignore next */ []));
|
|
4789
4789
|
/**
|
|
4790
4790
|
* Modo persistente: el sidebar está siempre visible como parte del layout.
|
|
@@ -4796,23 +4796,23 @@ class NeuSidebarComponent {
|
|
|
4796
4796
|
* principal y el sidebar persistente no necesita su propio header.
|
|
4797
4797
|
*/
|
|
4798
4798
|
hideHeader = input(false, ...(ngDevMode ? [{ debugName: "hideHeader" }] : /* istanbul ignore next */ []));
|
|
4799
|
-
/** Etiqueta accesible para el <aside> */
|
|
4799
|
+
/** Etiqueta accesible para el <aside> / Accessible label for the <aside> */
|
|
4800
4800
|
ariaLabel = input('Menú de navegación', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
4801
|
-
/** Etiqueta accesible para el botón cerrar */
|
|
4801
|
+
/** Etiqueta accesible para el botón cerrar / Accessible label for the close button */
|
|
4802
4802
|
closeLabel = input('Cerrar menú de navegación', ...(ngDevMode ? [{ debugName: "closeLabel" }] : /* istanbul ignore next */ []));
|
|
4803
|
-
/** Emite cuando el usuario cierra el sidebar (overlay click o botón) */
|
|
4803
|
+
/** Emite cuando el usuario cierra el sidebar (overlay click o botón) / Emits when the user closes the sidebar (overlay click or button) */
|
|
4804
4804
|
closeRequested = output();
|
|
4805
|
-
/** Signal reactivo: true si el sidebar debe mostrarse */
|
|
4805
|
+
/** Signal reactivo: true si el sidebar debe mostrarse / Reactive signal: true if the sidebar should be shown */
|
|
4806
4806
|
isOpen = computed(() => {
|
|
4807
4807
|
if (this.persistent())
|
|
4808
4808
|
return true;
|
|
4809
4809
|
return this.urlState.getParam(this.urlParam())() === 'open';
|
|
4810
4810
|
}, ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
|
|
4811
|
-
/** Abre el sidebar — añade ?{urlParam}=open a la URL */
|
|
4811
|
+
/** Abre el sidebar — añade ?{urlParam}=open a la URL / Opens the sidebar — adds ?{urlParam}=open to the URL */
|
|
4812
4812
|
open(replaceUrl = false) {
|
|
4813
4813
|
this.urlState.setParam(this.urlParam(), 'open', replaceUrl);
|
|
4814
4814
|
}
|
|
4815
|
-
/** Cierra el sidebar — elimina el parámetro de la URL */
|
|
4815
|
+
/** Cierra el sidebar — elimina el parámetro de la URL / Closes the sidebar — removes the URL parameter */
|
|
4816
4816
|
close() {
|
|
4817
4817
|
this.urlState.setParam(this.urlParam(), null, true);
|
|
4818
4818
|
this.closeRequested.emit();
|
|
@@ -4940,15 +4940,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
4940
4940
|
* </neu-stepper>
|
|
4941
4941
|
*/
|
|
4942
4942
|
class NeuStepperComponent {
|
|
4943
|
-
/** Pasos del wizard */
|
|
4943
|
+
/** Pasos del wizard / Wizard steps */
|
|
4944
4944
|
steps = input([], ...(ngDevMode ? [{ debugName: "steps" }] : /* istanbul ignore next */ []));
|
|
4945
|
-
/** Índice del paso activo (0-based) */
|
|
4945
|
+
/** Índice del paso activo (0-based) / Active step index (0-based) */
|
|
4946
4946
|
activeStep = input(0, ...(ngDevMode ? [{ debugName: "activeStep" }] : /* istanbul ignore next */ []));
|
|
4947
|
-
/** Si true, solo permite ir hacia adelante secuencialmente */
|
|
4947
|
+
/** Si true, solo permite ir hacia adelante secuencialmente / If true, only allows moving forward sequentially */
|
|
4948
4948
|
linear = input(false, ...(ngDevMode ? [{ debugName: "linear" }] : /* istanbul ignore next */ []));
|
|
4949
|
-
/** Emite el nuevo índice al cambiar */
|
|
4949
|
+
/** Emite el nuevo índice al cambiar / Emits the new index on change */
|
|
4950
4950
|
stepChange = output();
|
|
4951
|
-
/** Set de pasos completados */
|
|
4951
|
+
/** Set de pasos completados / Set of completed steps */
|
|
4952
4952
|
_completed = signal(new Set(), ...(ngDevMode ? [{ debugName: "_completed" }] : /* istanbul ignore next */ []));
|
|
4953
4953
|
isCompleted = (i) => this._completed().has(i) || (this.steps()[i]?.completed ?? false) || i < this.activeStep();
|
|
4954
4954
|
goTo(i) {
|
|
@@ -4959,7 +4959,7 @@ class NeuStepperComponent {
|
|
|
4959
4959
|
return;
|
|
4960
4960
|
this.stepChange.emit(i);
|
|
4961
4961
|
}
|
|
4962
|
-
/** Marca el paso actual como completado y avanza al siguiente */
|
|
4962
|
+
/** Marca el paso actual como completado y avanza al siguiente / Marks the current step as completed and advances to the next */
|
|
4963
4963
|
next() {
|
|
4964
4964
|
const current = this.activeStep();
|
|
4965
4965
|
const updated = new Set(this._completed());
|
|
@@ -5105,8 +5105,8 @@ const NEU_TABS_CONTEXT = new InjectionToken('NeuTabsContext');
|
|
|
5105
5105
|
/**
|
|
5106
5106
|
* NeuralUI Tabs Component
|
|
5107
5107
|
*
|
|
5108
|
-
* Sistema de pestañas con estado sincronizado a la URL via NeuUrlStateService.
|
|
5109
|
-
* El panel activo se determina por ?{tabParam}={tabId}.
|
|
5108
|
+
* Sistema de pestañas con estado sincronizado a la URL via NeuUrlStateService. / Tab system with state synchronized to the URL via NeuUrlStateService.
|
|
5109
|
+
* El panel activo se determina por ?{tabParam}={tabId}. / The active panel is determined by ?{tabParam}={tabId}.
|
|
5110
5110
|
*
|
|
5111
5111
|
* Uso:
|
|
5112
5112
|
* <neu-tabs [tabs]="tabs" tabParam="tab">
|
|
@@ -5125,17 +5125,17 @@ class NeuTabsComponent {
|
|
|
5125
5125
|
requestAnimationFrame(() => this._updateIndicator());
|
|
5126
5126
|
});
|
|
5127
5127
|
}
|
|
5128
|
-
/** Definición de pestañas */
|
|
5128
|
+
/** Definición de pestañas / Tab definitions */
|
|
5129
5129
|
tabs = input([], ...(ngDevMode ? [{ debugName: "tabs" }] : /* istanbul ignore next */ []));
|
|
5130
|
-
/** QueryParam que almacena la pestaña activa */
|
|
5130
|
+
/** QueryParam que almacena la pestaña activa / QueryParam that stores the active tab */
|
|
5131
5131
|
tabParam = input('tab', ...(ngDevMode ? [{ debugName: "tabParam" }] : /* istanbul ignore next */ []));
|
|
5132
|
-
/** Si true, elimina el padding interno de los paneles */
|
|
5132
|
+
/** Si true, elimina el padding interno de los paneles / If true, removes the internal padding from panels */
|
|
5133
5133
|
flush = input(false, ...(ngDevMode ? [{ debugName: "flush" }] : /* istanbul ignore next */ []));
|
|
5134
|
-
/** Etiqueta accesible del rol tablist */
|
|
5134
|
+
/** Etiqueta accesible del rol tablist / Accessible label for the tablist role */
|
|
5135
5135
|
ariaLabel = input('Pestañas de contenido', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
5136
|
-
/** Emite al cambiar de pestaña */
|
|
5136
|
+
/** Emite al cambiar de pestaña / Emits when the tab changes */
|
|
5137
5137
|
tabChange = output();
|
|
5138
|
-
/** ID de la pestaña activa (de la URL o la primera disponible) */
|
|
5138
|
+
/** ID de la pestaña activa (de la URL o la primera disponible) / Active tab ID (from the URL or the first available) */
|
|
5139
5139
|
activeTabId = computed(() => {
|
|
5140
5140
|
const fromUrl = this.urlState.getParam(this.tabParam())();
|
|
5141
5141
|
const available = this.tabs().find((t) => t.id === fromUrl && !t.disabled);
|
|
@@ -5144,7 +5144,7 @@ class NeuTabsComponent {
|
|
|
5144
5144
|
// Fallback: primera pestaña no deshabilitada
|
|
5145
5145
|
return this.tabs().find((t) => !t.disabled)?.id ?? '';
|
|
5146
5146
|
}, ...(ngDevMode ? [{ debugName: "activeTabId" }] : /* istanbul ignore next */ []));
|
|
5147
|
-
/** Posición del indicador calculada mediante medición DOM */
|
|
5147
|
+
/** Posición del indicador calculada mediante medición DOM / Indicator position calculated via DOM measurement */
|
|
5148
5148
|
_indicatorLeft = signal('0px', ...(ngDevMode ? [{ debugName: "_indicatorLeft" }] : /* istanbul ignore next */ []));
|
|
5149
5149
|
_indicatorWidth = signal('0px', ...(ngDevMode ? [{ debugName: "_indicatorWidth" }] : /* istanbul ignore next */ []));
|
|
5150
5150
|
indicatorStyle = computed(() => `left: ${this._indicatorLeft()}; width: ${this._indicatorWidth()}`, ...(ngDevMode ? [{ debugName: "indicatorStyle" }] : /* istanbul ignore next */ []));
|
|
@@ -5179,7 +5179,7 @@ class NeuTabsComponent {
|
|
|
5179
5179
|
this.tabChange.emit(tab.id);
|
|
5180
5180
|
requestAnimationFrame(() => this._updateIndicator());
|
|
5181
5181
|
}
|
|
5182
|
-
/** Mueve el foco entre tabs con flechas (roving tabindex — WAI-ARIA Tabs Pattern) */
|
|
5182
|
+
/** Mueve el foco entre tabs con flechas (roving tabindex — WAI-ARIA Tabs Pattern) / Moves focus between tabs with arrows (roving tabindex — WAI-ARIA Tabs Pattern) */
|
|
5183
5183
|
focusTab(event, dir) {
|
|
5184
5184
|
event.preventDefault();
|
|
5185
5185
|
const enabledTabs = this.tabs().filter((t) => !t.disabled);
|
|
@@ -5286,15 +5286,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
5286
5286
|
/**
|
|
5287
5287
|
* NeuralUI Tab Panel
|
|
5288
5288
|
*
|
|
5289
|
-
* Panel de contenido asociado a una pestaña de NeuTabsComponent.
|
|
5290
|
-
* Solo se renderiza (no oculta con CSS) cuando la pestaña está activa.
|
|
5289
|
+
* Panel de contenido asociado a una pestaña de NeuTabsComponent. / Content panel associated with a NeuTabsComponent tab.
|
|
5290
|
+
* Solo se renderiza (no oculta con CSS) cuando la pestaña está activa. / Only rendered (not hidden with CSS) when the tab is active.
|
|
5291
5291
|
*
|
|
5292
5292
|
* Uso: hijo directo de <neu-tabs>
|
|
5293
5293
|
* <neu-tab-panel tabId="api">...</neu-tab-panel>
|
|
5294
5294
|
*/
|
|
5295
5295
|
class NeuTabPanelComponent {
|
|
5296
5296
|
tabs = inject(NEU_TABS_CONTEXT, { optional: true });
|
|
5297
|
-
/** ID que debe coincidir con NeuTab.id del padre */
|
|
5297
|
+
/** ID que debe coincidir con NeuTab.id del padre / ID that must match the parent NeuTab.id */
|
|
5298
5298
|
tabId = input.required(...(ngDevMode ? [{ debugName: "tabId" }] : /* istanbul ignore next */ []));
|
|
5299
5299
|
isActive = computed(() => this.tabs?.activeTabId() === this.tabId(), ...(ngDevMode ? [{ debugName: "isActive" }] : /* istanbul ignore next */ []));
|
|
5300
5300
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: NeuTabPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
@@ -5337,7 +5337,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
5337
5337
|
* NeuralUI Accordion Component
|
|
5338
5338
|
*
|
|
5339
5339
|
* Paneles expandibles / colapsables con animación suave.
|
|
5340
|
-
* Soporta modo múltiple (varios abiertos a la vez) o exclusivo.
|
|
5340
|
+
* Soporta modo múltiple (varios abiertos a la vez) o exclusivo. / Supports multiple (several open at once) or exclusive mode.
|
|
5341
5341
|
*
|
|
5342
5342
|
* Uso:
|
|
5343
5343
|
* <neu-accordion [items]="items" />
|
|
@@ -5345,13 +5345,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
5345
5345
|
*/
|
|
5346
5346
|
class NeuAccordionComponent {
|
|
5347
5347
|
_sanitizer = inject(DomSanitizer);
|
|
5348
|
-
/** Lista de paneles */
|
|
5348
|
+
/** Lista de paneles / Panel list */
|
|
5349
5349
|
items = input([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
5350
|
-
/** Permite varios paneles abiertos a la vez */
|
|
5350
|
+
/** Permite varios paneles abiertos a la vez / Allows multiple panels open at once */
|
|
5351
5351
|
multiple = input(false, ...(ngDevMode ? [{ debugName: "multiple" }] : /* istanbul ignore next */ []));
|
|
5352
|
-
/** Borde exterior alrededor del accordion */
|
|
5352
|
+
/** Borde exterior alrededor del accordion / Outer border around the accordion */
|
|
5353
5353
|
bordered = input(true, ...(ngDevMode ? [{ debugName: "bordered" }] : /* istanbul ignore next */ []));
|
|
5354
|
-
/** Emite el id del panel al abrirse/cerrarse */
|
|
5354
|
+
/** Emite el id del panel al abrirse/cerrarse / Emits the panel id on open/close */
|
|
5355
5355
|
panelToggle = output();
|
|
5356
5356
|
/**
|
|
5357
5357
|
* Set de IDs actualmente expandidos.
|
|
@@ -5499,13 +5499,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
5499
5499
|
* </neu-card>
|
|
5500
5500
|
*/
|
|
5501
5501
|
class NeuCardComponent {
|
|
5502
|
-
/** Espaciado interior del cuerpo */
|
|
5502
|
+
/** Espaciado interior del cuerpo / Inner body padding */
|
|
5503
5503
|
padding = input('md', ...(ngDevMode ? [{ debugName: "padding" }] : /* istanbul ignore next */ []));
|
|
5504
|
-
/** Efecto hover con elevación de sombra */
|
|
5504
|
+
/** Efecto hover con elevación de sombra / Hover effect with shadow elevation */
|
|
5505
5505
|
hoverable = input(false, ...(ngDevMode ? [{ debugName: "hoverable" }] : /* istanbul ignore next */ []));
|
|
5506
|
-
/** Borde con acento de color primario */
|
|
5506
|
+
/** Borde con acento de color primario / Border with primary color accent */
|
|
5507
5507
|
bordered = input(false, ...(ngDevMode ? [{ debugName: "bordered" }] : /* istanbul ignore next */ []));
|
|
5508
|
-
/** Card compacta sin bordes ni sombras */
|
|
5508
|
+
/** Card compacta sin bordes ni sombras / Compact card without borders or shadows */
|
|
5509
5509
|
flat = input(false, ...(ngDevMode ? [{ debugName: "flat" }] : /* istanbul ignore next */ []));
|
|
5510
5510
|
hostClasses = computed(() => ({
|
|
5511
5511
|
'neu-card': true,
|
|
@@ -5608,8 +5608,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
5608
5608
|
args: [{ providedIn: 'root' }]
|
|
5609
5609
|
}] });
|
|
5610
5610
|
/**
|
|
5611
|
-
* NeuDialogComponent — Diálogo accesible con header, body y footer.
|
|
5612
|
-
* Úsalo directamente como componente declarativo pasando `open` como signal.
|
|
5611
|
+
* NeuDialogComponent — Diálogo accesible con header, body y footer. / Accessible dialog with header, body and footer.
|
|
5612
|
+
* Úsalo directamente como componente declarativo pasando `open` como signal. / Use it directly as a declarative component passing `open` as a signal.
|
|
5613
5613
|
*
|
|
5614
5614
|
* Para uso programático, utiliza NeuDialogService.open().
|
|
5615
5615
|
*
|
|
@@ -5622,17 +5622,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
5622
5622
|
* </neu-dialog>
|
|
5623
5623
|
*/
|
|
5624
5624
|
class NeuDialogComponent {
|
|
5625
|
-
/** Controla la visibilidad del diálogo. */
|
|
5625
|
+
/** Controla la visibilidad del diálogo. / Controls dialog visibility. */
|
|
5626
5626
|
open = input(false, ...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
5627
|
-
/** Título que aparece en el header. */
|
|
5627
|
+
/** Título que aparece en el header. / Title shown in the header. */
|
|
5628
5628
|
title = input('', ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
5629
|
-
/** Tamaño del panel: sm | md | lg | xl | full. */
|
|
5629
|
+
/** Tamaño del panel: sm | md | lg | xl | full. / Panel size: sm | md | lg | xl | full. */
|
|
5630
5630
|
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
5631
|
-
/** Si es true, el backdrop y el botón cerrar no funcionan. */
|
|
5631
|
+
/** Si es true, el backdrop y el botón cerrar no funcionan. / If true, the backdrop and close button do not work. */
|
|
5632
5632
|
disableClose = input(false, ...(ngDevMode ? [{ debugName: "disableClose" }] : /* istanbul ignore next */ []));
|
|
5633
|
-
/** Emite cuando el usuario cierra el diálogo. */
|
|
5633
|
+
/** Emite cuando el usuario cierra el diálogo. / Emits when the user closes the dialog. */
|
|
5634
5634
|
closed = output();
|
|
5635
|
-
/** @internal — ID único para aria-labelledby */
|
|
5635
|
+
/** @internal — ID único para aria-labelledby / Unique ID for aria-labelledby */
|
|
5636
5636
|
_uid = Math.random().toString(36).slice(2, 7);
|
|
5637
5637
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: NeuDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5638
5638
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: NeuDialogComponent, isStandalone: true, selector: "neu-dialog", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, disableClose: { classPropertyName: "disableClose", publicName: "disableClose", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { closed: "closed" }, host: { properties: { "class.neu-dialog--open": "open()", "attr.aria-hidden": "!open()" } }, ngImport: i0, template: `
|
|
@@ -5783,7 +5783,7 @@ function asRows(data) {
|
|
|
5783
5783
|
class NeuTableComponent {
|
|
5784
5784
|
urlState = inject(NeuUrlStateService);
|
|
5785
5785
|
expandTemplate = contentChild(NeuTableExpandDirective, ...(ngDevMode ? [{ debugName: "expandTemplate" }] : /* istanbul ignore next */ []));
|
|
5786
|
-
// ---- Inputs de datos ----
|
|
5786
|
+
// ---- Inputs de datos / Data inputs ----
|
|
5787
5787
|
columns = input([], ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
|
|
5788
5788
|
data = input([], ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
5789
5789
|
pageSize = input(10, ...(ngDevMode ? [{ debugName: "pageSize" }] : /* istanbul ignore next */ []));
|
|
@@ -5791,20 +5791,20 @@ class NeuTableComponent {
|
|
|
5791
5791
|
title = input('', ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
5792
5792
|
emptyMessage = input('No se encontraron resultados', ...(ngDevMode ? [{ debugName: "emptyMessage" }] : /* istanbul ignore next */ []));
|
|
5793
5793
|
skeletonRows = input([1, 2, 3, 4, 5], ...(ngDevMode ? [{ debugName: "skeletonRows" }] : /* istanbul ignore next */ []));
|
|
5794
|
-
// ---- Inputs de funcionalidad ----
|
|
5794
|
+
// ---- Inputs de funcionalidad / Functionality inputs ----
|
|
5795
5795
|
searchable = input(true, ...(ngDevMode ? [{ debugName: "searchable" }] : /* istanbul ignore next */ []));
|
|
5796
5796
|
searchPlaceholder = input('Buscar...', ...(ngDevMode ? [{ debugName: "searchPlaceholder" }] : /* istanbul ignore next */ []));
|
|
5797
5797
|
exactMatchable = input(false, ...(ngDevMode ? [{ debugName: "exactMatchable" }] : /* istanbul ignore next */ []));
|
|
5798
5798
|
exactMatchLabel = input('Búsqueda exacta', ...(ngDevMode ? [{ debugName: "exactMatchLabel" }] : /* istanbul ignore next */ []));
|
|
5799
|
-
/** Aria-label del input de búsqueda */
|
|
5799
|
+
/** Aria-label del input de búsqueda / Aria-label for the search input */
|
|
5800
5800
|
searchAriaLabel = input('Buscar en la tabla', ...(ngDevMode ? [{ debugName: "searchAriaLabel" }] : /* istanbul ignore next */ []));
|
|
5801
|
-
/** Aria-label del botón de limpiar búsqueda */
|
|
5801
|
+
/** Aria-label del botón de limpiar búsqueda / Aria-label for the search clear button */
|
|
5802
5802
|
clearSearchAriaLabel = input('Limpiar búsqueda', ...(ngDevMode ? [{ debugName: "clearSearchAriaLabel" }] : /* istanbul ignore next */ []));
|
|
5803
|
-
/** Texto del botón que elimina el filtro activo */
|
|
5803
|
+
/** Texto del botón que elimina el filtro activo / Button text that removes the active filter */
|
|
5804
5804
|
clearFilterLabel = input('Eliminar filtro', ...(ngDevMode ? [{ debugName: "clearFilterLabel" }] : /* istanbul ignore next */ []));
|
|
5805
|
-
/** Aria-label del botón de página anterior */
|
|
5805
|
+
/** Aria-label del botón de página anterior / Aria-label for the previous page button */
|
|
5806
5806
|
previousPageAriaLabel = input('Anterior', ...(ngDevMode ? [{ debugName: "previousPageAriaLabel" }] : /* istanbul ignore next */ []));
|
|
5807
|
-
/** Aria-label del botón de página siguiente */
|
|
5807
|
+
/** Aria-label del botón de página siguiente / Aria-label for the next page button */
|
|
5808
5808
|
nextPageAriaLabel = input('Siguiente', ...(ngDevMode ? [{ debugName: "nextPageAriaLabel" }] : /* istanbul ignore next */ []));
|
|
5809
5809
|
sortable = input(false, ...(ngDevMode ? [{ debugName: "sortable" }] : /* istanbul ignore next */ []));
|
|
5810
5810
|
selectable = input(false, ...(ngDevMode ? [{ debugName: "selectable" }] : /* istanbul ignore next */ []));
|
|
@@ -5813,9 +5813,9 @@ class NeuTableComponent {
|
|
|
5813
5813
|
exportFileName = input('export', ...(ngDevMode ? [{ debugName: "exportFileName" }] : /* istanbul ignore next */ []));
|
|
5814
5814
|
pageSizeOptions = input([], ...(ngDevMode ? [{ debugName: "pageSizeOptions" }] : /* istanbul ignore next */ []));
|
|
5815
5815
|
stickyHeader = input(false, ...(ngDevMode ? [{ debugName: "stickyHeader" }] : /* istanbul ignore next */ []));
|
|
5816
|
-
/** Clave del campo que identifica de forma única cada fila */
|
|
5816
|
+
/** Clave del campo que identifica de forma única cada fila / Field key that uniquely identifies each row */
|
|
5817
5817
|
rowKey = input('id', ...(ngDevMode ? [{ debugName: "rowKey" }] : /* istanbul ignore next */ []));
|
|
5818
|
-
// ---- URL params (personalizables
|
|
5818
|
+
// ---- URL params (personalizables / customizable for multiple tables) ----
|
|
5819
5819
|
pageParam = input('page', ...(ngDevMode ? [{ debugName: "pageParam" }] : /* istanbul ignore next */ []));
|
|
5820
5820
|
searchParam = input('q', ...(ngDevMode ? [{ debugName: "searchParam" }] : /* istanbul ignore next */ []));
|
|
5821
5821
|
sortParam = input('sort', ...(ngDevMode ? [{ debugName: "sortParam" }] : /* istanbul ignore next */ []));
|
|
@@ -5834,7 +5834,7 @@ class NeuTableComponent {
|
|
|
5834
5834
|
const d = this.urlState.getParam(this.sortDirParam())();
|
|
5835
5835
|
return d === 'desc' ? 'desc' : 'asc';
|
|
5836
5836
|
}, ...(ngDevMode ? [{ debugName: "sortDir" }] : /* istanbul ignore next */ []));
|
|
5837
|
-
// ---- Pipeline de datos ----
|
|
5837
|
+
// ---- Pipeline de datos / Data pipeline ----
|
|
5838
5838
|
rows = computed(() => asRows(this.data()), ...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
|
|
5839
5839
|
exactMatch = signal(false, ...(ngDevMode ? [{ debugName: "exactMatch" }] : /* istanbul ignore next */ []));
|
|
5840
5840
|
filteredData = computed(() => {
|
|
@@ -5899,7 +5899,7 @@ class NeuTableComponent {
|
|
|
5899
5899
|
cols++;
|
|
5900
5900
|
return cols;
|
|
5901
5901
|
}, ...(ngDevMode ? [{ debugName: "totalColspan" }] : /* istanbul ignore next */ []));
|
|
5902
|
-
// ---- Expansión de filas ----
|
|
5902
|
+
// ---- Expansión de filas / Row expansion ----
|
|
5903
5903
|
_expandedKeys = signal(new Set(), ...(ngDevMode ? [{ debugName: "_expandedKeys" }] : /* istanbul ignore next */ []));
|
|
5904
5904
|
isRowExpanded(row) {
|
|
5905
5905
|
return this._expandedKeys().has(row[this.rowKey()]);
|
|
@@ -5913,7 +5913,7 @@ class NeuTableComponent {
|
|
|
5913
5913
|
set.add(key);
|
|
5914
5914
|
this._expandedKeys.set(set);
|
|
5915
5915
|
}
|
|
5916
|
-
// ---- Selección de filas ----
|
|
5916
|
+
// ---- Selección de filas / Row selection ----
|
|
5917
5917
|
_selectedKeys = signal(new Set(), ...(ngDevMode ? [{ debugName: "_selectedKeys" }] : /* istanbul ignore next */ []));
|
|
5918
5918
|
selectedCount = computed(() => this._selectedKeys().size, ...(ngDevMode ? [{ debugName: "selectedCount" }] : /* istanbul ignore next */ []));
|
|
5919
5919
|
isAllSelected = computed(() => this.paginatedData().length > 0 &&
|
|
@@ -5952,7 +5952,7 @@ class NeuTableComponent {
|
|
|
5952
5952
|
const selected = this.rows().filter((r) => keys.has(r[this.rowKey()]));
|
|
5953
5953
|
this.rowSelectionChange.emit(selected);
|
|
5954
5954
|
}
|
|
5955
|
-
// ---- Acciones de URL ----
|
|
5955
|
+
// ---- Acciones de URL / URL actions ----
|
|
5956
5956
|
goToPage(page) {
|
|
5957
5957
|
this.urlState.setParam(this.pageParam(), String(Math.max(1, Math.min(page, this.totalPages()))));
|
|
5958
5958
|
}
|
|
@@ -6779,21 +6779,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
6779
6779
|
* <neu-avatar name="PM" size="lg" color="blue" status="online" />
|
|
6780
6780
|
*/
|
|
6781
6781
|
class NeuAvatarComponent {
|
|
6782
|
-
/** URL de la imagen. Si falla la carga, muestra las iniciales. */
|
|
6782
|
+
/** URL de la imagen. Si falla la carga, muestra las iniciales. / Image URL. If loading fails, shows the initials. */
|
|
6783
6783
|
src = input('', ...(ngDevMode ? [{ debugName: "src" }] : /* istanbul ignore next */ []));
|
|
6784
|
-
/** Texto alternativo de la imagen. */
|
|
6784
|
+
/** Texto alternativo de la imagen. / Image alternative text. */
|
|
6785
6785
|
alt = input('', ...(ngDevMode ? [{ debugName: "alt" }] : /* istanbul ignore next */ []));
|
|
6786
|
-
/** Nombre completo — se usan las iniciales como fallback. */
|
|
6786
|
+
/** Nombre completo — se usan las iniciales como fallback. / Full name — initials are used as fallback. */
|
|
6787
6787
|
name = input('', ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
6788
|
-
/** Tamaño: xs (24) | sm (32) | md (40) | lg (48) | xl (64). Por defecto 'md'. */
|
|
6788
|
+
/** Tamaño: xs (24) | sm (32) | md (40) | lg (48) | xl (64). Por defecto 'md'. / Size: xs (24) | sm (32) | md (40) | lg (48) | xl (64). Default 'md'. */
|
|
6789
6789
|
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
6790
|
-
/** Forma: 'circle' (default) o 'square'. */
|
|
6790
|
+
/** Forma: 'circle' (default) o 'square'. / Shape: 'circle' (default) or 'square'. */
|
|
6791
6791
|
shape = input('circle', ...(ngDevMode ? [{ debugName: "shape" }] : /* istanbul ignore next */ []));
|
|
6792
|
-
/** Color de fondo para iniciales. */
|
|
6792
|
+
/** Color de fondo para iniciales. / Background color for initials. */
|
|
6793
6793
|
color = input('blue', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
6794
|
-
/** Indicador de presencia. */
|
|
6794
|
+
/** Indicador de presencia. / Presence indicator. */
|
|
6795
6795
|
status = input('', ...(ngDevMode ? [{ debugName: "status" }] : /* istanbul ignore next */ []));
|
|
6796
|
-
/** @internal Imagen fallida */
|
|
6796
|
+
/** @internal Imagen fallida / Failed image */
|
|
6797
6797
|
imgError = signal(false, ...(ngDevMode ? [{ debugName: "imgError" }] : /* istanbul ignore next */ []));
|
|
6798
6798
|
initials = computed(() => {
|
|
6799
6799
|
const n = this.name().trim();
|
|
@@ -6872,21 +6872,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
6872
6872
|
/**
|
|
6873
6873
|
* NeuralUI Badge Component
|
|
6874
6874
|
*
|
|
6875
|
-
* Etiqueta de estado compacta y semántica.
|
|
6875
|
+
* Etiqueta de estado compacta y semántica. / Compact and semantic status label.
|
|
6876
6876
|
*
|
|
6877
6877
|
* Uso: <neu-badge variant="success">Activo</neu-badge>
|
|
6878
6878
|
* <neu-badge variant="danger" [dot]="true">Error</neu-badge>
|
|
6879
6879
|
*/
|
|
6880
6880
|
class NeuBadgeComponent {
|
|
6881
|
-
/** Variante semántica */
|
|
6881
|
+
/** Variante semántica / Semantic variant */
|
|
6882
6882
|
variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
6883
|
-
/** Tamaño */
|
|
6883
|
+
/** Tamaño / Size */
|
|
6884
6884
|
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
6885
|
-
/** Muestra un punto de color a la izquierda */
|
|
6885
|
+
/** Muestra un punto de color a la izquierda / Shows a colored dot on the left */
|
|
6886
6886
|
dot = input(false, ...(ngDevMode ? [{ debugName: "dot" }] : /* istanbul ignore next */ []));
|
|
6887
|
-
/** Estilo con solo borde (outline) sin relleno */
|
|
6887
|
+
/** Estilo con solo borde (outline) sin relleno / Border-only style (outline) without fill */
|
|
6888
6888
|
outline = input(false, ...(ngDevMode ? [{ debugName: "outline" }] : /* istanbul ignore next */ []));
|
|
6889
|
-
/** Estilo completamente redondeado (pill) */
|
|
6889
|
+
/** Estilo completamente redondeado (pill) / Fully rounded style (pill) */
|
|
6890
6890
|
pill = input(true, ...(ngDevMode ? [{ debugName: "pill" }] : /* istanbul ignore next */ []));
|
|
6891
6891
|
hostClasses = computed(() => ({
|
|
6892
6892
|
'neu-badge': true,
|
|
@@ -6925,27 +6925,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
6925
6925
|
* son inputs reactivos. El estado se computa automáticamente con computed().
|
|
6926
6926
|
*/
|
|
6927
6927
|
class NeuButtonComponent {
|
|
6928
|
-
/** Variante visual del botón */
|
|
6928
|
+
/** Variante visual del botón / Visual button variant */
|
|
6929
6929
|
variant = input('primary', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
6930
|
-
/** Tamaño del botón */
|
|
6930
|
+
/** Tamaño del botón / Button size */
|
|
6931
6931
|
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
6932
|
-
/** Deshabilita el botón y bloquea la interacción */
|
|
6932
|
+
/** Deshabilita el botón y bloquea la interacción / Disables the button and blocks interaction */
|
|
6933
6933
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
6934
|
-
/** Muestra un spinner y deshabilita mientras se procesa */
|
|
6934
|
+
/** Muestra un spinner y deshabilita mientras se procesa / Shows a spinner and disables while processing */
|
|
6935
6935
|
loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
|
|
6936
|
-
/** Ocupa el 100% del ancho de su contenedor */
|
|
6936
|
+
/** Ocupa el 100% del ancho de su contenedor / Takes up 100% of its container width */
|
|
6937
6937
|
fullWidth = input(false, ...(ngDevMode ? [{ debugName: "fullWidth" }] : /* istanbul ignore next */ []));
|
|
6938
|
-
/** Nombre del icono Lucide (ej: 'lucideSave', 'lucidePlus') */
|
|
6938
|
+
/** Nombre del icono Lucide (ej: 'lucideSave', 'lucidePlus') / Lucide icon name (e.g. 'lucideSave', 'lucidePlus') */
|
|
6939
6939
|
icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
|
|
6940
6940
|
/** Posición del icono respecto al texto */
|
|
6941
6941
|
iconPosition = input('left', ...(ngDevMode ? [{ debugName: "iconPosition" }] : /* istanbul ignore next */ []));
|
|
6942
|
-
/** Modo solo-icono: aplica padding cuadrado y oculta el ng-content */
|
|
6942
|
+
/** Modo solo-icono: aplica padding cuadrado y oculta el ng-content / Icon-only mode: applies square padding and hides ng-content */
|
|
6943
6943
|
iconOnly = input(false, ...(ngDevMode ? [{ debugName: "iconOnly" }] : /* istanbul ignore next */ []));
|
|
6944
|
-
/** Etiqueta accesible obligatoria cuando se usa iconOnly (WCAG 4.1.2) */
|
|
6944
|
+
/** Etiqueta accesible obligatoria cuando se usa iconOnly (WCAG 4.1.2) / Required accessible label when using iconOnly (WCAG 4.1.2) */
|
|
6945
6945
|
ariaLabel = input('', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
6946
|
-
/** Emite el evento de click cuando el botón está activo */
|
|
6946
|
+
/** Emite el evento de click cuando el botón está activo / Emits the click event when the button is active */
|
|
6947
6947
|
neuClick = output();
|
|
6948
|
-
/** @internal — reenvía el click nativo al output Angular */
|
|
6948
|
+
/** @internal — reenvía el click nativo al output Angular / forwards the native click to the Angular output */
|
|
6949
6949
|
_onHostClick(event) {
|
|
6950
6950
|
if (!this.isDisabled()) {
|
|
6951
6951
|
this.neuClick.emit(event);
|
|
@@ -7029,9 +7029,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
7029
7029
|
`, styles: [".neu-button{display:inline-flex;align-items:center;justify-content:center;gap:var(--neu-space-2);border:1px solid transparent;border-radius:var(--neu-radius);font-family:var(--neu-font-sans);font-weight:500;line-height:1;cursor:pointer;text-decoration:none;white-space:nowrap;-webkit-user-select:none;user-select:none;transition:background-color var(--neu-transition),border-color var(--neu-transition),color var(--neu-transition),box-shadow var(--neu-transition),opacity var(--neu-transition);outline:none}.neu-button:focus-visible{box-shadow:0 0 0 3px #6366f173}.neu-button--sm{padding:var(--neu-space-2) var(--neu-space-3);font-size:var(--neu-text-sm);border-radius:var(--neu-radius-sm)}.neu-button--md{padding:var(--neu-space-2) var(--neu-space-5);font-size:var(--neu-text-base)}@media(min-width:400px){.neu-button--md{padding:.625rem var(--neu-space-6)}}.neu-button--lg{padding:var(--neu-space-3) var(--neu-space-8);font-size:var(--neu-text-lg)}.neu-button--full-width{width:100%}.neu-button--primary{background:var(--neu-primary);color:var(--neu-primary-fg);border-color:var(--neu-primary)}.neu-button--primary:hover:not(:disabled):not(.neu-button--disabled){background:var(--neu-primary-dark);border-color:var(--neu-primary-dark);box-shadow:var(--neu-shadow-glow)}.neu-button--primary:active:not(:disabled){background:var(--neu-primary-dark);transform:translateY(1px)}.neu-button--secondary{background:var(--neu-secondary);color:var(--neu-secondary-fg);border-color:var(--neu-secondary)}.neu-button--secondary:hover:not(:disabled):not(.neu-button--disabled){background:var(--neu-secondary-dark);border-color:var(--neu-secondary-dark)}.neu-button--outline{background:transparent;color:var(--neu-primary-light);border-color:var(--neu-primary)}.neu-button--outline:hover:not(:disabled):not(.neu-button--disabled){background:#6366f11a;border-color:var(--neu-primary-light)}.neu-button--ghost{background:transparent;color:var(--neu-text-muted);border-color:transparent}.neu-button--ghost:hover:not(:disabled):not(.neu-button--disabled){background:var(--neu-surface-2);color:var(--neu-text)}.neu-button--danger{background:var(--neu-error);color:#fff;border-color:var(--neu-error)}.neu-button--danger:hover:not(:disabled):not(.neu-button--disabled){background:#dc2626;border-color:#dc2626}.neu-button--disabled,.neu-button:disabled{opacity:.45;cursor:not-allowed;pointer-events:none}.neu-button--loading{cursor:wait;pointer-events:none}.neu-button--icon-only.neu-button--sm{width:30px;height:30px;padding:0}.neu-button--icon-only.neu-button--md{width:38px;height:38px;padding:0}.neu-button--icon-only.neu-button--lg{width:46px;height:46px;padding:0}.neu-button__spinner{display:inline-flex;flex-shrink:0;width:1em;height:1em}.neu-button__spinner svg{width:100%;height:100%;animation:neu-spin .8s linear infinite}@keyframes neu-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
|
|
7030
7030
|
}], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], iconPosition: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconPosition", required: false }] }], iconOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconOnly", required: false }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], neuClick: [{ type: i0.Output, args: ["neuClick"] }] } });
|
|
7031
7031
|
|
|
7032
|
-
/** Paleta por defecto Neural-Blue */
|
|
7032
|
+
/** Paleta por defecto Neural-Blue / Default Neural-Blue palette */
|
|
7033
7033
|
const DEFAULT_COLORS = ['#007aff', '#5856d6', '#34c759', '#ff9f0a', '#ff3b30', '#64748b'];
|
|
7034
|
-
/** Calcula la línea acumulada porcentual para un diagrama de Pareto. */
|
|
7034
|
+
/** Calcula la línea acumulada porcentual para un diagrama de Pareto. / Calculates the cumulative percentage line for a Pareto chart. */
|
|
7035
7035
|
function computeParetoCumulative(data) {
|
|
7036
7036
|
const total = data.reduce((s, v) => s + Math.abs(v), 0);
|
|
7037
7037
|
if (total === 0)
|
|
@@ -7057,23 +7057,23 @@ function computeParetoCumulative(data) {
|
|
|
7057
7057
|
* />
|
|
7058
7058
|
*/
|
|
7059
7059
|
class NeuChartComponent {
|
|
7060
|
-
/** Tipo de gráfica. */
|
|
7060
|
+
/** Tipo de gráfica. / Chart type. */
|
|
7061
7061
|
type = input('line', ...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
|
|
7062
|
-
/** Series para gráficas de ejes (line, area, bar, pareto…). */
|
|
7062
|
+
/** Series para gráficas de ejes (line, area, bar, pareto…). / Series for axis-based charts (line, area, bar, pareto…). */
|
|
7063
7063
|
series = input([], ...(ngDevMode ? [{ debugName: "series" }] : /* istanbul ignore next */ []));
|
|
7064
|
-
/** Series para gráficas sin ejes (donut, pie). */
|
|
7064
|
+
/** Series para gráficas sin ejes (donut, pie). / Series for non-axis charts (donut, pie). */
|
|
7065
7065
|
pieSeries = input([], ...(ngDevMode ? [{ debugName: "pieSeries" }] : /* istanbul ignore next */ []));
|
|
7066
|
-
/** Etiquetas del eje X. */
|
|
7066
|
+
/** Etiquetas del eje X. / X-axis labels. */
|
|
7067
7067
|
categories = input([], ...(ngDevMode ? [{ debugName: "categories" }] : /* istanbul ignore next */ []));
|
|
7068
|
-
/** Etiquetas para donut/pie. */
|
|
7068
|
+
/** Etiquetas para donut/pie. / Labels for donut/pie. */
|
|
7069
7069
|
labels = input([], ...(ngDevMode ? [{ debugName: "labels" }] : /* istanbul ignore next */ []));
|
|
7070
|
-
/** Altura en px. */
|
|
7070
|
+
/** Altura en px. / Height in px. */
|
|
7071
7071
|
height = input(280, ...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
|
|
7072
|
-
/** Colores custom. Si no se proveen, usa la paleta Neural-Blue. */
|
|
7072
|
+
/** Colores custom. Si no se proveen, usa la paleta Neural-Blue. / Custom colors. If not provided, uses the Neural-Blue palette. */
|
|
7073
7073
|
colors = input([], ...(ngDevMode ? [{ debugName: "colors" }] : /* istanbul ignore next */ []));
|
|
7074
|
-
/** Muestra/oculta las etiquetas de datos. */
|
|
7074
|
+
/** Muestra/oculta las etiquetas de datos. / Shows/hides data labels. */
|
|
7075
7075
|
showDataLabels = input(false, ...(ngDevMode ? [{ debugName: "showDataLabels" }] : /* istanbul ignore next */ []));
|
|
7076
|
-
/** Título de la gráfica. */
|
|
7076
|
+
/** Título de la gráfica. / Chart title. */
|
|
7077
7077
|
title = input('', ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
7078
7078
|
// --------------------------------------------------
|
|
7079
7079
|
// Helpers privados
|
|
@@ -7282,21 +7282,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
7282
7282
|
* <neu-chip [selected]="true" (selectedChange)="toggle()">TypeScript</neu-chip>
|
|
7283
7283
|
*/
|
|
7284
7284
|
class NeuChipComponent {
|
|
7285
|
-
/** Variante de color */
|
|
7285
|
+
/** Variante de color / Color variant */
|
|
7286
7286
|
variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
7287
|
-
/** Tamaño */
|
|
7287
|
+
/** Tamaño / Size */
|
|
7288
7288
|
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
7289
|
-
/** Estado seleccionado */
|
|
7289
|
+
/** Estado seleccionado / Selected state */
|
|
7290
7290
|
selected = input(false, ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
|
|
7291
|
-
/** Muestra botón de cierre */
|
|
7291
|
+
/** Muestra botón de cierre / Shows close button */
|
|
7292
7292
|
removable = input(false, ...(ngDevMode ? [{ debugName: "removable" }] : /* istanbul ignore next */ []));
|
|
7293
|
-
/** Deshabilitado */
|
|
7293
|
+
/** Deshabilitado / Disabled */
|
|
7294
7294
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
7295
|
-
/** Aria-label del botón de eliminar */
|
|
7295
|
+
/** Aria-label del botón de eliminar / Aria-label for the delete button */
|
|
7296
7296
|
removeAriaLabel = input('Eliminar', ...(ngDevMode ? [{ debugName: "removeAriaLabel" }] : /* istanbul ignore next */ []));
|
|
7297
|
-
/** Emite al hacer clic o pulsar espacio/enter */
|
|
7297
|
+
/** Emite al hacer clic o pulsar espacio/enter / Emits on click or space/enter press */
|
|
7298
7298
|
selectedChange = output();
|
|
7299
|
-
/** Emite al pulsar el botón de cierre */
|
|
7299
|
+
/** Emite al pulsar el botón de cierre / Emits when the close button is pressed */
|
|
7300
7300
|
removed = output();
|
|
7301
7301
|
hostClasses = computed(() => ({
|
|
7302
7302
|
'neu-chip': true,
|
|
@@ -7396,17 +7396,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
7396
7396
|
*/
|
|
7397
7397
|
class NeuCodeBlockComponent {
|
|
7398
7398
|
doc = inject(DOCUMENT);
|
|
7399
|
-
/** Código fuente a mostrar */
|
|
7399
|
+
/** Código fuente a mostrar / Source code to display */
|
|
7400
7400
|
code = input('', ...(ngDevMode ? [{ debugName: "code" }] : /* istanbul ignore next */ []));
|
|
7401
|
-
/** Nombre del lenguaje (decorativo) */
|
|
7401
|
+
/** Nombre del lenguaje (decorativo) / Language name (decorative) */
|
|
7402
7402
|
lang = input('TypeScript', ...(ngDevMode ? [{ debugName: "lang" }] : /* istanbul ignore next */ []));
|
|
7403
|
-
/** Texto del botón cuando no se ha copiado */
|
|
7403
|
+
/** Texto del botón cuando no se ha copiado / Button text when not yet copied */
|
|
7404
7404
|
copyLabel = input('Copiar', ...(ngDevMode ? [{ debugName: "copyLabel" }] : /* istanbul ignore next */ []));
|
|
7405
|
-
/** Texto del botón tras copiar */
|
|
7405
|
+
/** Texto del botón tras copiar / Button text after copying */
|
|
7406
7406
|
copiedLabel = input('Copiado', ...(ngDevMode ? [{ debugName: "copiedLabel" }] : /* istanbul ignore next */ []));
|
|
7407
|
-
/** Aria-label del botón copiar */
|
|
7407
|
+
/** Aria-label del botón copiar / Aria-label for the copy button */
|
|
7408
7408
|
copyAriaLabel = input('Copiar código', ...(ngDevMode ? [{ debugName: "copyAriaLabel" }] : /* istanbul ignore next */ []));
|
|
7409
|
-
/** Aria-label del botón tras copiar */
|
|
7409
|
+
/** Aria-label del botón tras copiar / Aria-label for the button after copying */
|
|
7410
7410
|
copiedAriaLabel = input('Código copiado', ...(ngDevMode ? [{ debugName: "copiedAriaLabel" }] : /* istanbul ignore next */ []));
|
|
7411
7411
|
copied = signal(false, ...(ngDevMode ? [{ debugName: "copied" }] : /* istanbul ignore next */ []));
|
|
7412
7412
|
_copyTimer;
|
|
@@ -7553,17 +7553,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
7553
7553
|
* />
|
|
7554
7554
|
*/
|
|
7555
7555
|
class NeuEmptyStateComponent {
|
|
7556
|
-
/** Nombre del icono Lucide registrado con provideIcons(). */
|
|
7556
|
+
/** Nombre del icono Lucide registrado con provideIcons(). / Lucide icon name registered with provideIcons(). */
|
|
7557
7557
|
icon = input('lucideInbox', ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
|
|
7558
|
-
/** Tamaño del icono. Por defecto 3rem. */
|
|
7558
|
+
/** Tamaño del icono. Por defecto 3rem. / Icon size. Default 3rem. */
|
|
7559
7559
|
iconSize = input('3rem', ...(ngDevMode ? [{ debugName: "iconSize" }] : /* istanbul ignore next */ []));
|
|
7560
|
-
/** Título principal del estado vacío. */
|
|
7560
|
+
/** Título principal del estado vacío. / Main title of the empty state. */
|
|
7561
7561
|
title = input('No hay nada aquí', ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
7562
|
-
/** Descripción secundaria opcional. */
|
|
7562
|
+
/** Descripción secundaria opcional. / Optional secondary description. */
|
|
7563
7563
|
description = input('', ...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
|
|
7564
|
-
/** Texto del botón de acción. Si está vacío, no se muestra el botón. */
|
|
7564
|
+
/** Texto del botón de acción. Si está vacío, no se muestra el botón. / Action button text. If empty, the button is not shown. */
|
|
7565
7565
|
actionLabel = input('', ...(ngDevMode ? [{ debugName: "actionLabel" }] : /* istanbul ignore next */ []));
|
|
7566
|
-
/** Emite cuando el usuario hace clic en el botón de acción. */
|
|
7566
|
+
/** Emite cuando el usuario hace clic en el botón de acción. / Emits when the user clicks the action button. */
|
|
7567
7567
|
action = output();
|
|
7568
7568
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: NeuEmptyStateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7569
7569
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: NeuEmptyStateComponent, isStandalone: true, selector: "neu-empty-state", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, iconSize: { classPropertyName: "iconSize", publicName: "iconSize", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, actionLabel: { classPropertyName: "actionLabel", publicName: "actionLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { action: "action" }, host: { classAttribute: "neu-empty-state" }, ngImport: i0, template: `
|
|
@@ -7625,17 +7625,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
7625
7625
|
* <neu-progress-bar [indeterminate]="true" />
|
|
7626
7626
|
*/
|
|
7627
7627
|
class NeuProgressBarComponent {
|
|
7628
|
-
/** Valor de 0 a 100 */
|
|
7628
|
+
/** Valor de 0 a 100 / Value from 0 to 100 */
|
|
7629
7629
|
value = input(0, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
7630
|
-
/** Variante de color */
|
|
7630
|
+
/** Variante de color / Color variant */
|
|
7631
7631
|
variant = input('primary', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
7632
|
-
/** Etiqueta descriptiva sobre la barra */
|
|
7632
|
+
/** Etiqueta descriptiva sobre la barra / Descriptive label above the bar */
|
|
7633
7633
|
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
7634
|
-
/** Muestra el % a la derecha */
|
|
7634
|
+
/** Muestra el % a la derecha / Shows the % on the right */
|
|
7635
7635
|
showValue = input(false, ...(ngDevMode ? [{ debugName: "showValue" }] : /* istanbul ignore next */ []));
|
|
7636
|
-
/** Modo indeterminado (animación continua) */
|
|
7636
|
+
/** Modo indeterminado (animación continua) / Indeterminate mode (continuous animation) */
|
|
7637
7637
|
indeterminate = input(false, ...(ngDevMode ? [{ debugName: "indeterminate" }] : /* istanbul ignore next */ []));
|
|
7638
|
-
/** Altura de la barra */
|
|
7638
|
+
/** Altura de la barra / Bar height */
|
|
7639
7639
|
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
7640
7640
|
clampedValue = computed(() => Math.min(100, Math.max(0, this.value())), ...(ngDevMode ? [{ debugName: "clampedValue" }] : /* istanbul ignore next */ []));
|
|
7641
7641
|
hostClasses = computed(() => [`neu-progress--${this.variant()}`, `neu-progress--${this.size()}`].join(' '), ...(ngDevMode ? [{ debugName: "hostClasses" }] : /* istanbul ignore next */ []));
|
|
@@ -7721,13 +7721,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
7721
7721
|
*/
|
|
7722
7722
|
class NeuRatingComponent {
|
|
7723
7723
|
Math = Math;
|
|
7724
|
-
/** Valor actual (1 a stars) */
|
|
7724
|
+
/** Valor actual (1 a stars) / Current value (1 to stars) */
|
|
7725
7725
|
value = input(0, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
7726
|
-
/** Número de estrellas */
|
|
7726
|
+
/** Número de estrellas / Number of stars */
|
|
7727
7727
|
stars = input(5, ...(ngDevMode ? [{ debugName: "stars" }] : /* istanbul ignore next */ []));
|
|
7728
|
-
/** Modo solo lectura */
|
|
7728
|
+
/** Modo solo lectura / Read-only mode */
|
|
7729
7729
|
readonly = input(false, ...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
|
|
7730
|
-
/** Emite el nuevo valor al seleccionar */
|
|
7730
|
+
/** Emite el nuevo valor al seleccionar / Emits the new value on selection */
|
|
7731
7731
|
valueChange = output();
|
|
7732
7732
|
hovered = signal(null, ...(ngDevMode ? [{ debugName: "hovered" }] : /* istanbul ignore next */ []));
|
|
7733
7733
|
starsArray = computed(() => Array.from({ length: this.stars() }, (_, i) => i + 1), ...(ngDevMode ? [{ debugName: "starsArray" }] : /* istanbul ignore next */ []));
|
|
@@ -7898,17 +7898,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
7898
7898
|
* <neu-spinner color="#ff6b35" strokeWidth="6" />
|
|
7899
7899
|
*/
|
|
7900
7900
|
class NeuSpinnerComponent {
|
|
7901
|
-
/** Variante de color semántica */
|
|
7901
|
+
/** Variante de color semántica / Semantic color variant */
|
|
7902
7902
|
severity = input('primary', ...(ngDevMode ? [{ debugName: "severity" }] : /* istanbul ignore next */ []));
|
|
7903
|
-
/** Color CSS directo — sobreescribe severity */
|
|
7903
|
+
/** Color CSS directo — sobreescribe severity / Direct CSS color — overrides severity */
|
|
7904
7904
|
color = input('', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
|
|
7905
|
-
/** Grosor del trazo SVG (unidades SVG) */
|
|
7905
|
+
/** Grosor del trazo SVG (unidades SVG) / SVG stroke width (SVG units) */
|
|
7906
7906
|
strokeWidth = input('4', ...(ngDevMode ? [{ debugName: "strokeWidth" }] : /* istanbul ignore next */ []));
|
|
7907
|
-
/** Tamaño del spinner (CSS: '40px', '2rem', etc.) */
|
|
7907
|
+
/** Tamaño del spinner (CSS: '40px', '2rem', etc.) / Spinner size (CSS: '40px', '2rem', etc.) */
|
|
7908
7908
|
size = input('40px', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
7909
|
-
/** Duración de la animación de rotación */
|
|
7909
|
+
/** Duración de la animación de rotación / Rotation animation duration */
|
|
7910
7910
|
animationDuration = input('1s', ...(ngDevMode ? [{ debugName: "animationDuration" }] : /* istanbul ignore next */ []));
|
|
7911
|
-
/** Texto accesible para lectores de pantalla */
|
|
7911
|
+
/** Texto accesible para lectores de pantalla / Accessible text for screen readers */
|
|
7912
7912
|
ariaLabel = input('Cargando...', ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
|
|
7913
7913
|
_severityColor = computed(() => {
|
|
7914
7914
|
const map = {
|
|
@@ -7989,7 +7989,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
7989
7989
|
/**
|
|
7990
7990
|
* NeuralUI SplitButton Component
|
|
7991
7991
|
*
|
|
7992
|
-
* Botón principal con un dropdown de acciones adicionales.
|
|
7992
|
+
* Botón principal con un dropdown de acciones adicionales. / Primary button with a dropdown of additional actions.
|
|
7993
7993
|
*
|
|
7994
7994
|
* Uso:
|
|
7995
7995
|
* <neu-split-button
|
|
@@ -8001,25 +8001,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
8001
8001
|
*/
|
|
8002
8002
|
class NeuSplitButtonComponent {
|
|
8003
8003
|
el = inject(ElementRef);
|
|
8004
|
-
/** Texto del botón principal */
|
|
8004
|
+
/** Texto del botón principal / Primary button text */
|
|
8005
8005
|
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
8006
|
-
/** Variante visual */
|
|
8006
|
+
/** Variante visual / Visual variant */
|
|
8007
8007
|
variant = input('primary', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
8008
|
-
/** Tamaño */
|
|
8008
|
+
/** Tamaño / Size */
|
|
8009
8009
|
size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
8010
|
-
/** Deshabilita todo el componente */
|
|
8010
|
+
/** Deshabilita todo el componente / Disables the entire component */
|
|
8011
8011
|
disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
8012
|
-
/** Muestra spinner en el botón principal */
|
|
8012
|
+
/** Muestra spinner en el botón principal / Shows spinner on the primary button */
|
|
8013
8013
|
loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
|
|
8014
|
-
/** Acciones del dropdown */
|
|
8014
|
+
/** Acciones del dropdown / Dropdown actions */
|
|
8015
8015
|
actions = input([], ...(ngDevMode ? [{ debugName: "actions" }] : /* istanbul ignore next */ []));
|
|
8016
|
-
/** Aria-label del botón de desplegable */
|
|
8016
|
+
/** Aria-label del botón de desplegable / Aria-label for the dropdown button */
|
|
8017
8017
|
moreActionsAriaLabel = input('Más opciones', ...(ngDevMode ? [{ debugName: "moreActionsAriaLabel" }] : /* istanbul ignore next */ []));
|
|
8018
|
-
/** Aria-label del menú desplegable */
|
|
8018
|
+
/** Aria-label del menú desplegable / Aria-label for the dropdown menu */
|
|
8019
8019
|
actionsAriaLabel = input('Acciones', ...(ngDevMode ? [{ debugName: "actionsAriaLabel" }] : /* istanbul ignore next */ []));
|
|
8020
|
-
/** Emite al hacer click en el botón principal */
|
|
8020
|
+
/** Emite al hacer click en el botón principal / Emits on primary button click */
|
|
8021
8021
|
primaryClick = output();
|
|
8022
|
-
/** Emite al seleccionar una acción del dropdown */
|
|
8022
|
+
/** Emite al seleccionar una acción del dropdown / Emits when a dropdown action is selected */
|
|
8023
8023
|
actionClick = output();
|
|
8024
8024
|
isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
|
|
8025
8025
|
isDisabled = computed(() => this.disabled() || this.loading(), ...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
|
|
@@ -8243,21 +8243,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
8243
8243
|
* />
|
|
8244
8244
|
*/
|
|
8245
8245
|
class NeuStatsCardComponent {
|
|
8246
|
-
/** Título o etiqueta de la métrica. */
|
|
8246
|
+
/** Título o etiqueta de la métrica. / Metric title or label. */
|
|
8247
8247
|
title = input('', ...(ngDevMode ? [{ debugName: "title" }] : /* istanbul ignore next */ []));
|
|
8248
|
-
/** Valor principal formateado (p.ej. "$12,450" o "98.2%"). */
|
|
8248
|
+
/** Valor principal formateado (p.ej. "$12,450" o "98.2%"). / Main formatted value (e.g. "$12,450" or "98.2%"). */
|
|
8249
8249
|
value = input('', ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
8250
|
-
/** Cambio porcentual o absoluto (p.ej. "+12.5%" o "-3"). */
|
|
8250
|
+
/** Cambio porcentual o absoluto (p.ej. "+12.5%" o "-3"). / Percentage or absolute change (e.g. "+12.5%" or "-3"). */
|
|
8251
8251
|
change = input('', ...(ngDevMode ? [{ debugName: "change" }] : /* istanbul ignore next */ []));
|
|
8252
|
-
/** Dirección del cambio. Afecta el color del change. */
|
|
8252
|
+
/** Dirección del cambio. Afecta el color del change. / Change direction. Affects the change color. */
|
|
8253
8253
|
trend = input('neutral', ...(ngDevMode ? [{ debugName: "trend" }] : /* istanbul ignore next */ []));
|
|
8254
|
-
/** Texto auxiliar bajo el cambio (p.ej. "vs. mes anterior"). */
|
|
8254
|
+
/** Texto auxiliar bajo el cambio (p.ej. "vs. mes anterior"). / Auxiliary text below the change (e.g. "vs. previous month"). */
|
|
8255
8255
|
label = input('', ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
8256
|
-
/** Nombre del icono Lucide para el encabezado. */
|
|
8256
|
+
/** Nombre del icono Lucide para el encabezado. / Lucide icon name for the header. */
|
|
8257
8257
|
icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
|
|
8258
|
-
/** Array de valores numéricos para la sparkline. Mín. 2 puntos. */
|
|
8258
|
+
/** Array de valores numéricos para la sparkline. Mín. 2 puntos. / Array of numeric values for the sparkline. Min. 2 points. */
|
|
8259
8259
|
sparkData = input([], ...(ngDevMode ? [{ debugName: "sparkData" }] : /* istanbul ignore next */ []));
|
|
8260
|
-
/** @internal Genera los puntos SVG de la sparkline */
|
|
8260
|
+
/** @internal Genera los puntos SVG de la sparkline / Generates the SVG sparkline points */
|
|
8261
8261
|
sparkPoints = computed(() => {
|
|
8262
8262
|
const data = this.sparkData();
|
|
8263
8263
|
if (data.length < 2)
|
|
@@ -8385,14 +8385,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
8385
8385
|
/**
|
|
8386
8386
|
* NeuralUI Timeline Component
|
|
8387
8387
|
*
|
|
8388
|
-
* Lista vertical de eventos cronológicos con línea conectora.
|
|
8388
|
+
* Lista vertical de eventos cronológicos con línea conectora. / Vertical list of chronological events with a connector line.
|
|
8389
8389
|
*
|
|
8390
8390
|
* Uso:
|
|
8391
8391
|
* <neu-timeline [items]="events" />
|
|
8392
8392
|
* <neu-timeline [items]="events" align="right" />
|
|
8393
8393
|
*/
|
|
8394
8394
|
class NeuTimelineComponent {
|
|
8395
|
-
/** Eventos a mostrar */
|
|
8395
|
+
/** Eventos a mostrar / Events to display */
|
|
8396
8396
|
items = input([], ...(ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []));
|
|
8397
8397
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: NeuTimelineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8398
8398
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", type: NeuTimelineComponent, isStandalone: true, selector: "neu-timeline", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
|
|
@@ -8490,7 +8490,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
|
|
|
8490
8490
|
`, styles: [".neu-timeline{list-style:none;margin:0;padding:0;font-family:var(--neu-font-sans)}.neu-timeline__item{display:flex;gap:var(--neu-space-4);min-height:56px}.neu-timeline__axis{display:flex;flex-direction:column;align-items:center;flex-shrink:0;width:24px}.neu-timeline__dot{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0;border:2.5px solid;background:var(--neu-surface)}.neu-timeline__dot--default{border-color:var(--neu-border);color:var(--neu-text-disabled);background:var(--neu-surface-2)}.neu-timeline__dot--success{border-color:var(--neu-success);color:var(--neu-success)}.neu-timeline__dot--warning{border-color:var(--neu-warning);color:var(--neu-warning)}.neu-timeline__dot--danger{border-color:var(--neu-error);color:var(--neu-error)}.neu-timeline__dot--info{border-color:var(--neu-primary);color:var(--neu-primary)}.neu-timeline__dot-icon{width:12px;height:12px}.neu-timeline__line{width:2px;flex:1;background:var(--neu-border);margin:4px 0;min-height:16px}.neu-timeline__content{flex:1;padding-bottom:var(--neu-space-5);padding-top:2px}.neu-timeline__header{display:flex;align-items:baseline;justify-content:space-between;gap:var(--neu-space-3);margin-bottom:4px}.neu-timeline__title{font-size:var(--neu-text-sm);font-weight:600;color:var(--neu-text)}.neu-timeline__time{font-size:var(--neu-text-xs);color:var(--neu-text-disabled);white-space:nowrap;flex-shrink:0}.neu-timeline__desc{font-size:var(--neu-text-sm);color:var(--neu-text-muted);line-height:1.6;margin:0}\n"] }]
|
|
8491
8491
|
}], propDecorators: { items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }] } });
|
|
8492
8492
|
|
|
8493
|
-
/** Mapa de iconos Lucide por tipo de toast */
|
|
8493
|
+
/** Mapa de iconos Lucide por tipo de toast / Map of Lucide icons by toast type */
|
|
8494
8494
|
const TOAST_ICONS = {
|
|
8495
8495
|
success: 'lucideCheckCircle',
|
|
8496
8496
|
error: 'lucideXCircle',
|