@reforgium/data-grid 3.2.2 → 3.2.4

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/CHANGELOG.md CHANGED
@@ -1,13 +1,60 @@
1
+ ## [3.2.4] - 16.07.2026
2
+
3
+ ### Added
4
+
5
+ - `GridPagedDataSource.loadPage()` stateless capability for safe parallel page loading, plus source buffer reset and `sourceError` request diagnostics.
6
+ - Controlled selection keys, explicit source revision/immutability semantics, and disabled paginator navigation support.
7
+
8
+ ### Fixed
9
+
10
+ - Sorting now performs its page reset atomically without issuing a competing `updatePage()` request.
11
+ - Source request failures, stale responses, infinity buffering, paginator normalization, row identity, and overlay drag cleanup are hardened with regression coverage.
12
+ - Ordinary grid cells no longer create duplicate tab stops; rows own grid navigation focus.
13
+
14
+ ### Deprecated
15
+
16
+ - `GridColumn.track` and declarative column `track` are not consumed by rendering. Use the grid-level `rowKey` instead.
17
+
18
+ ### Compatibility
19
+
20
+ - Supported Angular peer range is `>=18.0.0 <22.0.0`; `rxjs` is no longer a peer dependency of `@reforgium/data-grid`.
21
+
22
+ ### Test
23
+
24
+ - Added a cross-package smoke test using the built `@reforgium/data-grid` artifact with a real `PagedQueryStore` from `@reforgium/statum`.
25
+
26
+ ---
27
+
28
+ ## [3.2.3]: 13.05.2026
29
+
30
+ ### Fix:
31
+
32
+ - `DataGrid`: source/infinity - `totalRowCount` no longer collapses to `0` (empty state) after the internal page buffer evicts early pages on long scrolls when the source does not return `totalElements`; row-count knowledge is now tracked via a monotonic high-water mark (`knownRowCount`) plus end-of-data state (`endReached` / `confirmedTotal`) updated when each page lands, instead of walking the eviction-bound `sourcePages` map
33
+ - `DataGrid`: source/infinity - buffer eviction now anchors `pageBase` and never evicts it, so `localToAbsolutePage` and contiguous-loaded-row accounting stay correct after scrolling past `MAX_BUFFERED_PAGES`
34
+
35
+ ### Test:
36
+
37
+ - added regression coverage: monotonic `totalRowCount` without `totalElements` (optimistic probe page, fixed end after short page, post-end full page does not unwind the total), 120-page scroll past `MAX_BUFFERED_PAGES` keeps `totalRowCount` stable, and anchor page survives eviction
38
+
39
+ ### Docs:
40
+
41
+ - `GridPagedDataSource.version`: tightened JSDoc - without `totalElements` the grid pins end-of-data on the first short/empty page, so the source must bump `version` on dataset growth/replacement to clear the pin; mutating `items()` in place without a bump leaves the grid with a stale row count
42
+
43
+ ---
44
+
1
45
  ## [3.2.1]: 17.04.2026
2
46
 
3
47
  ### Fix:
48
+
4
49
  - `DataGrid`: source/pagination now respects exact `totalElements` when it is provided instead of collapsing paginator state to the current page payload length
5
50
  - `DataGrid`: source/pagination without `totalElements` now exposes one optimistic extra page when the current page is full (`items.length === pageSize`), so the consumer can perform the final probe request and detect the real end on the first short/empty page
6
51
 
7
52
  ### Docs:
53
+
8
54
  - `README`: documented `GridPagedDataSource.totalElements` behavior for source-driven pagination without a known total
9
55
 
10
56
  ### Test:
57
+
11
58
  - added regression coverage for source/pagination with exact `totalElements` and for the full-page-without-total probe flow
12
59
 
13
60
  ---
@@ -15,6 +62,7 @@
15
62
  ## [3.2.0]: 14.04.2026
16
63
 
17
64
  ### Feat:
65
+
18
66
  - `DataGrid`: added `getRowClass` input (`string | ((row: Data, index: number) => string)`) — applies CSS class(es) to data rows based on a static string or a resolver function; works alongside `isRowDisabled` and other row-level predicates
19
67
 
20
68
  ---
@@ -22,11 +70,13 @@
22
70
  ## [3.1.2]: 14.04.2026
23
71
 
24
72
  ### Fix:
73
+
25
74
  - `DataGrid`: source/infinity lifecycle for long-lived sources was stabilized; remounting a grid against the same `GridPagedDataSource` / `PagedQueryStore` instance now resets component-local source session state instead of reusing stale buffered pages, queued requests, or pending flags from the previous screen lifecycle
26
75
  - `DataGrid`: source/infinity now rebases correctly when a reused source reattaches on a non-zero page without `totalElements`; the current source page becomes the local starting point instead of rendering an empty grid
27
76
  - `DataGrid`: singleton-like source reuse now settles correctly after empty successful replacements and remounts, so stale rows are cleared and `loading` no longer depends on previous component-local source state
28
77
 
29
78
  ### Test:
79
+
30
80
  - added regression coverage for same-source remount, empty replacement after remount, non-zero-page reattach without `totalElements`, and source-session reset on version change
31
81
 
32
82
  ---
@@ -34,6 +84,7 @@
34
84
  ## [3.1.1]: 06.04.2026
35
85
 
36
86
  ### Fix:
87
+
37
88
  - `DataGrid`: source/infinity — grid no longer auto-requests pages before the first external fetch; `ensureBufferedRange` and `drainQueuedPages` are now gated by a `hasReceivedData` flag that is only raised after at least one non-empty page arrives via `sync()` outside of a reset cycle; guards stale-store (singleton re-bind), stale queued pages surviving a `clearBuffer()`, and the `queueMicrotask` drain-loop that ran after a buffer reset
38
89
 
39
90
  ---
@@ -41,9 +92,11 @@
41
92
  ## [3.1.0]: 02.04.2026
42
93
 
43
94
  ### Feat:
95
+
44
96
  - `DataGrid`: added `columnResizeEnd` output (`GridColumnResizeEndEvent`) — emits the column key and final pixel width when the user finishes a resize drag; use this to persist column widths
45
97
 
46
98
  ### Fix:
99
+
47
100
  - `DataGrid`: multi-sort — `sortOrder` was left stale (`'desc'`) after removing a sort key because `setSortOrder` was only called when `activeOrder` was truthy; now always resets to `'asc'` when no active order
48
101
  - `DataGrid`: multi-sort — `sortField` was not cleared after removing the last sort key, leaving a stale pointer to a column with no active sort; `sortField` is now set to `undefined` when `sorts` becomes empty
49
102
  - `DataGrid`: column layout — `roundAndFix` could leave a visual gap when all auto-sized columns had reached their `maxWidth`; remaining rounding pixels are now distributed even if `maxWidth` is exceeded by 1 px each (sub-pixel correction, not a layout concern)
@@ -53,6 +106,7 @@
53
106
  - `DataGrid`: selection reconcile — `selectChange` was not emitted when the grid automatically pruned selected keys after a data update removed rows that were previously selected; the event is now emitted with the surviving keys whenever the selected set shrinks
54
107
 
55
108
  ### Test:
109
+
56
110
  - added regression tests for all fixes above
57
111
 
58
112
  ---
@@ -60,6 +114,7 @@
60
114
  ## [3.0.0]: 17.03.2026
61
115
 
62
116
  ### Feat:
117
+
63
118
  - `DataGrid`: added global `provideDataGridHeaderTextResolver(...)` DI hook for resolving plain column/group header text (for example via Presentia) without per-table header templates
64
119
  - `DataGrid`: expanded `GridPagedDataSource` with source-level sorting and error state (`sort`, `error`, `updateSort(...)`, `updateSorts(...)`)
65
120
  - `DataGrid`: source mode now syncs current sort state from `source.sort` and delegates user sorting directly to source hooks when available
@@ -68,6 +123,7 @@
68
123
  - `DataGrid`: added gap-loader support for source/infinity mode to keep scroll continuity while pages are still loading
69
124
 
70
125
  ### Fix:
126
+
71
127
  - `DataGrid`: template cell rendering now applies column `align` by default (can still be overridden in custom template markup)
