@litigiovirtual/ius-design-components 2.0.2 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -14
- package/fesm2022/litigiovirtual-ius-design-components-utils.mjs.map +1 -1
- package/fesm2022/litigiovirtual-ius-design-components.mjs +2184 -102
- package/fesm2022/litigiovirtual-ius-design-components.mjs.map +1 -1
- package/package.json +1 -1
- package/types/litigiovirtual-ius-design-components.d.ts +1351 -26
|
@@ -2221,7 +2221,7 @@ declare class TextComponent {
|
|
|
2221
2221
|
/** Overrides por token (color/weight/align/italic-inline/tabular/truncate). */
|
|
2222
2222
|
protected get styleObject(): Record<string, string>;
|
|
2223
2223
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextComponent, never>;
|
|
2224
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextComponent, "ius-text", never, { "variant": { "alias": "variant"; "required": false; }; "color": { "alias": "color"; "required": false; }; "weight": { "alias": "weight"; "required": false; }; "as": { "alias": "as"; "required": false; }; "align": { "alias": "align"; "required": false; }; "italic": { "alias": "italic"; "required": false; }; "truncate": { "alias": "truncate"; "required": false; }; "tabularNums": { "alias": "tabularNums"; "required": false; }; "for": { "alias": "for"; "required": false; }; }, {}, never, ["*"
|
|
2224
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextComponent, "ius-text", never, { "variant": { "alias": "variant"; "required": false; }; "color": { "alias": "color"; "required": false; }; "weight": { "alias": "weight"; "required": false; }; "as": { "alias": "as"; "required": false; }; "align": { "alias": "align"; "required": false; }; "italic": { "alias": "italic"; "required": false; }; "truncate": { "alias": "truncate"; "required": false; }; "tabularNums": { "alias": "tabularNums"; "required": false; }; "for": { "alias": "for"; "required": false; }; }, {}, never, ["*"], true, never>;
|
|
2225
2225
|
static ngAcceptInputType_italic: unknown;
|
|
2226
2226
|
static ngAcceptInputType_truncate: unknown;
|
|
2227
2227
|
static ngAcceptInputType_tabularNums: unknown;
|
|
@@ -2365,6 +2365,12 @@ interface SelectOptionGroup {
|
|
|
2365
2365
|
label: string;
|
|
2366
2366
|
options: SelectOption[];
|
|
2367
2367
|
}
|
|
2368
|
+
/**
|
|
2369
|
+
* Fábrica de opciones para `creatable`: recibe el texto escrito en el pie del
|
|
2370
|
+
* menú y devuelve la opción a insertar. Devolver `void`/`undefined` usa el
|
|
2371
|
+
* texto como `value` y `label` (espejo de `onCreate` del golden).
|
|
2372
|
+
*/
|
|
2373
|
+
type IusSelectCreateFactory = (label: string) => SelectOption | void;
|
|
2368
2374
|
interface VisibleGroup {
|
|
2369
2375
|
label: string | null;
|
|
2370
2376
|
items: {
|
|
@@ -2381,9 +2387,10 @@ interface VisibleModel {
|
|
|
2381
2387
|
*
|
|
2382
2388
|
* Campo desplegable que reúne el shell del **TextField** (label + required +
|
|
2383
2389
|
* iconHelp + prefixIcon + sufix chevron + estados + helpText/errorText, `size`)
|
|
2384
|
-
* y abre un menú con **scroll**, **búsqueda en vivo** (caja dentro del menú)
|
|
2385
|
-
* **selección única o múltiple
|
|
2386
|
-
*
|
|
2390
|
+
* y abre un menú con **scroll**, **búsqueda en vivo** (caja dentro del menú),
|
|
2391
|
+
* **selección única o múltiple** y —con `creatable`— un **pie para agregar
|
|
2392
|
+
* opciones nuevas en vivo**. Implementa `ControlValueAccessor` completo (valor
|
|
2393
|
+
* escalar en single / array en múltiple) y además soporta `[(value)]`.
|
|
2387
2394
|
*
|
|
2388
2395
|
* - Single: muestra la etiqueta elegida; la opción se resalta en azul (fill).
|
|
2389
2396
|
* - Múltiple: chips removibles dentro del campo + check por opción elegida.
|
|
@@ -2393,9 +2400,10 @@ interface VisibleModel {
|
|
|
2393
2400
|
* Notas del port a Angular:
|
|
2394
2401
|
* - El shell `.ius-tf` del TextField está *scoped* (`:host`) en su componente,
|
|
2395
2402
|
* así que su CSS se re-porta aquí (mismo patrón que el resto del monorepo).
|
|
2396
|
-
* - El golden compone `OptionItem` (filas)
|
|
2397
|
-
*
|
|
2398
|
-
*
|
|
2403
|
+
* - El golden compone `OptionItem` (filas), `Chip` (chips de múltiple),
|
|
2404
|
+
* `Popover` (ícono de ayuda) y `TextButton` (acción del pie `creatable`):
|
|
2405
|
+
* todos ya portados, se componen aquí como `ius-option-item` / `ius-chip` /
|
|
2406
|
+
* `ius-popover` / `ius-text-button` (sin CSS inlineado ni reimplementación).
|
|
2399
2407
|
* - El menú se portalea a `document.body` vía **CDK Overlay**
|
|
2400
2408
|
* (`flexibleConnectedTo` el trigger + `scrollStrategy: reposition`), con
|
|
2401
2409
|
* flip abajo/arriba e igualando el ancho del campo — espejo de
|
|
@@ -2403,6 +2411,24 @@ interface VisibleModel {
|
|
|
2403
2411
|
* estilos del menú siguen aplicando dentro del overlay porque Angular
|
|
2404
2412
|
* inyecta el `<style>` scopeado en el `<head>` global (mismo patrón que
|
|
2405
2413
|
* `ius-modal`, ver `src/lib/modal/modal.component.ts`).
|
|
2414
|
+
*
|
|
2415
|
+
* **Creatable — decisiones del port** (para diseño):
|
|
2416
|
+
* - El golden implementa `creatable` como un **pie propio del menú** con su
|
|
2417
|
+
* campo de texto (`draft`) + `TextButton prefixIcon="add"`, *independiente*
|
|
2418
|
+
* de la caja de búsqueda (conviven). NO es el patrón «la opción nueva
|
|
2419
|
+
* aparece dentro de la lista cuando la búsqueda no matchea ninguna opción»;
|
|
2420
|
+
* si diseño quisiera ese otro patrón, primero hay que cambiar el golden.
|
|
2421
|
+
* - `onCreate` del golden **retorna** la opción a insertar. Un `EventEmitter`
|
|
2422
|
+
* de Angular no puede devolver un valor al emisor, así que el contrato se
|
|
2423
|
+
* parte en dos: `createFactory` (input — la mitad que retorna) + `created`
|
|
2424
|
+
* (output — la mitad que avisa). Ver el TSDoc de cada uno.
|
|
2425
|
+
*
|
|
2426
|
+
* **Divergencia doc-vs-golden anotada** (manda el golden):
|
|
2427
|
+
* - `listMaxH` usa la escala de fila del golden (32/38/46 px por
|
|
2428
|
+
* small/medium/large). El box-model real de `OptionItem` da 32/36/42; el
|
|
2429
|
+
* golden la llama «approx option row height by size» y deja aire de sobra
|
|
2430
|
+
* para el `gap` entre filas. Se conserva la del golden para que `maxVisible`
|
|
2431
|
+
* recorte igual que en el DS.
|
|
2406
2432
|
*/
|
|
2407
2433
|
declare class SelectComponent implements ControlValueAccessor, OnInit, OnDestroy {
|
|
2408
2434
|
private readonly optionsState;
|
|
@@ -2453,6 +2479,26 @@ declare class SelectComponent implements ControlValueAccessor, OnInit, OnDestroy
|
|
|
2453
2479
|
searchPlaceholder: string;
|
|
2454
2480
|
/** Mensaje cuando la búsqueda no arroja resultados. */
|
|
2455
2481
|
emptyText: string;
|
|
2482
|
+
/**
|
|
2483
|
+
* Permitir **agregar opciones** desde un pie dentro del menú (campo de texto
|
|
2484
|
+
* + botón «Agregar» con ícono `add`). Las opciones nuevas se anexan a la
|
|
2485
|
+
* lista en vivo —a un grupo sin encabezado al final si la lista está
|
|
2486
|
+
* agrupada— y no duplican `value` existentes. Convive con `searchable`.
|
|
2487
|
+
*/
|
|
2488
|
+
creatable: boolean;
|
|
2489
|
+
/** Placeholder del campo de «agregar» (solo con `creatable`). */
|
|
2490
|
+
createPlaceholder: string;
|
|
2491
|
+
/** Texto del botón de «agregar» (solo con `creatable`). */
|
|
2492
|
+
createLabel: string;
|
|
2493
|
+
/**
|
|
2494
|
+
* Fábrica de la opción a insertar — equivalente Angular de `onCreate` del
|
|
2495
|
+
* golden, que **retorna** la opción. Un `EventEmitter` no puede devolver un
|
|
2496
|
+
* valor al emisor, así que la mitad «que retorna» del contrato vive aquí
|
|
2497
|
+
* como input y la mitad «que avisa» vive en el output `created`.
|
|
2498
|
+
* Recibe el texto escrito (ya con `trim`) y devuelve `{value,label,icon?}`;
|
|
2499
|
+
* devolver `void`/`undefined` usa el texto como `value` y `label`.
|
|
2500
|
+
*/
|
|
2501
|
+
createFactory?: IusSelectCreateFactory;
|
|
2456
2502
|
/** Opciones visibles antes de hacer scroll. */
|
|
2457
2503
|
maxVisible: number;
|
|
2458
2504
|
/** Texto de ayuda bajo el campo (estado normal). */
|
|
@@ -2461,11 +2507,11 @@ declare class SelectComponent implements ControlValueAccessor, OnInit, OnDestroy
|
|
|
2461
2507
|
errorText?: string;
|
|
2462
2508
|
/** Mostrar/ocultar el texto de ayuda. */
|
|
2463
2509
|
showHelpText: boolean;
|
|
2464
|
-
/** Ícono de ayuda `?` junto al label. */
|
|
2510
|
+
/** Ícono de ayuda `?` junto al label (abre `ius-popover` al hover/foco). */
|
|
2465
2511
|
showIconHelp: boolean;
|
|
2466
|
-
/** Título del
|
|
2512
|
+
/** Título del popover de ayuda. */
|
|
2467
2513
|
iconHelpTitle?: string;
|
|
2468
|
-
/** Cuerpo del
|
|
2514
|
+
/** Cuerpo del popover de ayuda. */
|
|
2469
2515
|
iconHelpContent?: string;
|
|
2470
2516
|
/**
|
|
2471
2517
|
* Mostrar el botón de limpiar (`cancel`). Solo aparece con valor y campo
|
|
@@ -2488,19 +2534,37 @@ declare class SelectComponent implements ControlValueAccessor, OnInit, OnDestroy
|
|
|
2488
2534
|
readonly cleared: EventEmitter<void>;
|
|
2489
2535
|
/** Cambio de apertura del menú (original `onOpenChange`). */
|
|
2490
2536
|
readonly openChange: EventEmitter<boolean>;
|
|
2537
|
+
/**
|
|
2538
|
+
* Opción agregada por `creatable` — mitad «aviso» del `onCreate` del golden
|
|
2539
|
+
* (la mitad «que retorna la opción» es el input `createFactory`). Solo emite
|
|
2540
|
+
* cuando la opción se anexó de verdad: un texto cuyo `value` ya existe en la
|
|
2541
|
+
* lista no emite nada.
|
|
2542
|
+
*/
|
|
2543
|
+
readonly created: EventEmitter<SelectOption>;
|
|
2491
2544
|
private readonly internalOpen;
|
|
2492
2545
|
protected readonly query: _angular_core.WritableSignal<string>;
|
|
2493
2546
|
protected readonly activeIndex: _angular_core.WritableSignal<number>;
|
|
2547
|
+
/** Texto en curso del pie `creatable` (se limpia al agregar y al cerrar). */
|
|
2548
|
+
protected readonly draft: _angular_core.WritableSignal<string>;
|
|
2549
|
+
/** Opciones agregadas en vivo por `creatable` (se anexan a `options`). */
|
|
2550
|
+
private readonly createdOptions;
|
|
2494
2551
|
/** Ancho del menú (portal CDK) — igualado al ancho del campo. */
|
|
2495
2552
|
protected readonly menuWidth: _angular_core.WritableSignal<number>;
|
|
2496
2553
|
private readonly field;
|
|
2497
2554
|
private readonly menu;
|
|
2498
2555
|
private readonly search;
|
|
2556
|
+
private readonly createInput;
|
|
2499
2557
|
private readonly menuTpl;
|
|
2500
|
-
|
|
2501
|
-
|
|
2558
|
+
/**
|
|
2559
|
+
* `id` de respaldo. `baseId` NO puede ser un inicializador de campo: esos
|
|
2560
|
+
* corren en el constructor, antes de que Angular asigne los `@Input`, así que
|
|
2561
|
+
* `this.id` valdría siempre `undefined` y el `id` del consumidor se perdería.
|
|
2562
|
+
*/
|
|
2563
|
+
private readonly fallbackId;
|
|
2564
|
+
protected get baseId(): string;
|
|
2565
|
+
protected get helpId(): string;
|
|
2502
2566
|
/** `id` único del menú — target de `aria-controls` en el trigger. */
|
|
2503
|
-
protected
|
|
2567
|
+
protected get menuId(): string;
|
|
2504
2568
|
private onChange;
|
|
2505
2569
|
private onTouched;
|
|
2506
2570
|
private readonly overlay;
|
|
@@ -2511,31 +2575,65 @@ declare class SelectComponent implements ControlValueAccessor, OnInit, OnDestroy
|
|
|
2511
2575
|
private typeaheadTimer;
|
|
2512
2576
|
protected readonly isDisabled: _angular_core.Signal<boolean>;
|
|
2513
2577
|
protected readonly isError: _angular_core.Signal<boolean>;
|
|
2578
|
+
/**
|
|
2579
|
+
* Apertura efectiva. `state="open"` entra aquí (y no solo en `ngOnInit`) para
|
|
2580
|
+
* que forzar el estado desde un especimen funcione en caliente, igual que el
|
|
2581
|
+
* card remontado del proyecto de diseño.
|
|
2582
|
+
*/
|
|
2514
2583
|
protected readonly isOpen: _angular_core.Signal<boolean>;
|
|
2515
2584
|
/** `data-focused` del host (espejo del golden): abierto, forzado o error. */
|
|
2516
2585
|
protected readonly focusedAttr: _angular_core.Signal<true | null>;
|
|
2586
|
+
/**
|
|
2587
|
+
* Opciones efectivas = las de `options` + las agregadas en vivo por
|
|
2588
|
+
* `creatable`. Si la lista viene agrupada, las nuevas van a un grupo sin
|
|
2589
|
+
* encabezado al final (espejo de `mergedOptions` del golden).
|
|
2590
|
+
*/
|
|
2591
|
+
private readonly mergedOptions;
|
|
2517
2592
|
private readonly allFlat;
|
|
2518
2593
|
protected readonly visible: _angular_core.Signal<VisibleModel>;
|
|
2594
|
+
/** El botón «Agregar» se habilita solo con texto no vacío (golden). */
|
|
2595
|
+
protected readonly createDisabled: _angular_core.Signal<boolean>;
|
|
2519
2596
|
protected readonly hasValue: _angular_core.Signal<boolean>;
|
|
2520
2597
|
protected readonly valueArray: _angular_core.Signal<IusSelectValue[]>;
|
|
2521
2598
|
protected readonly singleValue: _angular_core.Signal<IusSelectValue | null>;
|
|
2522
2599
|
protected get hint(): string | undefined;
|
|
2523
2600
|
protected get showHint(): boolean;
|
|
2524
2601
|
protected get showClearComputed(): boolean;
|
|
2525
|
-
protected get helpIconTitle(): string | undefined;
|
|
2526
2602
|
/**
|
|
2527
|
-
*
|
|
2528
|
-
* de
|
|
2529
|
-
*
|
|
2530
|
-
*
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2603
|
+
* ¿El campo es "clearable-capable"? Espejo de `clearReserved` del golden: solo
|
|
2604
|
+
* entonces el botón de limpiar entra en el flujo (y dentro de ese caso el slot
|
|
2605
|
+
* se reserva con `visibility`). Con `showClear=false` o `disabled` el golden no
|
|
2606
|
+
* pinta el botón, así que tampoco debe quedar el hueco.
|
|
2607
|
+
*/
|
|
2608
|
+
protected get clearReserved(): boolean;
|
|
2609
|
+
/** El popover de ayuda solo tiene sentido con título o contenido. */
|
|
2610
|
+
protected get iconHelpEmpty(): boolean;
|
|
2611
|
+
/**
|
|
2612
|
+
* Tamaño de los chips de múltiple. El golden usa un chip **más pequeño que
|
|
2613
|
+
* el campo**: `large → medium`, el resto `small`
|
|
2614
|
+
* (`chipSize` en `Select.jsx`).
|
|
2615
|
+
*/
|
|
2616
|
+
protected get chipSize(): 'small' | 'medium';
|
|
2617
|
+
/** Tamaño del `TextButton` del pie `creatable` (golden: `large → medium`). */
|
|
2618
|
+
protected get createButtonSize(): 'small' | 'medium';
|
|
2619
|
+
/**
|
|
2620
|
+
* Alto de fila usado para `maxVisible × itemH`. Escala del golden
|
|
2621
|
+
* (`Select.jsx`: «approx option row height by size») — small 32 · medium 38
|
|
2622
|
+
* · large 46 px. Es una aproximación *deliberadamente* mayor que el
|
|
2623
|
+
* box-model real de `OptionItem` (`--_opt-py`×2 + `--ius-lh-base` = 32/36/42)
|
|
2624
|
+
* porque deja aire para el `gap` (`--ius-space-xxs`) entre filas de
|
|
2625
|
+
* `.ius-selectmenu__list`. Constante estructural del golden, no medida en
|
|
2534
2626
|
* runtime.
|
|
2535
2627
|
*/
|
|
2536
2628
|
protected get listMaxH(): number;
|
|
2537
2629
|
protected labelFor(val: IusSelectValue): string;
|
|
2538
2630
|
protected isChosen(val: IusSelectValue): boolean;
|
|
2631
|
+
/**
|
|
2632
|
+
* Única fuente del ciclo de vida del overlay: se monta y se desmonta según
|
|
2633
|
+
* `isOpen()`, venga de donde venga (interno, `[open]` controlado o
|
|
2634
|
+
* `state="open"` de un especimen). `attachOverlay` ya es idempotente.
|
|
2635
|
+
*/
|
|
2636
|
+
private readonly openSync;
|
|
2539
2637
|
ngOnInit(): void;
|
|
2540
2638
|
ngOnDestroy(): void;
|
|
2541
2639
|
writeValue(value: IusSelectValue | IusSelectValue[] | null): void;
|
|
@@ -2547,13 +2645,44 @@ declare class SelectComponent implements ControlValueAccessor, OnInit, OnDestroy
|
|
|
2547
2645
|
protected removeChip(val: IusSelectValue): void;
|
|
2548
2646
|
protected clear(event: Event): void;
|
|
2549
2647
|
protected toggleOpen(): void;
|
|
2648
|
+
/**
|
|
2649
|
+
* Solo actualiza estado y notifica. El montaje/desmontaje del overlay NO va
|
|
2650
|
+
* aquí: lo gobierna `openSync` a partir de `isOpen()`. Si se hiciera aquí, en
|
|
2651
|
+
* modo controlado (`[open]`) el menú se abriría sin permiso del padre y, al
|
|
2652
|
+
* revés, cambiar `[open]` desde fuera no montaría nada.
|
|
2653
|
+
*/
|
|
2550
2654
|
private setOpen;
|
|
2655
|
+
/**
|
|
2656
|
+
* El alto del menú cambió (filtro de búsqueda, alta de una opción por el pie
|
|
2657
|
+
* `creatable`): re-evalúa flip/posición del overlay en el siguiente frame,
|
|
2658
|
+
* cuando el DOM ya midió el alto nuevo.
|
|
2659
|
+
*/
|
|
2660
|
+
private schedulePositionUpdate;
|
|
2551
2661
|
protected onSearch(event: Event): void;
|
|
2662
|
+
protected onCreateInput(event: Event): void;
|
|
2663
|
+
/**
|
|
2664
|
+
* `Enter` agrega la opción; `Escape` **con texto** solo limpia el borrador y
|
|
2665
|
+
* frena la propagación para que el listener de `document` no cierre el menú
|
|
2666
|
+
* (espejo del golden). Sin texto, `Escape` sigue cerrando el menú.
|
|
2667
|
+
*/
|
|
2668
|
+
protected onCreateKeyDown(event: KeyboardEvent): void;
|
|
2669
|
+
/**
|
|
2670
|
+
* Agrega la opción escrita en el pie: la construye con `createFactory` (o
|
|
2671
|
+
* envuelve el texto), la anexa si su `value` no existe ya, emite `created`,
|
|
2672
|
+
* limpia el borrador y devuelve el foco al campo del pie.
|
|
2673
|
+
*/
|
|
2674
|
+
protected addItem(): void;
|
|
2552
2675
|
private moveActive;
|
|
2553
2676
|
/**
|
|
2554
2677
|
* ¿Es una tecla imprimible de una sola posición (typeahead)? Se ignora
|
|
2555
|
-
* cuando el foco está en
|
|
2556
|
-
*
|
|
2678
|
+
* cuando el foco está en una caja de texto del menú — la de búsqueda **o**
|
|
2679
|
+
* la del pie `creatable`: ahí escribir filtra o redacta el nombre nuevo, y
|
|
2680
|
+
* mover el resaltado sería un efecto colateral indeseado. También se ignora
|
|
2681
|
+
* con modificadores (Ctrl/Alt/Meta).
|
|
2682
|
+
*
|
|
2683
|
+
* (Hoy el pie de `creatable` no enruta a `onTriggerKeyDown` —vive en el
|
|
2684
|
+
* overlay y tiene su propio handler—, pero la guarda se deja explícita para
|
|
2685
|
+
* que reenrutarlo mañana no reintroduzca el bug.)
|
|
2557
2686
|
*/
|
|
2558
2687
|
private isTypeaheadKey;
|
|
2559
2688
|
/** Quita diacríticos y normaliza a minúsculas para comparar etiquetas. */
|
|
@@ -2575,13 +2704,14 @@ declare class SelectComponent implements ControlValueAccessor, OnInit, OnDestroy
|
|
|
2575
2704
|
private updateMenuWidth;
|
|
2576
2705
|
private readonly onWindowResize;
|
|
2577
2706
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectComponent, never>;
|
|
2578
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent, "ius-select", never, { "options": { "alias": "options"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "error": { "alias": "error"; "required": false; }; "state": { "alias": "state"; "required": false; }; "open": { "alias": "open"; "required": false; }; "value": { "alias": "value"; "required": false; }; "label": { "alias": "label"; "required": false; }; "required": { "alias": "required"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "prefixIcon": { "alias": "prefixIcon"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; "emptyText": { "alias": "emptyText"; "required": false; }; "maxVisible": { "alias": "maxVisible"; "required": false; }; "helpText": { "alias": "helpText"; "required": false; }; "errorText": { "alias": "errorText"; "required": false; }; "showHelpText": { "alias": "showHelpText"; "required": false; }; "showIconHelp": { "alias": "showIconHelp"; "required": false; }; "iconHelpTitle": { "alias": "iconHelpTitle"; "required": false; }; "iconHelpContent": { "alias": "iconHelpContent"; "required": false; }; "showClear": { "alias": "showClear"; "required": false; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; }; "compact": { "alias": "compact"; "required": false; }; "defaultValue": { "alias": "defaultValue"; "required": false; }; "id": { "alias": "id"; "required": false; }; "name": { "alias": "name"; "required": false; }; }, { "valueChange": "valueChange"; "cleared": "cleared"; "openChange": "openChange"; }, never, never, true, never>;
|
|
2707
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SelectComponent, "ius-select", never, { "options": { "alias": "options"; "required": false; }; "multiple": { "alias": "multiple"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "error": { "alias": "error"; "required": false; }; "state": { "alias": "state"; "required": false; }; "open": { "alias": "open"; "required": false; }; "value": { "alias": "value"; "required": false; }; "label": { "alias": "label"; "required": false; }; "required": { "alias": "required"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "prefixIcon": { "alias": "prefixIcon"; "required": false; }; "searchable": { "alias": "searchable"; "required": false; }; "searchPlaceholder": { "alias": "searchPlaceholder"; "required": false; }; "emptyText": { "alias": "emptyText"; "required": false; }; "creatable": { "alias": "creatable"; "required": false; }; "createPlaceholder": { "alias": "createPlaceholder"; "required": false; }; "createLabel": { "alias": "createLabel"; "required": false; }; "createFactory": { "alias": "createFactory"; "required": false; }; "maxVisible": { "alias": "maxVisible"; "required": false; }; "helpText": { "alias": "helpText"; "required": false; }; "errorText": { "alias": "errorText"; "required": false; }; "showHelpText": { "alias": "showHelpText"; "required": false; }; "showIconHelp": { "alias": "showIconHelp"; "required": false; }; "iconHelpTitle": { "alias": "iconHelpTitle"; "required": false; }; "iconHelpContent": { "alias": "iconHelpContent"; "required": false; }; "showClear": { "alias": "showClear"; "required": false; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; }; "compact": { "alias": "compact"; "required": false; }; "defaultValue": { "alias": "defaultValue"; "required": false; }; "id": { "alias": "id"; "required": false; }; "name": { "alias": "name"; "required": false; }; }, { "valueChange": "valueChange"; "cleared": "cleared"; "openChange": "openChange"; "created": "created"; }, never, never, true, never>;
|
|
2579
2708
|
static ngAcceptInputType_multiple: unknown;
|
|
2580
2709
|
static ngAcceptInputType_disabled: unknown;
|
|
2581
2710
|
static ngAcceptInputType_error: unknown;
|
|
2582
2711
|
static ngAcceptInputType_open: unknown;
|
|
2583
2712
|
static ngAcceptInputType_required: unknown;
|
|
2584
2713
|
static ngAcceptInputType_searchable: unknown;
|
|
2714
|
+
static ngAcceptInputType_creatable: unknown;
|
|
2585
2715
|
static ngAcceptInputType_maxVisible: unknown;
|
|
2586
2716
|
static ngAcceptInputType_showHelpText: unknown;
|
|
2587
2717
|
static ngAcceptInputType_showIconHelp: unknown;
|
|
@@ -3002,5 +3132,1200 @@ declare class DividerComponent implements AfterViewInit {
|
|
|
3002
3132
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DividerComponent, "ius-divider", never, { "orientation": { "alias": "orientation"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; "textAlign": { "alias": "textAlign"; "required": false; }; }, {}, never, ["*"], true, never>;
|
|
3003
3133
|
}
|
|
3004
3134
|
|
|
3005
|
-
|
|
3006
|
-
|
|
3135
|
+
/** Tratamiento del indicador: punto de color · píldora tonal · píldora neutra. */
|
|
3136
|
+
type IusInsigniaVariant = 'dot' | 'count' | 'count-soft';
|
|
3137
|
+
/** Familia de color: 6 semánticas + 6 frutas categóricas. */
|
|
3138
|
+
type IusInsigniaTone = 'primary' | 'info' | 'success' | 'warning' | 'danger' | 'neutral' | 'durazno' | 'banano' | 'sandia' | 'arandano' | 'uva' | 'aguacate';
|
|
3139
|
+
/** Tamaño. */
|
|
3140
|
+
type IusInsigniaSize = 'small' | 'medium' | 'large';
|
|
3141
|
+
/**
|
|
3142
|
+
* Insignia — Ius Design v2 (familia feedback).
|
|
3143
|
+
*
|
|
3144
|
+
* Indicador atómico de estado o actividad: punto de color (`dot`) o píldora de
|
|
3145
|
+
* contador (`count` tonal · `count-soft` suave), con `label` opcional al lado.
|
|
3146
|
+
* Display puro — sin outputs. Fuente de verdad: `Insignia.jsx` + `Insignia.d.ts`
|
|
3147
|
+
* + `Insignia.ng-spec.md`.
|
|
3148
|
+
*
|
|
3149
|
+
* Para etiqueta con texto contenedor → Tag; para token removible en un campo →
|
|
3150
|
+
* Chip. La consume MenuItem (badge) y la barra de navegación.
|
|
3151
|
+
*/
|
|
3152
|
+
declare class InsigniaComponent {
|
|
3153
|
+
/** Punto de color · píldora tonal · píldora neutra. */
|
|
3154
|
+
readonly variant: _angular_core.InputSignal<IusInsigniaVariant>;
|
|
3155
|
+
/** Familia de color. */
|
|
3156
|
+
readonly tone: _angular_core.InputSignal<IusInsigniaTone>;
|
|
3157
|
+
/** Tamaño. */
|
|
3158
|
+
readonly size: _angular_core.InputSignal<IusInsigniaSize>;
|
|
3159
|
+
/** Texto junto al indicador (alternativa a proyectar contenido). */
|
|
3160
|
+
readonly label: _angular_core.InputSignal<string | number | undefined>;
|
|
3161
|
+
/** Valor del contador (variantes `count` / `count-soft`). */
|
|
3162
|
+
readonly count: _angular_core.InputSignal<string | number | undefined>;
|
|
3163
|
+
/** Tope antes de mostrar `N+`. */
|
|
3164
|
+
readonly max: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
3165
|
+
/** Halo suave alrededor del punto (solo `dot`). */
|
|
3166
|
+
readonly ring: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3167
|
+
/** Recomendada cuando no hay `label`. */
|
|
3168
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
3169
|
+
/** `count`/`count-soft` renderizan píldora; `dot` renderiza punto. */
|
|
3170
|
+
protected readonly isCount: _angular_core.Signal<boolean>;
|
|
3171
|
+
/** El halo es exclusivo del punto (el golden lo ignora en las píldoras). */
|
|
3172
|
+
protected readonly showRing: _angular_core.Signal<boolean>;
|
|
3173
|
+
/** `count > max` → `${max}+`; los valores string pasan tal cual. */
|
|
3174
|
+
protected readonly displayCount: _angular_core.Signal<string | number | undefined>;
|
|
3175
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<InsigniaComponent, never>;
|
|
3176
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<InsigniaComponent, "ius-insignia", never, { "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "count": { "alias": "count"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "ring": { "alias": "ring"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
3177
|
+
}
|
|
3178
|
+
|
|
3179
|
+
/** Contexto de uso: fila de overlay (neutral) · fila del NavRail (verde marca). */
|
|
3180
|
+
type IusMenuItemVariant = 'menu' | 'rail';
|
|
3181
|
+
/** Tamaño de la fila. */
|
|
3182
|
+
type IusMenuItemSize = 'small' | 'medium' | 'large';
|
|
3183
|
+
/** Estado forzado — **solo demos/especímenes del DS**. */
|
|
3184
|
+
type IusMenuItemState = 'hover' | 'pressed';
|
|
3185
|
+
/**
|
|
3186
|
+
* Marca contenido libre al final de la fila (chevron, valor, atajo):
|
|
3187
|
+
* `<ius-menu-item><span iusMenuItemTrailing>⌘K</span></ius-menu-item>`.
|
|
3188
|
+
*/
|
|
3189
|
+
declare class IusMenuItemTrailingDirective {
|
|
3190
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<IusMenuItemTrailingDirective, never>;
|
|
3191
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<IusMenuItemTrailingDirective, "[iusMenuItemTrailing]", never, {}, {}, never, never, true, never>;
|
|
3192
|
+
}
|
|
3193
|
+
/**
|
|
3194
|
+
* MenuItem — Ius Design v2 (familia navigation).
|
|
3195
|
+
*
|
|
3196
|
+
* Fila de acción o navegación: ícono + etiqueta + badge/trailing. Unidad
|
|
3197
|
+
* compartida por la superficie **Menu** (overlays) y el **NavRail**:
|
|
3198
|
+
* `variant="menu"` es neutral; `variant="rail"` lleva el ícono verde de marca y
|
|
3199
|
+
* el pressed verde sólido sobre blanco (firma del rail). `danger` (rojo) solo
|
|
3200
|
+
* aplica a `menu` — el caso canónico es «Cerrar sesión».
|
|
3201
|
+
*
|
|
3202
|
+
* Con `href` renderiza `<a>`; si no, `<button type="button">`. Por eso el host
|
|
3203
|
+
* es `display: contents`: el elemento real de la fila (y por tanto el foco, el
|
|
3204
|
+
* `:hover` y la semántica) es el `<a>`/`<button>` interno, tal como el golden.
|
|
3205
|
+
*
|
|
3206
|
+
* Fuente de verdad: `MenuItem.jsx` + `MenuItem.d.ts` + `MenuItem.ng-spec.md`.
|
|
3207
|
+
* Compone Insignia para el badge. Para botón con texto → Button; píldora de
|
|
3208
|
+
* valor → Tag/Chip.
|
|
3209
|
+
*/
|
|
3210
|
+
declare class MenuItemComponent {
|
|
3211
|
+
/** Ícono Material Symbols a la izquierda. */
|
|
3212
|
+
readonly icon: _angular_core.InputSignal<string | undefined>;
|
|
3213
|
+
/** Texto de la fila (alternativa a proyectar contenido). */
|
|
3214
|
+
readonly label: _angular_core.InputSignal<string | undefined>;
|
|
3215
|
+
/** `number` → Insignia contador; `true` → punto; `null`/`false` → sin badge. */
|
|
3216
|
+
readonly badge: _angular_core.InputSignal<number | boolean | null | undefined>;
|
|
3217
|
+
/** Contexto de uso (menu neutral · rail verde marca). */
|
|
3218
|
+
readonly variant: _angular_core.InputSignal<IusMenuItemVariant>;
|
|
3219
|
+
/** Tamaño de la fila. */
|
|
3220
|
+
readonly size: _angular_core.InputSignal<IusMenuItemSize>;
|
|
3221
|
+
/** Fondo persistente + `aria-current`. */
|
|
3222
|
+
readonly selected: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3223
|
+
/** Fila inerte. */
|
|
3224
|
+
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3225
|
+
/** Acción destructiva (rojo). Solo `variant="menu"`. */
|
|
3226
|
+
readonly danger: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3227
|
+
/** Estado forzado — **solo demos**. */
|
|
3228
|
+
readonly state: _angular_core.InputSignal<IusMenuItemState | undefined>;
|
|
3229
|
+
/** Renderiza la fila como `<a href>`. */
|
|
3230
|
+
readonly href: _angular_core.InputSignal<string | undefined>;
|
|
3231
|
+
/** Etiqueta accesible cuando el texto no basta. */
|
|
3232
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
3233
|
+
/** Rol ARIA del elemento de fila — Menu lo fija en `menuitem`. */
|
|
3234
|
+
readonly itemRole: _angular_core.InputSignal<string | undefined>;
|
|
3235
|
+
/** Al activar la fila (espejo de `onClick`). */
|
|
3236
|
+
readonly clicked: _angular_core.OutputEmitterRef<MouseEvent>;
|
|
3237
|
+
protected readonly trailingRef: _angular_core.Signal<IusMenuItemTrailingDirective | undefined>;
|
|
3238
|
+
/** El `<a>` solo se usa si hay `href` y la fila no está deshabilitada. */
|
|
3239
|
+
protected readonly isLink: _angular_core.Signal<boolean>;
|
|
3240
|
+
/** `null`/`undefined`/`false` = sin badge (el 0 sí se muestra, como el golden). */
|
|
3241
|
+
protected readonly hasBadge: _angular_core.Signal<boolean>;
|
|
3242
|
+
/** `true` → punto; número → píldora de contador. */
|
|
3243
|
+
protected readonly badgeVariant: _angular_core.Signal<IusInsigniaVariant>;
|
|
3244
|
+
/** El punto del rail es informativo (azul); en menu avisa (rojo). */
|
|
3245
|
+
protected readonly badgeTone: _angular_core.Signal<IusInsigniaTone>;
|
|
3246
|
+
/** Valor del contador (solo cuando el badge es numérico). */
|
|
3247
|
+
protected readonly badgeCount: _angular_core.Signal<number | undefined>;
|
|
3248
|
+
protected onClick(event: MouseEvent): void;
|
|
3249
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenuItemComponent, never>;
|
|
3250
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenuItemComponent, "ius-menu-item", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "selected": { "alias": "selected"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "danger": { "alias": "danger"; "required": false; "isSignal": true; }; "state": { "alias": "state"; "required": false; "isSignal": true; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "itemRole": { "alias": "itemRole"; "required": false; "isSignal": true; }; }, { "clicked": "clicked"; }, ["trailingRef"], ["*", "[iusMenuItemTrailing]"], true, never>;
|
|
3251
|
+
}
|
|
3252
|
+
|
|
3253
|
+
/**
|
|
3254
|
+
* Opción de menú — tipo **compartido** por Menu, Dropdown y ContextMenu.
|
|
3255
|
+
*
|
|
3256
|
+
* `trailing` acepta texto plano o un `TemplateRef` (equivalente Angular del
|
|
3257
|
+
* slot/ReactNode del golden, según la regla de port `render` → `TemplateRef`).
|
|
3258
|
+
*/
|
|
3259
|
+
interface IusMenuOption {
|
|
3260
|
+
/** Valor lógico — el que viaja en `valueChange` y marca el check. */
|
|
3261
|
+
value?: string | number;
|
|
3262
|
+
/** Clave de `@for`; si falta se usa `value` y, en último caso, el índice. */
|
|
3263
|
+
key?: string | number;
|
|
3264
|
+
/** Ícono Material Symbols a la izquierda. */
|
|
3265
|
+
icon?: string;
|
|
3266
|
+
/** Texto de la fila. */
|
|
3267
|
+
label?: string;
|
|
3268
|
+
/** Contenido al final de la fila (atajo, valor, chevron). */
|
|
3269
|
+
trailing?: string | TemplateRef<unknown>;
|
|
3270
|
+
/** Al cambiar de grupo se inserta un divisor. */
|
|
3271
|
+
group?: string | number;
|
|
3272
|
+
/** Divisor explícito (la fila no se renderiza). */
|
|
3273
|
+
separator?: boolean;
|
|
3274
|
+
/** Acción destructiva (rojo). */
|
|
3275
|
+
danger?: boolean;
|
|
3276
|
+
/** Fila inerte. */
|
|
3277
|
+
disabled?: boolean;
|
|
3278
|
+
/** Acción propia de la opción. */
|
|
3279
|
+
onClick?: (event: MouseEvent) => void;
|
|
3280
|
+
}
|
|
3281
|
+
/** Fila resuelta o divisor — lo que realmente pinta la plantilla. */
|
|
3282
|
+
interface IusMenuRow {
|
|
3283
|
+
kind: 'separator' | 'item';
|
|
3284
|
+
key: string;
|
|
3285
|
+
item?: IusMenuOption;
|
|
3286
|
+
selected?: boolean;
|
|
3287
|
+
}
|
|
3288
|
+
/**
|
|
3289
|
+
* Menu — Ius Design v2 (familia overlays). **SUPERFICIE compartida de menú.**
|
|
3290
|
+
*
|
|
3291
|
+
* Lista de **MenuItem** con encabezado opcional, divisores, grupos, ítems
|
|
3292
|
+
* peligrosos/deshabilitados y modo selección única (check a la derecha). Es el
|
|
3293
|
+
* cuerpo que **Dropdown** ancla a un disparador y **ContextMenu** ancla al
|
|
3294
|
+
* cursor: por sí sola **no se posiciona ni gestiona apertura**.
|
|
3295
|
+
*
|
|
3296
|
+
* Fuente de verdad: `Menu.jsx` + `Menu.d.ts` + `Menu.ng-spec.md`. Las filas se
|
|
3297
|
+
* renderizan con `size="small"` y `variant="menu"`, como el golden.
|
|
3298
|
+
*/
|
|
3299
|
+
declare class MenuComponent {
|
|
3300
|
+
/** Opciones del menú (tipo compartido con Dropdown/ContextMenu). */
|
|
3301
|
+
readonly items: _angular_core.InputSignal<readonly IusMenuOption[]>;
|
|
3302
|
+
/** Selección única: marca `value` con un check. */
|
|
3303
|
+
readonly selectable: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3304
|
+
/** Valor elegido en modo `selectable`. */
|
|
3305
|
+
readonly value: _angular_core.InputSignal<string | number | undefined>;
|
|
3306
|
+
/** Encabezado visual del menú. */
|
|
3307
|
+
readonly label: _angular_core.InputSignal<string | undefined>;
|
|
3308
|
+
/** Etiqueta accesible de la superficie. */
|
|
3309
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
3310
|
+
/** Modo `selectable` — espejo de `onChange`. */
|
|
3311
|
+
readonly valueChange: _angular_core.OutputEmitterRef<{
|
|
3312
|
+
value: string | number | undefined;
|
|
3313
|
+
item: IusMenuOption;
|
|
3314
|
+
}>;
|
|
3315
|
+
/** Tras activar un ítem — Dropdown/ContextMenu lo usan para cerrar. */
|
|
3316
|
+
readonly itemClick: _angular_core.OutputEmitterRef<{
|
|
3317
|
+
item: IusMenuOption;
|
|
3318
|
+
event: MouseEvent;
|
|
3319
|
+
}>;
|
|
3320
|
+
/**
|
|
3321
|
+
* Aplana `items` a filas pintables insertando los divisores de grupo: al
|
|
3322
|
+
* cambiar `group` respecto de la fila anterior se mete un separador (el
|
|
3323
|
+
* primer ítem nunca lo lleva), y `separator: true` es un divisor explícito.
|
|
3324
|
+
*/
|
|
3325
|
+
protected readonly rows: _angular_core.Signal<IusMenuRow[]>;
|
|
3326
|
+
/** `trailing` como TemplateRef (slot rico) — si no, se pinta como texto. */
|
|
3327
|
+
protected trailingTpl(item: IusMenuOption): TemplateRef<unknown> | null;
|
|
3328
|
+
/** `trailing` como texto plano (atajo, valor corto). */
|
|
3329
|
+
protected trailingText(item: IusMenuOption): string | null;
|
|
3330
|
+
protected onItemClick(row: IusMenuRow, event: MouseEvent): void;
|
|
3331
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenuComponent, never>;
|
|
3332
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MenuComponent, "ius-menu", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "itemClick": "itemClick"; }, never, never, true, never>;
|
|
3333
|
+
}
|
|
3334
|
+
|
|
3335
|
+
/** Familia de color del disparador por defecto. */
|
|
3336
|
+
type IusDropdownTone = 'primary' | 'neutral';
|
|
3337
|
+
/** Tratamiento del disparador por defecto. */
|
|
3338
|
+
type IusDropdownVariant = 'ghost' | 'outline';
|
|
3339
|
+
/** Opción del Dropdown — el tipo compartido de Menu/ContextMenu. */
|
|
3340
|
+
type IusDropdownItem = IusMenuOption;
|
|
3341
|
+
/**
|
|
3342
|
+
* Marca un disparador propio, en lugar del ghost texto+chevron por defecto:
|
|
3343
|
+
* `<ius-dropdown><ius-icon-button iusDropdownTrigger …/></ius-dropdown>`.
|
|
3344
|
+
*/
|
|
3345
|
+
declare class IusDropdownTriggerDirective {
|
|
3346
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<IusDropdownTriggerDirective, never>;
|
|
3347
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<IusDropdownTriggerDirective, "[iusDropdownTrigger]", never, {}, {}, never, never, true, never>;
|
|
3348
|
+
}
|
|
3349
|
+
/**
|
|
3350
|
+
* Dropdown — Ius Design v2 (familia overlays).
|
|
3351
|
+
*
|
|
3352
|
+
* Menú desplegable accionable: un disparador abre un **Popover** (sin rabito,
|
|
3353
|
+
* `bottom-start` por defecto) con una superficie **Menu**. Dos modos: **acciones**
|
|
3354
|
+
* (cada ítem ejecuta y cierra) y **selección única** (`selectable`, check en la
|
|
3355
|
+
* activa y la etiqueta elegida en el disparador).
|
|
3356
|
+
*
|
|
3357
|
+
* El disparador por defecto es un botón ghost texto+chevron (el chevron gira al
|
|
3358
|
+
* abrir); `variant="outline"` replica el contenedor del botón de QueryBuilder
|
|
3359
|
+
* (mismo borde/radio/padding/altura) para encajar en barras y SegmentGroup. Con
|
|
3360
|
+
* `[iusDropdownTrigger]` se proyecta un disparador propio.
|
|
3361
|
+
*
|
|
3362
|
+
* No es campo de formulario — eso es **Select**; para una sola acción →
|
|
3363
|
+
* Button/IconButton. Fuente de verdad: `Dropdown.jsx` + `Dropdown.d.ts` +
|
|
3364
|
+
* `Dropdown.ng-spec.md`.
|
|
3365
|
+
*/
|
|
3366
|
+
declare class DropdownComponent {
|
|
3367
|
+
/** Opciones del menú (mismo shape que `MenuOption`). */
|
|
3368
|
+
readonly items: _angular_core.InputSignal<readonly IusMenuOption[]>;
|
|
3369
|
+
/** Selección única: marca la opción activa con un check. */
|
|
3370
|
+
readonly selectable: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3371
|
+
/** Valor elegido en modo `selectable`. */
|
|
3372
|
+
readonly value: _angular_core.InputSignal<string | number | undefined>;
|
|
3373
|
+
/** Encabezado del menú (y texto del disparador por defecto si no hay elegida). */
|
|
3374
|
+
readonly label: _angular_core.InputSignal<string | undefined>;
|
|
3375
|
+
/** Texto del disparador por defecto (gana sobre la opción elegida y `label`). */
|
|
3376
|
+
readonly triggerLabel: _angular_core.InputSignal<string | undefined>;
|
|
3377
|
+
/** Ícono Material Symbols del disparador por defecto. */
|
|
3378
|
+
readonly triggerIcon: _angular_core.InputSignal<string | undefined>;
|
|
3379
|
+
/** Familia de color del disparador por defecto. */
|
|
3380
|
+
readonly tone: _angular_core.InputSignal<IusDropdownTone>;
|
|
3381
|
+
/** Tratamiento del disparador por defecto. */
|
|
3382
|
+
readonly variant: _angular_core.InputSignal<IusDropdownVariant>;
|
|
3383
|
+
/** Colocación del panel respecto del disparador. */
|
|
3384
|
+
readonly placement: _angular_core.InputSignal<IusPopoverPlacement>;
|
|
3385
|
+
/** Modo controlado (`undefined` = no controlado con `defaultOpen`). */
|
|
3386
|
+
readonly open: _angular_core.InputSignal<boolean | undefined>;
|
|
3387
|
+
/** Estado inicial del modo no controlado. */
|
|
3388
|
+
readonly defaultOpen: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
3389
|
+
/** Etiqueta accesible del disparador por defecto. */
|
|
3390
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
3391
|
+
/** Modo `selectable` — espejo de `onChange`. */
|
|
3392
|
+
readonly valueChange: _angular_core.OutputEmitterRef<{
|
|
3393
|
+
value: string | number | undefined;
|
|
3394
|
+
item: IusDropdownItem;
|
|
3395
|
+
}>;
|
|
3396
|
+
/** Apertura/cierre del panel. */
|
|
3397
|
+
readonly openChange: _angular_core.OutputEmitterRef<boolean>;
|
|
3398
|
+
protected readonly customTrigger: _angular_core.Signal<IusDropdownTriggerDirective | undefined>;
|
|
3399
|
+
/** `null` = el usuario todavía no ha abierto/cerrado → manda `defaultOpen`. */
|
|
3400
|
+
private readonly internalOpen;
|
|
3401
|
+
/** Controlado por `open` si viene definido; si no, estado interno. */
|
|
3402
|
+
protected readonly isOpen: _angular_core.Signal<boolean>;
|
|
3403
|
+
/** Opción activa en modo `selectable` — alimenta el texto del disparador. */
|
|
3404
|
+
private readonly current;
|
|
3405
|
+
/** `triggerLabel` › etiqueta de la opción elegida › `label`. */
|
|
3406
|
+
protected readonly triggerText: _angular_core.Signal<string | undefined>;
|
|
3407
|
+
/** El encabezado del menú solo aplica en modo selección (como el golden). */
|
|
3408
|
+
protected readonly menuLabel: _angular_core.Signal<string | undefined>;
|
|
3409
|
+
protected onOpenChange(open: boolean): void;
|
|
3410
|
+
protected onValueChange(payload: {
|
|
3411
|
+
value: string | number | undefined;
|
|
3412
|
+
item: IusMenuOption;
|
|
3413
|
+
}): void;
|
|
3414
|
+
/** Activar un ítem cierra el panel (acciones y selección). */
|
|
3415
|
+
protected onItemClick(): void;
|
|
3416
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownComponent, never>;
|
|
3417
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DropdownComponent, "ius-dropdown", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "triggerLabel": { "alias": "triggerLabel"; "required": false; "isSignal": true; }; "triggerIcon": { "alias": "triggerIcon"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "defaultOpen": { "alias": "defaultOpen"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; "openChange": "openChange"; }, ["customTrigger"], ["[iusDropdownTrigger]"], true, never>;
|
|
3418
|
+
}
|
|
3419
|
+
|
|
3420
|
+
/** Tono semántico de un estado (nunca un hue "fruta"). */
|
|
3421
|
+
type StatusTone = 'info' | 'neutral' | 'primary' | 'success' | 'warning' | 'danger';
|
|
3422
|
+
/** Los 6 tonos semánticos, en el orden del contrato. Útil para matrices/demos. */
|
|
3423
|
+
declare const STATUS_TONES: readonly StatusTone[];
|
|
3424
|
+
/**
|
|
3425
|
+
* Cómo se pinta un estado: rótulo, tono semántico e ícono Material Symbols
|
|
3426
|
+
* (ligadura, p. ej. `check_circle`).
|
|
3427
|
+
*/
|
|
3428
|
+
interface StatusMeta {
|
|
3429
|
+
/** Rótulo humano del estado. `string` (el golden usa `ReactNode`; ver §1 de la cabecera). */
|
|
3430
|
+
label: string;
|
|
3431
|
+
/** Familia semántica del estado. */
|
|
3432
|
+
tone: StatusTone;
|
|
3433
|
+
/** Ligadura Material Symbols Rounded. */
|
|
3434
|
+
icon: string;
|
|
3435
|
+
}
|
|
3436
|
+
/**
|
|
3437
|
+
* Mapa de una entidad: `status → StatusMeta`. El **orden de declaración** de las
|
|
3438
|
+
* claves es el orden del ciclo de vida.
|
|
3439
|
+
*/
|
|
3440
|
+
type StatusVocabMap = Readonly<Record<string, StatusMeta>>;
|
|
3441
|
+
/** Opción lista para dropdown / filtro / orden por estado. */
|
|
3442
|
+
interface StatusOption {
|
|
3443
|
+
/** Clave del estado (la que viaja al backend). */
|
|
3444
|
+
value: string;
|
|
3445
|
+
/** Rótulo humano. */
|
|
3446
|
+
label: string;
|
|
3447
|
+
/** Familia semántica. */
|
|
3448
|
+
tone: StatusTone;
|
|
3449
|
+
/** Ligadura Material Symbols Rounded. */
|
|
3450
|
+
icon: string;
|
|
3451
|
+
}
|
|
3452
|
+
/** Par de variables de color de un tono: texto/ícono y punto (marca). */
|
|
3453
|
+
interface StatusToneVars {
|
|
3454
|
+
/** Color del texto y del ícono. Siempre un `var(--ius-*)`. */
|
|
3455
|
+
fg: string;
|
|
3456
|
+
/** Color del punto/marca. Siempre un `var(--ius-*)`. */
|
|
3457
|
+
mark: string;
|
|
3458
|
+
}
|
|
3459
|
+
/**
|
|
3460
|
+
* Catálogo: entidad → `{ status → StatusMeta }`.
|
|
3461
|
+
*
|
|
3462
|
+
* El **orden de declaración** de cada estado es el orden del ciclo. El catálogo
|
|
3463
|
+
* es ABIERTO: se agregan entidades aquí sin tocar `StatusChip` (ver
|
|
3464
|
+
* `STATUS_VOCABS_PENDING`). Un módulo puede además extender en runtime pasando
|
|
3465
|
+
* `customMap` a `resolveStatus`.
|
|
3466
|
+
*/
|
|
3467
|
+
declare const STATUS_VOCAB: {
|
|
3468
|
+
readonly actuacion: {
|
|
3469
|
+
readonly nueva: {
|
|
3470
|
+
readonly label: "Nueva";
|
|
3471
|
+
readonly tone: "info";
|
|
3472
|
+
readonly icon: "fiber_new";
|
|
3473
|
+
};
|
|
3474
|
+
readonly vista: {
|
|
3475
|
+
readonly label: "Vista";
|
|
3476
|
+
readonly tone: "neutral";
|
|
3477
|
+
readonly icon: "drafts";
|
|
3478
|
+
};
|
|
3479
|
+
readonly gestion: {
|
|
3480
|
+
readonly label: "En gestión";
|
|
3481
|
+
readonly tone: "primary";
|
|
3482
|
+
readonly icon: "pending_actions";
|
|
3483
|
+
};
|
|
3484
|
+
readonly cerrada: {
|
|
3485
|
+
readonly label: "Cerrada";
|
|
3486
|
+
readonly tone: "success";
|
|
3487
|
+
readonly icon: "check_circle";
|
|
3488
|
+
};
|
|
3489
|
+
};
|
|
3490
|
+
readonly gestion: {
|
|
3491
|
+
readonly por_hacer: {
|
|
3492
|
+
readonly label: "Por hacer";
|
|
3493
|
+
readonly tone: "info";
|
|
3494
|
+
readonly icon: "radio_button_unchecked";
|
|
3495
|
+
};
|
|
3496
|
+
readonly en_curso: {
|
|
3497
|
+
readonly label: "En curso";
|
|
3498
|
+
readonly tone: "primary";
|
|
3499
|
+
readonly icon: "pending";
|
|
3500
|
+
};
|
|
3501
|
+
readonly por_vencer: {
|
|
3502
|
+
readonly label: "Por vencer";
|
|
3503
|
+
readonly tone: "warning";
|
|
3504
|
+
readonly icon: "schedule";
|
|
3505
|
+
};
|
|
3506
|
+
readonly vencida: {
|
|
3507
|
+
readonly label: "Vencida";
|
|
3508
|
+
readonly tone: "danger";
|
|
3509
|
+
readonly icon: "event_busy";
|
|
3510
|
+
};
|
|
3511
|
+
readonly hecha: {
|
|
3512
|
+
readonly label: "Hecha";
|
|
3513
|
+
readonly tone: "success";
|
|
3514
|
+
readonly icon: "check_circle";
|
|
3515
|
+
};
|
|
3516
|
+
};
|
|
3517
|
+
};
|
|
3518
|
+
/** Entidades con vocabulario definido HOY en el catálogo. */
|
|
3519
|
+
type StatusVocabName = keyof typeof STATUS_VOCAB;
|
|
3520
|
+
/** Estados del vocabulario `actuacion` (validado). */
|
|
3521
|
+
type ActuacionStatus = keyof (typeof STATUS_VOCAB)['actuacion'];
|
|
3522
|
+
/** Estados del vocabulario `gestion` (propuesto — confirmar con backend). */
|
|
3523
|
+
type GestionStatus = keyof (typeof STATUS_VOCAB)['gestion'];
|
|
3524
|
+
/** Entidades con vocabulario definido. */
|
|
3525
|
+
declare const STATUS_VOCABS: readonly StatusVocabName[];
|
|
3526
|
+
/**
|
|
3527
|
+
* Entidades que TIENEN estado pero cuyo vocabulario aún NO está en el catálogo:
|
|
3528
|
+
* sus estados/tonos son decisión humana pendiente con el backend (§6 del
|
|
3529
|
+
* golden). Se listan para documentar el hueco, no para inventarlo. Al validarse
|
|
3530
|
+
* se agregan a `STATUS_VOCAB` y se quitan de aquí; `StatusChip` no se toca.
|
|
3531
|
+
*/
|
|
3532
|
+
declare const STATUS_VOCABS_PENDING: readonly string[];
|
|
3533
|
+
/**
|
|
3534
|
+
* Estados (claves) de una entidad, en orden de ciclo.
|
|
3535
|
+
* `[]` si la entidad no existe.
|
|
3536
|
+
*/
|
|
3537
|
+
declare function statusOrder(vocab: string): string[];
|
|
3538
|
+
/**
|
|
3539
|
+
* Mapa `status → StatusMeta` de una entidad.
|
|
3540
|
+
* `null` si la entidad no está en el catálogo (retorno nullable, a propósito).
|
|
3541
|
+
*/
|
|
3542
|
+
declare function statusVocab(vocab: string): StatusVocabMap | null;
|
|
3543
|
+
/**
|
|
3544
|
+
* Resuelve un estado a `StatusMeta` en este orden:
|
|
3545
|
+
* 1. `customMap[status]` — extensión en runtime del módulo consumidor;
|
|
3546
|
+
* 2. catálogo central de la entidad;
|
|
3547
|
+
* 3. `null` — entidad o estado desconocido: el consumidor decide (el átomo
|
|
3548
|
+
* `StatusChip` cae a `neutral` con el `status` crudo como rótulo).
|
|
3549
|
+
*
|
|
3550
|
+
* @param vocab Entidad (p. ej. `'actuacion'`).
|
|
3551
|
+
* @param status Clave del estado YA resuelta por el consumidor (la urgencia de
|
|
3552
|
+
* una tarea se deriva antes de llamar aquí).
|
|
3553
|
+
* @param customMap Vocabulario extra del módulo; gana sobre el catálogo.
|
|
3554
|
+
*/
|
|
3555
|
+
declare function resolveStatus(vocab: string, status: string | null | undefined, customMap?: Readonly<Record<string, StatusMeta>>): StatusMeta | null;
|
|
3556
|
+
/**
|
|
3557
|
+
* Opciones listas para dropdown / filtro / orden de una entidad, en orden de
|
|
3558
|
+
* ciclo. `[]` si la entidad no existe.
|
|
3559
|
+
*/
|
|
3560
|
+
declare function statusOptions(vocab: string): StatusOption[];
|
|
3561
|
+
/**
|
|
3562
|
+
* Tono semántico → `{ fg, mark }` (strings `var(--ius-*)`).
|
|
3563
|
+
* Único punto del sistema que conoce las vars de color del estado.
|
|
3564
|
+
* Un tono desconocido, `null` o `undefined` cae a `neutral` (nunca falla).
|
|
3565
|
+
*/
|
|
3566
|
+
declare function statusToneVars(tone: StatusTone | null | undefined): StatusToneVars;
|
|
3567
|
+
|
|
3568
|
+
/** Escala de la barra — small ~34 · medium ~40 (default) · large ~48px. */
|
|
3569
|
+
type IusSearchBarSize = 'small' | 'medium' | 'large';
|
|
3570
|
+
/** Estado forzado — **solo demos/especímenes**. En producción usar `disabled`. */
|
|
3571
|
+
type IusSearchBarState = 'hover' | 'focused' | 'disabled';
|
|
3572
|
+
/**
|
|
3573
|
+
* SearchBar — Ius Design v2.
|
|
3574
|
+
*
|
|
3575
|
+
* Barra de **búsqueda** (filtrado de tablas, listas y resultados: proceso,
|
|
3576
|
+
* radicado, deudor). Compone: `input[type=search]` + botón circular de limpiar
|
|
3577
|
+
* (slot reservado) + botón de lupa. Tratamiento de color poco intrusivo:
|
|
3578
|
+
* vacía = relleno gris discreto · con criterio = blanco + borde hairline ·
|
|
3579
|
+
* foco = blanco + borde de marca + lupa azul · disabled = gris atenuado.
|
|
3580
|
+
*
|
|
3581
|
+
* **Cuándo NO usarlo:** como campo de formulario con label/validación (eso es
|
|
3582
|
+
* `ius-text-field`), para elegir de una lista cerrada (`ius-select`) o para
|
|
3583
|
+
* filtros estructurados por chips (FilterBar).
|
|
3584
|
+
*
|
|
3585
|
+
* Implementa `ControlValueAccessor` completo (`string`) para `[(ngModel)]` /
|
|
3586
|
+
* `formControl`, y además soporta `[(value)]`.
|
|
3587
|
+
*
|
|
3588
|
+
* Fuente de verdad: `components/inputs/SearchBar/SearchBar.jsx` + `.d.ts` +
|
|
3589
|
+
* `SearchBar.ng-spec.md` + `searchbar.card.html` / `playground.card.html`.
|
|
3590
|
+
*
|
|
3591
|
+
* ── Notas del port a Angular ─────────────────────────────────────────────
|
|
3592
|
+
* - `.ius-sb` (raíz del golden) **es el host**: no hay div envolvente, porque
|
|
3593
|
+
* uno rompería `:focus-within` y el `role="search"` del contenedor real.
|
|
3594
|
+
* - El botón de limpiar **nunca sale del flujo**: solo alterna `visibility` +
|
|
3595
|
+
* `pointer-events` (`.ius-sb__clear--hidden`), así aparecer/desaparecer no
|
|
3596
|
+
* desplaza el input ni la lupa (geometría estable).
|
|
3597
|
+
* - `blur` → `onTouched()` es un añadido del port (el golden React no tiene
|
|
3598
|
+
* `onBlur`); lo exige el `ControlValueAccessor`.
|
|
3599
|
+
* - Limpiar emite `valueChange('')` además de `cleared` (el golden solo llama
|
|
3600
|
+
* `onClear`): el CVA obliga a propagar el valor nuevo al modelo. Mismo
|
|
3601
|
+
* criterio que `ius-text-field`.
|
|
3602
|
+
*
|
|
3603
|
+
* ── Divergencias doc vs golden (manda el golden; para diseño) ────────────
|
|
3604
|
+
* - `searchbar.card.html` §06 lista `--ius-radius-md (8px)` como radio de la
|
|
3605
|
+
* barra, pero el CSS golden usa `var(--ius-radius-lg)` (14px). Se porta el
|
|
3606
|
+
* golden.
|
|
3607
|
+
* - `SearchBar.prompt.md` y §06 anuncian **anillo de foco** (`--ius-focus-ring`)
|
|
3608
|
+
* en la barra enfocada; el CSS golden lo niega explícitamente
|
|
3609
|
+
* ("sin sombra exterior") y solo aplica el anillo al `:focus-visible` de los
|
|
3610
|
+
* botones internos. Se porta el golden.
|
|
3611
|
+
* - §02 "Anatomía" numera la lupa como pieza 1 (sugiere lupa a la izquierda),
|
|
3612
|
+
* pero el golden renderiza `input → limpiar → lupa`, así que la lupa queda a
|
|
3613
|
+
* la **derecha**. Se porta el golden.
|
|
3614
|
+
*/
|
|
3615
|
+
declare class SearchBarComponent implements ControlValueAccessor {
|
|
3616
|
+
private readonly valueState;
|
|
3617
|
+
/** Marca si el consumidor ató el valor (input `value`, `[(value)]` o CVA). */
|
|
3618
|
+
private readonly boundValue;
|
|
3619
|
+
/** Criterio de búsqueda (controlado). Habilita `[(value)]`. */
|
|
3620
|
+
set value(value: string | null | undefined);
|
|
3621
|
+
get value(): string;
|
|
3622
|
+
/** Criterio inicial (no controlado). Equivale a `defaultValue` del golden. */
|
|
3623
|
+
set defaultValue(value: string | null | undefined);
|
|
3624
|
+
private readonly sizeState;
|
|
3625
|
+
/** Escala de la barra. Sin valor explícito hereda `--ius-control-size`. */
|
|
3626
|
+
set size(value: IusSearchBarSize);
|
|
3627
|
+
get size(): IusSearchBarSize;
|
|
3628
|
+
/** `disabled` recibido como input del template. */
|
|
3629
|
+
private readonly disabledInput;
|
|
3630
|
+
/** `disabled` impuesto por el formulario (`setDisabledState`). */
|
|
3631
|
+
private readonly disabledByForm;
|
|
3632
|
+
/**
|
|
3633
|
+
* Estado deshabilitado. El efectivo es
|
|
3634
|
+
* `input || setDisabledState() || state === 'disabled'`, así una fuente no
|
|
3635
|
+
* pisa a la otra (un `[disabled]="false"` no reactiva un control que el
|
|
3636
|
+
* formulario deshabilitó, ni al revés).
|
|
3637
|
+
*/
|
|
3638
|
+
set disabled(value: boolean);
|
|
3639
|
+
get disabled(): boolean;
|
|
3640
|
+
/** Estado visual forzado — **solo demos/especímenes** del DS. */
|
|
3641
|
+
protected readonly stateInput: _angular_core.WritableSignal<IusSearchBarState | undefined>;
|
|
3642
|
+
/**
|
|
3643
|
+
* Fuerza un estado visual (`hover` · `focused` · `disabled`).
|
|
3644
|
+
* **Solo demos/especímenes**: en producción usa `disabled` y deja que el
|
|
3645
|
+
* navegador resuelva hover/foco. Con `hover`/`focused`, la barra vacía y
|
|
3646
|
+
* *sin* valor atado, el golden pinta un criterio de relleno para que se vea
|
|
3647
|
+
* el círculo de limpiar (ver `IUS_SB_DEMO_VALUE`).
|
|
3648
|
+
*/
|
|
3649
|
+
set state(value: IusSearchBarState | undefined);
|
|
3650
|
+
get state(): IusSearchBarState | undefined;
|
|
3651
|
+
/** Texto guía dentro del input. Di qué se puede buscar. */
|
|
3652
|
+
placeholder: string;
|
|
3653
|
+
/** Etiqueta accesible del input. */
|
|
3654
|
+
ariaLabel: string;
|
|
3655
|
+
/** `name` del input nativo. */
|
|
3656
|
+
name?: string;
|
|
3657
|
+
/** `id` del input nativo. Si se omite se genera uno estable. */
|
|
3658
|
+
id?: string;
|
|
3659
|
+
/** Cambio de criterio en cada tecla (original `onChange`). Habilita `[(value)]`. */
|
|
3660
|
+
readonly valueChange: EventEmitter<string>;
|
|
3661
|
+
/**
|
|
3662
|
+
* Disparo de búsqueda: Enter o clic en la lupa (original `onSearch`).
|
|
3663
|
+
*
|
|
3664
|
+
* Nota: `input[type=search]` tiene un evento DOM nativo homónimo, pero al
|
|
3665
|
+
* declararse como `@Output` Angular enlaza **solo** este emisor en
|
|
3666
|
+
* `(search)` (no añade listener de DOM), así que no hay doble disparo.
|
|
3667
|
+
*/
|
|
3668
|
+
readonly search: EventEmitter<string>;
|
|
3669
|
+
/** Al limpiar con el botón circular (original `onClear`). */
|
|
3670
|
+
readonly cleared: EventEmitter<void>;
|
|
3671
|
+
private readonly inputRef;
|
|
3672
|
+
private readonly autoId;
|
|
3673
|
+
/** Estado forzado que el golden considera "con criterio" (demos). */
|
|
3674
|
+
private readonly demoFilled;
|
|
3675
|
+
/** Disabled efectivo (input + formulario + estado forzado de demo). */
|
|
3676
|
+
protected readonly isDisabled: _angular_core.Signal<boolean>;
|
|
3677
|
+
/** ¿Hay criterio? Gobierna `data-filled` y la visibilidad del círculo ×. */
|
|
3678
|
+
protected readonly filled: _angular_core.Signal<boolean>;
|
|
3679
|
+
/** Valor que se pinta en el input (solo difiere del real en demos). */
|
|
3680
|
+
protected readonly displayValue: _angular_core.Signal<string>;
|
|
3681
|
+
protected get inputId(): string;
|
|
3682
|
+
private onChangeFn;
|
|
3683
|
+
private onTouchedFn;
|
|
3684
|
+
writeValue(value: string): void;
|
|
3685
|
+
registerOnChange(fn: (value: string) => void): void;
|
|
3686
|
+
registerOnTouched(fn: () => void): void;
|
|
3687
|
+
setDisabledState(isDisabled: boolean): void;
|
|
3688
|
+
protected onInput(event: Event): void;
|
|
3689
|
+
protected onBlur(): void;
|
|
3690
|
+
/** Enter en el input o clic en la lupa. */
|
|
3691
|
+
protected triggerSearch(): void;
|
|
3692
|
+
/** Botón circular ×: limpia, notifica y devuelve el foco al input. */
|
|
3693
|
+
protected clear(): void;
|
|
3694
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SearchBarComponent, never>;
|
|
3695
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SearchBarComponent, "ius-search-bar", never, { "value": { "alias": "value"; "required": false; }; "defaultValue": { "alias": "defaultValue"; "required": false; }; "size": { "alias": "size"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "state": { "alias": "state"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; "name": { "alias": "name"; "required": false; }; "id": { "alias": "id"; "required": false; }; }, { "valueChange": "valueChange"; "search": "search"; "cleared": "cleared"; }, never, never, true, never>;
|
|
3696
|
+
static ngAcceptInputType_disabled: unknown;
|
|
3697
|
+
}
|
|
3698
|
+
|
|
3699
|
+
/** Tamaño del campo — small · medium (default) · large. */
|
|
3700
|
+
type IusTextAreaSize = 'small' | 'medium' | 'large';
|
|
3701
|
+
/** Estado forzado visualmente — solo demos / especímenes. */
|
|
3702
|
+
type IusTextAreaState = 'hover' | 'focused' | 'error' | 'disabled';
|
|
3703
|
+
/**
|
|
3704
|
+
* TextArea — Ius Design v2 (familia inputs).
|
|
3705
|
+
*
|
|
3706
|
+
* Variante **multilínea** de TextField para texto largo de redacción libre
|
|
3707
|
+
* (notas de impulso, observaciones de audiencia, descripciones, comentarios).
|
|
3708
|
+
* Reusa el wrapper `.ius-tf` (label + required + iconHelp + 5 estados + `size`
|
|
3709
|
+
* + helpText/errorText) y **crece con el contenido** desde `rows` hasta
|
|
3710
|
+
* `maxRows`, tras lo cual hace scroll interno. Implementa
|
|
3711
|
+
* `ControlValueAccessor` completo (`[(ngModel)]` / `formControl`) con `string`
|
|
3712
|
+
* como valor.
|
|
3713
|
+
*
|
|
3714
|
+
* Compone `ius-popover` para la pastilla «?» (`showIconHelp`), igual que
|
|
3715
|
+
* TextField.
|
|
3716
|
+
*
|
|
3717
|
+
* **Cuándo NO usarlo**: una sola línea → `ius-text-field`; datos segmentados →
|
|
3718
|
+
* `ius-multi-text-field`; códigos OTP → `ius-code-field`.
|
|
3719
|
+
*
|
|
3720
|
+
* Fuente de verdad: `components/inputs/TextArea/TextArea.jsx` + `TextArea.d.ts`
|
|
3721
|
+
* (delta sobre `TextField.ng-spec.md`) del proyecto Claude Design.
|
|
3722
|
+
*
|
|
3723
|
+
* ---
|
|
3724
|
+
* **Divergencias doc-vs-golden** (manda el `.jsx` golden; quedan anotadas para
|
|
3725
|
+
* que diseño las resuelva):
|
|
3726
|
+
*
|
|
3727
|
+
* 1. **Scrollbar.** `TextArea.ng-spec.md` dice «luego scroll interno con
|
|
3728
|
+
* `.ius-scroll`»; el CSS golden **no** usa `.ius-scroll`: pinta su propio
|
|
3729
|
+
* scrollbar en el `<textarea>` (`::-webkit-scrollbar` de 6px, pulgar
|
|
3730
|
+
* `--ius-neutral-5` con radio pill, `scrollbar-width: thin`). Se portó el
|
|
3731
|
+
* golden.
|
|
3732
|
+
* 2. **`resizable`.** El `.d.ts` y el `.prompt.md` hablan del «control nativo
|
|
3733
|
+
* de arrastre (esquina inferior derecha)»; el golden desactiva el grip
|
|
3734
|
+
* nativo (`resize: none`) y dibuja una **manija propia** `.ius-tf__resize`
|
|
3735
|
+
* (ícono `drag_handle` rotado −45°, arrastre por pointer events, solo
|
|
3736
|
+
* vertical). Se portó el golden.
|
|
3737
|
+
* 3. **Tokens.** El panel «Tokens que consume» de `textarea.card.html` cita
|
|
3738
|
+
* `--ius-neutral-white` y `--ius-stroke` para fondo/borde; el CSS golden
|
|
3739
|
+
* hereda de `.ius-tf`: fondo `--ius-neutral-2` y borde `transparent` en
|
|
3740
|
+
* reposo. Se portó el golden.
|
|
3741
|
+
* 4. **`id` / `className` / `style`** del `.d.ts` no se exponen: el host ya es
|
|
3742
|
+
* el elemento estilable y el `id` del `<textarea>` se genera para enlazar el
|
|
3743
|
+
* `<label for>` (mismo criterio que `ius-text-field`).
|
|
3744
|
+
*
|
|
3745
|
+
* Nota de implementación: las clases `.ius-tf__*` (label/help/hint/field) se
|
|
3746
|
+
* **replican** en este SCSS porque bajo `ViewEncapsulation.Emulated` las de
|
|
3747
|
+
* TextField no alcanzan a otro componente — mismo precedente que
|
|
3748
|
+
* `ius-multi-text-field` y `ius-code-field`.
|
|
3749
|
+
*/
|
|
3750
|
+
declare class TextAreaComponent implements ControlValueAccessor {
|
|
3751
|
+
private readonly zone;
|
|
3752
|
+
/** Label sobre el campo (se pinta con `:` final). Sin label si se omite. */
|
|
3753
|
+
label?: string;
|
|
3754
|
+
/** Placeholder dentro del área de texto. */
|
|
3755
|
+
placeholder?: string;
|
|
3756
|
+
/** Punto rojo (•) a la izquierda del label. */
|
|
3757
|
+
required: boolean;
|
|
3758
|
+
/** Línea de ayuda bajo el campo (estado normal). */
|
|
3759
|
+
helpText?: string;
|
|
3760
|
+
/** Reemplaza `helpText` cuando `error` es `true`. */
|
|
3761
|
+
errorText?: string;
|
|
3762
|
+
/** Mostrar/ocultar la línea de ayuda. */
|
|
3763
|
+
showHelpText: boolean;
|
|
3764
|
+
/** Pastilla «?» junto al label (compone `ius-popover` en hover/foco). */
|
|
3765
|
+
showIconHelp: boolean;
|
|
3766
|
+
/** Título del contenido de ayuda (popover). */
|
|
3767
|
+
iconHelpTitle?: string;
|
|
3768
|
+
/** Cuerpo del contenido de ayuda (popover). */
|
|
3769
|
+
iconHelpContent?: string;
|
|
3770
|
+
/** `name` del `<textarea>` (envío como formulario nativo). */
|
|
3771
|
+
name?: string;
|
|
3772
|
+
protected readonly rowsState: _angular_core.WritableSignal<number>;
|
|
3773
|
+
/** Líneas mínimas visibles. Default `3`. */
|
|
3774
|
+
set rows(value: number | string | null | undefined);
|
|
3775
|
+
get rows(): number;
|
|
3776
|
+
private readonly maxRowsState;
|
|
3777
|
+
/** Tope de líneas antes de hacer scroll interno. Sin tope si se omite. */
|
|
3778
|
+
set maxRows(value: number | string | null | undefined);
|
|
3779
|
+
get maxRows(): number | undefined;
|
|
3780
|
+
protected readonly autoGrowState: _angular_core.WritableSignal<boolean>;
|
|
3781
|
+
/**
|
|
3782
|
+
* Crecer con el contenido entre `rows` y `maxRows`. Default `true`.
|
|
3783
|
+
* Con `false` la altura queda fija en `rows`. `resizable` lo anula.
|
|
3784
|
+
*/
|
|
3785
|
+
set autoGrow(value: boolean);
|
|
3786
|
+
get autoGrow(): boolean;
|
|
3787
|
+
protected readonly resizableState: _angular_core.WritableSignal<boolean>;
|
|
3788
|
+
/**
|
|
3789
|
+
* Permitir redimensionar a mano arrastrando la manija inferior derecha.
|
|
3790
|
+
* **Excluyente con `autoGrow`** (al activarlo, el auto-crecimiento se apaga).
|
|
3791
|
+
* Default `false`.
|
|
3792
|
+
*/
|
|
3793
|
+
set resizable(value: boolean);
|
|
3794
|
+
get resizable(): boolean;
|
|
3795
|
+
protected readonly maxLengthState: _angular_core.WritableSignal<number | undefined>;
|
|
3796
|
+
/** Límite de caracteres (`maxlength` nativo). */
|
|
3797
|
+
set maxLength(value: number | string | null | undefined);
|
|
3798
|
+
get maxLength(): number | undefined;
|
|
3799
|
+
/** Mostrar el contador `n / max` bajo el campo (requiere `maxLength`). */
|
|
3800
|
+
showCount: boolean;
|
|
3801
|
+
private readonly errorState;
|
|
3802
|
+
/** Estado de error (colores + `errorText`). */
|
|
3803
|
+
set error(value: boolean);
|
|
3804
|
+
get error(): boolean;
|
|
3805
|
+
private readonly disabledState;
|
|
3806
|
+
/** Estado deshabilitado (también lo escribe el CVA vía `setDisabledState`). */
|
|
3807
|
+
set disabled(value: boolean);
|
|
3808
|
+
get disabled(): boolean;
|
|
3809
|
+
protected readonly sizeState: _angular_core.WritableSignal<IusTextAreaSize>;
|
|
3810
|
+
/** Tamaño: `small` · `medium` (default) · `large`. */
|
|
3811
|
+
set size(value: IusTextAreaSize);
|
|
3812
|
+
get size(): IusTextAreaSize;
|
|
3813
|
+
protected readonly stateState: _angular_core.WritableSignal<IusTextAreaState | undefined>;
|
|
3814
|
+
/**
|
|
3815
|
+
* Forzar visualmente un estado completo. **Solo demos / especímenes** — no
|
|
3816
|
+
* usar en producción: no altera la interacción real, solo la piel.
|
|
3817
|
+
*/
|
|
3818
|
+
set state(value: IusTextAreaState | undefined);
|
|
3819
|
+
get state(): IusTextAreaState | undefined;
|
|
3820
|
+
/** Además del CVA: notifica cada cambio de valor del `<textarea>`. */
|
|
3821
|
+
readonly valueChange: EventEmitter<string>;
|
|
3822
|
+
protected readonly value: _angular_core.WritableSignal<string>;
|
|
3823
|
+
protected readonly focused: _angular_core.WritableSignal<boolean>;
|
|
3824
|
+
protected readonly areaId: string;
|
|
3825
|
+
protected readonly helpId: string;
|
|
3826
|
+
private readonly area;
|
|
3827
|
+
private onChange;
|
|
3828
|
+
private onTouched;
|
|
3829
|
+
/** Cancela los listeners del arrastre en curso (no-op si no hay ninguno). */
|
|
3830
|
+
private stopResize;
|
|
3831
|
+
protected readonly isDisabled: _angular_core.Signal<boolean>;
|
|
3832
|
+
protected readonly isError: _angular_core.Signal<boolean>;
|
|
3833
|
+
protected readonly isFocused: _angular_core.Signal<boolean>;
|
|
3834
|
+
protected get hint(): string | undefined;
|
|
3835
|
+
protected get showHint(): boolean;
|
|
3836
|
+
/** Texto del contador `n / max`, o `null` si no aplica. */
|
|
3837
|
+
protected get count(): string | null;
|
|
3838
|
+
/** `min-height` inline del golden cuando la altura se arrastra a mano. */
|
|
3839
|
+
protected get resizableMinHeight(): string | null;
|
|
3840
|
+
constructor();
|
|
3841
|
+
writeValue(value: string): void;
|
|
3842
|
+
registerOnChange(fn: (value: string) => void): void;
|
|
3843
|
+
registerOnTouched(fn: () => void): void;
|
|
3844
|
+
setDisabledState(isDisabled: boolean): void;
|
|
3845
|
+
protected onInput(event: Event): void;
|
|
3846
|
+
protected onFocus(): void;
|
|
3847
|
+
protected onBlur(): void;
|
|
3848
|
+
/**
|
|
3849
|
+
* Arrastre vertical de la manija (`.ius-tf__resize`). Port del `startResize`
|
|
3850
|
+
* golden: los listeners viven en `window` y se registran fuera de la zona
|
|
3851
|
+
* para no disparar change detection en cada `pointermove`.
|
|
3852
|
+
*/
|
|
3853
|
+
protected startResize(event: PointerEvent): void;
|
|
3854
|
+
/**
|
|
3855
|
+
* Ajusta la altura al contenido entre `rows` y `maxRows` (port literal del
|
|
3856
|
+
* `adjust()` golden). Se desactiva con `autoGrow=false` o `resizable=true`,
|
|
3857
|
+
* casos en que la altura la fija el atributo `rows` / el arrastre.
|
|
3858
|
+
*/
|
|
3859
|
+
private adjust;
|
|
3860
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TextAreaComponent, never>;
|
|
3861
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TextAreaComponent, "ius-text-area", never, { "label": { "alias": "label"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "helpText": { "alias": "helpText"; "required": false; }; "errorText": { "alias": "errorText"; "required": false; }; "showHelpText": { "alias": "showHelpText"; "required": false; }; "showIconHelp": { "alias": "showIconHelp"; "required": false; }; "iconHelpTitle": { "alias": "iconHelpTitle"; "required": false; }; "iconHelpContent": { "alias": "iconHelpContent"; "required": false; }; "name": { "alias": "name"; "required": false; }; "rows": { "alias": "rows"; "required": false; }; "maxRows": { "alias": "maxRows"; "required": false; }; "autoGrow": { "alias": "autoGrow"; "required": false; }; "resizable": { "alias": "resizable"; "required": false; }; "maxLength": { "alias": "maxLength"; "required": false; }; "showCount": { "alias": "showCount"; "required": false; }; "error": { "alias": "error"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "size": { "alias": "size"; "required": false; }; "state": { "alias": "state"; "required": false; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
3862
|
+
static ngAcceptInputType_required: unknown;
|
|
3863
|
+
static ngAcceptInputType_showHelpText: unknown;
|
|
3864
|
+
static ngAcceptInputType_showIconHelp: unknown;
|
|
3865
|
+
static ngAcceptInputType_autoGrow: unknown;
|
|
3866
|
+
static ngAcceptInputType_resizable: unknown;
|
|
3867
|
+
static ngAcceptInputType_showCount: unknown;
|
|
3868
|
+
static ngAcceptInputType_error: unknown;
|
|
3869
|
+
static ngAcceptInputType_disabled: unknown;
|
|
3870
|
+
}
|
|
3871
|
+
|
|
3872
|
+
/**
|
|
3873
|
+
* Tono semántico del estado. ALIAS de `StatusTone` (foundation
|
|
3874
|
+
* `status-catalog`): el vocabulario NO se re-declara aquí, solo se le pone el
|
|
3875
|
+
* nombre `Ius*` que usa el resto de la librería.
|
|
3876
|
+
*/
|
|
3877
|
+
type IusStatusChipTone = StatusTone;
|
|
3878
|
+
/** Escala tipográfica del chip: `small` = `--ius-fs-sm` · `medium` = `--ius-fs-base`. */
|
|
3879
|
+
type IusStatusChipSize = 'small' | 'medium';
|
|
3880
|
+
/**
|
|
3881
|
+
* StatusChip — Ius Design v2 (familia data-display).
|
|
3882
|
+
*
|
|
3883
|
+
* **Átomo visual de estado**: marca semántica (punto de 8px, o ícono) + el
|
|
3884
|
+
* rótulo EN EL COLOR DEL TONO, **sin píldora**. Es el patrón reconocible de
|
|
3885
|
+
* "estado", reusable por cualquier entidad del sistema (actuación, tarea,
|
|
3886
|
+
* factura, plan, usuario…). No es interactivo: no tiene outputs, ni foco, ni
|
|
3887
|
+
* máquina de estado.
|
|
3888
|
+
*
|
|
3889
|
+
* **QUÉ COMPONE.** Nada visual: es una hoja. Lo que SÍ consume es la foundation
|
|
3890
|
+
* `status-catalog` (`resolveStatus`), donde vive el **vocabulario** — qué
|
|
3891
|
+
* estados existen por entidad y con qué `label · tone · icon`. El átomo solo
|
|
3892
|
+
* pinta: se le pasa `vocab` + `status` y resuelve; o se le pasan
|
|
3893
|
+
* `tone`/`label`/`icon` directo (escape hatch genérico). `vocab` por defecto =
|
|
3894
|
+
* `actuacion` (ciclo `nueva → vista → gestion → cerrada`). La actuación **no
|
|
3895
|
+
* vence**: el vencimiento es estado de sus TAREAS (`vocab="gestion"`), por eso
|
|
3896
|
+
* `gestion` de actuación es `primary` y no `warning`.
|
|
3897
|
+
*
|
|
3898
|
+
* **Resolución (orden del golden).**
|
|
3899
|
+
* - `meta = resolveStatus(vocab, status, customMap)`
|
|
3900
|
+
* - `tono = tone || meta?.tone || 'neutral'`
|
|
3901
|
+
* - `rótulo = <ng-content> › label › meta?.label › status crudo`
|
|
3902
|
+
* - `glifo = icon===true ? meta?.icon : (string ? ese glifo : ninguno → punto)`
|
|
3903
|
+
*
|
|
3904
|
+
* Un `vocab`/`status` **desconocido nunca falla**: `meta` queda `null` y el chip
|
|
3905
|
+
* cae a `neutral` con el `status` crudo como rótulo.
|
|
3906
|
+
*
|
|
3907
|
+
* **CUÁNDO NO USARLO.**
|
|
3908
|
+
* - Etiqueta / categoría / filtro (píldora con fondo) → `ius-tag`.
|
|
3909
|
+
* - Punto o contador atómico SIN texto → `ius-insignia`.
|
|
3910
|
+
* - Página completa de error/vacío (404, 500) → `ius-status-state`.
|
|
3911
|
+
* - Token de un evento de agenda con hora → `EventPill` (aún no portado).
|
|
3912
|
+
* - Un color de IDENTIDAD/categoría (hue "fruta") → `CategoryPalette`: esto es
|
|
3913
|
+
* ESTADO, y el estado siempre es una familia semántica.
|
|
3914
|
+
*
|
|
3915
|
+
* **A11y.** El host lleva `role="status"`; la marca (punto/ícono) es
|
|
3916
|
+
* `aria-hidden="true"` porque el color NO puede ser el único canal de
|
|
3917
|
+
* información: el rótulo textual es quien comunica el estado.
|
|
3918
|
+
*
|
|
3919
|
+
* `id` / `class` / `style` son passthrough natural del host de Angular: no hay
|
|
3920
|
+
* inputs para ellos.
|
|
3921
|
+
*
|
|
3922
|
+
* FUENTE DE VERDAD. Proyecto Claude Design →
|
|
3923
|
+
* `components/data-display/StatusChip/StatusChip.jsx` + `.d.ts` + `.ng-spec.md`
|
|
3924
|
+
* + `statuschip.card.html` + `playground.card.html`.
|
|
3925
|
+
*
|
|
3926
|
+
* DIVERGENCIAS / DECISIONES DE PORT (para que diseño las resuelva):
|
|
3927
|
+
* 1. `label` es `string` (el golden lo tipa `ReactNode`). Regla 5 del port. Si
|
|
3928
|
+
* hace falta contenido rico se PROYECTA (`<ng-content>`), que gana sobre
|
|
3929
|
+
* `label`.
|
|
3930
|
+
* 2. `icon` como **atributo sin valor** (`<ius-status-chip icon>`) llega como
|
|
3931
|
+
* `''`, no como `true`: se interpreta como `true` (ícono del catálogo), que
|
|
3932
|
+
* es la traducción fiel del `<StatusChip icon />` de React. También se
|
|
3933
|
+
* aceptan los strings `'true'` / `'false'`. Un string no vacío distinto de
|
|
3934
|
+
* esos dos es el glifo Material Symbols. NO se usa `booleanAttribute`:
|
|
3935
|
+
* destruiría el caso string.
|
|
3936
|
+
* 3. `data-size` se omite cuando vale el default (`small`), igual que `ius-tag`
|
|
3937
|
+
* e `ius-insignia`; el golden lo emite siempre. Es equivalente visualmente
|
|
3938
|
+
* (el bloque base del CSS ES el de `small`), pero el DOM difiere.
|
|
3939
|
+
* 4. El golden no expone `aria-label`; se confía en el rótulo textual. Si un
|
|
3940
|
+
* consumidor necesitara un rótulo accesible distinto del visible, lo pone
|
|
3941
|
+
* él sobre el host (passthrough).
|
|
3942
|
+
*/
|
|
3943
|
+
declare class StatusChipComponent implements AfterViewInit {
|
|
3944
|
+
/**
|
|
3945
|
+
* Entidad cuyo vocabulario (en `status-catalog`) resuelve el `status`.
|
|
3946
|
+
* Default `'actuacion'`. Una entidad fuera del catálogo no falla: el chip cae
|
|
3947
|
+
* a `neutral`.
|
|
3948
|
+
*/
|
|
3949
|
+
readonly vocab: _angular_core.InputSignal<string>;
|
|
3950
|
+
/**
|
|
3951
|
+
* Clave del estado DENTRO del `vocab` (p. ej. `'gestion'`). Resuelve rótulo +
|
|
3952
|
+
* tono + ícono. La urgencia de una tarea (`por_vencer`/`vencida`) se DERIVA de
|
|
3953
|
+
* la fecha límite en el consumidor ANTES de llegar aquí.
|
|
3954
|
+
*/
|
|
3955
|
+
readonly status: _angular_core.InputSignal<string | undefined>;
|
|
3956
|
+
/**
|
|
3957
|
+
* Fuerza el tono y sobrescribe el del catálogo. Escape hatch genérico para
|
|
3958
|
+
* estados que todavía no tienen vocabulario.
|
|
3959
|
+
*/
|
|
3960
|
+
readonly tone: _angular_core.InputSignal<StatusTone | undefined>;
|
|
3961
|
+
/**
|
|
3962
|
+
* Sobrescribe el rótulo. Alternativa a proyectar contenido; si hay
|
|
3963
|
+
* `<ng-content>`, la proyección GANA. Si no resuelve nada, se muestra el
|
|
3964
|
+
* `status` crudo.
|
|
3965
|
+
*/
|
|
3966
|
+
readonly label: _angular_core.InputSignal<string | undefined>;
|
|
3967
|
+
/**
|
|
3968
|
+
* Marca del chip. `false`/ausente → punto de 8px (default). `true` (o el
|
|
3969
|
+
* atributo sin valor `icon`) → ícono del estado tomado del catálogo. Un string
|
|
3970
|
+
* no vacío → ese glifo Material Symbols Rounded (p. ej. `'event_busy'`).
|
|
3971
|
+
* Es `boolean | string` a propósito: no lleva `booleanAttribute`.
|
|
3972
|
+
*/
|
|
3973
|
+
readonly icon: _angular_core.InputSignal<string | boolean | undefined>;
|
|
3974
|
+
/** Escala tipográfica: `small` (`fs-sm`, default) · `medium` (`fs-base`). */
|
|
3975
|
+
readonly size: _angular_core.InputSignal<IusStatusChipSize>;
|
|
3976
|
+
/**
|
|
3977
|
+
* Extiende / sobrescribe el vocabulario EN RUNTIME (`status → StatusMeta`).
|
|
3978
|
+
* Gana sobre el catálogo central. Si un estado pasado por aquí se vuelve
|
|
3979
|
+
* común, se PROMUEVE a `status-catalog`.
|
|
3980
|
+
*/
|
|
3981
|
+
readonly customMap: _angular_core.InputSignal<Readonly<Record<string, StatusMeta>> | undefined>;
|
|
3982
|
+
/**
|
|
3983
|
+
* Retro-compat con el estático `StatusChip.states` del golden: alias al
|
|
3984
|
+
* vocabulario `actuacion` del catálogo. NO re-declara nada; es la misma
|
|
3985
|
+
* referencia que `STATUS_VOCAB.actuacion`.
|
|
3986
|
+
*/
|
|
3987
|
+
static readonly states: StatusVocabMap;
|
|
3988
|
+
/**
|
|
3989
|
+
* Retro-compat con el estático `StatusChip.order` del golden: claves de
|
|
3990
|
+
* `actuacion` en orden de ciclo, leídas del catálogo con `statusOrder`.
|
|
3991
|
+
*/
|
|
3992
|
+
static readonly order: readonly ActuacionStatus[];
|
|
3993
|
+
/**
|
|
3994
|
+
* Span donde se estampa `<ng-content>`. Se inspecciona UNA sola vez para saber
|
|
3995
|
+
* si el consumidor proyectó rótulo (patrón de `ius-divider`: bajo OnPush
|
|
3996
|
+
* `<ng-content>` no se re-evalúa, así que no hay forma reactiva de saberlo).
|
|
3997
|
+
*/
|
|
3998
|
+
private proyeccionRef;
|
|
3999
|
+
/** `true` si el consumidor proyectó contenido no vacío. */
|
|
4000
|
+
protected readonly hayProyeccion: _angular_core.WritableSignal<boolean>;
|
|
4001
|
+
/** Entrada del catálogo, o `null` si el `vocab`/`status` no se reconoce. */
|
|
4002
|
+
protected readonly meta: _angular_core.Signal<StatusMeta | null>;
|
|
4003
|
+
/**
|
|
4004
|
+
* Tono aplicado: `tone` explícito › tono del catálogo › `neutral`.
|
|
4005
|
+
* Se usa `||` (no `??`) para calcar el fallback del golden.
|
|
4006
|
+
*/
|
|
4007
|
+
protected readonly tonoEfectivo: _angular_core.Signal<StatusTone>;
|
|
4008
|
+
/**
|
|
4009
|
+
* Rótulo cuando NO hay proyección: `label` › `meta.label` › `status` crudo.
|
|
4010
|
+
* Se usa `??` porque el golden compara con `!= null`: un `label=""` explícito
|
|
4011
|
+
* es un override válido a cadena vacía.
|
|
4012
|
+
*/
|
|
4013
|
+
protected readonly rotulo: _angular_core.Signal<string>;
|
|
4014
|
+
/**
|
|
4015
|
+
* Glifo Material Symbols a pintar en lugar del punto, o `null` para el punto.
|
|
4016
|
+
* Se parsea a mano porque `icon` es `boolean | string`: cualquier transform
|
|
4017
|
+
* booleano destruiría el caso "glifo arbitrario".
|
|
4018
|
+
*/
|
|
4019
|
+
protected readonly glifo: _angular_core.Signal<string | null>;
|
|
4020
|
+
/** Detección única de proyección (igual que `ius-divider`). */
|
|
4021
|
+
ngAfterViewInit(): void;
|
|
4022
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<StatusChipComponent, never>;
|
|
4023
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<StatusChipComponent, "ius-status-chip", never, { "vocab": { "alias": "vocab"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "tone": { "alias": "tone"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "customMap": { "alias": "customMap"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
4024
|
+
}
|
|
4025
|
+
|
|
4026
|
+
/** Tipo del campo → fija los operadores y el control de valor. */
|
|
4027
|
+
type IusFilterFieldType = 'text' | 'enum' | 'number' | 'date';
|
|
4028
|
+
/** Escala de los controles del panel. */
|
|
4029
|
+
type IusQueryBuilderSize = 'small' | 'medium';
|
|
4030
|
+
/** Valor escalar de una regla (el golden nunca castea a número). */
|
|
4031
|
+
type IusFilterValue = string | number;
|
|
4032
|
+
/** Opción de un campo `type: 'enum'`. */
|
|
4033
|
+
interface IusFilterFieldOption {
|
|
4034
|
+
/** Valor único que viaja en la regla. */
|
|
4035
|
+
value: IusFilterValue;
|
|
4036
|
+
/**
|
|
4037
|
+
* Etiqueta visible. En el golden es `ReactNode`; en Angular se degrada a
|
|
4038
|
+
* `string` (regla 5 del port: un ReactNode dentro de un objeto de datos
|
|
4039
|
+
* baja a texto plano).
|
|
4040
|
+
*/
|
|
4041
|
+
label: string;
|
|
4042
|
+
}
|
|
4043
|
+
/** Campo filtrable: define los operadores disponibles y el control de valor. */
|
|
4044
|
+
interface IusFilterField {
|
|
4045
|
+
/** Clave del campo (lo que viaja en `IusFilterRule.field`). */
|
|
4046
|
+
value: string;
|
|
4047
|
+
/**
|
|
4048
|
+
* Etiqueta visible en el selector de campo. `ReactNode` en el golden →
|
|
4049
|
+
* `string` aquí (regla 5 del port).
|
|
4050
|
+
*/
|
|
4051
|
+
label: string;
|
|
4052
|
+
/** Tipo del campo. Default `text`. */
|
|
4053
|
+
type?: IusFilterFieldType;
|
|
4054
|
+
/**
|
|
4055
|
+
* Ícono Material Symbols del campo. **Reservado**: el selector de campo no
|
|
4056
|
+
* lo muestra (el golden lo omite a propósito para no meter ruido en el
|
|
4057
|
+
* menú). Se conserva en el contrato por paridad con `FilterField.icon`.
|
|
4058
|
+
*/
|
|
4059
|
+
icon?: string;
|
|
4060
|
+
/** Opciones para `type: 'enum'`. */
|
|
4061
|
+
options?: IusFilterFieldOption[];
|
|
4062
|
+
/** Placeholder del control de valor (solo `text` / `number`). */
|
|
4063
|
+
placeholder?: string;
|
|
4064
|
+
}
|
|
4065
|
+
/** Regla aplicada: campo · operador · valor. Combinación siempre Y (AND). */
|
|
4066
|
+
interface IusFilterRule {
|
|
4067
|
+
/** Clave del campo (`IusFilterField.value`). */
|
|
4068
|
+
field: string;
|
|
4069
|
+
/** Clave del operador (ver `IUS_FILTER_OPERATORS`). */
|
|
4070
|
+
operator: string;
|
|
4071
|
+
/** Valor del criterio. */
|
|
4072
|
+
value: IusFilterValue;
|
|
4073
|
+
}
|
|
4074
|
+
/**
|
|
4075
|
+
* Operadores contextuales por tipo de campo — espejo literal de `OPERATORS`
|
|
4076
|
+
* del golden. El primero de cada lista es el default al elegir el campo.
|
|
4077
|
+
* Se exporta para que el consumidor pueda pintar las reglas aplicadas (chips,
|
|
4078
|
+
* resumen…) con la misma etiqueta que usa el panel.
|
|
4079
|
+
*/
|
|
4080
|
+
declare const IUS_FILTER_OPERATORS: Readonly<Record<IusFilterFieldType, SelectOption[]>>;
|
|
4081
|
+
/**
|
|
4082
|
+
* Fila del borrador. `id` es un **contador incremental de módulo** (el `RID`
|
|
4083
|
+
* del golden): es la identidad que usa el `track` del `@for`. Nunca se traquea
|
|
4084
|
+
* por índice — al quitar una fila intermedia Angular reciclaría los
|
|
4085
|
+
* `ius-select`/`ius-text-field` y los valores se cruzarían entre filas.
|
|
4086
|
+
*/
|
|
4087
|
+
interface DraftRow {
|
|
4088
|
+
id: number;
|
|
4089
|
+
field: string;
|
|
4090
|
+
operator: string;
|
|
4091
|
+
value: IusFilterValue;
|
|
4092
|
+
}
|
|
4093
|
+
/**
|
|
4094
|
+
* QueryBuilder — Ius Design v2 (familia navigation).
|
|
4095
|
+
*
|
|
4096
|
+
* Constructor de **filtros secundarios estructurados** (estilo Linear/Vercel):
|
|
4097
|
+
* un botón "Filtros" con contador abre un **Popover** con **filas de criterio**
|
|
4098
|
+
* —campo · operador · valor · quitar— más un footer "Añadir filtro · Limpiar
|
|
4099
|
+
* todo · Aplicar", y un estado vacío.
|
|
4100
|
+
*
|
|
4101
|
+
* Decisiones de UX fijas (vienen del golden, no son configurables):
|
|
4102
|
+
* - **Operadores contextuales** por tipo de campo (text → Contiene/Es igual/No
|
|
4103
|
+
* contiene · enum → Es/No es · number → Igual/≥/≤ · date → Entre/Antes/Después).
|
|
4104
|
+
* - **Staged**: el panel arma un *borrador* y solo confirma al pulsar "Aplicar"
|
|
4105
|
+
* (nunca filtra en vivo). Al abrir, el borrador se re-siembra desde lo aplicado.
|
|
4106
|
+
* - **Solo Y (AND)** y **un criterio por campo**: los campos ya usados se
|
|
4107
|
+
* deshabilitan en el selector y al cubrirlos todos se apaga "Añadir filtro".
|
|
4108
|
+
*
|
|
4109
|
+
* Compone (no reimplementa) `ius-popover`, `ius-select`, `ius-text-field`,
|
|
4110
|
+
* `ius-icon-button`, `ius-button` y `ius-text-button`.
|
|
4111
|
+
*
|
|
4112
|
+
* **Cuándo NO usarlo**: filtro primario rápido por chips → `FilterBar`; rango
|
|
4113
|
+
* de fechas → control dedicado con DatePicker; búsqueda libre → `SearchBar`;
|
|
4114
|
+
* captura de datos → un formulario.
|
|
4115
|
+
*
|
|
4116
|
+
* Fuente de verdad: `components/navigation/QueryBuilder/QueryBuilder.jsx` +
|
|
4117
|
+
* `QueryBuilder.d.ts` + `QueryBuilder.ng-spec.md` del proyecto Claude Design.
|
|
4118
|
+
*
|
|
4119
|
+
* ---
|
|
4120
|
+
* **Divergencias doc-vs-golden anotadas** (manda el golden, diseño decide):
|
|
4121
|
+
* 1. `applyLabel` NO es el texto del botón de confirmar en el caso general: el
|
|
4122
|
+
* golden lo calcula («Aplicar N filtro/filtros» con reglas válidas; «Quitar
|
|
4123
|
+
* filtros» si no hay ninguna válida pero sí aplicadas) y solo cae a
|
|
4124
|
+
* `applyLabel` cuando el borrador y lo aplicado están vacíos. La ng-spec lo
|
|
4125
|
+
* presenta como una etiqueta llana.
|
|
4126
|
+
* 2. Los textos "y" (conjunción), "Selecciona un valor", "Escribe un valor" /
|
|
4127
|
+
* "Escribe un número" y "Quitar filtro" están **fijos en el golden**: no hay
|
|
4128
|
+
* input para traducirlos. Si diseño los quiere configurables, primero
|
|
4129
|
+
* cambia el golden.
|
|
4130
|
+
* 3. El campo `type: 'number'` usa un TextField de texto plano (el golden no
|
|
4131
|
+
* pasa `type="number"`), así que el valor viaja siempre como `string`.
|
|
4132
|
+
* 4. `FilterField.icon` está en el contrato pero el golden **no lo pinta**.
|
|
4133
|
+
*
|
|
4134
|
+
* **Decisiones del port a Angular**:
|
|
4135
|
+
* - El Popover se usa en modo controlado (`[open]` + `(openChange)`) y **sin**
|
|
4136
|
+
* `dismissable`, igual que el golden (que tampoco lo activa). Además, aquí es
|
|
4137
|
+
* obligatorio: el menú del `ius-select` vive en OTRO overlay del CDK, así que
|
|
4138
|
+
* `outsidePointerEvents()` del Popover lo leería como "clic fuera" y cerraría
|
|
4139
|
+
* el panel al elegir cualquier opción. El panel se cierra con el propio botón
|
|
4140
|
+
* "Filtros" o con "Aplicar".
|
|
4141
|
+
* - El ancho/padding del panel (`popoverStyle` del golden) se porta como la
|
|
4142
|
+
* piel `.ius-popover.ius-querybuilder-pop` en `popover/popover.component.scss`
|
|
4143
|
+
* (mismo patrón que `.ius-tooltip` y `.ius-dropdown-pop`): el panel se estampa
|
|
4144
|
+
* desde el template del Popover y lleva SU encapsulación.
|
|
4145
|
+
* - El valor de texto se escribe con `[ngModel]` porque `TextFieldComponent`
|
|
4146
|
+
* expone su valor solo por `ControlValueAccessor`. Hace falta para poder
|
|
4147
|
+
* **vaciar** el control cuando cambia el campo de la fila.
|
|
4148
|
+
*/
|
|
4149
|
+
declare class QueryBuilderComponent {
|
|
4150
|
+
/** Campos filtrables: definen los operadores y el control de valor. */
|
|
4151
|
+
readonly fields: _angular_core.InputSignal<readonly IusFilterField[]>;
|
|
4152
|
+
/**
|
|
4153
|
+
* Reglas aplicadas — **modo controlado**. Si se enlaza, el componente no
|
|
4154
|
+
* guarda estado propio: hay que reaccionar a `apply` y volver a enlazar.
|
|
4155
|
+
*/
|
|
4156
|
+
readonly value: _angular_core.InputSignal<readonly IusFilterRule[] | undefined>;
|
|
4157
|
+
/** Reglas iniciales del modo **no controlado**. */
|
|
4158
|
+
readonly defaultValue: _angular_core.InputSignal<readonly IusFilterRule[] | undefined>;
|
|
4159
|
+
/** Texto del botón disparador. */
|
|
4160
|
+
readonly triggerLabel: _angular_core.InputSignal<string>;
|
|
4161
|
+
/** Colocación del panel respecto del disparador. */
|
|
4162
|
+
readonly placement: _angular_core.InputSignal<IusPopoverPlacement>;
|
|
4163
|
+
/** Escala de los controles del panel (se propaga a Select/TextField/botones). */
|
|
4164
|
+
readonly size: _angular_core.InputSignal<IusQueryBuilderSize>;
|
|
4165
|
+
/**
|
|
4166
|
+
* Máximo de filas. Default = `fields.length` (un criterio por campo: no se
|
|
4167
|
+
* repite campo y al cubrirlos todos se desactiva "Añadir filtro"). Fíjalo
|
|
4168
|
+
* solo para un tope distinto.
|
|
4169
|
+
*/
|
|
4170
|
+
readonly maxRows: _angular_core.InputSignal<number | undefined>;
|
|
4171
|
+
/** Etiqueta del botón que añade una fila. */
|
|
4172
|
+
readonly addLabel: _angular_core.InputSignal<string>;
|
|
4173
|
+
/** Etiqueta del botón que vacía el borrador. */
|
|
4174
|
+
readonly clearLabel: _angular_core.InputSignal<string>;
|
|
4175
|
+
/**
|
|
4176
|
+
* Etiqueta del botón de confirmar **solo cuando no hay nada que aplicar ni
|
|
4177
|
+
* aplicado**. Ver la divergencia 1 del comentario de cabecera.
|
|
4178
|
+
*/
|
|
4179
|
+
readonly applyLabel: _angular_core.InputSignal<string>;
|
|
4180
|
+
/** Título del estado vacío del panel. */
|
|
4181
|
+
readonly emptyTitle: _angular_core.InputSignal<string>;
|
|
4182
|
+
/** Pista del estado vacío del panel. */
|
|
4183
|
+
readonly emptyHint: _angular_core.InputSignal<string>;
|
|
4184
|
+
/**
|
|
4185
|
+
* Reglas válidas al pulsar "Aplicar" (espejo de `onApply`). Nombre fijado
|
|
4186
|
+
* por la ng-spec; no colisiona con ningún evento del DOM.
|
|
4187
|
+
*/
|
|
4188
|
+
readonly apply: _angular_core.OutputEmitterRef<IusFilterRule[]>;
|
|
4189
|
+
/** `null` = todavía no se ha aplicado nada → manda `defaultValue`. */
|
|
4190
|
+
private readonly internalApplied;
|
|
4191
|
+
/** Apertura del panel (el Popover se usa en modo controlado). */
|
|
4192
|
+
protected readonly isOpen: _angular_core.WritableSignal<boolean>;
|
|
4193
|
+
/** Borrador del panel: lo que se está armando, aún sin aplicar. */
|
|
4194
|
+
protected readonly draft: _angular_core.WritableSignal<readonly DraftRow[]>;
|
|
4195
|
+
/** Reglas efectivamente aplicadas (controlado › interno › `defaultValue`). */
|
|
4196
|
+
protected readonly applied: _angular_core.Signal<readonly IusFilterRule[]>;
|
|
4197
|
+
/** Contador del disparador. */
|
|
4198
|
+
protected readonly count: _angular_core.Signal<number>;
|
|
4199
|
+
/** Índice campo → definición, para resolver tipo/opciones sin recorrer. */
|
|
4200
|
+
private readonly fieldIndex;
|
|
4201
|
+
/**
|
|
4202
|
+
* Opciones del selector de campo, por fila: un campo ya usado en OTRA fila
|
|
4203
|
+
* se deshabilita (un criterio por campo). Memorizado para no crear arrays
|
|
4204
|
+
* nuevos en cada ciclo de detección (dispararía el setter de `ius-select`).
|
|
4205
|
+
*/
|
|
4206
|
+
protected readonly fieldOptions: _angular_core.Signal<Record<number, SelectOption[]>>;
|
|
4207
|
+
/** Opciones del control de valor para los campos `enum`, por campo. */
|
|
4208
|
+
protected readonly enumOptions: _angular_core.Signal<Record<string, SelectOption[]>>;
|
|
4209
|
+
/** Tope efectivo de filas. */
|
|
4210
|
+
protected readonly maxRowsEff: _angular_core.Signal<number>;
|
|
4211
|
+
/** Ya no caben más filas → "Añadir filtro" apagado. */
|
|
4212
|
+
protected readonly atCap: _angular_core.Signal<boolean>;
|
|
4213
|
+
/** Filas del borrador con valor utilizable. */
|
|
4214
|
+
protected readonly validCount: _angular_core.Signal<number>;
|
|
4215
|
+
/** Texto del botón de confirmar (lógica del golden; ver divergencia 1). */
|
|
4216
|
+
protected readonly applyText: _angular_core.Signal<string>;
|
|
4217
|
+
/** Sin nada que aplicar y sin nada aplicado → no hay acción posible. */
|
|
4218
|
+
protected readonly applyDisabled: _angular_core.Signal<boolean>;
|
|
4219
|
+
/** El selector de campo se vuelve buscable con listas largas (golden: `> 6`). */
|
|
4220
|
+
protected readonly fieldsSearchable: _angular_core.Signal<boolean>;
|
|
4221
|
+
/** Tipo del campo (default `text`, como el golden). */
|
|
4222
|
+
protected typeOf(fieldValue: string): IusFilterFieldType;
|
|
4223
|
+
/** Operadores contextuales del campo — referencia estable por tipo. */
|
|
4224
|
+
protected operatorOptions(fieldValue: string): SelectOption[];
|
|
4225
|
+
/** Opciones del selector de campo de una fila (referencia memorizada). */
|
|
4226
|
+
protected fieldOptionsFor(rid: number): SelectOption[];
|
|
4227
|
+
/** Opciones del valor `enum` de un campo. */
|
|
4228
|
+
protected valueOptions(fieldValue: string): SelectOption[];
|
|
4229
|
+
/** El valor `enum` también se vuelve buscable con listas largas (golden: > 6). */
|
|
4230
|
+
protected valueSearchable(fieldValue: string): boolean;
|
|
4231
|
+
/** Placeholder del control de texto (golden: el del campo o uno por tipo). */
|
|
4232
|
+
protected valuePlaceholder(fieldValue: string): string;
|
|
4233
|
+
/** Valor para el `ius-select` de `enum`: `''` → `null` (muestra placeholder). */
|
|
4234
|
+
protected selectValue(value: IusFilterValue): IusSelectValue | null;
|
|
4235
|
+
/** Valor para el `ius-text-field` (siempre `string`). */
|
|
4236
|
+
protected textValue(value: IusFilterValue): string;
|
|
4237
|
+
/**
|
|
4238
|
+
* Al **abrir**, el borrador se re-siembra desde las reglas aplicadas (espejo
|
|
4239
|
+
* del `useEffect([open])` del golden): lo que se dejó a medias sin aplicar se
|
|
4240
|
+
* descarta.
|
|
4241
|
+
*/
|
|
4242
|
+
protected onOpenChange(open: boolean): void;
|
|
4243
|
+
/** Crea una fila nueva (espejo de `mkRow`). */
|
|
4244
|
+
private mkRow;
|
|
4245
|
+
/** Parche inmutable de una fila por `id`. */
|
|
4246
|
+
private patch;
|
|
4247
|
+
/** Cambiar el campo resetea operador (al default del tipo) y valor. */
|
|
4248
|
+
protected onFieldChange(rid: number, next: IusSelectValue | IusSelectValue[] | null): void;
|
|
4249
|
+
/** Cambio de operador. */
|
|
4250
|
+
protected onOperatorChange(rid: number, next: IusSelectValue | IusSelectValue[] | null): void;
|
|
4251
|
+
/** Cambio del valor `enum`. */
|
|
4252
|
+
protected onValueChange(rid: number, next: IusSelectValue | IusSelectValue[] | null): void;
|
|
4253
|
+
/** Cambio del valor de texto/número (incluye el botón de limpiar). */
|
|
4254
|
+
protected onTextValueChange(rid: number, next: string): void;
|
|
4255
|
+
/** Normaliza la salida del `ius-select` (single) a escalar. */
|
|
4256
|
+
private scalar;
|
|
4257
|
+
/** Añade una fila con el primer campo libre (respetando `maxRows`). */
|
|
4258
|
+
protected addRow(): void;
|
|
4259
|
+
/** Quita una fila por su `id` (nunca por índice). */
|
|
4260
|
+
protected removeRow(rid: number): void;
|
|
4261
|
+
/** Vacía el borrador (todavía no aplica nada: hay que confirmar). */
|
|
4262
|
+
protected clearAll(): void;
|
|
4263
|
+
/** Confirma el borrador: emite las reglas válidas y cierra el panel. */
|
|
4264
|
+
protected applyDraft(): void;
|
|
4265
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<QueryBuilderComponent, never>;
|
|
4266
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<QueryBuilderComponent, "ius-query-builder", never, { "fields": { "alias": "fields"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "defaultValue": { "alias": "defaultValue"; "required": false; "isSignal": true; }; "triggerLabel": { "alias": "triggerLabel"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "maxRows": { "alias": "maxRows"; "required": false; "isSignal": true; }; "addLabel": { "alias": "addLabel"; "required": false; "isSignal": true; }; "clearLabel": { "alias": "clearLabel"; "required": false; "isSignal": true; }; "applyLabel": { "alias": "applyLabel"; "required": false; "isSignal": true; }; "emptyTitle": { "alias": "emptyTitle"; "required": false; "isSignal": true; }; "emptyHint": { "alias": "emptyHint"; "required": false; "isSignal": true; }; }, { "apply": "apply"; }, never, never, true, never>;
|
|
4267
|
+
}
|
|
4268
|
+
|
|
4269
|
+
/**
|
|
4270
|
+
* SegmentGroup — Ius Design v2 (familia layout).
|
|
4271
|
+
*
|
|
4272
|
+
* Agrupa **dos o más controles tipo píldora** ya existentes (`ius-button`
|
|
4273
|
+
* `variant="outline"`, `ius-dropdown` `variant="outline"`, el disparador de
|
|
4274
|
+
* `ius-query-builder`…) en un **bloque segmentado**: el grupo aporta el ÚNICO
|
|
4275
|
+
* shell (borde 1px + radio), los controles internos pierden borde/radio/fondo
|
|
4276
|
+
* propios, el borde compartido se convierte en un **divisor de 1px** y las
|
|
4277
|
+
* esquinas redondeadas quedan solo en el exterior (izquierdas del primero,
|
|
4278
|
+
* derechas del último). Es puramente visual: **cada hijo conserva su propio
|
|
4279
|
+
* clic, su propio menú y su propio estado**; el grupo no tiene outputs.
|
|
4280
|
+
*
|
|
4281
|
+
* Compone: nada. Solo proyecta (`<ng-content>`) y re-estiliza a sus hijos.
|
|
4282
|
+
*
|
|
4283
|
+
* **Cuándo NO usarlo**
|
|
4284
|
+
* - Elegir UNA opción entre varias → `ius-segmented-control` (eso sí es un
|
|
4285
|
+
* input con selección única).
|
|
4286
|
+
* - Una acción primaria suelta → `ius-button` a secas.
|
|
4287
|
+
* - Barra de filtros de chips removibles → FilterBar/`ius-chip`.
|
|
4288
|
+
*
|
|
4289
|
+
* **Requisito de los hijos.** Todos con tratamiento outline y la misma altura.
|
|
4290
|
+
* OJO: en esta librería `ius-button variant="outline"` es el outline VERDE
|
|
4291
|
+
* (`--ius-success-*`, port verbatim de `Button.jsx`) y es más alto que los
|
|
4292
|
+
* disparadores outline de Dropdown/QueryBuilder (padding `sm lg` vs `xs sm`).
|
|
4293
|
+
* El grupo estira a todos al alto del más alto, pero el color del texto del
|
|
4294
|
+
* Button sigue siendo el suyo. La `SegmentGroup.prompt.md` describe el outline
|
|
4295
|
+
* como «borde 1px stroke + radio md», que es el de Dropdown/QueryBuilder, no el
|
|
4296
|
+
* del Button: divergencia de diseño a resolver por diseño, no por el port.
|
|
4297
|
+
*
|
|
4298
|
+
* **Divergencias doc-vs-golden** (manda el `.jsx`, según regla del repo):
|
|
4299
|
+
* - `segmentgroup.card.html` (panel «Tokens que consume») cita
|
|
4300
|
+
* `--ius-surface-card` para el fondo y `--ius-radius-lg` (14px) para las
|
|
4301
|
+
* esquinas. `SegmentGroup.jsx` usa `--ius-neutral-white` y
|
|
4302
|
+
* `--ius-radius-md` (8px). Se portó el JSX. El fondo es equivalente
|
|
4303
|
+
* (`--ius-surface-card` → `--ius-neutral-white`), pero el radio SÍ difiere:
|
|
4304
|
+
* 8px reales frente a 14px documentados. Pendiente de que diseño elija.
|
|
4305
|
+
*
|
|
4306
|
+
* Fuente de verdad: `components/layout/SegmentGroup/SegmentGroup.jsx` +
|
|
4307
|
+
* `SegmentGroup.d.ts` + `SegmentGroup.ng-spec.md` (proyecto Claude Design).
|
|
4308
|
+
*
|
|
4309
|
+
* @example
|
|
4310
|
+
* ```html
|
|
4311
|
+
* <ius-segment-group ariaLabel="Filtros de la lista">
|
|
4312
|
+
* <ius-dropdown variant="outline" triggerIcon="calendar_month"
|
|
4313
|
+
* triggerLabel="Últimos 30 días" [items]="rangos" selectable />
|
|
4314
|
+
* <ius-query-builder [fields]="campos" (apply)="aplicar($event)" />
|
|
4315
|
+
* </ius-segment-group>
|
|
4316
|
+
* ```
|
|
4317
|
+
*/
|
|
4318
|
+
declare class SegmentGroupComponent {
|
|
4319
|
+
/**
|
|
4320
|
+
* Etiqueta accesible del grupo — se emite como `aria-label` sobre el
|
|
4321
|
+
* `role="group"` del host. Sin ella el grupo queda sin nombre accesible:
|
|
4322
|
+
* decláralo siempre que el conjunto tenga un significado propio
|
|
4323
|
+
* («Herramientas de la lista», «Filtros»…).
|
|
4324
|
+
*/
|
|
4325
|
+
readonly ariaLabel: _angular_core.InputSignal<string | undefined>;
|
|
4326
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SegmentGroupComponent, never>;
|
|
4327
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<SegmentGroupComponent, "ius-segment-group", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
4328
|
+
}
|
|
4329
|
+
|
|
4330
|
+
export { AlertComponent, AvatarComponent, ButtonComponent, CaptchaFieldComponent, CarouselComponent, CheckboxComponent, ChipComponent, CircularProgressComponent, CodeFieldComponent, CountdownComponent, CountdownRingComponent, DescriptionListComponent, DividerComponent, DropdownComponent, EleniaBubbleComponent, EleniaOrbComponent, EmptyStateComponent, FlexComponent, HeaderBarComponent, ILLUSTRATIONS, ILLUSTRATION_ALIAS, ILLUSTRATION_NAMES, IUS_FILTER_OPERATORS, IconButtonComponent, IllustrationComponent, InsigniaComponent, IusAlertActionsDirective, IusAlertTrailingDirective, IusDropdownTriggerDirective, IusMenuItemTrailingDirective, IusModalFooterDirective, IusTagPrefixDirective, IusTagSuffixDirective, LoadingComponent, LoadingMarkComponent, MenuComponent, MenuItemComponent, ModalComponent, MultiTextFieldComponent, NavUserComponent, ORB_PERIODS, OauthButtonComponent, OptionItemComponent, PopoverComponent, QueryBuilderComponent, STATUS_TONES, STATUS_VOCAB, STATUS_VOCABS, STATUS_VOCABS_PENDING, ScrollAreaComponent, SearchBarComponent, SegmentGroupComponent, SegmentedControlComponent, SelectComponent, ShowMoreComponent, StatusChipComponent, StatusStateComponent, TagComponent, TextAreaComponent, TextButtonComponent, TextComponent, TextFieldComponent, TooltipComponent, WizardComponent, WizardController, WizardNavComponent, createWizard, pose, poseIso, poseSpeaking, poseThinking, renderCubeSvg, resolveIllustration, resolveStatus, statusOptions, statusOrder, statusToneVars, statusVocab, voiceEnv };
|
|
4331
|
+
export type { ActuacionStatus, AlertSize, AlertTone, AlertVariant, CountdownDirection, CountdownFormat, CountdownRingSize, CountdownRingTone, DescriptionListItem, DescriptionListLayout, DescriptionListSize, DescriptionListValueClick, GestionStatus, IllustrationEntry, IllustrationName, IllustrationSize, IusAvatarColor, IusAvatarShape, IusAvatarSize, IusButtonActionResult, IusButtonSize, IusButtonStatus, IusButtonType, IusButtonVariant, IusCaptchaAppearance, IusCaptchaFieldHandle, IusCaptchaProvider, IusCaptchaSize, IusCaptchaState, IusCaptchaTheme, IusCarouselImage, IusCarouselImageInput, IusCarouselObjectFit, IusCarouselOrder, IusCarouselOverlay, IusCarouselTransition, IusCheckboxLabelPosition, IusCheckboxSize, IusChipSize, IusChipState, IusCircularProgressSize, IusCircularProgressTone, IusCodeFieldSize, IusDividerOrientation, IusDividerTextAlign, IusDividerVariant, IusDropdownItem, IusDropdownTone, IusDropdownVariant, IusEleniaBubblePosition, IusEleniaBubbleSize, IusEleniaOrbMood, IusEleniaOrbSurface, IusEmptyStateAction, IusEmptyStateSize, IusEmptyStateTone, IusEmptyStateVariant, IusFilterField, IusFilterFieldOption, IusFilterFieldType, IusFilterRule, IusFilterValue, IusFlexAlign, IusFlexDirection, IusFlexGap, IusFlexJustify, IusIconButtonShape, IusIconButtonSize, IusIconButtonVariant, IusInsigniaSize, IusInsigniaTone, IusInsigniaVariant, IusLoadingMarkSurface, IusLoadingVariant, IusMenuItemSize, IusMenuItemState, IusMenuItemVariant, IusMenuOption, IusModalCloseReason, IusModalIconTone, IusModalSize, IusMultiTextFieldSize, IusMultiTextFieldSlot, IusMultiTextFieldState, IusNavUserAccount, IusNavUserLayout, IusNavUserUser, IusOAuthButtonSize, IusOAuthButtonType, IusOAuthProvider, IusOptionItemSize, IusOptionItemState, IusPopoverPadding, IusPopoverPlacement, IusPopoverTrigger, IusQueryBuilderSize, IusScrollAxis, IusScrollSize, IusSearchBarSize, IusSearchBarState, IusSegmentedSize, IusSegmentedVariant, IusSelectCreateFactory, IusSelectSize, IusSelectState, IusSelectValue, IusShowMoreAlign, IusStatusChipSize, IusStatusChipTone, IusStatusKind, IusTagRole, IusTagShape, IusTagSize, IusTagState, IusTagTone, IusTagVariant, IusTextAlign, IusTextAreaSize, IusTextAreaState, IusTextButtonSize, IusTextButtonType, IusTextColor, IusTextFieldSize, IusTextFieldType, IusTextTag, IusTextVariant, IusTextWeight, IusTooltipTrigger, OrbMood, OrbPose, SegmentedOption, SelectOption, SelectOptionGroup, StatusMeta, StatusOption, StatusTone, StatusToneVars, StatusVocabMap, StatusVocabName, UseWizardOptions, WizardApi, WizardStep };
|