@litigiovirtual/ius-design-components 1.0.286 → 1.0.288

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.
@@ -35,6 +35,7 @@ export declare class InputSelectComponent implements OnDestroy {
35
35
  onEnterKey: EventEmitter<string>;
36
36
  onBlurEvent: EventEmitter<void>;
37
37
  onScrolledToEnd: EventEmitter<void>;
38
+ onFocusEvent: EventEmitter<void>;
38
39
  constructor(_el: ElementRef, _overlay: Overlay, _vcr: ViewContainerRef);
39
40
  onClickOutside(event: Event): void;
40
41
  closeList(event?: Event): void;
@@ -50,5 +51,5 @@ export declare class InputSelectComponent implements OnDestroy {
50
51
  private _closePanel;
51
52
  ngOnDestroy(): void;
52
53
  static ɵfac: i0.ɵɵFactoryDeclaration<InputSelectComponent, never>;
53
- static ɵcmp: i0.ɵɵComponentDeclaration<InputSelectComponent, "ius-input-select", never, { "componentId": { "alias": "componentId"; "required": true; }; "required": { "alias": "required"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "showHelpText": { "alias": "showHelpText"; "required": false; }; "error": { "alias": "error"; "required": false; }; "labelSuperior": { "alias": "labelSuperior"; "required": false; }; "labelInferior": { "alias": "labelInferior"; "required": false; }; "errorText": { "alias": "errorText"; "required": false; }; "labelInput": { "alias": "labelInput"; "required": false; }; "iconInput": { "alias": "iconInput"; "required": false; }; "textInput": { "alias": "textInput"; "required": false; }; "maxlenght": { "alias": "maxlenght"; "required": false; }; "inputType": { "alias": "inputType"; "required": false; }; "debounceMs": { "alias": "debounceMs"; "required": false; }; "enableInfiniteScroll": { "alias": "enableInfiniteScroll"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; }, { "onChangesValueEvent": "onChangesValueEvent"; "onEnterKey": "onEnterKey"; "onBlurEvent": "onBlurEvent"; "onScrolledToEnd": "onScrolledToEnd"; }, never, ["*"], true, never>;
54
+ static ɵcmp: i0.ɵɵComponentDeclaration<InputSelectComponent, "ius-input-select", never, { "componentId": { "alias": "componentId"; "required": true; }; "required": { "alias": "required"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "showHelpText": { "alias": "showHelpText"; "required": false; }; "error": { "alias": "error"; "required": false; }; "labelSuperior": { "alias": "labelSuperior"; "required": false; }; "labelInferior": { "alias": "labelInferior"; "required": false; }; "errorText": { "alias": "errorText"; "required": false; }; "labelInput": { "alias": "labelInput"; "required": false; }; "iconInput": { "alias": "iconInput"; "required": false; }; "textInput": { "alias": "textInput"; "required": false; }; "maxlenght": { "alias": "maxlenght"; "required": false; }; "inputType": { "alias": "inputType"; "required": false; }; "debounceMs": { "alias": "debounceMs"; "required": false; }; "enableInfiniteScroll": { "alias": "enableInfiniteScroll"; "required": false; }; "loading": { "alias": "loading"; "required": false; }; }, { "onChangesValueEvent": "onChangesValueEvent"; "onEnterKey": "onEnterKey"; "onBlurEvent": "onBlurEvent"; "onScrolledToEnd": "onScrolledToEnd"; "onFocusEvent": "onFocusEvent"; }, never, ["*"], true, never>;
54
55
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@litigiovirtual/ius-design-components",
3
- "version": "1.0.286",
3
+ "version": "1.0.288",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": ">=17.0.0 <20.0.0",
6
6
  "@angular/common": ">=17.0.0 <20.0.0",
@@ -0,0 +1,41 @@
1
+ /**
2
+ * ListFilter<T> — patrón único de filtrado para `ius-input-select` del ecosistema.
3
+ *
4
+ * Centraliza el filtrado client-side de listas en memoria con dos comportamientos:
5
+ * - Debounce: lo aporta el propio `ius-input-select` (input `debounceMs`, default 300).
6
+ * - "Re-click muestra lista completa": al re-enfocar un select ya seleccionado,
7
+ * reaparece la lista completa (manteniendo el texto); al teclear, vuelve a filtrar.
8
+ *
9
+ * Clase plana (sin signals): funciona en change detection con o sin signals.
10
+ *
11
+ * Uso:
12
+ * tipoFilter = new ListFilter(
13
+ * () => this.tipoActividades,
14
+ * (t, q) => (t.tipoActividad ?? '').toLowerCase().includes(q),
15
+ * );
16
+ * // template:
17
+ * // @for (t of tipoFilter.visible; track t.id) { ... }
18
+ * // (onChangesValueEvent)="onSearch($event)" -> dentro: tipoFilter.search($event)
19
+ * // (onFocusEvent)="tipoFilter.reopen()"
20
+ */
21
+ export declare class ListFilter<T> {
22
+ private readonly source;
23
+ private readonly match;
24
+ private _term;
25
+ private _reopened;
26
+ /**
27
+ * @param source Función que devuelve la lista completa actual (async-safe: se lee en cada acceso a `visible`).
28
+ * @param match Predicado de coincidencia. `term` llega ya en minúsculas.
29
+ */
30
+ constructor(source: () => T[], match: (item: T, term: string) => boolean);
31
+ /** Lista a renderizar en el `@for`. */
32
+ get visible(): T[];
33
+ /** Término de filtro actual (sin normalizar). */
34
+ get term(): string;
35
+ /** Llamar desde el handler de búsqueda (al teclear): apaga el "mostrar todo" y filtra. */
36
+ search(term: string): void;
37
+ /** Llamar desde `(onFocusEvent)`: muestra la lista completa sin perder el texto. */
38
+ reopen(): void;
39
+ /** Limpia término y estado (ej. al abrir/cerrar un formulario). */
40
+ reset(): void;
41
+ }
@@ -3,3 +3,4 @@ export * from './formato-hora.pipe';
3
3
  export * from './date-format.util';
4
4
  export * from './file-mime.util';
5
5
  export * from './file-size.util';
6
+ export * from './list-filter.util';