@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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@html-next/vertical-collection",
3
- "version": "5.0.2",
3
+ "version": "5.0.3",
4
4
  "description": "infinite-scroll, done right. done.",
5
5
  "keywords": [
6
6
  "occlusion",
@@ -20,7 +20,6 @@ import {
20
20
 
21
21
  import ViewportContainer from '../viewport-container.js';
22
22
 
23
- import closestElement from '../../utils/element/closest.js';
24
23
  import estimateElementHeight from '../../utils/element/estimate-element-height.js';
25
24
  import getScaledClientRect from '../../utils/element/get-scaled-client-rect.js';
26
25
  import keyForItem from '../../ember-internals/key-for-item.js';
@@ -131,10 +130,6 @@ export default class Radar {
131
130
 
132
131
  this._updateVirtualComponents();
133
132
 
134
- // In older versions of Ember/IE, binding anything on an object in the template
135
- // adds observers which creates __ember_meta__
136
- this.__ember_meta__ = null;
137
-
138
133
  if (DEBUG) {
139
134
  this._debugDidUpdate = null;
140
135
  }
@@ -185,7 +180,7 @@ export default class Radar {
185
180
  this._scrollContainer =
186
181
  containerSelector === 'body'
187
182
  ? ViewportContainer
188
- : closestElement(this._itemContainer, containerSelector);
183
+ : this._itemContainer.closest(containerSelector);
189
184
 
190
185
  this._updateConstants();
191
186
 
@@ -27,30 +27,10 @@ import roundTo from './utils/round-to.js';
27
27
  * traverse to get the total value before and after the final index.
28
28
  */
29
29
 
30
- function fill(array, value, start = 0, end = array.length) {
31
- if (typeof array.fill === 'function') {
32
- array.fill(value, start, end);
33
- } else {
34
- for (; start < end; start++) {
35
- array[start] = value;
36
- }
37
-
38
- return array;
39
- }
40
- }
41
-
42
- function subarray(array, start, end) {
43
- if (typeof array.subarray === 'function') {
44
- return array.subarray(start, end);
45
- } else {
46
- return array.slice(start, end);
47
- }
48
- }
49
-
50
30
  export default class SkipList {
51
31
  constructor(length, defaultValue) {
52
32
  const values = new Float32Array(new ArrayBuffer(length * 4));
53
- fill(values, defaultValue);
33
+ values.fill(defaultValue);
54
34
 
55
35
  this.length = length;
56
36
  this.defaultValue = defaultValue;
@@ -80,7 +60,7 @@ export default class SkipList {
80
60
  // This allows us to use the `fill` method on Typed arrays, which
81
61
  // an order of magnitude faster than manually calculating each value.
82
62
  defaultValue = defaultValue * 2;
83
- fill(layer, defaultValue);
63
+ layer.fill(defaultValue);
84
64
 
85
65
  left = prevLayer[(length - 1) * 2] || 0;
86
66
  right = prevLayer[(length - 1) * 2 + 1] || 0;
@@ -234,7 +214,7 @@ export default class SkipList {
234
214
  const newValues = new Float32Array(new ArrayBuffer(newLength * 4));
235
215
 
236
216
  newValues.set(oldValues, numPrepended);
237
- fill(newValues, defaultValue, 0, numPrepended);
217
+ newValues.fill(defaultValue, 0, numPrepended);
238
218
 
239
219
  this.length = newLength;
240
220
  this._initializeLayers(newValues);
@@ -248,7 +228,7 @@ export default class SkipList {
248
228
  const newValues = new Float32Array(new ArrayBuffer(newLength * 4));
249
229
 
250
230
  newValues.set(oldValues);
251
- fill(newValues, defaultValue, oldLength);
231
+ newValues.fill(defaultValue, oldLength);
252
232
 
253
233
  this.length = newLength;
254
234
  this._initializeLayers(newValues);
@@ -265,9 +245,9 @@ export default class SkipList {
265
245
 
266
246
  if (oldLength < newLength) {
267
247
  newValues.set(oldValues);
268
- fill(newValues, defaultValue, oldLength);
248
+ newValues.fill(defaultValue, oldLength);
269
249
  } else {
270
- newValues.set(subarray(oldValues, 0, newLength));
250
+ newValues.set(oldValues.subarray(0, newLength));
271
251
  }
272
252
 
273
253
  this.length = newLength;
@@ -1,8 +1,5 @@
1
1
  import { begin, end } from '@ember/runloop';
2
- import { scheduler } from 'ember-raf-scheduler';
3
- import SUPPORTS_PASSIVE from './supports-passive.js';
4
2
  const DEFAULT_ARRAY_SIZE = 10;
5
- const UNDEFINED_VALUE = Object.create(null);
6
3
 
7
4
  export class ScrollHandler {
8
5
  constructor() {
@@ -10,8 +7,6 @@ export class ScrollHandler {
10
7
  this.maxLength = DEFAULT_ARRAY_SIZE;
11
8
  this.length = 0;
12
9
  this.handlers = new Array(DEFAULT_ARRAY_SIZE);
13
- this.isPolling = false;
14
- this.isUsingPassive = SUPPORTS_PASSIVE;
15
10
  }
16
11
 
17
12
  addScrollHandler(element, handler) {
@@ -34,41 +29,28 @@ export class ScrollHandler {
34
29
  top: element.scrollTop,
35
30
  left: element.scrollLeft,
36
31
  handlers,
37
- };
38
- // TODO add explicit test
39
- if (SUPPORTS_PASSIVE) {
40
- cache.passiveHandler = function () {
32
+ passiveHandler() {
41
33
  ScrollHandler.triggerElementHandlers(element, cache);
42
- };
43
- } else {
44
- cache.passiveHandler = UNDEFINED_VALUE;
45
- }
34
+ },
35
+ };
46
36
  } else {
47
37
  cache = this.handlers[index];
48
38
  handlers = cache.handlers;
49
39
  handlers.push(handler);
50
40
  }
51
41
 
52
- // TODO add explicit test
53
- if (this.isUsingPassive) {
54
- // Only add the event listener once, if more handlers are present.
55
- if (handlers.length === 1) {
56
- element.addEventListener('scroll', cache.passiveHandler, {
57
- capture: true,
58
- passive: true,
59
- });
60
- }
61
-
62
- // TODO add explicit test
63
- } else if (!this.isPolling) {
64
- this.poll();
42
+ if (handlers.length === 1) {
43
+ element.addEventListener('scroll', cache.passiveHandler, {
44
+ capture: true,
45
+ passive: true,
46
+ });
65
47
  }
66
48
  }
67
49
 
68
50
  removeScrollHandler(element, handler) {
69
51
  let index = this.elements.indexOf(element);
70
52
  let elementCache = this.handlers[index];
71
- // TODO add explicit test
53
+
72
54
  if (elementCache && elementCache.handlers) {
73
55
  let index = elementCache.handlers.indexOf(handler);
74
56
 
@@ -78,8 +60,6 @@ export class ScrollHandler {
78
60
 
79
61
  elementCache.handlers.splice(index, 1);
80
62
 
81
- // cleanup element entirely if needed
82
- // TODO add explicit test
83
63
  if (!elementCache.handlers.length) {
84
64
  index = this.elements.indexOf(element);
85
65
  this.handlers.splice(index, 1);
@@ -88,17 +68,10 @@ export class ScrollHandler {
88
68
  this.length--;
89
69
  this.maxLength--;
90
70
 
91
- if (this.length === 0) {
92
- this.isPolling = false;
93
- }
94
-
95
- // TODO add explicit test
96
- if (this.isUsingPassive) {
97
- element.removeEventListener('scroll', elementCache.passiveHandler, {
98
- capture: true,
99
- passive: true,
100
- });
101
- }
71
+ element.removeEventListener('scroll', elementCache.passiveHandler, {
72
+ capture: true,
73
+ passive: true,
74
+ });
102
75
  }
103
76
  } else {
104
77
  throw new Error(
@@ -118,7 +91,6 @@ export class ScrollHandler {
118
91
 
119
92
  let event = { top: cachedTop, left: cachedLeft };
120
93
 
121
- // TODO add explicit test
122
94
  if (topChanged || leftChanged) {
123
95
  begin();
124
96
  for (let j = 0; j < meta.handlers.length; j++) {
@@ -127,30 +99,6 @@ export class ScrollHandler {
127
99
  end();
128
100
  }
129
101
  }
130
-
131
- poll() {
132
- this.isPolling = true;
133
-
134
- scheduler.schedule('sync', () => {
135
- // TODO add explicit test
136
- if (!this.isPolling) {
137
- return;
138
- }
139
-
140
- for (let i = 0; i < this.length; i++) {
141
- let element = this.elements[i];
142
- let info = this.handlers[i];
143
-
144
- ScrollHandler.triggerElementHandlers(element, info);
145
- }
146
-
147
- this.isPolling = this.length > 0;
148
- // TODO add explicit test
149
- if (this.isPolling) {
150
- this.poll();
151
- }
152
- });
153
- }
154
102
  }
155
103
 
156
104
  const instance = new ScrollHandler();
@@ -1,44 +1,24 @@
1
1
  /*
2
- * There are significant differences between browsers
3
- * in how they implement "scroll" on document.body
4
- *
5
- * The only cross-browser listener for scroll on body
6
- * is to listen on window with capture.
7
- *
8
- * They also implement different standards for how to
9
- * access the scroll position.
10
- *
11
- * This singleton class provides a cross-browser way
12
- * to access and set the scrollTop and scrollLeft properties.
13
- *
2
+ * This singleton class provides a way to treat the document viewport
3
+ * like a scrollable element, proxying scroll position access and
4
+ * event listeners to the appropriate browser APIs.
14
5
  */
15
6
  export function ViewportContainer() {
16
- // A bug occurs in Chrome when we reload the browser at a lower
17
- // scrollTop, window.scrollY becomes stuck on a single value.
18
7
  Object.defineProperty(this, 'scrollTop', {
19
8
  get() {
20
- return document.body.scrollTop || document.documentElement.scrollTop;
9
+ return window.scrollY;
21
10
  },
22
11
  set(v) {
23
- document.body.scrollTop = document.documentElement.scrollTop = v;
12
+ window.scrollTo(window.scrollX, v);
24
13
  },
25
14
  });
26
15
 
27
16
  Object.defineProperty(this, 'scrollLeft', {
28
17
  get() {
29
- return (
30
- window.scrollX ||
31
- window.pageXOffset ||
32
- document.body.scrollLeft ||
33
- document.documentElement.scrollLeft
34
- );
18
+ return window.scrollX;
35
19
  },
36
20
  set(v) {
37
- window.scrollX =
38
- window.pageXOffset =
39
- document.body.scrollLeft =
40
- document.documentElement.scrollLeft =
41
- v;
21
+ window.scrollTo(v, window.scrollY);
42
22
  },
43
23
  });
44
24
 
@@ -57,7 +37,7 @@ ViewportContainer.prototype.addEventListener = function addEventListener(
57
37
  return window.addEventListener(event, handler, options);
58
38
  };
59
39
 
60
- ViewportContainer.prototype.removeEventListener = function addEventListener(
40
+ ViewportContainer.prototype.removeEventListener = function removeEventListener(
61
41
  event,
62
42
  handler,
63
43
  options,
@@ -1,7 +1,5 @@
1
1
  export { default as keyForItem } from './ember-internals/key-for-item.js';
2
2
 
3
- export { default as closestElement } from './utils/element/closest.js';
4
-
5
3
  export { default as DynamicRadar } from './data-view/radar/dynamic-radar.js';
6
4
  export { default as StaticRadar } from './data-view/radar/static-radar.js';
7
5
 
@@ -7,11 +7,11 @@ export default function estimateElementHeight(element, fallbackHeight) {
7
7
  );
8
8
  assert(`You called estimateElementHeight without an element`, element);
9
9
 
10
- if (fallbackHeight.indexOf('%') !== -1) {
10
+ if (fallbackHeight.includes('%')) {
11
11
  return getPercentageHeight(element, fallbackHeight);
12
12
  }
13
13
 
14
- if (fallbackHeight.indexOf('em') !== -1) {
14
+ if (fallbackHeight.includes('em')) {
15
15
  return getEmHeight(element, fallbackHeight);
16
16
  }
17
17
 
@@ -28,8 +28,9 @@ function getPercentageHeight(element, fallbackHeight) {
28
28
  }
29
29
 
30
30
  function getEmHeight(element, fallbackHeight) {
31
- const fontSizeElement =
32
- fallbackHeight.indexOf('rem') !== -1 ? document.documentElement : element;
31
+ const fontSizeElement = fallbackHeight.includes('rem')
32
+ ? document.documentElement
33
+ : element;
33
34
  const fontSize = window
34
35
  .getComputedStyle(fontSizeElement)
35
36
  .getPropertyValue('font-size');
@@ -1 +0,0 @@
1
- {"version":3,"file":"static-radar-D0EvnYLd.js","sources":["../src/-private/ember-internals/identity.js","../src/-private/ember-internals/key-for-item.js","../src/-private/utils/element/closest.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/supports-passive.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","const VENDOR_MATCH_FNS = [\n 'matches',\n 'webkitMatchesSelector',\n 'mozMatchesSelector',\n 'msMatchesSelector',\n 'oMatchesSelector',\n];\nlet ELEMENT_MATCH_FN;\n\nfunction setElementMatchFn(el) {\n VENDOR_MATCH_FNS.forEach((fn) => {\n if (ELEMENT_MATCH_FN === undefined && typeof el[fn] === 'function') {\n ELEMENT_MATCH_FN = fn;\n }\n });\n}\n\nexport default function closest(el, selector) {\n if (ELEMENT_MATCH_FN === undefined) {\n setElementMatchFn(el);\n }\n while (el) {\n // TODO add explicit test\n if (el[ELEMENT_MATCH_FN](selector)) {\n return el;\n }\n el = el.parentElement;\n }\n\n return null;\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","let supportsPassive = false;\n\ntry {\n let opts = Object.defineProperty({}, 'passive', {\n get() {\n supportsPassive = true;\n return supportsPassive;\n },\n });\n\n window.addEventListener('test', null, opts);\n} catch {\n // do nothing\n}\n\nexport default supportsPassive;\n","import { begin, end } from '@ember/runloop';\nimport { scheduler } from 'ember-raf-scheduler';\nimport SUPPORTS_PASSIVE from './supports-passive.js';\nconst DEFAULT_ARRAY_SIZE = 10;\nconst UNDEFINED_VALUE = Object.create(null);\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 this.isPolling = false;\n this.isUsingPassive = SUPPORTS_PASSIVE;\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 };\n // TODO add explicit test\n if (SUPPORTS_PASSIVE) {\n cache.passiveHandler = function () {\n ScrollHandler.triggerElementHandlers(element, cache);\n };\n } else {\n cache.passiveHandler = UNDEFINED_VALUE;\n }\n } else {\n cache = this.handlers[index];\n handlers = cache.handlers;\n handlers.push(handler);\n }\n\n // TODO add explicit test\n if (this.isUsingPassive) {\n // Only add the event listener once, if more handlers are present.\n if (handlers.length === 1) {\n element.addEventListener('scroll', cache.passiveHandler, {\n capture: true,\n passive: true,\n });\n }\n\n // TODO add explicit test\n } else if (!this.isPolling) {\n this.poll();\n }\n }\n\n removeScrollHandler(element, handler) {\n let index = this.elements.indexOf(element);\n let elementCache = this.handlers[index];\n // TODO add explicit test\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 // cleanup element entirely if needed\n // TODO add explicit test\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 if (this.length === 0) {\n this.isPolling = false;\n }\n\n // TODO add explicit test\n if (this.isUsingPassive) {\n element.removeEventListener('scroll', elementCache.passiveHandler, {\n capture: true,\n passive: true,\n });\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 // TODO add explicit test\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 poll() {\n this.isPolling = true;\n\n scheduler.schedule('sync', () => {\n // TODO add explicit test\n if (!this.isPolling) {\n return;\n }\n\n for (let i = 0; i < this.length; i++) {\n let element = this.elements[i];\n let info = this.handlers[i];\n\n ScrollHandler.triggerElementHandlers(element, info);\n }\n\n this.isPolling = this.length > 0;\n // TODO add explicit test\n if (this.isPolling) {\n this.poll();\n }\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 * There are significant differences between browsers\n * in how they implement \"scroll\" on document.body\n *\n * The only cross-browser listener for scroll on body\n * is to listen on window with capture.\n *\n * They also implement different standards for how to\n * access the scroll position.\n *\n * This singleton class provides a cross-browser way\n * to access and set the scrollTop and scrollLeft properties.\n *\n */\nexport function ViewportContainer() {\n // A bug occurs in Chrome when we reload the browser at a lower\n // scrollTop, window.scrollY becomes stuck on a single value.\n Object.defineProperty(this, 'scrollTop', {\n get() {\n return document.body.scrollTop || document.documentElement.scrollTop;\n },\n set(v) {\n document.body.scrollTop = document.documentElement.scrollTop = v;\n },\n });\n\n Object.defineProperty(this, 'scrollLeft', {\n get() {\n return (\n window.scrollX ||\n window.pageXOffset ||\n document.body.scrollLeft ||\n document.documentElement.scrollLeft\n );\n },\n set(v) {\n window.scrollX =\n window.pageXOffset =\n document.body.scrollLeft =\n document.documentElement.scrollLeft =\n v;\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 addEventListener(\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.indexOf('%') !== -1) {\n return getPercentageHeight(element, fallbackHeight);\n }\n\n if (fallbackHeight.indexOf('em') !== -1) {\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 =\n fallbackHeight.indexOf('rem') !== -1 ? document.documentElement : 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 closestElement from '../../utils/element/closest.js';\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 // In older versions of Ember/IE, binding anything on an object in the template\n // adds observers which creates __ember_meta__\n this.__ember_meta__ = null;\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 : closestElement(this._itemContainer, 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\nfunction fill(array, value, start = 0, end = array.length) {\n if (typeof array.fill === 'function') {\n array.fill(value, start, end);\n } else {\n for (; start < end; start++) {\n array[start] = value;\n }\n\n return array;\n }\n}\n\nfunction subarray(array, start, end) {\n if (typeof array.subarray === 'function') {\n return array.subarray(start, end);\n } else {\n return array.slice(start, end);\n }\n}\n\nexport default class SkipList {\n constructor(length, defaultValue) {\n const values = new Float32Array(new ArrayBuffer(length * 4));\n fill(values, 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 fill(layer, 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 fill(newValues, 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 fill(newValues, 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 fill(newValues, defaultValue, oldLength);\n } else {\n newValues.set(subarray(oldValues, 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","VENDOR_MATCH_FNS","ELEMENT_MATCH_FN","setElementMatchFn","el","forEach","fn","undefined","closest","selector","parentElement","window","document","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","supportsPassive","opts","defineProperty","DEFAULT_ARRAY_SIZE","UNDEFINED_VALUE","create","ScrollHandler","elements","maxLength","length","handlers","isPolling","isUsingPassive","SUPPORTS_PASSIVE","addScrollHandler","handler","indexOf","cache","scrollTop","left","scrollLeft","passiveHandler","triggerElementHandlers","push","capture","passive","poll","removeScrollHandler","elementCache","Error","splice","meta","cachedTop","cachedLeft","topChanged","leftChanged","begin","j","end","scheduler","schedule","i","info","instance","ViewportContainer","body","documentElement","v","scrollX","pageXOffset","innerHeight","prototype","options","width","innerWidth","right","estimateElementHeight","fallbackHeight","getPercentageHeight","getEmHeight","parseInt","parentHeight","offsetHeight","percent","parseFloat","fontSizeElement","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","__ember_meta__","_debugDidUpdate","cancel","queueName","job","start","closestElement","_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","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","c","totalComponents","newFirstItemIndex","offset","getOffsetForIndex","visibleTop","visibleMiddle","visibleBottom","fill","array","subarray","slice","SkipList","defaultValue","values","Float32Array","ArrayBuffer","_initializeLayers","layers","layer","prevLayer","ceil","total","find","targetValue","numLayers","leftIndex","rightIndex","getOffset","targetIndex","oldValue","delta","floor","oldValues","oldLength","newLength","newValues","numAppended","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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"}