ng-virtual-list 19.7.24 → 19.7.25

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.
@@ -2231,11 +2231,25 @@ const validateScrollIteration = (value) => {
2231
2231
  throw Error('The "align" parameter must have the value `none`, `start`, `center` or `end`.');
2232
2232
  }
2233
2233
  };
2234
- const formatScreenReaderMessage = (items, messagePattern) => {
2234
+ const formatScreenReaderMessage = (items, messagePattern, scrollSize, isVertical, bounds) => {
2235
2235
  if (!messagePattern) {
2236
2236
  return '';
2237
2237
  }
2238
- const start = items?.length ? items[0].index + 1 : 0, end = items?.length ? items[items.length - 1].index + 1 : 0;
2238
+ const list = items ?? [], size = isVertical ? bounds.height : bounds.width;
2239
+ let start = Number.NaN, end = Number.NaN, prevItem;
2240
+ for (let i = 0, l = list.length; i < l; i++) {
2241
+ const item = list[i], position = isVertical ? item.measures.y : item.measures.x, itemSize = isVertical ? item.measures.height : item.measures.width;
2242
+ if (((position + itemSize) >= scrollSize) && Number.isNaN(start)) {
2243
+ start = item.index + 1;
2244
+ }
2245
+ if ((position >= (scrollSize + size)) && Number.isNaN(end) && prevItem) {
2246
+ end = prevItem.index + 1;
2247
+ }
2248
+ prevItem = item;
2249
+ }
2250
+ if (Number.isNaN(start) || Number.isNaN(end)) {
2251
+ return '';
2252
+ }
2239
2253
  let formatted = messagePattern ?? '';
2240
2254
  formatted = formatted.replace('$1', `${start}`);
2241
2255
  formatted = formatted.replace('$2', `${end}`);
@@ -2822,8 +2836,8 @@ class NgVirtualListComponent {
2822
2836
  this._trackBox.trackingPropertyName = v;
2823
2837
  })).subscribe();
2824
2838
  const $bounds = toObservable(this._bounds).pipe(filter(b => !!b)), $items = toObservable(this.items).pipe(map(i => !i ? [] : i)), $scrollSize = toObservable(this._scrollSize), $itemSize = toObservable(this.itemSize).pipe(map(v => v <= 0 ? DEFAULT_ITEM_SIZE : v)), $bufferSize = toObservable(this.bufferSize).pipe(map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v)), $maxBufferSize = toObservable(this.maxBufferSize).pipe(map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v)), $itemConfigMap = toObservable(this.itemConfigMap).pipe(map(v => !v ? {} : v)), $snap = toObservable(this.snap), $isVertical = toObservable(this.direction).pipe(map(v => this.getIsVertical(v || DEFAULT_DIRECTION))), $isLazy = toObservable(this.collectionMode).pipe(map(v => this.getIsLazy(v || DEFAULT_COLLECTION_MODE))), $dynamicSize = toObservable(this.dynamicSize), $enabledBufferOptimization = toObservable(this.enabledBufferOptimization), $snappingMethod = toObservable(this.snappingMethod).pipe(map(v => this.getIsSnappingMethodAdvanced(v || DEFAULT_SNAPPING_METHOD))), $methodForSelecting = toObservable(this.methodForSelecting), $selectedIds = toObservable(this.selectedIds), $collapsedIds = toObservable(this.collapsedIds).pipe(map(v => Array.isArray(v) ? v : [])), $collapsedItemIds = toObservable(this._collapsedItemIds).pipe(map(v => Array.isArray(v) ? v : [])), $actualItems = toObservable(this._actualItems), $screenReaderMessage = toObservable(this.screenReaderMessage), $displayItems = this._service.$displayItems, $cacheVersion = toObservable(this._cacheVersion);
2825
- combineLatest([$displayItems, $screenReaderMessage]).pipe(takeUntilDestroyed(), distinctUntilChanged(), tap(([items, screenReaderMessage]) => {
2826
- this.screenReaderFormattedMessage.set(formatScreenReaderMessage(items, screenReaderMessage));
2839
+ combineLatest([$displayItems, $screenReaderMessage, $isVertical, $scrollSize, $bounds]).pipe(takeUntilDestroyed(), distinctUntilChanged(), tap(([items, screenReaderMessage, isVertical, scrollSize, bounds]) => {
2840
+ this.screenReaderFormattedMessage.set(formatScreenReaderMessage(items, screenReaderMessage, scrollSize, isVertical, bounds));
2827
2841
  })).subscribe();
2828
2842
  $isLazy.pipe(takeUntilDestroyed(), tap(v => {
2829
2843
  this._trackBox.isLazy = v;