@affino/datagrid-vue 0.3.35 → 0.3.36

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.
@@ -1 +1 @@
1
- {"version":3,"file":"useDataGridAppRowSelection.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppRowSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AAWxF,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAE5G,MAAM,WAAW,iCAAiC,CAAC,IAAI;IACrD,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAA;CAC1E;AAED,MAAM,WAAW,gCAAgC,CAAC,IAAI;IACpD,oBAAoB,EAAE,GAAG,CAAC,4BAA4B,GAAG,IAAI,CAAC,CAAA;IAC9D,UAAU,EAAE,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IACrC,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAA;IACrC,gBAAgB,EAAE,WAAW,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;IACpG,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;IAC5F,mCAAmC,EAAE,MAAM,IAAI,CAAA;IAC/C,gCAAgC,EAAE,MAAM,IAAI,CAAA;CAC7C;AAQD,wBAAgB,0BAA0B,CAAC,IAAI,EAC7C,OAAO,EAAE,iCAAiC,CAAC,IAAI,CAAC,GAC/C,gCAAgC,CAAC,IAAI,CAAC,CAqFxC"}
1
+ {"version":3,"file":"useDataGridAppRowSelection.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppRowSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AAYxF,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAE5G,MAAM,WAAW,iCAAiC,CAAC,IAAI;IACrD,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAA;CAC1E;AAED,MAAM,WAAW,gCAAgC,CAAC,IAAI;IACpD,oBAAoB,EAAE,GAAG,CAAC,4BAA4B,GAAG,IAAI,CAAC,CAAA;IAC9D,UAAU,EAAE,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IACrC,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAA;IACrC,gBAAgB,EAAE,WAAW,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;IACpG,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;IAC5F,mCAAmC,EAAE,MAAM,IAAI,CAAA;IAC/C,gCAAgC,EAAE,MAAM,IAAI,CAAA;CAC7C;AAQD,wBAAgB,0BAA0B,CAAC,IAAI,EAC7C,OAAO,EAAE,iCAAiC,CAAC,IAAI,CAAC,GAC/C,gCAAgC,CAAC,IAAI,CAAC,CAqFxC"}
@@ -1,7 +1,7 @@
1
1
  import { ref } from "vue";
2
- import { clearDataGridSelectedRows, dataGridRowSelectionSnapshotsEqual, deselectDataGridRows, normalizeDataGridRowSelectionSnapshot, reconcileDataGridRowSelectionSnapshot, selectDataGridRows, setDataGridRowFocused, setDataGridRowSelected, } from "@affino/datagrid-core";
2
+ import { clearDataGridSelectedRows, dataGridRowSelectionSnapshotsEqual, deselectDataGridRows, isDataGridRowSelected, normalizeDataGridRowSelectionSnapshot, reconcileDataGridRowSelectionSnapshot, selectDataGridRows, setDataGridRowFocused, setDataGridRowSelected, } from "@affino/datagrid-core";
3
3
  function toNullableSnapshot(snapshot) {
4
- return snapshot.focusedRow == null && snapshot.selectedRows.length === 0
4
+ return (snapshot.mode ?? "explicit") !== "all" && snapshot.focusedRow == null && snapshot.selectedRows.length === 0
5
5
  ? null
6
6
  : snapshot;
7
7
  }
@@ -33,7 +33,7 @@ export function useDataGridAppRowSelection(options) {
33
33
  syncSnapshot(toNullableSnapshot(setDataGridRowFocused(rowSelectionSnapshot.value, rowId)));
34
34
  },
35
35
  getSelectedRows: () => [...selectedRows.value],
36
- isRowSelected: rowId => selectedRows.value.has(rowId),
36
+ isRowSelected: rowId => isDataGridRowSelected(rowSelectionSnapshot.value, rowId),
37
37
  setRowSelected: (rowId, selected) => {
38
38
  syncSnapshot(toNullableSnapshot(setDataGridRowSelected(rowSelectionSnapshot.value, rowId, selected)));
39
39
  },
