@esfaenza/es-table 20.3.28 → 20.3.30

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
@@ -2417,6 +2417,12 @@ interface Est2Column {
2417
2417
  rendererName?: string | null;
2418
2418
  /** true se la colonna è "pinnata" (sticky a sinistra durante lo scroll orizzontale) */
2419
2419
  pinned?: boolean;
2420
+ /**
2421
+ * true se la colonna è FIXED (`*th Fixed:true` o `*th Group:true`): non può essere
2422
+ * nascosta né riposizionata e resta ancorata in testa alla tabella. Solo le colonne
2423
+ * pinnate possono precederla. Stesso contratto dell'es-table originale.
2424
+ */
2425
+ fixed?: boolean;
2420
2426
  /** larghezza in px di DEFAULT della colonna pinnata (dal `PinnedWidth` della direttiva) */
2421
2427
  pinnedWidth?: number | null;
2422
2428
  /** larghezza in px IMPOSTATA dall'utente via resize (qualsiasi colonna); sovrascrive l'auto/pinnedWidth */
@@ -2502,10 +2508,18 @@ declare class EsTable2Component implements ControlValueAccessor, AfterContentIni
2502
2508
  private ctxMenuSub?;
2503
2509
  /** Altezza dell'header (misurata): la barra di selezione la usa per coprirlo esattamente */
2504
2510
  selbarHeight: _angular_core.WritableSignal<number>;
2511
+ /**
2512
+ * Larghezza (misurata) della colonna "chrome" sticky a destra. La barra di selezione
2513
+ * si ferma prima di essa: altrimenti "Azzera selezione" finirebbe SOTTO la colonna
2514
+ * sticky (che sta più in alto nello stacking per restare cliccabile durante la selezione).
2515
+ */
2516
+ chromeWidth: _angular_core.WritableSignal<number>;
2505
2517
  private headerEl?;
2506
2518
  private headerRO?;
2507
- /** ViewChild-setter: (ri)osserva l'header appena compare/cambia, mantenendo `selbarHeight` allineata */
2519
+ /** ViewChild-setter: (ri)osserva l'header appena compare/cambia, mantenendo le misure allineate */
2508
2520
  set theadRef(ref: ElementRef<HTMLElement> | undefined);
2521
+ /** Misura header (altezza) e colonna chrome (larghezza) per il posizionamento della select-bar */
2522
+ private measureHeader;
2509
2523
  readonly _Selection: _angular_core.InputSignal<boolean>;
2510
2524
  Selection: _angular_core.WritableSignal<boolean>;
2511
2525
  SingleSelection: _angular_core.InputSignal<boolean>;
@@ -2670,6 +2684,13 @@ declare class EsTable2Component implements ControlValueAccessor, AfterContentIni
2670
2684
  get denseClass(): boolean;
2671
2685
  /** Colonne visibili, con le colonne pinnate spostate in testa (stabile) */
2672
2686
  visibleColumns: _angular_core.Signal<Est2Column[]>;
2687
+ /**
2688
+ * Ordinamento STRUTTURALE delle colonne, parità con l'es-table originale
2689
+ * (`ColumnMetadataHandler`): prima le colonne pinnate, poi le `Fixed` non pinnate,
2690
+ * poi tutte le altre — mantenendo stabile l'ordine relativo dentro ogni blocco.
2691
+ * Una colonna `Fixed` resta quindi sempre in testa e solo una pinnata può precederla.
2692
+ */
2693
+ private sortStructural;
2673
2694
  /** Numero di colonne pinnate visibili */
2674
2695
  pinnedCount: _angular_core.Signal<number>;
2675
2696
  /** true se c'è almeno una colonna pinnata */
@@ -2724,6 +2745,8 @@ declare class EsTable2Component implements ControlValueAccessor, AfterContentIni
2724
2745
  /** Controller di esportazione (E4) — logica in `controllers/export.controller.ts` */
2725
2746
  private exportCtrl;
2726
2747
  ngOnInit(): void;
2748
+ /** @ignore Handler di scroll in cattura (chiude i menu del chrome) */
2749
+ private onAnyScroll;
2727
2750
  ngOnDestroy(): void;
2728
2751
  /** Risoluzione input: valore esplicito || default di progetto || hard default */
2729
2752
  private io;
@@ -2952,6 +2975,8 @@ declare class EsTable2Component implements ControlValueAccessor, AfterContentIni
2952
2975
  private columnPrefs;
2953
2976
  /** Applica ordine + visibilità + pin + larghezze delle preferenze a una lista di colonne appena costruita */
2954
2977
  private setColumns;
2978
+ /** Mappa `{id: px}` delle larghezze impostate dall'utente (resize), da conservare nelle prefs in memoria */
2979
+ private currentWidths;
2955
2980
  /** true una volta caricate le preferenze dal server (evita retrieve multipli) */
2956
2981
  private prefsLoaded;
2957
2982
  /**
@@ -2971,6 +2996,28 @@ declare class EsTable2Component implements ControlValueAccessor, AfterContentIni
2971
2996
  * `{ columns (visibili), column_ordering (ordine), orders (ordinamenti) }`.
2972
2997
  */
2973
2998
  private saveColumnPrefs;
2999
+ /**
3000
+ * Imposta in maniera programmatica la visibilità di un header — o di un header di
3001
+ * GRUPPO, nel qual caso la modifica scende in cascata su tutti i `*th` che lo
3002
+ * dichiarano come `Parent`. Parità di firma con l'es-table originale.
3003
+ *
3004
+ * Le colonne `Fixed` sono ignorate (per contratto sempre visibili). La modifica
3005
+ * aggiorna anche le preferenze IN MEMORIA, così sopravvive ai rebuild delle colonne
3006
+ * (paginazione, refresh, nuovi dati); non viene persistita sul server.
3007
+ *
3008
+ * @param {string} groupOrHeader Id dell'header (o del gruppo) di cui settare la visibilità
3009
+ * @param {boolean} visibility Visibilità da impostare
3010
+ * @param {boolean} refresh Se `true` (default) aggiorna la tabella dopo la modifica
3011
+ * @param {boolean} relaunchSearch Se `true` (default) in viewmode rilancia la ricerca
3012
+ */
3013
+ setHeaderVisibility(groupOrHeader: string, visibility: boolean, refresh?: boolean, relaunchSearch?: boolean): void;
3014
+ /**
3015
+ * Applica la visibilità a una colonna e, se `id` è un header di gruppo, ricorsivamente
3016
+ * a tutti i suoi figli.
3017
+ *
3018
+ * @returns {boolean} `true` se almeno una colonna è stata modificata
3019
+ */
3020
+ private applyHeaderVisibility;
2974
3021
  /** Attiva/disattiva il pin di una colonna e persiste (dall'indicatore in testata) */
2975
3022
  togglePin(col: Est2Column, ev?: Event): void;
2976
3023
  columnsDialogOpen: _angular_core.WritableSignal<boolean>;
@@ -2981,6 +3028,7 @@ declare class EsTable2Component implements ControlValueAccessor, AfterContentIni
2981
3028
  visible: boolean;
2982
3029
  pinned: boolean;
2983
3030
  grouped: boolean;
3031
+ fixed: boolean;
2984
3032
  }[]>;
