@html-next/vertical-collection 5.0.2 → 5.0.3

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,2 +1,2 @@
1
- export { D as DynamicRadar, S as ScrollHandler, a as StaticRadar, V as ViewportContainer, b as addScrollHandler, c as closestElement, k as keyForItem, o as objectAt, r as removeScrollHandler } from '../static-radar-D0EvnYLd.js';
1
+ export { D as DynamicRadar, S as ScrollHandler, a as StaticRadar, V as ViewportContainer, b as addScrollHandler, k as keyForItem, o as objectAt, r as removeScrollHandler } from '../static-radar-Bu6d3fDF.js';
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ import Component, { setComponentTemplate } from '@ember/component';
6
6
  import { get, computed } from '@ember/object';
7
7
  import { run } from '@ember/runloop';
8
8
  import { Token, scheduler } from 'ember-raf-scheduler';
9
- import { a as StaticRadar, D as DynamicRadar, V as ViewportContainer, o as objectAt, k as keyForItem } from './static-radar-D0EvnYLd.js';
9
+ import { a as StaticRadar, D as DynamicRadar, V as ViewportContainer, o as objectAt, k as keyForItem } from './static-radar-Bu6d3fDF.js';
10
10
  import { precompileTemplate } from '@ember/template-compilation';
11
11
 
12
12
  ;
@@ -3,7 +3,7 @@ import { assert } from '@ember/debug';
3
3
  import { A } from '@ember/array';
4
4
  import { get, set } from '@ember/object';
5
5
  import { begin, end, run } from '@ember/runloop';
6
- import { scheduler, Token } from 'ember-raf-scheduler';
6
+ import { Token, scheduler } from 'ember-raf-scheduler';
7
7
  import { guidFor } from '@ember/object/internals';
8
8
 
