@neural-ui/core 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -88
- package/accordion/package.json +4 -0
- package/alert/package.json +4 -0
- package/autocomplete/package.json +4 -0
- package/avatar/package.json +4 -0
- package/badge/package.json +4 -0
- package/block-ui/package.json +4 -0
- package/breadcrumb/package.json +4 -0
- package/button/package.json +4 -0
- package/card/package.json +4 -0
- package/chart/package.json +4 -0
- package/checkbox/package.json +4 -0
- package/chip/package.json +4 -0
- package/code-block/package.json +4 -0
- package/color-picker/package.json +4 -0
- package/command-palette/package.json +4 -0
- package/confirm-dialog/package.json +4 -0
- package/context-menu/package.json +4 -0
- package/dashboard-grid/package.json +4 -0
- package/date-input/package.json +4 -0
- package/divider/package.json +4 -0
- package/empty-state/package.json +4 -0
- package/fesm2022/neural-ui-core-accordion.mjs +162 -0
- package/fesm2022/neural-ui-core-accordion.mjs.map +1 -0
- package/fesm2022/neural-ui-core-alert.mjs +116 -0
- package/fesm2022/neural-ui-core-alert.mjs.map +1 -0
- package/fesm2022/neural-ui-core-autocomplete.mjs +332 -0
- package/fesm2022/neural-ui-core-autocomplete.mjs.map +1 -0
- package/fesm2022/neural-ui-core-avatar.mjs +109 -0
- package/fesm2022/neural-ui-core-avatar.mjs.map +1 -0
- package/fesm2022/neural-ui-core-badge.mjs +54 -0
- package/fesm2022/neural-ui-core-badge.mjs.map +1 -0
- package/fesm2022/neural-ui-core-block-ui.mjs +95 -0
- package/fesm2022/neural-ui-core-block-ui.mjs.map +1 -0
- package/fesm2022/neural-ui-core-breadcrumb.mjs +84 -0
- package/fesm2022/neural-ui-core-breadcrumb.mjs.map +1 -0
- package/fesm2022/neural-ui-core-button.mjs +125 -0
- package/fesm2022/neural-ui-core-button.mjs.map +1 -0
- package/fesm2022/neural-ui-core-card.mjs +69 -0
- package/fesm2022/neural-ui-core-card.mjs.map +1 -0
- package/fesm2022/neural-ui-core-chart.mjs +287 -0
- package/fesm2022/neural-ui-core-chart.mjs.map +1 -0
- package/fesm2022/neural-ui-core-checkbox.mjs +138 -0
- package/fesm2022/neural-ui-core-checkbox.mjs.map +1 -0
- package/fesm2022/neural-ui-core-chip.mjs +130 -0
- package/fesm2022/neural-ui-core-chip.mjs.map +1 -0
- package/fesm2022/neural-ui-core-code-block.mjs +250 -0
- package/fesm2022/neural-ui-core-code-block.mjs.map +1 -0
- package/fesm2022/neural-ui-core-color-picker.mjs +435 -0
- package/fesm2022/neural-ui-core-color-picker.mjs.map +1 -0
- package/fesm2022/neural-ui-core-command-palette.mjs +235 -0
- package/fesm2022/neural-ui-core-command-palette.mjs.map +1 -0
- package/fesm2022/neural-ui-core-confirm-dialog.mjs +118 -0
- package/fesm2022/neural-ui-core-confirm-dialog.mjs.map +1 -0
- package/fesm2022/neural-ui-core-context-menu.mjs +158 -0
- package/fesm2022/neural-ui-core-context-menu.mjs.map +1 -0
- package/fesm2022/neural-ui-core-dashboard-grid.mjs +144 -0
- package/fesm2022/neural-ui-core-dashboard-grid.mjs.map +1 -0
- package/fesm2022/neural-ui-core-date-input.mjs +1332 -0
- package/fesm2022/neural-ui-core-date-input.mjs.map +1 -0
- package/fesm2022/neural-ui-core-divider.mjs +54 -0
- package/fesm2022/neural-ui-core-divider.mjs.map +1 -0
- package/fesm2022/neural-ui-core-empty-state.mjs +84 -0
- package/fesm2022/neural-ui-core-empty-state.mjs.map +1 -0
- package/fesm2022/neural-ui-core-filter-bar.mjs +118 -0
- package/fesm2022/neural-ui-core-filter-bar.mjs.map +1 -0
- package/fesm2022/neural-ui-core-icon.mjs +50 -0
- package/fesm2022/neural-ui-core-icon.mjs.map +1 -0
- package/fesm2022/neural-ui-core-image-viewer.mjs +309 -0
- package/fesm2022/neural-ui-core-image-viewer.mjs.map +1 -0
- package/fesm2022/neural-ui-core-input-otp.mjs +192 -0
- package/fesm2022/neural-ui-core-input-otp.mjs.map +1 -0
- package/fesm2022/neural-ui-core-input.mjs +320 -0
- package/fesm2022/neural-ui-core-input.mjs.map +1 -0
- package/fesm2022/neural-ui-core-knob.mjs +323 -0
- package/fesm2022/neural-ui-core-knob.mjs.map +1 -0
- package/fesm2022/neural-ui-core-meter-group.mjs +122 -0
- package/fesm2022/neural-ui-core-meter-group.mjs.map +1 -0
- package/fesm2022/neural-ui-core-modal.mjs +156 -0
- package/fesm2022/neural-ui-core-modal.mjs.map +1 -0
- package/fesm2022/neural-ui-core-multiselect.mjs +748 -0
- package/fesm2022/neural-ui-core-multiselect.mjs.map +1 -0
- package/fesm2022/neural-ui-core-nav.mjs +952 -0
- package/fesm2022/neural-ui-core-nav.mjs.map +1 -0
- package/fesm2022/neural-ui-core-notification-center.mjs +264 -0
- package/fesm2022/neural-ui-core-notification-center.mjs.map +1 -0
- package/fesm2022/neural-ui-core-number-input.mjs +331 -0
- package/fesm2022/neural-ui-core-number-input.mjs.map +1 -0
- package/fesm2022/neural-ui-core-pagination.mjs +198 -0
- package/fesm2022/neural-ui-core-pagination.mjs.map +1 -0
- package/fesm2022/neural-ui-core-popover.mjs +207 -0
- package/fesm2022/neural-ui-core-popover.mjs.map +1 -0
- package/fesm2022/neural-ui-core-progress-bar.mjs +105 -0
- package/fesm2022/neural-ui-core-progress-bar.mjs.map +1 -0
- package/fesm2022/neural-ui-core-radio.mjs +171 -0
- package/fesm2022/neural-ui-core-radio.mjs.map +1 -0
- package/fesm2022/neural-ui-core-rating.mjs +151 -0
- package/fesm2022/neural-ui-core-rating.mjs.map +1 -0
- package/fesm2022/neural-ui-core-select.mjs +638 -0
- package/fesm2022/neural-ui-core-select.mjs.map +1 -0
- package/fesm2022/neural-ui-core-sidebar.mjs +214 -0
- package/fesm2022/neural-ui-core-sidebar.mjs.map +1 -0
- package/fesm2022/neural-ui-core-skeleton.mjs +40 -0
- package/fesm2022/neural-ui-core-skeleton.mjs.map +1 -0
- package/fesm2022/neural-ui-core-slider.mjs +146 -0
- package/fesm2022/neural-ui-core-slider.mjs.map +1 -0
- package/fesm2022/neural-ui-core-spinner.mjs +113 -0
- package/fesm2022/neural-ui-core-spinner.mjs.map +1 -0
- package/fesm2022/neural-ui-core-split-button.mjs +252 -0
- package/fesm2022/neural-ui-core-split-button.mjs.map +1 -0
- package/fesm2022/neural-ui-core-splitter.mjs +174 -0
- package/fesm2022/neural-ui-core-splitter.mjs.map +1 -0
- package/fesm2022/neural-ui-core-stats-card.mjs +163 -0
- package/fesm2022/neural-ui-core-stats-card.mjs.map +1 -0
- package/fesm2022/neural-ui-core-stepper.mjs +204 -0
- package/fesm2022/neural-ui-core-stepper.mjs.map +1 -0
- package/fesm2022/neural-ui-core-switch.mjs +111 -0
- package/fesm2022/neural-ui-core-switch.mjs.map +1 -0
- package/fesm2022/neural-ui-core-table.mjs +1860 -0
- package/fesm2022/neural-ui-core-table.mjs.map +1 -0
- package/fesm2022/neural-ui-core-tabs.mjs +246 -0
- package/fesm2022/neural-ui-core-tabs.mjs.map +1 -0
- package/fesm2022/neural-ui-core-textarea.mjs +188 -0
- package/fesm2022/neural-ui-core-textarea.mjs.map +1 -0
- package/fesm2022/neural-ui-core-timeline.mjs +117 -0
- package/fesm2022/neural-ui-core-timeline.mjs.map +1 -0
- package/fesm2022/neural-ui-core-toast.mjs +171 -0
- package/fesm2022/neural-ui-core-toast.mjs.map +1 -0
- package/fesm2022/neural-ui-core-toggle-button-group.mjs +162 -0
- package/fesm2022/neural-ui-core-toggle-button-group.mjs.map +1 -0
- package/fesm2022/neural-ui-core-toolbar.mjs +67 -0
- package/fesm2022/neural-ui-core-toolbar.mjs.map +1 -0
- package/fesm2022/neural-ui-core-tooltip.mjs +151 -0
- package/fesm2022/neural-ui-core-tooltip.mjs.map +1 -0
- package/fesm2022/neural-ui-core-url-state.mjs +96 -0
- package/fesm2022/neural-ui-core-url-state.mjs.map +1 -0
- package/fesm2022/neural-ui-core-virtual-list.mjs +126 -0
- package/fesm2022/neural-ui-core-virtual-list.mjs.map +1 -0
- package/fesm2022/neural-ui-core.mjs +11 -8544
- package/fesm2022/neural-ui-core.mjs.map +1 -1
- package/filter-bar/package.json +4 -0
- package/icon/package.json +4 -0
- package/image-viewer/package.json +4 -0
- package/input/package.json +4 -0
- package/input-otp/package.json +4 -0
- package/knob/package.json +4 -0
- package/meter-group/package.json +4 -0
- package/modal/package.json +4 -0
- package/multiselect/package.json +4 -0
- package/nav/package.json +4 -0
- package/notification-center/package.json +4 -0
- package/number-input/package.json +4 -0
- package/package.json +252 -5
- package/pagination/package.json +4 -0
- package/popover/package.json +4 -0
- package/progress-bar/package.json +4 -0
- package/radio/package.json +4 -0
- package/rating/package.json +4 -0
- package/select/package.json +4 -0
- package/sidebar/package.json +4 -0
- package/skeleton/package.json +4 -0
- package/slider/package.json +4 -0
- package/spinner/package.json +4 -0
- package/split-button/package.json +4 -0
- package/splitter/package.json +4 -0
- package/stats-card/package.json +4 -0
- package/stepper/package.json +4 -0
- package/styles/_tokens.scss +209 -7
- package/styles.scss +1 -0
- package/switch/package.json +4 -0
- package/table/package.json +4 -0
- package/tabs/package.json +4 -0
- package/textarea/package.json +4 -0
- package/timeline/package.json +4 -0
- package/toast/package.json +4 -0
- package/toggle-button-group/package.json +4 -0
- package/toolbar/package.json +4 -0
- package/tooltip/package.json +4 -0
- package/types/neural-ui-core-accordion.d.ts +55 -0
- package/types/neural-ui-core-alert.d.ts +47 -0
- package/types/neural-ui-core-autocomplete.d.ts +69 -0
- package/types/neural-ui-core-avatar.d.ts +39 -0
- package/types/neural-ui-core-badge.d.ts +36 -0
- package/types/neural-ui-core-block-ui.d.ts +46 -0
- package/types/neural-ui-core-breadcrumb.d.ts +38 -0
- package/types/neural-ui-core-button.d.ts +55 -0
- package/types/neural-ui-core-card.d.ts +37 -0
- package/types/neural-ui-core-chart.d.ts +236 -0
- package/types/neural-ui-core-checkbox.d.ts +33 -0
- package/types/neural-ui-core-chip.d.ts +53 -0
- package/types/neural-ui-core-code-block.d.ts +55 -0
- package/types/neural-ui-core-color-picker.d.ts +55 -0
- package/types/neural-ui-core-command-palette.d.ts +56 -0
- package/types/neural-ui-core-confirm-dialog.d.ts +50 -0
- package/types/neural-ui-core-context-menu.d.ts +66 -0
- package/types/neural-ui-core-dashboard-grid.d.ts +41 -0
- package/types/neural-ui-core-date-input.d.ts +178 -0
- package/types/neural-ui-core-divider.d.ts +20 -0
- package/types/neural-ui-core-empty-state.d.ts +32 -0
- package/types/neural-ui-core-filter-bar.d.ts +49 -0
- package/types/neural-ui-core-icon.d.ts +33 -0
- package/types/neural-ui-core-image-viewer.d.ts +67 -0
- package/types/neural-ui-core-input-otp.d.ts +49 -0
- package/types/neural-ui-core-input.d.ts +86 -0
- package/types/neural-ui-core-knob.d.ts +68 -0
- package/types/neural-ui-core-meter-group.d.ts +52 -0
- package/types/neural-ui-core-modal.d.ts +54 -0
- package/types/neural-ui-core-multiselect.d.ts +129 -0
- package/types/neural-ui-core-nav.d.ts +69 -0
- package/types/neural-ui-core-notification-center.d.ts +60 -0
- package/types/neural-ui-core-number-input.d.ts +63 -0
- package/types/neural-ui-core-pagination.d.ts +30 -0
- package/types/neural-ui-core-popover.d.ts +73 -0
- package/types/neural-ui-core-progress-bar.d.ts +35 -0
- package/types/neural-ui-core-radio.d.ts +51 -0
- package/types/neural-ui-core-rating.d.ts +34 -0
- package/types/neural-ui-core-select.d.ts +161 -0
- package/types/neural-ui-core-sidebar.d.ts +57 -0
- package/types/neural-ui-core-skeleton.d.ts +22 -0
- package/types/neural-ui-core-slider.d.ts +42 -0
- package/types/neural-ui-core-spinner.d.ts +38 -0
- package/types/neural-ui-core-split-button.d.ts +65 -0
- package/types/neural-ui-core-splitter.d.ts +28 -0
- package/types/neural-ui-core-stats-card.d.ts +39 -0
- package/types/neural-ui-core-stepper.d.ts +51 -0
- package/types/neural-ui-core-switch.d.ts +34 -0
- package/types/neural-ui-core-table.d.ts +282 -0
- package/types/neural-ui-core-tabs.d.ts +76 -0
- package/types/neural-ui-core-textarea.d.ts +52 -0
- package/types/neural-ui-core-timeline.d.ts +33 -0
- package/types/neural-ui-core-toast.d.ts +70 -0
- package/types/neural-ui-core-toggle-button-group.d.ts +63 -0
- package/types/neural-ui-core-toolbar.d.ts +36 -0
- package/types/neural-ui-core-tooltip.d.ts +48 -0
- package/types/neural-ui-core-url-state.d.ts +58 -0
- package/types/neural-ui-core-virtual-list.d.ts +60 -0
- package/types/neural-ui-core.d.ts +5 -2107
- package/url-state/package.json +4 -0
- package/virtual-list/package.json +4 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
|
|
3
|
+
type NeuStatsTrend = 'up' | 'down' | 'neutral';
|
|
4
|
+
/**
|
|
5
|
+
* NeuStatsCard — Card de métrica con título, valor, tendencia y sparkline.
|
|
6
|
+
*
|
|
7
|
+
* Uso:
|
|
8
|
+
* <neu-stats-card
|
|
9
|
+
* title="Ingresos"
|
|
10
|
+
* value="$12,450"
|
|
11
|
+
* change="+12.5%"
|
|
12
|
+
* trend="up"
|
|
13
|
+
* icon="lucideDollarSign"
|
|
14
|
+
* [sparkData]="[30,45,38,52,60,55,70]"
|
|
15
|
+
* />
|
|
16
|
+
*/
|
|
17
|
+
declare class NeuStatsCardComponent {
|
|
18
|
+
/** Título o etiqueta de la métrica. / Metric title or label. */
|
|
19
|
+
title: _angular_core.InputSignal<string>;
|
|
20
|
+
/** Valor principal formateado (p.ej. "$12,450" o "98.2%"). / Main formatted value (e.g. "$12,450" or "98.2%"). */
|
|
21
|
+
value: _angular_core.InputSignal<string>;
|
|
22
|
+
/** Cambio porcentual o absoluto (p.ej. "+12.5%" o "-3"). / Percentage or absolute change (e.g. "+12.5%" or "-3"). */
|
|
23
|
+
change: _angular_core.InputSignal<string>;
|
|
24
|
+
/** Dirección del cambio. Afecta el color del change. / Change direction. Affects the change color. */
|
|
25
|
+
trend: _angular_core.InputSignal<NeuStatsTrend>;
|
|
26
|
+
/** Texto auxiliar bajo el cambio (p.ej. "vs. mes anterior"). / Auxiliary text below the change (e.g. "vs. previous month"). */
|
|
27
|
+
label: _angular_core.InputSignal<string>;
|
|
28
|
+
/** Nombre del icono Lucide para el encabezado. / Lucide icon name for the header. */
|
|
29
|
+
icon: _angular_core.InputSignal<string>;
|
|
30
|
+
/** Array de valores numéricos para la sparkline. Mín. 2 puntos. / Array of numeric values for the sparkline. Min. 2 points. */
|
|
31
|
+
sparkData: _angular_core.InputSignal<number[]>;
|
|
32
|
+
/** @internal Genera los puntos SVG de la sparkline / Generates the SVG sparkline points */
|
|
33
|
+
protected readonly sparkPoints: _angular_core.Signal<string>;
|
|
34
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NeuStatsCardComponent, never>;
|
|
35
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuStatsCardComponent, "neu-stats-card", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "change": { "alias": "change"; "required": false; "isSignal": true; }; "trend": { "alias": "trend"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "sparkData": { "alias": "sparkData"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export { NeuStatsCardComponent };
|
|
39
|
+
export type { NeuStatsTrend };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
|
|
3
|
+
interface NeuStepperStep {
|
|
4
|
+
/** Etiqueta del paso / Step label */
|
|
5
|
+
label: string;
|
|
6
|
+
/** Descripción corta opcional / Optional short description */
|
|
7
|
+
description?: string;
|
|
8
|
+
/** Marca el paso como completado externamente / Marks the step as completed externally */
|
|
9
|
+
completed?: boolean;
|
|
10
|
+
/** Desactiva el paso / Disables the step */
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* NeuralUI Stepper Component
|
|
15
|
+
*
|
|
16
|
+
* Wizard paso a paso con estado de completado, lineal u opcional.
|
|
17
|
+
* Expone métodos next() / prev() y emite stepChange.
|
|
18
|
+
*
|
|
19
|
+
* Uso:
|
|
20
|
+
* <neu-stepper [steps]="steps" [activeStep]="step" (stepChange)="step = $event">
|
|
21
|
+
* <ng-template neuStepContent>Contenido paso 1</ng-template>
|
|
22
|
+
* <ng-template neuStepContent>Contenido paso 2</ng-template>
|
|
23
|
+
* </neu-stepper>
|
|
24
|
+
*/
|
|
25
|
+
declare class NeuStepperComponent {
|
|
26
|
+
private readonly _destroyRef;
|
|
27
|
+
/** Pasos del wizard / Wizard steps */
|
|
28
|
+
steps: _angular_core.InputSignal<NeuStepperStep[]>;
|
|
29
|
+
/** Índice del paso activo (0-based) / Active step index (0-based) */
|
|
30
|
+
activeStep: _angular_core.InputSignal<number>;
|
|
31
|
+
/** Si true, solo permite ir hacia adelante secuencialmente / If true, only allows moving forward sequentially */
|
|
32
|
+
linear: _angular_core.InputSignal<boolean>;
|
|
33
|
+
/** Emite el nuevo índice al cambiar / Emits the new index on change */
|
|
34
|
+
stepChange: _angular_core.OutputEmitterRef<number>;
|
|
35
|
+
/** Set de pasos completados / Set of completed steps */
|
|
36
|
+
private readonly _completed;
|
|
37
|
+
readonly isCompact: _angular_core.WritableSignal<boolean>;
|
|
38
|
+
readonly isCompleted: (i: number) => boolean;
|
|
39
|
+
readonly stepTooltip: (step: NeuStepperStep) => string;
|
|
40
|
+
readonly stepAriaLabel: (step: NeuStepperStep) => string;
|
|
41
|
+
constructor();
|
|
42
|
+
goTo(i: number): void;
|
|
43
|
+
/** Marca el paso actual como completado y avanza al siguiente / Marks the current step as completed and advances to the next */
|
|
44
|
+
next(): void;
|
|
45
|
+
prev(): void;
|
|
46
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NeuStepperComponent, never>;
|
|
47
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuStepperComponent, "neu-stepper", never, { "steps": { "alias": "steps"; "required": false; "isSignal": true; }; "activeStep": { "alias": "activeStep"; "required": false; "isSignal": true; }; "linear": { "alias": "linear"; "required": false; "isSignal": true; }; }, { "stepChange": "stepChange"; }, never, ["*"], true, never>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export { NeuStepperComponent };
|
|
51
|
+
export type { NeuStepperStep };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* NeuralUI Switch Component
|
|
6
|
+
*
|
|
7
|
+
* Toggle animado para formularios de configuración en dashboards.
|
|
8
|
+
* Usa el Electric-Blue (--neu-primary) cuando está activo.
|
|
9
|
+
*
|
|
10
|
+
* Uso:
|
|
11
|
+
* <neu-switch label="Notificaciones" [formControl]="notifsCtrl" />
|
|
12
|
+
*/
|
|
13
|
+
declare class NeuSwitchComponent implements ControlValueAccessor {
|
|
14
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
15
|
+
readonly name: _angular_core.InputSignal<string>;
|
|
16
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
17
|
+
readonly _id: string;
|
|
18
|
+
protected readonly _checked: _angular_core.WritableSignal<boolean>;
|
|
19
|
+
/** Estado disabled interno — combina el input `disabled` con el CVA setDisabledState / Internal disabled state — combines the `disabled` input with CVA setDisabledState */
|
|
20
|
+
private readonly _cvaDisabled;
|
|
21
|
+
protected readonly _isDisabled: _angular_core.Signal<boolean>;
|
|
22
|
+
private _onChange;
|
|
23
|
+
private _onTouched;
|
|
24
|
+
onChange(event: Event): void;
|
|
25
|
+
onBlur(): void;
|
|
26
|
+
writeValue(val: unknown): void;
|
|
27
|
+
registerOnChange(fn: (v: boolean) => void): void;
|
|
28
|
+
registerOnTouched(fn: () => void): void;
|
|
29
|
+
setDisabledState(isDisabled: boolean): void;
|
|
30
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NeuSwitchComponent, never>;
|
|
31
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuSwitchComponent, "neu-switch", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { NeuSwitchComponent };
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { TemplateRef } from '@angular/core';
|
|
3
|
+
import { FormControl } from '@angular/forms';
|
|
4
|
+
import { NeuSelectOption } from '@neural-ui/core/select';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Directiva para definir el template de expansión de fila en NeuTable.
|
|
8
|
+
*
|
|
9
|
+
* Uso:
|
|
10
|
+
* ```html
|
|
11
|
+
* <neu-table [expandable]="true" [columns]="cols" [data]="rows">
|
|
12
|
+
* <ng-template neuTableExpand let-row>
|
|
13
|
+
* <div>{{ row.details }}</div>
|
|
14
|
+
* </ng-template>
|
|
15
|
+
* </neu-table>
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
declare class NeuTableExpandDirective {
|
|
19
|
+
readonly templateRef: TemplateRef<{
|
|
20
|
+
$implicit: Record<string, unknown>;
|
|
21
|
+
}>;
|
|
22
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NeuTableExpandDirective, never>;
|
|
23
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NeuTableExpandDirective, "ng-template[neuTableExpand]", never, {}, {}, never, never, true, never>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
type NeuTableBadgeVariant = 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'default';
|
|
27
|
+
interface NeuTableBadgeConfig {
|
|
28
|
+
/** Etiqueta visible. Si se omite, se muestra el valor bruto. */
|
|
29
|
+
label?: string;
|
|
30
|
+
variant: NeuTableBadgeVariant;
|
|
31
|
+
}
|
|
32
|
+
interface NeuTableAction<T = Record<string, unknown>> {
|
|
33
|
+
key: string;
|
|
34
|
+
label: string;
|
|
35
|
+
icon: string;
|
|
36
|
+
variant?: 'ghost' | 'primary' | 'danger';
|
|
37
|
+
show?: (row: T) => boolean;
|
|
38
|
+
disabled?: (row: T) => boolean;
|
|
39
|
+
/** Texto de confirmación inline. Requiere segunda pulsación. */
|
|
40
|
+
confirm?: string;
|
|
41
|
+
}
|
|
42
|
+
interface NeuTableActionEvent<T = Record<string, unknown>> {
|
|
43
|
+
action: NeuTableAction<T>;
|
|
44
|
+
row: T;
|
|
45
|
+
}
|
|
46
|
+
interface NeuTableSortEntry {
|
|
47
|
+
key: string;
|
|
48
|
+
dir: 'asc' | 'desc';
|
|
49
|
+
}
|
|
50
|
+
interface NeuTableServerState {
|
|
51
|
+
page: number;
|
|
52
|
+
pageSize: number;
|
|
53
|
+
search: string;
|
|
54
|
+
sortKey: string;
|
|
55
|
+
sortDir: 'asc' | 'desc';
|
|
56
|
+
sortEntries: NeuTableSortEntry[];
|
|
57
|
+
columnFilters: Record<string, unknown>;
|
|
58
|
+
}
|
|
59
|
+
type NeuTableCellType = 'text' | 'badge' | 'date' | 'number' | 'currency' | 'link' | 'actions';
|
|
60
|
+
interface NeuTableColumn<T = Record<string, unknown>> {
|
|
61
|
+
key: string;
|
|
62
|
+
header: string;
|
|
63
|
+
width?: string;
|
|
64
|
+
align?: 'left' | 'center' | 'right';
|
|
65
|
+
cell?: (row: T) => string;
|
|
66
|
+
cellTemplate?: TemplateRef<{
|
|
67
|
+
$implicit: T;
|
|
68
|
+
row: T;
|
|
69
|
+
column: NeuTableColumn<T>;
|
|
70
|
+
}>;
|
|
71
|
+
cellClass?: string;
|
|
72
|
+
sortable?: boolean;
|
|
73
|
+
type?: NeuTableCellType;
|
|
74
|
+
badgeMap?: Record<string, NeuTableBadgeConfig>;
|
|
75
|
+
dateFormat?: Intl.DateTimeFormatOptions;
|
|
76
|
+
locale?: string;
|
|
77
|
+
numberFormat?: Intl.NumberFormatOptions;
|
|
78
|
+
currencyCode?: string;
|
|
79
|
+
linkHref?: (row: T) => string;
|
|
80
|
+
linkTarget?: '_blank' | '_self';
|
|
81
|
+
actions?: NeuTableAction<T>[];
|
|
82
|
+
filterable?: boolean;
|
|
83
|
+
filterType?: 'text' | 'select' | 'number-range' | 'date';
|
|
84
|
+
filterOptions?: string[];
|
|
85
|
+
frozen?: 'left' | 'right';
|
|
86
|
+
headerTemplate?: TemplateRef<{
|
|
87
|
+
$implicit: NeuTableColumn<T>;
|
|
88
|
+
}>;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
type Row = Record<string, unknown>;
|
|
92
|
+
/**
|
|
93
|
+
* NeuralUI Table — Componente Estrella
|
|
94
|
+
*
|
|
95
|
+
* Tabla de datos con:
|
|
96
|
+
* - Búsqueda/filtrado → ?q=...
|
|
97
|
+
* - Paginación → ?page=...
|
|
98
|
+
* - Ordenación → ?sort=col&sortDir=asc|desc
|
|
99
|
+
* - Selección de filas (múltiple) opcional
|
|
100
|
+
* - Skeleton de carga animado
|
|
101
|
+
* - Scroll horizontal elegante en mobile (<400px)
|
|
102
|
+
*
|
|
103
|
+
* Uso básico:
|
|
104
|
+
* <neu-table [columns]="cols" [data]="rows" />
|
|
105
|
+
*
|
|
106
|
+
* Múltiples tablas por página:
|
|
107
|
+
* <neu-table pageParam="userPage" searchParam="userQ" sortParam="userSort" ... />
|
|
108
|
+
*/
|
|
109
|
+
declare class NeuTableComponent {
|
|
110
|
+
private readonly _destroyRef;
|
|
111
|
+
private readonly _urlState;
|
|
112
|
+
private readonly _platformId;
|
|
113
|
+
readonly expandTemplate: _angular_core.Signal<NeuTableExpandDirective | undefined>;
|
|
114
|
+
readonly columns: _angular_core.InputSignal<NeuTableColumn<Record<string, unknown>>[]>;
|
|
115
|
+
readonly data: _angular_core.InputSignal<object[]>;
|
|
116
|
+
readonly pageSize: _angular_core.InputSignal<number>;
|
|
117
|
+
readonly loading: _angular_core.InputSignal<boolean>;
|
|
118
|
+
readonly title: _angular_core.InputSignal<string>;
|
|
119
|
+
readonly emptyMessage: _angular_core.InputSignal<string>;
|
|
120
|
+
readonly skeletonRows: _angular_core.InputSignal<number[]>;
|
|
121
|
+
readonly searchable: _angular_core.InputSignal<boolean>;
|
|
122
|
+
readonly searchPlaceholder: _angular_core.InputSignal<string>;
|
|
123
|
+
readonly exactMatchable: _angular_core.InputSignal<boolean>;
|
|
124
|
+
readonly exactMatchLabel: _angular_core.InputSignal<string>;
|
|
125
|
+
readonly searchAriaLabel: _angular_core.InputSignal<string>;
|
|
126
|
+
readonly clearSearchAriaLabel: _angular_core.InputSignal<string>;
|
|
127
|
+
readonly clearFilterLabel: _angular_core.InputSignal<string>;
|
|
128
|
+
readonly previousPageAriaLabel: _angular_core.InputSignal<string>;
|
|
129
|
+
readonly nextPageAriaLabel: _angular_core.InputSignal<string>;
|
|
130
|
+
readonly pageSizeLabel: _angular_core.InputSignal<string>;
|
|
131
|
+
readonly pageSizeAriaLabel: _angular_core.InputSignal<string>;
|
|
132
|
+
readonly paginationAriaLabel: _angular_core.InputSignal<string>;
|
|
133
|
+
readonly exportCsvTitle: _angular_core.InputSignal<string>;
|
|
134
|
+
readonly exportJsonTitle: _angular_core.InputSignal<string>;
|
|
135
|
+
readonly clearSelectionLabel: _angular_core.InputSignal<string>;
|
|
136
|
+
readonly selectionSummaryLabel: _angular_core.InputSignal<string>;
|
|
137
|
+
readonly tableAriaLabel: _angular_core.InputSignal<string>;
|
|
138
|
+
readonly selectAllAriaLabel: _angular_core.InputSignal<string>;
|
|
139
|
+
readonly selectRowAriaLabel: _angular_core.InputSignal<string>;
|
|
140
|
+
readonly expandRowAriaLabel: _angular_core.InputSignal<string>;
|
|
141
|
+
readonly filterPlaceholder: _angular_core.InputSignal<string>;
|
|
142
|
+
readonly filterAriaPrefix: _angular_core.InputSignal<string>;
|
|
143
|
+
readonly allFilterOptionLabel: _angular_core.InputSignal<string>;
|
|
144
|
+
readonly ofLabel: _angular_core.InputSignal<string>;
|
|
145
|
+
readonly resultLabelSingular: _angular_core.InputSignal<string>;
|
|
146
|
+
readonly resultLabelPlural: _angular_core.InputSignal<string>;
|
|
147
|
+
readonly sortable: _angular_core.InputSignal<boolean>;
|
|
148
|
+
readonly selectable: _angular_core.InputSignal<boolean>;
|
|
149
|
+
readonly expandable: _angular_core.InputSignal<boolean>;
|
|
150
|
+
readonly exportable: _angular_core.InputSignal<boolean>;
|
|
151
|
+
readonly exportFileName: _angular_core.InputSignal<string>;
|
|
152
|
+
readonly pageSizeOptions: _angular_core.InputSignal<number[]>;
|
|
153
|
+
readonly stickyHeader: _angular_core.InputSignal<boolean>;
|
|
154
|
+
readonly rowKey: _angular_core.InputSignal<string>;
|
|
155
|
+
readonly density: _angular_core.InputSignal<"compact" | "normal" | "relaxed">;
|
|
156
|
+
readonly showRowNumbers: _angular_core.InputSignal<boolean>;
|
|
157
|
+
readonly rowClass: _angular_core.InputSignal<((row: Row) => string) | undefined>;
|
|
158
|
+
readonly footerRow: _angular_core.InputSignal<Record<string, string | number> | undefined>;
|
|
159
|
+
readonly emptyStateTemplate: _angular_core.InputSignal<TemplateRef<void> | undefined>;
|
|
160
|
+
readonly serverSide: _angular_core.InputSignal<boolean>;
|
|
161
|
+
readonly totalItems: _angular_core.InputSignal<number | undefined>;
|
|
162
|
+
readonly multiSort: _angular_core.InputSignal<boolean>;
|
|
163
|
+
readonly exportFormats: _angular_core.InputSignal<("csv" | "json")[]>;
|
|
164
|
+
readonly exportColumns: _angular_core.InputSignal<string[]>;
|
|
165
|
+
readonly pageParam: _angular_core.InputSignal<string>;
|
|
166
|
+
readonly searchParam: _angular_core.InputSignal<string>;
|
|
167
|
+
readonly sortParam: _angular_core.InputSignal<string>;
|
|
168
|
+
readonly sortDirParam: _angular_core.InputSignal<string>;
|
|
169
|
+
/** Param used to persist multi-sort state in the URL / Param para persistir multisort en la URL */
|
|
170
|
+
readonly multiSortParam: _angular_core.InputSignal<string>;
|
|
171
|
+
/**
|
|
172
|
+
* Activa o desactiva la sincronización de estado con los queryParams de la URL.
|
|
173
|
+
* Cuando es false, la paginación, búsqueda y ordenación se gestionan con
|
|
174
|
+
* señales internas sin tocar la URL del navegador.
|
|
175
|
+
*
|
|
176
|
+
* Enables or disables URL query-param synchronization.
|
|
177
|
+
* When false, pagination, search and sort are managed with internal signals
|
|
178
|
+
* and the browser URL is never modified.
|
|
179
|
+
*/
|
|
180
|
+
readonly useUrlState: _angular_core.InputSignal<boolean>;
|
|
181
|
+
readonly selectionChange: _angular_core.OutputEmitterRef<Row[]>;
|
|
182
|
+
readonly rowClick: _angular_core.OutputEmitterRef<Row>;
|
|
183
|
+
readonly rowDblClick: _angular_core.OutputEmitterRef<Row>;
|
|
184
|
+
readonly actionClick: _angular_core.OutputEmitterRef<NeuTableActionEvent<Row>>;
|
|
185
|
+
readonly serverStateChange: _angular_core.OutputEmitterRef<NeuTableServerState>;
|
|
186
|
+
readonly searchChange: _angular_core.OutputEmitterRef<string>;
|
|
187
|
+
private readonly _internalPage;
|
|
188
|
+
private readonly _internalSearch;
|
|
189
|
+
private readonly _internalSortKey;
|
|
190
|
+
private readonly _internalSortDir;
|
|
191
|
+
private readonly _internalMultiSort;
|
|
192
|
+
readonly currentPage: _angular_core.Signal<number>;
|
|
193
|
+
readonly searchQuery: _angular_core.Signal<string>;
|
|
194
|
+
readonly sortKey: _angular_core.Signal<string>;
|
|
195
|
+
readonly sortDir: _angular_core.Signal<"asc" | "desc">;
|
|
196
|
+
private readonly rows;
|
|
197
|
+
private readonly _exactMatch;
|
|
198
|
+
readonly exactMatch: _angular_core.Signal<boolean>;
|
|
199
|
+
/**
|
|
200
|
+
* Multi-sort entries derived from URL param or internal state.
|
|
201
|
+
* Entradas de multisort derivadas del param de URL o del estado interno.
|
|
202
|
+
*/
|
|
203
|
+
readonly _sortEntries: _angular_core.Signal<NeuTableSortEntry[]>;
|
|
204
|
+
readonly _columnFilters: _angular_core.WritableSignal<Record<string, unknown>>;
|
|
205
|
+
readonly _pageSizeControl: FormControl<string>;
|
|
206
|
+
private readonly _columnFilterControls;
|
|
207
|
+
/** True when at least one column has filterable:true / True si alguna columna tiene filterable:true */
|
|
208
|
+
readonly _hasFilterableCol: _angular_core.Signal<boolean>;
|
|
209
|
+
/** Convierte filterOptions de string[] a NeuSelectOption[] con opción "Todos" al inicio.
|
|
210
|
+
* Converts filterOptions from string[] to NeuSelectOption[] with a leading "All" option. */
|
|
211
|
+
_filterOpts(col: NeuTableColumn): NeuSelectOption[];
|
|
212
|
+
readonly _pageSizeOptions: _angular_core.Signal<NeuSelectOption[]>;
|
|
213
|
+
constructor();
|
|
214
|
+
private readonly _confirmPending;
|
|
215
|
+
private readonly _rows;
|
|
216
|
+
readonly filteredData: _angular_core.Signal<Row[]>;
|
|
217
|
+
readonly sortedData: _angular_core.Signal<Row[]>;
|
|
218
|
+
private readonly _dynamicPageSize;
|
|
219
|
+
readonly effectivePageSize: _angular_core.Signal<number>;
|
|
220
|
+
readonly totalPages: _angular_core.Signal<number>;
|
|
221
|
+
readonly paginatedData: _angular_core.Signal<Row[]>;
|
|
222
|
+
readonly pageNumbers: _angular_core.Signal<number[]>;
|
|
223
|
+
readonly paginationInfo: _angular_core.Signal<string>;
|
|
224
|
+
readonly totalColspan: _angular_core.Signal<number>;
|
|
225
|
+
/** Calcula el offset izquierdo acumulado para columnas frozen-left múltiples.
|
|
226
|
+
* Calculates cumulative left offset for multiple frozen-left columns. */
|
|
227
|
+
readonly _frozenLeftOffsets: _angular_core.Signal<Map<string, number>>;
|
|
228
|
+
readonly _lastFrozenLeftKey: _angular_core.Signal<string | null>;
|
|
229
|
+
readonly _firstFrozenRightKey: _angular_core.Signal<string>;
|
|
230
|
+
isLastFrozenLeftColumn(key: string): boolean;
|
|
231
|
+
isFirstFrozenRightColumn(key: string): boolean;
|
|
232
|
+
private readonly _expandedKeys;
|
|
233
|
+
isRowExpanded(row: Row): boolean;
|
|
234
|
+
toggleExpand(row: Row): void;
|
|
235
|
+
private readonly _selectedKeys;
|
|
236
|
+
readonly selectedCount: _angular_core.Signal<number>;
|
|
237
|
+
readonly selectedRowsInfo: _angular_core.Signal<string>;
|
|
238
|
+
/**
|
|
239
|
+
* TRUE cuando TODOS los registros que pasan el filtro activo están seleccionados.
|
|
240
|
+
* A diferencia de una selección global, actúa solo sobre el subconjunto filtrado.
|
|
241
|
+
*/
|
|
242
|
+
readonly isAllFilteredSelected: _angular_core.Signal<boolean>;
|
|
243
|
+
readonly isSomeFilteredSelected: _angular_core.Signal<boolean>;
|
|
244
|
+
isRowSelected(row: Row): boolean;
|
|
245
|
+
toggleRow(row: Row): void;
|
|
246
|
+
/** Selecciona/deselecciona SOLO los datos filtrados activos. */
|
|
247
|
+
toggleAll(): void;
|
|
248
|
+
clearSelection(): void;
|
|
249
|
+
private _emitSelection;
|
|
250
|
+
goToPage(page: number): void;
|
|
251
|
+
sortBy(key: string, event?: MouseEvent): void;
|
|
252
|
+
onRowClick(row: Row, _event: MouseEvent): void;
|
|
253
|
+
onSearch(event: Event): void;
|
|
254
|
+
clearSearch(): void;
|
|
255
|
+
onPageSizeChange(value: string | number | {
|
|
256
|
+
target?: {
|
|
257
|
+
value?: unknown;
|
|
258
|
+
};
|
|
259
|
+
} | null): void;
|
|
260
|
+
setExactMatch(value: boolean): void;
|
|
261
|
+
setColumnFilter(colKey: string, value: unknown): void;
|
|
262
|
+
clearColumnFilters(): void;
|
|
263
|
+
isConfirmPending(row: Row, action: NeuTableAction<Row>): boolean;
|
|
264
|
+
handleAction(row: Row, action: NeuTableAction<Row>): void;
|
|
265
|
+
cancelConfirm(): void;
|
|
266
|
+
exportCsv(): void;
|
|
267
|
+
exportJson(): void;
|
|
268
|
+
private _getExportColumns;
|
|
269
|
+
private _downloadBlob;
|
|
270
|
+
getRowKey(row: Row): unknown;
|
|
271
|
+
getRowClass(row: Row): string;
|
|
272
|
+
getCellValue(row: Row, col: NeuTableColumn): string;
|
|
273
|
+
getSortPriority(key: string): number;
|
|
274
|
+
columnFilterControl(key: string): FormControl<string>;
|
|
275
|
+
getColumnFilterValue(key: string): unknown;
|
|
276
|
+
private _emitServerState;
|
|
277
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NeuTableComponent, never>;
|
|
278
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuTableComponent, "neu-table", never, { "columns": { "alias": "columns"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "skeletonRows": { "alias": "skeletonRows"; "required": false; "isSignal": true; }; "searchable": { "alias": "searchable"; "required": false; "isSignal": true; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; "isSignal": true; }; "exactMatchable": { "alias": "exactMatchable"; "required": false; "isSignal": true; }; "exactMatchLabel": { "alias": "exactMatchLabel"; "required": false; "isSignal": true; }; "searchAriaLabel": { "alias": "searchAriaLabel"; "required": false; "isSignal": true; }; "clearSearchAriaLabel": { "alias": "clearSearchAriaLabel"; "required": false; "isSignal": true; }; "clearFilterLabel": { "alias": "clearFilterLabel"; "required": false; "isSignal": true; }; "previousPageAriaLabel": { "alias": "previousPageAriaLabel"; "required": false; "isSignal": true; }; "nextPageAriaLabel": { "alias": "nextPageAriaLabel"; "required": false; "isSignal": true; }; "pageSizeLabel": { "alias": "pageSizeLabel"; "required": false; "isSignal": true; }; "pageSizeAriaLabel": { "alias": "pageSizeAriaLabel"; "required": false; "isSignal": true; }; "paginationAriaLabel": { "alias": "paginationAriaLabel"; "required": false; "isSignal": true; }; "exportCsvTitle": { "alias": "exportCsvTitle"; "required": false; "isSignal": true; }; "exportJsonTitle": { "alias": "exportJsonTitle"; "required": false; "isSignal": true; }; "clearSelectionLabel": { "alias": "clearSelectionLabel"; "required": false; "isSignal": true; }; "selectionSummaryLabel": { "alias": "selectionSummaryLabel"; "required": false; "isSignal": true; }; "tableAriaLabel": { "alias": "tableAriaLabel"; "required": false; "isSignal": true; }; "selectAllAriaLabel": { "alias": "selectAllAriaLabel"; "required": false; "isSignal": true; }; "selectRowAriaLabel": { "alias": "selectRowAriaLabel"; "required": false; "isSignal": true; }; "expandRowAriaLabel": { "alias": "expandRowAriaLabel"; "required": false; "isSignal": true; }; "filterPlaceholder": { "alias": "filterPlaceholder"; "required": false; "isSignal": true; }; "filterAriaPrefix": { "alias": "filterAriaPrefix"; "required": false; "isSignal": true; }; "allFilterOptionLabel": { "alias": "allFilterOptionLabel"; "required": false; "isSignal": true; }; "ofLabel": { "alias": "ofLabel"; "required": false; "isSignal": true; }; "resultLabelSingular": { "alias": "resultLabelSingular"; "required": false; "isSignal": true; }; "resultLabelPlural": { "alias": "resultLabelPlural"; "required": false; "isSignal": true; }; "sortable": { "alias": "sortable"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "expandable": { "alias": "expandable"; "required": false; "isSignal": true; }; "exportable": { "alias": "exportable"; "required": false; "isSignal": true; }; "exportFileName": { "alias": "exportFileName"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "stickyHeader": { "alias": "stickyHeader"; "required": false; "isSignal": true; }; "rowKey": { "alias": "rowKey"; "required": false; "isSignal": true; }; "density": { "alias": "density"; "required": false; "isSignal": true; }; "showRowNumbers": { "alias": "showRowNumbers"; "required": false; "isSignal": true; }; "rowClass": { "alias": "rowClass"; "required": false; "isSignal": true; }; "footerRow": { "alias": "footerRow"; "required": false; "isSignal": true; }; "emptyStateTemplate": { "alias": "emptyStateTemplate"; "required": false; "isSignal": true; }; "serverSide": { "alias": "serverSide"; "required": false; "isSignal": true; }; "totalItems": { "alias": "totalItems"; "required": false; "isSignal": true; }; "multiSort": { "alias": "multiSort"; "required": false; "isSignal": true; }; "exportFormats": { "alias": "exportFormats"; "required": false; "isSignal": true; }; "exportColumns": { "alias": "exportColumns"; "required": false; "isSignal": true; }; "pageParam": { "alias": "pageParam"; "required": false; "isSignal": true; }; "searchParam": { "alias": "searchParam"; "required": false; "isSignal": true; }; "sortParam": { "alias": "sortParam"; "required": false; "isSignal": true; }; "sortDirParam": { "alias": "sortDirParam"; "required": false; "isSignal": true; }; "multiSortParam": { "alias": "multiSortParam"; "required": false; "isSignal": true; }; "useUrlState": { "alias": "useUrlState"; "required": false; "isSignal": true; }; }, { "selectionChange": "selectionChange"; "rowClick": "rowClick"; "rowDblClick": "rowDblClick"; "actionClick": "actionClick"; "serverStateChange": "serverStateChange"; "searchChange": "searchChange"; }, ["expandTemplate"], never, true, never>;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
export { NeuTableComponent, NeuTableExpandDirective };
|
|
282
|
+
export type { NeuTableAction, NeuTableActionEvent, NeuTableBadgeConfig, NeuTableBadgeVariant, NeuTableCellType, NeuTableColumn, NeuTableServerState, NeuTableSortEntry };
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { InjectionToken, AfterViewInit, OnDestroy } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
declare const NEU_TABS_CONTEXT: InjectionToken<NeuTabsComponent>;
|
|
5
|
+
interface NeuTab {
|
|
6
|
+
/** ID único de la pestaña — se usa como valor en la URL / Unique tab ID — used as the URL value */
|
|
7
|
+
id: string;
|
|
8
|
+
/** Etiqueta visible / Visible label */
|
|
9
|
+
label: string;
|
|
10
|
+
/** Badge opcional junto al label / Optional badge next to the label */
|
|
11
|
+
badge?: string;
|
|
12
|
+
/** Deshabilita la pestaña sin ocultarla / Disables the tab without hiding it */
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* NeuralUI Tabs Component
|
|
17
|
+
*
|
|
18
|
+
* Sistema de pestañas con estado sincronizado a la URL via NeuUrlStateService. / Tab system with state synchronized to the URL via NeuUrlStateService.
|
|
19
|
+
* El panel activo se determina por ?{tabParam}={tabId}. / The active panel is determined by ?{tabParam}={tabId}.
|
|
20
|
+
*
|
|
21
|
+
* Uso:
|
|
22
|
+
* <neu-tabs [tabs]="tabs" tabParam="tab">
|
|
23
|
+
* <neu-tab-panel tabId="preview">...</neu-tab-panel>
|
|
24
|
+
* <neu-tab-panel tabId="api">...</neu-tab-panel>
|
|
25
|
+
* </neu-tabs>
|
|
26
|
+
*/
|
|
27
|
+
declare class NeuTabsComponent implements AfterViewInit, OnDestroy {
|
|
28
|
+
private readonly urlState;
|
|
29
|
+
private readonly elRef;
|
|
30
|
+
private resizeObserver?;
|
|
31
|
+
constructor();
|
|
32
|
+
/** Definición de pestañas / Tab definitions */
|
|
33
|
+
tabs: _angular_core.InputSignal<NeuTab[]>;
|
|
34
|
+
/** QueryParam que almacena la pestaña activa / QueryParam that stores the active tab */
|
|
35
|
+
tabParam: _angular_core.InputSignal<string>;
|
|
36
|
+
/** Si true, elimina el padding interno de los paneles / If true, removes the internal padding from panels */
|
|
37
|
+
flush: _angular_core.InputSignal<boolean>;
|
|
38
|
+
/** Etiqueta accesible del rol tablist / Accessible label for the tablist role */
|
|
39
|
+
ariaLabel: _angular_core.InputSignal<string>;
|
|
40
|
+
/** Emite al cambiar de pestaña / Emits when the tab changes */
|
|
41
|
+
tabChange: _angular_core.OutputEmitterRef<string>;
|
|
42
|
+
/** ID de la pestaña activa (de la URL o la primera disponible) / Active tab ID (from the URL or the first available) */
|
|
43
|
+
readonly activeTabId: _angular_core.Signal<string>;
|
|
44
|
+
/** Posición del indicador calculada mediante medición DOM / Indicator position calculated via DOM measurement */
|
|
45
|
+
private readonly _indicatorLeft;
|
|
46
|
+
private readonly _indicatorWidth;
|
|
47
|
+
readonly indicatorStyle: _angular_core.Signal<string>;
|
|
48
|
+
ngAfterViewInit(): void;
|
|
49
|
+
ngOnDestroy(): void;
|
|
50
|
+
private _updateIndicator;
|
|
51
|
+
selectTab(tab: NeuTab): void;
|
|
52
|
+
/** 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) */
|
|
53
|
+
focusTab(event: Event, dir: 1 | -1 | 'first' | 'last'): void;
|
|
54
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NeuTabsComponent, never>;
|
|
55
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuTabsComponent, "neu-tabs", never, { "tabs": { "alias": "tabs"; "required": false; "isSignal": true; }; "tabParam": { "alias": "tabParam"; "required": false; "isSignal": true; }; "flush": { "alias": "flush"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "tabChange": "tabChange"; }, never, ["*"], true, never>;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* NeuralUI Tab Panel
|
|
59
|
+
*
|
|
60
|
+
* Panel de contenido asociado a una pestaña de NeuTabsComponent. / Content panel associated with a NeuTabsComponent tab.
|
|
61
|
+
* Solo se renderiza (no oculta con CSS) cuando la pestaña está activa. / Only rendered (not hidden with CSS) when the tab is active.
|
|
62
|
+
*
|
|
63
|
+
* Uso: hijo directo de <neu-tabs>
|
|
64
|
+
* <neu-tab-panel tabId="api">...</neu-tab-panel>
|
|
65
|
+
*/
|
|
66
|
+
declare class NeuTabPanelComponent {
|
|
67
|
+
private readonly tabs;
|
|
68
|
+
/** ID que debe coincidir con NeuTab.id del padre / ID that must match the parent NeuTab.id */
|
|
69
|
+
tabId: _angular_core.InputSignal<string>;
|
|
70
|
+
readonly isActive: _angular_core.Signal<boolean>;
|
|
71
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NeuTabPanelComponent, never>;
|
|
72
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuTabPanelComponent, "neu-tab-panel", never, { "tabId": { "alias": "tabId"; "required": true; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export { NEU_TABS_CONTEXT, NeuTabPanelComponent, NeuTabsComponent };
|
|
76
|
+
export type { NeuTab };
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { ControlValueAccessor } from '@angular/forms';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* NeuralUI Textarea Component
|
|
6
|
+
*
|
|
7
|
+
* Textarea con floating label y soporte completo para Angular Forms.
|
|
8
|
+
* Soporta auto-resize opcional.
|
|
9
|
+
*
|
|
10
|
+
* Uso:
|
|
11
|
+
* <neu-textarea label="Descripción" [formControl]="ctrl" />
|
|
12
|
+
* <neu-textarea label="Bio" [rows]="5" [autoResize]="true" />
|
|
13
|
+
*/
|
|
14
|
+
declare class NeuTextareaComponent implements ControlValueAccessor {
|
|
15
|
+
readonly label: _angular_core.InputSignal<string>;
|
|
16
|
+
readonly rows: _angular_core.InputSignal<number>;
|
|
17
|
+
/** Tamaño del campo: 'sm' = compacto | 'md' = estándar | 'lg' = grande / Field size */
|
|
18
|
+
readonly size: _angular_core.InputSignal<"sm" | "md" | "lg">;
|
|
19
|
+
readonly autoResize: _angular_core.InputSignal<boolean>;
|
|
20
|
+
/** Permite al usuario redimensionar el campo manualmente (por defecto: true) / Allows the user to manually resize the field (default: true) */
|
|
21
|
+
readonly resizable: _angular_core.InputSignal<boolean>;
|
|
22
|
+
readonly errorMessage: _angular_core.InputSignal<string>;
|
|
23
|
+
readonly hint: _angular_core.InputSignal<string>;
|
|
24
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
25
|
+
readonly readonly: _angular_core.InputSignal<boolean>;
|
|
26
|
+
readonly required: _angular_core.InputSignal<boolean>;
|
|
27
|
+
readonly name: _angular_core.InputSignal<string>;
|
|
28
|
+
readonly maxlength: _angular_core.InputSignal<number | null>;
|
|
29
|
+
readonly _id: string;
|
|
30
|
+
protected readonly _value: _angular_core.WritableSignal<string>;
|
|
31
|
+
protected readonly _focused: _angular_core.WritableSignal<boolean>;
|
|
32
|
+
protected readonly _isDisabled: _angular_core.WritableSignal<boolean>;
|
|
33
|
+
readonly _isDisabledState: _angular_core.Signal<boolean>;
|
|
34
|
+
readonly hasValue: _angular_core.Signal<boolean>;
|
|
35
|
+
readonly hasError: _angular_core.Signal<boolean>;
|
|
36
|
+
readonly _resizeStyle: _angular_core.Signal<"none" | "vertical">;
|
|
37
|
+
private readonly _textareaRef;
|
|
38
|
+
private _onChange;
|
|
39
|
+
private _onTouched;
|
|
40
|
+
constructor();
|
|
41
|
+
onInput(event: Event): void;
|
|
42
|
+
onFocus(): void;
|
|
43
|
+
onBlur(): void;
|
|
44
|
+
writeValue(val: unknown): void;
|
|
45
|
+
registerOnChange(fn: (v: string) => void): void;
|
|
46
|
+
registerOnTouched(fn: () => void): void;
|
|
47
|
+
setDisabledState(isDisabled: boolean): void;
|
|
48
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NeuTextareaComponent, never>;
|
|
49
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NeuTextareaComponent, "neu-textarea", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "rows": { "alias": "rows"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "autoResize": { "alias": "autoResize"; "required": false; "isSignal": true; }; "resizable": { "alias": "resizable"; "required": false; "isSignal": true; }; "errorMessage": { "alias": "errorMessage"; "required": false; "isSignal": true; }; "hint": { "alias": "hint"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "maxlength": { "alias": "maxlength"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export { NeuTextareaComponent };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
|
|
3
|
+
type NeuTimelineItemVariant = 'default' | 'success' | 'warning' | 'danger' | 'info';
|
|
4
|
+
interface NeuTimelineItem {
|
|
5
|
+
/** Etiqueta de tiempo (ej. "Hace 2h", "12 Mar") / Time label (e.g. "2h ago", "Mar 12") */
|
|
6
|
+
time?: string;
|
|
7
|
+
/** Título del evento / Event title */
|
|
8
|
+
title: string;
|
|
9
|
+
/** Descripción opcional / Optional description */
|
|
10
|
+
description?: string;
|
|
11
|
+
/** Variante de color del punto / Dot color variant */
|
|
12
|
+
variant?: NeuTimelineItemVariant;
|
|
13
|
+
/** Icono SVG path opcional / Optional SVG path icon */
|
|
14
|
+
icon?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* NeuralUI Timeline Component
|
|
18
|
+
*
|
|
19
|
+
* Lista vertical de eventos cronológicos con línea conectora. / Vertical list of chronological events with a connector line.
|
|
20
|
+
*
|
|
21
|
+
* Uso:
|
|
22
|
+
* <neu-timeline [items]="events" />
|
|
23
|
+
* <neu-timeline [items]="events" align="right" />
|
|
24
|
+
*/
|
|
25
|
+
declare class NeuTimelineComponent {
|
|
26
|
+
/** Eventos a mostrar / Events to display */
|
|
27
|
+
items: i0.InputSignal<NeuTimelineItem[]>;
|
|
28
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NeuTimelineComponent, never>;
|
|
29
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NeuTimelineComponent, "neu-timeline", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export { NeuTimelineComponent };
|
|
33
|
+
export type { NeuTimelineItem, NeuTimelineItemVariant };
|