ng-virtual-list 20.11.6 → 20.11.8

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/README.md CHANGED
@@ -638,6 +638,7 @@ Inputs
638
638
  | scrollbarThumbRenderer | TemplateRef<any> \| null = null | Scrollbar customization template. |
639
639
  | scrollbarThumbParams | {[propName: string]: any;} \| null | Additional options for the scrollbar. |
640
640
  | scrollBehavior | ScrollBehavior? = 'smooth' | Defines the scrolling behavior for any element on the page. The default value is "smooth". |
641
+ | scrollingSettings | [IScrollingSettings](https://github.com/DjonnyX/ng-virtual-list/blob/20.x/projects/ng-virtual-list/src/lib/interfaces/scrolling-settings.ts) = {frictionalForce: 0.035, mass: 0.005, maxDistance: 12500, maxDuration: 4000, speedScale: 15} | Scrolling settings. |
641
642
  | trackBy | string? = 'id' | The name of the property by which tracking is performed. |
642
643
 
643
644
  <br/>
@@ -190,6 +190,13 @@ const DEFAULT_ANIMATION_PARAMS = {
190
190
  navigateToItem: 150,
191
191
  navigateByKeyboard: NAVIGATION_BY_KEYBOARD_TIMER,
192
192
  };
193
+ const DEFAULT_SCROLLING_SETTINGS = {
194
+ frictionalForce: 0.035,
195
+ maxDuration: 4000,
196
+ mass: 0.005,
197
+ maxDistance: 12500,
198
+ speedScale: 15,
199
+ };
193
200
  const DEFAULT_OVERSCROLL_ENABLED = true;
194
201
  const DEFAULT_SNAP = false;
195
202
  const DEFAULT_SELECT_BY_CLICK = true;
@@ -1342,7 +1349,7 @@ class TrackBox extends CacheMap {
1342
1349
  }
1343
1350
  }
1344
1351
  }