2985
3033
  /** Etichetta leggibile di una colonna (header statico o id) */
2986
3034
  columnLabel(col: Est2Column): string;
@@ -3004,6 +3052,11 @@ declare class EsTable2Component implements ControlValueAccessor, AfterContentIni
3004
3052
  * gruppo → si sposta l'INTERO blocco del gruppo (al livello di divergenza).
3005
3053
  */
3006
3054
  dialogMove(i: number, dir: -1 | 1): void;
3055
+ /** true se la riga della dialog è riposizionabile: pinnate e `Fixed` sono ancorate in testa */
3056
+ canReorder(c: {
3057
+ pinned: boolean;
3058
+ fixed: boolean;
3059
+ }): boolean;
3007
3060
  /** Indice della riga trascinata (o null) */
3008
3061
  dragIndex: _angular_core.WritableSignal<number>;
3009
3062
  /** Indice della riga sotto il cursore durante il drag (per l'indicatore) */
@@ -3036,10 +3089,29 @@ declare class EsTable2Component implements ControlValueAccessor, AfterContentIni
3036
3089
  resetColumnsDialog(): void;
3037
3090
  exportMenuOpen: _angular_core.WritableSignal<boolean>;
3038
3091
  cornerMenuOpen: _angular_core.WritableSignal<boolean>;
3039
- toggleExportMenu(): void;
3040
- toggleCornerMenu(): void;
3092
+ /**
3093
+ * Coordinate VIEWPORT del pannello di menu aperto. I menu sono renderizzati fuori
3094
+ * da `.est2-scroll` e posizionati `fixed`: dentro lo scroller l'`overflow:auto` li
3095
+ * troncava (su una tabella di poche righe il menu usciva dal box e spariva).
3096
+ */
3097
+ menuAnchor: _angular_core.WritableSignal<{
3098
+ top: number;
3099
+ right: number;
3100
+ }>;
3101
+ toggleExportMenu(ev?: Event): void;
3102
+ toggleCornerMenu(ev?: Event): void;
3103
+ /** Chiude entrambi i menu del chrome */
3104
+ closeChromeMenus(): void;
3105
+ /**
3106
+ * Ancora il menu al bottone che l'ha aperto: allineo il bordo DESTRO del pannello a
3107
+ * quello del bottone e lo apro sotto. Se sotto non c'è spazio nel viewport, lo ribalto
3108
+ * sopra (misurando il pannello dopo il render).
3109
+ */
3110
+ private anchorMenuTo;
3041
3111
  /** Chiude i menu a tendina del chrome quando si clicca fuori */
3042
3112
  onDocClick(): void;
3113
+ /** Un menu `fixed` non segue più l'ancora: su resize lo chiudo. */
3114
+ onViewportResize(): void;
3043
3115
  /** Export delegato al controller `ExportController` (E4); chiude prima il menu chrome. */
3044
3116
  export(format?: 'CSV' | 'XLSX'): void;
3045
3117
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@esfaenza/es-table",
3
- "version": "20.3.28",
3
+ "version": "20.3.30",
4
4
  "dependencies": {
5
5
  "tslib": "^2.0.0"
6
6
  },