@@ -1 +1 @@
1
- {"version":3,"file":"useDataGridAppSelection.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAMpD,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EAEb,eAAe,EACf,yBAAyB,EAC1B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AAC5E,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAC5G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;AAS7B,MAAM,WAAW,8BAA8B,CAAC,IAAI;IAClD,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAA;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IACvI,cAAc,CAAC,EAAE,GAAG,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAAA;IACvD,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACvB,gBAAgB,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IACpC,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAA;IAC9E,0BAA0B,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAChF;AAED,MAAM,WAAW,6BAA6B,CAAC,IAAI;IACjD,iBAAiB,EAAE,GAAG,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAA;IACxD,eAAe,EAAE,GAAG,CAAC,sBAAsB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAA;IAClE,gBAAgB,EAAE,WAAW,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;IACpG,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;IAC5F,wBAAwB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACrC,gCAAgC,EAAE,MAAM,IAAI,CAAA;CAC7C;AAuED,wBAAgB,uBAAuB,CAAC,IAAI,EAC1C,OAAO,EAAE,8BAA8B,CAAC,IAAI,CAAC,GAC5C,6BAA6B,CAAC,IAAI,CAAC,CAiMrC"}
1
+ {"version":3,"file":"useDataGridAppSelection.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppSelection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAMpD,OAAO,KAAK,EACV,sBAAsB,EACtB,aAAa,EAEb,eAAe,EACf,yBAAyB,EAC1B,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAA;AAC5E,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAA;AAC5G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE/D,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;AAS7B,MAAM,WAAW,8BAA8B,CAAC,IAAI;IAClD,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAA;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IACvI,cAAc,CAAC,EAAE,GAAG,CAAC,SAAS,sBAAsB,EAAE,CAAC,CAAA;IACvD,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACvB,gBAAgB,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IACpC,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAA;IAC9E,0BAA0B,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;CAChF;AAED,MAAM,WAAW,6BAA6B,CAAC,IAAI;IACjD,iBAAiB,EAAE,GAAG,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAA;IACxD,eAAe,EAAE,GAAG,CAAC,sBAAsB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,CAAA;IAClE,gBAAgB,EAAE,WAAW,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAA;IACpG,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,WAAW,CAAC,CAAA;IAC5F,wBAAwB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACrC,gCAAgC,EAAE,MAAM,IAAI,CAAA;CAC7C;AAuED,wBAAgB,uBAAuB,CAAC,IAAI,EAC1C,OAAO,EAAE,8BAA8B,CAAC,IAAI,CAAC,GAC5C,6BAA6B,CAAC,IAAI,CAAC,CA4MrC"}
@@ -152,6 +152,7 @@ export function useDataGridAppSelection(options) {
152
152
  return null;
153
153
  }
154
154
  let selectedCellCount = 0;
155
+ let loadedSelectedCellCount = 0;
155
156
  let numericCount = 0;
156
157
  let numericSum = 0;
157
158
  let numericMin = Number.POSITIVE_INFINITY;
@@ -164,20 +165,21 @@ export function useDataGridAppSelection(options) {
164
165
  const endColumn = Math.max(0, Math.min(columnCount - 1, Math.max(range.startCol, range.endCol)));
165
166
  for (let rowIndex = startRow; rowIndex <= endRow; rowIndex += 1) {
166
167
  const rowNode = options.resolveSelectionRowAtIndex?.(rowIndex) ?? runtime.api.rows.get(rowIndex);
167
- if (!rowNode || rowNode.kind === "group") {
168
- continue;
169
- }
170
168
  for (let columnIndex = startColumn; columnIndex <= endColumn; columnIndex += 1) {
171
169
  const cellKey = `${rowIndex}:${columnIndex}`;
172
170
  if (seenCells.has(cellKey)) {
173
171
  continue;
174
172
  }
175
- seenCells.add(cellKey);
176
- selectedCellCount += 1;
177
173
  const column = resolveSelectionColumnAtIndex(options.visibleColumns.value, columnIndex, hasRowSelectionColumn);
178
174
  if (!column?.key) {
179
175
  continue;
180
176
  }
177
+ seenCells.add(cellKey);
178
+ selectedCellCount += 1;
179
+ if (!rowNode || rowNode.kind === "group") {
180
+ continue;
181
+ }
182
+ loadedSelectedCellCount += 1;
181
183
  const rawValue = readSelectionCellValue(rowNode, column, options.readSelectionCell);
182
184
  const numericValue = typeof rawValue === "number" ? rawValue : Number(rawValue);
183
185
  if (!Number.isFinite(numericValue)) {
@@ -195,10 +197,12 @@ export function useDataGridAppSelection(options) {
195
197
  }
196
198
  return {
197
199
  count: selectedCellCount,
200
+ loadedCount: loadedSelectedCellCount,
198
201
  sum: numericCount > 0 ? numericSum : null,
199
202
  min: numericCount > 0 ? numericMin : null,
200
203
  max: numericCount > 0 ? numericMax : null,
201
204
  average: numericCount > 0 ? numericSum / numericCount : null,
205
+ isPartial: loadedSelectedCellCount < selectedCellCount,
202
206
  };
203
207
  });
204
208
  const selectionAggregatesLabel = computed(() => {
@@ -206,7 +210,10 @@ export function useDataGridAppSelection(options) {
206
210
  if (!summary) {
207
211
  return "";
208
212
  }
209
- return `Selection: count ${summary.count} · sum ${formatAggregateNumber(summary.sum)} · min ${formatAggregateNumber(summary.min)} · max ${formatAggregateNumber(summary.max)} · avg ${formatAggregateNumber(summary.average)}`;
213
+ const loadedLabel = summary.isPartial
214
+ ? ` · loaded ${aggregateNumberFormatter.format(summary.loadedCount)}`
215
+ : "";
216
+ return `Selection: count ${aggregateNumberFormatter.format(summary.count)}${loadedLabel} · sum ${formatAggregateNumber(summary.sum)} · min ${formatAggregateNumber(summary.min)} · max ${formatAggregateNumber(summary.max)} · avg ${formatAggregateNumber(summary.average)}`;
210
217
  });
211
218
  return {
212
219
  selectionSnapshot,
@@ -1 +1 @@
1
- {"version":3,"file":"useDataGridAppViewport.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppViewport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useDataGridAppViewport.d.ts","sourceRoot":"","sources":["../../src/app/useDataGridAppViewport.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ const DATA_GRID_PERF_TRACE_QUERY_PARAM = "dgPerfTrace";
4
4
  const DATA_GRID_PERF_TRACE_STORAGE_KEY = "affino-datagrid-perf-trace";
5
5
  const DATA_GRID_PERF_STORE_KEY = "__AFFINO_DATAGRID_PERF__";
6
6
  const DATA_GRID_PERF_SAMPLE_LIMIT = 400;
7
+ const DATA_GRID_HORIZONTAL_SCROLL_IDLE_MS = 120;
8
+ const DATA_GRID_ACTIVE_HORIZONTAL_OVERSCAN_MULTIPLIER = 3;
7
9
  function parseDataGridBooleanToken(value) {
8
10
  if (!value) {
9
11
  return null;
@@ -219,6 +221,10 @@ export function useDataGridAppViewport(options) {
219
221
  let lastVisibleRowSyncPerf = null;
220
222
  let pendingViewportScrollTop = 0;
221
223
  let pendingViewportScrollLeft = 0;
224
+ let horizontalScrollIdleTimer = null;
225
+ let horizontalScrollActive = false;
226
+ let forceNextColumnWindowSync = false;
227
+ const horizontalScrollIdleRevision = ref(0);
222
228
  let cachedViewportElement = null;
223
229
  let cachedViewportDimensions = null;
224
230
  let lastSyncedColumnRange = null;
@@ -246,6 +252,31 @@ export function useDataGridAppViewport(options) {
246
252
  }
247
253
  globalThis.clearTimeout(handle);
248
254
  };
255
+ const clearHorizontalScrollIdleTimer = () => {
256
+ if (horizontalScrollIdleTimer == null) {
257
+ return;
258
+ }
259
+ globalThis.clearTimeout(horizontalScrollIdleTimer);
260
+ horizontalScrollIdleTimer = null;
261
+ };
262
+ const forcePreciseHorizontalColumnWindow = () => {
263
+ clearHorizontalScrollIdleTimer();
264
+ horizontalScrollActive = false;
265
+ forceNextColumnWindowSync = true;
266
+ horizontalScrollIdleRevision.value += 1;
267
+ };
268
+ const scheduleHorizontalScrollIdleSync = () => {
269
+ clearHorizontalScrollIdleTimer();
270
+ horizontalScrollActive = true;
271
+ horizontalScrollIdleTimer = globalThis.setTimeout(() => {
272
+ horizontalScrollIdleTimer = null;
273
+ horizontalScrollActive = false;
274
+ forceNextColumnWindowSync = true;
275
+ horizontalScrollIdleRevision.value += 1;
276
+ }, DATA_GRID_HORIZONTAL_SCROLL_IDLE_MS);
277
+ const maybeNodeTimer = horizontalScrollIdleTimer;
278
+ maybeNodeTimer.unref?.();
279
+ };
249
280
  const captureViewportDimensions = (element) => ({
250
281
  clientWidth: element.clientWidth,
251
282
  clientHeight: element.clientHeight,
@@ -381,37 +412,54 @@ export function useDataGridAppViewport(options) {
381
412
  };
382
413
  return value;
383
414
  };
384
- const resolveBufferedViewportColumnMetrics = (columns, visibleStart, visibleEnd, prefix, totalWidth) => {
415
+ const resolveBufferedViewportColumnMetrics = (columns, visibleStart, visibleEnd, prefix, totalWidth, retainMode, forcePrecise) => {
416
+ const overscan = columnOverscan.value;
385
417
  const previousRange = lastSyncedColumnRange?.columns === columns
418
+ && lastSyncedColumnRange.prefix === prefix
419
+ && lastSyncedColumnRange.totalWidth === totalWidth
420
+ && lastSyncedColumnRange.overscan === overscan
386
421
  ? lastSyncedColumnRange
387
422
  : null;
388
- const hysteresis = Math.max(1, Math.floor(columnOverscan.value / 2));
389
- const retainPreviousRange = previousRange != null
423
+ const hysteresis = retainMode === "active" ? 0 : Math.max(1, Math.floor(overscan / 2));
424
+ const retainPreviousRange = !forcePrecise
425
+ && previousRange != null
390
426
  && visibleStart >= previousRange.start + hysteresis
391
427
  && visibleEnd <= previousRange.end - hysteresis;
428
+ const activeOverscan = retainMode === "active"
429
+ ? Math.max(overscan, Math.ceil(overscan * DATA_GRID_ACTIVE_HORIZONTAL_OVERSCAN_MULTIPLIER))
430
+ : overscan;
392
431
  const start = retainPreviousRange
393
432
  ? previousRange.start
394
- : Math.max(0, visibleStart - columnOverscan.value);
433
+ : Math.max(0, visibleStart - activeOverscan);
395
434
  const end = retainPreviousRange
396
435
  ? previousRange.end
397
- : Math.min(columns.length - 1, visibleEnd + columnOverscan.value);
436
+ : Math.min(columns.length - 1, visibleEnd + activeOverscan);
398
437
  const leftSpacerWidth = prefix[start] ?? 0;
399
438
  const renderedWidth = (prefix[end + 1] ?? totalWidth) - leftSpacerWidth;
400
439
  const rightSpacerWidth = Math.max(0, totalWidth - leftSpacerWidth - renderedWidth);
401
440
  lastSyncedColumnRange = {
402
441
  columns,
442
+ prefix,
443
+ totalWidth,
444
+ overscan,
403
445
  start,
404
446
  end,
405
447
  };
406
448
  return resolveViewportColumnMetricsResult(columns, start, end, leftSpacerWidth, rightSpacerWidth);
407
449
  };
408
450
  const viewportColumnMetrics = computed(() => {
451
+ horizontalScrollIdleRevision.value;
452
+ const forcePrecise = forceNextColumnWindowSync;
453
+ forceNextColumnWindowSync = false;
409
454
  const columns = options.visibleColumns.value;
410
455
  const totalWidth = mainTrackWidth.value;
411
456
  if (!resolveMaybeRef(options.columnVirtualizationEnabled) || columns.length <= 0) {
412
457
  lastSyncedColumnRange = columns.length > 0
413
458
  ? {
414
459
  columns,
460
+ prefix: columnPrefixWidths.value,
461
+ totalWidth,
462
+ overscan: columnOverscan.value,
415
463
  start: 0,
416
464
  end: Math.max(0, columns.length - 1),
417
465
  }
@@ -422,6 +470,9 @@ export function useDataGridAppViewport(options) {
422
470
  if (availableWidth <= 0) {
423
471
  lastSyncedColumnRange = {
424
472
  columns,
473
+ prefix: columnPrefixWidths.value,
474
+ totalWidth,
475
+ overscan: columnOverscan.value,
425
476
  start: 0,
426
477
  end: Math.max(0, columns.length - 1),
427
478
  };
@@ -445,7 +496,7 @@ export function useDataGridAppViewport(options) {
445
496
  const visibleStart = lo;
446
497
  if (visibleStart >= columns.length) {
447
498
  const lastIndex = columns.length - 1;
448
- return resolveBufferedViewportColumnMetrics(columns, lastIndex, lastIndex, prefix, totalWidth);
499
+ return resolveBufferedViewportColumnMetrics(columns, lastIndex, lastIndex, prefix, totalWidth, horizontalScrollActive ? "active" : "precise", forcePrecise);
449
500
  }
450
501
  // Binary search: last column whose left edge (prefix[i]) < viewportEndPx.
451
502
  lo = visibleStart;
@@ -459,7 +510,7 @@ export function useDataGridAppViewport(options) {
459
510
  hi = mid - 1;
460
511
  }
461
512
  const visibleEnd = lo;
462
- return resolveBufferedViewportColumnMetrics(columns, visibleStart, visibleEnd, prefix, totalWidth);
513
+ return resolveBufferedViewportColumnMetrics(columns, visibleStart, visibleEnd, prefix, totalWidth, horizontalScrollActive ? "active" : "precise", forcePrecise);
463
514
  });
464
515
  const gridContentStyle = computed(() => {
465
516
  const width = indexColumnWidth + mainTrackWidth.value;
@@ -740,6 +791,14 @@ export function useDataGridAppViewport(options) {
740
791
  }
741
792
  };
742
793
  const commitViewportSnapshot = (snapshot, commitOptions) => {
794
+ const previousScrollLeft = viewportScrollLeft.value;
795
+ const shouldForceColumnWindow = commitOptions.forceVisibleRows || commitOptions.measureVisibleRowHeights;
796
+ if (shouldForceColumnWindow) {
797
+ forcePreciseHorizontalColumnWindow();
798
+ }
799
+ else if (snapshot.scrollLeft !== previousScrollLeft) {
800
+ scheduleHorizontalScrollIdleSync();
801
+ }
743
802
  viewportScrollLeft.value = snapshot.scrollLeft;
744
803
  viewportScrollTop.value = snapshot.scrollTop;
745
804
  viewportClientWidth.value = snapshot.clientWidth;
@@ -886,6 +945,8 @@ export function useDataGridAppViewport(options) {
886
945
  const cancelScheduledViewportSync = () => {
887
946
  pendingViewportSyncForce = false;
888
947
  pendingViewportSyncMeasureVisibleRowHeights = false;
948
+ clearHorizontalScrollIdleTimer();
949
+ horizontalScrollActive = false;
889
950
  if (viewportSyncRafHandle == null) {
890
951
  return;
891
952
  }
@@ -903,6 +964,8 @@ export function useDataGridAppViewport(options) {
903
964
  }
904
965
  cachedViewportElement = null;
905
966
  cachedViewportDimensions = null;
967
+ clearHorizontalScrollIdleTimer();
968
+ horizontalScrollActive = false;
906
969
  });
907
970
  }
908
971
  return {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@affino/datagrid-vue",
3
- "version": "0.3.35",
3
+ "version": "0.3.36",
4
4
  "author": "Anton Pavlov <a.pavlov@affino.dev>",
5
5
  "type": "module",
6
6
  "description": "Vue adapter and headless foundation for Affino DataGrid",
@@ -75,10 +75,10 @@
75
75
  }
76
76
  },
77
77
  "dependencies": {
78
- "@affino/datagrid-core": "0.3.23",
79
78
  "@affino/datagrid-orchestration": "0.3.15",
80
79
  "@affino/datagrid-pivot": "0.1.2",
81
- "@affino/datagrid-worker": "0.1.1"
80
+ "@affino/datagrid-worker": "0.1.1",
81
+ "@affino/datagrid-core": "0.3.24"
82
82
  },
83
83
  "devDependencies": {
84
84
  "@affino/datagrid-theme": "^0.2.2"