1345
- let y = this._scrollStartOffset, stickyCollectionItem = undefined, stickyComponentSize = 0;
1352
+ let y = this._scrollStartOffset, stickyComponentSize = 0;
1346
1353
  for (let i = 0, l = collection.length; i < l; i++) {
1347
1354
  const ii = i + 1, collectionItem = collection[i], id = collectionItem[trackBy];
1348
1355
  let componentSize = 0, componentSizeDelta = 0, itemDisplayMethod = ItemDisplayMethods.NOT_CHANGED;
@@ -1359,7 +1366,7 @@ class TrackBox extends CacheMap {
1359
1366
  componentSizeDelta = componentSnapshotSize;
1360
1367
  switch (itemDisplayMethod) {
1361
1368
  case ItemDisplayMethods.UPDATE: {
1362
- map.set(id, { ...cache, method: isNew ? ItemDisplayMethods.UPDATE : ItemDisplayMethods.NOT_CHANGED });
1369
+ map.set(id, { ...cache, method: isNew ? ItemDisplayMethods.UPDATE : ItemDisplayMethods.NOT_CHANGED, [IS_NEW]: isNew });
1363
1370
  if (isNew && y <= (scrollSize + size + deltaFromStartCreation + componentSize)) {
1364
1371
  deltaFromStartCreation += componentSizeDelta;
1365
1372
  componentSizeDelta = 0;
@@ -1388,7 +1395,6 @@ class TrackBox extends CacheMap {
1388
1395
  if (itemById === undefined) {
1389
1396
  if (id !== fromItemId && id === stickyItemId && itemConfigMap?.[id]?.sticky === 1) {
1390
1397
  stickyComponentSize = componentSize;
1391
- stickyCollectionItem = collectionItem;
1392
1398
  y -= stickyComponentSize;
1393
1399
  }
1394
1400
  if (id === fromItemId) {
@@ -1532,9 +1538,6 @@ class TrackBox extends CacheMap {
1532
1538
  refreshCache(cache) {
1533
1539
  this._prerenderedCache = cache;
1534
1540
  }
1535
- clearDeltaDirection() {
1536
- this.clearScrollDirectionCache();
1537
- }
1538
1541
  clearDelta(clearDirectionDetector = false) {
1539
1542
  this._delta = this._deltaOfNewItems = 0;
1540
1543
  if (clearDirectionDetector) {
@@ -3361,6 +3364,7 @@ class NgScrollView extends BaseScrollView {
3361
3364
  cdkScrollable;
3362
3365
  scrollBehavior = input(DEFAULT_SCROLL_BEHAVIOR, ...(ngDevMode ? [{ debugName: "scrollBehavior" }] : []));
3363
3366
  overscrollEnabled = input(DEFAULT_OVERSCROLL_ENABLED, ...(ngDevMode ? [{ debugName: "overscrollEnabled" }] : []));
3367
+ scrollingSettings = input(DEFAULT_SCROLLING_SETTINGS, ...(ngDevMode ? [{ debugName: "scrollingSettings" }] : []));
3364
3368
  _normalizeValueFromZero = inject(SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO);
3365
3369
  _$scroll = new Subject();
3366
3370
  $scroll = this._$scroll.asObservable();
@@ -3510,14 +3514,14 @@ class NgScrollView extends BaseScrollView {
3510
3514
  }
3511
3515
  calculateVelocity(offsets, delta, timestamp, indexOffset = 10) {
3512
3516
  offsets.push([delta, timestamp < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : timestamp]);
3513
- const len = offsets.length, startIndex = len > indexOffset ? len - indexOffset : 0, lastVSign = calculateDirection(offsets);
3517
+ const len = offsets.length, startIndex = len > indexOffset ? len - indexOffset : 0, lastVSign = calculateDirection(offsets), speedScale = this.scrollingSettings()?.speedScale ?? SPEED_SCALE;
3514
3518
  let vSum = 0;
3515
3519
  for (let i = startIndex, l = offsets.length; i < l; i++) {
3516
3520
  const p0 = offsets[i];
3517
3521
  if (lastVSign !== Math.sign(p0[0])) {
3518
3522
  continue;
3519
3523
  }
3520
- const v0 = (p0[1] !== 0 ? lastVSign * Math.abs(p0[0] / p0[1]) * SPEED_SCALE : 0);
3524
+ const v0 = (p0[1] !== 0 ? lastVSign * Math.abs(p0[0] / p0[1]) * speedScale : 0);
3521
3525
  vSum += Math.sign(v0) * Math.pow(v0, 4) * .003;
3522
3526
  }
3523
3527
  const l = Math.min(offsets.length, indexOffset), v0 = l > 0 ? (vSum / l) : 0;
@@ -3527,6 +3531,7 @@ class NgScrollView extends BaseScrollView {
3527
3531
  velocities.push([delta, timestamp < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : timestamp]);
3528
3532
  const len = velocities.length, startIndex = len > indexOffset ? len - indexOffset : 0;
3529
3533
  let aSum = 0, prevV0, iteration = 0, lastVSign = calculateDirection(velocities);
3534
+ const mass = this.scrollingSettings()?.mass ?? MASS;
3530
3535
  for (let i = startIndex, l = velocities.length; i < l; i++) {
3531
3536
  const v00 = prevV0, v01 = velocities[i];
3532
3537
  if (lastVSign !== Math.sign(v01[0])) {
@@ -3534,13 +3539,13 @@ class NgScrollView extends BaseScrollView {
3534
3539
  }
3535
3540
  if (v00) {
3536
3541
  const a0 = timestamp < MAX_VELOCITY_TIMESTAMP ? (v00[1] !== 0 ? (lastVSign * Math.abs(Math.abs(v01[0]) - Math.abs(v00[0]))) / Math.abs(v00[1]) : 0) : 0.1;
3537
- aSum = (aSum * MASS) + a0;
3542
+ aSum = (aSum * mass) + a0;
3538
3543
  prevV0 = v01;
3539
3544
  }
3540
3545
  prevV0 = v01;
3541
3546
  iteration++;
3542
3547
  }
3543
- const a0 = aSum * FRICTION_FORCE;
3548
+ const a0 = aSum * (this.scrollingSettings()?.frictionalForce ?? FRICTION_FORCE);
3544
3549
  return { a0 };
3545
3550
  }
3546
3551
  stopScrolling() {
@@ -3551,7 +3556,7 @@ class NgScrollView extends BaseScrollView {
3551
3556
  }
3552
3557
  moveWithAcceleration(isVertical, position, v0, v, a0, timestamp) {
3553
3558
  if (a0 !== 0 && timestamp < MAX_VELOCITY_TIMESTAMP) {
3554
- const dvSign = Math.sign(v), duration = DURATION, maxDuration = MAX_DURATION, maxDistance = dvSign * MAX_DIST, s = (dvSign * Math.abs((a0 * Math.pow(duration, 2)) * .5) / 1000) / MASS, distance = Math.abs(s) < MAX_DIST ? s : maxDistance, positionWithVelocity = position + (this._inversion ? -1 : 1) * distance, vmax = Math.max(Math.abs(v0), Math.abs(v)), ad = Math.abs(vmax !== 0 ? Math.sqrt(vmax) : 0) * 10 / MASS, aDuration = ad < maxDuration ? ad : maxDuration, startPosition = isVertical ? this.y : this.x;
3559
+ const dvSign = Math.sign(v), mass = this.scrollingSettings()?.mass ?? MASS, duration = DURATION, maxDuration = this.scrollingSettings()?.maxDuration ?? MAX_DURATION, maxDist = this.scrollingSettings()?.maxDistance ?? MAX_DIST, maxDistance = dvSign * maxDist, s = (dvSign * Math.abs((a0 * Math.pow(duration, 2)) * .5) / 1000) / mass, distance = Math.abs(s) < maxDist ? s : maxDistance, positionWithVelocity = position + (this._inversion ? -1 : 1) * distance, vmax = Math.max(Math.abs(v0), Math.abs(v)), ad = Math.abs(vmax !== 0 ? Math.sqrt(vmax) : 0) * 10 / mass, aDuration = ad < maxDuration ? ad : maxDuration, startPosition = isVertical ? this.y : this.x;
3555
3560
  this.animate(startPosition, Math.round(positionWithVelocity), aDuration, easeOutQuad, true);
3556
3561
  }
3557
3562
  }
@@ -3671,7 +3676,7 @@ class NgScrollView extends BaseScrollView {
3671
3676
  }
3672
3677
  }
3673
3678
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: NgScrollView, deps: [], target: i0.ɵɵFactoryTarget.Component });
3674
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.17", type: NgScrollView, isStandalone: true, selector: "ng-scroll-view", inputs: { scrollBehavior: { classPropertyName: "scrollBehavior", publicName: "scrollBehavior", isSignal: true, isRequired: false, transformFunction: null }, overscrollEnabled: { classPropertyName: "overscrollEnabled", publicName: "overscrollEnabled", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "cdkScrollable", first: true, predicate: ["scrollViewport"], descendants: true, read: CdkScrollable }], usesInheritance: true, ngImport: i0, template: '', isInline: true });
3679
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.17", type: NgScrollView, isStandalone: true, selector: "ng-scroll-view", inputs: { scrollBehavior: { classPropertyName: "scrollBehavior", publicName: "scrollBehavior", isSignal: true, isRequired: false, transformFunction: null }, overscrollEnabled: { classPropertyName: "overscrollEnabled", publicName: "overscrollEnabled", isSignal: true, isRequired: false, transformFunction: null }, scrollingSettings: { classPropertyName: "scrollingSettings", publicName: "scrollingSettings", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "cdkScrollable", first: true, predicate: ["scrollViewport"], descendants: true, read: CdkScrollable }], usesInheritance: true, ngImport: i0, template: '', isInline: true });
3675
3680
  }
3676
3681
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: NgScrollView, decorators: [{
3677
3682
  type: Component,
@@ -3682,7 +3687,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
3682
3687
  }], ctorParameters: () => [], propDecorators: { cdkScrollable: [{
3683
3688
  type: ViewChild,
3684
3689
  args: ['scrollViewport', { read: CdkScrollable }]
3685
- }], scrollBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollBehavior", required: false }] }], overscrollEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "overscrollEnabled", required: false }] }] } });
3690
+ }], scrollBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollBehavior", required: false }] }], overscrollEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "overscrollEnabled", required: false }] }], scrollingSettings: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollingSettings", required: false }] }] } });
3686
3691
 
3687
3692
  const DEFAULT_THICKNESS = 6, DEFAULT_SIZE = 6, PX = 'px', WIDTH = 'width', HEIGHT = 'height', OPACITY = 'opacity', OPACITY_0 = '0', OPACITY_1 = '1', TRANSITION = 'transition', NONE = 'none', TRANSITION_FADE_IN = `${OPACITY} 500ms ease-out`;
3688
3693
 
@@ -5179,6 +5184,59 @@ class NgVirtualListComponent {
5179
5184
  * Defines the scrolling behavior for any element on the page. The default value is "smooth".
5180
5185
  */
5181
5186
  scrollBehavior = input(DEFAULT_SCROLL_BEHAVIOR, ...(ngDevMode ? [{ debugName: "scrollBehavior", ...this._scrollBehaviorOptions }] : [{ ...this._scrollBehaviorOptions }]));
5187
+ _scrollingSettingsOptions = {
5188
+ transform: (v) => {
5189
+ let valid = validateObject(v, true, true);
5190
+ if (valid && !!v) {
5191
+ const { frictionalForce, mass, maxDistance, maxDuration, speedScale } = v;
5192
+ valid = validateFloat(frictionalForce, true);
5193
+ if (!valid) {
5194
+ console.error('The "frictionalForce" parameter must be of type `number` or `undefined`.');
5195
+ return DEFAULT_SCROLLING_SETTINGS;
5196
+ }
5197
+ valid = validateFloat(mass, true);
5198
+ if (!valid) {
5199
+ console.error('The "mass" parameter must be of type `number` or `undefined`.');
5200
+ return DEFAULT_SCROLLING_SETTINGS;
5201
+ }
5202
+ valid = validateFloat(maxDistance, true);
5203
+ if (!valid) {
5204
+ console.error('The "maxDistance" parameter must be of type `number` or `undefined`.');
5205
+ return DEFAULT_SCROLLING_SETTINGS;
5206
+ }
5207
+ valid = validateFloat(maxDuration, true);
5208
+ if (!valid) {
5209
+ console.error('The "maxDuration" parameter must be of type `number` or `undefined`.');
5210
+ return DEFAULT_SCROLLING_SETTINGS;
5211
+ }
5212
+ valid = validateFloat(speedScale, true);
5213
+ if (!valid) {
5214
+ console.error('The "speedScale" parameter must be of type `number` or `undefined`.');
5215
+ return DEFAULT_SCROLLING_SETTINGS;
5216
+ }
5217
+ }
5218
+ if (!valid) {
5219
+ console.error('The "scrollingSettings" parameter must be of type `object` or null.');
5220
+ return DEFAULT_SCROLLING_SETTINGS;
5221
+ }
5222
+ return {
5223
+ frictionalForce: v.frictionalForce !== undefined && v.frictionalForce > 0 ? v.frictionalForce : DEFAULT_SCROLLING_SETTINGS.frictionalForce,
5224
+ mass: v.mass !== undefined && v.mass > 0 ? v.mass : DEFAULT_SCROLLING_SETTINGS.mass,
5225
+ maxDistance: v.maxDistance !== undefined && v.maxDistance > 0 ? v.maxDistance : DEFAULT_SCROLLING_SETTINGS.maxDistance,
5226
+ maxDuration: v.maxDuration !== undefined && v.maxDuration > 0 ? v.maxDuration : DEFAULT_SCROLLING_SETTINGS.maxDuration,
5227
+ speedScale: v.speedScale !== undefined && v.speedScale > 0 ? v.speedScale : DEFAULT_SCROLLING_SETTINGS.speedScale,
5228
+ };
5229
+ },
5230
+ };
5231
+ /**
5232
+ * Scrolling settings.
5233
+ * - frictionalForce - Frictional force. Default value is 0.035.
5234
+ * - mass - Mass. Default value is 0.005.
5235
+ * - maxDistance - Maximum scrolling distance. Default value is 12500.
5236
+ * - maxDuration - Maximum animation duration. Default value is 4000.
5237
+ * - speedScale - Speed scale. Default value is 15.
5238
+ */
5239
+ scrollingSettings = input(DEFAULT_SCROLLING_SETTINGS, ...(ngDevMode ? [{ debugName: "scrollingSettings", ...this._scrollingSettingsOptions }] : [{ ...this._scrollingSettingsOptions }]));
5182
5240
  _animationParamsOptions = {
5183
5241
  transform: (v) => {
5184
5242
  const valid = validateObject(v, true, true);
@@ -5742,8 +5800,8 @@ class NgVirtualListComponent {
5742
5800
  $fireUpdate.pipe(takeUntilDestroyed(), tap(userAction => {
5743
5801
  hasUserAction = userAction;
5744
5802
  })).subscribe();
5745
- let renderStabilizerPrevScrollStateVersion = EMPTY_SCROLL_STATE_VERSION, renderStabilizerUpdateIterations = 0;
5746
5803
  const $update = this.$update, renderStabilizer = (options) => {
5804
+ let renderStabilizerPrevScrollStateVersion = EMPTY_SCROLL_STATE_VERSION, renderStabilizerUpdateIterations = 0;
5747
5805
  const prepareIterations = options?.prepareIterations ?? PREPARE_ITERATIONS, prepareReupdateLength = options?.prepareReupdateLength ?? PREPARATION_REUPDATE_LENGTH;
5748
5806
  return of(null).pipe(takeUntilDestroyed(this._destroyRef), switchMap$1(() => {
5749
5807
  renderStabilizerPrevScrollStateVersion = EMPTY_SCROLL_STATE_VERSION;
@@ -6052,15 +6110,19 @@ class NgVirtualListComponent {
6052
6110
  this._$fireUpdate.next(true);
6053
6111
  }));
6054
6112
  })).subscribe();
6113
+ let isChunkLoading = false;
6055
6114
  const $loading = toObservable(this.loading);
6056
6115
  $loading.pipe(takeUntilDestroyed(), distinctUntilChanged(), skip(1), filter$1(v => !v), switchMap$1(() => {
6116
+ isChunkLoading = true;
6057
6117
  const scrollbar = this._scrollerComponent();
6058
6118
  if (!!scrollbar) {
6059
6119
  scrollbar.stopScrollbar();
6060
6120
  scrollbar.refreshScrollbar();
6061
6121
  }
6062
- return $actualItems.pipe(takeUntilDestroyed(this._destroyRef), take(1), switchMap$1(() => $chunkLoadingRenderStabilizer.pipe(takeUntilDestroyed(this._destroyRef), take(1), tap(() => {
6063
- console.log('reset');
6122
+ return $actualItems.pipe(takeUntilDestroyed(this._destroyRef), take(1), tap(() => {
6123
+ this._$fireUpdateNextFrame.next(true);
6124
+ }), switchMap$1(() => $chunkLoadingRenderStabilizer.pipe(takeUntilDestroyed(this._destroyRef), take(1), tap(() => {
6125
+ isChunkLoading = false;
6064
6126
  this._trackBox.resetCacheChunkInfo();
6065
6127
  const scrollbar = this._scrollerComponent();
6066
6128
  if (!!scrollbar) {
@@ -6085,7 +6147,7 @@ class NgVirtualListComponent {
6085
6147
  const scroller = this._scrollerComponent();
6086
6148
  let totalSize = 0;
6087
6149
  if (scroller) {
6088
- const collapsable = collapsedIds.length > 0, cachable = this.cachable, cached = this._cached, waitingCache = cachable && !cached, emitUpdate = !this._readyForShow || waitingCache || collapsable;
6150
+ const collapsable = collapsedIds.length > 0, cachable = this.cachable, cached = this._cached, waitingCache = cachable && !cached, emitUpdate = !this._readyForShow || waitingCache || collapsable || isChunkLoading;
6089
6151
  if (this._readyForShow || (cachable && cached)) {
6090
6152
  const currentScrollSize = (isVertical ? scroller.scrollTop ?? 0 : scroller.scrollLeft ?? 0), fireUpdate = emitUpdate || reupdate || (!optimization && !userAction) || this._$scrollingTo.getValue();
6091
6153
  let actualScrollSize = !this._readyForShow && snapScrollToEnd ? (isVertical ? scroller.scrollHeight ?? 0 : scroller.scrollWidth ?? 0) :
@@ -6159,23 +6221,22 @@ class NgVirtualListComponent {
6159
6221
  this._trackBox.isScrollEnd;
6160
6222
  return;
6161
6223
  }
6162
- if (scrollPositionAfterUpdate >= 0 && scrollPositionAfterUpdate < roundedMaxPositionAfterUpdate) {
6163
- if (scrollSize !== roundedMaxPositionAfterUpdate || currentScrollSize !== scrollPositionAfterUpdate) {
6164
- this._trackBox.clearDelta();
6165
- if (this._readyForShow) {
6166
- this.emitScrollEvent(true, false, userAction);
6167
- }
6168
- const params = {
6169
- [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollPositionAfterUpdate, blending: true, userAction,
6170
- fireUpdate, behavior: BEHAVIOR_INSTANT, duration: this.animationParams().scrollToItem,
6171
- };
6172
- scroller.scrollTo(params);
6173
- if (emitUpdate) {
6174
- this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));
6175
- }
6224
+ if ((scrollPositionAfterUpdate >= 0 && scrollPositionAfterUpdate < roundedMaxPositionAfterUpdate) ||
6225
+ (scrollSize !== roundedMaxPositionAfterUpdate || currentScrollSize !== scrollPositionAfterUpdate)) {
6226
+ this._trackBox.clearDelta();
6227
+ if (this._readyForShow) {
6228
+ this.emitScrollEvent(true, false, userAction);
6229
+ }
6230
+ const params = {
6231
+ [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollPositionAfterUpdate, blending: true, userAction,
6232
+ fireUpdate, behavior: BEHAVIOR_INSTANT, duration: this.animationParams().scrollToItem,
6233
+ };
6234
+ scroller.scrollTo(params);
6235
+ if (emitUpdate) {
6236
+ this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));
6176
6237
  }
6177
- return;
6178
6238
  }
6239
+ return;
6179
6240
  }
6180
6241
  if (emitUpdate) {
6181
6242
  this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));
@@ -6785,20 +6846,20 @@ class NgVirtualListComponent {
6785
6846
  }
6786
6847
  }
6787
6848
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: NgVirtualListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6788
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: NgVirtualListComponent, isStandalone: false, selector: "ng-virtual-list", inputs: { scrollbarThickness: { classPropertyName: "scrollbarThickness", publicName: "scrollbarThickness", isSignal: true, isRequired: false, transformFunction: null }, scrollbarMinSize: { classPropertyName: "scrollbarMinSize", publicName: "scrollbarMinSize", isSignal: true, isRequired: false, transformFunction: null }, scrollbarThumbRenderer: { classPropertyName: "scrollbarThumbRenderer", publicName: "scrollbarThumbRenderer", isSignal: true, isRequired: false, transformFunction: null }, scrollbarThumbParams: { classPropertyName: "scrollbarThumbParams", publicName: "scrollbarThumbParams", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, waitForPreparation: { classPropertyName: "waitForPreparation", publicName: "waitForPreparation", isSignal: true, isRequired: false, transformFunction: null }, clickDistance: { classPropertyName: "clickDistance", publicName: "clickDistance", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, defaultItemValue: { classPropertyName: "defaultItemValue", publicName: "defaultItemValue", isSignal: true, isRequired: false, transformFunction: null }, selectedIds: { classPropertyName: "selectedIds", publicName: "selectedIds", isSignal: true, isRequired: false, transformFunction: null }, collapsedIds: { classPropertyName: "collapsedIds", publicName: "collapsedIds", isSignal: true, isRequired: false, transformFunction: null }, selectByClick: { classPropertyName: "selectByClick", publicName: "selectByClick", isSignal: true, isRequired: false, transformFunction: null }, collapseByClick: { classPropertyName: "collapseByClick", publicName: "collapseByClick", isSignal: true, isRequired: false, transformFunction: null }, snap: { classPropertyName: "snap", publicName: "snap", isSignal: true, isRequired: false, transformFunction: null }, snapToEndTransitionInstantOffset: { classPropertyName: "snapToEndTransitionInstantOffset", publicName: "snapToEndTransitionInstantOffset", isSignal: true, isRequired: false, transformFunction: null }, scrollStartOffset: { classPropertyName: "scrollStartOffset", publicName: "scrollStartOffset", isSignal: true, isRequired: false, transformFunction: null }, scrollEndOffset: { classPropertyName: "scrollEndOffset", publicName: "scrollEndOffset", isSignal: true, isRequired: false, transformFunction: null }, snapScrollToStart: { classPropertyName: "snapScrollToStart", publicName: "snapScrollToStart", isSignal: true, isRequired: false, transformFunction: null }, snapScrollToEnd: { classPropertyName: "snapScrollToEnd", publicName: "snapScrollToEnd", isSignal: true, isRequired: false, transformFunction: null }, snapScrollToBottom: { classPropertyName: "snapScrollToBottom", publicName: "snapScrollToBottom", isSignal: true, isRequired: false, transformFunction: null }, scrollbarEnabled: { classPropertyName: "scrollbarEnabled", publicName: "scrollbarEnabled", isSignal: true, isRequired: false, transformFunction: null }, scrollbarInteractive: { classPropertyName: "scrollbarInteractive", publicName: "scrollbarInteractive", isSignal: true, isRequired: false, transformFunction: null }, scrollBehavior: { classPropertyName: "scrollBehavior", publicName: "scrollBehavior", isSignal: true, isRequired: false, transformFunction: null }, animationParams: { classPropertyName: "animationParams", publicName: "animationParams", isSignal: true, isRequired: false, transformFunction: null }, overscrollEnabled: { classPropertyName: "overscrollEnabled", publicName: "overscrollEnabled", isSignal: true, isRequired: false, transformFunction: null }, enabledBufferOptimization: { classPropertyName: "enabledBufferOptimization", publicName: "enabledBufferOptimization", isSignal: true, isRequired: false, transformFunction: null }, itemRenderer: { classPropertyName: "itemRenderer", publicName: "itemRenderer", isSignal: true, isRequired: true, transformFunction: null }, itemConfigMap: { classPropertyName: "itemConfigMap", publicName: "itemConfigMap", isSignal: true, isRequired: false, transformFunction: null }, itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, dynamicSize: { classPropertyName: "dynamicSize", publicName: "dynamicSize", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, collectionMode: { classPropertyName: "collectionMode", publicName: "collectionMode", isSignal: true, isRequired: false, transformFunction: null }, bufferSize: { classPropertyName: "bufferSize", publicName: "bufferSize", isSignal: true, isRequired: false, transformFunction: null }, maxBufferSize: { classPropertyName: "maxBufferSize", publicName: "maxBufferSize", isSignal: true, isRequired: false, transformFunction: null }, snappingMethod: { classPropertyName: "snappingMethod", publicName: "snappingMethod", isSignal: true, isRequired: false, transformFunction: null }, methodForSelecting: { classPropertyName: "methodForSelecting", publicName: "methodForSelecting", isSignal: true, isRequired: false, transformFunction: null }, trackBy: { classPropertyName: "trackBy", publicName: "trackBy", isSignal: true, isRequired: false, transformFunction: null }, screenReaderMessage: { classPropertyName: "screenReaderMessage", publicName: "screenReaderMessage", isSignal: true, isRequired: false, transformFunction: null }, langTextDir: { classPropertyName: "langTextDir", publicName: "langTextDir", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onScroll: "onScroll", onScrollEnd: "onScrollEnd", onViewportChange: "onViewportChange", onItemClick: "onItemClick", onSelect: "onSelect", onCollapse: "onCollapse", onScrollReachStart: "onScrollReachStart", onScrollReachEnd: "onScrollReachEnd" }, host: { styleAttribute: "position: relative;" }, providers: [NgVirtualListService, NgVirtualListPublicService], viewQueries: [{ propertyName: "_prerender", first: true, predicate: ["prerender"], descendants: true, isSignal: true }, { propertyName: "_scrollerComponent", first: true, predicate: ["scroller"], descendants: true, isSignal: true }, { propertyName: "_listContainerRef", first: true, predicate: ["renderersContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "_snapContainerRef", first: true, predicate: ["snapRendererContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<div aria-live=\"polite\" aria-atomic=\"true\" class=\"ngvl__screen-reader\">\r\n {{ screenReaderFormattedMessage() }}\r\n</div>\r\n\r\n<ng-prerender-container #prerender [bounds]=\"bounds()!\" [direction]=\"direction()\"\r\n [dynamic]=\"dynamicSize()\" [isVertical]=\"isVertical\" [itemSize]=\"itemSize()\" [trackBy]=\"trackBy()\"\r\n [itemRenderer]=\"itemRenderer()\" [startOffset]=\"scrollStartOffset()\" [endOffset]=\"scrollEndOffset()\"\r\n [scrollbarEnabled]=\"scroller.scrollbarShow()\" [enabled]=\"dynamicSize() && snapScrollToEnd()\" />\r\n\r\n@if (snap()) {\r\n <div localeSensitive [langTextDir]=\"langTextDir()\" #snappedContainer class=\"ngvl__snapped-container\"\r\n [ngClass]=\"classes()\">\r\n <div #snapped part=\"snapped-item\" class=\"ngvl__list-snapper\">\r\n <ng-container #snapRendererContainer></ng-container>\r\n </div>\r\n </div>\r\n}\r\n<ng-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"classes()\" [startOffset]=\"scrollStartOffset()\"\r\n [direction]=\"direction()\" [endOffset]=\"scrollEndOffset()\" [scrollbarThumbRenderer]=\"scrollbarThumbRenderer()\"\r\n [scrollbarThickness]=\"scrollbarThickness()\" [scrollbarThumbParams]=\"scrollbarThumbParams()\"\r\n [focusedElement]=\"focusedElement()\" [loading]=\"loading()\" [overscrollEnabled]=\"overscrollEnabled()\"\r\n [scrollbarEnabled]=\"scrollbarEnabled()\" [scrollbarInteractive]=\"scrollbarInteractive()\"\r\n [scrollbarMinSize]=\"scrollbarMinSize()\" [scrollBehavior]=\"scrollBehavior()\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-scroller>", styles: [":host{position:relative;display:block;width:400px;overflow:hidden}:host(.horizontal){height:48px}:host(.vertical){height:320px}.ngvl__snapped-container{position:relative;width:100%;opacity:0}.ngvl__snapped-container.prepared{opacity:1}.ngvl__list-snapper{-webkit-tap-highlight-color:transparent;pointer-events:none;position:absolute;list-style:none;left:0;top:0;z-index:1}.ngvl__list-scroller{-webkit-tap-highlight-color:transparent;position:absolute;left:0;top:0;width:100%;height:100%;z-index:0}.ngvl__screen-reader{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: NgScrollerComponent, selector: "ng-scroller", inputs: ["scrollbarEnabled", "scrollbarInteractive", "focusedElement", "content", "loading", "classes", "scrollbarMinSize", "scrollbarThickness", "scrollbarThumbRenderer", "scrollbarThumbParams"], outputs: ["onScrollbarVisible"] }, { kind: "component", type: NgPrerenderContainer, selector: "ng-prerender-container", inputs: ["enabled", "direction", "isVertical", "scrollbarEnabled", "startOffset", "endOffset", "bounds", "dynamic", "itemSize", "trackBy", "itemRenderer"] }, { kind: "directive", type: LocaleSensitiveDirective, selector: "[localeSensitive]", inputs: ["langTextDir", "listDir"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom });
6849
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", type: NgVirtualListComponent, isStandalone: false, selector: "ng-virtual-list", inputs: { scrollbarThickness: { classPropertyName: "scrollbarThickness", publicName: "scrollbarThickness", isSignal: true, isRequired: false, transformFunction: null }, scrollbarMinSize: { classPropertyName: "scrollbarMinSize", publicName: "scrollbarMinSize", isSignal: true, isRequired: false, transformFunction: null }, scrollbarThumbRenderer: { classPropertyName: "scrollbarThumbRenderer", publicName: "scrollbarThumbRenderer", isSignal: true, isRequired: false, transformFunction: null }, scrollbarThumbParams: { classPropertyName: "scrollbarThumbParams", publicName: "scrollbarThumbParams", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, waitForPreparation: { classPropertyName: "waitForPreparation", publicName: "waitForPreparation", isSignal: true, isRequired: false, transformFunction: null }, clickDistance: { classPropertyName: "clickDistance", publicName: "clickDistance", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, defaultItemValue: { classPropertyName: "defaultItemValue", publicName: "defaultItemValue", isSignal: true, isRequired: false, transformFunction: null }, selectedIds: { classPropertyName: "selectedIds", publicName: "selectedIds", isSignal: true, isRequired: false, transformFunction: null }, collapsedIds: { classPropertyName: "collapsedIds", publicName: "collapsedIds", isSignal: true, isRequired: false, transformFunction: null }, selectByClick: { classPropertyName: "selectByClick", publicName: "selectByClick", isSignal: true, isRequired: false, transformFunction: null }, collapseByClick: { classPropertyName: "collapseByClick", publicName: "collapseByClick", isSignal: true, isRequired: false, transformFunction: null }, snap: { classPropertyName: "snap", publicName: "snap", isSignal: true, isRequired: false, transformFunction: null }, snapToEndTransitionInstantOffset: { classPropertyName: "snapToEndTransitionInstantOffset", publicName: "snapToEndTransitionInstantOffset", isSignal: true, isRequired: false, transformFunction: null }, scrollStartOffset: { classPropertyName: "scrollStartOffset", publicName: "scrollStartOffset", isSignal: true, isRequired: false, transformFunction: null }, scrollEndOffset: { classPropertyName: "scrollEndOffset", publicName: "scrollEndOffset", isSignal: true, isRequired: false, transformFunction: null }, snapScrollToStart: { classPropertyName: "snapScrollToStart", publicName: "snapScrollToStart", isSignal: true, isRequired: false, transformFunction: null }, snapScrollToEnd: { classPropertyName: "snapScrollToEnd", publicName: "snapScrollToEnd", isSignal: true, isRequired: false, transformFunction: null }, snapScrollToBottom: { classPropertyName: "snapScrollToBottom", publicName: "snapScrollToBottom", isSignal: true, isRequired: false, transformFunction: null }, scrollbarEnabled: { classPropertyName: "scrollbarEnabled", publicName: "scrollbarEnabled", isSignal: true, isRequired: false, transformFunction: null }, scrollbarInteractive: { classPropertyName: "scrollbarInteractive", publicName: "scrollbarInteractive", isSignal: true, isRequired: false, transformFunction: null }, scrollBehavior: { classPropertyName: "scrollBehavior", publicName: "scrollBehavior", isSignal: true, isRequired: false, transformFunction: null }, scrollingSettings: { classPropertyName: "scrollingSettings", publicName: "scrollingSettings", isSignal: true, isRequired: false, transformFunction: null }, animationParams: { classPropertyName: "animationParams", publicName: "animationParams", isSignal: true, isRequired: false, transformFunction: null }, overscrollEnabled: { classPropertyName: "overscrollEnabled", publicName: "overscrollEnabled", isSignal: true, isRequired: false, transformFunction: null }, enabledBufferOptimization: { classPropertyName: "enabledBufferOptimization", publicName: "enabledBufferOptimization", isSignal: true, isRequired: false, transformFunction: null }, itemRenderer: { classPropertyName: "itemRenderer", publicName: "itemRenderer", isSignal: true, isRequired: true, transformFunction: null }, itemConfigMap: { classPropertyName: "itemConfigMap", publicName: "itemConfigMap", isSignal: true, isRequired: false, transformFunction: null }, itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null }, dynamicSize: { classPropertyName: "dynamicSize", publicName: "dynamicSize", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, collectionMode: { classPropertyName: "collectionMode", publicName: "collectionMode", isSignal: true, isRequired: false, transformFunction: null }, bufferSize: { classPropertyName: "bufferSize", publicName: "bufferSize", isSignal: true, isRequired: false, transformFunction: null }, maxBufferSize: { classPropertyName: "maxBufferSize", publicName: "maxBufferSize", isSignal: true, isRequired: false, transformFunction: null }, snappingMethod: { classPropertyName: "snappingMethod", publicName: "snappingMethod", isSignal: true, isRequired: false, transformFunction: null }, methodForSelecting: { classPropertyName: "methodForSelecting", publicName: "methodForSelecting", isSignal: true, isRequired: false, transformFunction: null }, trackBy: { classPropertyName: "trackBy", publicName: "trackBy", isSignal: true, isRequired: false, transformFunction: null }, screenReaderMessage: { classPropertyName: "screenReaderMessage", publicName: "screenReaderMessage", isSignal: true, isRequired: false, transformFunction: null }, langTextDir: { classPropertyName: "langTextDir", publicName: "langTextDir", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onScroll: "onScroll", onScrollEnd: "onScrollEnd", onViewportChange: "onViewportChange", onItemClick: "onItemClick", onSelect: "onSelect", onCollapse: "onCollapse", onScrollReachStart: "onScrollReachStart", onScrollReachEnd: "onScrollReachEnd" }, host: { styleAttribute: "position: relative;" }, providers: [NgVirtualListService, NgVirtualListPublicService], viewQueries: [{ propertyName: "_prerender", first: true, predicate: ["prerender"], descendants: true, isSignal: true }, { propertyName: "_scrollerComponent", first: true, predicate: ["scroller"], descendants: true, isSignal: true }, { propertyName: "_listContainerRef", first: true, predicate: ["renderersContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "_snapContainerRef", first: true, predicate: ["snapRendererContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0, template: "<div aria-live=\"polite\" aria-atomic=\"true\" class=\"ngvl__screen-reader\">\r\n {{ screenReaderFormattedMessage() }}\r\n</div>\r\n\r\n<ng-prerender-container #prerender [bounds]=\"bounds()!\" [direction]=\"direction()\"\r\n [dynamic]=\"dynamicSize()\" [isVertical]=\"isVertical\" [itemSize]=\"itemSize()\" [trackBy]=\"trackBy()\"\r\n [itemRenderer]=\"itemRenderer()\" [startOffset]=\"scrollStartOffset()\" [endOffset]=\"scrollEndOffset()\"\r\n [scrollbarEnabled]=\"scroller.scrollbarShow()\" [enabled]=\"dynamicSize() && snapScrollToEnd()\" />\r\n\r\n@if (snap()) {\r\n <div localeSensitive [langTextDir]=\"langTextDir()\" #snappedContainer class=\"ngvl__snapped-container\"\r\n [ngClass]=\"classes()\">\r\n <div #snapped part=\"snapped-item\" class=\"ngvl__list-snapper\">\r\n <ng-container #snapRendererContainer></ng-container>\r\n </div>\r\n </div>\r\n}\r\n<ng-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"classes()\" [startOffset]=\"scrollStartOffset()\"\r\n [direction]=\"direction()\" [endOffset]=\"scrollEndOffset()\" [scrollbarThumbRenderer]=\"scrollbarThumbRenderer()\"\r\n [scrollbarThickness]=\"scrollbarThickness()\" [scrollbarThumbParams]=\"scrollbarThumbParams()\"\r\n [focusedElement]=\"focusedElement()\" [loading]=\"loading()\" [overscrollEnabled]=\"overscrollEnabled()\"\r\n [scrollbarEnabled]=\"scrollbarEnabled()\" [scrollbarInteractive]=\"scrollbarInteractive()\"\r\n [scrollbarMinSize]=\"scrollbarMinSize()\" [scrollBehavior]=\"scrollBehavior()\" [scrollingSettings]=\"scrollingSettings()\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-scroller>", styles: [":host{position:relative;display:block;width:400px;overflow:hidden}:host(.horizontal){height:48px}:host(.vertical){height:320px}.ngvl__snapped-container{position:relative;width:100%;opacity:0}.ngvl__snapped-container.prepared{opacity:1}.ngvl__list-snapper{-webkit-tap-highlight-color:transparent;pointer-events:none;position:absolute;list-style:none;left:0;top:0;z-index:1}.ngvl__list-scroller{-webkit-tap-highlight-color:transparent;position:absolute;left:0;top:0;width:100%;height:100%;z-index:0}.ngvl__screen-reader{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: NgScrollerComponent, selector: "ng-scroller", inputs: ["scrollbarEnabled", "scrollbarInteractive", "focusedElement", "content", "loading", "classes", "scrollbarMinSize", "scrollbarThickness", "scrollbarThumbRenderer", "scrollbarThumbParams"], outputs: ["onScrollbarVisible"] }, { kind: "component", type: NgPrerenderContainer, selector: "ng-prerender-container", inputs: ["enabled", "direction", "isVertical", "scrollbarEnabled", "startOffset", "endOffset", "bounds", "dynamic", "itemSize", "trackBy", "itemRenderer"] }, { kind: "directive", type: LocaleSensitiveDirective, selector: "[localeSensitive]", inputs: ["langTextDir", "listDir"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.ShadowDom });
6789
6850
  }
6790
6851
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: NgVirtualListComponent, decorators: [{
6791
6852
  type: Component,
6792
6853
  args: [{ selector: 'ng-virtual-list', host: {
6793
6854
  'style': 'position: relative;'
6794
- }, standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.ShadowDom, providers: [NgVirtualListService, NgVirtualListPublicService], template: "<div aria-live=\"polite\" aria-atomic=\"true\" class=\"ngvl__screen-reader\">\r\n {{ screenReaderFormattedMessage() }}\r\n</div>\r\n\r\n<ng-prerender-container #prerender [bounds]=\"bounds()!\" [direction]=\"direction()\"\r\n [dynamic]=\"dynamicSize()\" [isVertical]=\"isVertical\" [itemSize]=\"itemSize()\" [trackBy]=\"trackBy()\"\r\n [itemRenderer]=\"itemRenderer()\" [startOffset]=\"scrollStartOffset()\" [endOffset]=\"scrollEndOffset()\"\r\n [scrollbarEnabled]=\"scroller.scrollbarShow()\" [enabled]=\"dynamicSize() && snapScrollToEnd()\" />\r\n\r\n@if (snap()) {\r\n <div localeSensitive [langTextDir]=\"langTextDir()\" #snappedContainer class=\"ngvl__snapped-container\"\r\n [ngClass]=\"classes()\">\r\n <div #snapped part=\"snapped-item\" class=\"ngvl__list-snapper\">\r\n <ng-container #snapRendererContainer></ng-container>\r\n </div>\r\n </div>\r\n}\r\n<ng-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"classes()\" [startOffset]=\"scrollStartOffset()\"\r\n [direction]=\"direction()\" [endOffset]=\"scrollEndOffset()\" [scrollbarThumbRenderer]=\"scrollbarThumbRenderer()\"\r\n [scrollbarThickness]=\"scrollbarThickness()\" [scrollbarThumbParams]=\"scrollbarThumbParams()\"\r\n [focusedElement]=\"focusedElement()\" [loading]=\"loading()\" [overscrollEnabled]=\"overscrollEnabled()\"\r\n [scrollbarEnabled]=\"scrollbarEnabled()\" [scrollbarInteractive]=\"scrollbarInteractive()\"\r\n [scrollbarMinSize]=\"scrollbarMinSize()\" [scrollBehavior]=\"scrollBehavior()\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-scroller>", styles: [":host{position:relative;display:block;width:400px;overflow:hidden}:host(.horizontal){height:48px}:host(.vertical){height:320px}.ngvl__snapped-container{position:relative;width:100%;opacity:0}.ngvl__snapped-container.prepared{opacity:1}.ngvl__list-snapper{-webkit-tap-highlight-color:transparent;pointer-events:none;position:absolute;list-style:none;left:0;top:0;z-index:1}.ngvl__list-scroller{-webkit-tap-highlight-color:transparent;position:absolute;left:0;top:0;width:100%;height:100%;z-index:0}.ngvl__screen-reader{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"] }]
6855
+ }, standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.ShadowDom, providers: [NgVirtualListService, NgVirtualListPublicService], template: "<div aria-live=\"polite\" aria-atomic=\"true\" class=\"ngvl__screen-reader\">\r\n {{ screenReaderFormattedMessage() }}\r\n</div>\r\n\r\n<ng-prerender-container #prerender [bounds]=\"bounds()!\" [direction]=\"direction()\"\r\n [dynamic]=\"dynamicSize()\" [isVertical]=\"isVertical\" [itemSize]=\"itemSize()\" [trackBy]=\"trackBy()\"\r\n [itemRenderer]=\"itemRenderer()\" [startOffset]=\"scrollStartOffset()\" [endOffset]=\"scrollEndOffset()\"\r\n [scrollbarEnabled]=\"scroller.scrollbarShow()\" [enabled]=\"dynamicSize() && snapScrollToEnd()\" />\r\n\r\n@if (snap()) {\r\n <div localeSensitive [langTextDir]=\"langTextDir()\" #snappedContainer class=\"ngvl__snapped-container\"\r\n [ngClass]=\"classes()\">\r\n <div #snapped part=\"snapped-item\" class=\"ngvl__list-snapper\">\r\n <ng-container #snapRendererContainer></ng-container>\r\n </div>\r\n </div>\r\n}\r\n<ng-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"classes()\" [startOffset]=\"scrollStartOffset()\"\r\n [direction]=\"direction()\" [endOffset]=\"scrollEndOffset()\" [scrollbarThumbRenderer]=\"scrollbarThumbRenderer()\"\r\n [scrollbarThickness]=\"scrollbarThickness()\" [scrollbarThumbParams]=\"scrollbarThumbParams()\"\r\n [focusedElement]=\"focusedElement()\" [loading]=\"loading()\" [overscrollEnabled]=\"overscrollEnabled()\"\r\n [scrollbarEnabled]=\"scrollbarEnabled()\" [scrollbarInteractive]=\"scrollbarInteractive()\"\r\n [scrollbarMinSize]=\"scrollbarMinSize()\" [scrollBehavior]=\"scrollBehavior()\" [scrollingSettings]=\"scrollingSettings()\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-scroller>", styles: [":host{position:relative;display:block;width:400px;overflow:hidden}:host(.horizontal){height:48px}:host(.vertical){height:320px}.ngvl__snapped-container{position:relative;width:100%;opacity:0}.ngvl__snapped-container.prepared{opacity:1}.ngvl__list-snapper{-webkit-tap-highlight-color:transparent;pointer-events:none;position:absolute;list-style:none;left:0;top:0;z-index:1}.ngvl__list-scroller{-webkit-tap-highlight-color:transparent;position:absolute;left:0;top:0;width:100%;height:100%;z-index:0}.ngvl__screen-reader{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"] }]
6795
6856
  }], ctorParameters: () => [], propDecorators: { _prerender: [{ type: i0.ViewChild, args: ['prerender', { isSignal: true }] }], _listContainerRef: [{
6796
6857
  type: ViewChild,
6797
6858
  args: ['renderersContainer', { read: ViewContainerRef }]
6798
6859
  }], _snapContainerRef: [{
6799
6860
  type: ViewChild,
6800
6861
  args: ['snapRendererContainer', { read: ViewContainerRef }]
6801
- }], _scrollerComponent: [{ type: i0.ViewChild, args: ['scroller', { isSignal: true }] }], onScroll: [{ type: i0.Output, args: ["onScroll"] }], onScrollEnd: [{ type: i0.Output, args: ["onScrollEnd"] }], onViewportChange: [{ type: i0.Output, args: ["onViewportChange"] }], onItemClick: [{ type: i0.Output, args: ["onItemClick"] }], onSelect: [{ type: i0.Output, args: ["onSelect"] }], onCollapse: [{ type: i0.Output, args: ["onCollapse"] }], onScrollReachStart: [{ type: i0.Output, args: ["onScrollReachStart"] }], onScrollReachEnd: [{ type: i0.Output, args: ["onScrollReachEnd"] }], scrollbarThickness: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollbarThickness", required: false }] }], scrollbarMinSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollbarMinSize", required: false }] }], scrollbarThumbRenderer: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollbarThumbRenderer", required: false }] }], scrollbarThumbParams: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollbarThumbParams", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], waitForPreparation: [{ type: i0.Input, args: [{ isSignal: true, alias: "waitForPreparation", required: false }] }], clickDistance: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickDistance", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }], defaultItemValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultItemValue", required: false }] }], selectedIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedIds", required: false }] }], collapsedIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsedIds", required: false }] }], selectByClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectByClick", required: false }] }], collapseByClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapseByClick", required: false }] }], snap: [{ type: i0.Input, args: [{ isSignal: true, alias: "snap", required: false }] }], snapToEndTransitionInstantOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapToEndTransitionInstantOffset", required: false }] }], scrollStartOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollStartOffset", required: false }] }], scrollEndOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollEndOffset", required: false }] }], snapScrollToStart: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapScrollToStart", required: false }] }], snapScrollToEnd: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapScrollToEnd", required: false }] }], snapScrollToBottom: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapScrollToBottom", required: false }] }], scrollbarEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollbarEnabled", required: false }] }], scrollbarInteractive: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollbarInteractive", required: false }] }], scrollBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollBehavior", required: false }] }], animationParams: [{ type: i0.Input, args: [{ isSignal: true, alias: "animationParams", required: false }] }], overscrollEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "overscrollEnabled", required: false }] }], enabledBufferOptimization: [{ type: i0.Input, args: [{ isSignal: true, alias: "enabledBufferOptimization", required: false }] }], itemRenderer: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemRenderer", required: true }] }], itemConfigMap: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemConfigMap", required: false }] }], itemSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemSize", required: false }] }], dynamicSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "dynamicSize", required: false }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], collectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "collectionMode", required: false }] }], bufferSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "bufferSize", required: false }] }], maxBufferSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxBufferSize", required: false }] }], snappingMethod: [{ type: i0.Input, args: [{ isSignal: true, alias: "snappingMethod", required: false }] }], methodForSelecting: [{ type: i0.Input, args: [{ isSignal: true, alias: "methodForSelecting", required: false }] }], trackBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "trackBy", required: false }] }], screenReaderMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "screenReaderMessage", required: false }] }], langTextDir: [{ type: i0.Input, args: [{ isSignal: true, alias: "langTextDir", required: false }] }] } });
6862
+ }], _scrollerComponent: [{ type: i0.ViewChild, args: ['scroller', { isSignal: true }] }], onScroll: [{ type: i0.Output, args: ["onScroll"] }], onScrollEnd: [{ type: i0.Output, args: ["onScrollEnd"] }], onViewportChange: [{ type: i0.Output, args: ["onViewportChange"] }], onItemClick: [{ type: i0.Output, args: ["onItemClick"] }], onSelect: [{ type: i0.Output, args: ["onSelect"] }], onCollapse: [{ type: i0.Output, args: ["onCollapse"] }], onScrollReachStart: [{ type: i0.Output, args: ["onScrollReachStart"] }], onScrollReachEnd: [{ type: i0.Output, args: ["onScrollReachEnd"] }], scrollbarThickness: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollbarThickness", required: false }] }], scrollbarMinSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollbarMinSize", required: false }] }], scrollbarThumbRenderer: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollbarThumbRenderer", required: false }] }], scrollbarThumbParams: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollbarThumbParams", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], waitForPreparation: [{ type: i0.Input, args: [{ isSignal: true, alias: "waitForPreparation", required: false }] }], clickDistance: [{ type: i0.Input, args: [{ isSignal: true, alias: "clickDistance", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: true }] }], defaultItemValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultItemValue", required: false }] }], selectedIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedIds", required: false }] }], collapsedIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsedIds", required: false }] }], selectByClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectByClick", required: false }] }], collapseByClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapseByClick", required: false }] }], snap: [{ type: i0.Input, args: [{ isSignal: true, alias: "snap", required: false }] }], snapToEndTransitionInstantOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapToEndTransitionInstantOffset", required: false }] }], scrollStartOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollStartOffset", required: false }] }], scrollEndOffset: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollEndOffset", required: false }] }], snapScrollToStart: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapScrollToStart", required: false }] }], snapScrollToEnd: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapScrollToEnd", required: false }] }], snapScrollToBottom: [{ type: i0.Input, args: [{ isSignal: true, alias: "snapScrollToBottom", required: false }] }], scrollbarEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollbarEnabled", required: false }] }], scrollbarInteractive: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollbarInteractive", required: false }] }], scrollBehavior: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollBehavior", required: false }] }], scrollingSettings: [{ type: i0.Input, args: [{ isSignal: true, alias: "scrollingSettings", required: false }] }], animationParams: [{ type: i0.Input, args: [{ isSignal: true, alias: "animationParams", required: false }] }], overscrollEnabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "overscrollEnabled", required: false }] }], enabledBufferOptimization: [{ type: i0.Input, args: [{ isSignal: true, alias: "enabledBufferOptimization", required: false }] }], itemRenderer: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemRenderer", required: true }] }], itemConfigMap: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemConfigMap", required: false }] }], itemSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemSize", required: false }] }], dynamicSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "dynamicSize", required: false }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], collectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "collectionMode", required: false }] }], bufferSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "bufferSize", required: false }] }], maxBufferSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxBufferSize", required: false }] }], snappingMethod: [{ type: i0.Input, args: [{ isSignal: true, alias: "snappingMethod", required: false }] }], methodForSelecting: [{ type: i0.Input, args: [{ isSignal: true, alias: "methodForSelecting", required: false }] }], trackBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "trackBy", required: false }] }], screenReaderMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "screenReaderMessage", required: false }] }], langTextDir: [{ type: i0.Input, args: [{ isSignal: true, alias: "langTextDir", required: false }] }] } });
6802
6863
 
6803
6864
  class LocaleSensitiveModule {
6804
6865
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: LocaleSensitiveModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });