@litigiovirtual/ius-design-components 2.0.0 → 2.0.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@litigiovirtual/ius-design-components",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": ">=22.0.0 <23.0.0",
6
6
  "@angular/common": ">=22.0.0 <23.0.0",
@@ -2396,8 +2396,13 @@ interface VisibleModel {
2396
2396
  * - El golden compone `OptionItem` (filas) y `Chip` (chips de múltiple): ya
2397
2397
  * portados como `ius-option-item` / `ius-chip`, se componen aquí directamente
2398
2398
  * (sin CSS inlineado). Los chips de múltiple usan `ius-chip removable`.
2399
- * - El menú se posiciona con `position: fixed` + medición manual (flip abajo/
2400
- * arriba, iguala ancho del campo), espejo de `updatePosition` del golden.
2399
+ * - El menú se portalea a `document.body` vía **CDK Overlay**
2400
+ * (`flexibleConnectedTo` el trigger + `scrollStrategy: reposition`), con
2401
+ * flip abajo/arriba e igualando el ancho del campo — espejo de
2402
+ * `updatePosition` del golden. Encapsulation por defecto (Emulated): los
2403
+ * estilos del menú siguen aplicando dentro del overlay porque Angular
2404
+ * inyecta el `<style>` scopeado en el `<head>` global (mismo patrón que
2405
+ * `ius-modal`, ver `src/lib/modal/modal.component.ts`).
2401
2406
  */
2402
2407
  declare class SelectComponent implements ControlValueAccessor, OnInit, OnDestroy {
2403
2408
  private readonly optionsState;
@@ -2486,21 +2491,24 @@ declare class SelectComponent implements ControlValueAccessor, OnInit, OnDestroy
2486
2491
  private readonly internalOpen;
2487
2492
  protected readonly query: _angular_core.WritableSignal<string>;
2488
2493
  protected readonly activeIndex: _angular_core.WritableSignal<number>;
2489
- protected readonly menuPos: _angular_core.WritableSignal<{
2490
- x: number;
2491
- y: number;
2492
- width: number;
2493
- placement: "bottom" | "top";
2494
- }>;
2494
+ /** Ancho del menú (portal CDK) — igualado al ancho del campo. */
2495
+ protected readonly menuWidth: _angular_core.WritableSignal<number>;
2495
2496
  private readonly field;
2496
2497
  private readonly menu;
2497
2498
  private readonly search;
2499
+ private readonly menuTpl;
2498
2500
  protected readonly baseId: string;
2499
2501
  protected readonly helpId: string;
2502
+ /** `id` único del menú — target de `aria-controls` en el trigger. */
2503
+ protected readonly menuId: string;
2500
2504
  private onChange;
2501
2505
  private onTouched;
2506
+ private readonly overlay;
2507
+ private readonly viewContainerRef;
2508
+ private overlayRef;
2502
2509
  private raf;
2503
- private readonly repositionBound;
2510
+ private typeaheadBuffer;
2511
+ private typeaheadTimer;
2504
2512
  protected readonly isDisabled: _angular_core.Signal<boolean>;
2505
2513
  protected readonly isError: _angular_core.Signal<boolean>;
2506
2514
  protected readonly isOpen: _angular_core.Signal<boolean>;
@@ -2515,6 +2523,16 @@ declare class SelectComponent implements ControlValueAccessor, OnInit, OnDestroy
2515
2523
  protected get showHint(): boolean;
2516
2524
  protected get showClearComputed(): boolean;
2517
2525
  protected get helpIconTitle(): string | undefined;
2526
+ /**
2527
+ * Alto de fila usado para `maxVisible × itemH` — deriva del box-model real
2528
+ * de `OptionItem` (`option-item.component.scss`): `--_opt-py` (padding
2529
+ * vertical, top+bottom) + `--ius-lh-base` (line-height, fija en 20px, no
2530
+ * cambia por tamaño — solo el font-size lo hace). small py=6px → 32px ·
2531
+ * medium py=8px (`--ius-space-xs`) → 36px · large py=11px → 42px. No
2532
+ * incluye el `gap` entre filas de `.ius-selectmenu__list`
2533
+ * (`--ius-space-xxs`) — constante estructural documentada, no medida en
2534
+ * runtime.
2535
+ */
2518
2536
  protected get listMaxH(): number;
2519
2537
  protected labelFor(val: IusSelectValue): string;
2520
2538
  protected isChosen(val: IusSelectValue): boolean;
@@ -2532,13 +2550,30 @@ declare class SelectComponent implements ControlValueAccessor, OnInit, OnDestroy
2532
2550
  private setOpen;
2533
2551
  protected onSearch(event: Event): void;
2534
2552
  private moveActive;
2553
+ /**
2554
+ * ¿Es una tecla imprimible de una sola posición (typeahead)? Se ignora
2555
+ * cuando el foco está en la caja de búsqueda (ahí escribir filtra, no
2556
+ * hace typeahead) y cuando hay modificadores (Ctrl/Alt/Meta).
2557
+ */
2558
+ private isTypeaheadKey;
2559
+ /** Quita diacríticos y normaliza a minúsculas para comparar etiquetas. */
2560
+ private normalizeLabel;
2561
+ /**
2562
+ * Typeahead: acumula el carácter en un buffer (expira a los ~700ms) y
2563
+ * salta el resaltado/apertura a la primera opción habilitada cuya etiqueta
2564
+ * empiece por el buffer. Con el menú abierto solo mueve el resaltado; con
2565
+ * el menú cerrado (single) lo abre y resalta el match (sin seleccionar).
2566
+ */
2567
+ private handleTypeahead;
2535
2568
  protected onTriggerKeyDown(event: KeyboardEvent): void;
2536
2569
  protected onDocumentMouseDown(event: MouseEvent): void;
2537
2570
  protected onEscape(): void;
2538
- private scheduleReposition;
2539
- private reposition;
2540
- private attachListeners;
2541
- private teardownListeners;
2571
+ /** Difiere el attach un frame (deja que `@if`/inputs terminen de asentarse). */
2572
+ private scheduleOpen;
2573
+ private attachOverlay;
2574
+ private detachOverlay;
2575
+ private updateMenuWidth;
2576
+ private readonly onWindowResize;
2542
2577
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SelectComponent, never>;
2543
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>;
2544
2579
  static ngAcceptInputType_multiple: unknown;