72
128
  - `DataGrid`: infinity `pageChange` no longer emits when `total` is empty (`0`) before first data load
73
129
  - `DataGrid`: header-group `title` now stays available in VM/template context when `titleTemplate` is used
@@ -80,6 +136,7 @@
80
136
  - `DataGrid`: removed lightweight RxJS-only listener plumbing from resize / scroll feature internals
81
137
 
82
138
  ### Docs:
139
+
83
140
  - `README`: clarified that `source` mode does not auto-fetch on mount; parent should configure filters/params first and then trigger the initial load explicitly
84
141
  - `README`: documented direct `PagedQueryStore` compatibility for source mode, including sort delegation and page-size updates
85
142
  - `README`: added global header-text resolver docs and expanded source-mode guidance
@@ -89,6 +146,7 @@
89
146
  ## [2.5.0]: 26.02.2026
90
147
 
91
148
  ### Feat:
149
+
92
150
  - `DataGrid`: extensible cell `type` support (`GridBuiltInCellType | string`) for custom type names
93
151
  - `DataGrid`: global type registries via DI:
94
152
  - `provideDataGridTypeTransformers(...)` (`type -> transformer`)
@@ -98,12 +156,14 @@
98
156
  - `DataGrid`: `isPinned` flag added to cell template contexts (`reDataGridTypeCell`, `reDataGridCell`, typed/global templates) and tooltip template context
99
157
 
100
158
  ### DX / API:
159
+
101
160
  - `GridCellRenderer` (`value`) now supports second argument context: `value(row, ctx)`
102
161
  - `GridCellTransformer` standardized as `transformer(row, ctx)`
103
162
  - `RenderTemplateData` now includes `isPinned`
104
163
  - `GridTooltipContext` now includes `isPinned`
105
164
 
106
165
  ### Docs:
166
+
107
167
  - `README`: added docs/examples for global type registries, renderer/value precedence, selection guidance for infinity mode, and `isPinned` callback/template context usage
108
168
 
109
169
  ---
@@ -111,6 +171,7 @@
111
171
  ## [2.4.0]: 20.02.2026
112
172
 
113
173
  ### Feat:
174
+
114
175
  - `DataGrid`: added header drag-resize for columns with `resizable` support (`minWidth` / `maxWidth` respected)
115
176
  - `DataGrid`: added provider defaults `resizable` and `translations.indexColumnHeader` for global resize behavior and index header text
116
177
 
@@ -119,6 +180,7 @@
119
180
  ## [2.3.6]: 19.02.2026
120
181
 
121
182
  ### Fix:
183
+
122
184
  - `ColumnManager`: pin action no longer reorders columns; pin now updates only sticky side while preserving current column order
123
185
  - `sort-ic`: added not sorted state
124
186
 
@@ -127,6 +189,7 @@
127
189
  ## [2.3.5]: 19.02.2026
128
190
 
129
191
  ### Fix:
192
+
130
193
  - `DataGrid`: fixed expander state reset when `pinnedRows` input changes (expanded groups now stay intact)
131
194
 
132
195
  ---
@@ -134,6 +197,7 @@
134
197
  ## [2.3.4]: 19.02.2026
135
198
 
136
199
  ### Fix:
200
+
137
201
  - `DataGrid`: fixed expander state handling for multiple independent `expandBy` groups (toggling one group no longer resets/opens other groups)
138
202
 
139
203
  ---
@@ -141,9 +205,11 @@
141
205
  ## [2.3.3]: 19.02.2026
142
206
 
143
207
  ### Feat:
208
+
144
209
  - `ColumnManager`: added `showAllLabel` and `hideAllLabel` inputs to customize controls text
145
210
 
146
211
  ### Fix:
212
+
147
213
  - `ColumnManager`: column visibility now toggles only on eye icon click (row/title click no longer toggles visibility)
148
214
 
149
215
  ---
@@ -151,6 +217,7 @@
151
217
  ## [2.3.1]: 18.02.2026
152
218
 
153
219
  ### Fix:
220
+
154
221
  - `ColumnManager`: custom trigger now supports `ng-template[reDataGridColumnManagerTrigger]` and works correctly with interactive projected content
155
222
 
156
223
  ---
@@ -158,33 +225,42 @@
158
225
  ## [2.3.0]: 18.02.2026
159
226
 
160
227
  ### Feat:
228
+
161
229
  - `ColumnManager`: pin action redesigned into compact current-state button with mini popover selection (`left` / `none` / `right`)
162
230
  - `ColumnManager`: custom trigger via projected content marker `reDataGridColumnManagerTrigger`
163
231
  - `ColumnManager`: custom column title template via projected `ng-template[reDataGridColumnManagerColumnTitle]`
164
232
  - `ColumnManager`: panel positioning now clamps to viewport to prevent right-edge overflow
165
233
 
166
234
  ### Refactor:
235
+
167
236
  - `ColumnManager`: component split into dedicated `.ts` / `.html` / `.scss` files
168
237
 
169
238
  ### Notes:
239
+
170
240
  - `ColumnManager`: trigger and list title customization APIs moved to projected content (`reDataGridColumnManagerTrigger`, `reDataGridColumnManagerColumnTitle`)
171
241
 
172
242
  ---
173
243
 
174
244
  ## [2.2.3]
245
+
175
246
  ### Fix:
247
+
176
248
  - `DataGrid`: fixed declarative columns initialization timing to avoid empty/incorrect state before content refs are ready
177
249
 
178
250
  ---
179
251
 
180
252
  ## [2.2.2]
253
+
181
254
  ### Fix:
255
+
182
256
  - `DataGrid`: fixed added missed merge columns helper
183
257
 
184
258
  ---
185
259
 
186
260
  ## [2.2.1]
261
+
187
262
  ### Feat:
263
+
188
264
  - `DataGrid`: `sortMode` with multi-sort flow
189
265
  - `DataGrid`: public API methods `clearSelection`, `selectAllLoaded`, `resetSort`, `setSort`, `setMultiSort`
190
266
  - `DataGrid`: `isRowDisabled` predicate for row-level disabling
@@ -193,21 +269,25 @@
193
269
  - `DataGrid`: auto tooltip by value via `tooltip: true`
194
270
 
195
271
  ### Perf/Opt:
272
+
196
273
  - `DataGrid`: multi-sort order lookup moved to hash map
197
274
  - `DataGrid`: selection and select-all optimizations for infinity mode
198
275
  - `DataGrid`: reduced infinity prefetch aggressiveness (`PREFETCH_FACTOR`)
199
276
  - `DataGrid`: effect/call orchestration cleanup to reduce unnecessary recalculations
200
277
 
201
278
  ### Refactor:
279
+
202
280
  - `DataGrid`: split large component logic into feature modules (selection/sort/sticky/tooltip/overlay/virtual-scroll/header/infinity orchestration)
203
281
  - `DataGrid`: additional orchestration extraction and cleanup in feature layer
204
282
 
205
283
  ### Fix:
284
+
206
285
  - `DataGrid`: select-all behavior fixes for loaded-only strategy in infinity scenarios
207
286
  - `DataGrid`: sorting behavior fixes (single/multi integration and state sync)
208
287
  - `DataGrid`: follow-up fixes for selection and scroll-driven flows
209
288
 
210
289
  ### Test:
290
+
211
291
  - expanded feature-level tests for refactored modules
212
292
  - added surface API tests for `DataGrid` sort methods delegation
213
293
 
@@ -216,9 +296,11 @@
216
296
  ## [2.1.1]: 11.02.2026
217
297
 
218
298
  ### Feat:
299
+
219
300
  - `DataGrid`: CSS vars for header/body gap and hover rounding
220
301
 
221
302
  ### Fix:
303
+
222
304
  - `DataGrid`: pinned rows use the same cell renderer pipeline as regular rows (align/sticky/type/templates/tooltip/width)
223
305
 
224
306
  ---
@@ -226,25 +308,31 @@
226
308
  ## [2.1.0]: 11.02.2026
227
309
 
228
310
  ### Feat:
311
+
229
312
  - `merge` declarative columns with column manager state (visible/disabled/sticky prioritized from state)
230
313
  - `DataGrid`: `lockVerticalScroll` flag to disable vertical scrolling
231
314
  - `DataGrid`: `defer*` flags to defer rendering
232
315
  - expanded public API exports for consumer typing
233
316
 
234
317
  ### Fix:
318
+
235
319
  - `DataGrid`: fix header width rendering
236
320
  - `ColumnManager`: fix hidden state color
237
321
 
238
322
  ### Test:
323
+
239
324
  - added unit tests for column merge helpers
240
325
 
241
326
  ### Docs:
327
+
242
328
  - updated README with missing CSS variables (grid + column manager), column manager inputs, and lock/defer inputs
243
329
 
244
330
  ---
245
331
 
246
332
  ## [2.0.1]: 09.02.2026
333
+
247
334
  ### Chore:
335
+
248
336
  - excluded source maps from the npm package
249
337
 
250
338
  ---
@@ -252,6 +340,7 @@
252
340
  ## [2.0.0]: 09.02.2026
253
341
 
254
342
  ### Feat:
343
+
255
344
  - Header groups (two-level headers)
256
345
  - Declarative columns DSL (`<re-dg-column>`)
257
346
  - Skeleton loading mode (pagination + infinity)
@@ -267,12 +356,14 @@
267
356
  - Default value support for cells
268
357
 
269
358
  ### Perf/Opt:
359
+
270
360
  - Sticky row/column calculations
271
361
  - Virtual scrolling performance
272
362
  - Resize handling
273
363
  - Render / change detection optimizations
274
364
 
275
365
  ### Fix:
366
+
276
367
  - Sticky column interface (left/right)
277
368
  - Type merge issues
278
369
  - Header cell template rendering (icons included)
@@ -280,10 +371,12 @@
280
371
  - Column visibility toggle now switches on first click
281
372
 
282
373
  ### Breaking:
374
+
283
375
  - `GridColumn.tooltip` is now opt-in popover content (string / fn / TemplateRef), replaces previous implicit tooltip behavior.
284
376
  - Column manager introduces new secondary entrypoint `@reforgium/data-grid/column-manager` (no runtime breaking changes, but new public API).
285
377
 
286
378
  ### Docs:
379
+
287
380
  - updated README (column manager + tooltip)
288
381
 
289
382
  ---
@@ -291,6 +384,7 @@
291
384
  ## [1.1.0]: 30.01.2026
292
385
 
293
386
  ### Feat:
387
+
294
388
  - improved height feature
295
389
  - `reDataGridSortIcon`, `reDataGridExpanderIcon`: sort & expander icons ref
296
390
  - `reDataGridCell`: data cell ref
@@ -300,8 +394,9 @@
300
394
  - `CSS customization`: added css variables: empty surface
301
395
 
302
396
  ### Fix:
397
+
303
398
  - code cleanup
304
- - rewrote sandbox minimized
399
+ - rewrote sandbox – minimized
305
400
  - height setting
306
401
  - improved loading and empty state layout
307
402
  - updated (corrected) readme
@@ -311,9 +406,11 @@
311
406
  ## [1.0.3]: 11.01.2026
312
407
 
313
408
  ### Fix:
409
+
314
410
  - fixed prefixes of directives
315
411
 
316
412
  ### Chore:
413
+
317
414
  - added more documentation
318
415
 
319
416
  ---
@@ -321,6 +418,7 @@
321
418
  ## [1.0.2]: 24.12.2025
322
419
 
323
420
  ### Fix:
421
+
324
422
  - fixed index forwarding in the template cell
325
423
 
326
424
  ---
@@ -328,6 +426,7 @@
328
426
  ## [1.0.1]: 24.12.2025
329
427
 
330
428
  ### Fix:
429
+
331
430
  - fixed transform types of inputs
332
431
 
333
432
  ---
@@ -335,6 +434,7 @@
335
434
  ## [1.0.0]: 24.12.2025
336
435
 
337
436
  ### Feat:
437
+
338
438
  - added base data grid functionality
339
439
  - implemented virtual scrolling for efficient work with large datasets
340
440
  - added single-column sorting