@oneteme/jquery-table 0.0.13 → 0.0.15

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.
@@ -8,6 +8,10 @@ import { JqtCellDefDirective } from '../directive/jqt-cell-def.directive';
8
8
  import { SlicePanelComponent, OrganizerFacade, GroupByManager, OrganizerConfig, OrganizerButtonEvent, OrganizerState } from '@oneteme/jquery-organizer';
9
9
  import { VisualCopyFeedbackConfig, VisualSnapshot, VisualSnapshotApplyResult, VisualSnapshotDraft } from '@oneteme/jquery-core';
10
10
  import * as i0 from "@angular/core";
11
+ interface TableSortState {
12
+ active: string;
13
+ direction: 'asc' | 'desc' | '';
14
+ }
11
15
  export declare class TableComponent<T = any> implements OnChanges, AfterContentInit, AfterViewInit, OnDestroy {
12
16
  _isFullscreen: boolean;
13
17
  config?: TableProvider<T>;
@@ -25,36 +29,44 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
25
29
  view?: TableViewConfig;
26
30
  columnLabels?: Record<string, string>;
27
31
  isLoading: boolean;
32
+ /**
33
+ * À passer à `true` quand la requête relancée après `lazyColumnsRequested` échoue : les colonnes en attente affichent un bouton
34
+ * « Réessayer ». Repasser à `false` au nouvel essai.
35
+ */
36
+ lazyError: boolean;
28
37
  copyFeedback: VisualCopyFeedbackConfig;
29
38
  /** Paramètre de contrôle pour réinitialiser barre de recherche. */
30
39
  set clearSearchInput(value: boolean | null | undefined);
31
- addRequested: EventEmitter<void>;
32
- columnAdded: EventEmitter<TableColumnProvider<T>>;
33
- columnRemoved: EventEmitter<TableColumnProvider<T>>;
34
- categorySelected: EventEmitter<string>;
35
- rowSelected: EventEmitter<T>;
40
+ readonly addRequested: EventEmitter<void>;
41
+ readonly columnAdded: EventEmitter<TableColumnProvider<T>>;
42
+ readonly columnRemoved: EventEmitter<TableColumnProvider<T>>;
43
+ readonly categorySelected: EventEmitter<string>;
44
+ readonly rowSelected: EventEmitter<T>;
36
45
  /** Émis à chaque changement de tri (y compris le tri initial). */
37
- sortChange: EventEmitter<{
38
- active: string;
39
- direction: 'asc' | 'desc' | '';
40
- }>;
46
+ readonly sortChange: EventEmitter<TableSortState>;
41
47
  /** Émis à chaque changement de page ou de taille de page. */
42
- pageChange: EventEmitter<{
48
+ readonly pageChange: EventEmitter<{
43
49
  pageIndex: number;
44
50
  pageSize: number;
45
51
  }>;
46
52
  /** Émis à chaque changement de la recherche texte. */
47
- searchChange: EventEmitter<string>;
53
+ readonly searchChange: EventEmitter<string>;
48
54
  /** Émis quand le Group by change (clé de colonne, ou `null` si désactivé). */
49
- groupByChange: EventEmitter<string>;
55
+ readonly groupByChange: EventEmitter<string>;
50
56
  /** Émis quand la liste des colonnes visibles change (clés dans l’ordre d’affichage). */
51
- columnsChange: EventEmitter<string[]>;
52
- visualCopied: EventEmitter<VisualSnapshot>;
57
+ readonly columnsChange: EventEmitter<string[]>;
58
+ readonly visualCopied: EventEmitter<VisualSnapshot>;
59
+ /**
60
+ * Clés de toutes les colonnes `lazy` demandées jusqu'ici (cumul), émises quand l'une d'elles est activée pour la première fois.
61
+ * L'application relance sa requête complète en les incluant puis repasse les nouvelles `data`.
62
+ */
63
+ readonly lazyColumnsRequested: EventEmitter<string[]>;
53
64
  set paginator(value: MatPaginator | undefined);
54
65
  get paginator(): MatPaginator | undefined;
55
66
  private _paginator?;
56
67
  sort?: MatSort;
57
68
  tableBodyScrollRef?: ElementRef<HTMLElement>;
69
+ tableShellRef?: ElementRef<HTMLElement>;
58
70
  slicePanelRef?: SlicePanelComponent<T>;
59
71
  _cellDefs: QueryList<JqtCellDefDirective>;
60
72
  /** Map clé→TemplateRef pré-calculée depuis _cellDefs. Mise à jour dans ngAfterContentInit et sur _cellDefs.changes. */
@@ -86,6 +98,7 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
86
98
  _showSlicePanel: boolean;
87
99
  /** Snapshot stable de l'état collapsed du panneau slice, mis à jour via (collapsedChange) */
88
100
  _slicePanelCollapsed: boolean;
101
+ private _initialSlicePanelCollapsedApplied;
89
102
  get _staticSlicesForMenu(): Array<{
90
103
  key: string;
91
104
  title: string;
@@ -117,16 +130,27 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
117
130
  set groupPageSize(v: number);
118
131
  get groupSortOrder(): 'asc' | 'desc';
119
132
  set groupSortOrder(v: 'asc' | 'desc');
120
- /** Gestionnaire du cycle de vie des colonnes lazy (fetch, annulation, statuts, données). */
121
- private _lazy;
122
- /** Compatibilité template : retourne la map de statuts lazy. */
123
- get _lazyColumnStatus(): Map<string, "error" | "loaded" | "idle" | "loading">;
124
- /** Compatibilité template : retourne la map de données lazy. */
125
- get _lazyColumnData(): Map<string, Map<any, any>>;
133
+ /**
134
+ * Statut des colonnes `lazy` déjà demandées (absente = pas encore demandée).
135
+ * `loading` dure jusqu'à la réception de nouvelles `data` ; la référence change à chaque mise à jour (panneau de slices).
136
+ */
137
+ _lazyColumnStatus: Map<string, "error" | "loaded" | "idle" | "loading">;
138
+ private _lazyFlushQueued;
139
+ /** Lignes retournées par `config.lazyLoader` : elles remplacent `data` jusqu'au prochain `data`. */
140
+ private _loaderRows;
141
+ private _loaderSub?;
142
+ private _lazyWarned;
143
+ /** Colonnes de la dernière config résolue : évite de reconstruire le tableau (et d'agiter le panneau de slices) à chaque rafraîchissement. */
144
+ private _columnsSource?;
145
+ private _columnsNormalized?;
146
+ private readonly _optionalLazyColumns;
126
147
  private _cdr;
127
148
  private _el;
128
149
  private _ngZone;
150
+ private _paginatorIntl;
129
151
  private _i18nRaw;
152
+ private _tableShellResizeObserver?;
153
+ private readonly _fullItemsPerPageLabel;
130
154
  copyFeedbackMessage: string;
131
155
  private _copyFeedbackTimer?;
132
156
  /** Labels de l’interface. Fusionnés depuis JQT_I18N_DEFAULTS et le token JQT_I18N injecté. */
@@ -135,7 +159,9 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
135
159
  /** Retourne true si la ligne de groupe est une ligne normale (ni lazy, ni too-many). */
136
160
  isNormalGroupRow(row: any): boolean;
137
161
  isGroupRowLoading(row: any): boolean;
162
+ isGroupRowError(row: any): boolean;
138
163
  isGroupRowTooMany(row: any): boolean;
164
+ retryGroupByColumn(event?: Event): void;
139
165
  /** Gère le clic sur une ligne d'en-tête de groupe (no-op pour les états spéciaux). */
140
166
  onGroupHeaderClick(row: any): void;
141
167
  /** Gestionnaire export CSV. */
@@ -174,19 +200,27 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
174
200
  /** Cache groupBy — invalidé dès que rows/key/tri changent. */
175
201
  private _groupCache;
176
202
  private _pendingRender;
203
+ private readonly _deferredTimers;
204
+ private _headerMeasureFrame;
205
+ private _destroyed;
177
206
  private _staticSliceHiddenKeys;
178
207
  private _configHiddenKeys;
179
208
  /** Clés des colonnes visibles du dernier émission columnsChange (pour éviter les émissions dupliquement). */
180
209
  private _prevColumnKeys;
210
+ private emitColumnsChangeIfNeeded;
181
211
  ngOnChanges(changes: SimpleChanges): void;
182
212
  ngAfterContentInit(): void;
183
213
  ngAfterViewInit(): void;
214
+ private _observeTableShellWidth;
184
215
  private _applyPendingDynamicSliceKeys;
185
216
  ngOnDestroy(): void;
186
217
  private _measureHeaderHeight;
218
+ private _scheduleHeaderMeasure;
219
+ private _scheduleDeferred;
187
220
  private _organizerConfigCache;
188
221
  private _invalidateOrganizerConfig;
189
222
  get organizerConfig(): OrganizerConfig;
223
+ get organizerHideMenuValues(): boolean;
190
224
  get organizerState(): OrganizerState;
191
225
  onOrganizerViewChange(event: OrganizerButtonEvent): void;
192
226
  get title(): string;
@@ -221,15 +255,38 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
221
255
  key: string;
222
256
  header?: string;
223
257
  }): string;
258
+ /** Traduit les options de la vue table vers celles de l'Organizer. */
259
+ private _organizerViewConfig;
260
+ /** Ne change la référence que si le contenu change : le panneau recalcule tout à chaque nouvelle référence. */
261
+ private _setSliceConfigs;
224
262
  onSearchChange(): void;
263
+ private _runSearch;
264
+ private setGroupByAndEmit;
225
265
  onGroupByChange(key: string | null): void;
226
266
  onGroupPageSizeChange(size: number | string): void;
227
267
  onGroupSortToggle(dir: 'asc' | 'desc'): void;
228
268
  getLazyColumnStatus(key: string): 'idle' | 'loading' | 'loaded' | 'error';
229
269
  getLazyRenderType(rowValue: any): 'loading' | 'error' | 'value';
230
- retryLazyColumn(column: TableColumnProvider<T>): void;
231
- triggerLazyFetch(column: TableColumnProvider<T>): void;
232
- private _lazyCallbacks;
270
+ /** Relance la demande des colonnes en erreur : le chargeur est rappelé, ou l'application refait sa requête complète. */
271
+ retryLazyColumns(): void;
272
+ /** Colonnes lazy dont la valeur est nécessaire : affichées, utilisées en Group by ou en Slice by dynamique. */
273
+ private _usedLazyColumns;
274
+ /**
275
+ * Quel que soit le chemin d'activation (Organizer, Group by, Slice by, préférences...), les colonnes lazy utilisées et pas encore
276
+ * demandées sont réclamées en un seul événement. Hors cycle de détection, et seulement une fois des lignes affichées :
277
+ * la première réponse de l'application ne doit pas être prise pour celle qui contient les colonnes.
278
+ */
279
+ private _requestLazyColumns;
280
+ /** Appelle `config.lazyLoader` avec toutes les colonnes lazy demandées ; sa réponse remplace `data`. */
281
+ private _runLazyLoader;
282
+ /** Nouveau `data` : il l'emporte sur les lignes du chargeur. Avec un chargeur, les colonnes déjà demandées sont rechargées. */
283
+ private _onNewData;
284
+ /** Sans chargeur ni écouteur, la colonne demandée resterait en skeleton sans que rien ne l'explique. */
285
+ private _warnIfNoLazySource;
286
+ /** De nouvelles `data` sont arrivées : toutes les colonnes demandées sont considérées comme prêtes. */
287
+ private _settleLazyColumns;
288
+ private _applyLazyError;
289
+ private _setLazyStatus;
233
290
  toggleGroupCollapse(groupKey: string): void;
234
291
  private scrollToGroupHeader;
235
292
  isGroupCollapsed(groupKey: string): boolean;
@@ -275,9 +332,11 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
275
332
  getCellTemplate(key: string): TemplateRef<{
276
333
  $implicit: any;
277
334
  index: number;
335
+ value: any;
278
336
  }> | null;
279
337
  get hasCustomCellDefs(): boolean;
280
338
  get hasRowClickHandler(): boolean;
339
+ rowActionLabel(row: any): string;
281
340
  /** Largeur minimale du tableau en px, calculée depuis les largeurs explicites des colonnes actives.
282
341
  * Retourne null si aucune colonne n'a de largeur définie (le tableau remplit alors 100% du conteneur).
283
342
  * Seules les valeurs explicitement en `px` sont sommables ; les pourcentages ou autres unités sont ignorés. */
@@ -286,6 +345,7 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
286
345
  getRowClass(row: any): string | string[] | Record<string, boolean>;
287
346
  onRowClick(row: any, event: MouseEvent | null): void;
288
347
  onHeaderDragStart(columnKey: string, event: DragEvent): void;
348
+ onHeaderKeyDown(columnKey: string, event: KeyboardEvent): void;
289
349
  onHeaderDragOver(columnKey: string, event: DragEvent): void;
290
350
  onHeaderDrop(targetColumnKey: string, event: DragEvent): void;
291
351
  onHeaderDragEnd(): void;
@@ -335,6 +395,9 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
335
395
  private _executeRender;
336
396
  private _projectCurrentPage;
337
397
  private buildEffectiveConfig;
398
+ /** Une colonne lazy est forcément optionnelle : `optional` est implicite, et `optional: false` est refusé. */
399
+ private _normalizeColumns;
400
+ private _withImpliedOptional;
338
401
  private applyConfigSearchReset;
339
402
  private applyInitialSearchQuery;
340
403
  private static _hashColumns;
@@ -342,7 +405,13 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
342
405
  private resolveColumnsFromCompat;
343
406
  private getCategoryFilteredData;
344
407
  private projectRows;
408
+ /** Comparateur dont les valeurs de tri sont calculées une seule fois par ligne. */
345
409
  private _buildSortComparator;
410
+ private _buildCachedSortComparator;
411
+ private static readonly _collator;
412
+ private _compareSortValues;
413
+ private _normalizeSortValue;
414
+ private _applySortDirection;
346
415
  /**
347
416
  * Retourne la valeur telle qu'elle est affichée dans la cellule, en suivant exactement
348
417
  * le même chemin que resolveCellValue — utilisée pour la recherche plein-texte.
@@ -350,6 +419,10 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
350
419
  */
351
420
  private getDisplayValueForSearch;
352
421
  private getLazyAwareValue;
422
+ /** Les nombres et les dates gardent leur type pour un tri correct ; le reste est normalisé en texte. */
423
+ private _toSortInput;
424
+ /** Les statuts de chargement lazy ne doivent jamais apparaître dans un fichier exporté. */
425
+ private _resolveExportValue;
353
426
  private resolveCellValue;
354
427
  private resolvePageSize;
355
428
  private resolvePageSizeOptions;
@@ -359,5 +432,6 @@ export declare class TableComponent<T = any> implements OnChanges, AfterContentI
359
432
  private attachPaginator;
360
433
  private attachSort;
361
434
  static ɵfac: i0.ɵɵFactoryDeclaration<TableComponent<any>, never>;
362
- static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent<any>, "jquery-table", never, { "config": { "alias": "config"; "required": false; }; "dataSource": { "alias": "dataSource"; "required": false; }; "data": { "alias": "data"; "required": false; }; "displayedColumns": { "alias": "displayedColumns"; "required": false; }; "columnsConfig": { "alias": "columnsConfig"; "required": false; }; "view": { "alias": "view"; "required": false; }; "columnLabels": { "alias": "columnLabels"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "copyFeedback": { "alias": "copyFeedback"; "required": false; }; "clearSearchInput": { "alias": "clearSearchInput"; "required": false; }; }, { "addRequested": "addRequested"; "columnAdded": "columnAdded"; "columnRemoved": "columnRemoved"; "categorySelected": "categorySelected"; "rowSelected": "rowSelected"; "sortChange": "sortChange"; "pageChange": "pageChange"; "searchChange": "searchChange"; "groupByChange": "groupByChange"; "columnsChange": "columnsChange"; "visualCopied": "visualCopied"; }, ["_cellDefs"], never, true, never>;
435
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent<any>, "jquery-table", never, { "config": { "alias": "config"; "required": false; }; "dataSource": { "alias": "dataSource"; "required": false; }; "data": { "alias": "data"; "required": false; }; "displayedColumns": { "alias": "displayedColumns"; "required": false; }; "columnsConfig": { "alias": "columnsConfig"; "required": false; }; "view": { "alias": "view"; "required": false; }; "columnLabels": { "alias": "columnLabels"; "required": false; }; "isLoading": { "alias": "isLoading"; "required": false; }; "lazyError": { "alias": "lazyError"; "required": false; }; "copyFeedback": { "alias": "copyFeedback"; "required": false; }; "clearSearchInput": { "alias": "clearSearchInput"; "required": false; }; }, { "addRequested": "addRequested"; "columnAdded": "columnAdded"; "columnRemoved": "columnRemoved"; "categorySelected": "categorySelected"; "rowSelected": "rowSelected"; "sortChange": "sortChange"; "pageChange": "pageChange"; "searchChange": "searchChange"; "groupByChange": "groupByChange"; "columnsChange": "columnsChange"; "visualCopied": "visualCopied"; "lazyColumnsRequested": "lazyColumnsRequested"; }, ["_cellDefs"], never, true, never>;
363
436
  }
437
+ export {};
@@ -10,6 +10,8 @@ export declare const GROUP_ROW_COLUMN = "__group_row";
10
10
  export declare const GROUP_HEADER_MARKER = "__groupHeader";
11
11
  /** Clé du groupe spéciale « chargement lazy en cours ». */
12
12
  export declare const GROUP_KEY_LAZY_LOADING = "__lazy_loading__";
13
+ /** Clé du groupe spéciale « chargement lazy en erreur ». */
14
+ export declare const GROUP_KEY_LAZY_ERROR = "__lazy_error__";
13
15
  /** Clé du groupe spéciale « trop de groupes ». */
14
16
  export declare const GROUP_KEY_TOO_MANY = "__too_many_groups__";
15
17
  /** Propriété injectée dans chaque ligne projetée : référence vers la ligne brute d'origine. */
@@ -11,18 +11,22 @@ import * as i0 from "@angular/core";
11
11
  * </ng-template>
12
12
  * </jquery-table>
13
13
  * ```
14
- * Le contexte expose `$implicit` (ligne brute `T`) et `index` (index global).
14
+ * Le contexte expose `$implicit` (ligne brute `T`), `index` (index global) et `value` (valeur affichée de la cellule,
15
+ * y compris pour une colonne `lazy` dont la valeur n'est pas présente dans la ligne brute).
16
+ * Pour une colonne `lazy`, le template n'est rendu qu'une fois la valeur chargée ; le chargement et l'erreur sont gérés par le tableau.
15
17
  */
16
18
  export declare class JqtCellDefDirective {
17
19
  readonly template: TemplateRef<{
18
20
  $implicit: any;
19
21
  index: number;
22
+ value: any;
20
23
  }>;
21
24
  /** Clé de la colonne à laquelle ce template s'applique. */
22
25
  columnKey: string;
23
26
  constructor(template: TemplateRef<{
24
27
  $implicit: any;
25
28
  index: number;
29
+ value: any;
26
30
  }>);
27
31
  static ɵfac: i0.ɵɵFactoryDeclaration<JqtCellDefDirective, never>;
28
32
  static ɵdir: i0.ɵɵDirectiveDeclaration<JqtCellDefDirective, "[jqtCellDef]", never, { "columnKey": { "alias": "jqtCellDef"; "required": false; }; }, {}, never, never, true, never>;
@@ -1,8 +1,9 @@
1
1
  import { DataProvider } from '@oneteme/jquery-core';
2
2
  import { Observable } from 'rxjs';
3
- import { SliceConfig } from '@oneteme/jquery-organizer';
3
+ import { OrganizerConfig, SliceConfig } from '@oneteme/jquery-organizer';
4
4
  export { SliceConfig } from '@oneteme/jquery-organizer';
5
- export interface TableColumnProvider<T = any> {
5
+ /** Propriétés communes à toutes les colonnes ; voir `TableColumnProvider`. */
6
+ export interface TableColumnBase<T = any> {
6
7
  key: string;
7
8
  /** Libellé affiché dans l'en-tête de colonne. Optionnel si la colonne utilise un template custom. */
8
9
  header?: string;
@@ -17,18 +18,39 @@ export interface TableColumnProvider<T = any> {
17
18
  * Exemple : `searchValue: (row) => durationPipe.transform((today - row.start) / 1000)`
18
19
  */
19
20
  searchValue?: DataProvider<string>;
21
+ /** Active le tri ; `true` par défaut. */
20
22
  sortable?: boolean;
21
23
  removable?: boolean;
22
- optional?: boolean;
23
24
  width?: string;
25
+ /** Rend la colonne disponible dans Group by ; `true` par défaut si `header` est défini. */
24
26
  groupable?: boolean;
27
+ /** Rend la colonne disponible comme Slice by dynamique ; `true` par défaut si `header` est défini. */
25
28
  sliceable?: boolean;
26
- /** Chargement différé : la présence de cet objet active le mode lazy. */
27
- lazy?: {
28
- /** Fonction appelée pour charger les valeurs de la colonne. Retourne un tableau dans le même ordre que les lignes. */
29
- fetchFn: () => Observable<any[]>;
30
- };
31
29
  }
30
+ /**
31
+ * Colonne du tableau.
32
+ *
33
+ * - `optional: true` : masquée par défaut, ajoutable depuis le menu View.
34
+ * - `lazy: true` : absente de la requête de base, demandée à sa première activation (Organizer, Group by, Slice by).
35
+ * Une colonne lazy est forcément optionnelle : `optional: true` est implicite et `optional: false` est refusé
36
+ * (la colonne serait demandée dès le premier rendu, soit une requête de plus pour rien).
37
+ * Le chargement passe par `TableProvider.lazyLoader`, ou par l'événement `lazyColumnsRequested` si l'application
38
+ * préfère relancer elle-même sa requête. La cellule affiche un skeleton jusqu'à la réception des lignes complètes ;
39
+ * la colonne supporte ensuite tri, recherche, Group by et Slice by.
40
+ */
41
+ export type TableColumnMode = {
42
+ lazy?: undefined;
43
+ optional?: boolean;
44
+ } | {
45
+ lazy: true;
46
+ optional?: true;
47
+ };
48
+ export type TableColumnProvider<T = any> = TableColumnBase<T> & TableColumnMode;
49
+ /**
50
+ * Charge les colonnes `lazy` : reçoit les clés des colonnes lazy demandées jusqu'ici (cumul) et retourne les lignes complètes,
51
+ * qui remplacent `data` ; la requête est celle de l'application, la table ne connaît pas la source.
52
+ */
53
+ export type TableLazyLoader<T = any> = (lazyColumns: string[]) => Observable<T[]>;
32
54
  /** Configuration de la barre de recherche. */
33
55
  export interface TableSearchConfig {
34
56
  enabled?: boolean;
@@ -62,6 +84,17 @@ export interface TableLabelsConfig {
62
84
  /** Affiché pendant le chargement. Par défaut : `'Chargement des données...'`. */
63
85
  loading?: string;
64
86
  }
87
+ /** Options publiques du bouton Organizer intégré à la toolbar. */
88
+ export interface TableOrganizerConfig {
89
+ /** Libellé optionnel affiché à côté de l'icône. */
90
+ buttonLabel?: OrganizerConfig['buttonLabel'];
91
+ /** Icône Material affichée dans le bouton. */
92
+ buttonIcon?: OrganizerConfig['buttonIcon'];
93
+ /** Masque l'icône lorsque le bouton utilise un libellé seul. */
94
+ showButtonIcon?: OrganizerConfig['showButtonIcon'];
95
+ /** Masque les valeurs récapitulatives dans les sous-menus. */
96
+ hideMenuValues?: boolean;
97
+ }
65
98
  /**
66
99
  * Raccourci pour déclarer une colonne de base.
67
100
  *
@@ -72,7 +105,7 @@ export interface TableLabelsConfig {
72
105
  * ]
73
106
  * ```
74
107
  */
75
- export declare function col<T = any>(key: string, header: string, overrides?: Partial<TableColumnProvider<T>>): TableColumnProvider<T>;
108
+ export declare function col<T = any>(key: string, header: string, overrides?: Partial<TableColumnBase<T>> & TableColumnMode): TableColumnProvider<T>;
76
109
  /** Configuration de l’export CSV déclenché depuis la toolbar. */
77
110
  export interface TableExportConfig<T = any> {
78
111
  /** Affiche le bouton Export dans la toolbar. Par défaut : `true`. */
@@ -135,6 +168,8 @@ export interface TableProvider<T = any> {
135
168
  onCopyVisual?: () => void;
136
169
  onToggleFullscreen?: () => void;
137
170
  slices?: SliceConfig<T>[];
171
+ /** État initial du panneau de slices. Une préférence sauvegardée reste prioritaire. */
172
+ slicePanelCollapsed?: boolean;
138
173
  /** Affiche le bouton toggle pour replier/déplier le panneau de slices. Par défaut : `true`. */
139
174
  enableSliceToggle?: boolean;
140
175
  /**
@@ -145,6 +180,7 @@ export interface TableProvider<T = any> {
145
180
  search?: TableSearchConfig;
146
181
  pagination?: TablePaginationConfig;
147
182
  view?: TableViewConfig;
183
+ organizer?: TableOrganizerConfig;
148
184
  labels?: TableLabelsConfig;
149
185
  /** Tri initial appliqué au chargement. N'est pas écrasé par les changements de données. */
150
186
  defaultSort?: {
@@ -158,6 +194,11 @@ export interface TableProvider<T = any> {
158
194
  onRowSelected?: (row: T, event: MouseEvent | null) => void;
159
195
  /** Configuration de l'export CSV. */
160
196
  export?: TableExportConfig<T>;
197
+ /**
198
+ * Chargeur des colonnes `lazy` : appelé à l'activation d'une colonne lazy (et après chaque nouveau `data` si des colonnes
199
+ * ont déjà été demandées). Sans chargeur, la table émet seulement `lazyColumnsRequested`.
200
+ */
201
+ lazyLoader?: TableLazyLoader<T>;
161
202
  /** Configuration de la fonctionnalité Préférences (édition + persistance localStorage). */
162
203
  preferences?: TablePreferencesConfig;
163
204
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oneteme/jquery-table",
3
- "version": "0.0.13",
3
+ "version": "0.0.15",
4
4
  "description": "jquery table lib",
5
5
  "homepage": "https://github.com/oneteme/jquery-charts",
6
6
  "bugs": "https://github.com/oneteme/jquery-charts/issues",
@@ -13,8 +13,8 @@
13
13
  "@angular/core": ">=16.1.0",
14
14
  "@angular/material": "^16.1.0",
15
15
  "@angular/cdk": "^16.1.0",
16
- "@oneteme/jquery-core": "^0.0.36",
17
- "@oneteme/jquery-organizer": "^0.0.5"
16
+ "@oneteme/jquery-core": "^0.0.38",
17
+ "@oneteme/jquery-organizer": "^0.0.7"
18
18
  },
19
19
  "dependencies": {
20
20
  "tslib": "^2.3.0"