9
9
  function identity(item) {
@@ -37,29 +37,6 @@ function keyForItem(item, keyPath, index) {
37
37
  return key;
38
38
  }
39
39
 
40
- const VENDOR_MATCH_FNS = ['matches', 'webkitMatchesSelector', 'mozMatchesSelector', 'msMatchesSelector', 'oMatchesSelector'];
41
- let ELEMENT_MATCH_FN;
42
- function setElementMatchFn(el) {
43
- VENDOR_MATCH_FNS.forEach(fn => {
44
- if (ELEMENT_MATCH_FN === undefined && typeof el[fn] === 'function') {
45
- ELEMENT_MATCH_FN = fn;
46
- }
47
- });
48
- }
49
- function closest(el, selector) {
50
- if (ELEMENT_MATCH_FN === undefined) {
51
- setElementMatchFn(el);
52
- }
53
- while (el) {
54
- // TODO add explicit test
55
- if (el[ELEMENT_MATCH_FN](selector)) {
56
- return el;
57
- }
58
- el = el.parentElement;
59
- }
60
- return null;
61
- }
62
-
63
40
  var document$1 = window ? window.document : undefined;
64
41
 
65
42
  let VC_IDENTITY = 0;
@@ -232,30 +209,13 @@ function isAppend(lenDiff, newItems, key, oldFirstKey, oldLastKey) {
232
209
  return oldFirstKey === newFirstKey && oldLastKey === newLastKey;
233
210
  }
234
211
 
235
- let supportsPassive = false;
236
- try {
237
- let opts = Object.defineProperty({}, 'passive', {
238
- get() {
239
- supportsPassive = true;
240
- return supportsPassive;
241
- }
242
- });
243
- window.addEventListener('test', null, opts);
244
- } catch {
245
- // do nothing
246
- }
247
- var SUPPORTS_PASSIVE = supportsPassive;
248
-
249
212
  const DEFAULT_ARRAY_SIZE = 10;
250
- const UNDEFINED_VALUE = Object.create(null);
251
213
  class ScrollHandler {
252
214
  constructor() {
253
215
  this.elements = new Array(DEFAULT_ARRAY_SIZE);
254
216
  this.maxLength = DEFAULT_ARRAY_SIZE;
255
217
  this.length = 0;
256
218
  this.handlers = new Array(DEFAULT_ARRAY_SIZE);
257
- this.isPolling = false;
258
- this.isUsingPassive = SUPPORTS_PASSIVE;
259
219
  }
260
220
  addScrollHandler(element, handler) {
261
221
  let index = this.elements.indexOf(element);
@@ -272,67 +232,42 @@ class ScrollHandler {
272
232
  cache = this.handlers[index] = {
273
233
  top: element.scrollTop,
274
234
  left: element.scrollLeft,
275
- handlers
276
- };
277
- // TODO add explicit test
278
- if (SUPPORTS_PASSIVE) {
279
- cache.passiveHandler = function () {
235
+ handlers,
236
+ passiveHandler() {
280
237
  ScrollHandler.triggerElementHandlers(element, cache);
281
- };
282
- } else {
283
- cache.passiveHandler = UNDEFINED_VALUE;
284
- }
238
+ }
239
+ };
285
240
  } else {
286
241
  cache = this.handlers[index];
287
242
  handlers = cache.handlers;
288
243
  handlers.push(handler);
289
244
  }
290
-
291
- // TODO add explicit test
292
- if (this.isUsingPassive) {
293
- // Only add the event listener once, if more handlers are present.
294
- if (handlers.length === 1) {
295
- element.addEventListener('scroll', cache.passiveHandler, {
296
- capture: true,
297
- passive: true
298
- });
299
- }
300
-
301
- // TODO add explicit test
302
- } else if (!this.isPolling) {
303
- this.poll();
245
+ if (handlers.length === 1) {
246
+ element.addEventListener('scroll', cache.passiveHandler, {
247
+ capture: true,
248
+ passive: true
249
+ });
304
250
  }
305
251
  }
306
252
  removeScrollHandler(element, handler) {
307
253
  let index = this.elements.indexOf(element);
308
254
  let elementCache = this.handlers[index];
309
- // TODO add explicit test
310
255
  if (elementCache && elementCache.handlers) {
311
256
  let index = elementCache.handlers.indexOf(handler);
312
257
  if (index === -1) {
313
258
  throw new Error('Attempted to remove an unknown handler');
314
259
  }
315
260
  elementCache.handlers.splice(index, 1);
316
-
317
- // cleanup element entirely if needed
318
- // TODO add explicit test
319
261
  if (!elementCache.handlers.length) {
320
262
  index = this.elements.indexOf(element);
321
263
  this.handlers.splice(index, 1);
322
264
  this.elements.splice(index, 1);
323
265
  this.length--;
324
266
  this.maxLength--;
325
- if (this.length === 0) {
326
- this.isPolling = false;
327
- }
328
-
329
- // TODO add explicit test
330
- if (this.isUsingPassive) {
331
- element.removeEventListener('scroll', elementCache.passiveHandler, {
332
- capture: true,
333
- passive: true
334
- });
335
- }
267
+ element.removeEventListener('scroll', elementCache.passiveHandler, {
268
+ capture: true,
269
+ passive: true
270
+ });
336
271
  }
337
272
  } else {
338
273
  throw new Error('Attempted to remove a handler from an unknown element or an element with no handlers');
@@ -349,8 +284,6 @@ class ScrollHandler {
349
284
  top: cachedTop,
350
285
  left: cachedLeft
351
286
  };
352
-
353
- // TODO add explicit test
354
287
  if (topChanged || leftChanged) {
355
288
  begin();
356
289
  for (let j = 0; j < meta.handlers.length; j++) {
@@ -359,25 +292,6 @@ class ScrollHandler {
359
292
  end();
360
293
  }
361
294
  }
362
- poll() {
363
- this.isPolling = true;
364
- scheduler.schedule('sync', () => {
365
- // TODO add explicit test
366
- if (!this.isPolling) {
367
- return;
368
- }
369
- for (let i = 0; i < this.length; i++) {
370
- let element = this.elements[i];
371
- let info = this.handlers[i];
372
- ScrollHandler.triggerElementHandlers(element, info);
373
- }
374
- this.isPolling = this.length > 0;
375
- // TODO add explicit test
376
- if (this.isPolling) {
377
- this.poll();
378
- }
379
- });
380
- }
381
295
  }
382
296
  const instance = new ScrollHandler();
383
297
  function addScrollHandler(element, handler) {
@@ -388,36 +302,25 @@ function removeScrollHandler(element, handler) {
388
302
  }
389
303
 
390
304
  /*
391
- * There are significant differences between browsers
392
- * in how they implement "scroll" on document.body
393
- *
394
- * The only cross-browser listener for scroll on body
395
- * is to listen on window with capture.
396
- *
397
- * They also implement different standards for how to
398
- * access the scroll position.
399
- *
400
- * This singleton class provides a cross-browser way
401
- * to access and set the scrollTop and scrollLeft properties.
402
- *
305
+ * This singleton class provides a way to treat the document viewport
306
+ * like a scrollable element, proxying scroll position access and
307
+ * event listeners to the appropriate browser APIs.
403
308
  */
404
309
  function ViewportContainer() {
405
- // A bug occurs in Chrome when we reload the browser at a lower
406
- // scrollTop, window.scrollY becomes stuck on a single value.
407
310
  Object.defineProperty(this, 'scrollTop', {
408
311
  get() {
409
- return document.body.scrollTop || document.documentElement.scrollTop;
312
+ return window.scrollY;
410
313
  },
411
314
  set(v) {
412
- document.body.scrollTop = document.documentElement.scrollTop = v;
315
+ window.scrollTo(window.scrollX, v);
413
316
  }
414
317
  });
415
318
  Object.defineProperty(this, 'scrollLeft', {
416
319
  get() {
417
- return window.scrollX || window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft;
320
+ return window.scrollX;
418
321
  },
419
322
  set(v) {
420
- window.scrollX = window.pageXOffset = document.body.scrollLeft = document.documentElement.scrollLeft = v;
323
+ window.scrollTo(v, window.scrollY);
421
324
  }
422
325
  });
423
326
  Object.defineProperty(this, 'offsetHeight', {
@@ -429,7 +332,7 @@ function ViewportContainer() {
429
332
  ViewportContainer.prototype.addEventListener = function addEventListener(event, handler, options) {
430
333
  return window.addEventListener(event, handler, options);
431
334
  };
432
- ViewportContainer.prototype.removeEventListener = function addEventListener(event, handler, options) {
335
+ ViewportContainer.prototype.removeEventListener = function removeEventListener(event, handler, options) {
433
336
  return window.removeEventListener(event, handler, options);
434
337
  };
435
338
  ViewportContainer.prototype.getBoundingClientRect = function getBoundingClientRect() {
@@ -447,10 +350,10 @@ var ViewportContainer$1 = new ViewportContainer();
447
350
  function estimateElementHeight(element, fallbackHeight) {
448
351
  assert(`You called estimateElement height without a fallbackHeight`, fallbackHeight);
449
352
  assert(`You called estimateElementHeight without an element`, element);
450
- if (fallbackHeight.indexOf('%') !== -1) {
353
+ if (fallbackHeight.includes('%')) {
451
354
  return getPercentageHeight(element, fallbackHeight);
452
355
  }
453
- if (fallbackHeight.indexOf('em') !== -1) {
356
+ if (fallbackHeight.includes('em')) {
454
357
  return getEmHeight(element, fallbackHeight);
455
358
  }
456
359
  return parseInt(fallbackHeight, 10);
@@ -463,7 +366,7 @@ function getPercentageHeight(element, fallbackHeight) {
463
366
  return percent * parentHeight / 100.0;
464
367
  }
465
368
  function getEmHeight(element, fallbackHeight) {
466
- const fontSizeElement = fallbackHeight.indexOf('rem') !== -1 ? document.documentElement : element;
369
+ const fontSizeElement = fallbackHeight.includes('rem') ? document.documentElement : element;
467
370
  const fontSize = window.getComputedStyle(fontSizeElement).getPropertyValue('font-size');
468
371
  return parseFloat(fallbackHeight) * parseFloat(fontSize);
469
372
  }
@@ -574,10 +477,6 @@ class Radar {
574
477
  this.virtualComponents = A([this._occludedContentBefore, this._occludedContentAfter]);
575
478
  this.orderedComponents = [];
576
479
  this._updateVirtualComponents();
577
-
578
- // In older versions of Ember/IE, binding anything on an object in the template
579
- // adds observers which creates __ember_meta__
580
- this.__ember_meta__ = null;
581
480
  if (DEBUG) {
582
481
  this._debugDidUpdate = null;
583
482
  }
@@ -618,7 +517,7 @@ class Radar {
618
517
  // Use the occluded content element, which has been inserted into the DOM,
619
518
  // to find the item container and the scroll container
620
519
  this._itemContainer = _occludedContentBefore.element.parentNode;
621
- this._scrollContainer = containerSelector === 'body' ? ViewportContainer$1 : closest(this._itemContainer, containerSelector);
520
+ this._scrollContainer = containerSelector === 'body' ? ViewportContainer$1 : this._itemContainer.closest(containerSelector);
622
521
  this._updateConstants();
623
522
 
624
523
  // Setup initial scroll state
@@ -1157,27 +1056,10 @@ class Radar {
1157
1056
  * traverse to get the total value before and after the final index.
1158
1057
  */
1159
1058
 
1160
- function fill(array, value, start = 0, end = array.length) {
1161
- if (typeof array.fill === 'function') {
1162
- array.fill(value, start, end);
1163
- } else {
1164
- for (; start < end; start++) {
1165
- array[start] = value;
1166
- }
1167
- return array;
1168
- }
1169
- }
1170
- function subarray(array, start, end) {
1171
- if (typeof array.subarray === 'function') {
1172
- return array.subarray(start, end);
1173
- } else {
1174
- return array.slice(start, end);
1175
- }
1176
- }
1177
1059
  class SkipList {
1178
1060
  constructor(length, defaultValue) {
1179
1061
  const values = new Float32Array(new ArrayBuffer(length * 4));
1180
- fill(values, defaultValue);
1062
+ values.fill(defaultValue);
1181
1063
  this.length = length;
1182
1064
  this.defaultValue = defaultValue;
1183
1065
  this._initializeLayers(values, defaultValue);
@@ -1199,7 +1081,7 @@ class SkipList {
1199
1081
  // This allows us to use the `fill` method on Typed arrays, which
1200
1082
  // an order of magnitude faster than manually calculating each value.
1201
1083
  defaultValue = defaultValue * 2;
1202
- fill(layer, defaultValue);
1084
+ layer.fill(defaultValue);
1203
1085
  left = prevLayer[(length - 1) * 2] || 0;
1204
1086
  right = prevLayer[(length - 1) * 2 + 1] || 0;
1205
1087
 
@@ -1326,7 +1208,7 @@ class SkipList {
1326
1208
  const newLength = numPrepended + oldLength;
1327
1209
  const newValues = new Float32Array(new ArrayBuffer(newLength * 4));
1328
1210
  newValues.set(oldValues, numPrepended);
1329
- fill(newValues, defaultValue, 0, numPrepended);
1211
+ newValues.fill(defaultValue, 0, numPrepended);
1330
1212
  this.length = newLength;
1331
1213
  this._initializeLayers(newValues);
1332
1214
  }
@@ -1339,7 +1221,7 @@ class SkipList {
1339
1221
  const newLength = numAppended + oldLength;
1340
1222
  const newValues = new Float32Array(new ArrayBuffer(newLength * 4));
1341
1223
  newValues.set(oldValues);
1342
- fill(newValues, defaultValue, oldLength);
1224
+ newValues.fill(defaultValue, oldLength);
1343
1225
  this.length = newLength;
1344
1226
  this._initializeLayers(newValues);
1345
1227
  }
@@ -1355,9 +1237,9 @@ class SkipList {
1355
1237
  const newValues = new Float32Array(new ArrayBuffer(newLength * 4));
1356
1238
  if (oldLength < newLength) {
1357
1239
  newValues.set(oldValues);
1358
- fill(newValues, defaultValue, oldLength);
1240
+ newValues.fill(defaultValue, oldLength);
1359
1241
  } else {
1360
- newValues.set(subarray(oldValues, 0, newLength));
1242
+ newValues.set(oldValues.subarray(0, newLength));
1361
1243
  }
1362
1244
  this.length = newLength;
1363
1245
  if (oldLength === 0) {
@@ -1672,5 +1554,5 @@ class StaticRadar extends Radar {
1672
1554
  }
1673
1555
  }
1674
1556
 
1675
- export { DynamicRadar as D, ScrollHandler as S, ViewportContainer$1 as V, StaticRadar as a, addScrollHandler as b, closest as c, keyForItem as k, objectAt as o, removeScrollHandler as r };
1676
- //# sourceMappingURL=static-radar-D0EvnYLd.js.map
1557
+ export { DynamicRadar as D, ScrollHandler as S, ViewportContainer$1 as V, StaticRadar as a, addScrollHandler as b, keyForItem as k, objectAt as o, removeScrollHandler as r };
1558
+ //# sourceMappingURL=static-radar-Bu6d3fDF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-radar-Bu6d3fDF.js","sources":["../src/-private/ember-internals/identity.js","../src/-private/ember-internals/key-for-item.js","../src/-private/utils/document-shim.js","../src/-private/data-view/elements/virtual-component.js","../src/-private/data-view/elements/occluded-content.js","../src/-private/data-view/utils/insert-range-before.js","../src/-private/data-view/utils/object-at.js","../src/-private/data-view/utils/round-to.js","../src/-private/data-view/utils/mutation-checkers.js","../src/-private/data-view/utils/scroll-handler.js","../src/-private/data-view/viewport-container.js","../src/-private/utils/element/estimate-element-height.js","../src/-private/utils/element/get-scaled-client-rect.js","../src/-private/data-view/radar/radar.js","../src/-private/data-view/skip-list.js","../src/-private/data-view/radar/dynamic-radar.js","../src/-private/data-view/radar/static-radar.js"],"sourcesContent":["import { guidFor } from '@ember/object/internals';\n\nexport default function identity(item) {\n let key;\n const type = typeof item;\n\n if (type === 'string' || type === 'number') {\n key = item;\n } else {\n key = guidFor(item);\n }\n\n return key;\n}\n","import { get } from '@ember/object';\nimport { assert } from '@ember/debug';\n\nimport identity from './identity.js';\n\nexport default function keyForItem(item, keyPath, index) {\n let key;\n\n assert(\n `keyPath must be a string, received: ${keyPath}`,\n typeof keyPath === 'string',\n );\n\n switch (keyPath) {\n case '@index':\n assert(\n `A numerical index must be supplied for keyForItem when keyPath is @index, received: ${index}`,\n typeof index === 'number',\n );\n key = index;\n break;\n case '@identity':\n key = identity(item);\n break;\n default:\n key = get(item, keyPath);\n }\n\n if (typeof key === 'number') {\n key = String(key);\n }\n\n return key;\n}\n","export default window ? window.document : undefined;\n","import { set } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\n\nimport document from '../../utils/document-shim.js';\n\nlet VC_IDENTITY = 0;\n\nexport default class VirtualComponent {\n constructor(content = null, index = null) {\n this.id = `VC-${VC_IDENTITY++}`;\n\n this.content = content;\n this.index = index;\n\n // We check to see if the document exists in Fastboot. Since RAF won't run in\n // Fastboot, we'll never have to use these text nodes for measurements, so they\n // can be empty\n this.upperBound =\n document !== undefined ? document.createTextNode('') : null;\n this.lowerBound =\n document !== undefined ? document.createTextNode('') : null;\n\n this.rendered = false;\n\n if (DEBUG) {\n Object.preventExtensions(this);\n }\n }\n\n get realUpperBound() {\n return this.upperBound;\n }\n\n get realLowerBound() {\n return this.lowerBound;\n }\n\n getBoundingClientRect() {\n let { upperBound, lowerBound } = this;\n\n let top = Infinity;\n let bottom = -Infinity;\n\n while (upperBound !== lowerBound) {\n upperBound = upperBound.nextSibling;\n\n if (upperBound instanceof Element) {\n top = Math.min(top, upperBound.getBoundingClientRect().top);\n bottom = Math.max(bottom, upperBound.getBoundingClientRect().bottom);\n }\n\n if (DEBUG) {\n if (upperBound instanceof Element) {\n continue;\n }\n\n const text = upperBound.textContent;\n\n assert(\n `All content inside of vertical-collection must be wrapped in an element. Detected a text node with content: ${text}`,\n text === '' || text.match(/^\\s+$/),\n );\n }\n }\n\n assert(\n 'Items in a vertical collection require atleast one element in them',\n top !== Infinity && bottom !== -Infinity,\n );\n\n const height = bottom - top;\n\n return { top, bottom, height };\n }\n\n recycle(newContent, newIndex) {\n assert(`You cannot set an item's content to undefined`, newContent);\n\n if (this.index !== newIndex) {\n set(this, 'index', newIndex);\n }\n\n if (this.content !== newContent) {\n set(this, 'content', newContent);\n }\n }\n\n destroy() {\n set(this, 'upperBound', null);\n set(this, 'lowerBound', null);\n set(this, 'content', null);\n set(this, 'index', null);\n }\n}\n","import { set } from '@ember/object';\nimport { DEBUG } from '@glimmer/env';\n\nimport document from '../../utils/document-shim.js';\n\nlet OC_IDENTITY = 0;\n\nexport default class OccludedContent {\n constructor(tagName) {\n this.id = `OC-${OC_IDENTITY++}`;\n this.isOccludedContent = true;\n\n // We check to see if the document exists in Fastboot. Since RAF won't run in\n // Fastboot, we'll never have to use these text nodes for measurements, so they\n // can be empty\n if (document !== undefined) {\n this.element = document.createElement(tagName);\n this.element.className += 'occluded-content';\n\n this.upperBound = document.createTextNode('');\n this.lowerBound = document.createTextNode('');\n } else {\n this.element = null;\n }\n\n this.isOccludedContent = true;\n this.rendered = false;\n\n if (DEBUG) {\n Object.preventExtensions(this);\n }\n }\n\n getBoundingClientRect() {\n if (this.element !== null) {\n return this.element.getBoundingClientRect();\n }\n }\n\n addEventListener(event, listener) {\n if (this.element !== null) {\n this.element.addEventListener(event, listener);\n }\n }\n\n removeEventListener(event, listener) {\n if (this.element !== null) {\n this.element.removeEventListener(event, listener);\n }\n }\n\n get realUpperBound() {\n return this.upperBound;\n }\n\n get realLowerBound() {\n return this.lowerBound;\n }\n\n get parentNode() {\n return this.element !== null ? this.element.parentNode : null;\n }\n\n get style() {\n return this.element !== null ? this.element.style : {};\n }\n\n set innerHTML(value) {\n if (this.element !== null) {\n this.element.innerHTML = value;\n }\n }\n\n destroy() {\n set(this, 'element', null);\n }\n}\n","export default function insertRangeBefore(\n parent,\n element,\n firstNode,\n lastNode,\n) {\n let nextNode;\n\n while (firstNode) {\n nextNode = firstNode.nextSibling;\n parent.insertBefore(firstNode, element);\n\n if (firstNode === lastNode) {\n break;\n }\n\n firstNode = nextNode;\n }\n}\n","import { assert } from '@ember/debug';\n\nexport default function objectAt(arr, index) {\n assert(\n 'arr must be an instance of a Javascript Array or implement `objectAt`',\n Array.isArray(arr) || typeof arr.objectAt === 'function',\n );\n\n return arr.objectAt ? arr.objectAt(index) : arr[index];\n}\n","export default function roundTo(number, decimal = 2) {\n const exp = Math.pow(10, decimal);\n return Math.round(number * exp) / exp;\n}\n","import { get } from '@ember/object';\nimport objectAt from './object-at.js';\nimport keyForItem from '../../ember-internals/key-for-item.js';\n\nexport function isPrepend(lenDiff, newItems, key, oldFirstKey, oldLastKey) {\n const newItemsLength = get(newItems, 'length');\n\n if (lenDiff <= 0 || lenDiff >= newItemsLength || newItemsLength === 0) {\n return false;\n }\n\n const newFirstKey = keyForItem(objectAt(newItems, lenDiff), key, lenDiff);\n const newLastKey = keyForItem(\n objectAt(newItems, newItemsLength - 1),\n key,\n newItemsLength - 1,\n );\n\n return oldFirstKey === newFirstKey && oldLastKey === newLastKey;\n}\n\nexport function isAppend(lenDiff, newItems, key, oldFirstKey, oldLastKey) {\n const newItemsLength = get(newItems, 'length');\n\n if (lenDiff <= 0 || lenDiff >= newItemsLength || newItemsLength === 0) {\n return false;\n }\n\n const newFirstKey = keyForItem(objectAt(newItems, 0), key, 0);\n const newLastKey = keyForItem(\n objectAt(newItems, newItemsLength - lenDiff - 1),\n key,\n newItemsLength - lenDiff - 1,\n );\n\n return oldFirstKey === newFirstKey && oldLastKey === newLastKey;\n}\n","import { begin, end } from '@ember/runloop';\nconst DEFAULT_ARRAY_SIZE = 10;\n\nexport class ScrollHandler {\n constructor() {\n this.elements = new Array(DEFAULT_ARRAY_SIZE);\n this.maxLength = DEFAULT_ARRAY_SIZE;\n this.length = 0;\n this.handlers = new Array(DEFAULT_ARRAY_SIZE);\n }\n\n addScrollHandler(element, handler) {\n let index = this.elements.indexOf(element);\n let handlers, cache;\n\n if (index === -1) {\n index = this.length++;\n\n if (index === this.maxLength) {\n this.maxLength *= 2;\n this.elements.length = this.maxLength;\n this.handlers.length = this.maxLength;\n }\n\n handlers = [handler];\n\n this.elements[index] = element;\n cache = this.handlers[index] = {\n top: element.scrollTop,\n left: element.scrollLeft,\n handlers,\n passiveHandler() {\n ScrollHandler.triggerElementHandlers(element, cache);\n },\n };\n } else {\n cache = this.handlers[index];\n handlers = cache.handlers;\n handlers.push(handler);\n }\n\n if (handlers.length === 1) {\n element.addEventListener('scroll', cache.passiveHandler, {\n capture: true,\n passive: true,\n });\n }\n }\n\n removeScrollHandler(element, handler) {\n let index = this.elements.indexOf(element);\n let elementCache = this.handlers[index];\n\n if (elementCache && elementCache.handlers) {\n let index = elementCache.handlers.indexOf(handler);\n\n if (index === -1) {\n throw new Error('Attempted to remove an unknown handler');\n }\n\n elementCache.handlers.splice(index, 1);\n\n if (!elementCache.handlers.length) {\n index = this.elements.indexOf(element);\n this.handlers.splice(index, 1);\n this.elements.splice(index, 1);\n\n this.length--;\n this.maxLength--;\n\n element.removeEventListener('scroll', elementCache.passiveHandler, {\n capture: true,\n passive: true,\n });\n }\n } else {\n throw new Error(\n 'Attempted to remove a handler from an unknown element or an element with no handlers',\n );\n }\n }\n\n static triggerElementHandlers(element, meta) {\n let cachedTop = element.scrollTop;\n let cachedLeft = element.scrollLeft;\n let topChanged = cachedTop !== meta.top;\n let leftChanged = cachedLeft !== meta.left;\n\n meta.top = cachedTop;\n meta.left = cachedLeft;\n\n let event = { top: cachedTop, left: cachedLeft };\n\n if (topChanged || leftChanged) {\n begin();\n for (let j = 0; j < meta.handlers.length; j++) {\n meta.handlers[j](event);\n }\n end();\n }\n }\n}\n\nconst instance = new ScrollHandler();\n\nexport function addScrollHandler(element, handler) {\n instance.addScrollHandler(element, handler);\n}\n\nexport function removeScrollHandler(element, handler) {\n instance.removeScrollHandler(element, handler);\n}\n\nexport default instance;\n","/*\n * This singleton class provides a way to treat the document viewport\n * like a scrollable element, proxying scroll position access and\n * event listeners to the appropriate browser APIs.\n */\nexport function ViewportContainer() {\n Object.defineProperty(this, 'scrollTop', {\n get() {\n return window.scrollY;\n },\n set(v) {\n window.scrollTo(window.scrollX, v);\n },\n });\n\n Object.defineProperty(this, 'scrollLeft', {\n get() {\n return window.scrollX;\n },\n set(v) {\n window.scrollTo(v, window.scrollY);\n },\n });\n\n Object.defineProperty(this, 'offsetHeight', {\n get() {\n return window.innerHeight;\n },\n });\n}\n\nViewportContainer.prototype.addEventListener = function addEventListener(\n event,\n handler,\n options,\n) {\n return window.addEventListener(event, handler, options);\n};\n\nViewportContainer.prototype.removeEventListener = function removeEventListener(\n event,\n handler,\n options,\n) {\n return window.removeEventListener(event, handler, options);\n};\n\nViewportContainer.prototype.getBoundingClientRect =\n function getBoundingClientRect() {\n return {\n height: window.innerHeight,\n width: window.innerWidth,\n top: 0,\n left: 0,\n right: window.innerWidth,\n bottom: window.innerHeight,\n };\n };\n\nexport default new ViewportContainer();\n","import { assert } from '@ember/debug';\n\nexport default function estimateElementHeight(element, fallbackHeight) {\n assert(\n `You called estimateElement height without a fallbackHeight`,\n fallbackHeight,\n );\n assert(`You called estimateElementHeight without an element`, element);\n\n if (fallbackHeight.includes('%')) {\n return getPercentageHeight(element, fallbackHeight);\n }\n\n if (fallbackHeight.includes('em')) {\n return getEmHeight(element, fallbackHeight);\n }\n\n return parseInt(fallbackHeight, 10);\n}\n\nfunction getPercentageHeight(element, fallbackHeight) {\n // We use offsetHeight here to get the element's true height, rather than the\n // bounding rect which may be scaled with transforms\n let parentHeight = element.offsetHeight;\n let percent = parseFloat(fallbackHeight);\n\n return (percent * parentHeight) / 100.0;\n}\n\nfunction getEmHeight(element, fallbackHeight) {\n const fontSizeElement = fallbackHeight.includes('rem')\n ? document.documentElement\n : element;\n const fontSize = window\n .getComputedStyle(fontSizeElement)\n .getPropertyValue('font-size');\n\n return parseFloat(fallbackHeight) * parseFloat(fontSize);\n}\n","export default function getScaledClientRect(element, scale) {\n const rect = element.getBoundingClientRect();\n\n if (scale === 1) {\n return rect;\n }\n\n const scaled = {};\n\n for (let key in rect) {\n scaled[key] = rect[key] * scale;\n }\n\n return scaled;\n}\n","import { A } from '@ember/array';\nimport { set, get } from '@ember/object';\nimport { assert } from '@ember/debug';\nimport { run } from '@ember/runloop';\nimport { DEBUG } from '@glimmer/env';\n\nimport { Token, scheduler } from 'ember-raf-scheduler';\n\nimport VirtualComponent from '../elements/virtual-component.js';\nimport OccludedContent from '../elements/occluded-content.js';\nimport insertRangeBefore from '../utils/insert-range-before.js';\nimport objectAt from '../utils/object-at.js';\nimport roundTo from '../utils/round-to.js';\nimport { isPrepend, isAppend } from '../utils/mutation-checkers.js';\n\nimport {\n addScrollHandler,\n removeScrollHandler,\n} from '../utils/scroll-handler.js';\n\nimport ViewportContainer from '../viewport-container.js';\n\nimport estimateElementHeight from '../../utils/element/estimate-element-height.js';\nimport getScaledClientRect from '../../utils/element/get-scaled-client-rect.js';\nimport keyForItem from '../../ember-internals/key-for-item.js';\n\nimport document from '../../utils/document-shim.js';\n\nexport default class Radar {\n constructor(\n parentToken,\n {\n bufferSize,\n containerSelector,\n estimateHeight,\n initialRenderCount,\n items,\n key,\n renderAll,\n renderFromLast,\n shouldRecycle,\n startingIndex,\n occlusionTagName,\n },\n ) {\n this.token = new Token(parentToken);\n\n // Public API\n this.bufferSize = bufferSize;\n this.containerSelector = containerSelector;\n this.estimateHeight = estimateHeight;\n this.initialRenderCount = initialRenderCount;\n this.items = items;\n this.key = key;\n this.renderAll = renderAll;\n this.renderFromLast = renderFromLast;\n this.shouldRecycle = shouldRecycle;\n this.startingIndex = startingIndex;\n\n // defaults to a no-op intentionally, actions will only be sent if they\n // are passed into the component\n this.sendAction = () => {};\n\n // Calculated constants\n this._itemContainer = null;\n this._scrollContainer = null;\n this._prependOffset = 0;\n this._calculatedEstimateHeight = 0;\n this._collectionOffset = 0;\n this._calculatedScrollContainerHeight = 0;\n this._transformScale = 1;\n\n // Event handler\n this._scrollHandler = ({ top }) => {\n // debounce scheduling updates by checking to make sure we've moved a minimum amount\n if (this._didEarthquake(Math.abs(this._scrollTop - top))) {\n this.scheduleUpdate();\n }\n };\n\n this._resizeHandler = this.scheduleUpdate.bind(this);\n\n // Run state\n this._nextUpdate = null;\n this._nextLayout = null;\n this._started = false;\n this._didReset = true;\n this._didUpdateItems = false;\n\n // Cache state\n this._scrollTop = 0;\n\n // Setting these values to infinity starts us in a guaranteed good state for the radar,\n // so it knows that it needs to run certain measurements, etc.\n this._prevFirstItemIndex = Infinity;\n this._prevLastItemIndex = -Infinity;\n this._prevFirstVisibleIndex = 0;\n this._prevLastVisibleIndex = 0;\n\n this._firstReached = false;\n this._lastReached = false;\n this._prevTotalItems = 0;\n this._prevFirstKey = 0;\n this._prevLastKey = 0;\n\n this._componentPool = [];\n this._prependComponentPool = [];\n this._appendComponentPool = []; // https://github.com/html-next/vertical-collection/issues/296\n\n // Boundaries\n this._occludedContentBefore = new OccludedContent(occlusionTagName);\n this._occludedContentAfter = new OccludedContent(occlusionTagName);\n\n this._pageUpHandler = this.pageUp.bind(this);\n this._occludedContentBefore.addEventListener('click', this._pageUpHandler);\n this._pageDownHandler = this.pageDown.bind(this);\n this._occludedContentAfter.addEventListener('click', this._pageDownHandler);\n\n // Element to hold pooled component DOM when not in use\n if (document) {\n this._domPool = document.createDocumentFragment();\n }\n\n // Initialize virtual components\n this.virtualComponents = A([\n this._occludedContentBefore,\n this._occludedContentAfter,\n ]);\n this.orderedComponents = [];\n\n this._updateVirtualComponents();\n\n if (DEBUG) {\n this._debugDidUpdate = null;\n }\n }\n\n destroy() {\n this.token.cancel();\n\n for (let i = 0; i < this.orderedComponents.length; i++) {\n this.orderedComponents[i].destroy();\n }\n\n // Boundaries\n this._occludedContentBefore.removeEventListener(\n 'click',\n this._pageUpHandler,\n );\n this._occludedContentAfter.removeEventListener(\n 'click',\n this._pageDownHandler,\n );\n this._occludedContentBefore.destroy();\n this._occludedContentAfter.destroy();\n\n this.orderedComponents = null;\n set(this, 'virtualComponents', null);\n\n if (this._started) {\n removeScrollHandler(this._scrollContainer, this._scrollHandler);\n ViewportContainer.removeEventListener('resize', this._resizeHandler);\n }\n }\n\n schedule(queueName, job) {\n return scheduler.schedule(queueName, job, this.token);\n }\n\n /**\n * Start the Radar. Does initial measurements, adds event handlers,\n * sets up initial scroll state, and\n */\n start() {\n const { startingIndex, containerSelector, _occludedContentBefore } = this;\n\n // Use the occluded content element, which has been inserted into the DOM,\n // to find the item container and the scroll container\n this._itemContainer = _occludedContentBefore.element.parentNode;\n this._scrollContainer =\n containerSelector === 'body'\n ? ViewportContainer\n : this._itemContainer.closest(containerSelector);\n\n this._updateConstants();\n\n // Setup initial scroll state\n if (startingIndex !== 0) {\n const {\n renderFromLast,\n _calculatedEstimateHeight,\n _collectionOffset,\n _calculatedScrollContainerHeight,\n } = this;\n\n let startingScrollTop = startingIndex * _calculatedEstimateHeight;\n\n if (renderFromLast) {\n startingScrollTop -=\n _calculatedScrollContainerHeight - _calculatedEstimateHeight;\n }\n\n // initialize the scrollTop value, which will be applied to the\n // scrollContainer after the collection has been initialized\n this._scrollTop = startingScrollTop + _collectionOffset;\n\n this._prevFirstVisibleIndex = startingIndex;\n } else {\n this._scrollTop = this._scrollContainer.scrollTop;\n }\n\n this._started = true;\n this.update();\n\n // Setup event handlers\n addScrollHandler(this._scrollContainer, this._scrollHandler);\n ViewportContainer.addEventListener('resize', this._resizeHandler);\n }\n\n /*\n * Schedules an update for the next RAF\n *\n * This will first run _updateVirtualComponents in the sync phase, which figures out what\n * components need to be rerendered and updates the appropriate VCs and moves their associated\n * DOM. At the end of the `sync` phase the runloop is flushed and Glimmer renders the changes.\n *\n * By the `affect` phase the Radar should have had time to measure, meaning it has all of the\n * current info and we can send actions for any changes.\n *\n * @private\n */\n scheduleUpdate(didUpdateItems, promiseResolve) {\n if (didUpdateItems === true) {\n // Set the update items flag first, in case scheduleUpdate has already been called\n // but the RAF hasn't yet run\n this._didUpdateItems = true;\n }\n\n if (this._nextUpdate !== null || this._started === false) {\n return;\n }\n\n this._nextUpdate = this.schedule('sync', () => {\n this._nextUpdate = null;\n this._scrollTop = this._scrollContainer.scrollTop;\n\n this.update(promiseResolve);\n });\n }\n\n update(promiseResolve) {\n if (this._didUpdateItems === true) {\n this._determineUpdateType();\n this._didUpdateItems = false;\n }\n\n this._updateConstants();\n this._updateIndexes();\n this._updateVirtualComponents();\n\n this.schedule('measure', () => {\n if (promiseResolve) {\n promiseResolve();\n }\n this.afterUpdate();\n });\n }\n\n afterUpdate() {\n const { _prevTotalItems: totalItems } = this;\n\n const scrollDiff = this._calculateScrollDiff();\n\n if (scrollDiff !== 0) {\n this._scrollContainer.scrollTop += scrollDiff;\n }\n\n // Re-sync scrollTop, since Chrome may have intervened\n this._scrollTop = this._scrollContainer.scrollTop;\n\n // Unset prepend offset, we're done with any prepend changes at this point\n this._prependOffset = 0;\n\n if (totalItems !== 0) {\n this._sendActions();\n }\n\n // Cache previous values\n this._prevFirstItemIndex = this.firstItemIndex;\n this._prevLastItemIndex = this.lastItemIndex;\n this._prevFirstVisibleIndex = this.firstVisibleIndex;\n this._prevLastVisibleIndex = this.lastVisibleIndex;\n\n // Clear the reset flag\n this._didReset = false;\n\n if (DEBUG && this._debugDidUpdate !== null) {\n // Hook to update the visual debugger\n this._debugDidUpdate(this);\n }\n }\n\n /*\n * The scroll diff is the difference between where we want the container's scrollTop to be,\n * and where it actually is right now. By default it accounts for the `_prependOffset`, which\n * is set when items are added to the front of the collection, as well as any discrepancies\n * that may have arisen between the cached `_scrollTop` value and the actually container's\n * scrollTop. The container's scrollTop may be modified by the browser when we manipulate DOM\n * (Chrome specifically does this a lot), so `_scrollTop` should be considered the canonical\n * scroll top.\n *\n * Subclasses should override this method to provide any difference between expected item size\n * pre-render and actual item size post-render.\n */\n _calculateScrollDiff() {\n return (\n this._prependOffset + this._scrollTop - this._scrollContainer.scrollTop\n );\n }\n\n _determineUpdateType() {\n const {\n items,\n key,\n totalItems,\n\n _prevTotalItems,\n _prevFirstKey,\n _prevLastKey,\n } = this;\n\n const lenDiff = totalItems - _prevTotalItems;\n\n if (isPrepend(lenDiff, items, key, _prevFirstKey, _prevLastKey) === true) {\n this.prepend(lenDiff);\n } else if (\n isAppend(lenDiff, items, key, _prevFirstKey, _prevLastKey) === true\n ) {\n this.append(lenDiff);\n } else {\n this.reset();\n }\n\n const firstItem = objectAt(this.items, 0);\n const lastItem = objectAt(this.items, this.totalItems - 1);\n\n this._prevTotalItems = totalItems;\n this._prevFirstKey = totalItems > 0 ? keyForItem(firstItem, key, 0) : 0;\n this._prevLastKey =\n totalItems > 0 ? keyForItem(lastItem, key, totalItems - 1) : 0;\n }\n\n _updateConstants() {\n const {\n estimateHeight,\n _occludedContentBefore,\n _itemContainer,\n _scrollContainer,\n } = this;\n\n assert(\n 'Must provide a `estimateHeight` value to vertical-collection',\n estimateHeight !== null,\n );\n assert(\n 'itemContainer must be set on Radar before scheduling an update',\n _itemContainer !== null,\n );\n assert(\n 'scrollContainer must be set on Radar before scheduling an update',\n _scrollContainer !== null,\n );\n\n // The scroll container's offsetHeight will reflect the actual height of the element, while\n // it's measured height via bounding client rect will reflect the height with any transformations\n // applied. We use this to find out the scale of the items so we can store measurements at the\n // correct heights.\n const scrollContainerOffsetHeight = _scrollContainer.offsetHeight;\n const { height: scrollContainerRenderedHeight } =\n _scrollContainer.getBoundingClientRect();\n\n let transformScale;\n\n // transformScale represents the opposite of the scale, if any, applied to the collection. Check for equality\n // to guard against floating point errors, and check to make sure we're not dividing by zero (default to scale 1 if so)\n if (\n scrollContainerOffsetHeight === scrollContainerRenderedHeight ||\n scrollContainerRenderedHeight === 0\n ) {\n transformScale = 1;\n } else {\n transformScale =\n scrollContainerOffsetHeight / scrollContainerRenderedHeight;\n }\n\n const { top: scrollContentTop } = getScaledClientRect(\n _occludedContentBefore,\n transformScale,\n );\n const { top: scrollContainerTop } = getScaledClientRect(\n _scrollContainer,\n transformScale,\n );\n\n let scrollContainerMaxHeight = 0;\n\n if (_scrollContainer instanceof Element) {\n const maxHeightStyle =\n window.getComputedStyle(_scrollContainer).maxHeight;\n\n if (maxHeightStyle && maxHeightStyle !== 'none') {\n scrollContainerMaxHeight = estimateElementHeight(\n _scrollContainer.parentElement,\n maxHeightStyle,\n );\n }\n }\n\n const calculatedEstimateHeight =\n typeof estimateHeight === 'string' && estimateHeight\n ? estimateElementHeight(_itemContainer, estimateHeight)\n : estimateHeight;\n\n assert(\n `calculatedEstimateHeight must be greater than 0, instead was \"${calculatedEstimateHeight}\" based on estimateHeight: ${estimateHeight}`,\n calculatedEstimateHeight > 0,\n );\n\n this._transformScale = transformScale;\n this._calculatedEstimateHeight = calculatedEstimateHeight;\n this._calculatedScrollContainerHeight = roundTo(\n Math.max(scrollContainerOffsetHeight, scrollContainerMaxHeight),\n );\n\n // The offset between the top of the collection and the top of the scroll container. Determined by finding\n // the distance from the collection is from the top of the scroll container's content (scrollTop + actual position)\n // and subtracting the scroll containers actual top.\n this._collectionOffset = roundTo(\n _scrollContainer.scrollTop + scrollContentTop - scrollContainerTop,\n );\n }\n\n /*\n * Updates virtualComponents, which is meant to be a static pool of components that we render to.\n * In order to decrease the time spent rendering and diffing, we pull the {{each}} out of the DOM\n * and only replace the content of _virtualComponents which are removed/added.\n *\n * For instance, if we start with the following and scroll down, items 2 and 3 do not need to be\n * rerendered, only item 1 needs to be removed and only item 4 needs to be added. So we replace\n * item 1 with item 4, and then manually move the DOM:\n *\n * 1 4 2\n * 2 -> replace 1 with 4 -> 2 -> manually move DOM -> 3\n * 3 3 4\n *\n * However, _virtualComponents is still out of order. Rather than keep track of the state of\n * things in _virtualComponents, we track the visually ordered components in the\n * _orderedComponents array. This is possible because all of our operations are relatively simple,\n * popping some number of components off one end and pushing them onto the other.\n *\n * @private\n */\n _updateVirtualComponents() {\n const {\n items,\n orderedComponents,\n virtualComponents,\n _componentPool,\n\n shouldRecycle,\n renderAll,\n _started,\n _didReset,\n\n _occludedContentBefore,\n _occludedContentAfter,\n totalItems,\n } = this;\n\n let renderedFirstItemIndex,\n renderedLastItemIndex,\n renderedTotalBefore,\n renderedTotalAfter;\n\n if (renderAll === true) {\n // All items should be rendered, set indexes based on total item count\n renderedFirstItemIndex = 0;\n renderedLastItemIndex = totalItems - 1;\n renderedTotalBefore = 0;\n renderedTotalAfter = 0;\n } else if (_started === false) {\n // The Radar hasn't been started yet, render the initialRenderCount if it exists\n renderedFirstItemIndex = this.startingIndex;\n renderedLastItemIndex = this.startingIndex + this.initialRenderCount - 1;\n renderedTotalBefore = 0;\n renderedTotalAfter = 0;\n } else {\n renderedFirstItemIndex = this.firstItemIndex;\n renderedLastItemIndex = this.lastItemIndex;\n renderedTotalBefore = this.totalBefore;\n renderedTotalAfter = this.totalAfter;\n }\n\n // If there are less items available than rendered, we drop the last rendered item index\n renderedLastItemIndex = Math.min(renderedLastItemIndex, totalItems - 1);\n\n // Add components to be recycled to the pool\n while (\n orderedComponents.length > 0 &&\n orderedComponents[0].index < renderedFirstItemIndex\n ) {\n _componentPool.push(orderedComponents.shift());\n }\n\n while (\n orderedComponents.length > 0 &&\n orderedComponents[orderedComponents.length - 1].index >\n renderedLastItemIndex\n ) {\n _componentPool.unshift(orderedComponents.pop());\n }\n\n if (_didReset) {\n if (shouldRecycle === true) {\n for (let i = 0; i < orderedComponents.length; i++) {\n // If the underlying array has changed, the indexes could be the same but\n // the content may have changed, so recycle the remaining components\n const component = orderedComponents[i];\n component.recycle(objectAt(items, component.index), component.index);\n }\n } else {\n while (orderedComponents.length > 0) {\n // If recycling is disabled we need to delete all components and clear the array\n _componentPool.push(orderedComponents.shift());\n }\n }\n }\n\n let firstIndexInList =\n orderedComponents.length > 0\n ? orderedComponents[0].index\n : renderedFirstItemIndex;\n let lastIndexInList =\n orderedComponents.length > 0\n ? orderedComponents[orderedComponents.length - 1].index\n : renderedFirstItemIndex - 1;\n\n // Append as many items as needed to the rendered components\n while (lastIndexInList < renderedLastItemIndex) {\n let component;\n\n if (shouldRecycle === true) {\n component = _componentPool.pop() || new VirtualComponent();\n } else {\n component = new VirtualComponent();\n }\n\n const itemIndex = ++lastIndexInList;\n\n component.recycle(objectAt(items, itemIndex), itemIndex);\n this._appendComponent(component);\n\n orderedComponents.push(component);\n }\n\n // Prepend as many items as needed to the rendered components\n while (firstIndexInList > renderedFirstItemIndex) {\n let component;\n\n if (shouldRecycle === true) {\n component = _componentPool.pop() || new VirtualComponent();\n } else {\n component = new VirtualComponent();\n }\n\n const itemIndex = --firstIndexInList;\n\n component.recycle(objectAt(items, itemIndex), itemIndex);\n this._prependComponent(component);\n\n orderedComponents.unshift(component);\n }\n\n // If there are any items remaining in the pool, remove them\n if (_componentPool.length > 0) {\n // Grab the DOM of the remaining components and move it to temporary node disconnected from\n // the body if the item can be reused later otherwise delete the component to avoid virtual re-rendering of the\n // deleted item. If we end up using these components again, we'll grab their DOM and put it back\n for (let i = _componentPool.length - 1; i >= 0; i--) {\n const component = _componentPool[i];\n const item = objectAt(items, component.index);\n if (shouldRecycle === true && item) {\n insertRangeBefore(\n this._domPool,\n null,\n component.realUpperBound,\n component.realLowerBound,\n );\n } else {\n // Insert the virtual component bound back to make sure Glimmer is\n // not confused about the state of the DOM.\n insertRangeBefore(\n this._itemContainer,\n null,\n component.realUpperBound,\n component.realLowerBound,\n );\n run(() => {\n virtualComponents.removeObject(component);\n });\n _componentPool.splice(i, 1);\n }\n }\n }\n\n const totalItemsBefore = renderedFirstItemIndex;\n const totalItemsAfter = totalItems - renderedLastItemIndex - 1;\n\n const beforeItemsText = totalItemsBefore === 1 ? 'item' : 'items';\n const afterItemsText = totalItemsAfter === 1 ? 'item' : 'items';\n\n // Set padding element heights.\n _occludedContentBefore.style.height = `${Math.max(renderedTotalBefore, 0)}px`;\n _occludedContentBefore.innerHTML =\n totalItemsBefore > 0\n ? `And ${totalItemsBefore} ${beforeItemsText} before`\n : '';\n\n _occludedContentAfter.style.height = `${Math.max(renderedTotalAfter, 0)}px`;\n _occludedContentAfter.innerHTML =\n totalItemsAfter > 0\n ? `And ${totalItemsAfter} ${afterItemsText} after`\n : '';\n }\n\n _appendComponent(component) {\n const {\n virtualComponents,\n _occludedContentAfter,\n _appendComponentPool,\n shouldRecycle,\n _itemContainer,\n } = this;\n\n const relativeNode = _occludedContentAfter.realUpperBound;\n\n if (component.rendered === true) {\n insertRangeBefore(\n _itemContainer,\n relativeNode,\n component.realUpperBound,\n component.realLowerBound,\n );\n } else {\n virtualComponents.insertAt(virtualComponents.length - 1, component);\n component.rendered = true;\n\n // shouldRecycle=false breaks UI when scrolling the elements fast.\n // Reference https://github.com/html-next/vertical-collection/issues/296\n // Components that are both new and appended still need to be rendered at the end because Glimmer.\n // We have to move them _after_ they render, so we schedule that if they exist\n if (!shouldRecycle) {\n _appendComponentPool.unshift(component);\n\n if (this._nextLayout === null) {\n this._nextLayout = this.schedule('layout', () => {\n this._nextLayout = null;\n\n while (_appendComponentPool.length > 0) {\n const component = _appendComponentPool.pop();\n\n // Changes with each inserted component\n const relativeNode = _occludedContentAfter.realUpperBound;\n\n insertRangeBefore(\n this._itemContainer,\n relativeNode,\n component.realUpperBound,\n component.realLowerBound,\n );\n }\n });\n }\n }\n }\n }\n\n _prependComponent(component) {\n const {\n virtualComponents,\n _occludedContentBefore,\n _prependComponentPool,\n _itemContainer,\n } = this;\n\n const relativeNode = _occludedContentBefore.realLowerBound.nextSibling;\n\n if (component.rendered === true) {\n insertRangeBefore(\n _itemContainer,\n relativeNode,\n component.realUpperBound,\n component.realLowerBound,\n );\n } else {\n virtualComponents.insertAt(virtualComponents.length - 1, component);\n component.rendered = true;\n\n // Components that are both new and prepended still need to be rendered at the end because Glimmer.\n // We have to move them _after_ they render, so we schedule that if they exist\n _prependComponentPool.unshift(component);\n\n if (this._nextLayout === null) {\n this._nextLayout = this.schedule('layout', () => {\n this._nextLayout = null;\n\n while (_prependComponentPool.length > 0) {\n const component = _prependComponentPool.pop();\n\n // Changes with each inserted component\n const relativeNode =\n _occludedContentBefore.realLowerBound.nextSibling;\n\n insertRangeBefore(\n _itemContainer,\n relativeNode,\n component.realUpperBound,\n component.realLowerBound,\n );\n }\n });\n }\n }\n }\n\n _sendActions() {\n const {\n firstItemIndex,\n lastItemIndex,\n firstVisibleIndex,\n lastVisibleIndex,\n\n _prevFirstVisibleIndex,\n _prevLastVisibleIndex,\n\n totalItems,\n\n _firstReached,\n _lastReached,\n _didReset,\n } = this;\n\n if (_didReset || firstVisibleIndex !== _prevFirstVisibleIndex) {\n this.sendAction('firstVisibleChanged', firstVisibleIndex);\n }\n\n if (_didReset || lastVisibleIndex !== _prevLastVisibleIndex) {\n this.sendAction('lastVisibleChanged', lastVisibleIndex);\n }\n\n if (_firstReached === false && firstItemIndex === 0) {\n this.sendAction('firstReached', firstItemIndex);\n this._firstReached = true;\n }\n\n if (_lastReached === false && lastItemIndex === totalItems - 1) {\n this.sendAction('lastReached', lastItemIndex);\n this._lastReached = true;\n }\n }\n\n prepend(numPrepended) {\n this._prevFirstItemIndex += numPrepended;\n this._prevLastItemIndex += numPrepended;\n\n this.orderedComponents.forEach((c) =>\n set(c, 'index', get(c, 'index') + numPrepended),\n );\n\n this._firstReached = false;\n\n this._prependOffset = numPrepended * this._calculatedEstimateHeight;\n }\n\n append() {\n this._lastReached = false;\n }\n\n reset() {\n this._firstReached = false;\n this._lastReached = false;\n this._didReset = true;\n }\n\n pageUp() {\n if (this.renderAll) {\n return; // All items rendered, no need to page up\n }\n\n const { bufferSize, firstItemIndex, totalComponents } = this;\n\n if (firstItemIndex !== 0) {\n const newFirstItemIndex = Math.max(\n firstItemIndex - totalComponents + bufferSize,\n 0,\n );\n const offset = this.getOffsetForIndex(newFirstItemIndex);\n\n this._scrollContainer.scrollTop = offset + this._collectionOffset;\n this.scheduleUpdate();\n }\n }\n\n pageDown() {\n if (this.renderAll) {\n return; // All items rendered, no need to page down\n }\n\n const { bufferSize, lastItemIndex, totalComponents, totalItems } = this;\n\n if (lastItemIndex !== totalItems - 1) {\n const newFirstItemIndex = Math.min(\n lastItemIndex + bufferSize + 1,\n totalItems - totalComponents,\n );\n const offset = this.getOffsetForIndex(newFirstItemIndex);\n\n this._scrollContainer.scrollTop = offset + this._collectionOffset;\n this.scheduleUpdate();\n }\n }\n\n get totalComponents() {\n return Math.min(\n this.totalItems,\n this.lastItemIndex - this.firstItemIndex + 1,\n );\n }\n\n /*\n * `prependOffset` exists because there are times when we need to do the following in this exact\n * order:\n *\n * 1. Prepend, which means we need to adjust the scroll position by `estimateHeight * numPrepended`\n * 2. Calculate the items that will be displayed after the prepend, and move VCs around as\n * necessary (`scheduleUpdate`).\n * 3. Actually add the amount prepended to `scrollContainer.scrollTop`\n *\n * This is due to some strange behavior in Chrome where it will modify `scrollTop` on it's own\n * when prepending item elements. We seem to avoid this behavior by doing these things in a RAF\n * in this exact order.\n */\n get visibleTop() {\n return Math.max(\n this._scrollTop - this._collectionOffset + this._prependOffset,\n 0,\n );\n }\n\n get visibleMiddle() {\n return this.visibleTop + this._calculatedScrollContainerHeight / 2;\n }\n\n get visibleBottom() {\n // There is a case where the container of this vertical collection could have height 0 at\n // initial render step but will be updated later. We want to return visibleBottom to be 0 rather\n // than -1.\n return Math.max(\n this.visibleTop + this._calculatedScrollContainerHeight - 1,\n 0,\n );\n }\n\n get totalItems() {\n return this.items ? get(this.items, 'length') : 0;\n }\n}\n","import { assert } from '@ember/debug';\nimport { DEBUG } from '@glimmer/env';\n\nimport roundTo from './utils/round-to.js';\n\n/*\n * `SkipList` is a data structure designed with two main uses in mind:\n *\n * - Given a target value, find the index i in the list such that\n * `sum(list[0]..list[i]) <= value < sum(list[0]..list[i + 1])`\n *\n * - Given the index i (the fulcrum point) from above, get `sum(list[0]..list[i])`\n * and `sum(list[i + 1]..list[-1])`\n *\n * The idea is that given a list of arbitrary heights or widths in pixels, we want to find\n * the index of the item such that when all of the items before it are added together, it will\n * be as close to the target (scrollTop of our container) as possible.\n *\n * This data structure acts somewhat like a Binary Search Tree. Given a list of size n, the\n * retreival time for the index is O(log n) and the update time should any values change is\n * O(log n). The space complexity is O(n log n) in bytes (using Float32Arrays helps a lot\n * here), and the initialization time is O(n log n).\n *\n * It works by constructing layer arrays, each of which is setup such that\n * `layer[i] = prevLayer[i * 2] + prevLayer[(i * 2) + 1]`. This allows us to traverse the layers\n * downward using a binary search to arrive at the index we want. We also add the values up as we\n * traverse to get the total value before and after the final index.\n */\n\nexport default class SkipList {\n constructor(length, defaultValue) {\n const values = new Float32Array(new ArrayBuffer(length * 4));\n values.fill(defaultValue);\n\n this.length = length;\n this.defaultValue = defaultValue;\n\n this._initializeLayers(values, defaultValue);\n\n if (DEBUG) {\n Object.preventExtensions(this);\n }\n }\n\n _initializeLayers(values, defaultValue) {\n const layers = [values];\n let i, length, layer, prevLayer, left, right;\n\n prevLayer = layer = values;\n length = values.length;\n\n while (length > 2) {\n length = Math.ceil(length / 2);\n\n layer = new Float32Array(new ArrayBuffer(length * 4));\n\n if (defaultValue !== undefined) {\n // If given a default value we assume that we can fill each\n // layer of the skip list with the previous layer's value * 2.\n // This allows us to use the `fill` method on Typed arrays, which\n // an order of magnitude faster than manually calculating each value.\n defaultValue = defaultValue * 2;\n layer.fill(defaultValue);\n\n left = prevLayer[(length - 1) * 2] || 0;\n right = prevLayer[(length - 1) * 2 + 1] || 0;\n\n // Layers are not powers of 2, and sometimes they may by odd sizes.\n // Only the last value of a layer will be different, so we calculate\n // its value manually.\n layer[length - 1] = left + right;\n } else {\n for (i = 0; i < length; i++) {\n left = prevLayer[i * 2];\n right = prevLayer[i * 2 + 1];\n layer[i] = right ? left + right : left;\n }\n }\n\n layers.unshift(layer);\n prevLayer = layer;\n }\n\n this.total =\n layer.length > 0\n ? layer.length > 1\n ? layer[0] + layer[1]\n : layer[0]\n : 0;\n\n assert('total must be a number', typeof this.total === 'number');\n\n this.layers = layers;\n this.values = values;\n }\n\n find(targetValue) {\n const { layers, total, length, values } = this;\n const numLayers = layers.length;\n\n if (length === 0) {\n return { index: 0, totalBefore: 0, totalAfter: 0 };\n }\n\n let i, layer, left, leftIndex, rightIndex;\n let index = 0;\n let totalBefore = 0;\n let totalAfter = 0;\n\n targetValue = Math.min(total - 1, targetValue);\n\n assert('targetValue must be a number', typeof targetValue === 'number');\n assert('targetValue must be greater than or equal to 0', targetValue >= 0);\n assert('targetValue must be no more than total', targetValue < total);\n\n for (i = 0; i < numLayers; i++) {\n layer = layers[i];\n\n leftIndex = index;\n rightIndex = index + 1;\n\n left = layer[leftIndex];\n\n if (targetValue >= totalBefore + left) {\n totalBefore = totalBefore + left;\n index = rightIndex * 2;\n } else {\n index = leftIndex * 2;\n }\n }\n\n index = index / 2;\n\n assert('index must be a number', typeof index === 'number');\n assert(\n 'index must be within bounds',\n index >= 0 && index < this.values.length,\n );\n\n totalAfter = total - (totalBefore + values[index]);\n\n return { index, totalBefore, totalAfter };\n }\n\n getOffset(targetIndex) {\n const { layers, length, values } = this;\n const numLayers = layers.length;\n\n if (length === 0) {\n return 0;\n }\n\n let index = 0;\n let offset = 0;\n\n for (let i = 0; i < numLayers - 1; i++) {\n const layer = layers[i];\n\n const leftIndex = index;\n const rightIndex = index + 1;\n\n if (targetIndex >= rightIndex * Math.pow(2, numLayers - i - 1)) {\n offset = offset + layer[leftIndex];\n index = rightIndex * 2;\n } else {\n index = leftIndex * 2;\n }\n }\n\n if (index + 1 === targetIndex) {\n offset += values[index];\n }\n\n return offset;\n }\n\n set(index, value) {\n assert('value must be a number', typeof value === 'number');\n assert('value must non-negative', value >= 0);\n assert('index must be a number', typeof index === 'number');\n assert(\n 'index must be within bounds',\n index >= 0 && index < this.values.length,\n );\n\n const { layers } = this;\n const oldValue = layers[layers.length - 1][index];\n const delta = roundTo(value - oldValue);\n\n if (delta === 0) {\n return delta;\n }\n\n let i, layer;\n\n for (i = layers.length - 1; i >= 0; i--) {\n layer = layers[i];\n\n layer[index] += delta;\n\n index = Math.floor(index / 2);\n }\n\n this.total += delta;\n\n return delta;\n }\n\n prepend(numPrepended) {\n const { values: oldValues, length: oldLength, defaultValue } = this;\n\n const newLength = numPrepended + oldLength;\n\n const newValues = new Float32Array(new ArrayBuffer(newLength * 4));\n\n newValues.set(oldValues, numPrepended);\n newValues.fill(defaultValue, 0, numPrepended);\n\n this.length = newLength;\n this._initializeLayers(newValues);\n }\n\n append(numAppended) {\n const { values: oldValues, length: oldLength, defaultValue } = this;\n\n const newLength = numAppended + oldLength;\n\n const newValues = new Float32Array(new ArrayBuffer(newLength * 4));\n\n newValues.set(oldValues);\n newValues.fill(defaultValue, oldLength);\n\n this.length = newLength;\n this._initializeLayers(newValues);\n }\n\n reset(newLength) {\n const { values: oldValues, length: oldLength, defaultValue } = this;\n\n if (oldLength === newLength) {\n return;\n }\n\n const newValues = new Float32Array(new ArrayBuffer(newLength * 4));\n\n if (oldLength < newLength) {\n newValues.set(oldValues);\n newValues.fill(defaultValue, oldLength);\n } else {\n newValues.set(oldValues.subarray(0, newLength));\n }\n\n this.length = newLength;\n\n if (oldLength === 0) {\n this._initializeLayers(newValues, defaultValue);\n } else {\n this._initializeLayers(newValues);\n }\n }\n}\n","import { DEBUG } from '@glimmer/env';\n\nimport Radar from './radar.js';\nimport SkipList from '../skip-list.js';\nimport roundTo from '../utils/round-to.js';\nimport getScaledClientRect from '../../utils/element/get-scaled-client-rect.js';\n\nexport default class DynamicRadar extends Radar {\n constructor(parentToken, options) {\n super(parentToken, options);\n\n this._firstItemIndex = 0;\n this._lastItemIndex = 0;\n\n this._totalBefore = 0;\n this._totalAfter = 0;\n\n this._minHeight = Infinity;\n\n this._nextIncrementalRender = null;\n\n this.skipList = null;\n\n if (DEBUG) {\n Object.preventExtensions(this);\n }\n }\n\n willDestroy() {\n super.willDestroy();\n this.skipList = null;\n }\n\n scheduleUpdate(didUpdateItems, promiseResolve) {\n // Cancel incremental render check, since we'll be remeasuring anyways\n if (this._nextIncrementalRender !== null) {\n this._nextIncrementalRender.cancel();\n this._nextIncrementalRender = null;\n }\n\n super.scheduleUpdate(didUpdateItems, promiseResolve);\n }\n\n afterUpdate() {\n // Schedule a check to see if we should rerender\n if (this._nextIncrementalRender === null && this._nextUpdate === null) {\n this._nextIncrementalRender = this.schedule('sync', () => {\n this._nextIncrementalRender = null;\n\n if (this._shouldScheduleRerender()) {\n this.update();\n }\n });\n }\n\n super.afterUpdate();\n }\n\n _updateConstants() {\n super._updateConstants();\n\n if (this._calculatedEstimateHeight < this._minHeight) {\n this._minHeight = this._calculatedEstimateHeight;\n }\n\n // Create the SkipList only after the estimateHeight has been calculated the first time\n if (this.skipList === null) {\n this.skipList = new SkipList(\n this.totalItems,\n this._calculatedEstimateHeight,\n );\n } else {\n this.skipList.defaultValue = this._calculatedEstimateHeight;\n }\n }\n\n _updateIndexes() {\n const {\n bufferSize,\n skipList,\n visibleTop,\n visibleBottom,\n totalItems,\n\n _didReset,\n } = this;\n\n if (totalItems === 0) {\n this._firstItemIndex = 0;\n this._lastItemIndex = -1;\n this._totalBefore = 0;\n this._totalAfter = 0;\n\n return;\n }\n\n // Don't measure if the radar has just been instantiated or reset, as we are rendering with a\n // completely new set of items and won't get an accurate measurement until after they render the\n // first time.\n if (_didReset === false) {\n this._measure();\n }\n\n const { values } = skipList;\n\n let { totalBefore, index: firstVisibleIndex } =\n this.skipList.find(visibleTop);\n let { totalAfter, index: lastVisibleIndex } =\n this.skipList.find(visibleBottom);\n\n const maxIndex = totalItems - 1;\n\n let firstItemIndex = firstVisibleIndex;\n let lastItemIndex = lastVisibleIndex;\n\n // Add buffers\n for (let i = bufferSize; i > 0 && firstItemIndex > 0; i--) {\n firstItemIndex--;\n totalBefore -= values[firstItemIndex];\n }\n\n for (let i = bufferSize; i > 0 && lastItemIndex < maxIndex; i--) {\n lastItemIndex++;\n totalAfter -= values[lastItemIndex];\n }\n\n this._firstItemIndex = firstItemIndex;\n this._lastItemIndex = lastItemIndex;\n this._totalBefore = totalBefore;\n this._totalAfter = totalAfter;\n }\n\n _calculateScrollDiff() {\n const { firstItemIndex, _prevFirstVisibleIndex, _prevFirstItemIndex } =\n this;\n\n let beforeVisibleDiff = 0;\n\n if (firstItemIndex < _prevFirstItemIndex) {\n // Measurement only items that could affect scrollTop. This will necesarilly be the\n // minimum of the either the total number of items that are rendered up to the first\n // visible item, OR the number of items that changed before the first visible item\n // (the delta). We want to measure the delta of exactly this number of items, because\n // items that are after the first visible item should not affect the scroll position,\n // and neither should items already rendered before the first visible item.\n const measureLimit = Math.min(\n Math.abs(firstItemIndex - _prevFirstItemIndex),\n _prevFirstVisibleIndex - firstItemIndex,\n );\n\n beforeVisibleDiff = Math.round(this._measure(measureLimit));\n }\n\n return beforeVisibleDiff + super._calculateScrollDiff();\n }\n\n _shouldScheduleRerender() {\n const { firstItemIndex, lastItemIndex } = this;\n\n this._updateConstants();\n this._measure();\n\n // These indexes could change after the measurement, and in the incremental render\n // case we want to check them _after_ the change.\n const { firstVisibleIndex, lastVisibleIndex } = this;\n\n return (\n firstVisibleIndex < firstItemIndex || lastVisibleIndex > lastItemIndex\n );\n }\n\n _measure(measureLimit = null) {\n const {\n orderedComponents,\n skipList,\n\n _occludedContentBefore,\n _transformScale,\n } = this;\n\n const numToMeasure =\n measureLimit !== null\n ? Math.min(measureLimit, orderedComponents.length)\n : orderedComponents.length;\n\n let totalDelta = 0;\n\n for (let i = 0; i < numToMeasure; i++) {\n const currentItem = orderedComponents[i];\n const previousItem = orderedComponents[i - 1];\n const itemIndex = currentItem.index;\n\n const { top: currentItemTop, height: currentItemHeight } =\n getScaledClientRect(currentItem, _transformScale);\n\n let margin;\n\n if (previousItem !== undefined) {\n margin =\n currentItemTop -\n getScaledClientRect(previousItem, _transformScale).bottom;\n } else {\n margin =\n currentItemTop -\n getScaledClientRect(_occludedContentBefore, _transformScale).bottom;\n }\n\n const newHeight = roundTo(currentItemHeight + margin);\n const itemDelta = skipList.set(itemIndex, newHeight);\n\n if (newHeight < this._minHeight) {\n this._minHeight = newHeight;\n }\n\n if (itemDelta !== 0) {\n totalDelta += itemDelta;\n }\n }\n\n return totalDelta;\n }\n\n _didEarthquake(scrollDiff) {\n return scrollDiff > this._minHeight / 2;\n }\n\n get total() {\n return this.skipList.total;\n }\n\n get totalBefore() {\n return this._totalBefore;\n }\n\n get totalAfter() {\n return this._totalAfter;\n }\n\n get firstItemIndex() {\n return this._firstItemIndex;\n }\n\n get lastItemIndex() {\n return this._lastItemIndex;\n }\n\n get firstVisibleIndex() {\n const { visibleTop } = this;\n\n const { index } = this.skipList.find(visibleTop);\n\n return index;\n }\n\n get lastVisibleIndex() {\n const { visibleBottom, totalItems } = this;\n\n const { index } = this.skipList.find(visibleBottom);\n\n return Math.min(index, totalItems - 1);\n }\n\n prepend(numPrepended) {\n super.prepend(numPrepended);\n\n this.skipList.prepend(numPrepended);\n }\n\n append(numAppended) {\n super.append(numAppended);\n\n this.skipList.append(numAppended);\n }\n\n reset() {\n super.reset();\n\n this.skipList.reset(this.totalItems);\n }\n\n /*\n * Public API to query the skiplist for the offset of an item\n */\n getOffsetForIndex(index) {\n this._measure();\n\n return this.skipList.getOffset(index);\n }\n}\n","import { DEBUG } from '@glimmer/env';\n\nimport Radar from './radar.js';\n\nexport default class StaticRadar extends Radar {\n constructor(parentToken, options) {\n super(parentToken, options);\n\n this._firstItemIndex = 0;\n this._lastItemIndex = 0;\n\n if (DEBUG) {\n Object.preventExtensions(this);\n }\n }\n\n _updateIndexes() {\n const {\n bufferSize,\n totalItems,\n visibleMiddle,\n _calculatedEstimateHeight,\n _calculatedScrollContainerHeight,\n } = this;\n\n if (totalItems === 0) {\n this._firstItemIndex = 0;\n this._lastItemIndex = -1;\n\n return;\n }\n\n const maxIndex = totalItems - 1;\n\n const middleItemIndex = Math.floor(\n visibleMiddle / _calculatedEstimateHeight,\n );\n\n const shouldRenderCount = Math.min(\n Math.ceil(_calculatedScrollContainerHeight / _calculatedEstimateHeight),\n totalItems,\n );\n\n let firstItemIndex = middleItemIndex - Math.floor(shouldRenderCount / 2);\n let lastItemIndex = middleItemIndex + Math.ceil(shouldRenderCount / 2) - 1;\n\n if (firstItemIndex < 0) {\n firstItemIndex = 0;\n lastItemIndex = shouldRenderCount - 1;\n }\n\n if (lastItemIndex > maxIndex) {\n lastItemIndex = maxIndex;\n firstItemIndex = maxIndex - (shouldRenderCount - 1);\n }\n\n firstItemIndex = Math.max(firstItemIndex - bufferSize, 0);\n lastItemIndex = Math.min(lastItemIndex + bufferSize, maxIndex);\n\n this._firstItemIndex = firstItemIndex;\n this._lastItemIndex = lastItemIndex;\n }\n\n _didEarthquake(scrollDiff) {\n return scrollDiff > this._calculatedEstimateHeight / 2;\n }\n\n get total() {\n return this.totalItems * this._calculatedEstimateHeight;\n }\n\n get totalBefore() {\n return this.firstItemIndex * this._calculatedEstimateHeight;\n }\n\n get totalAfter() {\n return (\n this.total - (this.lastItemIndex + 1) * this._calculatedEstimateHeight\n );\n }\n\n get firstItemIndex() {\n return this._firstItemIndex;\n }\n\n get lastItemIndex() {\n return this._lastItemIndex;\n }\n\n get firstVisibleIndex() {\n return Math.ceil(this.visibleTop / this._calculatedEstimateHeight);\n }\n\n get lastVisibleIndex() {\n return (\n Math.min(\n Math.ceil(this.visibleBottom / this._calculatedEstimateHeight),\n this.totalItems,\n ) - 1\n );\n }\n\n /*\n * Public API to query for the offset of an item\n */\n getOffsetForIndex(index) {\n return index * this._calculatedEstimateHeight + 1;\n }\n}\n"],"names":["identity","item","key","type","guidFor","keyForItem","keyPath","index","assert","get","String","window","document","undefined","VC_IDENTITY","VirtualComponent","constructor","content","id","upperBound","createTextNode","lowerBound","rendered","DEBUG","Object","preventExtensions","realUpperBound","realLowerBound","getBoundingClientRect","top","Infinity","bottom","nextSibling","Element","Math","min","max","text","textContent","match","height","recycle","newContent","newIndex","set","destroy","OC_IDENTITY","OccludedContent","tagName","isOccludedContent","element","createElement","className","addEventListener","event","listener","removeEventListener","parentNode","style","innerHTML","value","insertRangeBefore","parent","firstNode","lastNode","nextNode","insertBefore","objectAt","arr","Array","isArray","roundTo","number","decimal","exp","pow","round","isPrepend","lenDiff","newItems","oldFirstKey","oldLastKey","newItemsLength","newFirstKey","newLastKey","isAppend","DEFAULT_ARRAY_SIZE","ScrollHandler","elements","maxLength","length","handlers","addScrollHandler","handler","indexOf","cache","scrollTop","left","scrollLeft","passiveHandler","triggerElementHandlers","push","capture","passive","removeScrollHandler","elementCache","Error","splice","meta","cachedTop","cachedLeft","topChanged","leftChanged","begin","j","end","instance","ViewportContainer","defineProperty","scrollY","v","scrollTo","scrollX","innerHeight","prototype","options","width","innerWidth","right","estimateElementHeight","fallbackHeight","includes","getPercentageHeight","getEmHeight","parseInt","parentHeight","offsetHeight","percent","parseFloat","fontSizeElement","documentElement","fontSize","getComputedStyle","getPropertyValue","getScaledClientRect","scale","rect","scaled","Radar","parentToken","bufferSize","containerSelector","estimateHeight","initialRenderCount","items","renderAll","renderFromLast","shouldRecycle","startingIndex","occlusionTagName","token","Token","sendAction","_itemContainer","_scrollContainer","_prependOffset","_calculatedEstimateHeight","_collectionOffset","_calculatedScrollContainerHeight","_transformScale","_scrollHandler","_didEarthquake","abs","_scrollTop","scheduleUpdate","_resizeHandler","bind","_nextUpdate","_nextLayout","_started","_didReset","_didUpdateItems","_prevFirstItemIndex","_prevLastItemIndex","_prevFirstVisibleIndex","_prevLastVisibleIndex","_firstReached","_lastReached","_prevTotalItems","_prevFirstKey","_prevLastKey","_componentPool","_prependComponentPool","_appendComponentPool","_occludedContentBefore","_occludedContentAfter","_pageUpHandler","pageUp","_pageDownHandler","pageDown","_domPool","createDocumentFragment","virtualComponents","A","orderedComponents","_updateVirtualComponents","_debugDidUpdate","cancel","i","schedule","queueName","job","scheduler","start","closest","_updateConstants","startingScrollTop","update","didUpdateItems","promiseResolve","_determineUpdateType","_updateIndexes","afterUpdate","totalItems","scrollDiff","_calculateScrollDiff","_sendActions","firstItemIndex","lastItemIndex","firstVisibleIndex","lastVisibleIndex","prepend","append","reset","firstItem","lastItem","scrollContainerOffsetHeight","scrollContainerRenderedHeight","transformScale","scrollContentTop","scrollContainerTop","scrollContainerMaxHeight","maxHeightStyle","maxHeight","parentElement","calculatedEstimateHeight","renderedFirstItemIndex","renderedLastItemIndex","renderedTotalBefore","renderedTotalAfter","totalBefore","totalAfter","shift","unshift","pop","component","firstIndexInList","lastIndexInList","itemIndex","_appendComponent","_prependComponent","run","removeObject","totalItemsBefore","totalItemsAfter","beforeItemsText","afterItemsText","relativeNode","insertAt","numPrepended","forEach","c","totalComponents","newFirstItemIndex","offset","getOffsetForIndex","visibleTop","visibleMiddle","visibleBottom","SkipList","defaultValue","values","Float32Array","ArrayBuffer","fill","_initializeLayers","layers","layer","prevLayer","ceil","total","find","targetValue","numLayers","leftIndex","rightIndex","getOffset","targetIndex","oldValue","delta","floor","oldValues","oldLength","newLength","newValues","numAppended","subarray","DynamicRadar","_firstItemIndex","_lastItemIndex","_totalBefore","_totalAfter","_minHeight","_nextIncrementalRender","skipList","willDestroy","_shouldScheduleRerender","_measure","maxIndex","beforeVisibleDiff","measureLimit","numToMeasure","totalDelta","currentItem","previousItem","currentItemTop","currentItemHeight","margin","newHeight","itemDelta","StaticRadar","middleItemIndex","shouldRenderCount"],"mappings":"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"}