@reforgium/data-grid 3.2.3 → 3.2.5

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