{"ast":null,"code":"'use strict';\n\nimport invariant from 'fbjs/lib/invariant';\n\nfunction elementsThatOverlapOffsets(offsets, itemCount, getFrameMetrics) {\n  var out = [];\n  var outLength = 0;\n\n  for (var ii = 0; ii < itemCount; ii++) {\n    var frame = getFrameMetrics(ii);\n    var trailingOffset = frame.offset + frame.length;\n\n    for (var kk = 0; kk < offsets.length; kk++) {\n      if (out[kk] == null && trailingOffset >= offsets[kk]) {\n        out[kk] = ii;\n        outLength++;\n\n        if (kk === offsets.length - 1) {\n          invariant(outLength === offsets.length, 'bad offsets input, should be in increasing order: %s', JSON.stringify(offsets));\n          return out;\n        }\n      }\n    }\n  }\n\n  return out;\n}\n\nfunction newRangeCount(prev, next) {\n  return next.last - next.first + 1 - Math.max(0, 1 + Math.min(next.last, prev.last) - Math.max(next.first, prev.first));\n}\n\nfunction computeWindowedRenderLimits(props, prev, getFrameMetricsApprox, scrollMetrics) {\n  var data = props.data,\n      getItemCount = props.getItemCount,\n      maxToRenderPerBatch = props.maxToRenderPerBatch,\n      windowSize = props.windowSize;\n  var itemCount = getItemCount(data);\n\n  if (itemCount === 0) {\n    return prev;\n  }\n\n  var offset = scrollMetrics.offset,\n      velocity = scrollMetrics.velocity,\n      visibleLength = scrollMetrics.visibleLength;\n  var visibleBegin = Math.max(0, offset);\n  var visibleEnd = visibleBegin + visibleLength;\n  var overscanLength = (windowSize - 1) * visibleLength;\n  var leadFactor = 0.5;\n  var fillPreference = velocity > 1 ? 'after' : velocity < -1 ? 'before' : 'none';\n  var overscanBegin = Math.max(0, visibleBegin - (1 - leadFactor) * overscanLength);\n  var overscanEnd = Math.max(0, visibleEnd + leadFactor * overscanLength);\n  var lastItemOffset = getFrameMetricsApprox(itemCount - 1).offset;\n\n  if (lastItemOffset < overscanBegin) {\n    return {\n      first: Math.max(0, itemCount - 1 - maxToRenderPerBatch),\n      last: itemCount - 1\n    };\n  }\n\n  var _elementsThatOverlapO = elementsThatOverlapOffsets([overscanBegin, visibleBegin, visibleEnd, overscanEnd], props.getItemCount(props.data), getFrameMetricsApprox),\n      overscanFirst = _elementsThatOverlapO[0],\n      first = _elementsThatOverlapO[1],\n      last = _elementsThatOverlapO[2],\n      overscanLast = _elementsThatOverlapO[3];\n\n  overscanFirst = overscanFirst == null ? 0 : overscanFirst;\n  first = first == null ? Math.max(0, overscanFirst) : first;\n  overscanLast = overscanLast == null ? itemCount - 1 : overscanLast;\n  last = last == null ? Math.min(overscanLast, first + maxToRenderPerBatch - 1) : last;\n  var visible = {\n    first: first,\n    last: last\n  };\n  var newCellCount = newRangeCount(prev, visible);\n\n  while (true) {\n    if (first <= overscanFirst && last >= overscanLast) {\n      break;\n    }\n\n    var maxNewCells = newCellCount >= maxToRenderPerBatch;\n    var firstWillAddMore = first <= prev.first || first > prev.last;\n    var firstShouldIncrement = first > overscanFirst && (!maxNewCells || !firstWillAddMore);\n    var lastWillAddMore = last >= prev.last || last < prev.first;\n    var lastShouldIncrement = last < overscanLast && (!maxNewCells || !lastWillAddMore);\n\n    if (maxNewCells && !firstShouldIncrement && !lastShouldIncrement) {\n      break;\n    }\n\n    if (firstShouldIncrement && !(fillPreference === 'after' && lastShouldIncrement && lastWillAddMore)) {\n      if (firstWillAddMore) {\n        newCellCount++;\n      }\n\n      first--;\n    }\n\n    if (lastShouldIncrement && !(fillPreference === 'before' && firstShouldIncrement && firstWillAddMore)) {\n      if (lastWillAddMore) {\n        newCellCount++;\n      }\n\n      last++;\n    }\n  }\n\n  if (!(last >= first && first >= 0 && last < itemCount && first >= overscanFirst && last <= overscanLast && first <= visible.first && last >= visible.last)) {\n    throw new Error('Bad window calculation ' + JSON.stringify({\n      first: first,\n      last: last,\n      itemCount: itemCount,\n      overscanFirst: overscanFirst,\n      overscanLast: overscanLast,\n      visible: visible\n    }));\n  }\n\n  return {\n    first: first,\n    last: last\n  };\n}\n\nvar VirtualizeUtils = {\n  computeWindowedRenderLimits: computeWindowedRenderLimits,\n  elementsThatOverlapOffsets: elementsThatOverlapOffsets,\n  newRangeCount: newRangeCount\n};\nexport { computeWindowedRenderLimits, elementsThatOverlapOffsets, newRangeCount };\nexport default VirtualizeUtils;","map":{"version":3,"sources":["/Users/rohitsingh/Documents/projects/new-nativebase-setup/NativeBase/example/node_modules/react-native-web/dist/vendor/react-native/VirtualizeUtils/index.js"],"names":["invariant","elementsThatOverlapOffsets","offsets","itemCount","getFrameMetrics","out","outLength","ii","frame","trailingOffset","offset","length","kk","JSON","stringify","newRangeCount","prev","next","last","first","Math","max","min","computeWindowedRenderLimits","props","getFrameMetricsApprox","scrollMetrics","data","getItemCount","maxToRenderPerBatch","windowSize","velocity","visibleLength","visibleBegin","visibleEnd","overscanLength","leadFactor","fillPreference","overscanBegin","overscanEnd","lastItemOffset","_elementsThatOverlapO","overscanFirst","overscanLast","visible","newCellCount","maxNewCells","firstWillAddMore","firstShouldIncrement","lastWillAddMore","lastShouldIncrement","Error","VirtualizeUtils"],"mappings":"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","sourcesContent":["/**\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * \n * @format\n */\n'use strict';\n\nimport invariant from 'fbjs/lib/invariant';\n/**\n * Used to find the indices of the frames that overlap the given offsets. Useful for finding the\n * items that bound different windows of content, such as the visible area or the buffered overscan\n * area.\n */\n\nfunction elementsThatOverlapOffsets(offsets, itemCount, getFrameMetrics) {\n  var out = [];\n  var outLength = 0;\n\n  for (var ii = 0; ii < itemCount; ii++) {\n    var frame = getFrameMetrics(ii);\n    var trailingOffset = frame.offset + frame.length;\n\n    for (var kk = 0; kk < offsets.length; kk++) {\n      if (out[kk] == null && trailingOffset >= offsets[kk]) {\n        out[kk] = ii;\n        outLength++;\n\n        if (kk === offsets.length - 1) {\n          invariant(outLength === offsets.length, 'bad offsets input, should be in increasing order: %s', JSON.stringify(offsets));\n          return out;\n        }\n      }\n    }\n  }\n\n  return out;\n}\n/**\n * Computes the number of elements in the `next` range that are new compared to the `prev` range.\n * Handy for calculating how many new items will be rendered when the render window changes so we\n * can restrict the number of new items render at once so that content can appear on the screen\n * faster.\n */\n\n\nfunction newRangeCount(prev, next) {\n  return next.last - next.first + 1 - Math.max(0, 1 + Math.min(next.last, prev.last) - Math.max(next.first, prev.first));\n}\n/**\n * Custom logic for determining which items should be rendered given the current frame and scroll\n * metrics, as well as the previous render state. The algorithm may evolve over time, but generally\n * prioritizes the visible area first, then expands that with overscan regions ahead and behind,\n * biased in the direction of scroll.\n */\n\n\nfunction computeWindowedRenderLimits(props, prev, getFrameMetricsApprox, scrollMetrics) {\n  var data = props.data,\n      getItemCount = props.getItemCount,\n      maxToRenderPerBatch = props.maxToRenderPerBatch,\n      windowSize = props.windowSize;\n  var itemCount = getItemCount(data);\n\n  if (itemCount === 0) {\n    return prev;\n  }\n\n  var offset = scrollMetrics.offset,\n      velocity = scrollMetrics.velocity,\n      visibleLength = scrollMetrics.visibleLength; // Start with visible area, then compute maximum overscan region by expanding from there, biased\n  // in the direction of scroll. Total overscan area is capped, which should cap memory consumption\n  // too.\n\n  var visibleBegin = Math.max(0, offset);\n  var visibleEnd = visibleBegin + visibleLength;\n  var overscanLength = (windowSize - 1) * visibleLength; // Considering velocity seems to introduce more churn than it's worth.\n\n  var leadFactor = 0.5; // Math.max(0, Math.min(1, velocity / 25 + 0.5));\n\n  var fillPreference = velocity > 1 ? 'after' : velocity < -1 ? 'before' : 'none';\n  var overscanBegin = Math.max(0, visibleBegin - (1 - leadFactor) * overscanLength);\n  var overscanEnd = Math.max(0, visibleEnd + leadFactor * overscanLength);\n  var lastItemOffset = getFrameMetricsApprox(itemCount - 1).offset;\n\n  if (lastItemOffset < overscanBegin) {\n    // Entire list is before our overscan window\n    return {\n      first: Math.max(0, itemCount - 1 - maxToRenderPerBatch),\n      last: itemCount - 1\n    };\n  } // Find the indices that correspond to the items at the render boundaries we're targeting.\n\n\n  var _elementsThatOverlapO = elementsThatOverlapOffsets([overscanBegin, visibleBegin, visibleEnd, overscanEnd], props.getItemCount(props.data), getFrameMetricsApprox),\n      overscanFirst = _elementsThatOverlapO[0],\n      first = _elementsThatOverlapO[1],\n      last = _elementsThatOverlapO[2],\n      overscanLast = _elementsThatOverlapO[3];\n\n  overscanFirst = overscanFirst == null ? 0 : overscanFirst;\n  first = first == null ? Math.max(0, overscanFirst) : first;\n  overscanLast = overscanLast == null ? itemCount - 1 : overscanLast;\n  last = last == null ? Math.min(overscanLast, first + maxToRenderPerBatch - 1) : last;\n  var visible = {\n    first: first,\n    last: last\n  }; // We want to limit the number of new cells we're rendering per batch so that we can fill the\n  // content on the screen quickly. If we rendered the entire overscan window at once, the user\n  // could be staring at white space for a long time waiting for a bunch of offscreen content to\n  // render.\n\n  var newCellCount = newRangeCount(prev, visible);\n\n  while (true) {\n    if (first <= overscanFirst && last >= overscanLast) {\n      // If we fill the entire overscan range, we're done.\n      break;\n    }\n\n    var maxNewCells = newCellCount >= maxToRenderPerBatch;\n    var firstWillAddMore = first <= prev.first || first > prev.last;\n    var firstShouldIncrement = first > overscanFirst && (!maxNewCells || !firstWillAddMore);\n    var lastWillAddMore = last >= prev.last || last < prev.first;\n    var lastShouldIncrement = last < overscanLast && (!maxNewCells || !lastWillAddMore);\n\n    if (maxNewCells && !firstShouldIncrement && !lastShouldIncrement) {\n      // We only want to stop if we've hit maxNewCells AND we cannot increment first or last\n      // without rendering new items. This let's us preserve as many already rendered items as\n      // possible, reducing render churn and keeping the rendered overscan range as large as\n      // possible.\n      break;\n    }\n\n    if (firstShouldIncrement && !(fillPreference === 'after' && lastShouldIncrement && lastWillAddMore)) {\n      if (firstWillAddMore) {\n        newCellCount++;\n      }\n\n      first--;\n    }\n\n    if (lastShouldIncrement && !(fillPreference === 'before' && firstShouldIncrement && firstWillAddMore)) {\n      if (lastWillAddMore) {\n        newCellCount++;\n      }\n\n      last++;\n    }\n  }\n\n  if (!(last >= first && first >= 0 && last < itemCount && first >= overscanFirst && last <= overscanLast && first <= visible.first && last >= visible.last)) {\n    throw new Error('Bad window calculation ' + JSON.stringify({\n      first: first,\n      last: last,\n      itemCount: itemCount,\n      overscanFirst: overscanFirst,\n      overscanLast: overscanLast,\n      visible: visible\n    }));\n  }\n\n  return {\n    first: first,\n    last: last\n  };\n}\n\nvar VirtualizeUtils = {\n  computeWindowedRenderLimits: computeWindowedRenderLimits,\n  elementsThatOverlapOffsets: elementsThatOverlapOffsets,\n  newRangeCount: newRangeCount\n};\nexport { computeWindowedRenderLimits, elementsThatOverlapOffsets, newRangeCount };\nexport default VirtualizeUtils;"]},"metadata":{},"sourceType":"module"}