@esfaenza/es-table 20.3.31 → 20.3.33

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/index.d.ts CHANGED
@@ -2687,6 +2687,8 @@ declare class EsTable2Component implements ControlValueAccessor, AfterContentIni
2687
2687
  ShowItemGroupsColumns: _angular_core.WritableSignal<boolean>;
2688
2688
  /** Mappa ownKey(string) -> figli diretti, per la modalità gerarchica */
2689
2689
  private hierChildren;
2690
+ /** Indice `chiave-propria → riga`: evita la scansione lineare per risalire ai padri */
2691
+ private hierByKey;
2690
2692
  /** Paginazione arrayMode */
2691
2693
  private arrayPage;
2692
2694
  /** Ordinamenti attivi (id -> 'ASC'|'DESC') */
@@ -2714,6 +2716,17 @@ declare class EsTable2Component implements ControlValueAccessor, AfterContentIni
2714
2716
  * Una colonna `Fixed` resta quindi sempre in testa e solo una pinnata può precederla.
2715
2717
  */
2716
2718
  private sortStructural;
2719
+ /**
2720
+ * Stile PER-COLONNA precalcolato (larghezza, offset sticky, inizio gruppo).
2721
+ * Il ciclo delle celle è annidato in quello delle righe, quindi senza questo ogni
2722
+ * valore si ricalcolerebbe righe×colonne volte a ogni render: qui si calcola una
2723
+ * volta per colonna e la cella fa un solo accesso per indice.
2724
+ */
2725
+ colStyles: _angular_core.Signal<{
2726
+ width: number | null;
2727
+ left: number | null;
2728
+ groupStart: boolean;
2729
+ }[]>;
2717
2730
  /** Numero di colonne pinnate visibili */
2718
2731
  pinnedCount: _angular_core.Signal<number>;
2719
2732
  /** true se c'è almeno una colonna pinnata */
@@ -2864,7 +2877,16 @@ declare class EsTable2Component implements ControlValueAccessor, AfterContentIni
2864
2877
  private emitSelection;
2865
2878
  /** Click su una riga: espande/collassa un gruppo, oppure gestisce la selezione. */
2866
2879
  handleRowClick(item: any, event?: MouseEvent): void;
2867
- /** Selezione a click stile Esplora risorse: plain=solo questo, Ctrl=toggle, Shift=range dall'ancora */
2880
+ /**
2881
+ * Shift/Ctrl+click stile Esplora risorse, attivo solo con `[ShiftClick]`.
2882
+ *
2883
+ * Lo **Shift+click** estende il range dall'ancora (l'ultima riga cliccata); senza
2884
+ * Ctrl il range SOSTITUISCE la selezione, con Ctrl la somma a quella esistente.
2885
+ * Ogni altro caso (Ctrl+click, o Shift senza un'ancora valida) è un toggle della
2886
+ * singola riga: passa da `toggleRow`, che è il percorso canonico usato anche dalle
2887
+ * checkbox e che gestisce correttamente la modalità "tutto selezionato"
2888
+ * (`sel.all` → toggle dell'esclusione invece di azzerare la selezione).
2889
+ */
2868
2890
  private windowsSelect;
2869
2891
  /** Pipe riusate per il testo di copia (dependency-free) */
2870
2892
  private fmt;
@@ -2951,6 +2973,17 @@ declare class EsTable2Component implements ControlValueAccessor, AfterContentIni
2951
2973
  /** Espande/collassa un gruppo agendo solo sui flag `_visible` (nessuna ricostruzione) */
2952
2974
  toggleGroup(group: any): void;
2953
2975
  /** Item (foglia) appartenenti a un gruppo, a qualsiasi profondità */
2976
+ /**
2977
+ * Indice `chiave-gruppo → item[]`, ricalcolato una sola volta per ogni nuova
2978
+ * `boundSource()`. Le chiavi di gruppo sono composite (`IT¦Roma¦Shop`), quindi ogni
2979
+ * PREFISSO della chiave di un item è un suo gruppo antenato: l'indice si costruisce
2980
+ * in O(righe × profondità) con una sola passata.
2981
+ *
2982
+ * Serve perché la checkbox di gruppo chiama `groupSelectionState` DUE volte per
2983
+ * riga-gruppo a ogni ciclo di change-detection: con la vecchia `filter` su tutte le
2984
+ * righe erano 2·gruppi·righe confronti per render (quadratico nel numero di righe).
2985
+ */
2986
+ private groupItemsIndex;
2954
2987
  private groupItems;
2955
2988
  /** Stato di selezione aggregato di un gruppo, per la sua checkbox */
2956
2989
  groupSelectionState(group: any): 'all' | 'some' | 'none';
@@ -2967,13 +3000,19 @@ declare class EsTable2Component implements ControlValueAccessor, AfterContentIni
2967
3000
  /** Costruisce l'albero e applica la selezione; se mancano le chiavi torna la lista invariata */
2968
3001
  private applyHierarchy;
2969
3002
  private directChildren;
2970
- private hierDescendants;
2971
3003
  /** Selezione in cascata: propaga lo stato al sottoalbero e ricalcola gli antenati */
2972
3004
  private cascadeSelection;
2973
3005
  /** Ricostruisce ItemsSelection dai flag `_selected` correnti (usato dalla cascade) */
2974
3006
  private rebuildSelectionFromFlags;
2975
3007
  /** Stato indeterminato di una riga-padre in cascade (alcuni discendenti selezionati) */
2976
3008
  hierarchyIndeterminate(item: any): boolean;
3009
+ /**
3010
+ * Visita in profondità con USCITA ANTICIPATA al primo discendente selezionato.
3011
+ * È legata alla checkbox di OGNI riga, quindi girava a ogni ciclo di
3012
+ * change-detection: la versione precedente materializzava invece l'intero
3013
+ * sottoalbero in un array nuovo per ogni riga e per ogni render.
3014
+ */
3015
+ private hierAnyDescendantSelected;
2977
3016
  /** Espande/collassa un nodo dell'albero */
2978
3017
  toggleHierarchyNode(item: any): void;
2979
3018
  /** Indentazione (px) di una riga dell'albero in base al livello */
@@ -3160,7 +3199,16 @@ declare class EsTable2Component implements ControlValueAccessor, AfterContentIni
3160
3199
  * anziché `cellDisplayText`, che conosce solo `property`/`id` e non il contenuto di
3161
3200
  * un template custom (era il bug del tooltip che mostrava sempre l'id colonna).
3162
3201
  */
3202
+ /**
3203
+ * Tooltip "intelligente" sulle celle a larghezza fissa: mostra il testo REALE
3204
+ * solo quando è troncato. In DELEGA sulla `<table>` (non un `(mouseenter)` per
3205
+ * cella): un listener per cella significava installarne uno per ogni `<td>` a
3206
+ * ogni creazione di riga — su una pagina da 50×43 sono 2.150 listener per
3207
+ * cambio pagina.
3208
+ */
3163
3209
  onCellHover(ev: MouseEvent): void;
3210
+ /** Ultima cella già valutata per il tooltip (evita di rimisurare a ogni mousemove) */
3211
+ private hoveredCell;
3164
3212
  /** Larghezza minima (px) di una colonna durante il resize */
3165
3213
  private readonly COL_MIN_W;
3166
3214
  /** Stato del resize in corso (colonna + coordinate iniziali) */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esfaenza/es-table",
3
- "version": "20.3.31",
3
+ "version": "20.3.33",
4
4
  "dependencies": {
5
5
  "tslib": "^2.0.0"
6
6
  },